diff options
author | linyuh <linyuh@google.com> | 2017-12-13 10:12:56 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2017-12-13 10:13:59 -0800 |
commit | a98ac7f0b74d6f993e9ef2a7f1ad094d1027d712 (patch) | |
tree | c9930d95ee9a8fb61d26ae66afe42d7d3f47b791 /java/com/android/dialer/calldetails/CallDetailsActivity.java | |
parent | ecfba0c3588bdbd77c5bda509b66bc621837986b (diff) |
Integrate CallDetailsActivity with the new call log UI.
Bug: 70218437
Test: CallDetailsActivityTest, CallDetailsCursorLoaderTest, ModulesTest
PiperOrigin-RevId: 178918820
Change-Id: Ib8034190550e8ca8e6e7fd9ce521bfadc73e834f
Diffstat (limited to 'java/com/android/dialer/calldetails/CallDetailsActivity.java')
-rw-r--r-- | java/com/android/dialer/calldetails/CallDetailsActivity.java | 107 |
1 files changed, 98 insertions, 9 deletions
diff --git a/java/com/android/dialer/calldetails/CallDetailsActivity.java b/java/com/android/dialer/calldetails/CallDetailsActivity.java index c29f9e9ae..b314e26bf 100644 --- a/java/com/android/dialer/calldetails/CallDetailsActivity.java +++ b/java/com/android/dialer/calldetails/CallDetailsActivity.java @@ -19,9 +19,12 @@ package com.android.dialer.calldetails; import android.Manifest.permission; import android.annotation.SuppressLint; import android.app.Activity; +import android.app.LoaderManager.LoaderCallbacks; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; +import android.content.Loader; +import android.database.Cursor; import android.os.AsyncTask; import android.os.Bundle; import android.provider.CallLog; @@ -35,11 +38,13 @@ import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.Toast; +import com.android.dialer.CoalescedIds; import com.android.dialer.DialerPhoneNumber; import com.android.dialer.assisteddialing.ui.AssistedDialingSettingActivity; import com.android.dialer.calldetails.CallDetailsEntries.CallDetailsEntry; import com.android.dialer.callintent.CallInitiationType; import com.android.dialer.callintent.CallIntentBuilder; +import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract.AnnotatedCallLog; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; import com.android.dialer.common.concurrent.AsyncTaskExecutors; @@ -62,6 +67,7 @@ import com.android.dialer.phonenumberproto.DialerPhoneNumberUtil; import com.android.dialer.postcall.PostCall; import com.android.dialer.precall.PreCall; import com.android.dialer.protos.ProtoParsers; +import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.i18n.phonenumbers.PhoneNumberUtil; import java.lang.ref.WeakReference; @@ -71,10 +77,12 @@ import java.util.Map; /** Displays the details of a specific call log entry. */ public class CallDetailsActivity extends AppCompatActivity { + private static final int CALL_DETAILS_LOADER_ID = 0; public static final String EXTRA_PHONE_NUMBER = "phone_number"; public static final String EXTRA_HAS_ENRICHED_CALL_DATA = "has_enriched_call_data"; public static final String EXTRA_CALL_DETAILS_ENTRIES = "call_details_entries"; + public static final String EXTRA_COALESCED_CALL_LOG_IDS = "coalesced_call_log_ids"; public static final String EXTRA_CONTACT = "contact"; public static final String EXTRA_CAN_REPORT_CALLER_ID = "can_report_caller_id"; private static final String EXTRA_CAN_SUPPORT_ASSISTED_DIALING = "can_support_assisted_dialing"; @@ -93,23 +101,47 @@ public class CallDetailsActivity extends AppCompatActivity { private DialerContact contact; private CallDetailsAdapter adapter; + // This will be present only when the activity is launched from the new call log UI, i.e., a list + // of coalesced annotated call log IDs is included in the intent. + private Optional<CoalescedIds> coalescedCallLogIds = Optional.absent(); + public static boolean isLaunchIntent(Intent intent) { return intent.getComponent() != null && CallDetailsActivity.class.getName().equals(intent.getComponent().getClassName()); } + /** + * Returns an {@link Intent} for launching the {@link CallDetailsActivity} from the old call log + * UI. + */ public static Intent newInstance( Context context, - @NonNull CallDetailsEntries details, - @NonNull DialerContact contact, + CallDetailsEntries details, + DialerContact contact, boolean canReportCallerId, boolean canSupportAssistedDialing) { - Assert.isNotNull(details); - Assert.isNotNull(contact); + Intent intent = new Intent(context, CallDetailsActivity.class); + ProtoParsers.put(intent, EXTRA_CONTACT, Assert.isNotNull(contact)); + ProtoParsers.put(intent, EXTRA_CALL_DETAILS_ENTRIES, Assert.isNotNull(details)); + intent.putExtra(EXTRA_CAN_REPORT_CALLER_ID, canReportCallerId); + intent.putExtra(EXTRA_CAN_SUPPORT_ASSISTED_DIALING, canSupportAssistedDialing); + return intent; + } + /** + * Returns an {@link Intent} for launching the {@link CallDetailsActivity} from the new call log + * UI. + */ + public static Intent newInstance( + Context context, + CoalescedIds coalescedAnnotatedCallLogIds, + DialerContact contact, + boolean canReportCallerId, + boolean canSupportAssistedDialing) { Intent intent = new Intent(context, CallDetailsActivity.class); - ProtoParsers.put(intent, EXTRA_CONTACT, contact); - ProtoParsers.put(intent, EXTRA_CALL_DETAILS_ENTRIES, details); + ProtoParsers.put(intent, EXTRA_CONTACT, Assert.isNotNull(contact)); + ProtoParsers.put( + intent, EXTRA_COALESCED_CALL_LOG_IDS, Assert.isNotNull(coalescedAnnotatedCallLogIds)); intent.putExtra(EXTRA_CAN_REPORT_CALLER_ID, canReportCallerId); intent.putExtra(EXTRA_CAN_SUPPORT_ASSISTED_DIALING, canSupportAssistedDialing); return intent; @@ -166,10 +198,30 @@ public class CallDetailsActivity extends AppCompatActivity { } private void onHandleIntent(Intent intent) { + boolean hasCallDetailsEntries = intent.hasExtra(EXTRA_CALL_DETAILS_ENTRIES); + boolean hasCoalescedCallLogIds = intent.hasExtra(EXTRA_COALESCED_CALL_LOG_IDS); + Assert.checkArgument( + (hasCallDetailsEntries && !hasCoalescedCallLogIds) + || (!hasCallDetailsEntries && hasCoalescedCallLogIds), + "One and only one of EXTRA_CALL_DETAILS_ENTRIES and EXTRA_COALESCED_CALL_LOG_IDS " + + "can be included in the intent."); + contact = ProtoParsers.getTrusted(intent, EXTRA_CONTACT, DialerContact.getDefaultInstance()); - entries = - ProtoParsers.getTrusted( - intent, EXTRA_CALL_DETAILS_ENTRIES, CallDetailsEntries.getDefaultInstance()); + if (hasCallDetailsEntries) { + entries = + ProtoParsers.getTrusted( + intent, EXTRA_CALL_DETAILS_ENTRIES, CallDetailsEntries.getDefaultInstance()); + } else { + entries = CallDetailsEntries.getDefaultInstance(); + coalescedCallLogIds = + Optional.of( + ProtoParsers.getTrusted( + intent, EXTRA_COALESCED_CALL_LOG_IDS, CoalescedIds.getDefaultInstance())); + getLoaderManager() + .initLoader( + CALL_DETAILS_LOADER_ID, /* args = */ null, new CallDetailsLoaderCallbacks(this)); + } + adapter = new CallDetailsAdapter( this /* context */, @@ -191,6 +243,43 @@ public class CallDetailsActivity extends AppCompatActivity { super.onBackPressed(); } + /** + * {@link LoaderCallbacks} for {@link CallDetailsCursorLoader}, which loads call detail entries + * from {@link AnnotatedCallLog}. + */ + private static final class CallDetailsLoaderCallbacks implements LoaderCallbacks<Cursor> { + private final CallDetailsActivity activity; + + CallDetailsLoaderCallbacks(CallDetailsActivity callDetailsActivity) { + this.activity = callDetailsActivity; + } + + @Override + public Loader<Cursor> onCreateLoader(int id, Bundle args) { + Assert.checkState(activity.coalescedCallLogIds.isPresent()); + + return new CallDetailsCursorLoader(activity, activity.coalescedCallLogIds.get()); + } + + @Override + public void onLoadFinished(Loader<Cursor> loader, Cursor data) { + updateCallDetailsEntries(CallDetailsCursorLoader.toCallDetailsEntries(data)); + } + + @Override + public void onLoaderReset(Loader<Cursor> loader) { + updateCallDetailsEntries(CallDetailsEntries.getDefaultInstance()); + } + + private void updateCallDetailsEntries(CallDetailsEntries newEntries) { + activity.entries = newEntries; + activity.adapter.updateCallDetailsEntries(newEntries.getEntriesList()); + EnrichedCallComponent.get(activity) + .getEnrichedCallManager() + .requestAllHistoricalData(activity.contact.getNumber(), newEntries); + } + } + /** Delete specified calls from the call log. */ private static class DeleteCallsTask extends AsyncTask<Void, Void, Void> { // Use a weak reference to hold the Activity so that there is no memory leak. |