এই প্রদর্শন-নির্দিষ্ট ক্ষেত্রগুলিতে করা আপডেটগুলি নীচে দেওয়া হল:
অ্যান্ড্রয়েড ১০ ডিফল্ট ডিসপ্লে ছাড়া অন্য ডিসপ্লেতে চালিত অ্যাপগুলোর জন্য সফটওয়্যার কীবোর্ড সমর্থন করে।
ডিফল্ট নয় এমন ডিসপ্লেতে চলমান অ্যাপস
ইনপুট মেথড এডিটর (IME)-এর সফটওয়্যার কীবোর্ড কোন ডিসপ্লেতে দেখাবে, তার উপর ভিত্তি করে বিভিন্ন মোড রয়েছে। সফটওয়্যার কীবোর্ডটি দেখানো হয়:
- যে ডিসপ্লেতে ফোকাস করা অ্যাপটি দেখা যায়, এটিও সেই একই ডিসপ্লে।
- ফোকাস করা অ্যাপটি যখন কোনো নন-ডিফল্ট ডিসপ্লেতে চলছে, তখন এটিই ডিফল্ট ডিসপ্লে।
- একেবারেই কোনো ডিসপ্লে নেই ।
যে ডিসপ্লেতে ফোকাস করা অ্যাপটি প্রদর্শিত হয়, তার সেটিংসের উপর ভিত্তি করে সিস্টেমটি কোন মোড ব্যবহার করবে তা নির্ধারণ করে। আরও বিস্তারিত জানতে দেখুন:
-
WindowManager#setDisplayImePolicy() -
WindowManager#getDisplayImePolicy()

