গাড়ির সেটিংস যোগ করা

গাড়ির সেটিংসের বেশিরভাগ পৃষ্ঠা SettingsFragment-এর এক্সটেনশন হিসেবে ফ্র্যাগমেন্টের একটি সিরিজ হিসেবে প্রয়োগ করা হয়, যার প্রত্যেকটির নিজস্ব অ্যাক্টিভিটি CarSettingActivities-তে সংজ্ঞায়িত করা থাকে। এইসব স্ট্যাটিক অ্যাক্টিভিটি BaseCarSettingsActivity থেকে এক্সটেন্ড করা হয়েছে। এইসব সেটিংস ছাড়াও, CarSettings-এ দেখানোর জন্য আপনি অন্যান্য সিস্টেম অ্যাপ থেকে পছন্দসই বিকল্প ইনজেক্ট করতে পারেন।

গাড়ির সেটিংসে নতুন পছন্দ যোগ করা

নতুন সেটিং যোগ করতে:

  1. XML ফাইল নির্ধারণ করুন:
    1. সব পছন্দ যেন android:key-এর মাধ্যমে সংজ্ঞায়িত করা হয় তা নিশ্চিত করুন। preference_keys.xml-এ কী-এর তালিকা মেইনটেন করা হয়। Preferences কী অনন্য হতে হবে।
    2. সার্চ ইন্ডেক্সিংয়ের উদ্দেশ্যে, পছন্দের স্ক্রিনেও একটি নির্দিষ্ট android:key থাকতে হবে। preference_screen_keys.xml-এ পছন্দের স্ক্রিন কী-এর তালিকা মেইনটেন করা হয়। Preference স্ক্রিন কীগুলিও অনন্য হতে হবে।
    3. পছন্দ শুধুমাত্র স্ট্যাটিক তথ্য দেখালে (যেমন, কোনও বিশেষ ব্যবসায়িক লজিক নেই), পছন্দ কন্ট্রোলারকে com.android.car.settings.common.DefaultRestrictionsPreferenceController হিসেবে সেট করুন।
    4. পছন্দ যদি বিজনেস লজিক চায়, তাহলে নতুন পছন্দ কন্ট্রোলারের নাম দিয়ে পছন্দ কন্ট্রোলার সেট করুন।
  2. (প্রয়োজন হলে) উপযুক্ত প্যাকেজে পছন্দ কন্ট্রোলার তৈরি করুন, যা PreferenceController-এর এক্সটেনশন। প্রয়োজন হলে Javadoc দেখুন।
  3. getPreferenceScreenResId ধাপ ১-এ উল্লেখ করা XML ফাইল রিটার্ন করে এমন একটি ফ্র্যাগমেন্ট তৈরি করুন।
  4. CarSettingActivities-এ এমন একটি অ্যাক্টিভিটি তৈরি করুন যা এক্সটেন্ড করে BaseCarSettingsActivity এবং তারপর getInitialFragment() প্রয়োগ করুন, ধাপ ৩-এ সংজ্ঞায়িত ফ্র্যাগমেন্ট রিটার্ন করুন।
  5. ধাপ ৪-এ বর্ণিত অ্যাক্টিভিটি অন্তর্ভুক্ত করতে AndroidManifest.xml আপডেট করুন।

উদাহরণ

