টাইল ভার্সনিং

Wear OS ডিভাইসে, দুটি মূল কম্পোনেন্ট দ্বারা টাইলের রেন্ডারিং করা হয়, যেগুলির স্বাধীন ভার্সনিং থাকে। সব ডিভাইস জুড়ে আপনার অ্যাপের টাইল সঠিকভাবে কাজ করতে, এই অন্তর্নিহিত আর্কিটেকচার বোঝা গুরুত্বপূর্ণ।

  • Jetpack টাইল-সম্পর্কিত লাইব্রেরি: এই লাইব্রেরি (Wear Tiles ও Wear ProtoLayout সহ) আপনার অ্যাপে এম্বেড করা আছে এবং আপনি, একজন ডেভেলপার হিসেবে, এগুলির ভার্সন কন্ট্রোল করেন। সিস্টেমের onTileRequest() কলের উত্তরে আপনার অ্যাপ এই লাইব্রেরি ব্যবহার করে একটি TileBuilder.Tile অবজেক্ট (আপনার Tile-এর ডেটা স্ট্রাকচার) তৈরি করে।
  • ProtoLayout রেন্ডারার: এই সিস্টেম কম্পোনেন্ট ডিসপ্লেতে Tile অবজেক্ট রেন্ডার করা এবং ব্যবহারকারীর ইন্টার‍্যাকশন ম্যানেজ করার জন্য দায়ী। রেন্ডারারের ভার্সন অ্যাপ ডেভেলপার কন্ট্রোল করেন না এবং এটি ডিভাইস ভেদে আলাদা হতে পারে, এমনকি একই হার্ডওয়্যার থাকা ডিভাইসেও।

আপনার অ্যাপের Jetpack Tiles লাইব্রেরি ভার্সন এবং ব্যবহারকারীর ডিভাইসে ProtoLayout রেন্ডারার ভার্সন, এই দুটির উপর ভিত্তি করে কোনও Tile-এর চেহারা বা আচরণ আলাদা হতে পারে। যেমন, একটি ডিভাইসে রোটেট করা বা হার্ট রেট ডেটা ডিসপ্লে করার সুবিধা থাকতে পারে, অন্যটিতে নাও থাকতে পারে।

এই ডকুমেন্ট থেকে আপনি জানতে পারবেন যে কীভাবে Tiles লাইব্রেরি এবং ProtoLayout Renderer-এর বিভিন্ন ভার্সনের সাথে আপনার অ্যাপ মানানসই করে তুলতে হয়। এছাড়াও, এটি ব্যাখ্যা করে যে কীভাবে উন্নত Jetpack লাইব্রেরি ভার্সনে মাইগ্রেট করতে হয়।

মানানসই কিনা বিবেচনা করুন

বিভিন্ন ডিভাইসে সঠিকভাবে কাজ করে এমন একটি Tile তৈরি করতে, বিভিন্ন ফিচার সাপোর্ট করার কথা বিবেচনা করুন। আপনি দুটি প্রধান স্ট্র্যাটেজির মাধ্যমে এটি করতে পারেন: রানটাইমে রেন্ডারারের ক্ষমতা শনাক্ত করা এবং বিল্ট-ইন ফলব্যাক প্রদান করা।

রেন্ডারারের ক্ষমতা শনাক্ত করা

কোনও ডিভাইসে উপলভ্য ফিচারের উপর ভিত্তি করে আপনি ডাইনামিক উপায়ে আপনার টাইলের লেআউট পরিবর্তন করতে পারবেন।

রেন্ডারারের ভার্সন শনাক্ত করা

  • আপনার onTileRequest() পদ্ধতিতে পাস করা DeviceParameters অবজেক্টের getRendererSchemaVersion() পদ্ধতি ব্যবহার করুন। এই পদ্ধতি ডিভাইসে ProtoLayout Renderer-এর মেজর ও মাইনর ভার্সন নম্বর রিটার্ন করে।
  • তারপরে, আপনার onTileRequest()ইমপ্লিমেন্টেশনে কন্ডিশনাল লজিক ব্যবহার করে, শনাক্ত করা রেন্ডারার ভার্সনের উপর ভিত্তি করে আপনার টাইলের ডিজাইন বা আচরণ অ্যাডজাস্ট করতে পারবেন।

