ছবিতে-ছবিতে

অ্যান্ড্রয়েড হ্যান্ডহেল্ড ডিভাইসগুলির জন্য পিকচার-ইন-পিকচার (পিআইপি) বৈশিষ্ট্যটি ব্যবহারকারীদের একটি ছোট উইন্ডোতে চলমান অ্যাক্টিভিটি সহ একটি অ্যাপের আকার পরিবর্তন করতে দেয়। পিআইপি ভিডিও অ্যাপের জন্য বিশেষভাবে উপযোগী কারণ ব্যবহারকারী অন্যান্য ক্রিয়া সম্পাদনের জন্য স্বাধীন থাকাকালীন বিষয়বস্তু চলতে থাকে। ব্যবহারকারীরা SystemUI-এর মাধ্যমে এই উইন্ডোর অবস্থানকে ম্যানিপুলেট করতে পারে এবং অ্যাপ-প্রদত্ত অ্যাকশনের (তিনটি পর্যন্ত) সাথে বর্তমানে পিকচার-ইন-পিকচারে থাকা অ্যাপ্লিকেশনটির সাথে ইন্টারঅ্যাক্ট করতে পারে।

PIP-এর জন্য এমন অ্যাপ্লিকেশনগুলি থেকে স্পষ্টভাবে অপ্ট-ইন করতে হবে যা এটিকে সমর্থন করে এবং প্রতি-ক্রিয়াকলাপের ভিত্তিতে কাজ করে। (একটি একক অ্যাপ্লিকেশনে একাধিক ক্রিয়াকলাপ থাকতে পারে, যার মধ্যে শুধুমাত্র একটি পিআইপিতে রয়েছে।) অ্যাক্টিভিটিগুলি enterPictureInPictureMode() কল করে পিকচার-ইন-পিকচারে প্রবেশ করার অনুরোধ করে এবং onPictureInPictureModeChanged() আকারে কার্যকলাপ কলব্যাক গ্রহণ করে।

setPictureInPictureParams() পদ্ধতিটি পিআইপি এবং কাস্টম অ্যাকশনে থাকাকালীন ক্রিয়াকলাপগুলিকে তাদের আকৃতির অনুপাত নিয়ন্ত্রণ করতে দেয়, যা ব্যবহারকারীদের এটিকে প্রসারিত না করেই কার্যকলাপের সাথে ইন্টারঅ্যাক্ট করতে দেয়। পিআইপি-তে, অ্যাক্টিভিটি একটি বিরতিতে আছে, কিন্তু রেন্ডারিং, স্টেট এবং সরাসরি টাচ ইনপুট বা উইন্ডো ফোকাস গ্রহণ করে না। একটি সময়ে শুধুমাত্র একটি একক কাজ PIP তে হতে পারে।

আরও তথ্য Android বিকাশকারী পিকচার-ইন-পিকচার ডকুমেন্টেশনে উপলব্ধ।

ডিভাইসের প্রয়োজনীয়তা

PIP সমর্থন করতে, /android/frameworks/base/core/java/android/content/pm/PackageManager.javaPackageManager#FEATURE_PICTURE_IN_PICTURE সিস্টেম বৈশিষ্ট্য সক্রিয় করুন। যে ডিভাইসগুলি PIP সমর্থন করে সেগুলির একটি স্ক্রিন থাকতে হবে যা 220dp এর চেয়ে ছোট প্রস্থে বড়। স্প্লিট স্ক্রিন মাল্টি-উইন্ডোর মতো, পিআইপি একই সময়ে অন-স্ক্রীনে একাধিক ক্রিয়াকলাপ চালানোর অনুমতি দেয়। অতএব, এই ব্যবহারের ক্ষেত্রে সমর্থন করার জন্য ডিভাইসগুলিতে পর্যাপ্ত CPU এবং RAM থাকা উচিত।

বাস্তবায়ন

ActivityManager এবং WindowManager এর মধ্যে সিস্টেমে বেশিরভাগ অ্যাক্টিভিটি লাইফসাইকেল ম্যানেজমেন্ট করা হয়। রেফারেন্স UI বাস্তবায়ন SystemUI প্যাকেজে রয়েছে।

