গাড়ী ব্যবহারকারী অভিজ্ঞতা সীমাবদ্ধতা

এগিয়ে যাওয়ার আগে, গাড়ি চালানোর সময় মনোযোগে ব্যাঘাত সংক্রান্ত নির্দেশিকা পর্যালোচনা করুন।

এই পৃষ্ঠায় গাড়ির ইউজার এক্সপেরিয়েন্স (UX) সীমাবদ্ধতার নিয়মগুলো বর্ণনা করা হয়েছে, যা ব্যবহার করে আপনি একাধিক UX সীমাবদ্ধতার নিয়ম কনফিগারেশন (যেমন, ইউরোপীয় ইউনিয়ন বনাম জাপান) তৈরি করতে পারেন এবং তারপর রান টাইমে কোন নিয়ম সেটটি প্রয়োগ করা হবে তা নির্ধারণ করতে পারেন। আরও তথ্যের জন্য, CarUxRestrictions দেখুন।

কার ইউএক্স রেস্ট্রিকশনস সার্ভিসটি ডেভেলপারদের একটি নতুন কার ইউএক্স রেস্ট্রিকশনস কনফিগারেশন নির্ধারণ করার সুযোগ দেয়। যদি কোনো ডেভেলপার বিধিনিষেধের নিয়মগুলো পরিবর্তন করতে চান (যেমন স্থানীয় নিরাপত্তা মান মেনে চলার জন্য), তবে তিনি এপিআই ব্যবহার করে নতুন কনফিগারেশনটি নির্ধারণ করতে পারেন।

কনফিগারেশন সেট করার এপিআইটি শুধুমাত্র নতুন কনফিগারেশনেই স্থায়ী থাকে। অন্য কথায়, কনফিগারেশনটি সঙ্গে সঙ্গে কার্যকর হয় না । এর পরিবর্তে, যখন ইউএক্স রেস্ট্রিকশনস সার্ভিসটি রিস্টার্ট হয় এবং গাড়িটি পার্কিং মোডে থাকে, তখন নতুন কনফিগারেশনটি লোড হয়। নতুন কনফিগারেশনটি পুনরায় লোড করার আগে কার সার্ভিসটি নিশ্চিত করে যে গাড়িটি পার্কিং মোডে আছে।

নতুন UX Restrictions সার্ভিস মেথড ছাড়াও, কনফিগারেশনটি তৈরি করার জন্য এপিআই (API) প্রদান করা হয়েছে। গিয়ার নির্বাচন এবং গতির অবস্থাকে তিনটি ড্রাইভিং স্টেটের মধ্যে একটিতে রূপান্তরিত করা হয়:

  • পার্ক করা হয়েছে। সরঞ্জাম পার্কিং-এ রাখা আছে।
  • ইঞ্জিন চালু অবস্থায় আছে। গিয়ার পার্কে নেই এবং গতি শূন্য।
  • গাড়ি চলছে। গিয়ার পার্কে নেই এবং গতি শূন্য নয়।

অ্যাপগুলো কীভাবে গাড়ির ড্রাইভিং স্টেট ব্যবহার করে এবং এর সাথে সম্পর্কিত ইউএক্স (UX) সীমাবদ্ধতাগুলো সম্পর্কে জানতে, ‘গাড়ির ড্রাইভিং স্টেট ব্যবহার এবং ইউএক্স (UX) সীমাবদ্ধতা’ দেখুন।

ড্রাইভের অবস্থার উপর ভিত্তি করে বিধিনিষেধ কনফিগারেশন

চালকের মনোযোগে বিঘ্ন রোধ করতে, অ্যান্ড্রয়েড ড্রাইভিং অবস্থাকে একগুচ্ছ ইউএক্স বিধিনিষেধের সাথে সংযুক্ত করে। /packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • পার্ক করা আছে। কোনো বাধা নেই।
  • নিষ্ক্রিয় অবস্থায় আছে। কোনো ভিডিও বা কনফিগারেশন স্ক্রিন দেখা যাচ্ছে না।
  • স্থানান্তরিত হচ্ছে। সম্পূর্ণ সীমাবদ্ধ (সকল বিধিনিষেধ আবশ্যক)।