@RequiresSchemaVersion অ্যানোটেশন

  • ProtoLayout পদ্ধতির @RequiresSchemaVersion অ্যানোটেশন থেকে বোঝা যায় যে সেই পদ্ধতিকে ডকুমেন্টেশনে যেমন বর্ণনা করা হয়েছে (উদাহরণ), সেইভাবে কাজ করার জন্য ন্যূনতম কোন রেন্ডারার স্কিমা ভার্সন প্রয়োজন।
    • ডিভাইসে উপলভ্য রেন্ডারার ভার্সনের চেয়ে বেশি ভার্সন প্রয়োজন এমন কোনও মেথড কল করলে, আপনার অ্যাপ ক্র্যাশ করবে না, তবে এর ফলে কন্টেন্ট দেখানো নাও হতে পারে অথবা ফিচারটি উপেক্ষা করা হতে পারে।

ভার্সন শনাক্তকরণের উদাহরণ

val rendererVersion = requestParams.deviceConfiguration.rendererSchemaVersion

val arcElement =
    // DashedArcLine has the annotation @RequiresSchemaVersion(major = 1, minor = 500)
    // and so is supported by renderer versions 1.500 and greater
    if (
        rendererVersion.major > 1 ||
        (rendererVersion.major == 1 && rendererVersion.minor >= 500)
    ) {
        // Use DashedArcLine if the renderer supports it …
        DashedArcLine.Builder()
            .setLength(degrees(270f))
            .setThickness(8f)
            .setLinePattern(
                LayoutElementBuilders.DashedLinePattern.Builder()
                    .setGapSize(8f)
                    .setGapInterval(10f)
                    .build()
            )
            .build()
    } else {
        // … otherwise use ArcLine.
        ArcLine.Builder().setLength(degrees(270f)).setThickness(dp(8f)).build()
    }

ফলব্যাক প্রদান করা

কিছু রিসোর্স আপনাকে সরাসরি বিল্ডারে ফলব্যাক নির্ধারণ করতে দেয়। এটি প্রায়শই রেন্ডারার ভার্সন চেক করার চেয়ে সহজ এবং উপলভ্য হলে এটিই পছন্দের পদ্ধতি।

Lottie অ্যানিমেশনের ফলব্যাক হিসেবে স্ট্যাটিক ছবি প্রদান করা হল একটি সাধারণ ব্যবহার। ডিভাইসে Lottie অ্যানিমেশন কাজ না করলে, তার পরিবর্তে স্ট্যাটিক ছবি রেন্ডার করা হবে।

val lottieImage =
    ResourceBuilders.ImageResource.Builder()
        .setAndroidLottieResourceByResId(
            ResourceBuilders.AndroidLottieResourceByResId.Builder(R.raw.lottie)
                .setStartTrigger(createOnVisibleTrigger())
                .build()
        )
        // Fallback if lottie is not supported
        .setAndroidResourceByResId(
            ResourceBuilders.AndroidImageResourceByResId.Builder()
                .setResourceId(R.drawable.lottie_fallback)
                .build()
        )
        .build()

বিভিন্ন রেন্ডারার ভার্সন দিয়ে পরীক্ষা করে দেখুন

বিভিন্ন রেন্ডারার ভার্সনের সাথে আপনার টাইল পরীক্ষা করতে, Wear OS এমুলেটরের বিভিন্ন ভার্সনে সেগুলি ডেপ্লয় করুন। (ফিজিক্যাল ডিভাইসে, ProtoLayout Renderer আপডেট Play Store বা সিস্টেম আপডেটের মাধ্যমে ডেলিভার করা হয়। কোনও নির্দিষ্ট রেন্ডারার ভার্সন ইনস্টল করার জন্য বাধ্য করা সম্ভব নয়।)

Android Studio-এর টাইল প্রিভিউ ফিচার, আপনার কোড নির্ভর করে এমন Jetpack ProtoLayout লাইব্রেরিতে এম্বেড করা রেন্ডারার ব্যবহার করে, তাই অন্য একটি পদ্ধতি হল টাইল পরীক্ষা করার সময় বিভিন্ন Jetpack লাইব্রেরি ভার্সনের উপর নির্ভর করা।

