summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/calldetails/CallDetailsActivity.java
diff options
context:
space:
mode:
authorlinyuh <linyuh@google.com>2017-12-13 10:12:56 -0800
committerCopybara-Service <copybara-piper@google.com>2017-12-13 10:13:59 -0800
commita98ac7f0b74d6f993e9ef2a7f1ad094d1027d712 (patch)
treec9930d95ee9a8fb61d26ae66afe42d7d3f47b791 /java/com/android/dialer/calldetails/CallDetailsActivity.java
parentecfba0c3588bdbd77c5bda509b66bc621837986b (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.java107
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.