खास जानकारी

कार सेटिंग्स ( packages/apps/Car/Settings ) विशेष रूप से एंड्रॉइड ऑटोमोटिव ओएस (एएओएस) के लिए प्रदान की जाती है। कार सेटिंग्स फ़ोन सेटिंग्स ( packages/apps/Settings ) से भिन्न होती हैं। जबकि कार सेटिंग्स में कुछ परिचित फोन सेटिंग्स शामिल हैं, कार सेटिंग्स एक कार-इफाइड विज़ुअल यूजर इंटरफेस, ड्राइवर व्याकुलता अनुकूलन और OEM के लिए कई अनुकूलन प्रवेश बिंदु प्रदान करती है।

नीचे दिए गए कार सेटिंग्स के अवलोकन के अलावा, कार सेटिंग्स के बारे में अधिक जानने के लिए इन संबंधित विषयों को देखें:

वास्तुकला और दिशानिर्देश

कार सेटिंग्स में अधिकांश पृष्ठ टुकड़ों की एक श्रृंखला के रूप में कार्यान्वित किए जाते हैं जो सेटिंग्सफ्रैगमेंट का विस्तार करते हैं, प्रत्येक की अपनी गतिविधि CarSettingActivities में परिभाषित होती है। ये स्थिर गतिविधियाँ BaseCarSettingsActivity से विस्तारित हैं। हालांकि इस नियम के कुछ अपवाद हैं, जैसे कि SettingsFragment के बजाय बेसफ्रैगमेंट का विस्तार करने वाले कुछ विशेष टुकड़े और कारसेटिंगएक्टिविटीज के बाहर रहने वाली कुछ गतिविधियां, जिनमें से सभी को अपवाद के रूप में माना जाना चाहिए (पालन करने के लिए पैटर्न के रूप में नहीं)।

स्थैतिक प्राथमिकताएँ

XML में Preference या CarUiPreference टैग का उपयोग करके एक स्थिर प्राथमिकता को परिभाषित किया गया है। SettingsFragment कार्यान्वयन getPreferenceScreenResId() विधि का उपयोग यह परिभाषित करने के लिए करता है कि किस XML फ़ाइल में प्रदर्शित करने के लिए प्राथमिकताओं की स्थिर सूची है।

गतिशील प्राथमिकताएँ

गतिशील प्राथमिकताएँ PreferenceGroup टैग या PreferenceGroup के कार्यान्वयन का उपयोग करती हैं।

कारसेटिंग्स ऐप के भीतर, गतिशील प्राथमिकताएं प्राथमिकताओं के एक सामान्य सेट का प्रतिनिधित्व करती हैं जो उपयोगकर्ता को कारसेटिंग्स के भीतर अतिरिक्त पृष्ठों पर निर्देशित करती हैं, लेकिन जिन्हें एक्सएमएल के बजाय वरीयता नियंत्रक के माध्यम से जोड़ा गया है। एक उदाहरण भाषा और इनपुट प्राथमिकता के अंतर्गत कीबोर्ड प्राथमिकता प्रबंधित करें है जो इन इनपुट विधियों की अनुमति है या नहीं, इसके आधार पर प्राथमिकता पृष्ठ पर इनपुट विधियों को गतिशील रूप से जोड़ता है।

एक्शन बार

प्रत्येक सेटिंग स्क्रीन के शीर्ष पर एक एक्शन बार होता है, जिसमें एक "बैक" नेविगेशन, एक स्क्रीन शीर्षक और पूरक एक्शन विजेट (उदाहरण के लिए, बटन और स्विच) हो सकते हैं। ये एक्शन बार एंड्रॉइड द्वारा प्रदान किए गए एक्शनबार के समान हैं, लेकिन वास्तव में कस्टम व्यू हैं। एंड्रॉइड 11 और इसके बाद के संस्करण में, यह टूलबार चेसिस बेस लेआउट में शामिल है, जिसमें टूलबार के लिए दृश्य और बाकी ऐप सामग्री के लिए एक फ्रेमलेआउट शामिल है।

अनुपूरक कार्रवाई विजेट MenuItem वर्ग हैं और इन्हें संबंधित SettingsFragment या BaseFragment के onCreate में बनाया जाना चाहिए। दृश्यता, स्थिति इत्यादि जैसे गुणों को SettingsFragment के व्यावसायिक तर्क में सेटर्स द्वारा नियंत्रित किया जाना चाहिए।

// ExampleSettingsFragment.java
public class ExampleSettingsFragment extends SettingsFragment {

    @Override
    protected List<MenuItem> getToolbarMenuItems() {
        return Collections.singletonList(mClearConfirmButton);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mButton = new MenuItem.Builder(getContext())
                .setTitle(R.string.text)
                .setOnClickListener(mOnClickListener)
                .setUxRestrictions(CarUxRestrictions.UX_RESTRICTIONS_NO_SETUP)
                .build();
    }

    private void updateState() {
        button.setVisible(false);
    }
}

एक्शन बार कार सेटिंग्स में डिस्ट्रैक्शन ऑप्टिमाइज़ेशन के समर्थन के साथ आते हैं। निर्माण पर MenuItem.Builder में UXRestrictions सेट करें।