Tiles 1.5 / ProtoLayout 1.3 (Material 3 Expressive)-এ মাইগ্রেট করা

সিস্টেমের সাথে আপনার টাইল নির্বিঘ্নে ইন্টিগ্রেট করার জন্য UI পরিবর্তন সহ, লেটেস্ট উন্নতিগুলির সুবিধা নিতে আপনার Jetpack টাইল লাইব্রেরি আপডেট করুন।

Jetpack Tiles 1.5 এবং Jetpack ProtoLayout 1.3-এ বেশ কিছু উল্লেখযোগ্য উন্নতি ও পরিবর্তন করা হয়েছে। এগুলির মধ্যে রয়েছে:

  • UI-এর বিবরণ দেওয়ার জন্য Compose-এর মতো API.
  • Material 3 Expressive কম্পোনেন্ট, যার মধ্যে রয়েছে বটম-হ্যাগিং এজ বোতাম এবং উন্নত ভিজ্যুয়ালের জন্য সহায়তা: Lottie অ্যানিমেশন, আরও গ্রেডিয়েন্ট টাইপ এবং নতুন আর্ক লাইন স্টাইল। - মনে রাখবেন: এইসব ফিচারের মধ্যে কিছু ফিচার নতুন API-তে মাইগ্রেট না করেও ব্যবহার করা যেতে পারে।

সাজেশন

আপনার টাইল মাইগ্রেট করার সময় এইসব সাজেশন মেনে চলুন:

  • একসাথে আপনার সব টাইল মাইগ্রেট করুন। আপনার অ্যাপের মধ্যে টাইলের ভার্সন মিশিয়ে দেবেন না। Material 3 কম্পোনেন্ট আলাদা আর্টিফ্যাক্টে (androidx.wear.protolayout:protolayout-material3) থাকে—এর ফলে একই অ্যাপে M2.5 ও M3 টাইলের ব্যবহার টেকনিক্যালি সম্ভব—তবে আমরা দৃঢ়ভাবে এই পদ্ধতির বিরোধিতা করি, যদি না এটি একেবারে অপরিহার্য হয় (যেমন, আপনার অ্যাপে যদি প্রচুর সংখ্যক টাইল থাকে যা একসাথে মাইগ্রেট করা যায় না)।
  • Tiles UX নির্দেশিকা মেনে চলুন। টাইলগুলি অত্যন্ত সুগঠিত ও টেমপ্লেট নির্ভর হওয়ায়, আপনার নিজস্ব ডিজাইন শুরু করার জন্য আগে থেকে থাকা স্যাম্পেল-এর ডিজাইন ব্যবহার করুন।
  • বিভিন্ন স্ক্রিন ও ফন্ট সাইজে পরীক্ষা করুন। টাইলগুলিতে প্রায়ই প্রচুর তথ্য থাকে, যার ফলে টেক্সট (বিশেষত বোতামে প্লেস করা হলে) ওভারফ্লো ও ক্লিপিংয়ের সম্ভাবনা থাকে। এটি কমানোর জন্য, আগে থেকে তৈরি করা কম্পোনেন্ট ব্যবহার করুন এবং খুব বেশি কাস্টমাইজ করা এড়িয়ে চলুন। Android Studio-র টাইলের প্রিভিউ ফিচার ব্যবহার করে এবং একাধিক আসল ডিভাইসে পরীক্ষা করুন।

মাইগ্রেশন প্রসেস

আপনার টাইল মাইগ্রেট করতে, এইসব ধাপ অনুসরণ করুন:

ডিপেন্ডেন্সি আপডেট করা

প্রথমে, আপনার build.gradle.kts ফাইল আপডেট করুন। ভার্সন আপডেট করুন এবং protolayout-material নির্ভরতা পরিবর্তন করে protolayout-material3 করুন, যেমন দেখানো হয়েছে:

// In build.gradle.kts

//val tilesVersion = "1.4.1"
//val protoLayoutVersion = "1.2.1"

