Android Nougat 7.1 (API 25) membawa beberapa fitur baru seperti yang sudah saya buat pada artikel sebelumnya. Salah satu fitur tersebut adalah App Shortcut.
App Shortcut adalah sebuah jalan pintas untuk mengakses fitur atau aktivitas tertentu pada aplikasi android kita. App Shortcut ini hanya bisa diakses jika kita menggunakan Android 7.1 dan menggunakan launcher dari google maupun pixel. Untuk mengakses jalan pintas ini kita cukup melakukan tap and hold pada ikon aplikasi.
Jalan pintas yang ditampilkan terbagi menjadi dua jenis, yaitu statis dan dinamis. Urutan tampilan jalan pintas pun bisa kita urutkan sesuai kebutuhan.
Mengapa Menggunakan App Shortcut?
Fungsi utama dari fitur ini yaitu mempermudah pengguna aplikasi untuk menjalankan ataupun mengakses aktivitas maupun fitur umum yang biasa dilakukan pada aplikasi kita. Misalnya pada aplikasi chat, maka kita bisa membuat jalan pintas untuk langsung melakukan chat kepada orang-orang tertentu yang sering pengguna kita ajak mengobrol.
Static App Shortcut
Jalan pintas statis, seperti namanya, jalan pintas ini mempunyai atribut yang selalu sama di tiap versi dari aplikasi kita. Buat sebuah project dengan sebuah activity
, lalu tambahkan meta-data
ini pada file AndroidManifest.xml
di dalam tag activity
.
<meta-data
android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
pada contoh ini nama activity
adalah MainActivity
. Sehingga tampilan di dalam tag activity
seperti dibawah ini.
<!-- sisa kode tidak ditampilkan -->
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
</activity>
<!-- sisa kode tidak ditampilkan -->
Pada tag meta-data
kita mendefinisikan android:resource
yang akan mengarah ke folder res/xml/shortcuts.xml
. Pada file inilah kita menyimpan atribut static shortcut. Contoh isi filenya seperti dibawah ini.
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<shortcut
android:enabled="true"
android:icon="@drawable/ic_today"
android:shortcutDisabledMessage="@string/disabled_message"
android:shortcutId="shortcut1"
android:shortcutLongLabel="@string/long_label"
android:shortcutShortLabel="@string/short_label">
<intent
android:action="android.intent.action.VIEW"
android:targetClass="it.dekz.appshortcut.Activity2"
android:targetPackage="it.dekz.appshortcut" />
</shortcut>
</shortcuts>
Terlihat isi dari file shortcuts.xml
terdapat tag shortcuts
yang dapat menyimpan beberapa Static Shortcut pada tag shortcut
. Berikut penjelasan dari beberapa atribut shortcut:
enabled
menandakan apakah shortcut ini aktif(dapat terlihat) atau tidak.icon
untuk menetapkan ikon yang kita gunakan untuk shortcut tersebut.shortcutDisabledMessage
adalah pesan yang ditampilkan jika shortcut berstatus disabled, namun pengguna sudah melakukan pin terhadap shortcut tersebut, sehingga ikon shortcut akan berwarna abu-abu dan pengguna melakukan klik ke ikon tersebut.shortcutId
merupakan ID atau pengenal.shortcutLongLabel
label shortcut yang ditampilkan bila space mencukupi.shortcutShortLabel
label shortcut default.intent
disini kita menambahkan action dari shortcut. Pada contoh ini shortcut akan membuka sebuahactivity
yang berlokasi diit.dekz.appshortcut.Activity2
.
Silahkan buat Activity2
beserta layout dan data di AndroidManifest.xml
untuk melakukan tes terhadap Static Shortcut yang sudah dibuat.
Jika kita perhatikan, saat kita menekan tombol back, aplikasi justru kembali ke home screen, untuk kita diperlukan back stack intent untuk mendefinisikan MainActivity
sebagai root activity
. Contoh penambahannya seperti dibawah ini.
<shortcut
android:enabled="true"
android:icon="@drawable/ic_today"
android:shortcutDisabledMessage="@string/disabled_message"
android:shortcutId="shortcut1"
android:shortcutLongLabel="@string/long_label"
android:shortcutShortLabel="@string/short_label">
<intent
android:action="android.intent.action.MAIN"
android:targetClass="it.dekz.appshortcut.MainActivity"
android:targetPackage="it.dekz.appshortcut"/>
<intent
android:action="android.intent.action.VIEW"
android:targetClass="it.dekz.appshortcut.Activity2"
android:targetPackage="it.dekz.appshortcut" />
</shortcut>
Sehingga urutan activity
menjadi MainActivity
-> Activity2
dan saat kita menekan tombol back aplikasi akan menuju ke MainActivity
.
Dynamic App Shortcut
Jalan pintas dinamis, dapat dibuat dan diupdate saat aplikasi sedang berjalan (runtime) tanpa harus melakukan deploy aplikasi berulang-ulang. Shortcut ini tidak dibuat dalam file shortcuts.xml
seperti Static App Shortcut, melainkan pada koding aplikasi.
Untuk membuat jalan pintas dinamis, kita menggunakan ShortcutManager
API, contoh penggunaannya pada MainActivity
seperti code dibawah ini.
//buat list untuk menampung shortcut
List<ShortcutInfo> shortcutInfos = new ArrayList<>();
//cek jika os menggunakan API 25
if (android.os.Build.VERSION.SDK_INT >= 25) {
//inisiasi ShortcutManager
ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
//membuat object shortcutInfo
ShortcutInfo shortcutInfo = new ShortcutInfo.Builder(this, "web_shortcut")
.setShortLabel("dekzitfz.github.io")
.setLongLabel("Visit dekzitfz github pages")
.setIcon(Icon.createWithResource(this, R.drawable.ic_web))
.setIntent(new Intent(Intent.ACTION_VIEW, Uri.parse("https://dekzitfz.github.io/")))
.build();
//tambahkan objeck ke dalam list
shortcutInfos.add(shortcutInfo);
//set shortcut dinamis
shortcutManager.setDynamicShortcuts(shortcutInfos);
}
Disini kita menggunakan ShortcutManager
untuk membuat object bertipe SHortcutInfo
. Dengan menggunakan ShortcutInfo.Builder
kita dapat menerapkan atribut-atribut shortcut seperti yang kita lakukan sebelumnya pada Jalan Pintas Statis. Hasil dari kode diatas akan terlihat seperti dibawah ini.
Jika kita ingin menambah bac stack intent seperti pada Jalan Pintas Statis, kita bisa menambahkan intent
menggunakan setIntents()
. Contohnya kodenya seperti dibawah ini.
ShortcutInfo dynamicShortcut = new ShortcutInfo.Builder(this, "shortcut_dinamis")
.setShortLabel("Dinamis")
.setLongLabel("buka shortcut dinamis")
.setIcon(Icon.createWithResource(this, R.drawable.ic_today))
.setIntents(
new Intent[]{
new Intent(Intent.ACTION_MAIN, Uri.EMPTY, this, MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK),
new Intent(Intent.ACTION_VIEW, Uri.EMPTY, this, Activity3.class)
})
.build();
Tentunya jangan lupa untuk membuat class dan layout untuk Activity3
. Untuk data pada AndroidManifest.xml
tambahkan intent-filter
seperti dibawah ini.
<activity
android:name=".Activity3"
android:label="Dynamic shortcut activity">
<intent-filter>
<action android:name="it.dekz.appshortcut.OPEN_DYNAMIC_SHORTCUT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Mengurutkan Shortcut
Urutan shortcut yang tampil bisa kita urutkan sesuai kebutuhan dengan menggunakan setRank(int rank)
pada ShortcutInfo.Builder
. Semakin tinggi nilai rank, semakin diatas posisi shortcut tersebut.
Bagi yang ingin melihat contoh dari penerapan App Shortcut ini bisa cek ke repo AppShortcut di Github.
Referensi:
- https://developer.android.com/guide/topics/ui/shortcuts.html