ارائه داده های مفید از طریق عوارض

صفحه‌های ترکیبی (Complications) یکی از ویژگی‌های صفحه‌های ساعت‌های فیزیکی و ساعت‌های هوشمند هستند که اطلاعات اضافی را نشان می‌دهند. معمولاً کاربر انتخاب می‌کند که چه اطلاعاتی در صفحه‌های ترکیبی نمایش داده شود.

معمولاً عوارض به اشکال مختلفی بروز می‌کنند:

  1. مستطیل شکل
  2. دایره‌ای
  3. قوس‌ها، در امتداد لبه صفحه ساعت
  4. پس‌زمینه، که کل صفحه ساعت را پوشانده است

در Wear OS، سیستم Complication را می‌توان به دو بخش تقسیم کرد:

  1. منبع داده پیچیدگی
  2. رندرینگ پیچیده

برای مثال، یک اپلیکیشن سلامت و تناسب اندام ممکن است یک منبع داده‌ی پیچیده‌ی تعداد قدم‌های روزانه (Daily Steps) پیاده‌سازی کند. این داده می‌تواند توسط صفحه ساعت WFF رندر شود.

منابع داده در عوارض

منابع داده پیچیدگی‌ها فقط داده‌هایی که باید رندر شوند و نوع پیچیدگی را مشخص می‌کنند. منبع داده هیچ نقشی در تعیین نحوه نمایش داده‌ها روی صفحه ساعت ندارد.

برای مثال، منبع داده‌ی بخش گام‌های روزانه‌ی سلامت و تناسب اندام ممکن است داده‌های زیر را تولید کند تا نشان دهد که کاربر امروز ۲۴۰۰ قدم از ۱۰۰۰۰ قدم هدف خود را برداشته است:

توجه داشته باشید که در این داده‌ها هیچ چیزی وجود ندارد که نشان دهد چگونه باید این را رندر کرد.

صفحه ساعت مشخص می‌کند که چه نوع پیچیدگی‌هایی را می‌تواند نمایش دهد. این مشخص می‌کند که کاربر از کدام منابع داده می‌تواند انتخاب کند.

در مورد مثال مراحل روزانه، شما در تعریف صفحه ساعت خود تصمیم می‌گیرید که چگونه Value و TargetValue را رندر کنید: آیا به صورت متن باشد یا به عنوان یک نشانگر پیشرفت؟ این به شما به عنوان طراح صفحه ساعت بستگی دارد.

تعریف عوارض

ارائه قابلیت نمایش جزئیات روی صفحه ساعت می‌تواند برای کاربران ارزشمند باشد، زیرا به آنها اجازه می‌دهد طیف وسیع‌تری از اطلاعات را در یک نگاه و متناسب با نیازهای خود مشاهده کنند.

تصمیم بگیرید که آیا و از چه تعداد عوارض روی صفحه ساعت خود پشتیبانی کنید، شکل و موقعیت آنها چگونه باشد و از چه نوع داده‌هایی پشتیبانی کنند.

هر فضای روی صفحه ساعت برای یک پیچیدگی به عنوان یک ComplicationSlot تعریف می‌شود که در آن یک ناحیه مرزی برای رندر پیچیدگی تعریف شده است:

<ComplicationSlot slotId="1" supportedTypes="SHORT_TEXT SMALL_IMAGE EMPTY"
    x="100" y="100" width="100" height="100">
    <BoundingOval x="0"  y="0" width="100" height="100" />
    <Complication type="SHORT_TEXT">
        <!-- Complication content for rendering SHORT_TEXT data goes here -->
    </Complication>
    <Complication type="SMALL_IMAGE">
        <!-- Complication content for rendering SMALL_IMAGE data goes here -->
    </Complication>
</ComplicationSlot>

یک رویکرد مشابه را می‌توان برای سایر اشکال مرزی مانند مستطیل و بیضی اعمال کرد.

نوع عارضه و پیش‌فرض‌ها را تنظیم کنید

سیستم پیچیدگی انواع مختلفی را ارائه می‌دهد که به صفحه ساعت اجازه می‌دهد نوع داده‌ای را که می‌تواند روی صفحه نمایش دهد، بیان کند. به عنوان مثال، یک پیچیدگی Arc، همانطور که قبلاً نشان داده شد، برای یک نوع داده پیچیدگی مبتنی بر تصویر مانند SMALL_IMAGE مناسب نیست، اما می‌تواند برای داده‌های عددی مانند RANGED_VALUE بسیار خوب عمل کند.

در اعلان ComplicationSlot خود، supportedTypes روی لیست انواعی که می‌توانند در این اسلات رندر شوند و با فاصله از هم جدا شده‌اند، تنظیم کنید.

