इनपुट के साथ काम करने की सुविधा

ChromeOS डिवाइसों पर, कई लोग ऐप्लिकेशन का इस्तेमाल कीबोर्ड, माउस, ट्रैकपैड, स्टाइलस या गेमपैड की मदद से करते हैं. इन इनपुट डिवाइसों का इस्तेमाल Android फ़ोन पर भी किया जाता है. हालांकि, ये ज़्यादा आम नहीं हैं और अक्सर डेवलपर इनकी अनदेखी करते हैं.

जिन डेवलपर को यह चाहिए कि उनका ऐप्लिकेशन ChromeOS और बड़ी स्क्रीन वाले Android डिवाइसों पर अच्छी तरह से काम करे उन्हें यहां दिए गए ऑप्टिमाइज़ेशन पर ध्यान देना चाहिए:

  • कीबोर्ड के बुनियादी फ़ंक्शन को जोड़ें और उनकी जांच करें. जैसे, ऐरो और टैब कुंजियों का इस्तेमाल करके कीबोर्ड नेविगेशन, टेक्स्ट डालने की पुष्टि करने के लिए Enter कुंजी, और मीडिया ऐप्लिकेशन में चलाने/रोकने के लिए Space कुंजी.
  • जहां लागू हो वहां स्टैंडर्ड कीबोर्ड शॉर्टकट जोड़ें. उदाहरण के लिए, अनडू करने के लिए ctrl+z और सेव करने के लिए ctrl+s.
  • माउस के साथ बुनियादी इंटरैक्शन की जांच करें. जैसे, कॉन्टेक्स्ट मेन्यू के लिए राइट-क्लिक करना, कर्सर घुमाने पर आइकॉन में बदलाव होना, और कस्टम व्यू पर माउस व्हील/ट्रैकपैड स्क्रोल इवेंट.
  • ऐप्लिकेशन के हिसाब से इनपुट डिवाइसों की जांच करें. जैसे, ड्रॉइंग ऐप्लिकेशन के लिए स्टाइलस, गेम के लिए गेम कंट्रोलर, और संगीत ऐप्लिकेशन के लिए एमआईडीआई कंट्रोलर.
  • इनपुट के लिए ऐडवांस सुविधाओं का इस्तेमाल करें. इससे डेस्कटॉप एनवायरमेंट में ऐप्लिकेशन को अलग पहचान मिल सकती है: डीजे ऐप्लिकेशन के लिए क्रॉस-फ़ेडर के तौर पर टचपैड, गेम के लिए माउस कैप्चर करने की सुविधा, और जानकार उपयोगकर्ताओं के लिए कीबोर्ड शॉर्टकट की ज़्यादा सुविधाएं.

कीबोर्ड

आपका ऐप्लिकेशन, कीबोर्ड से दिए गए इनपुट पर किस तरह से प्रतिक्रिया देता है, इससे डेस्कटॉप पर बेहतर अनुभव मिलता है. कीबोर्ड से तीन तरह के इनपुट दिए जा सकते हैं: नेविगेशन, कीस्ट्रोक, और शॉर्टकट.

टचस्क्रीन वाले ऐप्लिकेशन में कीबोर्ड से नेविगेट करने की सुविधा बहुत कम लागू की जाती है. हालांकि, जब उपयोगकर्ता कीबोर्ड वाले ऐप्लिकेशन का इस्तेमाल करते हैं, तो उन्हें इस सुविधा की उम्मीद होती है. यह सुविधा, फ़ोन और डेस्कटॉप डिवाइसों पर सुलभता से इस्तेमाल करने की सुविधा पाने वाले लोगों के लिए भी ज़रूरी हो सकती है.

ज़्यादातर ऐप्लिकेशन के लिए, ऐरो बटन और टैब नेविगेशन की ज़रूरत होती है. इसे ज़्यादातर Android फ़्रेमवर्क अपने-आप मैनेज करता है. उदाहरण के लिए, Button का व्यू डिफ़ॉल्ट रूप से फ़ोकस किया जा सकता है. साथ ही, कीबोर्ड नेविगेशन को आम तौर पर किसी अतिरिक्त कोड के बिना काम करना चाहिए. डिफ़ॉल्ट रूप से फ़ोकस नहीं किए जा सकने वाले व्यू के लिए, कीबोर्ड नेविगेशन की सुविधा चालू करने के लिए, डेवलपर को उन्हें फ़ोकस किए जा सकने वाले व्यू के तौर पर मार्क करना चाहिए. इसे प्रोग्राम के हिसाब से या एक्सएमएल में इस तरह से किया जा सकता है. ज़्यादा जानकारी के लिए, फ़ोकस हैंडलिंग का दस्तावेज़ देखें.