// Use these versions for M3.
val tilesVersion = "1.5.0"
val protoLayoutVersion = "1.3.0"

 dependencies {
     // Use to implement support for wear tiles
     implementation("androidx.wear.tiles:tiles:$tilesVersion")

     // Use to utilize standard components and layouts in your tiles
     implementation("androidx.wear.protolayout:protolayout:$protoLayoutVersion")

     // Use to utilize components and layouts with Material Design in your tiles
     // implementation("androidx.wear.protolayout:protolayout-material:$protoLayoutVersion")
     implementation("androidx.wear.protolayout:protolayout-material3:$protoLayoutVersion")

     // Use to include dynamic expressions in your tiles
     implementation("androidx.wear.protolayout:protolayout-expression:$protoLayoutVersion")

     // Use to preview wear tiles in your own app
     debugImplementation("androidx.wear.tiles:tiles-renderer:$tilesVersion")

     // Use to fetch tiles from a tile provider in your tests
     testImplementation("androidx.wear.tiles:tiles-testing:$tilesVersion")
 }

TileService-এ বিশেষ কোনও পরিবর্তন করা হয়নি

এই মাইগ্রেশনের মূল পরিবর্তনগুলি UI কম্পোনেন্টকে প্রভাবিত করে। এর ফলে, আপনার TileService প্রয়োগে, রিসোর্স লোডিং মেকানিজম সহ, ন্যূনতম পরিবর্তন বা কোনও পরিবর্তন করার প্রয়োজন হবে না।

এর প্রধান ব্যতিক্রম হল টাইল অ্যাক্টিভিটি ট্র্যাক করা: আপনার অ্যাপ onTileEnterEvent() বা onTileLeaveEvent() ব্যবহার করলে, আমরা সাজেস্ট করি যে আপনি onRecentInteractionEventsAsync()-এ মাইগ্রেট করুন। API 36 থেকে শুরু করে, এইসব ইভেন্ট ব্যাচ করা হবে।

লেআউট-জেনারেটিং কোড অ্যাডাপ্ট করা

ProtoLayout 1.2 (M2.5)-এ, onTileRequest() মেথড একটি TileBuilders.Tile রিটার্ন করে। এই অবজেক্টে বিভিন্ন এলিমেন্ট রয়েছে, যার মধ্যে একটি হল TimelineBuilders.Timeline, যার মধ্যে আবার LayoutElement রয়েছে যা টাইলের UI বর্ণনা করে।

ProtoLayout 1.3 (M3)-এ, সামগ্রিক ডেটা স্ট্রাকচার ও ফ্লো অপরিবর্তিত থাকলেও, LayoutElement এখন কম্পোজ-অনুপ্রাণিত অ্যাপ্রোচ ব্যবহার করে তৈরি করা হয়, যেখানে আগে থেকে নির্দিষ্ট করা স্লট-এর উপর ভিত্তি করে লেআউট তৈরি করা হয়। এই স্লটগুলি (উপর থেকে নিচে) হল titleSlot (ঐচ্ছিক; সাধারণত প্রাথমিক শীর্ষক বা হেডিংয়ের জন্য), mainSlot (বাধ্যতামূলক; মূল কন্টেন্টের জন্য) এবং bottomSlot (ঐচ্ছিক; প্রায়শই এজ বোতামের মতো অ্যাকশন বা সংক্ষিপ্ত টেক্সটের মতো অতিরিক্ত তথ্যের জন্য)। এই লেআউটটি primaryLayout() ফাংশনের মাধ্যমে তৈরি করা হয়েছে।

mainSlot, titleSlot, bottomSlot সহ টাইল লেআউট
ছবি ১.: টাইলের স্লট।
M2.5 ও M3 লেআউট ফাংশনের তুলনা

M2.5

fun myLayout(
    context: Context,
    deviceConfiguration: DeviceParametersBuilders.DeviceParameters
) =
    PrimaryLayout.Builder(deviceConfiguration)
        .setResponsiveContentInsetEnabled(true)
        .setContent(
            Text.Builder(context, "Hello World!")
                .setTypography(Typography.TYPOGRAPHY_BODY1)
                .build()
        )
        .build()

M3

