ב-Android 7.1.1 נוספה תמיכה ברמת המערכת במצב הדגמה לקמעונאים, כדי שלקוחות יוכלו לבדוק את המכשירים בפעולה בחנויות קמעונאיות. המכשירים מוגדרים להדגמה קמעונאית באמצעות אפליקציה של בעלי המכשיר, כדי להבטיח שהשימוש במכשיר מוגבל רק לאפליקציות מסוימות במצב הדגמה. משתמשי קצה לא יכולים להוסיף חשבון לשימוש אישי למכשיר הדגמה קמעונאי. ב-Android 8.1, התמיכה הזו עודכנה כדי ליצור משתמשי הדגמה באמצעות DevicePolicyManager createAndManageUser API. כך יצרני ציוד מקורי יכולים לבצע התאמה אישית רבה יותר למצב הקמעונאי הרגיל מבחינת ניהול משתמשים וניהול מדיניות במכשיר ההדגמה.
אפשר להשתמש בממשקי ה-API של DevicePolicyManager בגרסאות קודמות ל-Android 8.1, אבל אי אפשר ליצור משתמשים מסוג הדמו (DevicePolicyManager.MAKE_USER_DEMO) באמצעות ממשק ה-API createAndManageUser בגרסאות 8.0 ומטה.
הטמעה ב-Android מגרסה 8.1 ואילך
בקטע הזה מפורטים השיפורים בפלטפורמה ומתואר אפליקציית ההדגמה הקמעונאית ב-Android 8.1 ואילך.
שינויים בפלטפורמות
הגדרת DEVICE_DEMO_MODE
במכשירים שמוטמע בהם מצב הדגמה קמעונאי שמבוסס על בעלות על המכשיר, צריך להגדיר את Settings.Global.DEVICE_DEMO_MODE לערך 1 לפני הקצאת ההרשאות, כדי לציין שהמכשיר מוקצה למצב הדגמה קמעונאי.
SystemServer משתמש בדגל הזה כדי לנהל היבטים של מצב קמעונאי, כמו פרופיל צריכת חשמל ו-SystemUI.
הפעלת RetailDemoModeService
במכשירים שמוטמע בהם מצב הדגמה לקמעונאים, אשף ההגדרה מגדיר הגדרה גלובלית Global.DEVICE_DEMO_MODE לערך true כדי לציין שהמכשיר נכנס למצב קמעונאי. כשרואים את ההגדרה הזו, RetailDemoModeService יוצר משתמש הדגמה ועובר אליו כשמשתמש 0 מופעל, מפעיל את מרכז האפליקציות המותאם אישית שצוין במשאב שכבת-על ומשבית את SUW. גם SystemServer ו-SystemUI משתמשים בדגל הזה כדי לנהל היבטים של מצב ההדגמה לקמעונאים.
הגדרת מרכז אפליקציות או נגן וידאו בהתאמה אישית
יצרני מכשירים יכולים לציין משגר מותאם אישית על ידי ביטול ברירת המחדל של משאב המסגרת config_demoModeLauncherComponent שצוין בקובץ config.xml, באופן הבא.
<!-- Component that is the default launcher when Retail Mode is enabled. -->
<string name="config_demoModeLauncherComponent">com.android.retaildemo/.DemoPlayer</string>
אפליקציית ההדגמה DemoPlayer שנמצאת בכתובת /packages/apps/RetailDemo היא משגר ברירת המחדל בהתאמה אישית בפרויקט קוד פתוח של Android (AOSP). האפליקציה מחפשת סרטון במחיצה של המכשיר, כמו /data/preloads/demo/retail_demo.mp4, ומפעילה אותו בלולאה. כשהמשתמש נוגע במסך, רכיב הפעילות של מרכז האפליקציות המותאם אישית מושבת, ומרכז האפליקציות של המערכת שמוגדר כברירת מחדל מופעל.
רכיב ההפעלה המותאם אישית צריך להיות מסומן כלא פעיל כברירת מחדל, כדי שלא יוצג בתרחישים שאינם הדגמה. בתרחיש ההדגמה, System
Server מפעיל את config_demoModeLauncherComponent שצוין כשמתחילים סשן הדגמה חדש.
אשף ההגדרה מחפש גם את הסרטון שהוזכר קודם כדי לספק אפשרות להיכנס למצב קמעונאי. אפשר לשנות את SUW כך שיחפש סימן אחר ספציפי ליצרן הציוד המקורי (OEM) שמציין שהמצב הקמעונאי נתמך, אם הסרטון לא מהווה חלק מההדגמה. אם יש מחיצות A/B במערכת, מחיצה B במערכת צריכה להכיל את סרטון ההדגמה בנתיב /preloads/demo. הקובץ הזה מועתק אל /data/preloads/demo באתחול הראשון.
התאמה אישית של אפליקציות שנטענו מראש למצב הדגמה לקמעונאים
אפליקציות שנטענו מראש יכולות להתאים אישית את חוויית השימוש שלהן במצב הדגמה לקמעונאים באמצעות קריאה ל-API UserManager.isDemoUser() כדי לבדוק אם האפליקציה מופעלת בסביבת הדגמה.
הגבלות מסוימות מוגדרות במשתמש ההדגמה, בדומה למדיניות של מכשירים מנוהלים או פרופילים שמונעת מאפליקציות וממשתמשים לבצע פעולות מסוימות.
אחת מההגבלות האלה היא DISALLOW_MODIFY_ACCOUNTS. בגלל ההגבלה הזו, אי אפשר להוסיף חשבונות באמצעות AccountManager וSettings. חלק מהאפליקציות של Google מגיבות להגבלה הזו ומציגות הודעת שגיאה, ואחרות לא יציגו בקשה לבחירת חשבון (כמו YouTube ותמונות). מומלץ שאפליקציות OEM יבדקו גם אם הערך של DISALLOW_MODIFY_ACCOUNTS מוגדר ויטפלו בתרחיש בהתאם.
עדכוני מערכת
כברירת מחדל, כשמפעילים את המצב הקמעונאי, מדיניות המכשיר מוגדרת לעדכון אוטומטי דרך האוויר (OTA). במכשירים קמעונאיים, העדכון יורד, המכשיר יופעל מחדש והעדכון יותקן (בהתאם לסף הסוללה) ללא פעולה מצד המשתמש.
אפליקציית הדגמה לקמעונאים
הטמעה של מצב הדגמה קמעונאית שמבוסס על בעלות על המכשיר מחייבת הגדרה של אפליקציית Device Policy Controller כבעלים של המכשיר. AOSP מכיל הטמעה של אפליקציית RetailDemo לדוגמה בנתיב /packages/apps/RetailDemo.
לאפליקציות של בעלי מכשירים לא נדרשות הרשאות מורחבות או התקנה מראש בקובץ אימג' של המערכת, ואפשר להוריד אותן במהלך תהליך ההגדרה או ההקצאה. בדרך כלל הן מיושמות כמו אפליקציות מסורתיות, עם ההבדלים הבאים:
כל האפליקציות לבעלי המכשירים חייבות להרחיב את רכיב DeviceAdminReceiver, שמשמש כטוקן הרשאה לכל ממשקי ה-API של DevicePolicyManager. הרכיב צריך להחזיק בהרשאה
android.permission.BIND_DEVICE_ADMIN, לכלול את המדיניות המיוחדת המבוקשת כמטא-נתונים ולסנן את כוונותandroid.app.action.PROFILE_PROVISIONING_COMPLETEו-android.app.action.DEVICE_ADMIN_ENABLED.הדגל DevicePolicyManager#MAKE_USER_DEMO שמוגדר ליצירת משתמשים מיוחדים מסוג הדגמה הוא API מוסתר. הדגל הזה כולל ערך קבוע של 0x4.
הבעלות על המכשיר חייבת להיות מוקצית רק דרך בעל התפקיד לניהול מכשירים או דרך האפליקציה ManagedProvisioning.
ממשקי ה-API במחלקה DevicePolicyManager מאפשרים לבעלי מכשיר (DO) ולבעלי פרופיל (PO) לאכוף כללי מדיניות שונים במכשיר. בהמשך מפורטות חלק מהפונקציות של DevicePolicyManager שרלוונטיות למצב הדגמה לקמעונאים.
ליצור ולנהל משתמשים.
מפעילים מחדש את המכשיר.
מגדירים את החבילות המותרות ב-LockTask.
מתקינים חבילות באמצעות PackageInstaller.
חסימת האפשרות להסיר חבילות.
הפעלת עדכונים אוטומטיים של המערכת. העדכונים יורדו ויוחלו על המכשירים באופן אוטומטי.
משביתים את מסך הנעילה.
למנוע הגדרת סיסמאות או טביעות אצבע.
מגדירים קבוצה של הגדרות Settings.Global, Settings.Secure, ו-Settings.System שנמצאות ברשימת ההיתרים.
מגדירים את מדיניות ההרשאות ל-
PERMISSION_POLICY_AUTO_GRANT, וכך כל הרשאות זמן הריצה יינתנו באופן אוטומטי. אפשר גם להעניק הרשאות בצורה מצומצמת יותר: הרשאה אחת לאפליקציה אחת. זה לא חל על הרשאות app-ops, שמשתמשים עדיין צריכים להעניק על בסיס כל משתמש וכל אפליקציה.מגדירים הגבלות למשתמשים שרלוונטיות למצב קמעונאי, כפי שמוגדר ב-UserManager, באופן הבא.
DISALLOW_MODIFY_ACCOUNTSDISALLOW_USB_FILE_TRANSFERDISALLOW_DEBUGGING_FEATURESDISALLOW_CONFIG_WIFIDISALLOW_CONFIG_BLUETOOTHDISALLOW_INSTALL_UNKNOWN_SOURCESDISALLOW_CONFIG_MOBILE_NETWORKS
עדכון סרטון ההדגמה באמצעות האינטרנט
לאפליקציית RetailDemo ב-/packages/apps/RetailDemo יש אפשרות לעדכן את סרטון ההדגמה אם יש קישוריות לרשת. אפשר להגדיר את כתובת ה-URL להורדת הסרטון על ידי ביטול הערך הבא של המחרוזת באפליקציית RetailDemo.
<!-- URL where the retail demo video can be downloaded from. -->
<string name="retail_demo_video_download_url"></string>
אם צריך להשתמש בסרטונים שונים באזורים שונים, אפשר להגדיר כתובות URL שונות להורדה באמצעות משאבי מחרוזות ספציפיים ללוקאל ב-res/values-*/strings.xml. לדוגמה, אם צריך להשתמש בסרטונים שונים בארצות הברית ובבריטניה, אפשר להציב את כתובות ה-URL המתאימות להורדה בקבצים res/values-en-rUS/strings.xml ו-res/values-en-rGB/strings.xml, בהתאמה, כמו שמוצג בהמשך.
ב-res/values-en-rUS/strings.xml:
<string name="retail_demo_video_download_url">download URL for US video goes here</string>In res/values-en-rGB/strings.xml:
<string name="retail_demo_video_download_url">download URL for UK video goes here</string>
הסרטון הזה יורד לכל היותר פעם אחת בכל הפעלה מחדש של המכשיר. כשסרטון מופעל במכשיר, אפליקציית RetailDemo בודקת ברקע אם צוינה כתובת URL להורדה, ואם הסרטון בכתובת ה-URL חדש יותר מהסרטון שמופעל.
אם כן, אפליקציית RetailDemo תוריד את הסרטון ותתחיל להפעיל אותו. אחרי שהסרטון יורד, הוא ישמש להפעלה בכל סשני ההדגמה העתידיים. אף אחת מהבדיקות לא מתבצעת שוב עד להפעלה הבאה מחדש.
הנחיות לגבי סרטוני הדגמה
סרטוני הדגמה צריכים להיות בפריסה לאורך, או בפריסה הטבעית של המכשיר אם מדובר בטאבלט, והאורך שלהם יכול להיות מעל חמש שניות. התוכן לא יכול לגרום לבעיות צריבה, כי הוא יופעל כל הזמן כשהוא מוצג.
מידע נוסף זמין במאמר הגדרות של משתמשים, פרופילים וחשבונות ב-Android למפתחים, בתיעוד של Device Policy Manager API ובדוגמה לאפליקציה של בעלי מכשירים.
אימות
מערכת CTS לא כוללת את מצב ההדגמה הקמעונאית כי זו תכונה אופציונלית. הבדיקה צריכה להתבצע באופן ידני או באמצעות בדיקות יחידה באפליקציית ההדגמה.
שיעור הדגמה
הגדרת סשן הדגמה
יכול להיות שמכשירי הדגמה לקמעונאים יופעלו במצב הדגמה לקמעונאים אם הם הוגדרו למצב הדגמה במפעל. לחלופין, עובדים בחנויות קמעונאיות יכולים להפעיל את מצב הקמעונאות ישירות מאשף ההגדרה.