yourView.isFocusable = true

इसके अलावा, लेआउट फ़ाइल में focusable एट्रिब्यूट सेट किया जा सकता है:

android:focusable="true"

फ़ोकस चालू होने के बाद, Android फ़्रेमवर्क, फ़ोकस किए जा सकने वाले सभी व्यू के लिए, उनकी पोज़िशन के आधार पर नेविगेशनल मैपिंग बनाएगा. आम तौर पर, यह सुविधा ठीक से काम करती है और इसके लिए कुछ और करने की ज़रूरत नहीं होती. जब किसी ऐप्लिकेशन की ज़रूरतों के हिसाब से डिफ़ॉल्ट मैपिंग सही नहीं होती है, तो इसे इस तरह से बदला जा सकता है:

// 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, तो ChromeOS पर ऐप्लिकेशन को उम्मीद के मुताबिक काम करना चाहिए. इसके लिए, डेवलपर को कोई अतिरिक्त काम नहीं करना चाहिए. जिन कीस्ट्रोक का अनुमान फ़्रेमवर्क नहीं लगा सकता उनके लिए, ऐप्लिकेशन को खुद ही व्यवहार को मैनेज करना होगा. यह खास तौर पर कस्टम व्यू वाले ऐप्लिकेशन के लिए ज़रूरी है.

उदाहरण के लिए, चैट ऐप्लिकेशन में मैसेज भेजने के लिए Enter बटन का इस्तेमाल किया जाता है. मीडिया ऐप्लिकेशन में वीडियो चलाने/रोकने के लिए Space बटन का इस्तेमाल किया जाता है. गेम में मूवमेंट को कंट्रोल करने के लिए, 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 में. ऐसा इसलिए, ताकि भेजने की सुविधा सिर्फ़ तब लागू हो, जब उपयोगकर्ता चैट बॉक्स में टाइप कर रहा हो.

कीबोर्ड सपोर्ट जोड़ने के लिए, Android के कीबोर्ड हैंडलिंग से जुड़े दस्तावेज़ में दिया गया तरीका अपनाएं.

शॉर्टकट

डेस्कटॉप एनवायरमेंट में, ctrl, alt, और shift पर आधारित सामान्य शॉर्टकट काम करते हैं. अगर कोई ऐप्लिकेशन इन सुविधाओं को लागू नहीं करता है, तो उपयोगकर्ताओं को खराब अनुभव मिल सकता है. एडवांस उपयोगकर्ताओं को, ऐप्लिकेशन से जुड़ी उन कार्रवाइयों के लिए भी शॉर्टकट पसंद आते हैं जिन्हें वे अक्सर करते हैं. शॉर्टकट की मदद से, किसी ऐप्लिकेशन को आसानी से इस्तेमाल किया जा सकता है. साथ ही, इससे ऐप्लिकेशन को उन ऐप्लिकेशन से अलग किया जा सकता है जिनमें शॉर्टकट नहीं होते.

कुछ सामान्य शॉर्टकट में सेव करना (ctrl+s), पहले जैसा करना (ctrl+z), और फिर से करना (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)
    }
  }
}

इसी तरह, onKeyUp में शॉर्टकट लागू करने के लिए, KeyEvent.isCtrlPressed(), KeyEvent.isShiftPressed() या KeyEvent.isAltPressed() की जांच करें. अगर मेटा-बिहेवियर, शॉर्टकट के बजाय ऐप्लिकेशन के बिहेवियर में ज़्यादा बदलाव करता है, तो इसे बनाए रखना आसान हो सकता है. उदाहरण के लिए, जब 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, ज़्यादातर माउस और ट्रैकपैड इवेंट को अपने-आप मैनेज करता है, ताकि वे Android फ़ोन पर टच इवेंट की तरह काम कर सकें. इसमें दो उंगलियों से टचपैड/माउस व्हील को स्क्रोल करना शामिल है. आम तौर पर, ज़्यादातर ऐप्लिकेशन को डेस्कटॉप पर होने वाले सिर्फ़ तीन इवेंट हैंडल करने होते हैं: राइट-क्लिक, होवर करना, और ड्रैग-एंड-ड्रॉप.

