অ্যাপ লক ব্যবহারকারীদের একটি অনন্য পিন কোডের মাধ্যমে প্রতিটি অ্যাপ সুরক্ষিত করার সুযোগ দেয়। এটি সংবেদনশীল তথ্যকে অতিথি বা দ্বিতীয় ব্যবহারকারীর অ্যাক্সেস থেকে রক্ষা করে, বিশেষ করে যখন মূল ব্যবহারকারী গাড়িতে উপস্থিত থাকেন না।
অ্যাপ লক প্রোফাইল লক থেকে স্বাধীনভাবে কাজ করে। এই নকশাটি ব্যবহারকারীদের সম্পূর্ণ প্রোফাইল লক না করেই নির্দিষ্ট সংবেদনশীল অ্যাপ সুরক্ষিত করার সুবিধা দেয়।
অ্যাপ লক অ্যান্ড্রয়েড ১৪ (এপিআই লেভেল ৩৪) এবং এর পরবর্তী সংস্করণগুলোতে একটি আনবান্ডেলড অ্যাপ হিসেবে উপলব্ধ। আপনি এই অ্যাপটি মূল অ্যান্ড্রয়েড অটোমোটিভ ওএস (AAOS) প্ল্যাটফর্ম থেকে আলাদাভাবে তৈরি করতে পারেন। তবে, আপনাকে অবশ্যই অ্যাপ লক অ্যাপটি আপনার প্ল্যাটফর্ম ইমেজের সাথে অন্তর্ভুক্ত একটি প্ল্যাটফর্ম-স্বাক্ষরিত বিশেষাধিকারপ্রাপ্ত অ্যাপ হিসেবে স্থাপন করতে হবে।
ব্যবহারকারীরা যখন অ্যাপ ইনস্টল করেন, তখন তাঁদের অ্যাপ লক ফিচারটি সম্পর্কে জানানো হয়:

চিত্র ১. কোনো অ্যাপ ইনস্টল করার পর প্রদর্শিত অ্যাপ লক নোটিফিকেশন।
অ্যাপ লক ডিফল্টরূপে নিষ্ক্রিয় থাকে। ফিচারটি সক্রিয় করার পর, ব্যবহারকারীকে একটি পিন সেট করতে বলা হয়। পরবর্তীতে অ্যাপ লক দ্বারা সুরক্ষিত যেকোনো অ্যাপ অ্যাক্সেস করার জন্য এই পিনটি প্রয়োজন হবে।

চিত্র ২. অ্যাপ লক সেটিংস।
লক করা অ্যাপ খোলার চেষ্টা করলে, ব্যবহারকারীকে অ্যাপ লক পিন কোডটি প্রবেশ করতে বলা হয়:

