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

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

कंट्रोल पैनल में डिफ़ॉल्ट बटन होते हैं. इनका इस्तेमाल करके, डिवाइस के सामान्य फ़िज़िकल ऐक्शन को सिम्युलेट किया जा सकता है. जैसे, पावर बटन या वॉल्यूम बटन के साथ-साथ डिवाइस को घुमाना.

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

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

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. अपने डिवाइस के प्रॉडक्ट मेकफ़ाइल में Soong कॉन्फ़िगरेशन बिल्ड वैरिएबल सेट करें, ताकि वर्चुअल डिवाइस होस्ट पैकेज को कॉन्फ़िगर किया जा सके. इससे, आपकी कस्टम ऐक्शन कॉन्फ़िगरेशन फ़ाइल को शामिल किया जा सकेगा.

    # 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 कॉन्फ़िगरेशन को अपडेट करने के बाद, Soong कॉन्फ़िगरेशन बिल्ड वैरिएबल 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. कस्टम ऐक्शन को सिम्युलेट करने के लिए, इनकमिंग इवेंट पर कार्रवाई करें.