चित्र में चित्र

एंड्रॉइड हैंडहेल्ड डिवाइस के लिए पिक्चर-इन-पिक्चर (पीआईपी) सुविधा उपयोगकर्ताओं को एक छोटी विंडो में चल रही सक्रियता के साथ एक ऐप का आकार बदलने देती है। पीआईपी वीडियो ऐप्स के लिए विशेष रूप से उपयोगी है क्योंकि सामग्री खेलना जारी है जबकि उपयोगकर्ता अन्य कार्यों को करने के लिए स्वतंत्र है। उपयोगकर्ता सिस्टमयूआई के माध्यम से इस विंडो की स्थिति में फेरबदल कर सकते हैं और वर्तमान में तस्वीर के साथ तस्वीर में एप्लिकेशन के साथ बातचीत कर सकते हैं (तीन तक) ऐप-प्रदान की गई कार्रवाई।

PIP को उन अनुप्रयोगों से स्पष्ट रूप से ऑप्ट-इन की आवश्यकता होती है जो इसका समर्थन करते हैं और प्रति-गतिविधि के आधार पर काम करते हैं। (एक एकल आवेदन एकाधिक गतिविधियों केवल एक जिनमें से PIP में है हो सकता है,।) क्रियाएँ फोन करके चित्र में चित्र में प्रवेश करने का अनुरोध enterPictureInPictureMode() , और के रूप में गतिविधि कॉलबैक प्राप्त onPictureInPictureModeChanged()

setPictureInPictureParams() पद्धति PIP और कस्टम क्रियाओं में गतिविधियों को उनके पहलू अनुपात को नियंत्रित करने देती है, जो उपयोगकर्ताओं को इसे विस्तारित किए बिना गतिविधि के साथ सहभागिता करने की अनुमति देती हैं। PIP में, गतिविधि रुकी हुई है, लेकिन प्रतिपादन, स्थिति और सीधे स्पर्श इनपुट या विंडो फ़ोकस प्राप्त नहीं करता है। एक बार में केवल एक ही काम PIP में हो सकता है।

अधिक जानकारी Android डेवलपर Picture-in-picture प्रलेखन में उपलब्ध है।

डिवाइस आवश्यकताओं

PIP का समर्थन करने के लिए, /android/frameworks/base/core/java/android/content/pm/PackageManager.java PackageManager#FEATURE_PICTURE_IN_PICTURE सिस्टम फ़ीचर को /android/frameworks/base/core/java/android/content/pm/PackageManager.java में /android/frameworks/base/core/java/android/content/pm/PackageManager.java । PIP का समर्थन करने वाले डिवाइस में एक स्क्रीन होनी चाहिए जो कि इसकी सबसे छोटी चौड़ाई में 220dp से बड़ी हो। स्प्लिट स्क्रीन मल्टी-विंडो के समान, पीआईपी एक ही समय में कई गतिविधियों को ऑन-स्क्रीन चलाने की अनुमति देता है। इसलिए, इस उपयोग के मामले का समर्थन करने के लिए उपकरणों में पर्याप्त सीपीयू और रैम होना चाहिए।

कार्यान्वयन

गतिविधि जीवन चक्र प्रबंधन के अधिकांश के बीच प्रणाली में किया जाता है ActivityManager और WindowManagerSystemUI UI पैकेज में संदर्भ UI कार्यान्वयन है।

सिस्टम में संशोधन उसके आंतरिक व्यवहार को प्रभावित नहीं करना चाहिए जैसा कि संगतता टेस्ट सूट (सीटीएस) परीक्षणों द्वारा परिभाषित किया गया है। पीआईपी के लिए सिस्टम लॉजिक मुख्य रूप से "पिन किए गए" स्टैक के भीतर कार्यों और गतिविधियों के प्रबंधन के चारों ओर घूमता है। यहाँ एक त्वरित वर्ग अवलोकन है:

  • ActivityRecord : प्रत्येक गतिविधि के चित्र-में-चित्र स्थिति को ट्रैक करता है। उपयोगकर्ताओं को कुछ परिस्थितियों में PIP में प्रवेश करने से रोकने के लिए, जैसे कि लॉक स्क्रीन से या VR के दौरान, checkEnterPictureInPictureState() केस जोड़ें।
  • ActivityManagerService : अनुरोध प्रवेश PIP को गतिविधि से प्राथमिक इंटरफेस और से कॉल करने के लिए इंटरफ़ेस WindowManager और SystemUI PIP गतिविधि राज्य बदलने के लिए।
  • ActivityStackSupervisor : से कहा जाता ActivityManagerService में या पिन किए गए ढेर से बाहर कार्यों को ले जाने, अद्यतन करने WindowManager आवश्यक के रूप में।
  • PinnedStackWindowController : WindowManager से इंटरफ़ेस ActivityManager
  • PinnedStackController : रिपोर्ट सिस्टम में SystemUI में परिवर्तन, जैसे कि IME दिखाया / छिपा, पहलू अनुपात बदल गया, या क्रियाएं बदल गईं।
  • BoundsAnimationController : PIP गतिविधि विंडो को इस तरह से एनिमेट करता है जो आकार परिवर्तन करते समय कॉन्फ़िगरेशन परिवर्तन को ट्रिगर नहीं करता है।
  • PipSnapAlgorithm : सिस्टम और SystemUI दोनों में उपयोग किया जाने वाला एक साझा वर्ग जो स्क्रीन के किनारों के पास PIP विंडो के स्नैपिंग व्यवहार को नियंत्रित करता है।

