summaryrefslogtreecommitdiffstats
path: root/java/com/android/dialer/app/calllog/CallLogAdapter.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/dialer/app/calllog/CallLogAdapter.java')
-rw-r--r--java/com/android/dialer/app/calllog/CallLogAdapter.java101
1 files changed, 100 insertions, 1 deletions
diff --git a/java/com/android/dialer/app/calllog/CallLogAdapter.java b/java/com/android/dialer/app/calllog/CallLogAdapter.java
index 301fc009e..06f48aa20 100644
--- a/java/com/android/dialer/app/calllog/CallLogAdapter.java
+++ b/java/com/android/dialer/app/calllog/CallLogAdapter.java
@@ -17,6 +17,7 @@
package com.android.dialer.app.calllog;
import android.app.Activity;
+import android.content.ContentUris;
import android.content.res.Resources;
import android.database.Cursor;
import android.net.Uri;
@@ -38,7 +39,12 @@ import android.telecom.PhoneAccountHandle;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
+import android.util.SparseBooleanArray;
+import android.view.ActionMode;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import com.android.contacts.common.ContactsUtils;
@@ -58,6 +64,7 @@ import com.android.dialer.calldetails.nano.CallDetailsEntries.CallDetailsEntry;
import com.android.dialer.calllogutils.PhoneAccountUtils;
import com.android.dialer.calllogutils.PhoneCallDetails;
import com.android.dialer.common.Assert;
+import com.android.dialer.common.ConfigProviderBindings;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.AsyncTaskExecutor;
import com.android.dialer.common.concurrent.AsyncTaskExecutors;
@@ -65,6 +72,9 @@ import com.android.dialer.enrichedcall.EnrichedCallCapabilities;
import com.android.dialer.enrichedcall.EnrichedCallComponent;
import com.android.dialer.enrichedcall.EnrichedCallManager;
import com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult;
+import com.android.dialer.lightbringer.Lightbringer;
+import com.android.dialer.lightbringer.LightbringerComponent;
+import com.android.dialer.lightbringer.LightbringerListener;
import com.android.dialer.logging.Logger;
import com.android.dialer.logging.nano.DialerImpression;
import com.android.dialer.phonenumbercache.CallLogQuery;
@@ -80,7 +90,7 @@ import java.util.Set;
/** Adapter class to fill in data for the Call Log. */
public class CallLogAdapter extends GroupingListAdapter
- implements GroupCreator, OnVoicemailDeletedListener {
+ implements GroupCreator, OnVoicemailDeletedListener, LightbringerListener {
// Types of activities the call log adapter is used for
public static final int ACTIVITY_TYPE_CALL_LOG = 1;
@@ -118,6 +128,58 @@ public class CallLogAdapter extends GroupingListAdapter
private long mCurrentlyExpandedRowId = NO_EXPANDED_LIST_ITEM;
private final CallLogAlertManager mCallLogAlertManager;
+
+ public static ActionMode mActionMode = null;
+ private final SparseBooleanArray selectedItems = new SparseBooleanArray();
+
+ private final ActionMode.Callback mActionModeCallback =
+ new ActionMode.Callback() {
+
+ // Called when the action mode is created; startActionMode() was called
+ @Override
+ public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+ mActionMode = mode;
+ // Inflate a menu resource providing context menu items
+ MenuInflater inflater = mode.getMenuInflater();
+ inflater.inflate(R.menu.actionbar_delete, menu);
+ return true;
+ }
+
+ // Called each time the action mode is shown. Always called after onCreateActionMode, but
+ // may be called multiple times if the mode is invalidated.
+ @Override
+ public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+ return false; // Return false if nothing is done
+ }
+
+ // Called when the user selects a contextual menu item
+ @Override
+ public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+ return false;
+ }
+
+ // Called when the user exits the action mode
+ @Override
+ public void onDestroyActionMode(ActionMode mode) {
+ selectedItems.clear();
+ mActionMode = null;
+ notifyDataSetChanged();
+ }
+ };
+
+ private final View.OnLongClickListener mLongPressListener =
+ new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ if (ConfigProviderBindings.get(v.getContext())
+ .getBoolean("enable_call_log_multiselect", false)) {
+ v.startActionMode(mActionModeCallback);
+ return false;
+ }
+ return true;
+ }
+ };
+
/** The OnClickListener used to expand or collapse the action buttons of a call log entry. */
private final View.OnClickListener mExpandCollapseListener =
new View.OnClickListener() {
@@ -127,6 +189,20 @@ public class CallLogAdapter extends GroupingListAdapter
if (viewHolder == null) {
return;
}
+ if (mActionMode != null && viewHolder.voicemailUri != null) {
+ if (selectedItems.get((int) ContentUris.parseId(Uri.parse(viewHolder.voicemailUri)))) {
+ selectedItems.delete((int) ContentUris.parseId(Uri.parse(viewHolder.voicemailUri)));
+ viewHolder.checkBoxView.setVisibility(View.GONE);
+ viewHolder.quickContactView.setVisibility(View.VISIBLE);
+ } else {
+ viewHolder.quickContactView.setVisibility(View.GONE);
+ viewHolder.checkBoxView.setVisibility(View.VISIBLE);
+ selectedItems.put(
+ (int) ContentUris.parseId(Uri.parse(viewHolder.voicemailUri)), true);
+ }
+ mActionMode.setTitle(Integer.toString(selectedItems.size()));
+ return;
+ }
if (mVoicemailPlaybackPresenter != null) {
// Always reset the voicemail playback state on expand or collapse.
@@ -313,10 +389,12 @@ public class CallLogAdapter extends GroupingListAdapter
}
mContactsPreferences.refreshValue(ContactsPreferences.DISPLAY_ORDER_KEY);
mIsSpamEnabled = Spam.get(mActivity).isSpamEnabled();
+ getLightbringer().registerListener(this);
notifyDataSetChanged();
}
public void onPause() {
+ getLightbringer().unregisterListener(this);
pauseCache();
for (Uri uri : mHiddenItemUris) {
CallLogAsyncTaskUtil.deleteVoicemail(mActivity, uri, null);
@@ -365,6 +443,7 @@ public class CallLogAdapter extends GroupingListAdapter
mActivity,
mBlockReportSpamListener,
mExpandCollapseListener,
+ mLongPressListener,
mCallLogCache,
mCallLogListItemHelper,
mVoicemailPlaybackPresenter);
@@ -471,6 +550,7 @@ public class CallLogAdapter extends GroupingListAdapter
setCallDetailsEntriesHistoryResults(
views.number, callDetailsEntries, getAllHistoricalData(views.number, callDetailsEntries));
views.setDetailedPhoneDetails(callDetailsEntries);
+ views.lightbringerReady = getLightbringer().isReachable(mActivity, views.number);
final AsyncTask<Void, Void, Boolean> loadDataTask =
new AsyncTask<Void, Void, Boolean>() {
@Override
@@ -741,6 +821,15 @@ public class CallLogAdapter extends GroupingListAdapter
views.workIconView.setVisibility(
details.contactUserType == ContactsUtils.USER_TYPE_WORK ? View.VISIBLE : View.GONE);
+ if (views.voicemailUri != null
+ && selectedItems.get((int) ContentUris.parseId(Uri.parse(views.voicemailUri)))) {
+ views.checkBoxView.setVisibility(View.VISIBLE);
+ views.quickContactView.setVisibility(View.GONE);
+ } else if (views.voicemailUri != null) {
+ views.checkBoxView.setVisibility(View.GONE);
+ views.quickContactView.setVisibility(View.VISIBLE);
+ }
+
mCallLogListItemHelper.setPhoneCallDetails(views, details);
if (mCurrentlyExpandedRowId == views.rowId) {
// In case ViewHolders were added/removed, update the expanded position if the rowIds
@@ -997,6 +1086,16 @@ public class CallLogAdapter extends GroupingListAdapter
return EnrichedCallComponent.get(mActivity).getEnrichedCallManager();
}
+ @NonNull
+ private Lightbringer getLightbringer() {
+ return LightbringerComponent.get(mActivity).getLightbringer();
+ }
+
+ @Override
+ public void onLightbringerStateChanged() {
+ notifyDataSetChanged();
+ }
+
/** Interface used to initiate a refresh of the content. */
public interface CallFetcher {