چرخش پیشنهادها

در Android 8.0، کاربران می‌توانستند بااستفاده از کاشی «تنظیمات فوری» یا تنظیمات «نمایشگر»، بین حالت‌های «چرخش خودکار» و «چرخش عمودی» جابه‌جا شوند. در Android نسخه ۹، حالت چرخش عمودی را به‌روز کردیم تا با سنجاق کردن چرخش فعلی صفحه‌نمایش، از چرخش‌های ناخواسته جلوگیری کنیم، حتی اگر موقعیت دستگاه تغییر کند. کاربران می‌توانند درصورت نیاز با فشار دادن دکمه جدیدی در نوار پیمایش، چرخش را به‌صورت دستی راه‌اندازی کنند. نام حالت عمودی را به قفل چرخش تغییر دادیم و وقتی چرخش خودکار خاموش باشد، فعال می‌شود. تغییری در حالت چرخش خودکار ایجاد نشده است.

وقتی دستگاه در حالت قفل چرخش باشد، کاربران می‌توانند صفحه‌نمایش را در هر چرخشی که «فعالیت» قابل‌مشاهده در بالا پشتیبانی می‌کند قفل کنند (با درنظر گرفتن محدودیت‌های سیستم فعلی). اگر «فعالیت» برتر بتواند در حالت چرخش خودکار در چندین جهت نمایش داده شود، همان گزینه‌ها باید در حالت چرخش قفل‌شده نیز دردسترس باشند، با چند استثنا براساس تنظیم «فعالیت» screenOrientation.

حالت قفل چرخش با نشان دادن دکمه‌ای در نوار پیمایش هنگام تغییر چرخش دستگاه کار می‌کند. برای انجام این کار، حسگر جهت‌گیری دستگاه باید فعال بماند حتی وقتی چرخش خودکار خاموش است. با تک‌ضرب زدن روی این دکمه، اولویت چرخش کاربر به‌طور مؤثر تنظیم می‌شود (Settings.System.USER_ROTATION). WindowManager از این اولویت به‌همراه جزئیات دیگر درباره «فعالیت» برتر و وضعیت سیستم برای تغییر چرخش سیستم استفاده می‌کند. WindowManager همچنان از اولویت چرخش کاربر هنگام تصمیم‌گیری درباره اینکه سیستم در چه چرخشی هنگام انتقال به فعالیت دیگری ارائه شود استفاده می‌کند.

این گیف تلفنی را در حالت افقی با صفحه‌نمایش در حالت عمودی نشان می‌دهد. نمادی ظاهر می‌شود و از کاربر می‌پرسد آیا می‌خواهد
       جهت صفحه‌نمایش را به افقی تغییر دهد.
شکل ۱. دکمه پیشنهاد چرخش با اشاره «تند به‌بالا روی دکمه صفحه اصلی» فعال شد

هنگام جابه‌جایی بین «فعالیت‌ها»، اولویت چرخش کاربر باید حفظ شود. بااین‌حال، ازآنجایی‌که اکثر کاربران تلفن فقط برای مدت کوتاهی می‌خواهند در حالت افقی باشند، گرایش طبیعی به جهت عمودی را اضافه کردیم. هرگاه چرخش سیستم به جهت طبیعی دستگاه تغییر کند، اولویت چرخش کاربر به جهت طبیعی دستگاه بازنشانی می‌شود. برای اکثر تلفن‌ها، جهت طبیعی دستگاه عمودی (۰ درجه) است. بازنشانی اولویت چرخش کاربر اغلب هنگام استفاده از برنامه فقط عمودی، قفل کردن تلفن، یا بازگشت به فضای کاری راه‌انداز اتفاق می‌افتد.

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

منبع

پشتیبانی از پیشنهادهای چرخش به Android 9 اضافه شده است. بیشتر تغییرات در فایل‌های زیر است.

  • ‫services/.../server/policy/PhoneWindowManager.java:
    • قلاب‌هایی که برونداد WindowOrientationListener را مصرف می‌کنند (MyOrientationListener، مسئول نظارت بر حسگرها برای تعیین اینکه آیا دستگاه چرخانده شده است یا نه)
    • WindowOrientationListener را حتی وقتی چرخش خودکار غیرفعال است فعال نگه می‌دارد (needSensorRunningLp() را ببینید)
    • Computes the system rotation given user rotation preference, top Activity screenOrientation settings and system status (see rotationForOrientationLw())
    • تعیین اینکه آیا «فعالیت» برتر می‌تواند به چرخش مشخصی بچرخد (به isRotationChoicePossible() مراجعه کنید)
  • ‫SystemUI/.../statusbar/phone/NavigationBarFragment:
    • تعیین می‌کند که آیا دکمه نوار پیمایش باید در بازخوان‌های پیشنهاد چرخش از PhoneWindowManager نشان داده شود یا نه (به onRotationProposal() مراجعه کنید)
    • Handles when to hide the rotate navbar button (see calls to setRotateSuggestionButtonState(false))
    • Handles button timeouts, including the special case when the navbar is hidden (commonly in full screen)
    • اولویت کاربر را هنگام بازگشت به جهت طبیعی دستگاه (mRotationWatcher) بازنشانی می‌کند
    • سبک مناسب را برای پویانمایی دکمه نوار پیمایش انتخاب می‌کند، در NavigationBarView اعمال می‌شود (به onRotationProposal() مراجعه کنید)
    • منطق حالت معرفی را اضافه می‌کند، ازجمله پویانمایی تخصصی (به مرجع‌های Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED مراجعه کنید)
    • پرچم چرخش disable2 را پیاده‌سازی می‌کند (به disable() مراجعه کنید)
  • ‫SystemUI/.../statusbar/phone/NavigationBarView.java:
    • پویانمایی نماد دکمه «سبک‌ها» برای مطابقت با چرخش معلقه (به updateRotateSuggestionButtonStyle() مراجعه کنید)
    • تغییرات رؤیت‌پذیری دکمه را مدیریت می‌کند (به setRotateButtonVisibility() مراجعه کنید)، ازجمله منطق پنهان کردن دکمه چرخش درصورت فعال بودن برخی‌از خدمات «دسترسی‌پذیری» (با درنظر گرفتن رتبه‌بندی پشته دکمه سمت راست نوار پیمایش)
  • ‫SystemUI/res/layout/menu_ime.xml:
    • شامل KeyButtonView جدیدی برای دکمه چرخش است، که بالای منو و انتخابگر IME/صفحه‌کلید اما زیر دکمه «دسترس‌پذیری» قرار دارد
  • ‫SystemUI/res/drawable/ic_sysbar_rotate_button.xml:
    • ‫AnimatedVectorDrawable پیچیده‌ای که برای پویانمایی دکمه چرخاندن نوار پیمایش استفاده می‌شود
    • سبک‌دهی (در SystemUI/res/values/styles.xml) برای تنظیم زاویه‌های شروع و پایان چرخش استفاده می‌شود تا بتوان از طراحی کشیدنی یکسان برای پویانمایی چرخش‌های شروع و پایان مختلف استفاده کرد
    • رنگ‌آمیزی نماد ازطریق TintedKeyButtonDrawable تنظیم شده است