উপরে চিত্রিত ম্যাপিংটি একটি XML রিসোর্স হিসাবে পূর্বনির্ধারিত এবং কনফিগার করা হয়েছে। /packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java এরপর নিয়মগুলো মেমরিতে সংরক্ষণ করে। তারপর সার্ভিসটি বর্তমান ড্রাইভিং স্টেটকে ইউএক্স রেস্ট্রিকশন (UX Restrictions)-এর সাথে ম্যাপ করে এবং বর্তমান রেস্ট্রিকশনগুলো পুরো সিস্টেমে ব্রডকাস্ট করে।

<!-- No restrictions when car is parked -->
<DrivingState car:state="parked">
    <Restrictions car:requiresDistractionOptimization="false"
                  car:uxr="baseline"/>
</DrivingState>

<!-- Restrictions when car is idling -->
<DrivingState car:state="idling">
    <Restrictions car:requiresDistractionOptimization="true"
                  car:uxr="no_video|no_config"/>
</DrivingState>

<!-- Restrictions for speed >= 0 m/s -->
<DrivingState car:state="moving" car:minSpeed="0.0">
    <Restrictions car:requiresDistractionOptimization="true"
                  car:uxr="fully_restricted"/>
</DrivingState>

একাধিক ডিসপ্লের জন্য কনফিগারেশন

ডিফল্টরূপে, অতিরিক্ত ডিসপ্লেগুলিতে কোনো বিধিনিষেধ প্রয়োগ করা হয় না। একাধিক ডিসপ্লের জন্য বিধিনিষেধ কনফিগারেশন তৈরি করতে, সেই ডিসপ্লের ফিজিক্যাল পোর্টের সাথে RestrictionMapping ট্যাগটি অন্তর্ভুক্ত করুন। প্রতিটি ডিসপ্লেতে উপযুক্ত বিধিনিষেধ স্বয়ংক্রিয়ভাবে প্রয়োগ হয়ে যায়। নিম্নলিখিত উদাহরণে, ফিজিক্যাল পোর্ট আইডি ১ এবং ২ যুক্ত ডিসপ্লেগুলির কনফিগারেশন ভিন্ন:

<RestrictionMapping car:physicalPort="1">
       <DrivingState car:state="moving">
           <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_keyboard|no_video"/>
       </DrivingState>
   </RestrictionMapping>

   <RestrictionMapping car:physicalPort="2">
       <DrivingState car:state="moving">
           <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
       </DrivingState>
  </RestrictionMapping>

সীমাবদ্ধতা মোডের জন্য কনফিগারেশন

আপনি মোডটির জন্য যেকোনো নাম নির্বাচন করতে পারেন, যেমন টিন (teen )। নিম্নলিখিত উদাহরণে, ডিফল্ট এবং প্যাসেঞ্জার মোডের জন্য ভিন্ন ভিন্ন বিধিনিষেধ কনফিগার করা হয়েছে (পূর্বে শুধুমাত্র প্যাসেঞ্জার মোড সমর্থিত ছিল):

<DrivingState car:state="idling">
    <Restrictions car:mode="passenger" car:requiresDistractionOptimization="false" car:uxr="baseline"/>
    <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
</DrivingState>
</Restrictions>
আপনি মোডের জন্য যেকোনো স্ট্রিং নাম সেট করতে API ব্যবহার করতে পারেন। উদাহরণস্বরূপ, CarUxRestrictionsManager-এর setRestrictionMode(@NonNull String mode) মেথডটি। (পূর্বে, আপনি CarUxRestrictionsManager- setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) মেথডটি ব্যবহার করতেন)।

CarUxRestrictionsConfiguration API

CarUxRestrictionsConfiguration-এর সাথে সীমাবদ্ধতা

নতুন ক্লাস CarUxRestrictionsConfiguration বর্তমান XML কনফিগারেশন স্কিমার সাথে ১:১ ম্যাপ করা হয়েছে। CarUxRestrictionsConfiguration CarUxRestrictions. Builder দিয়ে তৈরি করা যায়, যা build() করার সময় কনফিগারেশনটি যাচাই করে।

new CarUxRestrictionsConfiguration.Builder()
        // Explicitly set restrictions for each driving state.
        .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_PARKED,
                /* requiresOptimization= */ false,
                /* restrictions= */ UX_RESTRICTIONS_BASELINE)
        .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_IDLING,
                true,
                UX_RESTRICTIONS_NO_VIDEO|UX_RESTRICTIONS_NO_SETUP)
        .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_MOVING,
                true,
                UX_RESTRICTIONS_FULLY_RESTRICTED)
        // Set restriction parameters.
        .setMaxStringLength(int max)
        .setMaxCumulativeContentItems(int max)
        .setMaxContentDepth(int max)
        // Build a new CarUxRestrictionsConfiguration.
        .build();

