<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Agung Sukariman | Digital Marketer &amp; Tech Tinkerer</title><link>https://agungsukariman.com/tags/tcl/</link><description>Digital marketing specialist sharing stories about cycling, tech DIY, and personal growth. Based in Jakarta.</description><generator>Hugo -- gohugo.io</generator><language>EN</language><lastBuildDate>Sat, 24 Oct 2026 11:30:00 +0700</lastBuildDate><atom:link href="https://agungsukariman.com/tags/tcl/index.xml" rel="self" type="application/rss+xml"/><item><title>Niat Ganti Launcher TV TCL, Malah Ribut Sama Tombol Home</title><link>https://agungsukariman.com/blog/niat-ganti-launcher-tv-tcl-malah-ribut-sama-tombol-home/</link><pubDate>Sat, 24 Oct 2026 11:30:00 +0700</pubDate><guid>https://agungsukariman.com/blog/niat-ganti-launcher-tv-tcl-malah-ribut-sama-tombol-home/</guid><description>&lt;p&gt;Jadi gini. Gue nemu launcher Android TV yang tampilannya enak banget dilihat. Namanya CleanFrame TV. Aplikasi yang gue pakai, wallpaper, jam. Udah. Gue lihat, terus mikir: &lt;em&gt;ini kayaknya cocok buat TV TCL gue.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Rencananya sederhana: download APK, install lewat ADB, jadiin default launcher. Beres, lanjut nonton.&lt;/p&gt;
&lt;p&gt;Yang terjadi: gue malah bolak-balik terminal, ngecek log, bikin fork, build APK sendiri, terus debat sama satu tombol di remote.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tombol Home.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Wkwk. Setelah &lt;a href="https://agungsukariman.com/blog/cara-flash-xiaomi-router-3-openwrt-adblock/"&gt;router Xiaomi gue oprek&lt;/a&gt;, sekarang giliran TV yang nggak bisa gue biarin hidup tenang.&lt;/p&gt;</description><content:encoded>&lt;p&gt;Jadi gini. Gue nemu launcher Android TV yang tampilannya enak banget dilihat. Namanya CleanFrame TV. Aplikasi yang gue pakai, wallpaper, jam. Udah. Gue lihat, terus mikir: &lt;em&gt;ini kayaknya cocok buat TV TCL gue.&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Rencananya sederhana: download APK, install lewat ADB, jadiin default launcher. Beres, lanjut nonton.&lt;/p&gt;&#10;&lt;p&gt;Yang terjadi: gue malah bolak-balik terminal, ngecek log, bikin fork, build APK sendiri, terus debat sama satu tombol di remote.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Tombol Home.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Wkwk. Setelah &lt;a href="https://agungsukariman.com/blog/cara-flash-xiaomi-router-3-openwrt-adblock/"&gt;router Xiaomi gue oprek&lt;/a&gt;, sekarang giliran TV yang nggak bisa gue biarin hidup tenang.&lt;/p&gt;&#10;&lt;h2 id="ketemu-cleanframe-tv"&gt;Ketemu CleanFrame TV&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/mdrzn/cleanframe-tv"&gt;CleanFrame TV&lt;/a&gt; ini port Android dari &lt;a href="https://github.com/nthnclrk/CleanFrame"&gt;CleanFrame&lt;/a&gt; buatan Nathan Clark, yang awalnya buat Samsung The Frame. Port Android-nya dikerjain mdrzn. Jadi fondasi tampilan yang cakep ini kerjaan mereka; gue datang belakangan buat ngoprek supaya cocok di TV gue.&lt;/p&gt;&#10;&lt;p&gt;Di dokumentasi yang gue baca, perangkat referensinya Xiaomi Mi TV Q1. Sementara punya gue TCL Smart TV Pro, Android 11.&lt;/p&gt;&#10;&lt;p&gt;Sama-sama Android TV, tapi ternyata urusan tombol Home nggak sesederhana install aplikasi biasa.&lt;/p&gt;&#10;&lt;p&gt;Gue ngerjain ini bareng Codex. Gue nyobain di TV, ngasih hasil terminal, bilang kalau macet. Codex bantu baca source, nyusun perubahan, build, dan ngecek hasilnya. Ada fase gue cuma bisa bilang, &lt;em&gt;“lah, balik lagi.”&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Kalimat itu lumayan sering keluar.&lt;/p&gt;&#10;&lt;h2 id="terminal-bilang-success-tv-bilang-nggak-dulu"&gt;Terminal Bilang Success, TV Bilang Nggak Dulu&lt;/h2&gt;&#10;&lt;p&gt;Awalnya koneksi ADB aja sempat nggak ketemu. Sempat juga dapat &lt;code&gt;Connection refused&lt;/code&gt;. Setelah koneksinya beres, APK bisa dipasang dan CleanFrame bisa dibuka.&lt;/p&gt;&#10;&lt;p&gt;Nah, bagian ngeselinnya mulai pas gue set jadi Home.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;adb shell cmd package set-home-activity io.github.mdrzn.cleanframetv/.HomeActivity&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Terminal jawab:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Success&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Gue pencet Home. Balik ke launcher bawaan Google TV.&lt;/p&gt;&#10;&lt;p&gt;Gue cek lagi aplikasi yang dipilih Android buat nangani Home:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;adb shell cmd package resolve-activity --brief &lt;span style="color:#ae81ff"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -a android.intent.action.MAIN &lt;span style="color:#ae81ff"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -c android.intent.category.HOME&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Yang keluar masih:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;com.google.android.apps.tv.launcherx/.home.VanillaModeHomeActivity&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Jadi perintahnya diterima, tapi hasil yang gue mau belum kejadian. CleanFrame bisa jalan; tombol Home tetap ngajak pulang ke rumah yang lama.&lt;/p&gt;&#10;&lt;p&gt;Di salah satu percobaan, layarnya bahkan sempat stuck. Launcher bawaan dibuka lagi, baru TV bisa dipakai lagi. Di situ gue mulai sadar: ini mesti dicek pelan-pelan, jangan cuma percaya tulisan &lt;code&gt;Success&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h2 id="bikin-jalan-memutar-dulu"&gt;Bikin Jalan Memutar Dulu&lt;/h2&gt;&#10;&lt;p&gt;Akhirnya kita bikin versi fork dengan penyesuaian buat TCL. Salah satu yang ketemu: jalur buat buka pengaturan Accessibility di TV ini beda. Intent standar yang dicoba malah nyangkut ke komponen placeholder; jalur OEM TCL baru membuka halaman pengaturan yang bener.&lt;/p&gt;&#10;&lt;p&gt;Solusi awalnya pakai accessibility service buat mengarahkan balik ke CleanFrame ketika launcher Google TV muncul. Setelah service-nya aktif dan tersambung, tombol Home mulai terasa enak dipakai.&lt;/p&gt;&#10;&lt;p&gt;Tapi ada detail kecil: kalau dari Settings terus pencet Home, launcher bawaan kadang masih kelihatan sebentar sebelum pindah.&lt;/p&gt;&#10;&lt;p&gt;Jadi waktu itu LauncherX masih hidup. Kita baru berhasil mengarahkan tampilan balik ke CleanFrame. Pantesan gue sempat nanya, &lt;em&gt;“berarti ini belum disable ya?”&lt;/em&gt;&lt;/p&gt;&#10;&lt;h2 id="gue-sempat-curiga-bootloader"&gt;Gue Sempat Curiga Bootloader&lt;/h2&gt;&#10;&lt;p&gt;Terus kita coba disable LauncherX. Sempat jalan, tapi habis reboot dia aktif lagi.&lt;/p&gt;&#10;&lt;p&gt;Mulai deh otak gue cari tersangka: bootloader masih locked? Watchdog sistem? TCL Guard?&lt;/p&gt;&#10;&lt;p&gt;Kita juga baca &lt;a href="https://github.com/eliotcougar/tcl-guard-manager"&gt;TCL Guard Manager&lt;/a&gt;, utility buat ngatur izin startup dan pengelolaan proses oleh TGuard. Tapi dari log yang kita punya, &lt;strong&gt;belum ketahuan proses mana yang mengaktifkan LauncherX lagi.&lt;/strong&gt; Gue nggak punya bukti buat bilang watchdog pelakunya, apalagi langsung menyalahkan bootloader.&lt;/p&gt;&#10;&lt;p&gt;Ada detail lain dari pemeriksaan Home: selain LauncherX, ada activity recovery Google yang juga terdaftar buat menangani Home. Jadi waktu satu launcher dimatiin, bukan otomatis CleanFrame yang dipilih.&lt;/p&gt;&#10;&lt;p&gt;Gue akhirnya nggak unlock bootloader. Buat hasil yang sekarang jalan, itu nggak diperlukan.&lt;/p&gt;&#10;&lt;h2 id="yang-akhirnya-jalan-di-tv-gue"&gt;Yang Akhirnya Jalan di TV Gue&lt;/h2&gt;&#10;&lt;p&gt;Setelah CleanFrame versi TCL bisa dibuka dan dipakai, gue disable dua package ini:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;adb shell pm disable-user --user &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; com.google.android.apps.tv.launcherx&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;adb shell pm disable-user --user &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; com.google.android.tungsten.setupwraith&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Setelah itu, pemeriksaan Home menunjuk langsung ke versi TCL kita:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;io.github.mdrzn.cleanframetv.tcl/io.github.mdrzn.cleanframetv.HomeActivity&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Gue tes reboot, dan kali ini tetap bertahan. Pengecekan ADB setelahnya juga menunjukkan dua package tadi masih disabled. Dari Settings, pencet Home balik ke CleanFrame.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Akhirnya.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Catatan buat yang mau ngikutin: ini hasil di &lt;strong&gt;TV dan firmware gue&lt;/strong&gt;, bukan jaminan semua TCL bakal sama. &lt;code&gt;setupwraith&lt;/code&gt; juga bagian dari UI setup/recovery Google. Jadi gue pastiin launcher pengganti sudah jalan dan ADB masih bisa diakses sebelum mengubahnya. Ini disable buat user 0; package-nya masih terpasang.&lt;/p&gt;&#10;&lt;p&gt;Kalau perlu balikin, dua package itu bisa diaktifkan lagi:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;adb shell pm enable --user &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; com.google.android.tungsten.setupwraith&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;adb shell pm enable --user &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; com.google.android.apps.tv.launcherx&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Kalau service pengalih Home tadi masih aktif, matikan juga supaya nggak terus diarahkan balik. Langkah setup dan pemulihan lengkap gue taruh di &lt;a href="https://github.com/mewt/cleanframe-tv/blob/main/docs/tcl-compatibility.md"&gt;panduan TCL dalam fork&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Gue seneng hasilnya bertahan setelah reboot. Tapi itu tetap belum membuktikan siapa yang sebelumnya mengaktifkan LauncherX. Yang bisa gue bilang: kombinasi terakhir ini bekerja di setup gue.&lt;/p&gt;&#10;&lt;h2 id="sudah-jalan-malah-nambah-wallpaper"&gt;Sudah Jalan, Malah Nambah Wallpaper&lt;/h2&gt;&#10;&lt;p&gt;Harusnya selesai di situ.&lt;/p&gt;&#10;&lt;p&gt;Tentu saja nggak. Gue malah nanya: &lt;em&gt;“wallpaper-nya bisa custom? Unsplash? Gambar anime 4K?”&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Dari satu masalah tombol Home, berkembang jadi fitur pencarian foto. Scope proyek rumahan emang suka kurang ajar.&lt;/p&gt;&#10;&lt;p&gt;Di build lokal, kita tambahin picker Unsplash. Alurnya:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Buka &lt;strong&gt;Settings → Background → Unsplash → Find photos&lt;/strong&gt;.&lt;/li&gt;&#10;&lt;li&gt;Cari gambar, misalnya &lt;code&gt;anime landscape&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;Pilih hasil buat lihat preview.&lt;/li&gt;&#10;&lt;li&gt;Tekan &lt;strong&gt;Use on Home&lt;/strong&gt; buat memakai sekaligus menyimpannya ke koleksi.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Ada filter &lt;strong&gt;4K sources only&lt;/strong&gt;, jadi hasil yang ditampilkan punya ukuran asli minimal 3840 × 2160. Nama fotografer dan Unsplash tetap tampil. Access key disimpan di penyimpanan privat aplikasi di TV; nggak dimasukkan ke source atau APK.&lt;/p&gt;&#10;&lt;p&gt;Pas dites, pencarian di TV berhasil, preview kebuka, dan gambar yang dipakai Home terverifikasi berukuran &lt;strong&gt;3840 × 2160&lt;/strong&gt;. Ini ukuran gambarnya ya, bukan berarti kita mengubah UI compositor TCL jadi native 4K.&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://agungsukariman.com/img/uploads/cleanframe-tcl-unsplash.png" alt="Home CleanFrame di TCL dengan wallpaper bangunan dan pepohonan merah dari Unsplash, daftar YouTube, Netflix, TV, serta jam dan kontrol Home"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Hasil di TV gue. Wallpaper oleh Wolfgang Hasselmann di &lt;a href="https://unsplash.com/photos/-DPC6p0pKP4?utm_source=cleanframe_tv&amp;amp;utm_medium=referral"&gt;Unsplash&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Hasil pencarian &lt;code&gt;anime landscape&lt;/code&gt; juga tergantung koleksi Unsplash. Jangan bayangin semua yang muncul pasti ilustrasi anime. Gue pilih gambar yang cocok di mata aja.&lt;/p&gt;&#10;&lt;p&gt;Yang lucu, setelah dipasang gue masih nanya: &lt;em&gt;“kok cuma download satu foto?”&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Ternyata memang cuma foto yang gue pilih lewat &lt;strong&gt;Use on Home&lt;/strong&gt; yang disimpan. Hasil search itu pilihan, belum jadi koleksi. Kalau mau wallpaper bergantian, gue pilih dan simpan beberapa dulu, baru nyalain Rotation.&lt;/p&gt;&#10;&lt;p&gt;Oh. Iya juga. Wkwk.&lt;/p&gt;&#10;&lt;h2 id="bagian-yang-bikin-gue-tenang"&gt;Bagian yang Bikin Gue Tenang&lt;/h2&gt;&#10;&lt;p&gt;Kita nggak berhenti di APK berhasil di-build. Fitur Unsplash ini lolos 518 pemeriksaan browser dan 34 unit test Android. Di TV juga dicoba pencarian beneran, preview, pemilihan lewat input tombol remote, dan balik ke Home. Setelah launcher di-reload, pilihannya tetap tersimpan.&lt;/p&gt;&#10;&lt;p&gt;Ada salinan lokal yang sudah diproses buat fallback kalau gambar online gagal dimuat; jalur offline-nya diuji di browser. Gue belum nyabut internet TV buat mengetes skenario itu langsung, jadi nggak mau ngaku sudah.&lt;/p&gt;&#10;&lt;p&gt;Buat gue, bagian paling kepake dari kerja bareng Codex justru proses ngecek ini. Gue bisa fokus lihat TV dan bilang apa yang terasa aneh, lalu kita cocokkan sama log dan perilaku aplikasinya. Tebakan soal bootloader nggak perlu berubah jadi tindakan besar kalau buktinya belum ada.&lt;/p&gt;&#10;&lt;h2 id="sekarang-tv-nya-bisa-dipakai-nonton-lagi"&gt;Sekarang TV-nya Bisa Dipakai Nonton Lagi&lt;/h2&gt;&#10;&lt;p&gt;Fork TCL-nya ada di &lt;a href="https://github.com/mewt/cleanframe-tv"&gt;GitHub gue&lt;/a&gt;. &lt;strong&gt;Fitur Unsplash masih eksperimen lokal dan terpasang di TV gue; belum gue push.&lt;/strong&gt; Jadi kalau lo buka repository itu dan belum nemu menu Unsplash, memang belum ada di versi publiknya.&lt;/p&gt;&#10;&lt;p&gt;Yang gue suka dari hasil akhirnya sederhana: pencet Home, aplikasi yang gue pakai kelihatan, wallpaper sesuai selera gue. TV-nya terasa lebih enak dipakai.&lt;/p&gt;&#10;&lt;p&gt;Niat awal cuma install APK. Ujungnya belajar soal Home resolver, accessibility, package state, dan kenapa tulisan &lt;code&gt;Success&lt;/code&gt; di terminal perlu dibuktikan di layar.&lt;/p&gt;&#10;&lt;p&gt;Sekarang tinggal satu pekerjaan yang dari tadi ketunda: beneran nonton.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Cheers (dan semoga tombol Home nggak ngajak ribut lagi),&#10;Agung Sukariman&lt;/strong&gt;&lt;/p&gt;&#10;</content:encoded></item></channel></rss>