कटलफ़िश कंट्रोल पैनल

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

कंट्रोल पैनल में डिफ़ॉल्ट बटन की सुविधा होती है, जिससे डिवाइस की सामान्य कार्रवाइयों को सिम्युलेट किया जा सकता है. जैसे, पावर बटन या आवाज़ कम या ज़्यादा करने का बटन और डिवाइस को घुमाना.

पसंद के मुताबिक की जाने वाली कार्रवाइयां

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

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

  1. ऐसी JSON फ़ाइल बनाएं जो आपके डिवाइस की कस्टम कार्रवाइयों के बारे में बताती हो. इस फ़ाइल को अपने मालिकाना हक वाली किसी भी डायरेक्ट्री में रखा जा सकता है. इस फ़ाइल के स्ट्रक्चर के बारे में ADB शेल और ऐक्शन सर्वर सेक्शन में बताया गया है.

  2. अपने JSON कॉन्फ़िगरेशन के लिए prebuilt_etc_host मॉड्यूल बनाएं. पक्का करें कि sub_dir, cvd_custom_action_config के बराबर हो.

    prebuilt_etc_host {
        // Use any name you choose.
        name: "my_custom_action_config.json",
        src: "my_custom_action_config.json",
        // Always use this sub_dir.
        sub_dir: "cvd_custom_action_config",
    }
    
  3. अपने डिवाइस की प्रॉडक्ट फ़ाइल में सूंग कॉन्फ़िगरेशन बिल्ड वैरिएबल सेट करें, ताकि आपकी कस्टम ऐक्शन कॉन्फ़िगरेशन फ़ाइल को शामिल करने के लिए वर्चुअल डिवाइस होस्ट पैकेज को कॉन्फ़िगर किया जा सके.

    # Set these variables exactly as shown here to enable the host package to see
    # your custom config module name.
    SOONG_CONFIG_NAMESPACES += cvd
    SOONG_CONFIG_cvd += custom_action_config
    
    # Set this value to the name of your JSON module.
    SOONG_CONFIG_cvd_custom_action_config := my_custom_action_config.json
    

कस्टम ऐक्शन लागू करने के दो तरीके हैं:

  • ADB शेल आदेश
  • ऐक्शन सर्वर

आपकी JSON कॉन्फ़िगरेशन फ़ाइल, लागू करने के हर तरीके के कई इंस्टेंस तय कर सकती है.

ADB शेल आदेश

एक बटन तय किया जा सकता है, जिसे adb shell निर्देश को लागू करके लागू किया जाता है. उदाहरण के लिए, नीचे दिया गया JSON स्निपेट एक बटन के बारे में बताता है जो किसी वेब पेज को लॉन्च करता है:

{
  "shell_command":"am start -a android.intent.action.VIEW -d https://www.android.com/",
  "button":{
      "command":"web",
      "title":"Web Page",
      "icon_name":"language"
  }
}

ये फ़ील्ड हैं:

  • shell_command: बटन दबाने पर, adb shell में चलाया जाने वाला निर्देश
  • button: नीचे दिए गए सबफ़ील्ड के साथ एक बटन वाला ऑब्जेक्ट:
    • command: इस बटन के लिए कोई यूनीक नाम
    • title: इस बटन के लिए वैकल्पिक लेख का टाइटल
    • icon_name: https://material.io/resources/icons पर मौजूद आइकॉन का नाम

ऐक्शन सर्वर

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

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

यहां दिया गया JSON स्निपेट, एक ऐक्शन सर्वर के बारे में बताता है. यह दो बटन पर होने वाले इवेंट को सुनता है:

{
  "server":"cuttlefish_example_action_server",
  "buttons":[
    {
      "command":"settings",
      "title":"Quick Settings",
      "icon_name":"settings"
    },
    {
      "command":"alert",
      "title":"Do Not Disturb",
      "icon_name":"notifications_paused"
    }
  ]
}

ये फ़ील्ड हैं:

  • server: आपके होस्ट बाइनरी मॉड्यूल का नाम
  • buttons: बटन का कलेक्शन, जिसमें ऊपर दिए गए सबफ़ील्ड हैं

JSON कॉन्फ़िगरेशन को अपडेट करने के बाद, ऐक्शन सर्वर मॉड्यूल के नाम को सूंग कॉन्फ़िगरेशन के बिल्ड वैरिएबल cvd_custom_action_servers में जोड़ें. उदाहरण के लिए:

# Append to this variable exactly as shown here.
SOONG_CONFIG_cvd += custom_action_servers

# Append the name of your action server(s) to this variable.
SOONG_CONFIG_cvd_custom_action_servers += cuttlefish_example_action_server

हर ऐक्शन सर्वर होस्ट बाइनरी को यह तरीका अपनाना होगा:

  1. सॉकेट फ़ाइल डिस्क्रिप्टर नंबर को पहले और आखिरी प्रोग्राम आर्ग्यूमेंट के तौर पर स्वीकार करें.

    यह सॉकेट, launch_cvd ने socketpair का इस्तेमाल करके बनाया है. इसमें डोमेन AF_LOCAL, टाइप SOCK_STREAM, और प्रोटोकॉल 0 है.

  2. लूप में, सॉकेट से 128 बाइट पढ़ने की कोशिश करें. इन बाइट में, बटन दबाने से जुड़े ऐसे इवेंट होते हैं जिन्हें WebRTC क्लाइंट ने command:state फ़ॉर्मैट में भेजा है. command जैसा कि JSON कॉन्फ़िगरेशन में दिया गया है और state बटन दबाने की स्थिति (down या up) है.

  3. कस्टम ऐक्शन को सिम्युलेट करने के लिए, इनकमिंग इवेंट पर कार्रवाई करें.