संदर्भ SystemUI पीआईपी का पूर्ण कार्यान्वयन प्रदान करता है जो उपयोगकर्ताओं को सामान्य कार्यों को प्रस्तुत करने और विस्तार और बर्खास्तगी जैसे सामान्य हेरफेर का समर्थन करता है। डिवाइस निर्माता इन परिवर्तनों पर निर्माण कर सकते हैं, जब तक कि वे सीडीडी द्वारा परिभाषित आंतरिक व्यवहार को प्रभावित नहीं करते हैं। यहाँ एक त्वरित वर्ग अवलोकन है:

  • PipManager : SystemUI घटक जो SystemUI साथ शुरू किया गया है।
  • PipTouchHandler : टच हैंडलर, जो पीआईपी में हेरफेर करने वाले इशारों को नियंत्रित करता है। इसका उपयोग केवल तब किया जाता है जब PIP के लिए इनपुट उपभोक्ता सक्रिय हो (देखें InputConsumerController )। नए हावभाव यहां जोड़े जा सकते हैं।
  • PipMotionHelper : एक सुविधा वर्ग जो PIP स्थिति और स्क्रीन पर स्वीकार्य क्षेत्र को ट्रैक करता है। के माध्यम से कॉल ActivityManagerService को अपडेट करने या स्थिति और PIP के आकार चेतन करने के लिए।
  • PipMenuActivityController : एक गतिविधि शुरू करता है जो वर्तमान में PIP में गतिविधि द्वारा प्रदान किए गए कार्यों को दिखाता है। यह गतिविधि एक कार्य-ओवरले गतिविधि है, और इसे ओवरलेइंग इनपुट उपभोक्ता को हटाने की अनुमति देता है ताकि यह इंटरैक्टिव हो सके।
  • PipMenuActivity : मेनू गतिविधि के लिए कार्यान्वयन।
  • PipMediaController : श्रोता अपडेट कर देता SystemUI जब मीडिया सत्र एक तरीका है कि PIP पर डिफ़ॉल्ट कार्यों को प्रभावित कर सकता में बदल जाता है।
  • PipNotificationController : नियंत्रक जो यह सुनिश्चित करता है कि उपयोगकर्ता पीआईपी सुविधा का उपयोग करते समय एक अधिसूचना सक्रिय है।
  • PipDismissViewController : ओवरले उपयोगकर्ताओं को दिखाया जाता है जब वे PIP के साथ बातचीत करना शुरू करते हैं ताकि यह इंगित किया जा सके कि इसे खारिज किया जा सकता है।

डिफ़ॉल्ट प्लेसमेंट

विभिन्न सिस्टम संसाधन हैं जो PIP के डिफ़ॉल्ट प्लेसमेंट को नियंत्रित करते हैं:

  • config_defaultPictureInPictureGravity : गुरुत्वाकर्षण पूर्णांक, जो PIP को रखने के लिए कोने को नियंत्रित करता है, जैसे BOTTOM|RIGHT |
  • config_defaultPictureInPictureScreenEdgeInsets : स्क्रीन के किनारों से पीआईपी लगाने के लिए।
  • config_pictureInPictureDefaultSizePercent और config_pictureInPictureDefaultAspectRatio : स्क्रीन चौड़ाई और पहलू अनुपात के प्रतिशत का संयोजन PIP के आकार को नियंत्रित करता है। गणना की गई डिफ़ॉल्ट पीआईपी का आकार CTS और CDD द्वारा परिभाषित @dimen/default_minimal_size_pip_resizable_task से छोटा नहीं होना चाहिए।
  • config_pictureInPictureSnapMode : तड़क- config_pictureInPictureSnapMode व्यवहार को PipSnapAlgorithm में परिभाषित किया PipSnapAlgorithm

डिवाइस के कार्यान्वयन को सीडीडी और सीटीएस में परिभाषित न्यूनतम और अधिकतम पहलू अनुपात को नहीं बदलना चाहिए।

अनुमतियां

AppOpsManager ( master/core/java/android/app/AppOpsManager.java ) में प्रति-पैकेज "एप्लिकेशन ऑपरेशन" ( OP_PICTURE_IN_PICTURE ), उपयोगकर्ताओं को सिस्टम सेटिंग्स के माध्यम से प्रति-एप्लिकेशन स्तर पर master/core/java/android/app/AppOpsManager.java को नियंत्रित करने की सुविधा देता है। जब डिवाइस गतिविधि-इन-पिक्चर मोड दर्ज करने का अनुरोध करता है, तो डिवाइस कार्यान्वयन को इस चेक का सम्मान करना होगा।

परिक्षण

परीक्षण PIP कार्यान्वयन करने के लिए, चलाने के सभी चित्र में चित्र संबंधित परीक्षण के तहत मेजबान साइड में पाया सीटीएस परीक्षण /cts/hostsidetests/services/activitymanager , विशेष रूप से में ActivityManagerPinnedStackTests.java