From b51f11cde8d1455f6dc1a75a147306fcf86c730f Mon Sep 17 00:00:00 2001 From: Danny Baumann Date: Wed, 27 Jun 2018 15:53:56 +0200 Subject: Re-add call statistics. Author: Danny Baumann Date: Mon Nov 11 15:36:21 2019 +0100 Fix crash in call stats. We fed color resources into LinearColorBar now. Change-Id: Ica6870fb6af8b982bc2710e7b63092c513fa4755 Author: Danny Baumann Date: Mon Dec 2 09:34:22 2019 +0100 Beautify call stats details category headers. Make them consistent with how pref category headers are displayed. Change-Id: I4ee8bb2dae11970051552d14df2d58d7ab6a3fdf Change-Id: I9f2b6e912ca69a5aa7a1790bed06304ee953e752 --- .../dialer/calllogutils/CallTypeIconsView.java | 6 +- .../dialer/calllogutils/FilterSpinnerHelper.java | 149 +++++++++++++++++++++ .../calllogutils/PhoneNumberDisplayUtil.java | 2 +- .../res/layout/call_log_filter_spinner_item.xml | 39 ++++++ .../res/layout/call_log_filter_spinners.xml | 22 +++ .../dialer/calllogutils/res/values/cm_strings.xml | 26 ++++ .../dialer/calllogutils/res/values/colors.xml | 10 +- 7 files changed, 250 insertions(+), 4 deletions(-) create mode 100644 java/com/android/dialer/calllogutils/FilterSpinnerHelper.java create mode 100644 java/com/android/dialer/calllogutils/res/layout/call_log_filter_spinner_item.xml create mode 100644 java/com/android/dialer/calllogutils/res/layout/call_log_filter_spinners.xml create mode 100644 java/com/android/dialer/calllogutils/res/values/cm_strings.xml (limited to 'java/com/android/dialer/calllogutils') diff --git a/java/com/android/dialer/calllogutils/CallTypeIconsView.java b/java/com/android/dialer/calllogutils/CallTypeIconsView.java index 19c30c575..79d1e6e58 100644 --- a/java/com/android/dialer/calllogutils/CallTypeIconsView.java +++ b/java/com/android/dialer/calllogutils/CallTypeIconsView.java @@ -290,13 +290,15 @@ public class CallTypeIconsView extends View { int iconId = R.drawable.quantum_ic_call_received_white_24; Drawable drawable = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId); incoming = drawable.mutate(); - incoming.setColorFilter(r.getColor(R.color.dialer_call_green), PorterDuff.Mode.MULTIPLY); + incoming.setColorFilter(r.getColor(R.color.answered_incoming_call), + PorterDuff.Mode.MULTIPLY); // Create a rotated instance of the call arrow for outgoing calls. iconId = R.drawable.quantum_ic_call_made_white_24; drawable = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId); outgoing = drawable.mutate(); - outgoing.setColorFilter(r.getColor(R.color.dialer_call_green), PorterDuff.Mode.MULTIPLY); + outgoing.setColorFilter(r.getColor(R.color.answered_outgoing_call), + PorterDuff.Mode.MULTIPLY); // Need to make a copy of the arrow drawable, otherwise the same instance colored // above will be recolored here. diff --git a/java/com/android/dialer/calllogutils/FilterSpinnerHelper.java b/java/com/android/dialer/calllogutils/FilterSpinnerHelper.java new file mode 100644 index 000000000..a6ae5528b --- /dev/null +++ b/java/com/android/dialer/calllogutils/FilterSpinnerHelper.java @@ -0,0 +1,149 @@ +/* + * Copyright (C) 2014 The CyanogenMod Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ +package com.android.dialer.calllogutils; + +import android.content.Context; +import android.provider.CallLog; +import android.telecom.PhoneAccountHandle; +import android.telecom.TelecomManager; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Spinner; + +import com.android.dialer.R; +import com.android.dialer.util.PermissionsUtil; +import java.util.ArrayList; +import java.util.List; + +public class FilterSpinnerHelper implements AdapterView.OnItemSelectedListener { + private static String TAG = FilterSpinnerHelper.class.getSimpleName(); + + public interface OnFilterChangedListener { + void onFilterChanged(PhoneAccountHandle account, int callType); + } + + private OnFilterChangedListener mListener; + private Spinner mAccountSpinner; + private ArrayAdapter mAccountAdapter; + private Spinner mTypeSpinner; + private ArrayAdapter mTypeAdapter; + + public FilterSpinnerHelper(View rootView, boolean includeVoicemailType, + OnFilterChangedListener listener) { + mListener = listener; + + mAccountAdapter = createAccountAdapter(rootView.getContext()); + mAccountSpinner = initSpinner(rootView, R.id.filter_account_spinner, mAccountAdapter); + + mTypeAdapter = createTypeAdapter(rootView.getContext(), includeVoicemailType); + mTypeSpinner = initSpinner(rootView, R.id.filter_status_spinner, mTypeAdapter); + } + + @Override + public void onItemSelected(AdapterView parent, View view, int pos, long id) { + int selectedAccountPos = Math.max(mAccountSpinner.getSelectedItemPosition(), 0); + int selectedTypePos = Math.max(mTypeSpinner.getSelectedItemPosition(), 0); + PhoneAccountHandle selectedAccount = mAccountAdapter.getItem(selectedAccountPos).account; + int selectedType = mTypeAdapter.getItem(selectedTypePos).value; + mListener.onFilterChanged(selectedAccount, selectedType); + } + + @Override + public void onNothingSelected(AdapterView parent) { + } + + private Spinner initSpinner(View rootView, int spinnerResId, ArrayAdapter adapter) { + Spinner spinner = rootView.findViewById(spinnerResId); + if (spinner == null) { + throw new IllegalArgumentException("Could not find spinner " + + rootView.getContext().getResources().getResourceName(spinnerResId)); + } + spinner.setAdapter(adapter); + spinner.setOnItemSelectedListener(this); + if (adapter.getCount() <= 1) { + spinner.setVisibility(View.GONE); + } + return spinner; + } + + private ArrayAdapter createAccountAdapter(Context context) { + ArrayList items = new ArrayList<>(); + items.add(new AccountItem(null, context.getString(R.string.call_log_show_all_accounts))); + if (PermissionsUtil.hasPermission(context, android.Manifest.permission.READ_PHONE_STATE)) { + TelecomManager tm = (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE); + for (PhoneAccountHandle account : tm.getCallCapablePhoneAccounts()) { + String displayName = PhoneAccountUtils.getAccountLabel(context, account); + if (!TextUtils.isEmpty(displayName)) { + items.add(new AccountItem(account, displayName)); + } + } + } + + return new ArrayAdapter(context, R.layout.call_log_filter_spinner_item, items); + } + + private ArrayAdapter createTypeAdapter(Context context, boolean includeVoicemail) { + ArrayList items = new ArrayList<>(); + items.add(new TypeItem(-1, context.getString(R.string.call_log_all_calls_header))); + items.add(new TypeItem(CallLog.Calls.INCOMING_TYPE, + context.getString(R.string.call_log_incoming_header))); + items.add(new TypeItem(CallLog.Calls.OUTGOING_TYPE, + context.getString(R.string.call_log_outgoing_header))); + items.add(new TypeItem(CallLog.Calls.MISSED_TYPE, + context.getString(R.string.call_log_missed_header))); + items.add(new TypeItem(CallLog.Calls.BLOCKED_TYPE, + context.getString(R.string.call_log_blacklist_header))); + if (includeVoicemail) { + items.add(new TypeItem(CallLog.Calls.VOICEMAIL_TYPE, + context.getString(R.string.call_log_voicemail_header))); + } + + return new ArrayAdapter(context, R.layout.call_log_filter_spinner_item, items); + } + + private final class AccountItem { + public final PhoneAccountHandle account; + public final String label; + + private AccountItem(PhoneAccountHandle account, String label) { + this.account = account; + this.label = label; + } + + @Override + public String toString() { + return label; + } + } + + private final class TypeItem { + public final int value; + public final String label; + + private TypeItem(int value, String label) { + this.value = value; + this.label = label; + } + + @Override + public String toString() { + return label; + } + } +} diff --git a/java/com/android/dialer/calllogutils/PhoneNumberDisplayUtil.java b/java/com/android/dialer/calllogutils/PhoneNumberDisplayUtil.java index 6fe3a82c8..6509af3e1 100644 --- a/java/com/android/dialer/calllogutils/PhoneNumberDisplayUtil.java +++ b/java/com/android/dialer/calllogutils/PhoneNumberDisplayUtil.java @@ -64,7 +64,7 @@ public class PhoneNumberDisplayUtil { * @param number the number to display * @param formattedNumber the formatted number if available, may be null */ - static CharSequence getDisplayNumber( + public static CharSequence getDisplayNumber( Context context, CharSequence number, int presentation, diff --git a/java/com/android/dialer/calllogutils/res/layout/call_log_filter_spinner_item.xml b/java/com/android/dialer/calllogutils/res/layout/call_log_filter_spinner_item.xml new file mode 100644 index 000000000..d7fdb4654 --- /dev/null +++ b/java/com/android/dialer/calllogutils/res/layout/call_log_filter_spinner_item.xml @@ -0,0 +1,39 @@ + + + diff --git a/java/com/android/dialer/calllogutils/res/layout/call_log_filter_spinners.xml b/java/com/android/dialer/calllogutils/res/layout/call_log_filter_spinners.xml new file mode 100644 index 000000000..ecaf1d10c --- /dev/null +++ b/java/com/android/dialer/calllogutils/res/layout/call_log_filter_spinners.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/java/com/android/dialer/calllogutils/res/values/cm_strings.xml b/java/com/android/dialer/calllogutils/res/values/cm_strings.xml new file mode 100644 index 000000000..d30aa1774 --- /dev/null +++ b/java/com/android/dialer/calllogutils/res/values/cm_strings.xml @@ -0,0 +1,26 @@ + + + + All accounts + All calls + Incoming calls only + Outgoing calls only + Missed calls only + Calls with voicemail only + Blocked calls only + diff --git a/java/com/android/dialer/calllogutils/res/values/colors.xml b/java/com/android/dialer/calllogutils/res/values/colors.xml index 3a9e3ae8a..40a522b56 100644 --- a/java/com/android/dialer/calllogutils/res/values/colors.xml +++ b/java/com/android/dialer/calllogutils/res/values/colors.xml @@ -15,4 +15,12 @@ ~ limitations under the License --> - \ No newline at end of file + + #C53929 + + #00a8ff + + #00c853 + + @color/dialer_secondary_text_color + -- cgit v1.2.3