वरीयता नियंत्रक

प्रत्येक सेटिंग पृष्ठ में कई विभिन्न प्राथमिकताएँ हो सकती हैं।

ये घटक कैसे संबंधित हैं, इसके लिए निम्न छवि देखें:

कारसेटिंग्स घटक

चित्र 1. कारसेटिंग्स घटक

PreferenceController एक जीवनचक्र-जागरूक घटक है जो विशिष्ट प्राथमिकताओं से संबंधित व्यावसायिक तर्क को समाहित करने में मदद करता है। PreferenceControllers केवल XML के माध्यम से प्रासंगिक प्राथमिकता से जोड़ा जा सकता है।

// example_settings_fragment.xml
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:settings="http://schemas.android.com/apk/res-auto"
    android:title="@string/example_settings_title">
  <Preference
    android:key="@string/pk_example_preference_key"
    android:title="@string/example_preference_title"
    settings:controller="com.android.car.settings.example.ExamplePreferenceController"/>
</PreferenceScreen>

जावा कोड में न्यूनतम परिवर्तनों के साथ सेटिंग्स पदानुक्रम को संशोधित करना आसान बनाने के लिए कार सेटिंग्स स्पष्ट रूप से कोड के माध्यम से PreferenceController के निर्माण को रोकती है।

यह संभव है कि PreferenceController सही ढंग से संचालित करने के लिए कुछ गतिशील डेटा की आवश्यकता हो। उदाहरण के लिए, एक PreferenceController जो किसी ऐप के लिए नोटिफिकेशन बंद कर देता है, उसे यह जानना होगा कि किस ऐप पर कार्रवाई करनी है। चूँकि PreferenceControllers हमेशा XML में परिभाषित होते हैं, इसलिए अतिरिक्त कंस्ट्रक्टर तर्क प्रदान करने का कोई तरीका नहीं है। इसके बजाय, ये अतिरिक्त मान PreferenceController पर सार्वजनिक सेटर्स के माध्यम से प्रदान किए जाते हैं और SettingsFragment से use(...) विधि का उपयोग करके सेट किए जाते हैं।

// ExamplePreferenceController.java
public class ExamplePreferenceContorller extends PreferenceController<Preference> {

  private ExampleArg mExampleArg;

  public ExamplePreferenceController(...) {
    ...
  }

  public void setExampleArg(ExampleArg exampleArg) {
    mExampleArg = exampleArg;
  }
}

// ExampleSettingsFragment.java
public class ExampleSettingsFragment extends SettingsFragment {

  @Override
  @XmlRes
  protected int getPreferenceScreenResId() {
    Return R.xml.example_settings_fragment;
  }

  @Override
  public void onAttach(Context context) {
    ExampleArg arg = (ExampleArg) getArguments().getSerializeable(ARG_KEY);
    ExamplePreferenceController controller =
        use(ExamplePreferenceController.class, R.string.pk_example_preference_key);
    controller.setExampleArg(arg);
  }
}

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

  • use(...) का उपयोग कम से कम करें।
  • प्रत्येक कॉल टू use(...) फ़्रैगमेंट में एक ही स्थान पर रखने का प्रयास करें (उदाहरण के लिए, onAttach() विधि में)।

इरादा संभालना

कार सेटिंग्स ऐप द्वारा संभाले जाने वाले सभी इरादे मेनिफेस्ट फ़ाइल में परिभाषित किए गए हैं। इरादों को आम तौर पर अधिकांश मानक एंड्रॉइड ऐप्स की तरह परिभाषित और प्रबंधित किया जाता है, जिसमें मैनिफ़ेस्ट में परिभाषित सभी गतिविधियों और इरादे फ़िल्टर होते हैं।

मूल खंड बदलें

यदि वांछित है, तो निकास आइकन को config_show_settings_root_exit_icon का उपयोग करके प्रदर्शित या छिपाया जा सकता है।

थीम को अनुकूलित करें

अन्य विशेषताओं और संसाधनों को अनुकूलित करें

कार सेटिंग्स ऐप मुख्य रूप से CarSettingTheme का उपयोग करता है, जो Theme.CarUi का विस्तार है। इस थीम का उपयोग सिस्टम में स्थिरता सुनिश्चित करने के लिए सिस्टम ऐप्स के स्वरूप और अनुभव को मानकीकृत करने के लिए किया जाता है।

प्राथमिकताएँ अनुकूलित करें

प्राथमिकताओं को अनुकूलित करना इन अतिरिक्त स्थानों तक फैला हुआ है:

  • कुछ आधार वरीयता वर्गों का लेआउट car_preference में परिभाषित किया गया है और कार बिल्ड के लिए ओवरलेड किया गया है । आधार वरीयता वर्गों के लिए किसी भी अनुकूलन लेआउट को यहां बदला जा सकता है।
  • कार सेटिंग्स मुख्य रूप से common पैकेज में परिभाषित कुछ कस्टम प्राथमिकताओं का उपयोग करती है। इन्हें आधार वरीयता वर्गों से अलग कार सेटिंग्स मॉड्यूल के भीतर मढ़ा जाना चाहिए।