همچنین باید منبع پیش‌فرض را برای ComplicationSlot تنظیم کنید، مگر اینکه نوع EMPTY را مجاز بدانید، که در این صورت تنظیم پیش‌فرض اختیاری است:

<ComplicationSlot slotId="2" supportedTypes="SHORT_TEXT SMALL_IMAGE EMPTY"
    x="250" y="100" width="100" height="100">
    <DefaultProviderPolicy
        defaultSystemProvider="STEP_COUNT"
        defaultSystemProviderType="SHORT_TEXT" />
    <!-- ... -->
</ComplicationSlot>

علاوه بر اینکه باید ارائه‌دهندگان سیستم را مشخص کنید، می‌توانید به صورت اختیاری ارائه‌دهندگان غیرسیستمی مانند ارائه‌دهندگان شخص ثالث را برای استفاده پیش‌فرض، در صورتی که از قبل نصب شده باشند، مشخص کنید .

رندر کردن داده‌های عارضه‌ای

پس از تعریف ComplicationSlot ، bounds و حاوی عنصر Complication ، از اجزای استاندارد WFF مانند PartDraw, PartImage و PartText برای نمایش داده‌های Complication استفاده کنید.

عناصر درون داده‌های Complication به یک منبع داده ویژه دسترسی دارند: COMPLICATION ، که ویژگی‌های داده‌ای مختلفی را که توسط منبع داده پیچیدگی تنظیم شده‌اند، فراهم می‌کند.

برای مثال، یک تابع SMALL_IMAGE می‌تواند مقادیر COMPLICATION.SMALL_IMAGE و COMPLICATION.SMALL_IMAGE_AMBIENT را تنظیم کند. این مقادیر می‌توانند به جای resource در یک عنصر Image استفاده شوند:

<Complication type="SMALL_IMAGE">
    <PartImage x="0" y="0" width="100" height="100">
        <Image resource="[COMPLICATION.SMALL_IMAGE]" />
    </PartImage>
</Complication>

هر نوع عارضه مختلف، مجموعه‌ای متفاوت از ویژگی‌های موجود را دارد که می‌توانند تنظیم شوند؛ برای فهرست کامل هر یک، به مرجع Complication مراجعه کنید. این مثال متن را از یک عارضه SHORT_TEXT نمایش می‌دهد:

<Complication type="SHORT_TEXT">
    <PartText x="0" y="0" width="100" height="100">
        <Text>
            <Font size="32">
                <Template>
                    <![CDATA[%s]]><Parameter expression="[COMPLICATION.TEXT]" />
                </Template>
            </Font>
        </Text>
    </PartText>
</Complication>

هنگام رندر کردن پیچیدگی‌ها، سودمندی را به حداکثر برسانید

هنگام اضافه کردن ComplicationSlots به صفحه ساعت خود، چالش‌های متعددی وجود دارد:

  1. انواع داده‌های Complication بی‌شماری وجود دارد. برنامه‌های مختلف ممکن است یک یا چند مورد از این موارد را ارائه دهند.
  2. هر نوع داده‌ی Complication، علاوه بر داشتن ویژگی‌های اجباری، ویژگی‌های اختیاری زیادی نیز دارد. بررسی کنید که با در نظر گرفتن ترکیبات مختلف، مفیدترین رندر از ویژگی‌های موجود انجام شود.

برای رسیدگی به این مسائل، برخی از استراتژی‌ها عبارتند از:

  1. پشتیبانی از چندین نوع پیچیدگی برای هر اسلات. به عنوان مثال، SHORT_TEXT به طور گسترده توسط منابع داده پیچیدگی پشتیبانی می‌شود، بنابراین پشتیبانی از تعدادی از انواع مختلف، مانند SHORT_TEXT RANGED_VALUE برای یک پیچیدگی دایره‌ای کوچک، سازگاری را افزایش می‌دهد.
  2. انواع مختلفی از عوارض را در صفحه ساعت ارائه دهید. به عنوان مثال، می‌توانید RANGED_VALUE و GOAL_PROGRESS در عوارض قوسی شکل لبه‌دار و SHORT_TEXT و SMALL_IMAGE در عوارض دایره‌ای شکل بدنه صفحه ساعت پشتیبانی کنید.
  3. عناصر اختیاری را برای هر نوع داده بررسی کنید. برای مثال، SHORT_TEXT به صورت اختیاری از یک ویژگی title و یک تصویر پشتیبانی می‌کند. طرح‌بندی شما برای رندر کردن داده‌های موجود ممکن است بسته به اینکه آیا تصویر یا عنوان در دسترس است یا خیر، متفاوت باشد.