ইনপুট সামঞ্জস্যতা

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

যেসব ডেভেলপার চান যে তাদের অ্যাপটি ChromeOS এবং অন্যান্য বড় স্ক্রিনের অ্যান্ড্রয়েড সক্ষম ডিভাইসগুলিতে ইনপুট দিয়ে ভালোভাবে কাজ করুক, তাদের নিম্নলিখিত অপ্টিমাইজেশনগুলি দেখা উচিত:

  • মৌলিক কীবোর্ড সাপোর্ট যোগ করুন এবং পরীক্ষা করুন, যেমন তীর এবং ট্যাব কী ব্যবহার করে কীবোর্ড নেভিগেশন, টেক্সট এন্ট্রি নিশ্চিত করার জন্য এন্টার কী এবং মিডিয়া অ্যাপে প্লে/পজের জন্য স্পেস।
  • প্রযোজ্য ক্ষেত্রে স্ট্যান্ডার্ড কীবোর্ড শর্টকাট যোগ করুন, উদাহরণস্বরূপ পূর্বাবস্থায় ফেরানোর জন্য ctrl + z , সংরক্ষণের জন্য ctrl + s
  • কনটেক্সট মেনুর জন্য রাইট-ক্লিক, হোভারে আইকন পরিবর্তন এবং কাস্টম ভিউতে মাউস হুইল/ট্র্যাকপ্যাড স্ক্রোল ইভেন্টের পদ্ধতিতে মৌলিক মাউস ইন্টারঅ্যাকশন পরীক্ষা করুন।
  • অ্যাপ-নির্দিষ্ট ইনপুট ডিভাইসগুলি পরীক্ষা করুন যেমন অঙ্কন অ্যাপের জন্য স্টাইলাস, গেমের জন্য গেম কন্ট্রোলার এবং সঙ্গীত অ্যাপের জন্য MIDI কন্ট্রোলার।
  • ডেস্কটপ পরিবেশে অ্যাপটিকে আলাদা করে তুলতে পারে এমন উন্নত ইনপুট সাপোর্ট বিবেচনা করুন: ডিজে অ্যাপের জন্য ক্রস-ফ্যাডার হিসেবে টাচপ্যাড, গেমের জন্য মাউস ক্যাপচার এবং পাওয়ার ব্যবহারকারীদের জন্য বিস্তৃত কীবোর্ড শর্টকাট।

কীবোর্ড

আপনার অ্যাপটি কীবোর্ড ইনপুটে যেভাবে সাড়া দেয় তা একটি ভালো ডেস্কটপ অভিজ্ঞতা প্রদান করে। তিন ধরণের কীবোর্ড ইনপুট রয়েছে: নেভিগেশন, কীস্ট্রোক এবং শর্টকাট।

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

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

yourView.isFocusable = true

বিকল্পভাবে আপনি আপনার লেআউট ফাইলে focusable বৈশিষ্ট্য সেট করতে পারেন:

android:focusable="true"

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

// Arrow keys
yourView.nextFocusLeftId = R.id.view_to_left
yourView.nextFocusRightId = R.id.view_to_right
yourView.nextFocusTopId = R.id.view_above
yourView.nextFocusBottomId = R.id.view_below

// Tab key
yourView.nextFocusForwardId = R.id.next_view

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

দ্রষ্টব্য: মনে রাখবেন, অ্যাক্সেসিবিলিটির চাহিদা সম্পন্ন ব্যবহারকারীদের জন্য কীবোর্ড সমর্থন অপরিহার্য হতে পারে।

কীস্ট্রোক

EditText এর মতো অন-স্ক্রিন ভার্চুয়াল কীবোর্ড ( IME ) দ্বারা পরিচালিত টেক্সট ইনপুটের ক্ষেত্রে, ChromeOS-এ অ্যাপগুলিকে ডেভেলপারের কাছ থেকে কোনও অতিরিক্ত কাজ ছাড়াই প্রত্যাশা অনুযায়ী আচরণ করা উচিত। ফ্রেমওয়ার্ক দ্বারা প্রত্যাশিত না হওয়া কীস্ট্রোকের ক্ষেত্রে, অ্যাপগুলিকে নিজেরাই আচরণ পরিচালনা করতে হবে। এটি বিশেষ করে কাস্টম ভিউ সহ অ্যাপগুলির ক্ষেত্রে সত্য।

কিছু উদাহরণ হল চ্যাট অ্যাপ যা এন্টার কী ব্যবহার করে বার্তা পাঠায়, মিডিয়া অ্যাপ যা স্পেস কী দিয়ে প্লেব্যাক শুরু/বন্ধ করে এবং গেম যা w, a, s, এবং d কী দিয়ে চলাচল নিয়ন্ত্রণ করে।