राइट-क्लिक करना

ऐसी सभी कार्रवाइयों के लिए, राइट-क्लिक इवेंट का इस्तेमाल किया जाना चाहिए जिनकी वजह से ऐप्लिकेशन में कॉन्टेक्स्ट मेन्यू दिखता है. जैसे, सूची में मौजूद किसी आइटम को देर तक दबाकर रखना. राइट क्लिक इवेंट को हैंडल करने के लिए, ऐप्लिकेशन को 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 डिवाइसों के साथ-साथ, स्प्लिट-स्क्रीन मोड में टैबलेट, फ़ोन, और फ़ोल्ड किए जा सकने वाले डिवाइसों के लिए भी सही है.

डेवलपर को यह देखना चाहिए कि क्या उपयोगकर्ता, आइटम को उनके ऐप्लिकेशन में खींचकर ला सकते हैं. कुछ सामान्य उदाहरणों में ये शामिल हैं: फ़ोटो एडिटर को फ़ोटो मिलनी चाहिए, ऑडियो प्लेयर को ऑडियो फ़ाइलें मिलनी चाहिए, और ड्रॉइंग प्रोग्राम को फ़ोटो मिलनी चाहिए.

ड्रैग-एंड-ड्रॉप की सुविधा जोड़ने के लिए, Android का ड्रैग-एंड-ड्रॉप से जुड़ा दस्तावेज़ पढ़ें. साथ ही, यह ChromeOS ब्लॉग पोस्ट देखें.

ChromeOS के लिए खास बातें

  • ChromeOS के Files ऐप्लिकेशन से फ़ाइलों को मैनेज करने के लिए, MIME टाइप application/x-arc-uri-list ढूंढें
  • ऐप्लिकेशन से बाहर से ड्रैग किए गए आइटम को ऐक्सेस करने के लिए, requestDragAndDropPermissions का इस्तेमाल करके अनुमति मांगना न भूलें
  • किसी आइटम को खींचकर दूसरे ऐप्लिकेशन में छोड़ने के लिए, उस पर View.DRAG_FLAG_GLOBAL फ़्लैग लगा होना चाहिए

एक से ज़्यादा विकल्प चुनने की सुविधा

अगर आपके ऐप्लिकेशन में सूचियां या ग्रिड हैं, तो सोचें कि क्या उपयोगकर्ताओं को एक साथ कई आइटम चुनने की सुविधा से फ़ायदा होगा. माउस और ट्रैकपैड की मदद से एक साथ कई आइटम चुनने की अच्छी क्वालिटी वाली सुविधा में, अक्सर बैंड सिलेक्शन जैसी सुविधाएं शामिल होती हैं. इसे खुद से लागू करना मुश्किल हो सकता है. हालांकि, Recyclerview Selection लाइब्रेरी का इस्तेमाल किया जा सकता है.

माउस और पॉइंटर की मदद से, बैंड को एक से ज़्यादा बार चुनने का उदाहरण.

पॉइंटर के लिए ऐडवांस सपोर्ट

माउस और टचपैड के इनपुट को बेहतर तरीके से हैंडल करने वाले ऐप्लिकेशन को, View.onGenericMotionEvent() के लिए Android के दस्तावेज़ का पालन करना चाहिए. साथ ही, SOURCE_MOUSE और SOURCE_TOUCHSCREEN के बीच अंतर करने के लिए, MotionEvent.getSource() का इस्तेमाल करना चाहिए.

ज़रूरत के मुताबिक व्यवहार लागू करने के लिए, MotionEvent की जांच करें:

  • मूवमेंट से ACTION_HOVER_MOVE इवेंट जनरेट होते हैं
  • बटन, ACTION_BUTTON_PRESS और ACTION_BUTTON_RELEASE इवेंट जनरेट करते हैं. getButtonState() का इस्तेमाल करके, माउस/ट्रैकपैड के सभी बटन की मौजूदा स्थिति भी देखी जा सकती है.
  • माउस व्हील से स्क्रोल करने पर ACTION_SCROLL इवेंट जनरेट होते हैं

स्टाइलस

कई Chromebook में स्टाइलस होता है. Android ऐप्लिकेशन, इसे टचस्क्रीन इनपुट के तौर पर इस्तेमाल करते हैं. कुछ डिवाइसों में, यूएसबी या ब्लूटूथ से कनेक्ट होने वाला ड्राइंग टेबल भी हो सकता है. जैसे, Wacom Intuos. Android ऐप्लिकेशन, ब्लूटूथ इनपुट पा सकते हैं. हालांकि, ये यूएसबी इनपुट के साथ काम नहीं करेंगे.