কম্প্যাটিবিলিটি টেস্ট স্যুট (CTS) পরীক্ষা দ্বারা সংজ্ঞায়িত সিস্টেমের পরিবর্তনগুলি এর অন্তর্নিহিত আচরণকে প্রভাবিত করবে না। পিআইপি-এর সিস্টেম লজিক মূলত "পিন করা" স্ট্যাকের মধ্যে কাজ এবং ক্রিয়াকলাপ পরিচালনার চারপাশে ঘোরে। এখানে একটি দ্রুত ক্লাস ওভারভিউ আছে:

  • ActivityRecord : প্রতিটি অ্যাক্টিভিটির পিকচার-ইন-পিকচার স্টেট ট্র্যাক করে। নির্দিষ্ট পরিস্থিতিতে যেমন লক স্ক্রিন থেকে বা VR চলাকালীন ব্যবহারকারীদের PIP এ প্রবেশ করতে বাধা দিতে, checkEnterPictureInPictureState() এ কেস যোগ করুন।
  • ActivityManagerService : PIP এ প্রবেশের অনুরোধ করার জন্য কার্যকলাপ থেকে প্রাথমিক ইন্টারফেস এবং PIP কার্যকলাপের অবস্থা পরিবর্তন করার জন্য WindowManager এবং SystemUI থেকে কল করার ইন্টারফেস।
  • ActivityStackSupervisor : ActivityManagerService থেকে কাজগুলিকে পিন করা স্ট্যাকের মধ্যে বা বাইরে সরানোর জন্য বলা হয়, প্রয়োজনে WindowManager আপডেট করে।
  • PinnedStackWindowController : ActivityManager থেকে WindowManager ইন্টারফেস।
  • PinnedStackController : সিস্টেমের পরিবর্তনগুলি SystemUI তে রিপোর্ট করে, যেমন IME দেখানো/লুকানো, আকৃতির অনুপাত পরিবর্তিত হয়েছে, বা ক্রিয়াগুলি পরিবর্তিত হয়েছে৷
  • BoundsAnimationController : পিআইপি অ্যাক্টিভিটি উইন্ডোগুলিকে এমনভাবে অ্যানিমেট করে যা আকার পরিবর্তন করার সময় কনফিগারেশন পরিবর্তন ট্রিগার করে না।
  • PipSnapAlgorithm : সিস্টেম এবং SystemUI উভয় ক্ষেত্রেই ব্যবহৃত একটি শেয়ার্ড ক্লাস যা পর্দার প্রান্তের কাছে PIP উইন্ডোর স্ন্যাপিং আচরণ নিয়ন্ত্রণ করে।

রেফারেন্স SystemUI PIP-এর একটি সম্পূর্ণ বাস্তবায়ন প্রদান করে যা ব্যবহারকারীদের কাছে কাস্টম অ্যাকশন উপস্থাপন এবং সাধারণ ম্যানিপুলেশন, যেমন সম্প্রসারণ এবং বরখাস্ত সমর্থন করে। ডিভাইস নির্মাতারা এই পরিবর্তনগুলি তৈরি করতে পারে, যতক্ষণ না তারা CDD দ্বারা সংজ্ঞায়িত অন্তর্নিহিত আচরণগুলিকে প্রভাবিত করে না। এখানে একটি দ্রুত ক্লাস ওভারভিউ আছে:

  • PipManager : SystemUI কম্পোনেন্ট যা SystemUI দিয়ে শুরু হয়।
  • PipTouchHandler : টাচ হ্যান্ডলার, যা PIP কে ম্যানিপুলেট করে এমন অঙ্গভঙ্গি নিয়ন্ত্রণ করে। এটি শুধুমাত্র তখনই ব্যবহৃত হয় যখন PIP-এর জন্য ইনপুট ভোক্তা সক্রিয় থাকে (দেখুন InputConsumerController )। এখানে নতুন অঙ্গভঙ্গি যোগ করা যেতে পারে.
  • PipMotionHelper : একটি সুবিধার শ্রেণী যা পিআইপি অবস্থান এবং অন-স্ক্রীনে অনুমোদিত অঞ্চল ট্র্যাক করে। PIP এর অবস্থান এবং আকার আপডেট বা অ্যানিমেট করতে ActivityManagerService এর মাধ্যমে কল করে।
  • PipMenuActivityController : এমন একটি ক্রিয়াকলাপ শুরু করে যা বর্তমানে পিআইপি-তে থাকা কার্যকলাপ দ্বারা প্রদত্ত ক্রিয়া দেখায়। এই ক্রিয়াকলাপটি একটি টাস্ক-ওভারলে কার্যকলাপ, এবং এটিকে ইন্টারেক্টিভ হওয়ার অনুমতি দেওয়ার জন্য ওভারলেইং ইনপুট ভোক্তাকে সরিয়ে দেয়।
  • PipMenuActivity : মেনু কার্যকলাপের জন্য বাস্তবায়ন।
  • PipMediaController : শ্রোতা যেটি SystemUI আপডেট করে যখন মিডিয়া সেশন এমনভাবে পরিবর্তিত হয় যা পিআইপি-তে ডিফল্ট ক্রিয়াগুলিকে প্রভাবিত করতে পারে।
  • PipNotificationController : একটি নিয়ামক যেটি নিশ্চিত করে যে কোনো ব্যবহারকারী PIP বৈশিষ্ট্য ব্যবহার করার সময় একটি বিজ্ঞপ্তি সক্রিয় থাকে।
  • PipDismissViewController : ব্যবহারকারীরা যখন PIP এর সাথে ইন্টারঅ্যাক্ট করা শুরু করে তখন ওভারলে দেখানো হয় যে এটি খারিজ করা যেতে পারে।

