টাচ ডিভাইস

Android বিভিন্ন ধরনের টাচ স্ক্রিন ও টাচ প্যাড সাপোর্ট করে, যার মধ্যে স্টাইলাস-ভিত্তিক ডিজিটাইজার ট্যাবলেট অন্তর্ভুক্ত।

টাচ স্ক্রিন হল এমন টাচ ডিভাইস যা ডিসপ্লের সাথে যুক্ত থাকে, এর ফলে ব্যবহারকারী স্ক্রিনে থাকা আইটেম সরাসরি ম্যানিপুলেট করতে পারেন বলে মনে হয়।

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

টাচ ডিভাইসে এমন বোতাম থাকতে পারে যার ফাংশন মাউসের বোতামের মতোই।

টাচ ডিভাইস কখনও কখনও বিভিন্ন ধরনের টুল ব্যবহার করে ম্যানিপুলেট করা যেতে পারে যেমন আঙুল বা স্টাইলাস, যা অন্তর্নিহিত টাচ সেন্সর প্রযুক্তির উপর নির্ভর করে।

ভার্চুয়াল কী প্রয়োগ করার জন্য কখনও কখনও টাচ ডিভাইস ব্যবহার করা হয়। যেমন, কিছু Android ডিভাইসে, টাচ স্ক্রিন সেন্সর এরিয়া ডিসপ্লের এজ ছাড়িয়ে যায় এবং টাচ সেনসিটিভ কী প্যাডের অংশ হিসেবে দ্বৈত উদ্দেশ্য পূরণ করে।

টাচ ডিভাইসের অনেক বৈচিত্র্য থাকার কারণে, Android প্রতিটি ডিভাইসের বৈশিষ্ট্য ও কাঙ্ক্ষিত আচরণ বর্ণনা করার জন্য কনফিগারেশন প্রপার্টির একটি বড় সংখ্যার উপর নির্ভর করে।

টাচ ডিভাইস শ্রেণীবিভাগ

নিম্নলিখিত দুটি শর্ত পূরণ হলে, ইনপুট ডিভাইসকে মাল্টি-টাচ ডিভাইস হিসেবে শ্রেণীবদ্ধ করা হয়:

  • ইনপুট ডিভাইস ABS_MT_POSITION_X এবং ABS_MT_POSITION_Y অ্যাবসলিউট অ্যাক্সিসের উপস্থিতি সম্পর্কে রিপোর্ট করে।
  • ইনপুট ডিভাইসে কোনও গেমপ্যাড বোতাম নেই। এই কন্ডিশন নির্দিষ্ট গেমপ্যাড সংক্রান্ত অস্পষ্টতা দূর করে যেগুলি কোড সহ অ্যাক্সিস রিপোর্ট করে যা MT অ্যাক্সিসের সাথে ওভারল্যাপ করে।

ইনপুট ডিভাইসকে সিঙ্গেল-টাচ ডিভাইস হিসেবে শ্রেণীবদ্ধ করা হয়, যদি নিম্নলিখিত দুটি শর্তই পূরণ হয়:

  • ইনপুট ডিভাইসকে মাল্টি-টাচ ডিভাইস হিসেবে শ্রেণীবদ্ধ করা হয়নি। ইনপুট ডিভাইস একক-টাচ ডিভাইস বা মাল্টি-টাচ ডিভাইস হিসেবে শ্রেণীবদ্ধ করা হয়, দুটি হিসেবে নয়।
  • ইনপুট ডিভাইস ABS_X এবং ABS_Y অ্যাবসোলিউট অ্যাক্সিসের উপস্থিতি এবং BTN_TOUCH কী কোডের উপস্থিতি রিপোর্ট করে।