स्टाइलस इवेंट को 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 शामिल हैं. इनका इस्तेमाल, स्टाइलस के झुकाव और ओरिएंटेशन को पढ़ने के लिए किया जा सकता है. हालांकि, इसके लिए ज़रूरी है कि डिवाइस में यह सुविधा काम करती हो

पिछले पॉइंट

Android, इनपुट इवेंट को बैच करता है और उन्हें हर फ़्रेम में एक बार डिलीवर करता है. स्टाइलस पेन, डिसप्ले की तुलना में ज़्यादा फ़्रीक्वेंसी पर इवेंट रिपोर्ट कर सकता है. ड्राइंग ऐप्लिकेशन बनाते समय, यह देखना ज़रूरी है कि हाल ही में कौनसे इवेंट हुए हैं. इसके लिए, getHistorical एपीआई का इस्तेमाल करें:

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

हथेली को खारिज करना

ChromeOS यह पता लगाने की कोशिश करता है कि उपयोगकर्ता की हथेली टचस्क्रीन पर कब रखी गई है. हालांकि, ऐसा हमेशा नहीं हो पाता. कभी-कभी, ओएस के हथेली को पहचानने से पहले ही, टच इवेंट को ऐप्लिकेशन को रिपोर्ट किया जा सकता है. ऐसे में, ACTION_CANCEL इवेंट की रिपोर्ट करके टच रद्द कर दिए जाएंगे.

इस इवेंट से ऐप्लिकेशन को पता चलता है कि कुछ टच अमान्य हैं. इसलिए, उसे उन टच की वजह से हुए सभी इंटरैक्शन को पहले जैसा कर देना चाहिए. उदाहरण के लिए, कोई ड्राइंग ऐप्लिकेशन, नई लाइनें मिलने के तुरंत बाद उन्हें कुछ समय के लिए बना सकता है, ताकि कम से कम लेटेन्सी हो. हालांकि, वह उन्हें कैनवस पर हमेशा के लिए तब ही सेव करेगा, जब टच सीरीज़ पूरी हो जाएगी. अगर इस दौरान टच इवेंट रद्द कर दिए जाते हैं, तो कुछ समय के लिए बनाई गई लाइनों को मिटाया जा सकता है.

ध्यान दें: ड्रॉइंग और लिखने वाले ऐप्लिकेशन में, हथेली और उंगली के अनचाहे इवेंट को कम करने का एक तरीका यह है कि यूज़र इंटरफ़ेस (यूआई) सेटिंग उपलब्ध कराई जाए. इससे टच का इस्तेमाल करके ड्रॉइंग करने की सुविधा बंद हो जाती है. साथ ही, इस मोड में सिर्फ़ स्टाइलस इवेंट का इस्तेमाल करके ड्रॉइंग की जा सकती है.

नोट लेने वाले ऐप्लिकेशन

ChromeOS में एक खास इंटेंट होता है. इससे, नोट लेने की सुविधा देने वाले रजिस्टर किए गए ऐप्लिकेशन, उपयोगकर्ताओं को दिखते हैं. किसी ऐप्लिकेशन को नोट लेने वाले ऐप्लिकेशन के तौर पर रजिस्टर करने के लिए, Android मेनिफ़ेस्ट में यह जानकारी जोड़ें:

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

जब कोई ऐप्लिकेशन रजिस्टर हो जाता है, तो उपयोगकर्ता उसे नोट लेने वाले डिफ़ॉल्ट ऐप्लिकेशन के तौर पर चुन सकता है. जब नए नोट का अनुरोध किया जाता है, तो ऐप्लिकेशन को एक खाली नोट बनाना चाहिए, ताकि स्टाइलस से इनपुट दिया जा सके. जब उपयोगकर्ता को किसी इमेज (जैसे, स्क्रीनशॉट या डाउनलोड की गई इमेज) पर एनोटेशन जोड़ना होता है, तो ऐप्लिकेशन ClipData के साथ लॉन्च होता है. इसमें ClipData यूआरआई वाले एक या उससे ज़्यादा आइटम होते हैं.content:// ऐप्लिकेशन को एक नोट बनाना चाहिए, जिसमें पहली अटैच की गई इमेज को बैकग्राउंड इमेज के तौर पर इस्तेमाल किया गया हो. साथ ही, उसे ऐसे मोड में डालना चाहिए जहां उपयोगकर्ता स्टाइलस से उस पर ड्रॉ कर सके.

