Android Slices

https://developer.android.com/guide/slices

Slices, Google search app’inde ve umarฤฑz ki ileride de daha fazla yerde uygulamadan iรงerik sunan ui templateleridir. UI templateleridir diyoruz รงรผnkรผ belli formatda, belli templateler kullanฤฑlarak sunulabiliyor. Basitรงe widget’lara benzer de denilebilir. ลžimdi App Action‘larฤฑn da developerlara aรงฤฑlmasฤฑyla beraber daha fazla senaryo saฤŸlanabilir. Slices Android 4.4’e kadar uyumlu. Bu da Android Studio’da uygulamayฤฑ create ederken gรถrebileceฤŸimiz gibi piyasadaki cihazlarฤฑn ortalama %95’i anlamฤฑna geliyor. Slices live-data, scroll edebilen iรงerik, inline actions, ve uygulamamฤฑza deep link saฤŸlamฤฑลŸ oluyor.

Slices tasarlarken 3 nokta รถnemli.

  • Interaktif olmalฤฑ. Slices iรงerisinde kullanฤฑcฤฑ hฤฑzlฤฑca bazฤฑ ลŸeyleri gerรงekleลŸtirebilmeli.
  • Slices’ฤฑn amacฤฑna uygun olarak รถnemli, รถzet bilgiye eriลŸim saฤŸlamalฤฑ. Her ลŸey burada yer almamalฤฑ.
  • Modular olmalฤฑ. Uygulama dฤฑลŸฤฑnda da tek baลŸฤฑna yaลŸayabilmeli. Tabi bu uygulama olmadan slices olabileceฤŸi anlamฤฑna da gelmiyor.

Slices geliลŸtirmek iรงin Android Studio‘nun en az 3.2 versiyonu olmasฤฑ gerekiyor.

Bir Slice yaratmak iรงin varolan Android Studio projemizde aลŸaฤŸฤฑdaki imajdaki gibi New –> Other –> SliceProvider ฤฑ seรงip SliceProvider‘dan extend eden bir class yaratmamฤฑz gerekmektedir.

Bunu yaptฤฑฤŸฤฑmฤฑzda gradle dosyasฤฑna aลŸaฤŸฤฑdaki dependency’lerin eklendiฤŸini ve AndroidManifest.xml dosyasฤฑnda aลŸaฤŸฤฑdaki gibi provider bloฤŸunun eklendiฤŸini gรถreceฤŸiz.

implementation 'androidx.annotation:annotation:1.1.0'
implementation 'androidx.slice:slice-builders:1.0.0'

<provider
android:name=".MySliceProvider"
android:authorities="com.boncuk.slicesdemo"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.app.slice.category.SLICE"/>
<data
android:host="boncuk.com"
android:pathPrefix="/hello"
android:scheme="http"/>
</intent-filter>
</provider>

Her bir slice bir URI’yle iliลŸkilidir. Slice herhangi bir yerden gรถrรผntรผlenmek istediฤŸinde bu URI’yla uygulamaya bir binding request gรถnderilir. Uygulamamฤฑz da bu URI istediฤŸini alฤฑr ve onBindSlice methodu aracฤฑlฤฑฤŸฤฑyla Slice’ฤฑ build eder. URI’yi karลŸฤฑlayan bir Slice olmasฤฑ durumunda da gรถrรผntรผlenir.

/**
* Construct the Slice and bind data if available.
*/
override fun onBindSlice(sliceUri: Uri): Slice? {
// Note: you should switch your build.gradle dependency to
// slice-builders-ktx for a nicer interface in Kotlin.
val context = context ?: return null
val activityAction = createActivityAction() ?: return null
return if (sliceUri.path == "/hello") {
// Path recognized. Customize the Slice using the androidx.slice.builders API.
// Note: ANR and StrictMode are enforced here so don't do any heavy operations.
// Only bind data that is currently available in memory.
ListBuilder(context, sliceUri, ListBuilder.INFINITY)
.addRow(
ListBuilder.RowBuilder()
.setTitle("URI found.")
.setPrimaryAction(activityAction)
)
.build()
} else {
// Error: Path not found.
ListBuilder(context, sliceUri, ListBuilder.INFINITY)
.addRow(
ListBuilder.RowBuilder()
.setTitle("URI not found.")
.setPrimaryAction(activityAction)
)
.build()
}
}
view raw onBindSlice.kt hosted with ❤ by GitHub

Slices notifications gibi interactive olabilir. Kullanฤฑcฤฑnฤฑn aksiyonuna baฤŸlฤฑ bir PendingIntent’i Slice’a iliลŸkilendirerek actionlarฤฑ tutabilir ve yรถnlendirebiliriz. onBind methodunun iรงerisinde bu sefer ilgili pathPrefix’de Slice yaratan methodu return etmemiz gerekecek. Slices kullanฤฑcan input almamฤฑzฤฑ saฤŸlayacak toggle da olabilirdi. Toggle’ฤฑn action’ฤฑn negatif ya da pozitif olduฤŸu bilgisini kullanarak da action’ฤฑ trigger edebilirdik. Ya da mesela broadcastreceiver’dan aldฤฑฤŸฤฑ dinamik content’i de gรถsterebilir. Tรผm slices template’leri iรงin link inlecelenebilir.

fun createSlice(sliceUri: Uri): Slice {
val activityAction = createActivityAction()
return list(context, sliceUri, INFINITY) {
row {
title = "Perform action in app"
primaryAction = activityAction
}
}
}
private fun createActivityAction(): SliceAction? {
return SliceAction.create(
PendingIntent.getActivity(
context, 0, Intent(context, MainActivity::class.java), 0
),
IconCompat.createWithResource(context, R.drawable.ic_launcher_foreground),
ListBuilder.ICON_IMAGE,
"Open App"
)
}

Slices’ฤฑ test edebilmek iรงin Slices Viewer APK‘ya ihtiyacฤฑmฤฑz var. Linkten gรผncel versiyonu indirilebilir.


adb install -r -t slice-viewer.apk

Slice’ฤฑ test edebilmek iรงin, edit configurations diyerek Android App konfigรผrasyonu ekleyerek aลŸaฤŸฤฑdaki gรถrseldeki gibi pathPrefix’imizi verebiliriz.

Slices konfigurasyonunu run ettiฤŸimizde ise slice’ฤฑmฤฑzฤฑ slice viewer’da gรถrebiliriz. Az รถnce eklediฤŸimiz slice template’den eklendiฤŸi iรงin ise aลŸaฤŸฤฑdaki gibi bir ekranla karลŸฤฑlacaฤŸฤฑz.

Github Repository:

https://github.com/ElifBon/SlicesDemo

Referans ve daha fazla detay iรงin:

https://developer.android.com/guide/slices/getting-started

https://codelabs.developers.google.com/codelabs/android-slices-basic/index.html?index=..%2F..io2019#0

https://developer.android.com/guide/slices/templates

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.