fun myLayout(
    context: Context,
    deviceConfiguration: DeviceParametersBuilders.DeviceParameters,
) =
    materialScope(context, deviceConfiguration) {
        primaryLayout(mainSlot = { text("Hello, World!".layoutString) })
    }

প্রধান পার্থক্যগুলি হাইলাইট করতে:

  1. বিল্ডারদের বাদ দেওয়া। Material UI কম্পোনেন্টের জন্য আগের বিল্ডার প্যাটার্নকে আরও ডিক্ল্যারেটিভ, Compose-অনুপ্রাণিত সিনট্যাক্স দিয়ে প্রতিস্থাপন করা হয়েছে। (এছাড়াও, String/Color/Modifiers-এর মতো UI-বহির্ভূত কম্পোনেন্ট নতুন Kotlin র‍্যাপার পায়।)
  2. স্ট্যান্ডার্ডাইজড ইনিশিয়ালাইজেশন ও লেআউট ফাংশন। M3 লেআউট স্ট্যান্ডার্ডাইজড ইনিশিয়ালাইজেশন ও স্ট্রাকচার ফাংশনের উপর নির্ভর করে: materialScope() ও primaryLayout(). এইসব বাধ্যতামূলক ফাংশন M3 এনভায়রনমেন্ট (থিম, materialScope ব্যবহার করে কম্পোনেন্ট স্কোপ) চালু করে এবং প্রাথমিক স্লট-ভিত্তিক লেআউট (primaryLayout ব্যবহার করে) নির্ধারণ করে। দুটিকেই অবশ্যই প্রতিটি লেআউটে ঠিক একবার করে কল করতে হবে।

থিমিং

থিম সংক্রান্ত বিভিন্ন পরিবর্তন Material 3-তে করা হয়েছে, এর মধ্যে ডায়নামিক কালার ও টাইপোগ্রাফি ও শেপ বিকল্পের বর্ধিত সেট অন্তর্ভুক্ত।

রঙ

Material 3 Expressive-এর একটি উল্লেখযোগ্য ফিচার হল "ডায়নামিক থিমিং:" এই ফিচার চালু করা টাইল (সাধারণত চালু থাকে) সিস্টেমের দেওয়া থিমে দেখানো হবে (উপলভ্যতা ব্যবহারকারীর ডিভাইস ও কনফিগারেশনের উপর নির্ভর করে)।

M3-তে আরেকটি পরিবর্তন হল কালার টোকেনের সংখ্যা বৃদ্ধি, যা ৪ থেকে ২৯-এ বৃদ্ধি পেয়েছে। নতুন কালার টোকেন ColorScheme ক্লাসে পাওয়া যাবে।

টাইপোগ্রাফি

M2.5-এর মতো, M3 পূর্বনির্ধারিত ফন্ট সাইজ কনস্ট্যান্টের উপর খুব বেশি নির্ভর করে—সরাসরি ফন্ট সাইজ নির্দিষ্ট করার ব্যাপারে নিরুৎসাহিত করা হয়। এইসব ধ্রুবক Typography ক্লাসে অবস্থিত এবং আরও বেশি ভাবপূর্ণ বিকল্পের সামান্য বর্ধিত রেঞ্জ অফার করে।

সম্পূর্ণ বিবরণের জন্য, টাইপোগ্রাফি ডকুমেন্টেশন দেখুন।

আকার

বেশিরভাগ M3 কম্পোনেন্ট আকার ও রঙয়ের দিক থেকে আলাদা আলাদা হতে পারে।

textButton (mainSlot-এ) যার আকার full:

'সম্পূর্ণ' শেপ (আরও গোলাকার কোণ) সহ টাইল
ছবি ২.: 'সম্পূর্ণ' শেপ সহ টাইল

একই textButton, তবে shape small:

'ছোট' আকারের টাইল (কম গোলাকার কোণ)
ছবি ৩.: 'ছোট' আকারের টাইল

উপাদানগুলি

