ছবিতে ছবিতে,ছবিতে ছবিতে,ছবিতে ছবিতে,ছবিতে ছবিতে

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

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

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

আরও তথ্য অ্যান্ড্রয়েড ডেভেলপার পিকচার-ইন-পিকচার ডকুমেন্টেশনে পাওয়া যাবে।

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

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

বাস্তবায়ন

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

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

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

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

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

ডিফল্ট প্লেসমেন্ট

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

  • config_defaultPictureInPictureGravity : মাধ্যাকর্ষণ পূর্ণসংখ্যা, যা PIP স্থাপনের জন্য কোণা নিয়ন্ত্রণ করে, যেমন BOTTOM|RIGHT
  • config_defaultPictureInPictureScreenEdgeInsets : PIP স্থাপনের জন্য স্ক্রিনের পাশ থেকে অফসেট।
  • config_pictureInPictureDefaultSizePercent এবং config_pictureInPictureDefaultAspectRatio : স্ক্রিনের প্রস্থ এবং আকৃতির অনুপাতের শতাংশের সমন্বয় PIP-এর আকার নিয়ন্ত্রণ করে। গণনা করা ডিফল্ট PIP আকার CTS এবং CDD দ্বারা সংজ্ঞায়িত @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 তে।