বেশিরভাগ অ্যাপ onKeyUp ইভেন্টকে ওভাররাইড করে এবং প্রতিটি প্রাপ্ত কীকোডের জন্য প্রত্যাশিত আচরণ যোগ করে, যা নিম্নরূপ।

override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
    return when (keyCode) {
        KeyEvent.KEYCODE_ENTER -> {
            sendChatMessage()
            true
        }
        KeyEvent.KEYCODE_SPACE -> {
            playOrPauseMedia()
            true
        }
        else -> super.onKeyUp(keyCode, event)
    }
}

onKeyUp ব্যবহার করলে অ্যাপগুলিকে একাধিক ইভেন্ট গ্রহণ করতে বাধা দেওয়া হয় যদি একটি কী চেপে রাখা হয় বা ধীরে ধীরে ছেড়ে দেওয়া হয়। যেসব গেম এবং অ্যাপ ব্যবহারকারীদের কী চেপে রাখার আশা করে, তারা onKeyDown ইভেন্টটি খুঁজে দেখতে পারে।

একটি অ্যাপের চাহিদার উপর নির্ভর করে, সমগ্র অ্যাক্টিভিটির জন্য onKeyUp ওভাররাইড করলে সাধারণত প্রয়োজনীয় আচরণ পাওয়া যায়। প্রয়োজনে, একটি নির্দিষ্ট ভিউতে একটি onKeyListener যোগ করা যেতে পারে। উদাহরণস্বরূপ, একটি অ্যাপ শুধুমাত্র নির্দিষ্ট EditText-এ Enter কী শুনতে পারে, Activity-তে নয়, যাতে ব্যবহারকারী যখন চ্যাট বক্সে টাইপ করছেন তখনই সেন্ড কার্যকারিতা বাস্তবায়ন করা যায়।

যখন আপনি কীবোর্ড সাপোর্ট যোগ করবেন, তখন অ্যান্ড্রয়েড কীবোর্ড হ্যান্ডলিং ডকুমেন্টেশন অনুসরণ করুন।

শর্টকাট

ডেস্কটপ পরিবেশে সাধারণ ctrl , alt এবং shift ভিত্তিক শর্টকাটগুলি প্রত্যাশিত। যদি কোনও অ্যাপ এগুলি বাস্তবায়ন না করে, তাহলে ব্যবহারকারীদের অভিজ্ঞতা হতাশাজনক এবং বিরক্তিকর মনে হতে পারে। উন্নত ব্যবহারকারীরা প্রায়শই ব্যবহৃত অ্যাপ-নির্দিষ্ট কাজের জন্য শর্টকাটগুলিও পছন্দ করেন। শর্টকাটগুলি একটি অ্যাপ ব্যবহার করা সহজ করে তোলে এবং শর্টকাট নেই এমন অ্যাপগুলি থেকে এটিকে আলাদা করে।

কিছু সাধারণ শর্টকাটের মধ্যে রয়েছে save ( ctrl + s ), undo ( ctrl + z ), এবং redo ( ctrl + shift + z )। আরও কিছু উন্নত শর্টকাটের উদাহরণের জন্য, VLC Media Player শর্টকাট কীগুলির তালিকা দেখুন।

dispatchKeyShortcutEvent ব্যবহার করে শর্টকাটগুলি বাস্তবায়িত করা যেতে পারে। এটি একটি প্রদত্ত কীকোডের জন্য সমস্ত মেটা-কী সংমিশ্রণ ( alt , ctrl , এবং shift ) আটকে দেয়। একটি নির্দিষ্ট মেটা-কী পরীক্ষা করতে, KeyEvent.isCtrlPressed() , KeyEvent.isShiftPressed() , KeyEvent.isAltPressed() , অথবা KeyEvent.hasModifiers() ব্যবহার করুন।

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

override fun dispatchKeyShortcutEvent(event: KeyEvent): Boolean {
  return when (event.keyCode) {
    KeyEvent.KEYCODE_O -> {
      openFile() // Ctrl+O, Shift+O, Alt+O
      true
    }
    KeyEvent.KEYCODE_Z-> {
      if (event.isCtrlPressed) {
        if (event.isShiftPressed) {
          redoLastAction() // Ctrl+Shift+Z pressed
          true
        } else {
          undoLastAction() // Ctrl+Z pressed
          true
        }
      }
    }
    else -> {
      return super.dispatchKeyShortcutEvent(event)
    }
  }
}