איור 2. מצב הדגמה לקמעונאים
הצגת סשן הדגמה
כשמכניסים את המכשיר למצב תצוגה, הוא עובר למשתמש הדגמה חדש ומתחיל אוטומטית את מרכז האפליקציות המותאם אישית שצוין במשאב השכבה, כמו שמתואר בהטמעה. כברירת מחדל, משגר האפליקציות המותאם אישית הזה מפעיל את סרטון ההדגמה בלולאה עד שהמשתמש נוגע במסך כדי להתחיל סשן של משתמש הדגמה. בשלב הזה, מרכז האפליקציות המותאם אישית מפעיל את מרכז האפליקציות של המערכת ואז יוצא. יצרני ציוד מקורי יכולים לשנות את מרכז האפליקציות המותאם אישית כדי להפעיל בנוסף שירות או פעילות אחרים ביציאה.
כדי לשמור על השלמות של מצב ההדגמה לקמעונאים, מסך הנעילה מושבת וגם פעולות מסוימות מההגדרות המהירות שעלולות להשפיע לרעה על מצב ההדגמה לקמעונאים אסורות, כולל הפעולות הבאות.
- החלפת מצב טיסה.
- הסרה או שינוי של נקודות גישה ל-Wi-Fi (הגדרות).
- שינוי הספק (הגדרות).
- הגדרת נקודה לשיתוף אינטרנט (הגדרות).
- החלפת משתמשים.
בנוסף, הגישה חסומה גם לחלק מההגדרות הכלליות שיכולות להשפיע על מצב התצוגה הקמעונאית, על ידי השבתת ההגדרות הבאות:
- הגדרות ה-Wi-Fi.
- אפשרויות להגדרת רשתות סלולריות, במיוחד נקודות לשיתוף אינטרנט (Hotspot).
- הגדרת Bluetooth.
- גיבוי ואיפוס, תאריך ושעה ורשתות סלולריות (הן לא מופיעות בכלל).
אם המשתמש בלי פעילות במשך פרק זמן מסוים (90 שניות כברירת מחדל), מצב פעולה לקמעונאים מציג תיבת דו-שיח של המערכת שבה המשתמש מתבקש לצאת מהפעילות או להמשיך. אם המשתמש בוחר לצאת או אם לא מתקבלת תגובה במשך חמש שניות, מצב קמעונאי מסיר את משתמש ההדגמה הנוכחי, עובר למשתמש הדגמה חדש וחוזר על הסרטון המקורי. אם המסך כבוי באמצעות לחצן ההפעלה, הוא יופעל מחדש באופן אוטומטי אחרי כמה שניות.
אחרי שיוצאים מהדגמה, המכשירים מושתקים ומאפסים חלק מההגדרות הגלובליות, כולל ההגדרות הבאות:
- בהירות
- סיבוב אוטומטי
- פנס
- שפה
- נגישות
יציאה ממצב ההדגמה לקמעונאים
כדי לצאת ממצב קמעונאי, עובדים בחנויות קמעונאיות צריכים לוודא שמכשיר ההדגמה לא רשום לניהול מכשירים, ולאפס את המכשיר להגדרות המקוריות מתוכנת האתחול.