स्टाइलस के बिना नोट लेने के इंटेंट की टेस्टिंग

यह जांच करने के लिए कि कोई ऐप्लिकेशन, स्टाइलस के बिना नोट लेने के इरादे से किए गए अनुरोधों का सही तरीके से जवाब देता है या नहीं, नोट लेने के विकल्प दिखाने के लिए इस तरीके का इस्तेमाल करें:

  1. डेवलपर मोड पर स्विच करना और डिवाइस को लिखने लायक बनाना
  2. टर्मिनल खोलने के लिए, ctrl+alt+f2 दबाएं
  3. sudo vi /etc/chrome_dev.conf कमांड चलाएं
  4. फ़ाइल के आखिर में नई लाइन में --ash-enable-palette जोड़ने के लिए, i दबाएं
  5. Esc दबाकर सेव करें. इसके बाद, :, w, q टाइप करें और Enter दबाएं
  6. ChromeOS के सामान्य यूज़र इंटरफ़ेस (यूआई) पर वापस जाने के लिए, ctrl+alt+f1 दबाएं

अब शेल्फ़ में एक स्टाइलस मेन्यू होना चाहिए:

  • शेल्फ़ में मौजूद स्टाइलस बटन पर टैप करें और नया नोट चुनें. इससे एक खाली ड्रॉइंग नोट खुलेगा
  • कोई स्क्रीनशॉट लें. शेल्फ़ से स्टाइलस बटन > स्क्रीन कैप्चर करें चुनें या कोई इमेज डाउनलोड करें. सूचना में, "इमेज में एनोटेशन जोड़ें" का विकल्प होना चाहिए. इससे ऐप्लिकेशन लॉन्च हो जाएगा और इमेज पर एनोटेशन करने की सुविधा उपलब्ध हो जाएगी.

गेम कंट्रोलर

Chromebook पर, ज़्यादा से ज़्यादा चार गेम कंट्रोलर इस्तेमाल किए जा सकते हैं. डेवलपर को इन कंट्रोलर को मैनेज करने के लिए, Android के स्टैंडर्ड गेम कंट्रोलर एपीआई का इस्तेमाल करना चाहिए.

बटन को सामान्य मैपिंग के हिसाब से सामान्य वैल्यू पर मैप किया जाता है. हालांकि, सभी गेम कंट्रोलर बनाने वाली कंपनियां, मैपिंग के एक जैसे नियमों का पालन नहीं करती हैं. अगर उपयोगकर्ताओं को कंट्रोलर की अलग-अलग लोकप्रिय मैपिंग चुनने की अनुमति दी जाती है, तो उन्हें बेहतर अनुभव मिल सकता है.

इनपुट ट्रांसलेशन मोड

ChromeOS में, इनपुट ट्रांसलेशन मोड डिफ़ॉल्ट रूप से चालू होता है. ज़्यादातर Android ऐप्लिकेशन के लिए, यह मोड डेस्कटॉप एनवायरमेंट में ऐप्लिकेशन को उम्मीद के मुताबिक काम करने में मदद करता है. इसके कुछ उदाहरणों में, टचपैड पर दो उंगलियों से स्क्रोल करने की सुविधा अपने-आप चालू होना, माउस व्हील से स्क्रोल करना, और डिसप्ले के रॉ कोऑर्डिनेट को विंडो कोऑर्डिनेट पर मैप करना शामिल है. आम तौर पर, ऐप्लिकेशन डेवलपर को इनमें से किसी भी व्यवहार को खुद लागू करने की ज़रूरत नहीं होती.

अगर कोई ऐप्लिकेशन, इनपुट के लिए कस्टम व्यवहार लागू करता है. उदाहरण के लिए, दो उंगलियों से टचपैड को पिंच करने की कस्टम कार्रवाई तय करना. इसके अलावा, अगर इनपुट ट्रांसलेशन से ऐप्लिकेशन को उम्मीद के मुताबिक इनपुट इवेंट नहीं मिलते हैं, तो Android मेनिफ़ेस्ट में यह टैग जोड़कर, इनपुट ट्रांसलेशन मोड को बंद किया जा सकता है:

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