আপনি একইভাবে KeyEvent.isCtrlPressed() , KeyEvent.isShiftPressed() , অথবা KeyEvent.isAltPressed() চেক করে onKeyUp এ শর্টকাটগুলি বাস্তবায়ন করতে পারেন। মেটা-আচরণ যদি শর্টকাটের চেয়ে অ্যাপ আচরণের পরিবর্তনের জন্য বেশি ব্যবহৃত হয় তবে এটি বজায় রাখা সহজ হতে পারে। উদাহরণস্বরূপ, যখন w এর অর্থ "এগিয়ে চলুন" এবং shift+w এর অর্থ "এগিয়ে চলুন"।

override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
  return when(keyCode) {
    KeyEvent.KEYCODE_W-> {
      if (event.isShiftPressed) {
        if (event.isCtrlPressed) {
          flyForward() // Ctrl+Shift+W pressed
          true
        } else {
          runForward() // Shift+W pressed
          true
        }
      } else {
        walkForward() // W pressed
      }
    }
    else -> super.onKeyUp(keyCode, event)
  }
}

মাউস এবং টাচপ্যাড সাপোর্ট

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

ডান-ক্লিক করুন

যেকোনো অ্যাকশন যা একটি অ্যাপকে একটি কনটেক্সট মেনু দেখাতে বাধ্য করে, যেমন একটি তালিকার আইটেমে দীর্ঘক্ষণ চাপ দেওয়া, সেগুলিও ডান-ক্লিক ইভেন্টগুলিতে প্রতিক্রিয়া দেখাবে। ডান-ক্লিক ইভেন্টগুলি পরিচালনা করার জন্য, অ্যাপগুলিকে একটি View.OnContextClickListener নিবন্ধন করতে হবে। কনটেক্সট মেনু তৈরির বিশদ বিবরণের জন্য, Android কনটেক্সট মেনু ডকুমেন্টেশন দেখুন।

yourView.setOnContextClickListener { view ->
  showContextMenu()
  true
}

দ্রষ্টব্য: Activity.registerForContextMenu() ব্যবহার করে কনটেক্সট মেনুর জন্য নিবন্ধিত যেকোনো ভিউ স্বয়ংক্রিয়ভাবে দীর্ঘক্ষণ প্রেস এবং রাইট-ক্লিক উভয়ের মাধ্যমেই কাজ করবে, কোনও কনটেক্সট ক্লিক লিসেনার নিবন্ধনের প্রয়োজন হবে না।

হোভার

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

  • মাউস পয়েন্টার আইকন পরিবর্তন করে ব্যবহারকারীদের জানাতে হবে যে কোনও উপাদানের ইন্টারেক্টিভ আচরণ আছে কিনা, যেমন ক্লিকযোগ্য বা সম্পাদনাযোগ্য।
  • একটি বৃহৎ তালিকা বা গ্রিডের আইটেমগুলির উপর পয়েন্টার ঘোরার সময় ভিজ্যুয়াল প্রতিক্রিয়া যোগ করা
// Change the icon to a "hand" pointer on hover,
// Highlight the view by changing the background.
yourView.setOnHoverListener { view, _ ->
  addVisualHighlighting(true)
  view.pointerIcon =
    PointerIcon.getSystemIcon(applicationContext,
    PointerIcon.TYPE_HAND)
  false // listener did not consume the event.
}

টেনে আনুন এবং ফেলে দিন

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

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

ড্র্যাগ-এন্ড-ড্রপ সাপোর্ট যোগ করতে, অ্যান্ড্রয়েড ড্র্যাগ-এন্ড-ড্রপ ডকুমেন্টেশন অনুসরণ করুন এবং এই ChromeOS ব্লগ পোস্টটি দেখুন।

ChromeOS এর জন্য বিশেষ বিবেচনা

  • ChromeOS Files অ্যাপ থেকে ফাইলগুলি পরিচালনা করতে, MIME টাইপ application/x-arc-uri-list খুঁজুন
  • অ্যাপের বাইরে থেকে টেনে আনা আইটেমগুলি অ্যাক্সেস করতে requestDragAndDropPermissions ব্যবহার করে অনুমতি নিতে ভুলবেন না।
  • অন্য অ্যাপ্লিকেশনে টেনে আনার জন্য একটি আইটেমের View.DRAG_FLAG_GLOBAL পতাকা থাকা আবশ্যক।

মাল্টি-সিলেক্ট সাপোর্ট

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

মাউস এবং পয়েন্টার সহ ব্যান্ড মাল্টি-সিলেক্টের একটি উদাহরণ।

উন্নত পয়েন্টার সমর্থন

