একটি ইভেন্ট অবস্থার পরিবর্তন ঘটায় এবং বিভিন্ন কার্যক্রম শুরু করে। ইভেন্টগুলো সংকেত হিসেবে কাজ করে, যা সিস্টেম UI থেকে অথবা ইন্টেন্ট ব্যবহার করে প্রসেসের বাইরে থেকে প্রেরণ করা হয়। ইভেন্টগুলো স্কেলেবল UI-কে এমন ঘটনা সম্পর্কে অবহিত করে যার জন্য প্রতিক্রিয়ার প্রয়োজন।
একটি স্কেলেবল UI ইভেন্ট হলো একটি সিস্টেম সিগন্যাল, যা হার্ডওয়্যার বা সফটওয়্যার পরিবর্তনের ফলে সক্রিয় হয় এবং একটি প্যানেলের অবস্থা পরিবর্তন করতে পারে। এই ইভেন্টগুলো এমন ঘটনা সম্পর্কে ফ্রেমওয়ার্ককে অবহিত করে, যার জন্য একটি UI প্রতিক্রিয়ার প্রয়োজন হয়। প্যানেলের অবস্থার উপর আরও সুনির্দিষ্ট নিয়ন্ত্রণের জন্য, বিল্ট-ইন সিস্টেম ইভেন্টগুলোর পাশাপাশি আপনি কাস্টম ইভেন্টও সংজ্ঞায়িত করতে পারেন।
একটি ঘটনার কাঠামো
একটি বাধ্যতামূলক অনন্য শনাক্তকারী (ID) একটি ঘটনাকে শনাক্ত করে। এই ID ঘটনাটির সংঘটনের ধরনকে শ্রেণিবদ্ধ করে, যেমন _System_TaskOpenEvent বা _System_PanelEmptyEvent ।
এই আইডি ছাড়াও, একটি ইভেন্ট ঐচ্ছিকভাবে টোকেন বা কী-ভ্যালু পেয়ার বহন করতে পারে, যা ইভেন্টটির প্রেক্ষাপট ও বিস্তারিত তথ্য প্রদান করে। এই টোকেনগুলো ইভেন্টগুলোকে আরও সূক্ষ্মভাবে ফিল্টার করার সুযোগ দেয়, যার ফলে শুধুমাত্র নির্দিষ্ট শর্তের অধীনেই ট্রানজিশন বা অ্যাকশন ট্রিগার করা যায়।
টোকেনগুলো সেমিকোলন ( ; ) দ্বারা পৃথক করা কী-ভ্যালু জোড়ের একটি তালিকা হিসেবে ইভেন্টে পাঠানো হয়। নিচে সিস্টেম সমর্থিত কী-গুলোর তালিকা দেওয়া হলো:
| চাবি | বর্ণনা |
|---|---|
panelId | ইভেন্টটির সাথে সংশ্লিষ্ট একটি নির্দিষ্ট UI প্যানেল শনাক্ত করে। |
component | কম্পোনেন্টের নাম নির্দিষ্ট করে, যেমন ইভেন্টের সাথে যুক্ত কোনো অ্যাক্টিভিটি। |
package | ইভেন্ট-সম্পর্কিত প্যাকেজের নাম নির্দেশ করে। |
panelToVariantId | নির্দিষ্ট প্রেক্ষাপটে কোনো প্যানেলের টার্গেট ভ্যারিয়েন্ট নির্ধারণ করে। কোনো প্যানেলের ট্রানজিশন শুনে অ্যানিমেশন ক্যাসকেড করতে এই অ্যাট্রিবিউটটি ব্যবহার করুন। উদাহরণস্বরূপ, যখন প্যানেল A একটি খোলা অবস্থায় ট্রানজিশন করে, তখন প্যানেল B-কে বন্ধ অবস্থায় ট্রানজিশন করানো। |
উদাহরণস্বরূপ:
"component=com.android.app;panelId=panel1"
ইভেন্ট মেলানোর যুক্তি
যখন কোনো ইভেন্ট প্রেরণ করা হয়, তখন একটি ট্রানজিশন বা অ্যাকশন চালু করার জন্য সেটিকে অবশ্যই নির্ধারিত মানদণ্ডের সাথে মেলাতে হয়। এই মেলানোর প্রক্রিয়াটি দুটি পর্যায়ে সম্পন্ন হয়:
ইভেন্ট
idকঠোরভাবে মেলানো আবশ্যক: প্রেরিত ইভেন্টেরidঅবশ্যই ট্রানজিশন বা অ্যাকশন ইভেন্ট ফিল্টারে নির্দিষ্ট করাidসাথে হুবহু মিলতে হবে। যদি আইডিগুলো না মেলে, তাহলে ইভেন্টটি অমিল বলে গণ্য হবে।আংশিক ইভেন্ট টোকেন মেলানো: যখন ইভেন্ট আইডি মিলে যায়, তখন সিস্টেম ফিল্টারে সংজ্ঞায়িত টোকেনগুলোর সাথে একটি ইভেন্টের টোকেনগুলো মূল্যায়ন করার জন্য আংশিক মেলানোর পদ্ধতি ব্যবহার করে।
মিল ঘটার জন্য, ট্রানজিশনের ইভেন্ট ডেফিনিশনে উল্লেখিত সমস্ত ইভেন্ট প্রপার্টি (টোকেন) অবশ্যই ডিসপ্যাচ করা ইভেন্টের সংশ্লিষ্ট প্রপার্টিগুলোর সাথে হুবহু মিলতে হবে।
তবে, প্রেরিত ইভেন্টে এমন অতিরিক্ত টোকেন থাকতে পারে যা ফিল্টারে স্পষ্টভাবে সংজ্ঞায়িত করা নেই। অতিরিক্ত টোকেনগুলো মিল খুঁজে পেতে বাধা দেয় না। বরং, মিল খুঁজে বের করার মূল্যায়নে সেগুলোকে উপেক্ষা করা হয়।
বিপরীতভাবে, যদি ফিল্টারটি এমন একটি টোকেন নির্দিষ্ট করে যা ডিসপ্যাচ করা ইভেন্টে উপস্থিত নেই অথবা, যদি মিলে যাওয়া কোনো টোকেনের মান সামঞ্জস্যপূর্ণ না হয়, তবে সেটিকে একটি মিল হিসেবে বিবেচনা করা হয় না।
উদাহরণস্বরূপ, এমন একটি ট্রানজিশন বিবেচনা করুন যা id="app_open" ট্রিগার হওয়ার জন্য panelId="panel1" , component="com.android.myapp.Activity" অধীনে, সংজ্ঞায়িত করা হয়েছে।
যদি কোনো ডিসপ্যাচ করা ইভেন্টের id="app_open" , panelId="panel1" এবং component="com.android.myapp.Activity" থাকে, তাহলে একটি মিল খুঁজে পাওয়া যায়। ফিল্টারের সমস্ত শর্ত পূরণ হলে, Activity value in the dispatched event is considered a match for ।
তবে, যখন id="app_open" , panelId="panel1" এবং component="com.android.yourapp.Activity" component তখন ডিসপ্যাচ করা ইভেন্টের সাথে মিল খুঁজে পাওয়া যায় না। যদিও id এবং panelId মিলে যায়, ট্রানজিশনের component com.android.myapp ডিসপ্যাচ করা ইভেন্টের com.android.yourapp সাথে মেলে না।
রূপান্তর ট্রিগার
একটি ট্রানজিশন মিলে গেলেও, এর মানে এই নয় যে সেটি ট্রিগার হবে। প্রতিটি ইভেন্টের জন্য কেবল একটি ট্রানজিশনই ট্রিগার হতে পারে। স্কেলেবল UI-এর লক্ষ্য হলো শুধুমাত্র সবচেয়ে কাছের মিলটিকেই ট্রিগার করা।
উদাহরণস্বরূপ, যখন দুটি ট্রানজিশন — একটিতে কম্পোনেন্টের নাম আছে এবং অন্যটিতে কম্পোনেন্টের -m নেই — মিলে যায়, তখন শুধুমাত্র কম্পোনেন্টের নামসহ ট্রানজিশনটিই ট্রিগার হয়।
ইভেন্ট প্রেরণ এবং পরিচালনা
স্কেলেবল UI-এর গতিশীল আচরণের কেন্দ্রবিন্দুতে রয়েছে ইভেন্ট। সিস্টেম UI থেকে অথবা ইন্টেন্টের মাধ্যমে বাহ্যিক প্রসেস থেকে ইভেন্ট প্রেরণ করা যায়।
সিস্টেম ইভেন্ট
এই কাঠামোটি বেশ কিছু সিস্টেম ইভেন্ট সংজ্ঞায়িত করে যা এই ক্রিয়াগুলিকে সহজতর করে:
| বৈশিষ্ট্য | বর্ণনা |
|---|---|
_System_OnHomeEvent( SYSTEM_HOME_EVENT_ID ) | এর অর্থ হলো, সিস্টেম হোম স্ক্রিন দেখানোর জন্য একটি অনুরোধ পেয়েছে। AAOS-এ, হোম উইন্ডোগুলোর একটি নমনীয় বিন্যাস হতে পারে, যেমন উইজেটগুলোর সমন্বয়, বা এমনকি একটি মানচিত্রও। যেসব ট্রানজিশন বা অ্যাকশন ব্যবহারকারীর মূল হোম ইন্টারফেস দেখার ওপর নির্ভরশীল, সেগুলোর জন্য এই ইভেন্টটি অত্যন্ত গুরুত্বপূর্ণ। |
_System_TaskOpenEvent( SYSTEM_TASK_OPEN_EVENT_ID ) | কোনো টাস্ক বা অ্যাপ খোলা হলে এটি ডিসপ্যাচ করা হয়। এই সাধারণ ইভেন্টটি একটি অ্যাপ চালু হওয়ার উপর ভিত্তি করে বিভিন্ন অ্যাকশন বা ট্রানজিশন ট্রিগার করতে পারে। এই ইভেন্টটিতে |
_System_TaskCloseEvent( SYSTEM_TASK_CLOSE_EVENT_ID ) | এটি কোনো টাস্ক বা অ্যাপ বন্ধ হওয়ার সংকেত দেয় এবং _System_TaskOpenEvent এর প্রতিরূপ হিসেবে কাজ করে। এর মাধ্যমে সিস্টেম অ্যাপ বন্ধ হওয়ার প্রতিক্রিয়ায় সাড়া দিতে পারে। এটি কোনো প্যানেলকে তার ডিফল্ট অবস্থায় ফিরিয়ে আনতে বা অন্যান্য পরিষ্করণমূলক কাজ শুরু করার জন্য ট্রানজিশন ট্রিগার করতে পারে। |
_System_TaskPanelEmptyEvent( SYSTEM_TASK_PANEL_EMPTY_EVENT_ID ) | যখন কোনো নির্দিষ্ট প্যানেল খালি হয়ে যায় তখন এটি পাঠানো হয় এবং এতে টোকেন হিসেবে শক্তিশালী ত্রুটি পুনরুদ্ধারের জন্য এবং সংশ্লিষ্ট কন্টেন্ট ক্র্যাশ করলে বা অপ্রত্যাশিতভাবে বন্ধ হয়ে গেলে অ্যাপ পুনরায় চালু করে খালি UI প্যানেলের প্রদর্শন রোধ করার জন্য এই ইভেন্টটি গুরুত্বপূর্ণ। উদাহরণস্বরূপ, যদি একটি |
_System_EnterSuwEvent( SYSTEM_ENTER_SUW_EVENT_ID ) | এটি সিস্টেমের সেটআপ উইজার্ড (SUW)-এ প্রবেশ করা নির্দেশ করে। এই ইভেন্টটি সিস্টেমের প্রস্তুতির সংকেত দেয় এবং সিস্টেম চালু হওয়ার পর অ্যাপ চালু করতে বা নির্দিষ্ট প্যানেলগুলোকে দৃশ্যমান করতে এটি কনফিগার করা যেতে পারে। এই ধরনের একটি গুরুত্বপূর্ণ সিস্টেম স্টেটে প্রবেশের জন্য উপযুক্ত UI সমন্বয় বা অ্যাকশনগুলো ট্রিগার করতে একটি ডেডিকেটেড ইভেন্টের প্রয়োজন হয়। |
_System_ExitSuwEvent( SYSTEM_EXIT_SUW_EVENT_ID ) | এটি নির্দেশ করে যে সিস্টেম সেটআপ উইজার্ড (SUW) থেকে বেরিয়ে যাচ্ছে। _System_EnterSuwEvent এর মতোই, এই ইভেন্টটি সিস্টেমকে সেটআপ প্রক্রিয়া সম্পন্ন হওয়ার পর ডিফল্ট অ্যাপ চালু করে বা একটি সাধারণ UI-তে ফিরে গিয়ে সাড়া দেওয়ার সুযোগ দেয়। |
_System_OnAnimationEndEvent( SYSTEM_ON_ANIMATION_END_EVENT_ID ) | UI-তে কোনো অ্যানিমেশন সম্পূর্ণ হলে এটি ট্রিগার হয়। কোনো ভিজ্যুয়াল ট্রানজিশন সম্পূর্ণ হওয়ার ওপর নির্ভরশীল পরবর্তী অ্যাকশন বা স্টেট পরিবর্তন ট্রিগার করতে আপনি এই ইভেন্টটি ব্যবহার করতে পারেন। এই ইভেন্টটিতে |