ইনপুট ডিভাইসকে টাচ ডিভাইস হিসেবে শ্রেণীবদ্ধ করা হলে, ডিভাইসের জন্য ভার্চুয়াল কী ম্যাপ ফাইল লোড করার চেষ্টা করে ভার্চুয়াল কী আছে কিনা তা নির্ধারণ করা হয়। ভার্চুয়াল কী ম্যাপ উপলভ্য থাকলে, ডিভাইসের জন্য কী লেআউট ফাইলও লোড করা হয়। এইসব ফাইলের লোকেশন ও ফর্ম্যাট সম্পর্কে তথ্য পেতে, [ভার্চুয়াল কী ম্যাপ ফাইল](#virtual-key-map-files) লিঙ্কে দেখুন।

এরপর, সিস্টেম টাচ ডিভাইসের জন্য ইনপুট ডিভাইস কনফিগারেশন ফাইল লোড করে।

সব বিল্ট-ইন টাচ ডিভাইসে ইনপুট ডিভাইস কনফিগারেশন ফাইল থাকতে হবে। কোনও ইনপুট ডিভাইস কনফিগারেশন ফাইল না থাকলে, সিস্টেম একটি ডিফল্ট কনফিগারেশন বেছে নেয় যা সাধারণ-উদ্দেশ্যে টাচ পেরিফেরালের জন্য উপযুক্ত যেমন এক্সটার্নাল USB বা ব্লুটুথ HID টাচ স্ক্রিন বা টাচ প্যাড। এই ডিফল্ট সেটিংস বিল্ট-ইন টাচস্ক্রিনের জন্য ডিজাইন করা হয়নি এবং এর ফলে ভুল আচরণ হতে পারে।

ইনপুট ডিভাইস কনফিগারেশন লোড হওয়ার পরে, সিস্টেম ইনপুট ডিভাইসকে টাচ স্ক্রিন, টাচ প্যাড বা পয়েন্টার ডিভাইস হিসেবে শ্রেণীবদ্ধ করে।

  • টাচ স্ক্রিন ডিভাইস ব্যবহার করে স্ক্রিনে থাকা অবজেক্ট সরাসরি ম্যানিপুলেট করা যায়। ব্যবহারকারী সরাসরি স্ক্রিন স্পর্শ করেন, তাই সিস্টেমকে ম্যানিপুলেট করা হচ্ছে এমন অবজেক্ট নির্দেশ করার জন্য কোনও অতিরিক্ত অ্যাফোর্ডেন্সের প্রয়োজন হয় না।
  • একটি নির্দিষ্ট সেন্সর এরিয়াতে টাচ সম্পর্কে কোনও অ্যাপকে সঠিক পজিশনিং তথ্য প্রদান করতে টাচ প্যাড ডিভাইস ব্যবহার করা হয়। এটি ডিজিটাইজার ট্যাবলেটের জন্য উপযোগী হতে পারে।
  • একটি পয়েন্টার ডিভাইস ব্যবহার করা হয় কার্সার ব্যবহার করে স্ক্রিনে অবজেক্টের অপ্রত্যক্ষ ম্যানিপুলেশনের জন্য। আঙুলকে মাল্টি-টাচ পয়েন্টার জেসচার হিসেবে ব্যাখ্যা করা হয়। স্টাইলাসের মতো অন্যান্য টুলকে পরম পজিশন ব্যবহার করে ব্যাখ্যা করা হয়। আরও তথ্যের জন্য পরোক্ষ মাল্টি-টাচ পয়েন্টার জেসচার দেখুন।

ইনপুট ডিভাইসকে টাচ স্ক্রিন, টাচ প্যাড বা পয়েন্টার ডিভাইস হিসেবে শ্রেণীবদ্ধ করতে নিম্নলিখিত নিয়মগুলি ব্যবহার করা হয়।

  • touch.deviceType প্রপার্টি সেট করা থাকলে, ডিভাইসের ধরন নির্দেশিত হিসেবে সেট করা হয়।
  • ইনপুট ডিভাইস যদি EVIOCGPROP ioctl-এর মাধ্যমে INPUT_PROP_DIRECT ইনপুট প্রপার্টির উপস্থিতি রিপোর্ট করে, তাহলে ডিভাইসের ধরন টাচ স্ক্রিন হিসেবে সেট করা হয়। এই শর্তে ধরে নেওয়া হয় যে ডাইরেক্ট ইনপুট টাচ ডিভাইস এমন ডিসপ্লের সাথে অ্যাটাচ করা আছে যেটিও কানেক্ট করা আছে।
  • ইনপুট ডিভাইস যদি INPUT_PROP_POINTER ইনপুট প্রপার্টির উপস্থিতি রিপোর্ট করে (EVIOCGPROP ioctl-এর মাধ্যমে), তাহলে ডিভাইসের ধরন পয়েন্টার হিসেবে সেট করা হয়।
  • ইনপুট ডিভাইস যদি REL_X বা REL_Y রিলেটিভ অক্ষের উপস্থিতি রিপোর্ট করে, তাহলে ডিভাইসের ধরন টাচ প্যাড হিসেবে সেট করা হয়। এই শর্তটি মাউস ও টাচ প্যাড, দুটিই আছে এমন ইনপুট ডিভাইসের ক্ষেত্রে অস্পষ্টতা দূর করে। এই ক্ষেত্রে, টাচপ্যাডটি পয়েন্টার কন্ট্রোল করার জন্য ব্যবহার করা হয় না কারণ মাউস আগেই এটি কন্ট্রোল করে।
  • অন্যথায়, ডিভাইসের ধরন পয়েন্টার হিসেবে সেট করা হয়। এই ডিফল্ট সেটিংস নিশ্চিত করে যে টাচ প্যাড অন্য কোনও বিশেষ উদ্দেশ্যে মনোনীত করা হয়নি পয়েন্টার নিয়ন্ত্রণ করে।

বোতাম

বোতাম হল ঐচ্ছিক কন্ট্রোল যা অ্যাপ অতিরিক্ত ফাংশন পারফর্ম করতে ব্যবহার করতে পারে। টাচ ডিভাইসের বোতামগুলি মাউসের বোতামের মতোই কাজ করে এবং সেগুলি মূলত পয়েন্টার টাইপের টাচ ডিভাইস বা স্টাইলাসের সাথে ব্যবহার করা হয়।

নিম্নলিখিত বোতাম কাজ করে:

  • BTN_LEFT: MotionEvent.BUTTON_PRIMARY-এ ম্যাপ করা হয়েছে।
  • BTN_RIGHT: MotionEvent.BUTTON_SECONDARY-এর সাথে ম্যাপ করা হয়েছে।
  • BTN_MIDDLE: MotionEvent.BUTTON_MIDDLE-এর সাথে ম্যাপ করা হয়েছে।
  • BTN_BACK এবং BTN_SIDE: MotionEvent.BUTTON_BACK-এ ম্যাপ করা হয়েছে। এই বোতামটি প্রেস করলে, KeyEvent.KEYCODE_BACK 'কী' কোড সহ একটি 'কী' প্রেস সিন্থেসাইজ করে।
  • BTN_FORWARD এবং BTN_EXTRA: MotionEvent.BUTTON_FORWARD-এ ম্যাপ করা হয়েছে। এই বোতামটি প্রেস করলে, KeyEvent.KEYCODE_FORWARD কী কোড সহ একটি কী প্রেস সিন্থেসাইজ করা হয়।
  • BTN_STYLUS: MotionEvent.BUTTON_SECONDARY-এর সাথে ম্যাপ করা হয়েছে।
  • BTN_STYLUS2: MotionEvent.BUTTON_TERTIARY-এর সাথে ম্যাপ করা হয়েছে।

টুল ও টুলের ধরন

টুল হল আঙুল, স্টাইলাস বা অন্য কোনও যন্ত্র যা টাচ ডিভাইসের সাথে ইন্টার‍্যাক্ট করতে ব্যবহার করা হয়। কিছু টাচ ডিভাইস বিভিন্ন ধরনের টুলের মধ্যে পার্থক্য করতে পারে।

Android-এর অন্যান্য জায়গায়, যেমন MotionEvent API-তে, কোনও টুলকে প্রায়ই পয়েন্টার বলা হয়।

নিম্নলিখিত ধরনের টুল কাজ করে:

  • BTN_TOOL_FINGER ও MT_TOOL_FINGER: ম্যাপ করা হয়েছে MotionEvent.TOOL_TYPE_FINGER-এর সাথে।
  • BTN_TOOL_PEN ও MT_TOOL_PEN: ম্যাপ করা হয়েছে MotionEvent.TOOL_TYPE_STYLUS-এর সাথে।
  • BTN_TOOL_RUBBER: MotionEvent.TOOL_TYPE_ERASER-এ ম্যাপ করা হয়েছে।
  • BTN_TOOL_BRUSH: MotionEvent.TOOL_TYPE_STYLUS-এর সাথে ম্যাপ করা হয়েছে।
  • BTN_TOOL_PENCIL: MotionEvent.TOOL_TYPE_STYLUS-এ ম্যাপ করা হয়েছে।
  • BTN_TOOL_AIRBRUSH: MotionEvent.TOOL_TYPE_STYLUS-এর সাথে ম্যাপ করা হয়েছে।
  • BTN_TOOL_MOUSE: MotionEvent.TOOL_TYPE_MOUSE-এর সাথে ম্যাপ করা হয়েছে।
  • BTN_TOOL_LENS: MotionEvent.TOOL_TYPE_MOUSE-এ ম্যাপ করা হয়েছে।
  • BTN_TOOL_DOUBLETAP, BTN_TOOL_TRIPLETAP ও BTN_TOOL_QUADTAP: MotionEvent.TOOL_TYPE_FINGER-এর সাথে ম্যাপ করা হয়েছে।

টুল স্পর্শ করা বনাম কার্সর নিয়ে যাওয়া

টুলগুলি টাচ ডিভাইসের সাথে যোগাযোগে থাকতে পারে বা রেঞ্জের মধ্যে থাকতে পারে এবং এর উপরে ঘুরতে পারে। সব টাচ ডিভাইস, টাচ ডিভাইসের উপরে হোভার করা টুলের উপস্থিতি বুঝতে পারে না। যেসব ডিভাইসে এই সুবিধা আছে, যেমন RF-ভিত্তিক স্টাইলাস ডিজিটাইজার, সেগুলি প্রায়ই টুলটি ডিজিটাইজারের সীমিত রেঞ্জের মধ্যে থাকলে তা শনাক্ত করতে পারে।

InputReader কম্পোনেন্ট, টাচ করা টুল ও হোভার করা টুলের মধ্যে পার্থক্য করে। একইভাবে, টাচিং টুল ও হোভারিং টুল সম্পর্কে অ্যাপকে আলাদা আলাদা উপায়ে জানানো হয়।

MotionEvent.ACTION_DOWN, MotionEvent.ACTION_MOVE, MotionEvent.ACTION_DOWN, MotionEvent.ACTION_POINTER_DOWN এবং MotionEvent.ACTION_POINTER_UP ব্যবহার করে টাচ ইভেন্ট হিসেবে অ্যাপে টাচ করা টুল সম্পর্কে রিপোর্ট করা হয়।

হোভারিং টুলগুলি অ্যাপে সাধারণ মোশন ইভেন্ট হিসেবে রিপোর্ট করা হয়, এর জন্য MotionEvent.ACTION_HOVER_ENTER, MotionEvent.ACTION_HOVER_MOVE, এবং MotionEvent.ACTION_HOVER_EXIT ব্যবহার করা হয়।

টাচ ডিভাইস ড্রাইভার সংক্রান্ত প্রয়োজনীয়তা

  • টাচ ডিভাইস ড্রাইভারকে শুধুমাত্র অক্ষের জন্য অক্ষ এবং বোতামের কী কোড রেজিস্টার করতে হবে যা এটি কাজ করে। কাজ করে না এমন অ্যাক্সিস বা কী কোড রেজিস্টার করলে ডিভাইস ক্লাসিফিকেশন অ্যালগরিদম বিভ্রান্ত হতে পারে অথবা সিস্টেম ডিভাইসের ক্ষমতা ভুলভাবে শনাক্ত করতে পারে। যেমন, ডিভাইস যদি BTN_TOUCH কী কোড রিপোর্ট করে, তাহলে সিস্টেম ধরে নেয় যে BTN_TOUCH সবসময় এটি বোঝাতে ব্যবহার করা হয় যে টুলটি স্ক্রিন স্পর্শ করছে কিনা। তাই, BTN_TOUCH ব্যবহার করে এটি বোঝানো উচিত নয় যে টুলটি শুধুমাত্র রেঞ্জের মধ্যে আছে এবং হোভার করছে।
  • সিঙ্গেল-টাচ ডিভাইস নিম্নলিখিত Linux ইনপুট ইভেন্ট ব্যবহার করে:
    • ABS_X: (প্রয়োজনীয়) টুলের X কোঅর্ডিনেট রিপোর্ট করে।
    • ABS_Y: (প্রয়োজনীয়) টুলের Y কোঅর্ডিনেট রিপোর্ট করে।
    • ABS_PRESSURE: (ঐচ্ছিক) টুলের অগ্রভাগে প্রয়োগ করা শারীরিক চাপ অথবা টাচ কন্ট্যাক্টের সিগন্যাল শক্তি রিপোর্ট করে।
    • ABS_TOOL_WIDTH: (ঐচ্ছিক) টাচ কন্ট্যাক্ট বা টুলটির ক্রস-সেকশনাল এরিয়া বা প্রস্থ রিপোর্ট করে।
    • ABS_DISTANCE: (ঐচ্ছিক) টাচ ডিভাইসের সারফেস থেকে টুলের দূরত্ব রিপোর্ট করে ।
    • ABS_TILT_X: (ঐচ্ছিক) X-অক্ষ বরাবর টাচ ডিভাইসের সারফেস থেকে টুলের ঢাল রিপোর্ট করে।
    • ABS_TILT_Y: (ঐচ্ছিক) Y অক্ষ বরাবর টাচ ডিভাইসের সারফেস থেকে টুলের টিল্ট রিপোর্ট করে।
    • BTN_TOUCH: (প্রয়োজনীয়) টুলটি ডিভাইসে স্পর্শ করছে কিনা তা নির্দেশ করে।
    • BTN_LEFT, BTN_RIGHT, BTN_MIDDLE, BTN_BACK, BTN_SIDE, BTN_FORWARD, BTN_EXTRA, BTN_STYLUS, BTN_STYLUS2: (ঐচ্ছিক) রিপোর্ট বোতাম স্ট্যাটাস।
    • BTN_TOOL_FINGER, BTN_TOOL_PEN, BTN_TOOL_RUBBER, BTN_TOOL_BRUSH, BTN_TOOL_PENCIL, BTN_TOOL_AIRBRUSH, BTN_TOOL_MOUSE, BTN_TOOL_LENS, BTN_TOOL_DOUBLETAP, BTN_TOOL_TRIPLETAP, BTN_TOOL_QUADTAP: (ঐচ্ছিক) টুলের ধরন রিপোর্ট করে।
  • মাল্টি-টাচ ডিভাইস নিম্নলিখিত Linux ইনপুট ইভেন্ট ব্যবহার করে:
    • ABS_MT_POSITION_X: (প্রয়োজনীয়) টুলের X কোঅর্ডিনেট রিপোর্ট করে।
    • ABS_MT_POSITION_Y: (প্রয়োজনীয়) টুলের Y কোঅর্ডিনেট রিপোর্ট করে।
    • ABS_MT_PRESSURE: (ঐচ্ছিক) টুলের অগ্রভাগ বা টাচ কন্ট্যাক্টের সিগন্যাল স্ট্রেংথের উপর প্রয়োগ করা ফিজিক্যাল প্রেসার সম্পর্কে রিপোর্ট করে।
    • ABS_MT_TOUCH_MAJOR: (ঐচ্ছিক) টাচ কন্ট্যাক্টের ক্রস-সেকশনাল এরিয়া অথবা টাচ কন্ট্যাক্টের দীর্ঘতর ডাইমেনশনের দৈর্ঘ্য রিপোর্ট করে।
    • ABS_MT_TOUCH_MINOR: (ঐচ্ছিক) টাচ কন্ট্যাক্টের সবচেয়ে ছোট ডাইমেনশনের দৈর্ঘ্য রিপোর্ট করে । ABS_MT_TOUCH_MAJOR যদি কোনও এলাকার পরিমাপ রিপোর্ট করে, তাহলে এই অ্যাক্সিস ব্যবহার করা উচিত নয়।
    • ABS_MT_WIDTH_MAJOR: (ঐচ্ছিক) টুলের ক্রস-সেকশনাল এরিয়া অথবা টুলের সবচেয়ে বড় অংশের দৈর্ঘ্য রিপোর্ট করে। টুলের ডাইমেনশন না জানা থাকলে এই অ্যাক্সিস ব্যবহার করবেন না।
    • ABS_MT_WIDTH_MINOR: (ঐচ্ছিক) টুলের সবচেয়ে ছোট ডাইমেনশনের দৈর্ঘ্য রিপোর্ট করে । ABS_MT_WIDTH_MAJOR যদি কোনও এরিয়া পরিমাপ রিপোর্ট করে অথবা টুলের ডাইমেনশন অজানা হয়, তাহলে এই অ্যাক্সিস ব্যবহার করা যাবে না।
    • ABS_MT_ORIENTATION: (ঐচ্ছিক) টুলের ওরিয়েন্টেশন রিপোর্ট করে।
    • ABS_MT_DISTANCE: (ঐচ্ছিক) টাচ ডিভাইসের সারফেস থেকে টুলের দূরত্ব রিপোর্ট করে।
    • ABS_MT_TOOL_TYPE: (ঐচ্ছিক) MT_TOOL_FINGER বা MT_TOOL_PEN হিসেবে টুলের ধরন সম্পর্কে রিপোর্ট করে।
    • ABS_MT_TRACKING_ID: (ঐচ্ছিক) টুলের ট্র্যাকিং আইডি সম্পর্কে রিপোর্ট করে। ট্র্যাকিং আইডি হল একটি নির্বিচারে বেছে নেওয়া অঋণাত্মক পূর্ণসংখ্যা যা একাধিক টুল অ্যাক্টিভ থাকলে প্রতিটি টুলকে আলাদাভাবে শনাক্ত ও ট্র্যাক করতে ব্যবহার করা হয়। যেমন, একাধিক আঙুল ডিভাইসে স্পর্শ করলে, প্রতিটি আঙুলকে একটি স্বতন্ত্র ট্র্যাকিং আইডি অ্যাসাইন করতে হবে যা আঙুলটি স্পর্শ করে থাকা পর্যন্ত ব্যবহার করা হবে। ট্র্যাকিং আইডি এর সাথে যুক্ত টুল রেঞ্জের বাইরে চলে গেলে সেটি আবার ব্যবহার করা যেতে পারে।
    • ABS_MT_SLOT: (ঐচ্ছিক) টুল ব্যবহার করার সময় টুলের স্লট আইডি রিপোর্ট করে, Linux মাল্টি-টাচ প্রোটোকল 'B'। আরও বিবরণের জন্য Linux মাল্টি-টাচ প্রোটোকল ডকুমেন্টেশন দেখুন।
    • BTN_TOUCH: (প্রয়োজনীয়) টুলটি ডিভাইসে টাচ করছে কিনা তা দেখায়।
    • BTN_LEFT, BTN_RIGHT, BTN_MIDDLE, BTN_BACK, BTN_SIDE, BTN_FORWARD, BTN_EXTRA, BTN_STYLUS, BTN_STYLUS2: (ঐচ্ছিক) রিপোর্ট বোতাম স্ট্যাটাস।
    • BTN_TOOL_FINGER, BTN_TOOL_PEN, BTN_TOOL_RUBBER, BTN_TOOL_BRUSH, BTN_TOOL_PENCIL, BTN_TOOL_AIRBRUSH, BTN_TOOL_MOUSE, BTN_TOOL_LENS, BTN_TOOL_DOUBLETAP, BTN_TOOL_TRIPLETAP, BTN_TOOL_QUADTAP: (ঐচ্ছিক) টুলের ধরন সম্পর্কে রিপোর্ট করে।
  • সিঙ্গেল-টাচ ও মাল্টি-টাচ প্রোটোকল, দু'টিরই অ্যাক্সিস নির্দিষ্ট করা থাকলে, শুধুমাত্র মাল্টি-টাচ অ্যাক্সিস ব্যবহার করা হয় এবং সিঙ্গেল-টাচ অ্যাক্সিস উপেক্ষা করা হয়।
  • ABS_X, ABS_Y, ABS_MT_POSITION_X, এবং ABS_MT_POSITION_Y অ্যাক্সিসের ন্যূনতম ও সর্বাধিক ভ্যালু ডিভাইস-নির্দিষ্ট সারফেস ইউনিটে ডিভাইসের অ্যাক্টিভ এরিয়ার সীমা নির্ধারণ করে। টাচ স্ক্রিনের ক্ষেত্রে, অ্যাক্টিভ এরিয়া টাচ ডিভাইসের সেই অংশকে বর্ণনা করে যা আসলে ডিসপ্লেকে কভার করে।

    টাচ স্ক্রিনের ক্ষেত্রে, নিম্নলিখিত গণনা অনুযায়ী ডিসপ্লে পিক্সেলের মধ্যে টাচ পজিশন পেতে, সিস্টেম অটোমেটিক সারফেস ইউনিটে রিপোর্ট করা টাচ পজিশন ইন্টারপোলেট করে:

        displayX = (x - minX) * displayWidth / (maxX - minX + 1)
        displayY = (y - minY) * displayHeight / (maxY - minY + 1)
        

    টাচস্ক্রিন, রিপোর্ট করা অ্যাক্টিভ এলাকার বাইরে টাচ রিপোর্ট করতে পারে।

    অ্যাক্টিভ এরিয়ার বাইরে থেকে শুরু হওয়া টাচ অ্যাপে ডেলিভার করা হয় না তবে ভার্চুয়াল কীয়ের জন্য ব্যবহার করা যেতে পারে।

    অ্যাক্টিভ এরিয়ার মধ্যে শুরু হওয়া বা ডিসপ্লে এরিয়ায় প্রবেশ ও প্রস্থান করা টাচ অ্যাপে ডেলিভার করা হয়। এর ফলে, কোনও অ্যাপের সীমার মধ্যে টাচ শুরু হয়ে অ্যাক্টিভ এরিয়ার বাইরে চলে গেলে, অ্যাপটি নেগেটিভ বা ডিসপ্লের সীমার বাইরে ডিসপ্লে কোঅর্ডিনেট সহ টাচ ইভেন্ট পেতে পারে। এটি প্রত্যাশিত আচরণ।

    টাচ ডিভাইসকে কখনই অ্যাক্টিভ এরিয়ার সীমানার মধ্যে টাচ কোঅর্ডিনেট ক্ল্যাম্প করা উচিত নয়। টাচ অ্যাক্টিভ এরিয়ার বাইরে চলে গেলে, এটি অ্যাক্টিভ এরিয়ার বাইরে বলে রিপোর্ট করা উচিত অথবা এটি একেবারেই রিপোর্ট করা উচিত নয়।

    যেমন, ব্যবহারকারীর আঙুল যদি টাচ স্ক্রিনের উপরের বাঁদিকের কোণে স্পর্শ করে, তাহলে এটি (minX, minY) কোঅর্ডিনেট রিপোর্ট করতে পারে। অ্যাক্টিভ এলাকার বাইরেও আঙুল সরানো চালিয়ে গেলে, টাচস্ক্রিনকে হয় minX এবং minY-এর চেয়ে কম কম্পোনেন্ট সহ কোঅর্ডিনেট রিপোর্ট করা শুরু করতে হবে, যেমন (minX - 2, minY - 3) অথবা টাচ রিপোর্ট করা সম্পূর্ণভাবে বন্ধ করে দিতে হবে। অন্যভাবে বলতে গেলে, ব্যবহারকারীর আঙুল যখন সত্যিই অ্যাক্টিভ এরিয়ার বাইরে স্পর্শ করছে, তখন টাচ স্ক্রিনকে (minX, minY) রিপোর্ট করা উচিত নয়।

    ডিসপ্লে এজ পর্যন্ত টাচ কোঅর্ডিনেট ক্ল্যাম্প করলে স্ক্রিনের এজের চারপাশে একটি কৃত্রিম হার্ড বাউন্ডারি তৈরি হয় যা ডিসপ্লে এরিয়ার বাউন্ডারিতে প্রবেশ করা বা বের হওয়া মোশন স্মুথভাবে ট্র্যাক করতে সিস্টেমকে বাধা দেয়।

  • ABS_PRESSURE বা ABS_MT_PRESSURE-এর দ্বারা রিপোর্ট করা ভ্যালু, যদি সেগুলি রিপোর্ট করা হয়, তাহলে টুলটি ডিভাইস স্পর্শ করার সময় শূন্যের চেয়ে বেশি হতে হবে এবং টুলটি হোভার করছে তা বোঝাতে অন্যথায় শূন্য হতে হবে।

    প্রেশার সংক্রান্ত তথ্য রিপোর্ট করা ঐচ্ছিক হলেও এটি করার জন্য বিশেষভাবে সাজেস্ট করা হয়। অ্যাপ, চাপের তথ্য ব্যবহার করে চাপ-সংবেদনশীল ড্রয়িং এবং অন্যান্য এফেক্ট প্রয়োগ করতে পারে।

  • ABS_TOOL_WIDTH, ABS_MT_TOUCH_MAJOR, ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MAJOR বা ABS_MT_WIDTH_MINOR-এর মাধ্যমে রিপোর্ট করা ভ্যালু টুলটি ডিভাইস স্পর্শ করলে শূন্যের থেকে বেশি এবং অন্যথায় শূন্য হতে হবে, তবে এটি বাধ্যতামূলক নয়। যেমন, টাচ ডিভাইস হয়ত আঙুলের স্পর্শের কন্ট্যাক্টের সাইজ পরিমাপ করতে পারবে, কিন্তু স্টাইলাস টাচ কন্ট্যাক্টের সাইজ পরিমাপ করতে পারবে না।

    সাইজ সংক্রান্ত তথ্য জানানো ঐচ্ছিক হলেও এটি করার জন্য আমরা বিশেষভাবে সাজেস্ট করি। আকার-সংবেদনশীল ড্রয়িং ও অন্যান্য এফেক্ট প্রয়োগ করতে অ্যাপ প্রেসার সংক্রান্ত তথ্য ব্যবহার করতে পারে।

  • ABS_DISTANCE বা ABS_MT_DISTANCE-এর মাধ্যমে রিপোর্ট করা ভ্যালু টুলটি ডিভাইসে স্পর্শ করলে শূন্যের কাছাকাছি হওয়া উচিত। টুলটি সরাসরি সংস্পর্শে থাকলেও দূরত্ব শূন্য হতে পারে না। হার্ডওয়্যার যেভাবে দূরত্ব পরিমাপ করে তার উপর নির্ভর করে সঠিক ভ্যালু রিপোর্ট করা হয়।

    দূরত্ব সংক্রান্ত তথ্য রিপোর্ট করা ঐচ্ছিক হলেও স্টাইলাস ডিভাইসের জন্য সাজেস্ট করা হয়।

  • টুলটি ডিভাইসের সাথে লম্বভাবে থাকলে ABS_TILT_X এবং ABS_TILT_Y দ্বারা রিপোর্ট করা মান শূন্য হওয়া উচিত। শূন্য নয় এমন টিল্ট থেকে বোঝা যায় যে টুলটি কাত করে ধরা হয়েছে।

    X ও Y অক্ষ বরাবর টিল্ট অ্যাঙ্গেলকে উল্লম্ব রেখা থেকে ডিগ্রিতে নির্দিষ্ট করা হয়েছে বলে ধরে নেওয়া হয় । প্রতিটি অক্ষের জন্য (max + min) / 2-এর মাধ্যমে কেন্দ্রবিন্দু (সম্পূর্ণ লম্বালম্বি) দেওয়া হয়। সেন্টার পয়েন্টের থেকে ছোট ভ্যালু উপরের দিকে বা বাঁদিকে কাত হওয়া বোঝায়, সেন্টার পয়েন্টের থেকে বড় ভ্যালু নিচের দিকে বা ডানদিকে কাত হওয়া বোঝায়।

    InputReader, X ও Y টিল্ট কম্পোনেন্টকে পারপেন্ডিকুলার টিল্ট অ্যাঙ্গেলে কনভার্ট করে, যার রেঞ্জ হল ০ থেকে PI / 2 রেডিয়ান এবং প্ল্যানার ওরিয়েন্টেশন অ্যাঙ্গেল -PI থেকে PI রেডিয়ানের মধ্যে থাকে। এই উপস্থাপনার ফলে অরিয়েন্টেশনের একটি বিবরণ পাওয়া যায় যা ফিঙ্গার টাচ বর্ণনা করার জন্য ব্যবহৃত বিবরণের সাথে মানানসই।

    টিল্ট সংক্রান্ত তথ্য রিপোর্ট করা ঐচ্ছিক হলেও স্টাইলাস ডিভাইসের জন্য সাজেস্ট করা হয়।

  • ABS_MT_TOOL_TYPE যদি টুলের ধরন সম্পর্কে অভিযোগ করে, তাহলে BTN_TOOL_*-এর টুলের ধরন সম্পর্কে অভিযোগের তথ্যকে এটি স্থান অধিকার করে। টুলের ধরন সম্পর্কিত কোনও তথ্য উপলভ্য না থাকলে, টুলের ধরন ডিফল্ট হিসেবে MotionEvent.TOOL_TYPE_FINGER হবে।

  • নিচে উল্লেখ করা শর্তের ভিত্তিতে কোনও টুল অ্যাক্টিভ আছে কিনা তা নির্ধারণ করা হয়:

    • সিঙ্গেল-টাচ প্রোটোকল ব্যবহার করার সময়, BTN_TOUCH, বা BTN_TOOL_*-এর মান ১ হলে টুলটি অ্যাক্টিভ থাকে।

      এই শর্ত থেকে বোঝা যায় যে InputReader-এর কাছে টুলের প্রকৃতি সম্পর্কে অন্তত কিছু তথ্য থাকতে হবে, যেমন এটি স্পর্শ করছে কিনা অথবা অন্তত এর টুলের ধরন। কোনও তথ্য উপলভ্য না থাকলে, টুলটি ইনঅ্যাক্টিভ (রেঞ্জের বাইরে) আছে বলে ধরে নেওয়া হয়।

    • মাল্টি-টাচ প্রোটোকল 'A' ব্যবহার করার সময়, টুলটি সাম্প্রতিক সিঙ্ক রিপোর্টে দেখা গেলেই অ্যাক্টিভ হয়ে যায়। সিঙ্ক রিপোর্টে টুলটি দেখা বন্ধ হয়ে গেলে, এটি আর থাকে না।
    • মাল্টি-টাচ প্রোটোকল 'B' ব্যবহার করার সময়, টুলটি ততক্ষণ অ্যাক্টিভ থাকে যতক্ষণ এটির একটি অ্যাক্টিভ স্লট থাকে। স্লট খালি হয়ে গেলে, টুলটি আর থাকে না।
  • নিম্নলিখিত শর্তের ভিত্তিতে কোনও টুল হোভার করছে কিনা তা নির্ধারণ করা হয়:
    • টুলটি BTN_TOOL_MOUSE বা BTN_TOOL_LENS হলে, টুলটি হোভার করছে না, এমনকি নিম্নলিখিত শর্তগুলির মধ্যে কোনও একটি সত্যি হলেও।
    • টুলটি অ্যাক্টিভ থাকলে এবং ড্রাইভার প্রেসার সংক্রান্ত তথ্য রিপোর্ট করলে, এবং রিপোর্ট করা প্রেসার শূন্য হলে, টুলটি হোভার করছে।
    • টুলটি অ্যাক্টিভ থাকলে এবং ড্রাইভার BTN_TOUCH কী কোড কাজ করলে এবং BTN_TOUCH-এর মান শূন্য হলে, টুলটি হোভার করছে।
  • InputReader মাল্টি-টাচ প্রোটোকল 'A' ও 'B', দু'টিই সাপোর্ট করে। নতুন ড্রাইভারদের 'B' প্রোটোকল ব্যবহার করা উচিত, তবে যেকোনও একটি কাজ করে।
  • Android 4.0 ভার্সন অনুযায়ী, Linux ইনপুট প্রোটোকল স্পেসিফিকেশন মেনে চলার জন্য টাচ স্ক্রিন ড্রাইভার পরিবর্তন করতে হতে পারে।

    নিম্নলিখিত পরিবর্তনগুলি করার প্রয়োজন হতে পারে:

    • কোনও টুল ইনঅ্যাক্টিভ হয়ে গেলে (আঙুল "উপরে" চলে গেলে), পরবর্তী মাল্টি-টাচ সিঙ্ক রিপোর্টে সেটি আর দেখানো উচিত নয়। সব টুল নিষ্ক্রিয় হয়ে গেলে (সব আঙুল "উপরে" উঠে গেলে), ড্রাইভারের উচিত একটি খালি সিঙ্ক রিপোর্ট প্যাকেট পাঠানো, যেমন SYN_MT_REPORT-এর পরে SYN_REPORT।

      Android-এর আগের ভার্সনে "up" ইভেন্ট রিপোর্ট করার জন্য ০ প্রেসার ভ্যালু পাঠানোর কথা বলা হয়েছে। পুরানো আচরণ Linux ইনপুট প্রোটোকল স্পেসিফিকেশনের সাথে বেমানান ছিল এবং এটি আর কাজ করে না।

    • ফিজিক্যাল প্রেসার বা সিগন্যাল স্ট্রেন্থ সংক্রান্ত তথ্য ABS_MT_PRESSURE ব্যবহার করে রিপোর্ট করতে হবে।

      Android-এর আগের ভার্সন ABS_MT_TOUCH_MAJOR থেকে প্রেসার সংক্রান্ত তথ্য পেয়েছে। পুরানো আচরণ Linux ইনপুট প্রোটোকল স্পেসিফিকেশনের সাথে বেমানান ছিল এবং এটি আর কাজ করে না।

    • ABS_MT_TOUCH_MAJOR ব্যবহার করে টাচ সাইজ সংক্রান্ত তথ্য রিপোর্ট করতে হবে।

      Android-এর আগের ভার্সনগুলি ABS_MT_TOOL_MAJOR থেকে সাইজ সংক্রান্ত তথ্য সংগ্রহ করত। পুরনো আচরণটি Linux ইনপুট প্রোটোকল স্পেসিফিকেশনের সাথে মানানসই ছিল না এবং এটি আর কাজ করে না।

    টাচ ডিভাইস ড্রাইভারের আর Android-নির্দিষ্ট কাস্টমাইজেশনের প্রয়োজন নেই। স্ট্যান্ডার্ড Linux ইনপুট প্রোটোকলের উপর নির্ভর করে, Android, আনমডিফায়েড ড্রাইভার ব্যবহার করে, এক্সটার্নাল HID মাল্টি-টাচ টাচ স্ক্রিনের মতো আরও অনেক ধরনের টাচ পেরিফেরাল কাজ করতে পারে।

ডিভাইস অপারেশন টাচ করা

Android-এ টাচ ডিভাইস অপারেশন সম্পর্কে এখানে সংক্ষেপে বলা হয়েছে।

  1. EventHub, evdev ড্রাইভার থেকে র ইভেন্ট পড়ে।
  2. InputReader প্রতিটি টুলের পজিশন ও অন্যান্য বৈশিষ্ট্য সম্পর্কে ইন্টার্নাল স্টেট আপডেট করে এবং কাঁচা ইভেন্ট কনজিউম করে। এছাড়াও এটি বোতামের স্ট্যাটাস ট্র্যাক করে।
  3. BACK বা FORWARD বোতাম প্রেস বা রিলিজ করা হলে, InputReader কী ইভেন্ট সম্পর্কে InputDispatcher-কে বিজ্ঞপ্তি পাঠায়।
  4. InputReader ভার্চুয়াল কী প্রেস করা হয়েছে কিনা তা নির্ধারণ করে। যদি তাই হয়, তাহলে এটি InputDispatcher-কে মূল ইভেন্ট সম্পর্কে বিজ্ঞপ্তি পাঠায়।
  5. InputReader নির্ধারণ করে যে টাচ ডিসপ্লের সীমার মধ্যে শুরু করা হয়েছে কিনা। যদি তাই হয়, তাহলে এটি InputDispatcher-কে টাচ ইভেন্ট সম্পর্কে বিজ্ঞপ্তি পাঠায়।
  6. কোনও টাচ করার টুল না থাকলেও অন্তত একটি হোভার করার টুল থাকলে, InputReader হোভার ইভেন্ট সম্পর্কে InputDispatcher-কে বিজ্ঞপ্তি পাঠায়।
  7. টাচ ডিভাইসের ধরন পয়েন্টার হলে, InputReader পয়েন্টার জেসচার শনাক্ত করে, পয়েন্টার ও স্পট সেই অনুযায়ী সরায় এবং পয়েন্টার ইভেন্ট সম্পর্কে InputDispatcher-কে বিজ্ঞপ্তি পাঠায়।
  8. ইভেন্টগুলি পাঠানো উচিত কিনা এবং সেগুলি ডিভাইসকে জাগিয়ে তুলবে কিনা তা নির্ধারণ করতে InputDispatcher WindowManagerPolicy ব্যবহার করে। তারপর, InputDispatcher উপযুক্ত অ্যাপে ইভেন্ট ডেলিভার করে।

টাচ ডিভাইস কনফিগারেশন

টাচ ডিভাইসের আচরণ ডিভাইসের অ্যাক্সিস, বোতাম, ইনপুট প্রপার্টি, ইনপুট ডিভাইস কনফিগারেশন, ভার্চুয়াল কী ম্যাপ ও কী লেআউট দ্বারা নির্ধারিত হয়।

কীবোর্ড কনফিগারেশনে অংশগ্রহণকারী ফাইল সম্পর্কে আরও বিবরণ পেতে নিম্নলিখিত বিভাগগুলি দেখুন:

প্রপার্টি

সিস্টেমটি টাচ ডিভাইসের আচরণ কনফিগার ও ক্যালিব্রেট করার জন্য অনেক ইনপুট ডিভাইস কনফিগারেশন প্রপার্টির উপর নির্ভর করে।

এর একটি কারণ হল, টাচ ডিভাইসের ডিভাইস ড্রাইভার প্রায়ই ডিভাইস-নির্দিষ্ট ইউনিট ব্যবহার করে টাচের বৈশিষ্ট্য সম্পর্কে রিপোর্ট করে।

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

সিস্টেম ইনপুট ডিভাইস কনফিগারেশন ফাইলে এনকোড করা ক্রমাঙ্কন প্যারামিটার ব্যবহার করে টাচ ডিভাইসের মাধ্যমে রিপোর্ট করা মান ডিকোড, ট্রান্সফর্ম ও নরমালাইজ করে আরও সহজ স্ট্যান্ডার্ড উপস্থাপনা তৈরি করে যা অ্যাপ বুঝতে পারে।

ডকুমেন্টেশন কনভেনশন

ডকুমেন্টেশনের উদ্দেশ্যে, ক্যালিব্রেশন প্রসেস চলাকালীন সিস্টেমের ব্যবহার করা ভ্যালু বর্ণনা করতে আমরা নিম্নলিখিত কনভেনশন ব্যবহার করি।

অক্ষ বরাবর প্রকৃত ভ্যালু

নিম্নলিখিত এক্সপ্রেশনগুলি টাচ ডিভাইস ড্রাইভারের রিপোর্ট করা র ভ্যালুকে EV_ABS ইভেন্ট হিসেবে দেখায়।

raw.x
ABS_X বা ABS_MT_POSITION_X অক্ষের মান।
raw.y
ABS_Y বা ABS_MT_POSITION_Y অক্ষের ভ্যালু।
raw.pressure
ABS_PRESSURE বা ABS_MT_PRESSURE অক্ষের মান, অথবা উপলভ্য না থাকলে 0।
raw.touchMajor
ABS_MT_TOUCH_MAJOR অক্ষের মান, অথবা উপলভ্য না থাকলে 0।
raw.touchMinor
ABS_MT_TOUCH_MINOR অক্ষের ভ্যালু, অথবা উপলভ্য না থাকলে raw.touchMajor।
raw.toolMajor
ABS_TOOL_WIDTH বা ABS_MT_WIDTH_MAJOR অক্ষের মান, অথবা উপলভ্য না থাকলে 0।
raw.toolMinor
ABS_MT_WIDTH_MINOR অক্ষের মান অথবা উপলভ্য না থাকলে raw.toolMajor।
raw.orientation
ABS_MT_ORIENTATION অক্ষের মান, অথবা উপলভ্য না থাকলে 0।
raw.distance
ABS_DISTANCE বা ABS_MT_DISTANCE অক্ষের মান, অথবা উপলভ্য না থাকলে 0।
raw.tiltX
ABS_TILT_X অক্ষের মান, অথবা উপলভ্য না থাকলে 0।
raw.tiltY
ABS_TILT_Y অক্ষের মান, বা উপলভ্য না থাকলে 0।

অ্যাক্সিসের মূল রেঞ্জ

নিম্নলিখিত এক্সপ্রেশনগুলি র-ভ্যালুর সীমা নির্দেশ করে। প্রতিটি অক্ষের জন্য EVIOCGABS ioctl কল করে এগুলি পাওয়া যায়।

raw.*.min
র অক্ষের অন্তর্ভুক্ত ন্যূনতম মান।
raw.*.max
র অক্ষের অন্তর্ভুক্ত সর্বাধিক মান।
raw.*.range
raw.*.max - raw.*.min-এর সমতুল্য।
raw.*.fuzz
র অ্যাক্সিসের নির্ভুলতা। যেমন, fuzz = ১ মানে হল ভ্যালু +/- ১ ইউনিট পর্যন্ত নির্ভুল।
raw.width
টাচ এরিয়ার অন্তর্ভুক্ত প্রস্থ, যা raw.x.range + 1-এর সমান।
raw.height
টাচ এরিয়ার অন্তর্ভুক্ত উচ্চতা, যা raw.y.range + 1-এর সমতুল্য।

আউটপুট রেঞ্জ

নিম্নলিখিত এক্সপ্রেশন আউটপুট কোঅর্ডিনেট সিস্টেমের বৈশিষ্ট্যগুলি নির্দেশ করে। টাচ ডিভাইস ব্যবহার করা সারফেস ইউনিট থেকে টাচ পজিশন সংক্রান্ত তথ্যকে ডিসপ্লে পিক্সেলের মতো অ্যাপে রিপোর্ট করা আউটপুট ইউনিটে ট্রান্সলেট করতে সিস্টেম লিনিয়ার ইন্টারপোলেশন ব্যবহার করে।

output.width
আউটপুটের প্রস্থ। টাচ স্ক্রিনের (ডিসপ্লের সাথে যুক্ত) জন্য, এটি পিক্সেলে ডিসপ্লের প্রস্থ। টাচ প্যাডের (ডিসপ্লের সাথে যুক্ত নয়) ক্ষেত্রে, আউটপুট প্রস্থ raw.width-এর সমান হয়, এর অর্থ হল কোনও ইন্টারপোলেশন করা হয় না।
output.height
আউটপুটের উচ্চতা। টাচ স্ক্রিনের (ডিসপ্লের সাথে যুক্ত) ক্ষেত্রে, এটি পিক্সেলের ডিসপ্লে হাইট। টাচ প্যাডের (ডিসপ্লের সাথে যুক্ত নয়) জন্য, আউটপুট উচ্চতা raw.height-এর সমান, যা ইঙ্গিত করে যে কোনও ইন্টারপোলেশন করা হয়নি।
output.diag
আউটপুট কোঅর্ডিনেট সিস্টেমের কর্ণ বরাবর দৈর্ঘ্য, যা sqrt(output.width ^2 + output.height ^2)-এর সমতুল্য।

প্রাথমিক কনফিগারেশন

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

touch.deviceType

সংজ্ঞা: touch.deviceType = touchScreen | touchPad | pointer | default

টাচ ডিভাইসের ধরন নির্দিষ্ট করে।

  • ভ্যালু touchScreen হলে, টাচ ডিভাইসটি হল ডিসপ্লের সাথে যুক্ত টাচ স্ক্রিন।

  • ভ্যালু touchPad হলে, টাচ ডিভাইসটি হল একটি টাচ প্যাড যা ডিসপ্লের সাথে অ্যাসোসিয়েট করা নেই।

  • মান pointer হলে, টাচ ডিভাইসটি হল একটি টাচ প্যাড যা ডিসপ্লের সাথে যুক্ত নয় এবং এর মোশন ইনডাইরেক্ট মাল্টি-টাচ পয়েন্টার জেসচার-এর জন্য ব্যবহার করা হয়।

  • মান default হলে, শ্রেণীবিভাগ অ্যালগরিদম অনুযায়ী সিস্টেম অটোমেটিক ডিভাইসের ধরন শনাক্ত করে।

ডিভাইসের ধরন কীভাবে টাচ ডিভাইসের আচরণকে প্রভাবিত করে সেই সম্পর্কে আরও বিশদ বিবরণের জন্য শ্রেণীবিভাগ বিভাগটি দেখুন।

Android 3 এবং তার আগের ভার্সনে, সব টাচ ডিভাইসকে টাচস্ক্রিন হিসেবে ধরে নেওয়া হত।

touch.orientationAware

সংজ্ঞা: touch.orientationAware = 0 | 1

ডিসপ্লে ওরিয়েন্টেশন পরিবর্তনের ক্ষেত্রে টাচ ডিভাইস প্রতিক্রিয়া জানাবে কিনা তা নির্দিষ্ট করে।

  • ভ্যালু 1 হলে, ডিসপ্লে ওরিয়েন্টেশন পরিবর্তন হলেই টাচ ডিভাইসের মাধ্যমে রিপোর্ট করা টাচ পজিশন ঘুরিয়ে দেওয়া হয়।

  • যদি মান 0 হয়, তাহলে টাচ ডিভাইসের মাধ্যমে রিপোর্ট করা টাচ পজিশন ডিসপ্লে ওরিয়েন্টেশন পরিবর্তনের প্রভাব থেকে মুক্ত থাকে।

ডিভাইস টাচ স্ক্রিন হলে ডিফল্ট ভ্যালু হল 1, 0 অন্যথায়।

সিস্টেম ইন্টার্নাল ও এক্সটার্নাল টাচ স্ক্রিন ও ডিসপ্লের মধ্যে পার্থক্য করে। অভ্যন্তরীণ ডিসপ্লের ওরিয়েন্টেশনের উপর ভিত্তি করে ওরিয়েন্টেশন সচেতন ইন্টার্নাল টাচ স্ক্রিন রোটেট করা হয়। এক্সটার্নাল ডিসপ্লের ওরিয়েন্টেশনের উপর ভিত্তি করে ওরিয়েন্টেশন সচেতন এক্সটার্নাল টাচ স্ক্রিন রোটেট করা হয়।

Nexus One-এর মতো ডিভাইসে টাচ স্ক্রিন ঘোরানোর সুবিধা দিতে অরিয়েন্টেশন অ্যাওয়ারনেস ব্যবহার করা হয়। যেমন, ডিভাইসটি তার স্বাভাবিক অরিয়েন্টেশন থেকে ক্লকওয়াইজ ৯০ ডিগ্রি ঘোরানো হলে, টাচ করার অ্যাবসলিউট পজিশনগুলি এমনভাবে রিম্যাপ করা হয় যে টাচ স্ক্রিনের অ্যাবসলিউট কোঅর্ডিনেট সিস্টেমের উপরের বাম কোণে করা টাচটি ডিসপ্লের রোটেট করা কোঅর্ডিনেট সিস্টেমের উপরের বাম কোণে করা টাচ হিসেবে রিপোর্ট করা হয়। এটি করা হয় যাতে টাচগুলি একই কোঅর্ডিনেট সিস্টেমের সাথে রিপোর্ট করা হয় যা অ্যাপগুলি তাদের ভিজ্যুয়াল এলিমেন্ট আঁকতে ব্যবহার করে।

Honeycomb-এর আগে, সব টাচ ডিভাইসকে ওরিয়েন্টেশন সম্পর্কে সচেতন বলে ধরে নেওয়া হত।

touch.gestureMode

সংজ্ঞা: touch.gestureMode = pointer | spots | default

পয়েন্টার জেসচারের জন্য প্রেজেন্টেশন মোড নির্দিষ্ট করে। এই কনফিগারেশন প্রপার্টি শুধুমাত্র তখনই প্রাসঙ্গিক যখন টাচ ডিভাইসটি পয়েন্টার ধরনের হয়।

  • ভ্যালু pointer হলে, টাচ প্যাড জেসচার কার্সরের মাধ্যমে দেখানো হয় যা মাউস পয়েন্টারের মতো।

  • ভ্যালু spots হলে, টাচ প্যাড জেসচার একটি অ্যাঙ্কর দ্বারা দেখানো হয় যা জেসচারের সেন্ট্রয়েড এবং বৃত্তাকার স্পটের একটি সেট দ্বারা দেখানো হয় যা আলাদা আলাদা আঙুলের পজিশন দেখায়।

INPUT_PROP_SEMI_MT ইনপুট প্রপার্টি সেট করা থাকলে ডিফল্ট ভ্যালু pointer হয়, অন্যথায় spots হয়।

X ও Y ফিল্ড

X ও Y ফিল্ড, কন্ট্যাক্ট এরিয়ার কেন্দ্রের পজিশন সংক্রান্ত তথ্য প্রদান করে।

হিসেব

হিসাবটি সহজ: টাচ ড্রাইভার থেকে পজিশনাল তথ্য আউটপুট কোঅর্ডিনেট সিস্টেমে লিনিয়ারলি ইন্টারপোলেট করা হয়।

xScale = output.width / raw.width
yScale = output.height / raw.height

If not orientation aware or screen rotation is 0 degrees:
output.x = (raw.x - raw.x.min) * xScale
output.y = (raw.y - raw.y.min) * yScale
Else If rotation is 90 degrees:
    output.x = (raw.y - raw.y.min) * yScale
    output.y = (raw.x.max - raw.x) * xScale
Else If rotation is 180 degrees:
    output.x = (raw.x.max - raw.x) * xScale
    output.y = (raw.y.max - raw.y) * yScale
Else If rotation is 270 degrees:
    output.x = (raw.y.max - raw.y) * yScale
    output.y = (raw.x - raw.x.min) * xScale
End If

touchMajor, touchMinor, toolMajor, toolMinor, size ফিল্ড

touchMajor এবং touchMinor ফিল্ড আউটপুট ইউনিটে (পিক্সেল) কন্ট্যাক্ট এরিয়ার আনুমানিক ডাইমেনশন বর্ণনা করে।

toolMajor এবং toolMinor ফিল্ডে আউটপুট ইউনিটে (পিক্সেল) টুল-এর আনুমানিক ডাইমেনশন বর্ণনা করা হয়।

size ফিল্ডটি টাচ ডিভাইসের মাধ্যমে অনুভব করা যেতে পারে এমন সবচেয়ে বড় সম্ভাব্য টাচের তুলনায় টাচের স্বাভাবিক আকার বর্ণনা করে। সবচেয়ে ছোট সম্ভাব্য নরমালাইজড সাইজ হল ০.০ (কোনও স্পর্শ নেই অথবা এটি পরিমাপ করা যায় না) এবং সবচেয়ে বড় সম্ভাব্য নরমালাইজড সাইজ হল ১.০ (সেন্সর এরিয়া স্যাচুরেটেড)।

আনুমানিক দৈর্ঘ্য ও প্রস্থ, দুটিই পরিমাপ করা গেলে, touchMajor ফিল্ডে যোগাযোগের জায়গার সবচেয়ে বড় পরিমাপ এবং touchMinor ফিল্ডে সবচেয়ে ছোট পরিমাপ উল্লেখ করা হয়। যখন কন্ট্যাক্ট এরিয়ার আনুমানিক ব্যাস পরিমাপ করা যায়, তখন touchMajor এবং touchMinor ফিল্ড সমান হয়।

একইভাবে, toolMajor ফিল্ডটি দীর্ঘতর ডাইমেনশন এবং toolMinor ফিল্ডটি টুলের ক্রস-সেকশনাল এরিয়ার সংক্ষিপ্ততর ডাইমেনশন নির্দিষ্ট করে।

টাচ সাইজ উপলভ্য না থাকলে কিন্তু টুল সাইজ উপলভ্য থাকলে, টুল সাইজ টাচ সাইজের সমান হিসেবে সেট করা হয়। অন্যদিকে, টুল সাইজ উপলভ্য না থাকলে কিন্তু টাচ সাইজ উপলভ্য থাকলে, টাচ সাইজকে টুল সাইজের সমান হিসেবে সেট করা হয়।

টাচ ডিভাইস বিভিন্ন উপায়ে টাচ সাইজ ও টুল সাইজ পরিমাপ করে বা রিপোর্ট করে। বর্তমান প্রয়োগে তিন ধরনের পরিমাপ কাজ করে: ব্যাসার্ধ, ক্ষেত্রফল ও সারফেস ইউনিটে জ্যামিতিক বাউন্ডিং বক্স।

সংজ্ঞা: touch.size.calibration = none | geometric | diameter | area | default

টাচ ড্রাইভারের মাধ্যমে টাচ সাইজ ও টুল সাইজ রিপোর্ট করার জন্য ব্যবহৃত পরিমাপের ধরন নির্দিষ্ট করে।

  • ভ্যালু none হলে, সাইজ শূন্যে সেট করা হয়।

  • ভ্যালু geometric হলে, সাইজটি পজিশনের মতো একই সারফেস ইউনিটে নির্দিষ্ট করা হয়েছে বলে ধরে নেওয়া হয়, তাই এটি একইভাবে স্কেল করা হয়।

  • ভ্যালু diameter হলে, সাইজটি টাচ বা টুলের ব্যাসের (প্রস্থ) সমানুপাতিক বলে ধরে নেওয়া হয়।

  • ভ্যালু area হলে, টাচ বা টুলের ক্ষেত্রফলের সাথে সাইজকে আনুপাতিক বলে ধরে নেওয়া হয়।

  • ভ্যালু default হলে, সিস্টেম geometric ক্যালিব্রেশন ব্যবহার করে যদি raw.touchMajor বা raw.toolMajor অক্ষ উপলভ্য থাকে, অন্যথায় এটি none ক্যালিব্রেশন ব্যবহার করে।

touch.size.scale

সংজ্ঞা: touch.size.scale = <a non-negative floating point number>

ক্যালিব্রেশনে ব্যবহৃত ধ্রুবক স্কেল ফ্যাক্টর নির্দিষ্ট করে।

ডিফল্ট ভ্যালু হল 1.0।

touch.size.bias

সংজ্ঞা: touch.size.bias = <একটি নন-নেগেটিভ ফ্লোটিং পয়েন্ট নম্বর>

ক্যালিব্রেশনে ব্যবহৃত একটি ধ্রুবক বায়াস ভ্যালু নির্দিষ্ট করে।

ডিফল্ট ভ্যালু হল 0.0।

touch.size.isSummed

সংজ্ঞা: touch.size.isSummed = 0 | 1

সাইজটি কি সব অ্যাক্টিভ পরিচিতির সাইজের যোগফল হিসেবে রিপোর্ট করা হয় নাকি প্রতিটি পরিচিতির জন্য আলাদা আলাদাভাবে রিপোর্ট করা হয় তা উল্লেখ করে।

  • ভ্যালু 1 হলে, ব্যবহারের আগে পরিচিতির সংখ্যা দিয়ে রিপোর্ট করা সাইজকে ভাগ করা হয়।

  • ভ্যালু 0 হলে, রিপোর্ট করা সাইজ যেমন আছে তেমনই ব্যবহার করা হয়।

ডিফল্ট ভ্যালু হল 0।

কিছু টাচ ডিভাইস, বিশেষ করে "Semi-MT" ডিভাইস একাধিক পরিচিতির আলাদা আলাদা ডাইমেনশন বুঝতে পারে না, তাই তারা এমন একটি সাইজ পরিমাপ রিপোর্ট করে যা তাদের মোট ক্ষেত্রফল বা প্রস্থকে উপস্থাপন করে। এই ধরনের ডিভাইসের জন্য এই প্রপার্টি শুধুমাত্র 1 হিসেবে সেট করা উচিত। সন্দেহ হলে, এই ভ্যালু 0 হিসেবে সেট করুন।

গণনা

touchMajor, touchMinor, toolMajor, toolMinor, এবং size ফিল্ডের গণনা নির্দিষ্ট ক্যালিব্রেশন প্যারামিটারের উপর নির্ভর করে।

If raw.touchMajor and raw.toolMajor are available:
    touchMajor = raw.touchMajor
    touchMinor = raw.touchMinor
    toolMajor = raw.toolMajor
    toolMinor = raw.toolMinor
Else If raw.touchMajor is available:
    toolMajor = touchMajor = raw.touchMajor
    toolMinor = touchMinor = raw.touchMinor
Else If raw.toolMajor is available:
    touchMajor = toolMajor = raw.toolMajor
    touchMinor = toolMinor = raw.toolMinor
Else
    touchMajor = toolMajor = 0
    touchMinor = toolMinor = 0
    size = 0
End If

size = avg(touchMajor, touchMinor)

If touch.size.isSummed == 1:
    touchMajor = touchMajor / numberOfActiveContacts
    touchMinor = touchMinor / numberOfActiveContacts
    toolMajor = toolMajor / numberOfActiveContacts
    toolMinor = toolMinor / numberOfActiveContacts
    size = size / numberOfActiveContacts
End If

If touch.size.calibration == "none":
    touchMajor = toolMajor = 0
    touchMinor = toolMinor = 0
    size = 0
Else If touch.size.calibration == "geometric":
    outputScale = average(output.width / raw.width, output.height / raw.height)
    touchMajor = touchMajor * outputScale
    touchMinor = touchMinor * outputScale
    toolMajor = toolMajor * outputScale
    toolMinor = toolMinor * outputScale
Else If touch.size.calibration == "area":
    touchMajor = sqrt(touchMajor)
    touchMinor = touchMajor
    toolMajor = sqrt(toolMajor)
    toolMinor = toolMajor
Else If touch.size.calibration == "diameter":
    touchMinor = touchMajor
    toolMinor = toolMajor
End If

If touchMajor != 0:
    output.touchMajor = touchMajor * touch.size.scale + touch.size.bias
Else
    output.touchMajor = 0
End If

If touchMinor != 0:
    output.touchMinor = touchMinor * touch.size.scale + touch.size.bias
Else
    output.touchMinor = 0
End If

If toolMajor != 0:
    output.toolMajor = toolMajor * touch.size.scale + touch.size.bias
Else
    output.toolMajor = 0
End If

If toolMinor != 0:
    output.toolMinor = toolMinor * touch.size.scale + touch.size.bias
Else
    output.toolMinor = 0
End If

output.size = size

চাপের ফিল্ড

pressure ফিল্ডটি টাচ ডিভাইসে প্রয়োগ করা আনুমানিক শারীরিক চাপকে ০.০ (কোনও টাচ নেই) এবং ১.০ (স্বাভাবিক চাপ) এর মধ্যে একটি স্বাভাবিক মান হিসাবে বর্ণনা করে।

প্রেশার শূন্য হলে বোঝা যায় যে টুলটি হোভার করছে।

touch.pressure.calibration

সংজ্ঞা: touch.pressure.calibration = none | physical | amplitude | default

টাচ ড্রাইভারের মাধ্যমে প্রেসার রিপোর্ট করার জন্য যে ধরনের পরিমাপ ব্যবহার করা হয় তা নির্দিষ্ট করে।

  • মান none হলে, প্রেসার অজানা থাকে, তাই টাচ করার সময় এটি ১.০ এবং হোভার করার সময় ০.০ হিসেবে সেট করা হয়।

  • মান physical হলে, প্রেসার অ্যাক্সিস টাচ প্যাডে প্রয়োগ করা প্রকৃত ফিজিক্যাল ইনটেনসিটি পরিমাপ করে বলে ধরে নেওয়া হয়।

  • ভ্যালু amplitude হলে, সিগন্যাল অ্যামপ্লিটিউড পরিমাপ করার জন্য প্রেসার অ্যাক্সিসকে ধরা হয়, যা কন্ট্যাক্টের সাইজ ও প্রয়োগ করা প্রেসারের সাথে সম্পর্কিত।

  • ভ্যালু default হলে, সিস্টেম physical ক্যালিব্রেশন ব্যবহার করে যদি প্রেশার অ্যাক্সিস উপলভ্য থাকে, অন্যথায় none ব্যবহার করে।

touch.pressure.scale

সংজ্ঞা: touch.pressure.scale = <a non-negative floating point number>

ক্যালিব্রেশনে ব্যবহৃত ধ্রুবক স্কেল ফ্যাক্টর নির্দিষ্ট করে।

ডিফল্ট ভ্যালু হল 1.0 / raw.pressure.max।

হিসেব

pressure ফিল্ডের গণনা নির্দিষ্ট করা ক্যালিব্রেশন প্যারামিটারের উপর নির্ভর করে।

If touch.pressure.calibration == "physical" or "amplitude":
    output.pressure = raw.pressure * touch.pressure.scale
Else
    If hovering:
        output.pressure = 0
    Else
        output.pressure = 1
    End If
End If

সজ্জা ও কাত হওয়া ফিল্ড

orientation ফিল্ডটি টাচ ও টুলের ওরিয়েন্টেশনকে কৌণিক পরিমাপ হিসেবে বর্ণনা করে। 0-এর ওরিয়েন্টেশন নির্দেশ করে যে প্রধান অক্ষটি উল্লম্বভাবে ওরিয়েন্টেড, -PI/2 নির্দেশ করে যে প্রধান অক্ষটি বাঁদিকে ওরিয়েন্টেড, PI/2 নির্দেশ করে যে প্রধান অক্ষটি ডানদিকে ওরিয়েন্টেড। স্টাইলাস টুল থাকলে, ওরিয়েন্টেশন রেঞ্জকে -PI থেকে PI পর্যন্ত একটি সম্পূর্ণ বৃত্তাকার রেঞ্জে বর্ণনা করা যেতে পারে।

tilt ফিল্ডে অ্যাঙ্গুলার পরিমাপ হিসেবে টুলের ইনক্লিনেশন বর্ণনা করা হয়। 0 কোণে কাত করা হলে বোঝা যায় যে টুলটি সারফেসের সাথে লম্বভাবে আছে। PI/2 কোণে হেলানো থাকলে বুঝতে হবে যে টুলটি সারফেসের উপর সমান্তরালভাবে রাখা আছে।

touch.orientation.calibration

সংজ্ঞা: touch.orientation.calibration = none | interpolated | vector | default

ওরিয়েন্টেশন রিপোর্ট করার জন্য টাচ ড্রাইভারের মাধ্যমে ব্যবহৃত পরিমাপের ধরন নির্দিষ্ট করে।

  • ভ্যালু none হলে, ওরিয়েন্টেশন অজানা, তাই এটি ০ হিসেবে সেট করা হয়েছে।
  • ভ্যালু interpolated হলে, ওরিয়েন্টেশন লিনিয়ারলি ইন্টারপোলেট করা হয় যাতে raw.orientation.min-এর র ভ্যালু -PI/2-এ ম্যাপ করে এবং raw.orientation.max-এর র ভ্যালু PI/2-এ ম্যাপ করে। (raw.orientation.min + raw.orientation.max) / 2-এর সেন্টার ভ্যালু 0-এর সাথে ম্যাপ করা হয়।
  • ভ্যালু vector হলে, ওরিয়েন্টেশনকে দুটি স্বাক্ষরিত ৪-বিট ফিল্ডের সমন্বয়ে গঠিত একটি প্যাক করা ভেক্টর হিসেবে ব্যাখ্যা করা হয়। Atmel Object Based Protocol পার্টে এই উপস্থাপনা ব্যবহার করা হয়। ডিকোড করা হলে, ভেক্টর থেকে একটি ওরিয়েন্টেশন অ্যাঙ্গেল ও কনফিডেন্স ম্যাগনিটিউড পাওয়া যায়। কনফিডেন্স ম্যাগনিটিউড ব্যবহার করে সাইজ সংক্রান্ত তথ্য স্কেল করা হয়, যদি না এটি জ্যামিতিক হয়।
  • ভ্যালু default হলে, সিস্টেম interpolated ক্যালিব্রেশন ব্যবহার করে যদি ওরিয়েন্টেশন অ্যাক্সিস উপলভ্য থাকে, অন্যথায় none ব্যবহার করে।

হিসেব

orientation এবং tilt ফিল্ডের গণনা নির্ভর করে নির্দিষ্ট করা ক্যালিব্রেশন প্যারামিটার এবং উপলভ্য ইনপুটের উপর।

If touch.tiltX and touch.tiltY are available:
    tiltXCenter = average(raw.tiltX.min, raw.tiltX.max)
    tiltYCenter = average(raw.tiltY.min, raw.tiltY.max)
    tiltXAngle = (raw.tiltX - tiltXCenter) * PI / 180
    tiltYAngle = (raw.tiltY - tiltYCenter) * PI / 180
    output.orientation = atan2(-sin(tiltXAngle), sinf(tiltYAngle))
    output.tilt = acos(cos(tiltXAngle) * cos(tiltYAngle))
Else If touch.orientation.calibration == "interpolated":
    center = average(raw.orientation.min, raw.orientation.max)
    output.orientation = PI / (raw.orientation.max - raw.orientation.min)
    output.tilt = 0
Else If touch.orientation.calibration == "vector":
    c1 = (raw.orientation & 0xF0) >> 4
    c2 = raw.orientation & 0x0F

    If c1 != 0 or c2 != 0:
        If c1 >= 8 Then c1 = c1 - 16
        If c2 >= 8 Then c2 = c2 - 16
        angle = atan2(c1, c2) / 2
        confidence = sqrt(c1*c1 + c2*c2)

        output.orientation = angle

        If touch.size.calibration == "diameter" or "area":
            scale = 1.0 + confidence / 16
            output.touchMajor *= scale
            output.touchMinor /= scale
            output.toolMajor *= scale
            output.toolMinor /= scale
        End If
    Else
        output.orientation = 0
    End If
    output.tilt = 0
Else
    output.orientation = 0
    output.tilt = 0
End If

If orientation aware:
    If screen rotation is 90 degrees:
        output.orientation = output.orientation - PI / 2
    Else If screen rotation is 270 degrees:
        output.orientation = output.orientation + PI / 2
    End If
End If

দূরত্ব ফিল্ড

distance ফিল্ডে টুল ও টাচ ডিভাইস সারফেসের মধ্যে দূরত্ব বর্ণনা করা হয়। ০.০ মান সরাসরি যোগাযোগ নির্দেশ করে এবং বড় মানগুলি পৃষ্ঠ থেকে ক্রমবর্ধমান দূরত্ব নির্দেশ করে।

touch.distance.calibration

সংজ্ঞা: touch.distance.calibration = none | scaled | default

দূরত্ব রিপোর্ট করার জন্য টাচ ড্রাইভারের ব্যবহার করা পরিমাপের ধরন নির্দিষ্ট করে।

  • ভ্যালু none হলে, দূরত্ব অজানা, তাই এটি ০ হিসেবে সেট করা হয়েছে।

  • ভ্যালু scaled হলে, রিপোর্ট করা দূরত্বকে একটি ধ্রুবক স্কেল ফ্যাক্টর দিয়ে গুণ করা হয়।

  • ভ্যালু default হলে, সিস্টেম scaled ক্যালিব্রেশন ব্যবহার করে যদি দূরত্ব অক্ষ উপলভ্য থাকে, অন্যথায় none ব্যবহার করে।

touch.distance.scale

সংজ্ঞা: touch.distance.scale = <a non-negative floating point number>

ক্যালিব্রেশনে ব্যবহৃত ধ্রুবক স্কেল ফ্যাক্টর নির্দিষ্ট করে।

ডিফল্ট ভ্যালু হল 1.0।

হিসেব

distance ফিল্ডের গণনা নির্দিষ্ট করা ক্যালিব্রেশন প্যারামিটারের উপর নির্ভর করে।

If touch.distance.calibration == "scaled":
    output.distance = raw.distance * touch.distance.scale
Else
    output.distance = 0
End If

উদাহরণ

# Input device configuration file for a touch screen that supports pressure,
# size and orientation. The pressure and size scale factors were obtained
# by measuring the characteristics of the device itself and deriving
# useful approximations based on the resolution of the touch sensor and the
# display.
#
# Note that these parameters are specific to a particular device model.
# Different parameters need to be used for other devices.

# Basic Parameters
touch.deviceType = touchScreen
touch.orientationAware = 1

# Size
# Based on empirical measurements, we estimate the size of the contact
# using size = sqrt(area) * 28 + 0.
touch.size.calibration = area
touch.size.scale = 28
touch.size.bias = 0
touch.size.isSummed = 0

# Pressure
# Driver reports signal strength as pressure.
#
# A normal index finger touch typically registers about 80 signal strength
# units although we don't expect these values to be accurate.
touch.pressure.calibration = amplitude
touch.pressure.scale = 0.0125

# Orientation
touch.orientation.calibration = vector

কম্প্যাটিবিলিটি সংক্রান্ত নোট

Android Ice Cream Sandwich 4.0-এ টাচ ডিভাইসের কনফিগারেশন প্রপার্টিতে উল্লেখযোগ্য পরিবর্তন করা হয়েছে। টাচ ডিভাইসের জন্য সব ইনপুট ডিভাইস কনফিগারেশন ফাইলকে নতুন কনফিগারেশন প্রপার্টি ব্যবহার করার জন্য আপডেট করতে হবে।

পুরনো টাচ ডিভাইসের ড্রাইভারও আপডেট করতে হতে পারে।

ভার্চুয়াল কী ম্যাপ ফাইল

ভার্চুয়াল কী প্রয়োগ করার জন্য টাচ ডিভাইস ব্যবহার করা যেতে পারে।

টাচ কন্ট্রোলারের ক্ষমতার উপর নির্ভর করে এটি করার বিভিন্ন উপায় রয়েছে। কিছু টাচ কন্ট্রোলার সরাসরি ফার্মওয়্যার রেজিস্টার সেট করে সফ্ট কী প্রয়োগ করার জন্য কনফিগার করা যেতে পারে। অন্যান্য ক্ষেত্রে, সফ্টওয়্যারে টাচ কোঅর্ডিনেট থেকে কী কোড ম্যাপিং করা ভাল।

সফ্টওয়্যারে ভার্চুয়াল কী প্রয়োগ করা হলে, কার্নেলকে অবশ্যই বোর্ড প্রপার্টি হিসেবে virtualkeys.<devicename> নামের একটি ভার্চুয়াল কী ম্যাপ ফাইল এক্সপোর্ট করতে হবে। যেমন, টাচ স্ক্রিন ডিভাইস ড্রাইভার যদি তার নাম "touchyfeely" হিসেবে রিপোর্ট করে, তাহলে ভার্চুয়াল কী ম্যাপ ফাইলে এই পাথ থাকতে হবে /sys/board_properties/virtualkeys.touchyfeely.

ভার্চুয়াল কী ম্যাপ ফাইল টাচ স্ক্রিনে ভার্চুয়াল কী-এর কোঅর্ডিনেট ও Linux কী কোড বর্ণনা করে।

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

সিনট্যাক্স

ভার্চুয়াল কী ম্যাপ ফাইল হল একটি প্লেন টেক্সট ফাইল যাতে ভার্চুয়াল কী লেআউটের বিবরণের ক্রম থাকে যা নতুন লাইন বা কোলন দিয়ে আলাদা করা থাকে।

কমেন্ট লাইন '#' দিয়ে শুরু হয় এবং লাইনের শেষ পর্যন্ত চলতে থাকে।

প্রতিটি ভার্চুয়াল কী ৬টি কোলন-ডিলিমিটেড কম্পোনেন্ট দিয়ে বর্ণনা করা হয়:

  • 0x01: ভার্সন কোড। সবসময় 0x01 হতে হবে।
  • <Linux key code>: ভার্চুয়াল কীয়ের Linux কী কোড।
  • <centerX>: ভার্চুয়াল কীয়ের কেন্দ্রের X পিক্সেল কোঅর্ডিনেট।
  • <centerY>: ভার্চুয়াল কীয়ের কেন্দ্রের Y পিক্সেল কোঅর্ডিনেট।
  • <width>: পিক্সেলে ভার্চুয়াল 'কী'-এর প্রস্থ।
  • <height>: পিক্সেলে ভার্চুয়াল কীয়ের উচ্চতা।

সব কোঅর্ডিনেট ও সাইজ ডিসপ্লে কোঅর্ডিনেট সিস্টেমের ভিত্তিতে নির্দিষ্ট করা হয়।

এখানে একটি ভার্চুয়াল কী ম্যাপ ফাইল দেওয়া হল, যার সব তথ্য একটি লাইনে লেখা হয়েছে।

# All on one line
0x01:158:55:835:90:55:0x01:139:172:835:125:55:0x01:102:298:835:115:55:0x01:217:412:835:95:55

একই ভার্চুয়াল কী ম্যাপ ফাইল একাধিক লাইনেও লেখা যেতে পারে।

# One key per line
0x01:158:55:835:90:55
0x01:139:172:835:125:55
0x01:102:298:835:115:55
0x01:217:412:835:95:55

উপরের উদাহরণে, টাচ স্ক্রিনের রেজোলিউশন হল ৪৮০x৮০০। সেই অনুযায়ী, সব ভার্চুয়াল কী-এর <centerY> কোঅর্ডিনেট হল ৮৩৫, যা টাচ স্ক্রিনের দৃশ্যমান অংশের একটু নিচে।

প্রথম কীটির Linux স্ক্যান কোড হল 158 (KEY_BACK), centerX হল 55, centerY হল 835, প্রস্থ হল 90 এবং উচ্চতা হল 55.

উদাহরণ

ভার্চুয়াল কী ম্যাপ ফাইল: /sys/board_properties/virtualkeys.touchyfeely.

0x01:158:55:835:90:55
0x01:139:172:835:125:55
0x01:102:298:835:115:55
0x01:217:412:835:95:55

কী লেআউট ফাইল: /system/usr/keylayout/touchyfeely.kl.

key 158 BACK
key 139 MENU
key 172 HOME
key 217 SEARCH

কী অক্ষর ম্যাপ ফাইল: /system/usr/keychars/touchyfeely.kcm.

type SPECIAL_FUNCTION

ইনডাইরেক্ট মাল্টি-টাচ পয়েন্টার জেসচার

পয়েন্টার মোডে, সিস্টেম নিম্নলিখিত জেসচারগুলি বুঝতে পারে:

  • একটি আঙুল দিয়ে ট্যাপ করা: ক্লিক করা।
  • একটি আঙুল দিয়ে মোশন: পয়েন্টার সরান।
  • একটি আঙুল দিয়ে মোশন প্লাস বোতাম প্রেস করা: পয়েন্টার টেনে আনা।
  • দুটি আঙুল একই দিকে সরানোর মোশন: পয়েন্টারের নিচে থাকা অংশটি সেই দিকে টেনে নিয়ে যান। পয়েন্টারটি নিজে থেকে নড়ে না।
  • দুটি আঙুলের গতিবিধি, দুটি আঙুল একে অপরের দিকে বা আলাদা আলাদা দিকে সরানো: পয়েন্টারের আশেপাশের এলাকা প্যান/স্কেল/ঘোরানো। পয়েন্টার নিজে থেকে সরে না।
  • একাধিক আঙুল ব্যবহার করে মোশন: ফ্রিফর্ম জেসচার।

পাম রিজেকশন

Android 13 ভার্সন অনুযায়ী, বিল্ট-ইন ফ্রেমওয়ার্ক চালু থাকলে, সিস্টেম অটোমেটিক হাতের তালু থেকে পাওয়া ইনপুট বাতিল করতে পারে। ইন-হাউস, কাস্টম-বিল্ড সমাধান এখনও কাজ করে, যদিও হাতের তালু শনাক্ত করা হলে TOOL_TYPE_PALM ফ্ল্যাগ ফিরিয়ে দেওয়ার জন্য সেগুলি পরিবর্তন করতে হতে পারে। বিল্ট-ইন ফ্রেমওয়ার্ক কাস্টম সমাধানের সাথেও কাজ করে।

আসল মডেলটি জেসচার ডেটার প্রথম ৯০ মিলি সেকেন্ড, বর্তমান পয়েন্টার এবং আশেপাশের পয়েন্টার দেখে, তারপর ডিসপ্লের প্রান্ত থেকে টাচ কত দূরে আছে তা বিবেচনা করে। তারপর, এটি প্রতিটি পয়েন্টারের ভিত্তিতে নির্ধারণ করে যে কোন পয়েন্টারগুলি হাতের তালু। এছাড়াও, এটি touchMajor এবং touchMinor-এর রিপোর্ট করা প্রতিটি পরিচিতির সাইজ বিবেচনা করে। Android ফ্রেমওয়ার্ক তারপরে টাচ স্ট্রিম থেকে পাম হিসেবে চিহ্নিত করা পয়েন্টার সরিয়ে দেয়।

অ্যাপে আগেই কোনও পয়েন্টার পাঠানো হয়ে থাকলে, সিস্টেম হয়:

  • (অন্যান্য অ্যাক্টিভ পয়েন্টার থাকলে) ACTION_POINTER_UP ও FLAG_CANCELED সেট করা পয়েন্টার বাতিল করে।
  • (এটিই একমাত্র পয়েন্টার হলে) ACTION_CANCEL-এর মাধ্যমে পয়েন্টার বাতিল করে।

একটি পাবলিক API, MotionEvent.FLAG_CANCELED, ইঙ্গিত করে যে বর্তমান ইভেন্ট ব্যবহারকারীর অ্যাকশন ট্রিগার করবে না। এই ফ্ল্যাগটি ACTION_CANCEL এবং ACTION_POINTER_UP, দু'টির জন্যই সেট করা আছে।

অ্যাপে পাম পয়েন্টার পাঠানো না হলে, সিস্টেম পয়েন্টারটি ড্রপ করে দেয়।

'পাম রিজেকশন' চালু করুন

  1. আপনার টাচ ড্রাইভারের মধ্যে, নিম্নলিখিত ফিল্ডের জন্য রেজোলিউশন সেট করতে input_abs_set_res ম্যাক্রো ব্যবহার করুন (ইউনিট হল প্রতি মিমি পিঙ্ক্সেল):
    • ABS_MT_POSITION_X
    • ABS_MT_POSITION_Y
    • ABS_MT_TOUCH_MAJOR
    • ABS_MT_TOUCH_MINOR

    ABS_MT_TOUCH_MINOR-এর জন্য সহায়তা ঐচ্ছিক। তবে, আপনার ডিভাইসে এটি কাজ করলে, রেজোলিউশন সঠিকভাবে সেট করা আছে কিনা তা দেখে নিন।

  2. ফিল্ড সঠিকভাবে সেট করা হয়েছে কিনা তা কনফার্ম করতে, এগুলি রান করান:
        $ adb shell getevent -li
    
  3. রানটাইমের সময় ফিচার চালু করতে, এটি রান করুন:
        $ adb shell device_config put input_native_boot palm_rejection_enabled 1
    
  4. system_server প্রসেস রিস্টার্ট করুন।
         $ adb shell stop && adb shell start
        
  5. কনফার্ম করুন যে adb shell dumpsys input-এ দেখানো হচ্ছে যে UnwantedInteractionBlocker-এর ভিতরে পাম রিজেক্টর আছে। যদি না হয়, তাহলে ইনপুট সংক্রান্ত লগ চেক করে দেখুন যে কী ভুল কনফিগার করা হয়েছে।

    রেফারেন্সের জন্য নিম্নলিখিত উদাহরণ দেখুন:

    UnwantedInteractionBlocker:
      mEnablePalmRejection: true
      isPalmRejectionEnabled (flag value): true
      mPalmRejectors:
        deviceId = 3:
          mDeviceInfo:
            max_x = 
            max_y = 
            x_res = 11.00
            y_res = 11.00
            major_radius_res = 1.00
            minor_radius_res = 1.00
            minor_radius_supported = true
            touch_major_res = 1
            touch_minor_res = 1
          mSlotState:
            mSlotsByPointerId:
    
            mPointerIdsBySlot:
    
          mSuppressedPointerIds: {}
    
  6. ফিচারটি স্থায়ীভাবে চালু করতে, আপনার init**rc ফাইলে সংশ্লিষ্ট sysprop কমান্ড যোগ করুন:

    setprop persist.device_config.input_native_boot.palm_rejection_enabled 1
    

আরও পড়ুন