নিচে দেওয়া মেটেরিয়াল থেকে এই প্রসেস সম্পর্কে জানতে পারবেন।

  1. demo_fragment.xml নামের একটি XML ফাইল সংজ্ঞায়িত করুন:
    <PreferenceScreen
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:settings="http://schemas.android.com/apk/res-auto"
        android:title="@string/demo_label"
        android:key="@string/psk_demo">
        <Preference
            android:icon="@drawable/ic_settings_demo_preference_1"
            android:key="@string/pk_demo_preference_1"
            android:title="@string/demo_preference_1_title"
    settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController">
            <intent android:targetPackage="com.android.car.settings"
    android:targetClass="com.android.car.settings.common.CarSettingActivities$DemoSetting1Activity"/>
        </Preference>
        <Preference
            android:icon="@drawable/ic_settings_demo_preference_2"
            android:key="@string/pk_demo_preference_2"
            android:title="@string/demo_preference_2_title"
    settings:controller="com.android.car.settings.example.MyCustomRestrictionsPreferenceController">
            <intent android:targetPackage="com.android.car.settings"
    android:targetClass="com.android.car.settings.common.CarSettingActivities$DemoSetting2Activity"/>
        </Preference>
    </PreferenceScreen>
  2. preference_keys-এ পছন্দ সংক্রান্ত কী যোগ করুন:
    <resources>
        [...]
        <string name="pk_demo_preference_1" translatable="false">demo_preference_1</string>
        <string name="pk_demo_preference_2" translatable="false">demo_preference_2</string>
    </resources>
  3. preference_screen_keys.xml-এ পছন্দসই স্ক্রিন কী যোগ করুন:
    <resources>
        [...]
        <string name="psk_demo" translatable="false">demo_screen</string>
    </resources>

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

    public class MyCustomRestrictionsPreferenceController extends 
        PreferenceController<Preference> {
    
        private final UserManager mUserManager;
    
        public MyCustomRestrictionsPreferenceController(Context context, String 
            preferenceKey, FragmentController fragmentController, 
            CarUxRestrictions uxRestrictions) {
            super(context, preferenceKey, fragmentController, uxRestrictions);
            mUserManager = UserManager.get(context);
        }
    
        @Override
        protected Class<Preference> getPreferenceType() {
            return Preference.class;
        }
    
        @Override
        public int getAvailabilityStatus() {
            return mUserManager.isAdminUser() ? AVAILABLE : DISABLED_FOR_USER;
        }
    }
  4. ফ্র্যাগমেন্ট তৈরি করতে, getPreferenceScreenResId ওভাররাইড করুন:
  5. public class DemoFragment extends SettingsFragment {
    
        @Override
        @XmlRes
        protected int getPreferenceScreenResId() {
            return R.xml.demo_fragment;
        }
    }
  6. নতুন ফ্র্যাগমেন্ট হোল্ড করতে, CarSettingActivities-এ একটি অ্যাক্টিভিটি তৈরি করুন:
  7. public class CarSettingActivities {
        [...]
        public static class DemoActivity extends BaseCarSettingsActivity {
            @Nullable
            @Override
            protected Fragment getInitialFragment() {
                return new DemoFragment();
            }
        }
    }
  8. নতুন অ্যাক্টিভিটি সহ ম্যানিফেস্ট ফাইল আপডেট করুন:
  9. <application
        [...]
        <activity
            android:name=".common.CarSettingActivities$DemoActivity"
            android:exported="true">
            <meta-data android:name="distractionOptimized" android:value="true"/>
        </activity>
        [...]
    </application>

    'গাড়ির সেটিংস' বিকল্পের মধ্যে এক্সটার্নাল ইনটেন্ট সংক্রান্ত পছন্দ যোগ করা

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

    <Preference
        android:key="@string/pk_demo_preference"
        android:title="@string/demo_preference_title"
        android:summary="@string/demo_preference_summary"
    settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController">
            <intent android:action="android.intent.action.DEMO_ACTION"/>
    </Preference>

    ইনজেক্ট করা পছন্দ যোগ করা

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

    • CarSettings অ্যাপে সরাসরি প্রয়োগ করা হয় না (যেমন, OEM-এর প্রয়োগ করা কোনও সেটিং ইনজেক্ট করা)।
    • CarSettings অ্যাপে দেখা যাবে।

    ইনজেক্ট করা সেটিং হিসেবে কোনও অ্যাক্টিভিটি কনফিগার করতে:

    1. অ্যাক্টিভিটিকে ইনজেক্ট করা সেটিং হিসেবে চিহ্নিত করতে, অ্যাক্টিভিটিতে একটি ইনটেন্ট-ফিল্টার যোগ করুন।
    2. CarSettings অ্যাপকে বলুন যে এটি কোন বিভাগের। বিভাগ হল একটি ধ্রুবক, যা CategoryKey-এ সংজ্ঞায়িত করা হয়েছে এবং ইনজেক্ট করা সেটিং CarSettings-এর কোন লেভেলে দেখানো উচিত তা নির্দেশ করতে ব্যবহৃত হয়। আমরা CategoryKeyবিভাগের একটি সেট প্রদান করি, তবে OEM-এর নিজস্ব বিভাগ নির্ধারণ করার ক্ষেত্রে কোনও বিধিনিষেধ নেই।
    3. (ঐচ্ছিক) সেটিং দেখানো হলে সারসংক্ষেপ টেক্সট যোগ করুন:
      <activity android:name="Settings$DemoSettingsActivity"
          <!-- Mark the activity as an injected setting -->
          <intent-filter>
              <action android:name="com.android.settings.action.EXTRA_SETTINGS"/>
          </intent-filter>
          <!-- Tell CarSettings app which category it belongs to -->
          <meta-data android:name="com.android.settings.category"
                     android:value="com.android.settings.category.demo_category"/>
          <!-- Tell CarSettings the what the preference title should be -->
          <meta-data android:name="com.android.settings.title"
                     android:value="@string/app_name" />
          <!-- Optional: specify the icon to show with the preference -->
          <meta-data android:name="com.android.settings.icon"
                     android:resource="@drawable/ic_demo"
                     android:value="true"/>
          <!-- Optional: Add a summary text when the string is displayed -->
          <meta-data android:name="com.android.settings.summary"
                     android:resource="@string/demo_summary"/>
      </activity>

    CarSettings অ্যাপের কোনও নির্দিষ্ট পৃষ্ঠায় ইনজেক্ট করা সেটিং দেখাতে, XML-এ নিম্নলিখিত স্যাম্পেল কোড যোগ করুন এবং যেখানে প্রয়োজন সেখানে ভেরিয়েবল পরিবর্তন করুন:

    <com.android.car.settings.common.LogicalPreferenceGroup
        <!-- Replace key string -->
        android:key="@string/pk_system_extra_settings"
        <!-- Indicates the preferences in the group should be injected in.
             ExtraSettingsPreferenceController contains the logic to pull in injected
             preferences. -->
    settings:controller="com.android.settings.common.ExtraSettingsPreferenceController">
        <!-- Tells the controller what activities should be pulled into this preference
             group. -->
        <intent android:action="com.android.settings.action.EXTRA_SETTINGS">
            <!-- Name and value should match the metadata in your activity -->
            <extra android:name="com.android.settings.category"
                   android:value="com.android.settings.category.demo_category"/>
        </intent>
    </com.android.car.settings.common.LogicalPreferenceGroup>