M3 কম্পোনেন্টগুলি M2.5 কম্পোনেন্টগুলির তুলনায় আরও বেশি নমনীয় ও কনফিগার করা যায়। M2.5-এর ক্ষেত্রে বিভিন্ন ভিজ্যুয়াল ট্রিটমেন্টের জন্য প্রায়ই আলাদা আলাদা কম্পোনেন্ট প্রয়োজন হয়, যেখানে M3 প্রায়শই একটি সাধারণ, অত্যন্ত কনফিগার করা যায় এমন বেস কম্পোনেন্ট ব্যবহার করে যার ভালো ডিফল্ট থাকে।

এই নীতি রুট লেআউটের ক্ষেত্রেও প্রযোজ্য। M2.5-এ, এটি হয় PrimaryLayout অথবা EdgeContentLayout ছিল। M3-তে, আপনি একটি টপ-লেভেল MaterialScope তৈরি করার পরে, আপনি primaryLayout() ফাংশন কল করেন। এই ফাংশন সরাসরি রুট লেআউট রিটার্ন করে—কোনও বিল্ডার প্রয়োজন নেই—এবং titleSlot, mainSlot ও bottomSlot-এর মতো বিভিন্ন স্লটের জন্য LayoutElements গ্রহণ করে। আপনি এই স্লটগুলি কংক্রিট UI কম্পোনেন্ট—যেমন text(), button() বা card() থেকে পাওয়া কম্পোনেন্ট—অথবা লেআউট স্ট্রাকচার, যেমন Row বা Column থেকে LayoutElementBuilders দিয়ে পূরণ করতে পারেন।

থিম হল M3-এর আরেকটি গুরুত্বপূর্ণ উন্নতি। ডিফল্ট হিসেবে, UI এলিমেন্ট অটোমেটিক M3 স্টাইলিং স্পেসিফিকেশন মেনে চলে এবং ডায়নামিক থিমিং কাজ করে।

M2.5 M3
ইন্টার‍্যাক্টিভ এলিমেন্ট
Button বা Chip
টেক্সট
Text text()
প্রগ্রেস ইন্ডিকেটর
CircularProgressIndicator circularProgressIndicator() বা segmentedCircularProgressIndicator()
লেআউট
PrimaryLayout বা EdgeContentLayout primaryLayout()
— buttonGroup()
ছবি
— icon(), avatarImage() অথবা backgroundImage()

পরিবর্তনকারী

M3-তে, Modifiers, যা আপনি কোনও কম্পোনেন্ট সাজাতে বা বাড়াতে ব্যবহার করেন, তা আরও বেশি করে কম্পোজ-এর মতো। এই পরিবর্তন উপযুক্ত ইন্টার্নাল ধরন অটোমেটিক কনস্ট্রাক্ট করার মাধ্যমে বয়লারপ্লেট কমাতে পারে। (এই পরিবর্তনটি M3 UI কম্পোনেন্ট ব্যবহারের সাথে সম্পর্কিত নয়; প্রয়োজন হলে, আপনি M3 UI কম্পোনেন্টের সাথে ProtoLayout 1.2 থেকে বিল্ডার-স্টাইল মডিফায়ার ব্যবহার করতে পারেন এবং এর বিপরীতও করতে পারেন।)

M2.5

// Uses Builder-style modifier to set opacity
fun myModifier(): ModifiersBuilders.Modifiers =
    ModifiersBuilders.Modifiers.Builder()
        .setOpacity(TypeBuilders.FloatProp.Builder(0.5F).build())
        .build()

M3

// Uses Compose-like modifiers to set opacity
fun myModifier(): LayoutModifier = LayoutModifier.opacity(0.5F)

আপনি API স্টাইল ব্যবহার করে মডিফায়ার তৈরি করতে পারবেন এবং toProtoLayoutModifiers() এক্সটেনশন ফাংশন ব্যবহার করে LayoutModifier-কে ModifiersBuilders.Modifier-এ কনভার্ট করতে পারবেন।

সহায়ক ফাংশন

ProtoLayout 1.3-এ Compose-অনুপ্রাণিত API ব্যবহার করে অনেক UI কম্পোনেন্টকে প্রকাশ করা গেলেও, LayoutElementBuilders থেকে পাওয়া সারি ও কলাম-এর মতো মৌলিক লেআউট এলিমেন্ট বিল্ডার প্যাটার্ন ব্যবহার করা চালিয়ে যায়। এই স্টাইল সংক্রান্ত পার্থক্য দূর করতে এবং নতুন M3 কম্পোনেন্ট API-এর সাথে সামঞ্জস্য বজায় রাখতে, সহায়ক ফাংশন ব্যবহার করার কথা বিবেচনা করুন।