CarUxRestrictionsManager API

পরবর্তী ড্রাইভের জন্য CarUxRestrictionsManager ব্যবহার করে CarUxRestrictionsConfiguration সেট করুন। এই পদ্ধতির জন্য Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION পারমিশন প্রয়োজন।

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

নতুন ইউএক্স বিধিনিষেধ কনফিগারেশনটি স্থায়ী করুন

যখন একটি নতুন কনফিগারেশন দেওয়া হয়, তখন UX Restrictions সার্ভিসটি একটি বুলিয়ান রিটার্ন করে, যা নির্দেশ করে যে নতুন কনফিগারেশনটি সফলভাবে সেভ হয়েছে কি না। এই নতুন কনফিগারেশনটি শুধুমাত্র তখনই ব্যবহৃত হয় যখন ইন্টিগ্রেটেড হেড ইউনিট (IHU) রিস্টার্ট হয় এবং গাড়িটি পার্ক করা থাকে। অভ্যন্তরীণভাবে, UX Restrictions সার্ভিসটিতে দুই সেট কনফিগারেশন থাকে:

  • প্রোডাকশন। যদিও এটি ঐচ্ছিক, এই কনফিগারেশনটি প্রায়শই উপস্থিত থাকে। UX রেস্ট্রিকশনস সার্ভিসটি চালু হওয়ার সময় এই কনফিগারেশনটি পড়ে নেয়।
  • পর্যায়ক্রমিক। এটিও ঐচ্ছিক, এই কনফিগারেশনটির ইউএক্স সীমাবদ্ধতার উপর কোনো প্রভাব নেই এবং গাড়ি পরিষেবা শুরু হলে ও গাড়ি পার্ক করা হলে এটি প্রোডাকশন পর্যায়ে উন্নীত হয়।

উৎপাদন কনফিগারেশন

চিত্র ১. উৎপাদন কনফিগারেশন

ঠিকানা ব্যর্থতা

CarPropertyManager থেকে ড্রাইভিং অবস্থার তথ্য না পাওয়া পর্যন্ত (উদাহরণস্বরূপ, বুট-আপের সময়), UX বিধিনিষেধগুলি কার্যকর হবে না। সিস্টেমটি এমনভাবে কাজ করবে যেন ড্রাইভিং অবস্থাটি পার্ক করা আছে।

সংরক্ষিত কনফিগারেশন পড়তে ব্যর্থ হলে (উদাহরণস্বরূপ, SettingNotFoundException দেখা দিলে), UX Restrictions পরিষেবাটি হার্ড-কোডেড, সম্পূর্ণ সীমাবদ্ধ মোডে ফিরে যায়:

// Idling/moving state is fully restricted.
private static CarUxRestrictionsConfiguration generateDefaultConfig() {}

গাড়ি চালানোর অবস্থা এবং ব্যবহারকারীর সীমাবদ্ধতা

নিম্নলিখিত বিষয়বস্তুতে এই ডিজাইন ডায়াগ্রামে প্রদর্শিত মিথস্ক্রিয়াগুলো বর্ণনা করা হয়েছে:

ড্রাইভিং স্টেট ইন্টারঅ্যাকশন

চিত্র ২. চালক অবস্থার মিথস্ক্রিয়া

ড্রাইভিং অবস্থা নির্ধারণে ব্যবহৃত বৈশিষ্ট্যসমূহ

ড্রাইভিং অবস্থা নির্ণয় করতে নিম্নলিখিত তিনটি VehiclePropertyIds ব্যবহার করুন:

অ্যাপগুলির জন্য উপলব্ধ এপিআই

কোডটি নিম্নলিখিত স্থানগুলিতে অবস্থিত:

কোড অবস্থান
CarUxRestrictionsManager
ইউএক্স বিধিনিষেধ পরিবর্তনের জন্য নিবন্ধন করার পাবলিক এপিআই।
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
ইউএক্স সীমাবদ্ধতার সংজ্ঞা।
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
অবস্থা পরিবর্তনের জন্য নিবন্ধন করতে সিস্টেম এপিআই ব্যবহার করুন।
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

ড্রাইভিং অবস্থাগুলো অনুকরণ করতে, টেস্টিং দেখুন।