پیاده‌سازی

‫Android 9 شامل همه تغییرات لازم برای فعال کردن پیشنهادهای چرخش برای دستگاه‌هایی است که از کلیدهای پیمایش نرم‌افزاری (برگشتن، صفحه اصلی، و غیره) استفاده می‌کنند.

سازندگان دستگاهی که دستگاه‌هایی با کلیدهای پیمایش سخت‌افزاری می‌سازند و می‌خواهند این ویژگی را پیاده‌سازی کنند، باید توانایی میانای کاربر سامانه خود را طراحی و پیاده‌سازی کنند یا این ویژگی را غیرفعال کنند. توصیه می‌شود هر سطح معرفی‌شده وقتی دستگاه در زاویه ۹۰ یا ۱۸۰ درجه نسبت‌به چرخش سیستم فعلی نگه داشته می‌شود، استفاده از آن آسان باشد و به‌سرعت دردسترس باشد. به این دلایل، استفاده از اعلان‌ها (همان‌طور که برای IME/انتخابگر صفحه‌کلید انجام می‌شود) توصیه نمی‌شود.

شرایط سخت‌افزاری برای استفاده از این ویژگی همان شرایط لازم برای استفاده از چرخش خودکار است.

برای یکپارچگی پیاده‌سازی لازم است که اولویت چرخش کاربر (Settings.System.USER_ROTATION) وقتی سیستم به چرخش طبیعی دستگاه به هر دلیلی تغییر می‌کند درصورتی‌که چرخش خودکار خاموش باشد، به چرخش طبیعی دستگاه بازنشانی شود. پیاده‌سازی ارائه‌شده این کار را انجام می‌دهد (به NavigationBarFragment.mRotationWatcher مراجعه کنید).

پرچم جدیدی در StatusBarManager.disable2 وجود دارد تا موقتاً از نمایش پیشنهادهای چرخش جلوگیری کند. StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS را ببینید. این پرچم باید در همه پیاده‌سازی‌ها رعایت شود زیرا برنامه‌های مهم سیستم، ازجمله «دستیار راه‌اندازی»، از آن استفاده می‌کنند. پیاده‌سازی ارائه‌شده از این پشتیبانی می‌کند (به NavigationBarFragment.disable() مراجعه کنید).

اکیداً توصیه می‌کنیم این ویژگی را فعال کنید و درصورت امکان از پیاده‌سازی AOSP پیروی کنید. هدف ما این است که تجربه چرخش بین دستگاه‌ها مشابه باشد و یکنواختی تجربه در اکثر تلفن‌های امروزی بین چرخش خودکار و قفل عمودی را منعکس کند.

سفارشی‌سازی

ازآنجایی‌که پیشنهادهای چرخش فقط در حالت قفل چرخش (چرخش خودکار خاموش) نشان داده می‌شود، می‌توانید انتخاب کنید که این ویژگی به‌طور پیش‌فرض برای نصب‌های جدید روشن باشد یا نه. برای این کار، چرخش خودکار را به‌طور پیش‌فرض خاموش کنید. برای ایجاد تغییرات پیش‌فرض، def_accelerometer_rotation را در SettingsProvider/res/values/defaults.xml ببینید.

کاربران می‌توانند به‌راحتی ازطریق کاشی چرخش در «تنظیمات فوری» یا تنظیمات «نمایشگر» تغییر دهند که چرخش خودکار فعال باشد یا نه (صرف‌نظر از پیش‌فرض).

اعتبارسنجی

برای آزمایش، با تغییر مقدار دروازه Settings.Secure می‌توان ویژگی را روشن و خاموش کرد. این کار به‌آسانی با اجرای فرمان زیر از نمونه adb ممتاز انجام می‌شود:

adb shell settings put secure show_rotation_suggestions <x>

برای خاموش کردن، x را روی 0 و برای روشن کردن، روی 1 تنظیم کنید.

برای آزمایش، با تغییر مقدار Settings.Secure مرتبط می‌توان حالت معرفی را بازنشانی کرد. این کار با اجرای فرمان زیر از یک نمونه adb ممتاز به‌آسانی انجام می‌شود:

adb shell settings put secure num_rotation_suggestions_accepted 0