অ্যান্ড্রয়েড 9 (এবং নিম্নতর), সারফেসফ্লিংগার এবং DisplayManagerService
হার্ড-কোডেড আইডি 0 এবং 1 সহ সর্বাধিক দুটি ফিজিক্যাল ডিসপ্লের অস্তিত্ব ধরে নিয়েছিল। স্ট্যাটিক ডিসপ্লে আইডেন্টিফায়ারে বর্ণিত হিসাবে, সারফেসফ্লিংগার এখন একটি হার্ডওয়্যার কম্পোজার (HWC) API ব্যবহার করে যা একটি স্থিতিশীল ডিসপ্লে আইডি পরিচালনা করতে একটি স্থিতিশীল ডিসপ্লে নম্বর তৈরি করে।
SurfaceControl# SurfaceControl#getPhysicalDisplayIds
বা DisplayEventReceiver
হটপ্লাগ ইভেন্ট থেকে 64-বিট ডিসপ্লে আইডি পাওয়ার পরে ফ্রেমওয়ার্কটি SurfaceControl#getPhysicalDisplayToken
মাধ্যমে ফিজিক্যাল ডিসপ্লের জন্য IBinder
টোকেন দেখতে পারে।
Android 10-এ, প্রাথমিক অভ্যন্তরীণ প্রদর্শন হল TYPE_BUILT_IN
, এবং সংযোগের ধরন নির্বিশেষে সমস্ত গৌণ প্রদর্শনগুলি TYPE_HDMI
হিসাবে পতাকাঙ্কিত। অতএব, অতিরিক্ত অভ্যন্তরীণ প্রদর্শনগুলি বর্তমানে বহিরাগত হিসাবে বিবেচিত হয়। একটি সমাধান হিসাবে, ডিভাইস-নির্দিষ্ট কোড DisplayAddress.Physical#getPort
সম্পর্কে অনুমান করতে পারে যদি HWC পরিচিত হয় এবং পোর্ট বরাদ্দের যুক্তি অনুমানযোগ্য হয়।
বাস্তবায়ন
পূর্বে, ডিসপ্লেগুলিকে 32-বিট আইডি দ্বারা চিহ্নিত করা হত, যেখানে 0 হল অভ্যন্তরীণ প্রদর্শন, 1 হল বাহ্যিক প্রদর্শন, [2, INT32_MAX] হল HWC ভার্চুয়াল ডিসপ্লে, এবং -1 হল একটি অবৈধ ডিসপ্লে বা একটি নন-HWC ভার্চুয়াল ডিসপ্লে। SurfaceFlinger এবং DisplayManagerService
জন্য দুটির বেশি ডিসপ্লে ট্র্যাক করতে এবং পূর্বে দেখা ডিসপ্লেগুলিকে চিনতে, ডিসপ্লেগুলিকে স্থিতিশীল এবং স্থায়ী আইডি দেওয়া উচিত।
যদি HWC IComposerClient.getDisplayIdentificationData
সমর্থন করে এবং ডিসপ্লে আইডেন্টিফিকেশন ডেটা প্রদান করে, SurfaceFlinger EDID স্ট্রাকচার পার্স করে এবং ফিজিক্যাল এবং HWC ভার্চুয়াল ডিসপ্লের জন্য স্থিতিশীল 64-বিট ডিসপ্লে আইডি বরাদ্দ করে। আইডিগুলি একটি বিকল্প প্রকার ব্যবহার করে প্রকাশ করা হয়, যেখানে নাল মানটি একটি অবৈধ প্রদর্শন বা অ-HWC ভার্চুয়াল প্রদর্শনকে উপস্থাপন করে। HWC সমর্থন ছাড়া, SurfaceFlinger সর্বাধিক দুটি শারীরিক প্রদর্শনের সাথে উত্তরাধিকারী আচরণে ফিরে আসে।