যেসব অ্যাপ মাউস এবং টাচপ্যাড ইনপুটের উন্নত হ্যান্ডলিং করে তাদের View.onGenericMotionEvent() এর জন্য অ্যান্ড্রয়েড ডকুমেন্টেশন অনুসরণ করা উচিত এবং SOURCE_MOUSE এবং SOURCE_TOUCHSCREEN মধ্যে পার্থক্য করতে MotionEvent.getSource() ব্যবহার করা উচিত।

প্রয়োজনীয় আচরণ বাস্তবায়নের জন্য MotionEvent পরীক্ষা করুন:

  • নড়াচড়া ACTION_HOVER_MOVE ইভেন্ট তৈরি করে
  • বোতামগুলি ACTION_BUTTON_PRESS এবং ACTION_BUTTON_RELEASE ইভেন্ট তৈরি করে। আপনি getButtonState() ব্যবহার করে সমস্ত মাউস/ট্র্যাকপ্যাড বোতামের বর্তমান অবস্থাও পরীক্ষা করতে পারেন।
  • মাউস হুইল স্ক্রলিং ACTION_SCROLL ইভেন্ট তৈরি করে

স্টাইলাস

অনেক Chromebook-এ স্টাইলাস থাকে এবং অ্যান্ড্রয়েড অ্যাপগুলি টাচস্ক্রিন ইনপুট হিসেবে এটি ব্যবহার করে। কিছু ডিভাইসে USB বা ব্লুটুথ ড্রয়িং টেবিলও থাকতে পারে, যেমন Wacom Intuos । অ্যান্ড্রয়েড অ্যাপগুলি ব্লুটুথ ইনপুট গ্রহণ করতে পারে, কিন্তু USB ইনপুট দিয়ে কাজ করবে না।

একটি স্টাইলাস ইভেন্ট View.onTouchEvent() অথবা View.onGenericMotionEvent() ব্যবহার করে একটি টাচস্ক্রিন ইভেন্ট হিসেবে রিপোর্ট করা হয় এবং এতে SOURCE_STYLUS ধরণের একটি MotionEvent.getSource() থাকে। MotionEvent অতিরিক্ত ডেটাও থাকবে:

  • MotionEvent.getToolType() পৃষ্ঠের সাথে যোগাযোগ করা টুলের উপর নির্ভর করে TOOL_TYPE_FINGER , TOOL_TYPE_STYLUS , অথবা TOOL_TYPE_ERASER প্রদান করবে।
  • MotionEvent.getPressure() স্টাইলাস পেনে প্রয়োগ করা ভৌত চাপের রিপোর্ট করবে, যদি এটি সমর্থিত হয়
  • MotionEvent.getAxisValue() এর সাথে MotionEvent.AXIS_TILT এবং MotionEvent.AXIS_ORIENTATION ব্যবহার করা যেতে পারে, যদি এটি সমর্থিত হয়, তাহলে স্টাইলাসের ভৌত কাত এবং ওরিয়েন্টেশন পড়তে ব্যবহার করা যেতে পারে।

ঐতিহাসিক বিষয়

অ্যান্ড্রয়েড ইভেন্টগুলি ব্যাচ করে ইনপুট করে এবং প্রতি ফ্রেমে একবার করে ডেলিভারি করে। একটি স্টাইলাস পেন ডিসপ্লের চেয়ে অনেক বেশি ফ্রিকোয়েন্সিতে ইভেন্টগুলি রিপোর্ট করতে পারে। অঙ্কন অ্যাপ তৈরি করার সময়, getHistorical API ব্যবহার করে সাম্প্রতিক অতীতের ইভেন্টগুলি পরীক্ষা করা গুরুত্বপূর্ণ:

  • MotionEvent.getHistoricalX()
  • MotionEvent.getHistoricalY()
  • MotionEvent.getHistoricalPressure()
  • MotionEvent.getHistoricalAxisValue()

হাতের তালু প্রত্যাখ্যান

ChromeOS ব্যবহারকারীর হাতের তালু টাচস্ক্রিনে থাকা অবস্থায় শনাক্ত করার চেষ্টা করে। তবে, এটি সবসময় সম্ভব হয় না। কখনও কখনও OS এটিকে হাতের তালু হিসেবে শনাক্ত করার আগেই অ্যাপে কোনও স্পর্শ ইভেন্ট রিপোর্ট করা হতে পারে। সেক্ষেত্রে, ACTION_CANCEL ইভেন্ট রিপোর্ট করে স্পর্শ বাতিল করা হবে।

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

