একত্রিত কলের ইতিহাস

VoIP অ্যাপ্লিকেশন সিস্টেম কল লগে তাদের কল ইন্টিগ্রেট করতে পারে। এর ফলে ব্যবহারকারীরা সিস্টেম ডায়লার অ্যাপে তাদের VoIP কল ইতিহাস কেন্দ্রীয়ভাবে দেখতে এবং ডায়লার অ্যাপ থেকে সরাসরি কল ব্যাক করতে পারবেন। এই নির্দেশিকাটি VoIP কলিং অ্যাপ, সিস্টেম ডায়লার অ্যাপ এবং ইউনিফায়েড কল ইতিহাস সেটিংস ম্যানেজ করার জন্য প্রয়োজনীয় পরিবর্তনগুলি বর্ণনা করে।

প্রয়োজন।

কলিং অ্যাপে পরিবর্তন

সিস্টেম কল লগের সাথে আপনার VoIP অ্যাপ ইন্টিগ্রেট করতে, এইসব ধাপ অনুসরণ করুন।

কলব্যাক ইনটেন্ট ফিল্টার রেজিস্টার করা

সিস্টেম-সুরক্ষিত ইনটেন্ট TelecomManager.ACTION_CALL_BACK রেজিস্টার করুন।

এই ইনটেন্ট ফিল্টার সঠিকভাবে রেজিস্টার করা হয়ে গেলে, আপনার অ্যাপ CallsManager.addCall বা অন্যান্য সম্পর্কিত টেলিকম API ব্যবহার করে যে কল যোগ করে, সেগুলি সিস্টেমের মাধ্যমে অটোমেটিক লগ করা হবে। কল ব্যাক করার জন্য কোনও ব্যবহারকারী ডায়ালারে VoIP কল লগ এন্ট্রি বেছে নিলে, আপনার অ্যাপে কলব্যাক পাঠানোর জন্য সিস্টেম এই রেজিস্টার করা ইনটেন্ট ব্যবহার করে।

<!-- Activity to handle the callback intent from the system dialer -->
<activity
    android:name=".VoipCallActivity"
    android:exported="true">

    <!-- Register callback intent -->
    <intent-filter>
        <action android:name="android.telecom.action.CALL_BACK" />
    </intent-filter>
</activity>

কল লগিং বাদ দেওয়া

কলব্যাক রেজিস্টার করা হয়ে গেলে, সব কল সিস্টেম ডায়ালারে লগ করা হয়। প্রতিটি কলের ভিত্তিতে কল বাদ দিতে, CallAttributesCompat-এর মধ্যে isLogExcluded বুলিয়ানকে true হিসেবে সেট করুন।

CallAttributesCompat(
    displayName = displayName,
    address = address,
    isLogExcluded = excludeCallLogging, // to exclude call from logging
    direction = if (isIncoming) {
        CallAttributesCompat.DIRECTION_INCOMING
    } else {
        CallAttributesCompat.DIRECTION_OUTGOING
    },
    callType = CallAttributesCompat.CALL_TYPE_AUDIO_CALL,
    callCapabilities = (
        CallAttributesCompat.SUPPORTS_SET_INACTIVE
            or CallAttributesCompat.SUPPORTS_STREAM
            or CallAttributesCompat.SUPPORTS_TRANSFER
        ),
)

কলব্যাক ম্যানেজ করা

CallsManager.addCall-এর মাধ্যমে যোগ করা কলগুলি CallControlScope.getCallId-এর মাধ্যমে একটি অনন্য UUID পায়।

// check the intent action for CALL_BACK
if (intent.action == TelecomManager.ACTION_CALL_BACK) {
    launchCall(
        // fetching stored call details for the UUID to initiate callback
        callDetails = getCallDetails(
            uuid = intent.getStringExtra(TelecomManager.EXTRA_UUID)
        )
    )
}

কল লগ এন্ট্রি যাচাই করা

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

সিস্টেম লগের মধ্যে অ্যাপের সাথে অ্যাট্রিবিউট করা UUID-এর বর্তমান তালিকা পেতে, CallLog.Calls.CONTENT_VOIP_URI ব্যবহার করুন।

ডায়লার অ্যাপে করা পরিবর্তন

VoIP কল লগ দেখাতে এবং VoIP অ্যাপে কলব্যাক শুরু করতে ডায়লার অ্যাপ চালু করতে এইসব ধাপ অনুসরণ করুন।

ডায়লার অ্যাপে VoIP কল লগ দেখানো

সাধারণত, VoIP অ্যাপের কল লগ ডায়লার অ্যাপে দেখা যায় না। ডায়লার অ্যাপে ইন্টিগ্রেটেড কল লগ দেখতে নিচের ধাপগুলি অনুসরণ করুন:

  • Android 16.1 (API লেভেল 36.1)-এ, VoIP কল লগ দেখাতে, কন্টেন্ট প্রোভাইডারের CallLog.Calls সাথে কোয়েরি প্যারামিটার include_voip_calls যোগ করুন:

    CallLog.Calls.CONTENT_URI.buildUpon()
        .appendQueryParameter("include_voip_calls", "true")
        .build()

  • Android 17 (API লেভেল 37) ও এর পরের যেকোনও ভার্সনে, নিম্নলিখিত ফর্মাল কন্টেন্ট প্রোভাইডার ও প্যারামিটার কী ব্যবহার করুন:

ডায়ালার অ্যাপ থেকে কলব্যাক শুরু করা

ডায়লার থেকে কলব্যাক শুরু করতে, TelecomManager.placeCall ব্যবহার করুন। সঠিক VoIP অ্যাপ লঞ্চ করতে প্ল্যাটফর্ম কল লগ এন্ট্রির অনন্য CallLog.Calls._ID ব্যবহার করে। এই লঞ্চে একটি TelecomManager.ACTION_CALL_BACK ইনটেন্ট থাকে, যা রিটার্ন কল শুরু করার জন্য সিস্টেম-সংজ্ঞায়িত অ্যাকশন। এই ইনটেন্টে কলের UUID ইন টেন্ট এক্সট্রা TelecomManager.EXTRA_UUID থাকে, যা VoIP অ্যাপকে শনাক্ত করতে দেয় যে কোন নির্দিষ্ট কলে কলব্যাক করা হচ্ছে।

// Uri generated with unique ID of the call log entry to launch the respective VoIP app for callback
val address = ContentUris.withAppendedId(CallLog.Calls.CONTENT_URI, callId)

// extra information required to initiate callback
val extras = Bundle()

telecomManager.placeCall(address, extras)

ইউনিফায়েড কল ইতিহাসের সেটিংস ম্যানেজ করা

Android 17 (API লেভেল 37) থেকে শুরু করে, ব্যবহারকারীরা সিস্টেম সেটিংসের (সাধারণত সেটিংস > কলিং অ্যাকাউন্ট > ইন্টিগ্রেটেড কল লগ বা সরাসরি তাদের ডিফল্ট ডায়লার অ্যাপের মধ্যে) মধ্যে অ্যাপ-ভিত্তিক ইউনিফায়েড কল ইতিহাস দেখতে ও টগল করতে পারবেন। থার্ড-পার্টি কলিং অ্যাপ ও ডায়লার অ্যাপ, দু'টিই এইসব সেটিংসের সাথে ইন্টার‍্যাক্ট করতে পারে।

ইউনিফায়েড কল ইতিহাস সেটিংস খুলতে, TelecomManager.ACTION_CONFIGURE_CALL_LOG_INTEGRATION ইনটেন্ট অ্যাকশন দিয়ে একটি অ্যাক্টিভিটি শুরু করুন:

val intent = Intent(TelecomManager.ACTION_CONFIGURE_CALL_LOG_INTEGRATION)
startActivity(intent)

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

পছন্দ পরিবর্তন সংক্রান্ত তথ্য শোনা

সিস্টেম সেটিংস বা ডায়ালারে আপনার কলিং অ্যাপের জন্য কোনও ব্যবহারকারী ইউনিফাইড কল ইতিহাস চালু বা বন্ধ করলে সিঙ্ক করা অবস্থায় থাকতে, TelecomManager.ACTION_VOIP_CALL_LOG_PREFERENCE (android.telecom.action.VOIP_CALL_LOG_PREFERENCE) ব্রডকাস্ট ইনটেন্টের জন্য একটি ব্রডকাস্ট রিসিভার রেজিস্টার করুন:

val receiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == TelecomManager.ACTION_VOIP_CALL_LOG_PREFERENCE) {
            // Status of the Unified Call History of the app
            val isEnabled = intent.getBooleanExtra(
                TelecomManager.EXTRA_VOIP_CALL_LOG_PREFERENCE_STATUS,
                true
            )
        }
    }
}

ব্যবহারকারী টগল ফ্লিপ করলে, প্ল্যাটফর্ম আপনার অ্যাপে এই ইনটেন্ট ব্রডকাস্ট করে। এতে TelecomManager.EXTRA_VOIP_CALL_LOG_PREFERENCE_STATUS এক্সট্রাতে আপডেট করা বুলিয়ান স্টেট থাকে। CallLog.Calls-এর বিরুদ্ধে পিরিয়ডিক যাচাইকরণের জন্য অপেক্ষা করার পরিবর্তে, আপনার অ্যাপ এই ব্রডকাস্ট শুনতে পারে। ইউনিফায়েড কল ইতিহাস বন্ধ করা থাকলে (অন্য কথায়, false হিসেবে সেট করা থাকলে), আপনার অ্যাপ তার ইন্টার্নাল স্টেট আপডেট করতে বা ক্লিনিং পারফর্ম করতে পারে, যেমন কলব্যাক ম্যানেজ করার জন্য ব্যবহৃত লোকালি ক্যাশে করা কল ম্যাপিং মুছে ফেলা।