সহায়তাকারী ছাড়া

primaryLayout(
    mainSlot = {
        Column.Builder()
            .setWidth(expand())
            .setHeight(expand())
            .addContent(text("A".layoutString))
            .addContent(text("B".layoutString))
            .addContent(text("C".layoutString))
            .build()
    }
)

সহায়তাকারীর সাথে

// Function literal with receiver helper function
fun column(builder: Column.Builder.() -> Unit) =
    Column.Builder().apply(builder).build()

primaryLayout(
    mainSlot = {
        column {
            setWidth(expand())
            setHeight(expand())
            addContent(text("A".layoutString))
            addContent(text("B".layoutString))
            addContent(text("C".layoutString))
        }
    }
)

Tiles 1.2 / ProtoLayout 1.0-এ মাইগ্রেট করা

1.2 ভার্সন অনুযায়ী, বেশিরভাগ Tiles লেআউট API androidx.wear.protolayout নেমস্পেসে আছে। লেটেস্ট API ব্যবহার করতে, আপনার কোডে নিচের মাইগ্রেশন ধাপগুলি সম্পূর্ণ করুন।

ডিপেন্ডেন্সি আপডেট করা

আপনার অ্যাপ মডিউলের বিল্ড ফাইলে, নিম্নলিখিত পরিবর্তন করুন:

গ্ৰুভি

  // Remove
  implementation 'androidx.wear.tiles:tiles-material:version'

  // Include additional dependencies
  implementation "androidx.wear.protolayout:protolayout:1.4.2"
  implementation "androidx.wear.protolayout:protolayout-material:1.4.2"
  implementation "androidx.wear.protolayout:protolayout-expression:1.4.2"

  // Update
  implementation "androidx.wear.tiles:tiles:1.6.2"

Kotlin

  // Remove
  implementation("androidx.wear.tiles:tiles-material:version")

  // Include additional dependencies
  implementation("androidx.wear.protolayout:protolayout:1.4.2")
  implementation("androidx.wear.protolayout:protolayout-material:1.4.2")
  implementation("androidx.wear.protolayout:protolayout-expression:1.4.2")

  // Update
  implementation("androidx.wear.tiles:tiles:1.6.2")

নেমস্পেস আপডেট করা

আপনার অ্যাপের Kotlin- ও Java-ভিত্তিক কোড ফাইলে, নিম্নলিখিত আপডেট করুন: বিকল্প হিসেবে, আপনি এই নেমস্পেসের নাম পরিবর্তন করা স্ক্রিপ্ট এক্সিকিউট করতে পারেন।

  1. সব androidx.wear.tiles.material.* ইমপোর্টকে androidx.wear.protolayout.material.* দিয়ে পরিবর্তন করো। এছাড়াও, androidx.wear.tiles.material.layouts লাইব্রেরির জন্য এই ধাপটি সম্পূর্ণ করুন।
  2. অন্যান্য বেশিরভাগ androidx.wear.tiles.* ইমপোর্টকে androidx.wear.protolayout.* দিয়ে পরিবর্তন করুন।

    androidx.wear.tiles.EventBuilders, androidx.wear.tiles.RequestBuilders, androidx.wear.tiles.TileBuilders, এবং androidx.wear.tiles.TileService-এর জন্য ইমপোর্ট একই থাকতে হবে।

  3. TileService ও TileBuilder ক্লাস থেকে কিছু বাতিল করা পদ্ধতির নাম পরিবর্তন করুন:

    1. TileBuilders: getTimeline() থেকে getTileTimeline() এবং setTimeline() থেকে setTileTimeline()
    2. TileService: onResourcesRequest() থেকে onTileResourcesRequest()
    3. RequestBuilders.TileRequest: getDeviceParameters() থেকে getDeviceConfiguration(), setDeviceParameters() থেকে setDeviceConfiguration(), getState() থেকে getCurrentState() এবং setState() থেকে setCurrentState()