চিত্র ১. সেকেন্ডারি ডিসপ্লেতে প্রদর্শিত আইএমই সফটওয়্যার কিবোর্ড, টার্গেট অ্যাপ সহ।
সিস্টেমটি একটিমাত্র আইএমই (IME) ব্যবহার করে, কিন্তু ব্যবহারকারীর ফোকাস অনুসরণ করতে এটি ডিসপ্লে পরিবর্তন করতে পারে। অ্যান্ড্রয়েড ১০ স্বয়ংক্রিয়ভাবে আশা করে যে, সমস্ত ফার্স্ট-পার্টি ও থার্ড-পার্টি আইএমই তৈরি হওয়ার সময় নতুন ডিসপ্লে সাইজ অনুযায়ী তাদের লেআউট সংশোধন করবে এবং আকার পরিবর্তন করবে।
যদি ডিসপ্লে A-তে একটি সক্রিয় সংযোগ থাকে এবং ডিসপ্লে B-এর কোনো ইনপুট ফিল্ড ইনপুট ফোকাসের জন্য অনুরোধ করে, তাহলে নিম্নলিখিত প্রবাহটি ঘটে:
- ডিসপ্লে B-এর ইনপুট ফিল্ড থেকে একটি নতুন ইনপুট সংযোগ আসে।
-
InputMethodManagerServiceযাচাই করে দেখে যে সংযোগটি অনুমোদন করা উচিত কিনা। - IME-এর জন্য একটি ডিসপ্লে নির্বাচন করা হয়। যদি ডিসপ্লে B, IME প্রদর্শনে সক্ষম হয় এবং তা দেখানোর অনুমতি থাকে, তবে B ব্যবহৃত হয়। অন্যথায়, ডিভাইসের প্রাথমিক ডিসপ্লেটি নির্বাচিত হয়।
- নির্বাচিত ডিসপ্লেটি যদি ডিসপ্লে A না হয়, তাহলে সংযোগটি পুনরায় স্থাপন করা হয়।
InputMethodServiceধ্বংস করে আবার তৈরি করা হয়।
নিরাপত্তা বিধিনিষেধ
সিস্টেমটি এমন ভার্চুয়াল ডিসপ্লেতে কোনো আইএমই (IME) দেখাবে না যা সিস্টেমের মালিকানাধীন নয়। এর কারণ হলো একটি নিরাপত্তা ঝুঁকি, যেখানে কোনো ক্ষতিকারক অ্যাপ সিস্টেম ডেকোরেশন সাপোর্ট চালু রেখে একটি ভার্চুয়াল ডিসপ্লে তৈরি করতে পারে এবং সেই সারফেস থেকে ব্যবহারকারীর সংবেদনশীল তথ্য, যেমন টাইপিং প্রেডিকশন ও কাস্টম ব্যাকগ্রাউন্ড, পড়ে নিতে পারে।
বাস্তবায়ন
অ্যান্ড্রয়েড ৯ (এবং এর পূর্ববর্তী সংস্করণ)-এ, আইএমই (IME) শুধুমাত্র ডিফল্ট স্ক্রিনেই উপলব্ধ ছিল, যেমনটি 'অন-স্ক্রিন ইনপুট পদ্ধতি' অংশে বর্ণনা করা হয়েছে। অ্যান্ড্রয়েড ১০ (এবং এর পরবর্তী সংস্করণ)-এ, একজন ব্যবহারকারী ফোকাস পরিবর্তনের মাধ্যমে বিভিন্ন ডিসপ্লেতে থাকা ভিন্ন ভিন্ন ইনপুট টেক্সট ফিল্ডের মধ্যে পরিবর্তন করতে পারেন এবং আইএমই উইন্ডোটি সেকেন্ডারি ডিসপ্লেগুলোতে চলে যায়।
WindowManager এর ইমপ্লিমেন্টেশনটি IME-এর অবস্থা পরিচালনা করার জন্য ইনপুট মেথড উইন্ডো (যে IME উইন্ডোতে সফট কিবোর্ড আঁকা হয়) এবং ইনপুট মেথড টার্গেট (যে উইন্ডোতে IME ইনপুট যায়) ট্র্যাক করে।
InputMethodManagerService (IMMS)-এর ক্ষেত্রে, অন্য কোনো বিল্ট-ইন মেকানিজম নেই যা ফোকাস অন্য ডিসপ্লেতে স্থানান্তরিত করার সময় ডিসপ্লে পরিবর্তনের তথ্য InputMethodService (IMS)-এ পৌঁছে দিতে এবং রানটাইমে কিবোর্ড লেআউট পুনর্বিন্যাস করতে পারে।
ডিসপ্লেগুলোর মধ্যে IME উইন্ডো স্যুইচ করার জন্য, অ্যান্ড্রয়েড ১০ নিম্নলিখিত ব্যবস্থা গ্রহণ করে:
- এখন
DisplayContent#mInputMethodWindowএবংDisplayContent#mInputMethodTargetমাধ্যমে প্রতিটি ডিসপ্লের জন্য IME এবং ইনপুট টার্গেট উইন্ডো ট্র্যাক করা হয়, যাতে WindowManager (WM) প্রতিটি ডিসপ্লে থেকে স্বাধীনভাবে IME-এর ফোকাস অবস্থা পরিচালনা করতে পারে। - IMMS-এর দিকে, যখন
ViewRootImpl#handleWindowFocusChanged -> InputMethodManager#onPostWindowFocus -> IMMS#startInputOrWindowGainedFocusএর মাধ্যমে এক্সটার্নাল ডিসপ্লে থেকে কোনো অ্যাপ ক্লায়েন্টের ফোকাস রিকোয়েস্ট গৃহীত হয়, তখন এটি প্রথমে বর্তমান ইনপুট মেথড সার্ভিসটিকে আনবাইন্ড করে এবং তারপরonServiceConnected()এ এক্সটার্নাল ডিসপ্লের জন্য নতুন IME উইন্ডো টোকেনটি পুনরায় সংযুক্ত করতে সার্ভিসটিকে রিবাইন্ড করে। - IMS-এর দিকে,
IMS#attachTokenপ্রাপ্ত হওয়ার পর নিম্নলিখিত প্রক্রিয়াটি ঘটে:-
InputMethodService#attachToken()-এ সার্ভিস কনটেক্সটের ডিসপ্লে আপডেট করার জন্যContextImpl#updateDisplayকল করা হয়। এটি কিবোর্ডের লেআউট সংশোধন করতে এবং বর্তমান কনটেক্সট যাচাই করে টার্গেট ডিসপ্লের সাথে মানিয়ে নিতেViewGroup#addView()কল করে। -
DisplayContent#setInputMethodWindowLocked()কল করার পর, ইমপ্লিমেন্টেশনটি রিসোর্স এবং ডিসপ্লে মেট্রিক্স ওভাররাইড করার জন্যWindowProcessControllerব্যবহার করে প্রসেস-লেভেলের ডিসপ্লে কনফিগারেশন পরিবর্তনগুলো IME প্রসেসে পাঠায়। -
onConfigurationChanged()এবং ইনপুট ভিউ পুনরায় চালু করার জন্যViewGroup#addView()কলের পরে,InputMethodServiceক্লায়েন্ট সঠিক ডিসপ্লে মেট্রিক্স সহ সঠিক কনফিগারেশনটি পায়।
-