দ্রষ্টব্য: অঙ্কন এবং লেখার অ্যাপগুলিতে বহিরাগত হাতের তালু এবং আঙুলের ঘটনা হ্রাস করার একটি উপায় হল এমন একটি UI সেটিং প্রদান করা যা স্পর্শ ব্যবহার করে অঙ্কন অক্ষম করে এবং এই মোডে থাকাকালীন অঙ্কনের জন্য শুধুমাত্র স্টাইলাস ইভেন্ট ব্যবহার করে।

নোট নেওয়ার অ্যাপ

ChromeOS-এর একটি বিশেষ উদ্দেশ্য হল ব্যবহারকারীদের কাছে নিবন্ধিত নোট-টেকিং অ্যাপগুলি তুলে ধরা। একটি অ্যাপকে নোট-টেকিং অ্যাপ হিসেবে নিবন্ধিত করতে, Android ম্যানিফেস্টে নিম্নলিখিতগুলি যোগ করুন:

<intent-filter>
    <action android:name="org.chromium.arc.intent.action.CREATE_NOTE" />
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>

যখন কোনও অ্যাপ নিবন্ধিত হয়, তখন ব্যবহারকারী এটিকে ডিফল্ট নোট-টেকিং অ্যাপ হিসেবে নির্বাচন করতে পারেন। যখন কোনও নতুন নোটের অনুরোধ করা হয়, তখন অ্যাপটিকে স্টাইলাস ইনপুট দেওয়ার জন্য প্রস্তুত একটি খালি নোট তৈরি করতে হবে। যখন ব্যবহারকারী কোনও ছবি (যেমন একটি স্ক্রিনশট বা ডাউনলোড করা ছবি) টীকা করতে চান, তখন অ্যাপটি ClipData দিয়ে চালু হয় যার মধ্যে এক বা একাধিক আইটেম থাকে যার মধ্যে content:// URI থাকে। অ্যাপটিকে এমন একটি নোট তৈরি করতে হবে যা প্রথম সংযুক্ত ছবিটিকে ব্যাকগ্রাউন্ড ইমেজ হিসেবে ব্যবহার করে এবং এমন একটি মোডে প্রবেশ করতে হবে যেখানে ব্যবহারকারী স্টাইলাস দিয়ে ছবি আঁকতে পারবেন।

স্টাইলাস ছাড়াই নোট নেওয়ার উদ্দেশ্য পরীক্ষা করা হচ্ছে

একটি সক্রিয় স্টাইলাস ছাড়াই কোনও অ্যাপ নোট-টেকিং ইন্টেন্টে সঠিকভাবে সাড়া দেয় কিনা তা পরীক্ষা করতে, নোট-টেকিং বিকল্পগুলি প্রদর্শন করতে নিম্নলিখিত পদ্ধতিটি ব্যবহার করুন:

  1. ডেভেলপার মোডে স্যুইচ করুন এবং ডিভাইসটিকে লেখার যোগ্য করে তুলুন
  2. টার্মিনাল খুলতে ctrl + alt + f2 টিপুন।
  3. sudo vi /etc/chrome_dev.conf কমান্ডটি চালান।
  4. ফাইলের শেষে একটি নতুন লাইনে সম্পাদনা এবং --ash-enable-palette যোগ করতে i টিপুন।
  5. Esc টিপে এবং তারপর : , w , q লিখে Enter টিপে সংরক্ষণ করুন।
  6. নিয়মিত ChromeOS UI-তে ফিরে যেতে ctrl + alt + f1 টিপুন।

এখন শেলফে একটি স্টাইলাস মেনু থাকা উচিত:

  • শেল্ফের স্টাইলাস বোতামটি আলতো চাপুন এবং নতুন নোট নির্বাচন করুন। এটি একটি ফাঁকা অঙ্কন নোট খুলবে।
  • একটি স্ক্রিনশট নিন। শেল্ফ থেকে স্টাইলাস বোতাম > স্ক্রিন ক্যাপচার করুন অথবা একটি ছবি ডাউনলোড করুন নির্বাচন করুন। বিজ্ঞপ্তিতে "ছবিটি টীকা করুন" বিকল্পটি থাকা উচিত। এটি অ্যাপটি টীকা করার জন্য প্রস্তুত ছবি সহ চালু করবে।

গেম কন্ট্রোলার

Chromebook গুলিতে সর্বাধিক চারটি গেম কন্ট্রোলার সাপোর্ট করে। ডেভেলপারদের এগুলি পরিচালনা করার জন্য স্ট্যান্ডার্ড অ্যান্ড্রয়েড গেম কন্ট্রোলার API ব্যবহার করা উচিত।

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

ইনপুট অনুবাদ মোড

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

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

<uses-feature android:name="android.hardware.type.pc"
              android:required="false" />