ওভারভিউ

গাড়ির সেটিংস ( packages/apps/Car/Settings ) বিশেষভাবে Android Automotive OS (AAOS)-এর জন্য প্রদান করা হয়েছে। গাড়ির সেটিংস ফোন সেটিংস ( packages/apps/Settings ) থেকে আলাদা। গাড়ির সেটিংসে কিছু পরিচিত ফোন সেটিংস থাকলেও, গাড়ির সেটিংস একটি গাড়ি-ফাইড ভিজ্যুয়াল ইউজার ইন্টারফেস, ড্রাইভার ডিস্ট্রাকশন অপ্টিমাইজেশন এবং OEM-এর জন্য অসংখ্য কাস্টমাইজেশন এন্ট্রি পয়েন্ট প্রদান করে।

নীচে দেওয়া গাড়ি সেটিংসের ওভারভিউ ছাড়াও, গাড়ি সেটিংস সম্পর্কে আরও জানতে এই সম্পর্কিত বিষয়গুলি দেখুন:

স্থাপত্য এবং নির্দেশিকা

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

স্ট্যাটিক পছন্দ

পছন্দ বা CarUiPreference ট্যাগ ব্যবহার করে XML-এ একটি স্ট্যাটিক পছন্দ সংজ্ঞায়িত করা হয়। একটি SettingsFragment ইমপ্লিমেন্টেশন getPreferenceScreenResId() পদ্ধতি ব্যবহার করে তা নির্ধারণ করতে যে কোন XML ফাইলে প্রদর্শিত পছন্দের স্ট্যাটিক তালিকা রয়েছে।

গতিশীল পছন্দ

গতিশীল পছন্দগুলি PreferenceGroup ট্যাগ বা PreferenceGroup এর বাস্তবায়ন ব্যবহার করে।

CarSettings অ্যাপের মধ্যে, গতিশীল পছন্দগুলি পছন্দের একটি সাধারণ সেট উপস্থাপন করে যা ব্যবহারকারীকে CarSettings-এর মধ্যে অতিরিক্ত পৃষ্ঠাগুলিতে নির্দেশ করে, কিন্তু যেগুলি XML-এর পরিবর্তে পছন্দ কন্ট্রোলারের মাধ্যমে যোগ করা হয়েছে। একটি উদাহরণ হল ভাষা এবং ইনপুট পছন্দের অধীনে কীবোর্ড পছন্দ পরিচালনা করুন যা এই ইনপুট পদ্ধতিগুলি অনুমোদিত কি না তার উপর ভিত্তি করে অগ্রাধিকার পৃষ্ঠায় গতিশীলভাবে ইনপুট পদ্ধতি যুক্ত করে।

অ্যাকশন বার

প্রতিটি সেটিংস স্ক্রিনের শীর্ষে একটি অ্যাকশন বার রয়েছে, যাতে একটি "ব্যাক" নেভিগেশন, একটি স্ক্রিন শিরোনাম এবং সম্পূরক অ্যাকশন উইজেট (উদাহরণস্বরূপ, বোতাম এবং সুইচ) থাকতে পারে। এই অ্যাকশন বারগুলি অ্যান্ড্রয়েড দ্বারা প্রদত্ত অ্যাকশনবারের মতো, কিন্তু আসলে কাস্টম ভিউ। অ্যান্ড্রয়েড 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 প্যাকেজে সংজ্ঞায়িত কিছু কাস্টম পছন্দ ব্যবহার করে। বেস প্রেফারেন্স ক্লাস থেকে আলাদাভাবে কার সেটিংস মডিউলের মধ্যে এগুলি ওভারলেড করা উচিত।