চিত্র ৩. লক করা অ্যাপ খোলার চেষ্টা করার সময় প্রদর্শিত অ্যাপ লক প্রম্পট।
অ্যাপ লক কনফিগার করুন
অ্যাপ কনফিগারেশন প্রয়োগ করতে, res/values/config.xml ফাইলটি সম্পাদনা করুন:
<resources>
<!--A customizable list of system packages that appear in the App Lock settings. -->
<string-array name="system_lockable_packages">
<item>com.android.car.calendar</item>
</string-array>
<!-- Config for allowing locking of media apps. -->
<bool name="config_enableMediaAppsLocking">true</bool>
<!-- Default account type used for recovering pin. -->
<string name="config_recoveryAccountType" translatable="false">com.google</string>
</resources>
লকযোগ্য অ্যাপগুলি কাস্টমাইজ করুন
ডিফল্টরূপে, সিস্টেম অ্যাপগুলো লক করা যায় না। আপনি system_lockable_packages কনফিগ ব্যবহার করে সিস্টেম অ্যাপগুলোকে লকযোগ্য করে তুলতে পারেন।
সেটিংস, নেভিগেশন অ্যাপ এবং ভয়েস অ্যাসিস্ট্যান্টের মতো মূল অ্যাপগুলো লক করা যায় না, কারণ এমনটা করলে সিস্টেমে অপ্রত্যাশিত আচরণ দেখা দিতে পারে।
সিস্টেম অ্যাপের জন্য অ্যাপ লক সক্রিয় করতে, system_lockable_packages তালিকাটি ব্যবহার করুন:
<!-- List of system packages that appear in the App Lock settings. -->
<string-array name="system_lockable_packages">
<item>com.android.car.calendar</item>
</string-array>
মিডিয়া সাসপেনশন কনফিগার করুন
ডিফল্টরূপে, মিডিয়া অ্যাপগুলি লক করা যেতে পারে যদি প্ল্যাটফর্মটি Car-apps-release 17 বা তার উচ্চতর সংস্করণের Car Media App সমর্থন করে। যদি আপনি Car-apps-release 17 বা তার উচ্চতর সংস্করণ সমর্থন না করেন, তাহলে আপনি মিডিয়া অ্যাপ লকিং নিষ্ক্রিয় করতে পারেন:
<!-- Config for allowing locking of media apps. -->
<bool name="config_enableMediaAppsLocking">false</bool>
একটি পুনরুদ্ধার প্রবাহ সেট আপ করুন
ব্যবহারকারীরা তাদের অ্যাপ লক পিন ভুলে যেতে পারেন। পিন পুনরুদ্ধারের জন্য ব্যবহৃত অ্যাকাউন্টের ধরন কাস্টমাইজ করতে config_recoveryAccountType ব্যবহার করুন।
<!-- Default account type used for recovering pin. -->
<string name="config_recoveryAccountType" translatable="false">com.google</string>
যখন কোনো ব্যবহারকারী config_recoveryAccountType সাথে মেলে এমন ধরনের কোনো অ্যাকাউন্ট দিয়ে প্রমাণীকরণ করেন, তখন অ্যাপ লক পিন রিসেট করে এবং অ্যাপের ব্যক্তিগত ডেটা মুছে ফেলে।
রেফারেন্স কোডটি স্টাইল করুন
রেফারেন্স কোড কাস্টমাইজ করতে, SensitiveAppLockOverlayableResources ওভারলে করার জন্য রানটাইম রিসোর্স ওভারলে (RRO) ব্যবহার করুন।
যেহেতু অ্যাপ লক কার UI লাইব্রেরি ব্যবহার করে, তাই আপনার বিদ্যমান কার UI লাইব্রেরি RRO-গুলো অ্যাপ লকেও প্রয়োগ করা যাবে।
পিন প্যাডের কীগুলো styles.xml এ সংজ্ঞায়িত স্টাইলটিই ব্যবহার করে:
<style name="PinPadKey" parent="Widget.CarUi.Button">
<item name="android:textSize">@dimen/pin_pad_key_text_size</item>
<item name="android:layout_height">@dimen/pin_pad_key_diameter</item>
<item name="android:layout_width">@dimen/pin_pad_key_diameter</item>
…
</style>
আপনি পিন প্যাডের মাপও নির্ধারণ করতে পারেন:
<resources>
<!-- Default dimensions for PIN pad view -->
<dimen name="pin_pad_title_text_size">44sp</dimen>
<dimen name="pin_pad_subtitle_text_size">32sp</dimen>
<dimen name="pin_pad_key_diameter">96dp</dimen>
<dimen name="pin_pad_key_text_size">32sp</dimen>
<dimen name="pin_pad_key_padding">0dp</dimen>
<dimen name="pin_pad_row_spacing">10dp</dimen>
<dimen name="pin_pad_col_spacing">12dp</dimen>
</resources>
সাসপেন্ড-টু-র্যাম সমর্থন করে
সাসপেন্ড-টু-র্যাম সমর্থন করার জন্য, আপনাকে অবশ্যই config_earlyStartupServices এ অ্যাপ লক পরিষেবাটি যোগ করতে হবে:
<string-array translatable="false" name="config_earlyStartupServices">
<!-- App Lock Persistent Background Service -->
<item>com.android.car.sensitiveapplock/.service.PersistentBackgroundService#bind=bind,user=foreground,trigger=userUnlocked</item>
</string-array>
বিল্ড কনফিগারেশন
অ্যাপ লক ব্যবহার করার জন্য সিস্টেমের বিশেষাধিকারপ্রাপ্ত অনুমতির প্রয়োজন হয়। যে প্ল্যাটফর্মগুলো অ্যাপ লক সমর্থন করে, সেগুলোকে অবশ্যই com.android.car.sensitive_app_lock সিস্টেম ফিচারটিও ঘোষণা করতে হবে।
com.android.car.sensitiveapplock.xml এ ফিচার ডিক্লারেশন এবং পারমিশনগুলো যোগ করুন:
<permissions>
<feature name="com.android.car.sensitive_app_lock"/>
<privapp-permissions package="com.android.car.sensitiveapplock">
<permission name="android.permission.GET_ACCOUNTS_PRIVILEGED" />
<permission name="android.permission.QUERY_USERS" />
<permission name="android.permission.MEDIA_CONTENT_CONTROL" />
<permission name="android.car.permission.CAR_POWER" />
<permission name="android.permission.POST_NOTIFICATIONS" />
</privapp-permissions>
</permissions>
App Lock-কে অবশ্যই Android.bp ফাইলে একটি স্বাক্ষরিত সিস্টেম অ্যাপ হিসেবে ইম্পোর্ট করতে হবে:
android_app_import {
name: "AppLock",
apk: "AppLock.apk",
certificate: "platform",
privileged: true,
required: [
"privapp-com.android.car.sensitiveapplock",
],
optional_uses_libs: [
"androidx.window.extensions",
"androidx.window.sidecar",
"com.android.oem.tokens", /* For Android 16+ */
],
}
prebuilt_etc {
name: "privapp-com.android.car.sensitiveapplock",
sub_dir: "permissions",
src: "com.android.car.sensitiveapplock.xml",
filename_from_src: true,
}
যেহেতু হেডলেস সিস্টেম ইউজার মোড (HSUM) এবং গেস্ট ইউজাররা অ্যাপ লক সাপোর্ট করে না, তাই আপনাকে শুধুমাত্র সেকেন্ডারি প্রোফাইলগুলিতে অ্যাপ লক চালু করতে হবে। সেকেন্ডারি ইউজারদের জন্য অ্যাপটি চালু করতে এই কনফিগারেশনটি ব্যবহার করুন।
উদাহরণস্বরূপ, আপনার preinstalled-packages.xml এ:
<config>
…
<!-- Config for the Sensitive App Lock app -->
<install-in-user-type package="com.android.car.sensitiveapplock">
<!-- Sensitive App Lock is only available to secondary users. Do not install app in Guest users. -->
<install-in user-type="android.os.usertype.full.SECONDARY" />
</install-in-user-type>
</config>