ডিফল্ট বসানো

বিভিন্ন সিস্টেম রিসোর্স আছে যা PIP এর ডিফল্ট বসানো নিয়ন্ত্রণ করে:

  • config_defaultPictureInPictureGravity : মাধ্যাকর্ষণ পূর্ণসংখ্যা, যা পিআইপি রাখার জন্য কোণার নিয়ন্ত্রণ করে, যেমন BOTTOM|RIGHT
  • config_defaultPictureInPictureScreenEdgeInsets : PIP বসানোর জন্য স্ক্রিনের দিক থেকে অফসেটগুলি।
  • config_pictureInPictureDefaultSizePercent এবং config_pictureInPictureDefaultAspectRatio : স্ক্রিনের প্রস্থের শতাংশের সংমিশ্রণ এবং আকৃতির অনুপাত পিআইপির আকার নিয়ন্ত্রণ করে। CTS এবং CDD দ্বারা সংজ্ঞায়িত হিসাবে গণনাকৃত ডিফল্ট PIP আকার @dimen/default_minimal_size_pip_resizable_task এর চেয়ে ছোট হওয়া উচিত নয়।
  • config_pictureInPictureSnapMode : PipSnapAlgorithm এ সংজ্ঞায়িত স্ন্যাপিং আচরণ।

ডিভাইস বাস্তবায়নে CDD এবং CTS-এ সংজ্ঞায়িত ন্যূনতম এবং সর্বাধিক আকৃতির অনুপাত পরিবর্তন করা উচিত নয়।

অনুমতি

AppOpsManager ( main/core/java/android/app/AppOpsManager.java )-এ প্যাকেজ প্রতি "অ্যাপ্লিকেশন অপারেশন" ( OP_PICTURE_IN_PICTURE ) ব্যবহারকারীদের সিস্টেম সেটিংসের মাধ্যমে প্রতি-অ্যাপ্লিকেশন স্তরে PIP নিয়ন্ত্রণ করতে দেয়৷ যখন কোনো অ্যাক্টিভিটি পিকচার-ইন-পিকচার মোডে প্রবেশের অনুরোধ করে তখন ডিভাইস ইমপ্লিমেন্টেশনকে এই চেকটিকে সম্মান করতে হবে।

পরীক্ষামূলক

PIP বাস্তবায়ন পরীক্ষা করতে, /cts/hostsidetests/services/activitymanager এর অধীনে হোস্ট-সাইড CTS পরীক্ষায় পাওয়া সমস্ত পিকচার-ইন-পিকচার সংক্রান্ত পরীক্ষা চালান, বিশেষ করে ActivityManagerPinnedStackTests.java তে।