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

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

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

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

این گیف یک گوشی را در جهت افقی با صفحه نمایش در جهت عمودی نشان می دهد. یک نماد ظاهر می شود که از کاربر می پرسد آیا می خواهد جهت صفحه خود را به افقی تغییر دهد یا خیر.
شکل 1 . چرخش دکمه پیشنهاد با ژست «Swipe up on the Home button» فعال است

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

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

منبع

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

  • services/.../server/policy/PhoneWindowManager.java :
    • قلاب هایی که خروجی WindowOrientationListener را مصرف می کنند ( MyOrientationListener ، مسئول نظارت بر حسگرها برای تعیین اینکه آیا دستگاه چرخیده است)
    • WindowOrientationListener حتی زمانی که چرخش خودکار غیرفعال است فعال نگه می دارد (به needSensorRunningLp() مراجعه کنید.
    • چرخش سیستم را با توجه به اولویت چرخش کاربر، تنظیمات بالای صفحه فعالیت screenOrientation و وضعیت سیستم محاسبه می‌کند (به rotationForOrientationLw() مراجعه کنید.
    • تعیین کنید که آیا فعالیت بالا می تواند به یک چرخش معین بچرخد (به isRotationChoicePossible() مراجعه کنید)
  • SystemUI/.../statusbar/phone/NavigationBarFragment :
    • تعیین می کند که آیا دکمه نوار ناوبری باید در تماس های پیشنهادی چرخش از PhoneWindowManager نشان داده شود (به onRotationProposal() مراجعه کنید)
    • زمان پنهان کردن دکمه چرخش نوار ناوبری را کنترل می کند (به تماس های setRotateSuggestionButtonState(false) مراجعه کنید)
    • کنترل زمان‌بندی دکمه‌ها، از جمله موارد خاص زمانی که نوار ناوبری پنهان است (معمولاً در تمام صفحه)
    • تنظیمات برگزیده کاربر را در بازگشت به جهت طبیعی دستگاه بازنشانی می‌کند ( mRotationWatcher )
    • سبک مناسب را برای انیمیشن دکمه ناوبری که در NavigationBarView اعمال می شود انتخاب می کند (به onRotationProposal() مراجعه کنید)
    • منطق حالت مقدمه، از جمله انیمیشن تخصصی را اضافه می کند (به Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED مراجعه کنید.NUM_ROTATION_SUGGESTIONS_ACCEPTED )
    • پرچم چرخش disable2 را پیاده سازی می کند (به disable() مراجعه کنید.
  • SystemUI/.../statusbar/phone/NavigationBarView.java :
    • انیمیشن نماد دکمه Styles برای مطابقت با چرخش معلق (به updateRotateSuggestionButtonStyle() مراجعه کنید)
    • تغییرات نمایان بودن دکمه را کنترل می‌کند (به setRotateButtonVisibility() مراجعه کنید)، از جمله منطق پنهان کردن دکمه چرخش در صورت فعال بودن برخی از سرویس‌های Accessibility (با در نظر گرفتن رتبه‌بندی پشته دکمه ناوبری سمت راست)
  • SystemUI/res/layout/menu_ime.xml :
    • شامل یک KeyButtonView جدید برای دکمه چرخش است که در بالای منو و انتخابگر IME/صفحه کلید اما در زیر دکمه دسترسی
  • SystemUI/res/drawable/ic_sysbar_rotate_button.xml :
    • Complex AnimatedVectorDrawable برای متحرک سازی دکمه چرخش نوار ناوبری استفاده می شود
    • استایلینگ (در SystemUI/res/values/styles.xml ) برای تنظیم زوایای شروع و پایان چرخش استفاده می‌شود تا بتوان از همان قابل ترسیم برای متحرک کردن چرخش‌های مختلف شروع و پایان استفاده کرد.
    • رنگ آمیزی نمادها از طریق TintedKeyButtonDrawable تنظیم می شود

پیاده سازی

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

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

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

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

یک پرچم جدید در StatusBarManager.disable2 وجود دارد تا به طور موقت از نمایش پیشنهادات چرخش جلوگیری کند. StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS را ببینید.DISABLE2_ROTATE_SUGGESTIONS. این پرچم باید در همه پیاده‌سازی‌ها رعایت شود زیرا توسط برنامه‌های مهم سیستم از جمله Setup Wizard استفاده می‌شود. پیاده سازی ارائه شده از این پشتیبانی می کند (به 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