summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2017-07-11 07:30:26 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-07-11 07:30:26 +0000
commitd7380586250c1926a685636eedc5ad139657f95e (patch)
tree67496cf4485559ded1a2b4b0c158380be0858656
parent917a16680022efb427836b375c70f9ca51b3961e (diff)
parent9ef68bd518def395a5b9cbc8b8d4646c9d27e8d6 (diff)
downloadandroid_packages_apps_Dialer-d7380586250c1926a685636eedc5ad139657f95e.tar.gz
android_packages_apps_Dialer-d7380586250c1926a685636eedc5ad139657f95e.tar.bz2
android_packages_apps_Dialer-d7380586250c1926a685636eedc5ad139657f95e.zip
release-request-5ee66a34-3e58-4de0-ba73-1f49074ee497-for-git_oc-mr1-release-4169335 snap-temp-L20600000081126177
Change-Id: I040cac3494f4de79b5566189af14fe13607b2fdc
-rw-r--r--AndroidManifest.xml4
-rw-r--r--java/com/android/contacts/common/compat/telecom/TelecomManagerCompat.java5
-rw-r--r--java/com/android/contacts/common/lettertiles/LetterTileDrawable.java122
-rw-r--r--java/com/android/dialer/app/calllog/CallLogAdapter.java4
-rw-r--r--java/com/android/dialer/app/calllog/CallLogFragment.java27
-rw-r--r--java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java10
-rw-r--r--java/com/android/dialer/backup/DialerBackupAgent.java148
-rw-r--r--java/com/android/dialer/binary/google/AndroidManifest.xml4
-rw-r--r--java/com/android/dialer/callintent/CallIntentBuilder.java7
-rw-r--r--java/com/android/incallui/StatusBarNotifier.java19
-rw-r--r--java/com/android/incallui/call/TelecomAdapter.java4
-rw-r--r--java/com/android/incallui/disconnectdialog/EnableWifiCallingPrompt.java2
-rw-r--r--java/com/android/incallui/disconnectdialog/VideoCallNotAvailablePrompt.java5
-rw-r--r--java/com/android/voicemail/impl/AndroidManifest.xml6
-rw-r--r--java/com/android/voicemail/impl/VoicemailClientReceiver.java6
15 files changed, 177 insertions, 196 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 65789b4e0..79912dc66 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -16,8 +16,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
coreApp="true"
package="com.android.dialer"
- android:versionCode="150000"
- android:versionName="11.0">
+ android:versionCode="160000"
+ android:versionName="12.0">
<uses-sdk
android:minSdkVersion="23"
diff --git a/java/com/android/contacts/common/compat/telecom/TelecomManagerCompat.java b/java/com/android/contacts/common/compat/telecom/TelecomManagerCompat.java
index e6f424788..172fb11e3 100644
--- a/java/com/android/contacts/common/compat/telecom/TelecomManagerCompat.java
+++ b/java/com/android/contacts/common/compat/telecom/TelecomManagerCompat.java
@@ -35,6 +35,11 @@ public class TelecomManagerCompat {
public static final String EXTRA_HANDOVER_VIDEO_STATE =
"android.telecom.extra.HANDOVER_VIDEO_STATE";
+ // This is a hidden constant in android.telecom.DisconnectCause. Telecom sets this as a disconnect
+ // reason if it wants us to prompt the user that the video call is not available.
+ // TODO(wangqi): Reference it to constant in android.telecom.DisconnectCause.
+ public static final String REASON_IMS_ACCESS_BLOCKED = "REASON_IMS_ACCESS_BLOCKED";
+
/**
* Returns the current SIM call manager. Apps must be prepared for this method to return null,
* indicating that there currently exists no registered SIM call manager.
diff --git a/java/com/android/contacts/common/lettertiles/LetterTileDrawable.java b/java/com/android/contacts/common/lettertiles/LetterTileDrawable.java
index 5c401fe38..73809c467 100644
--- a/java/com/android/contacts/common/lettertiles/LetterTileDrawable.java
+++ b/java/com/android/contacts/common/lettertiles/LetterTileDrawable.java
@@ -34,7 +34,6 @@ import android.support.annotation.Nullable;
import android.telecom.TelecomManager;
import android.text.TextUtils;
import com.android.contacts.common.R;
-import com.android.contacts.common.lettertiles.LetterTileDrawable.ContactType;
import com.android.dialer.common.Assert;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -88,24 +87,24 @@ public class LetterTileDrawable extends Drawable {
private static final float VECTOR_ICON_SCALE = 0.7f;
/** Reusable components to avoid new allocations */
- private static final Paint sPaint = new Paint();
+ private final Paint mPaint = new Paint();
+
+ private final Rect mRect = new Rect();
+ private final char[] mFirstChar = new char[1];
- private static final Rect sRect = new Rect();
- private static final char[] sFirstChar = new char[1];
/** Letter tile */
- private static TypedArray sColors;
-
- private static int sSpamColor;
- private static int sDefaultColor;
- private static int sTileFontColor;
- private static float sLetterToTileRatio;
- private static Drawable sDefaultPersonAvatar;
- private static Drawable sDefaultBusinessAvatar;
- private static Drawable sDefaultVoicemailAvatar;
- private static Drawable sDefaultSpamAvatar;
- private static Drawable sDefaultConferenceAvatar;
-
- private final Paint mPaint;
+ @NonNull private final TypedArray mColors;
+
+ private final int mSpamColor;
+ private final int mDefaultColor;
+ private final int mTileFontColor;
+ private final float mLetterToTileRatio;
+ @NonNull private final Drawable mDefaultPersonAvatar;
+ @NonNull private final Drawable mDefaultBusinessAvatar;
+ @NonNull private final Drawable mDefaultVoicemailAvatar;
+ @NonNull private final Drawable mDefaultSpamAvatar;
+ @NonNull private final Drawable mDefaultConferenceAvatar;
+
@ContactType private int mContactType = TYPE_DEFAULT;
private float mScale = 1.0f;
private float mOffset = 0.0f;
@@ -117,33 +116,25 @@ public class LetterTileDrawable extends Drawable {
private String mDisplayName;
public LetterTileDrawable(final Resources res) {
- if (sColors == null) {
- sColors = res.obtainTypedArray(R.array.letter_tile_colors);
- sSpamColor = res.getColor(R.color.spam_contact_background);
- sDefaultColor = res.getColor(R.color.letter_tile_default_color);
- sTileFontColor = res.getColor(R.color.letter_tile_font_color);
- sLetterToTileRatio = res.getFraction(R.dimen.letter_to_tile_ratio, 1, 1);
- sDefaultPersonAvatar =
- res.getDrawable(R.drawable.product_logo_avatar_anonymous_white_color_120, null);
- Assert.isNotNull(sDefaultPersonAvatar, "sDefaultPersonAvatar is null");
- sDefaultBusinessAvatar = res.getDrawable(R.drawable.quantum_ic_business_vd_theme_24, null);
- Assert.isNotNull(sDefaultBusinessAvatar, "sDefaultBusinessAvatar is null");
- sDefaultVoicemailAvatar = res.getDrawable(R.drawable.quantum_ic_voicemail_vd_theme_24, null);
- Assert.isNotNull(sDefaultVoicemailAvatar, "sDefaultVoicemailAvatar is null");
- sDefaultSpamAvatar = res.getDrawable(R.drawable.quantum_ic_report_vd_theme_24, null);
- Assert.isNotNull(sDefaultSpamAvatar, "sDefaultSpamAvatar is null");
- sDefaultConferenceAvatar = res.getDrawable(R.drawable.quantum_ic_group_vd_theme_24, null);
- Assert.isNotNull(sDefaultConferenceAvatar, "sDefaultConferenceAvatar is null");
-
- sPaint.setTypeface(
- Typeface.create(res.getString(R.string.letter_tile_letter_font_family), Typeface.NORMAL));
- sPaint.setTextAlign(Align.CENTER);
- sPaint.setAntiAlias(true);
- }
- mPaint = new Paint();
+ mColors = res.obtainTypedArray(R.array.letter_tile_colors);
+ mSpamColor = res.getColor(R.color.spam_contact_background);
+ mDefaultColor = res.getColor(R.color.letter_tile_default_color);
+ mTileFontColor = res.getColor(R.color.letter_tile_font_color);
+ mLetterToTileRatio = res.getFraction(R.dimen.letter_to_tile_ratio, 1, 1);
+ mDefaultPersonAvatar =
+ res.getDrawable(R.drawable.product_logo_avatar_anonymous_white_color_120, null);
+ mDefaultBusinessAvatar = res.getDrawable(R.drawable.quantum_ic_business_vd_theme_24, null);
+ mDefaultVoicemailAvatar = res.getDrawable(R.drawable.quantum_ic_voicemail_vd_theme_24, null);
+ mDefaultSpamAvatar = res.getDrawable(R.drawable.quantum_ic_report_vd_theme_24, null);
+ mDefaultConferenceAvatar = res.getDrawable(R.drawable.quantum_ic_group_vd_theme_24, null);
+
+ mPaint.setTypeface(
+ Typeface.create(res.getString(R.string.letter_tile_letter_font_family), Typeface.NORMAL));
+ mPaint.setTextAlign(Align.CENTER);
+ mPaint.setAntiAlias(true);
mPaint.setFilterBitmap(true);
mPaint.setDither(true);
- mColor = sDefaultColor;
+ mColor = mDefaultColor;
}
private Rect getScaledBounds(float scale, float offset) {
@@ -165,20 +156,20 @@ public class LetterTileDrawable extends Drawable {
switch (contactType) {
case TYPE_BUSINESS:
mScale = VECTOR_ICON_SCALE;
- return sDefaultBusinessAvatar;
+ return mDefaultBusinessAvatar;
case TYPE_VOICEMAIL:
mScale = VECTOR_ICON_SCALE;
- return sDefaultVoicemailAvatar;
+ return mDefaultVoicemailAvatar;
case TYPE_SPAM:
mScale = VECTOR_ICON_SCALE;
- return sDefaultSpamAvatar;
+ return mDefaultSpamAvatar;
case TYPE_CONFERENCE:
mScale = VECTOR_ICON_SCALE;
- return sDefaultConferenceAvatar;
+ return mDefaultConferenceAvatar;
case TYPE_PERSON:
case TYPE_GENERIC_AVATAR:
default:
- return sDefaultPersonAvatar;
+ return mDefaultPersonAvatar;
}
}
@@ -206,39 +197,38 @@ public class LetterTileDrawable extends Drawable {
private void drawLetterTile(final Canvas canvas) {
// Draw background color.
- sPaint.setColor(mColor);
- sPaint.setAlpha(mPaint.getAlpha());
+ mPaint.setColor(mColor);
final Rect bounds = getBounds();
final int minDimension = Math.min(bounds.width(), bounds.height());
if (mIsCircle) {
- canvas.drawCircle(bounds.centerX(), bounds.centerY(), minDimension / 2, sPaint);
+ canvas.drawCircle(bounds.centerX(), bounds.centerY(), minDimension / 2, mPaint);
} else {
- canvas.drawRect(bounds, sPaint);
+ canvas.drawRect(bounds, mPaint);
}
// Draw letter/digit only if the first character is an english letter or there's a override
if (mLetter != null) {
// Draw letter or digit.
- sFirstChar[0] = mLetter;
+ mFirstChar[0] = mLetter;
// Scale text by canvas bounds and user selected scaling factor
- sPaint.setTextSize(mScale * sLetterToTileRatio * minDimension);
- sPaint.getTextBounds(sFirstChar, 0, 1, sRect);
- sPaint.setTypeface(Typeface.create("sans-serif", Typeface.NORMAL));
- sPaint.setColor(sTileFontColor);
- sPaint.setAlpha(ALPHA);
+ mPaint.setTextSize(mScale * mLetterToTileRatio * minDimension);
+ mPaint.getTextBounds(mFirstChar, 0, 1, mRect);
+ mPaint.setTypeface(Typeface.create("sans-serif", Typeface.NORMAL));
+ mPaint.setColor(mTileFontColor);
+ mPaint.setAlpha(ALPHA);
// Draw the letter in the canvas, vertically shifted up or down by the user-defined
// offset
canvas.drawText(
- sFirstChar,
+ mFirstChar,
0,
1,
bounds.centerX(),
- bounds.centerY() + mOffset * bounds.height() - sRect.exactCenterY(),
- sPaint);
+ bounds.centerY() + mOffset * bounds.height() - mRect.exactCenterY(),
+ mPaint);
} else {
// Draw the default image if there is no letter/digit to be drawn
Drawable drawable = getDrawableForContactType(mContactType);
@@ -248,7 +238,7 @@ public class LetterTileDrawable extends Drawable {
}
drawable.setBounds(getScaledBounds(mScale, mOffset));
- drawable.setAlpha(drawable == sDefaultSpamAvatar ? SPAM_ALPHA : ALPHA);
+ drawable.setAlpha(drawable == mDefaultSpamAvatar ? SPAM_ALPHA : ALPHA);
drawable.draw(canvas);
}
}
@@ -265,20 +255,20 @@ public class LetterTileDrawable extends Drawable {
/** Returns a deterministic color based on the provided contact identifier string. */
private int pickColor(final String identifier) {
if (mContactType == TYPE_SPAM) {
- return sSpamColor;
+ return mSpamColor;
}
if (mContactType == TYPE_VOICEMAIL
|| mContactType == TYPE_BUSINESS
|| TextUtils.isEmpty(identifier)) {
- return sDefaultColor;
+ return mDefaultColor;
}
// String.hashCode() implementation is not supposed to change across java versions, so
// this should guarantee the same email address always maps to the same color.
// The email should already have been normalized by the ContactRequest.
- final int color = Math.abs(identifier.hashCode()) % sColors.length();
- return sColors.getColor(color, sDefaultColor);
+ final int color = Math.abs(identifier.hashCode()) % mColors.length();
+ return mColors.getColor(color, mDefaultColor);
}
@Override
@@ -354,7 +344,7 @@ public class LetterTileDrawable extends Drawable {
return this;
}
- public LetterTileDrawable setContactType(@ContactType int contactType) {
+ private LetterTileDrawable setContactType(@ContactType int contactType) {
mContactType = contactType;
return this;
}
diff --git a/java/com/android/dialer/app/calllog/CallLogAdapter.java b/java/com/android/dialer/app/calllog/CallLogAdapter.java
index c4156d5c6..4942184a2 100644
--- a/java/com/android/dialer/app/calllog/CallLogAdapter.java
+++ b/java/com/android/dialer/app/calllog/CallLogAdapter.java
@@ -368,7 +368,9 @@ public class CallLogAdapter extends GroupingListAdapter
}
expandViewHolderActions(viewHolder);
- if (viewHolder.videoCallButtonView.getVisibility() == View.VISIBLE
+ if (viewHolder.videoCallButtonView != null
+ && viewHolder.videoCallButtonView.getVisibility() == View.VISIBLE
+ && LightbringerComponent.get(mActivity).getLightbringer().getPackageName() != null
&& LightbringerComponent.get(mActivity)
.getLightbringer()
.getPackageName()
diff --git a/java/com/android/dialer/app/calllog/CallLogFragment.java b/java/com/android/dialer/app/calllog/CallLogFragment.java
index aa765d90e..369fbbc91 100644
--- a/java/com/android/dialer/app/calllog/CallLogFragment.java
+++ b/java/com/android/dialer/app/calllog/CallLogFragment.java
@@ -20,7 +20,6 @@ import static android.Manifest.permission.READ_CALL_LOG;
import android.app.Activity;
import android.app.Fragment;
-import android.app.KeyguardManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.PackageManager;
@@ -114,7 +113,6 @@ public class CallLogFragment extends Fragment
private CallLogQueryHandler mCallLogQueryHandler;
private boolean mScrollToTop;
private EmptyContentView mEmptyListView;
- private KeyguardManager mKeyguardManager;
private ContactInfoCache mContactInfoCache;
private final OnContactInfoChangedListener mOnContactInfoChangedListener =
new OnContactInfoChangedListener() {
@@ -219,7 +217,6 @@ public class CallLogFragment extends Fragment
final Activity activity = getActivity();
final ContentResolver resolver = activity.getContentResolver();
mCallLogQueryHandler = new CallLogQueryHandler(activity, resolver, this, mLogLimit);
- mKeyguardManager = (KeyguardManager) activity.getSystemService(Context.KEYGUARD_SERVICE);
if (PermissionsUtil.hasCallLogReadPermissions(getContext())) {
resolver.registerContentObserver(CallLog.CONTENT_URI, true, mCallLogObserver);
@@ -432,8 +429,6 @@ public class CallLogFragment extends Fragment
@Override
public void onStop() {
- updateOnTransition();
-
super.onStop();
mAdapter.onStop();
mContactInfoCache.stop();
@@ -516,9 +511,7 @@ public class CallLogFragment extends Fragment
super.setMenuVisibility(menuVisible);
if (mMenuVisible != menuVisible) {
mMenuVisible = menuVisible;
- if (!menuVisible) {
- updateOnTransition();
- } else if (isResumed()) {
+ if (menuVisible && isResumed()) {
refreshData();
}
}
@@ -536,7 +529,6 @@ public class CallLogFragment extends Fragment
fetchCalls();
mCallLogQueryHandler.fetchVoicemailStatus();
mCallLogQueryHandler.fetchMissedCallsUnreadCount();
- updateOnTransition();
mRefreshDataRequired = false;
} else {
// Refresh the display of the existing data to update the timestamp text descriptions.
@@ -544,23 +536,6 @@ public class CallLogFragment extends Fragment
}
}
- /**
- * Updates the voicemail notification state.
- *
- * <p>TODO: Move to CallLogActivity
- */
- private void updateOnTransition() {
- // We don't want to update any call data when keyguard is on because the user has likely not
- // seen the new calls yet.
- // This might be called before onCreate() and thus we need to check null explicitly.
- if (mKeyguardManager != null
- && !mKeyguardManager.inKeyguardRestrictedInputMode()
- && mCallTypeFilter == Calls.VOICEMAIL_TYPE) {
- LogUtil.i("CallLogFragment.updateOnTransition", "clearing all new voicemails");
- CallLogNotificationsService.markAllNewVoicemailsAsOld(getActivity());
- }
- }
-
@Override
public void onEmptyViewActionButtonClicked() {
final Activity activity = getActivity();
diff --git a/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java b/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java
index 893d6bed9..17018b38d 100644
--- a/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java
+++ b/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java
@@ -16,6 +16,7 @@
package com.android.dialer.app.calllog;
+import android.app.KeyguardManager;
import android.content.Intent;
import android.database.ContentObserver;
import android.media.AudioManager;
@@ -132,7 +133,7 @@ public class VisualVoicemailCallLogFragment extends CallLogFragment {
@Override
public void onVisible() {
- LogUtil.enterBlock("VisualVoicemailCallLogFragment.onPageSelected");
+ LogUtil.enterBlock("VisualVoicemailCallLogFragment.onVisible");
super.onVisible();
if (getActivity() != null) {
Intent intent = new Intent(VoicemailContract.ACTION_SYNC_VOICEMAIL);
@@ -145,10 +146,15 @@ public class VisualVoicemailCallLogFragment extends CallLogFragment {
@Override
public void onNotVisible() {
- LogUtil.enterBlock("VisualVoicemailCallLogFragment.onPageUnselected");
+ LogUtil.enterBlock("VisualVoicemailCallLogFragment.onNotVisible");
super.onNotVisible();
if (getActivity() != null) {
getActivity().setVolumeControlStream(AudioManager.USE_DEFAULT_STREAM_TYPE);
+ // onNotVisible will be called in the lock screen when the call ends
+ if (!getActivity().getSystemService(KeyguardManager.class).inKeyguardRestrictedInputMode()) {
+ LogUtil.i("VisualVoicemailCallLogFragment.onNotVisible", "clearing all new voicemails");
+ CallLogNotificationsService.markAllNewVoicemailsAsOld(getActivity());
+ }
}
}
}
diff --git a/java/com/android/dialer/backup/DialerBackupAgent.java b/java/com/android/dialer/backup/DialerBackupAgent.java
index 40de8e2a4..a0baf39f7 100644
--- a/java/com/android/dialer/backup/DialerBackupAgent.java
+++ b/java/com/android/dialer/backup/DialerBackupAgent.java
@@ -35,7 +35,6 @@ import android.telecom.PhoneAccountHandle;
import android.util.Pair;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.dialer.telecom.TelecomUtil;
@@ -96,76 +95,68 @@ public class DialerBackupAgent extends BackupAgent {
public void onFullBackup(FullBackupDataOutput data) throws IOException {
Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_FULL_BACKUP);
LogUtil.i("DialerBackupAgent.onFullBackup", "performing dialer backup");
- boolean autoBackupEnabled =
- ConfigProviderBindings.get(this).getBoolean("enable_autobackup", true);
- boolean vmBackupEnabled = ConfigProviderBindings.get(this).getBoolean("enable_vm_backup", true);
+
List<PhoneAccountHandle> phoneAccountsToArchive =
DialerBackupUtils.getPhoneAccountsToArchive(this);
- if (autoBackupEnabled) {
- if (!maxVoicemailBackupReached && vmBackupEnabled && !phoneAccountsToArchive.isEmpty()) {
- voicemailsBackedupSoFar = 0;
- sizeOfVoicemailsBackedupSoFar = 0;
+ if (!maxVoicemailBackupReached && !phoneAccountsToArchive.isEmpty()) {
+ voicemailsBackedupSoFar = 0;
+ sizeOfVoicemailsBackedupSoFar = 0;
- LogUtil.i("DialerBackupAgent.onFullBackup", "autoBackup is enabled");
- ContentResolver contentResolver = getContentResolver();
- int limit = 1000;
+ LogUtil.i("DialerBackupAgent.onFullBackup", "autoBackup is enabled");
+ ContentResolver contentResolver = getContentResolver();
+ int limit = 1000;
- Uri uri =
- TelecomUtil.getCallLogUri(this)
- .buildUpon()
- .appendQueryParameter(Calls.LIMIT_PARAM_KEY, Integer.toString(limit))
- .build();
+ Uri uri =
+ TelecomUtil.getCallLogUri(this)
+ .buildUpon()
+ .appendQueryParameter(Calls.LIMIT_PARAM_KEY, Integer.toString(limit))
+ .build();
- LogUtil.i("DialerBackupAgent.onFullBackup", "backing up from: " + uri);
+ LogUtil.i("DialerBackupAgent.onFullBackup", "backing up from: " + uri);
- try (Cursor cursor =
- contentResolver.query(
- uri,
- null,
- String.format(
- "(%s = ? AND deleted = 0 AND %s = ? AND ?)",
- Calls.TYPE, Voicemails.SOURCE_PACKAGE),
- new String[] {
- Integer.toString(CallLog.Calls.VOICEMAIL_TYPE),
- VOICEMAIL_SOURCE_PACKAGE,
- DialerBackupUtils.getPhoneAccountClause(phoneAccountsToArchive)
- },
- ORDER_BY_DATE,
- null)) {
+ try (Cursor cursor =
+ contentResolver.query(
+ uri,
+ null,
+ String.format(
+ "(%s = ? AND deleted = 0 AND %s = ? AND ?)",
+ Calls.TYPE, Voicemails.SOURCE_PACKAGE),
+ new String[] {
+ Integer.toString(CallLog.Calls.VOICEMAIL_TYPE),
+ VOICEMAIL_SOURCE_PACKAGE,
+ DialerBackupUtils.getPhoneAccountClause(phoneAccountsToArchive)
+ },
+ ORDER_BY_DATE,
+ null)) {
- if (cursor == null) {
- LogUtil.i("DialerBackupAgent.onFullBackup", "cursor was null");
- return;
- }
+ if (cursor == null) {
+ LogUtil.i("DialerBackupAgent.onFullBackup", "cursor was null");
+ return;
+ }
- LogUtil.i("DialerBackupAgent.onFullBackup", "cursor count: " + cursor.getCount());
- if (cursor.moveToFirst()) {
- int fileNum = 0;
- do {
- backupRow(
- data, cursor, String.format(Locale.US, VOICEMAIL_BACKUP_FILE_FORMAT, fileNum++));
- } while (cursor.moveToNext() && !maxVoicemailBackupReached);
- } else {
- LogUtil.i("DialerBackupAgent.onFullBackup", "cursor.moveToFirst failed");
- }
+ LogUtil.i("DialerBackupAgent.onFullBackup", "cursor count: " + cursor.getCount());
+ if (cursor.moveToFirst()) {
+ int fileNum = 0;
+ do {
+ backupRow(
+ data, cursor, String.format(Locale.US, VOICEMAIL_BACKUP_FILE_FORMAT, fileNum++));
+ } while (cursor.moveToNext() && !maxVoicemailBackupReached);
+ } else {
+ LogUtil.i("DialerBackupAgent.onFullBackup", "cursor.moveToFirst failed");
}
}
- LogUtil.i(
- "DialerBackupAgent.onFullBackup",
- "vm files backed up: %d, vm size backed up:%d, "
- + "max vm backup reached:%b, vm backup enabled:%b phone accounts to archive: %d",
- voicemailsBackedupSoFar,
- sizeOfVoicemailsBackedupSoFar,
- maxVoicemailBackupReached,
- vmBackupEnabled,
- phoneAccountsToArchive.size());
- super.onFullBackup(data);
- Logger.get(this).logImpression(DialerImpression.Type.BACKUP_FULL_BACKED_UP);
- } else {
- Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_BACKUP_DISABLED);
- LogUtil.i("DialerBackupAgent.onFullBackup", "autoBackup is disabled");
}
+ LogUtil.i(
+ "DialerBackupAgent.onFullBackup",
+ "vm files backed up: %d, vm size backed up:%d, "
+ + "max vm backup reached:%b, phone accounts to archive: %d",
+ voicemailsBackedupSoFar,
+ sizeOfVoicemailsBackedupSoFar,
+ maxVoicemailBackupReached,
+ phoneAccountsToArchive.size());
+ super.onFullBackup(data);
+ Logger.get(this).logImpression(DialerImpression.Type.BACKUP_FULL_BACKED_UP);
}
private void backupRow(FullBackupDataOutput data, Cursor cursor, String fileName)
@@ -218,34 +209,25 @@ public class DialerBackupAgent extends BackupAgent {
String fileName = destination.getName();
LogUtil.i("DialerBackupAgent.onRestoreFile", "file name: " + fileName);
- if (ConfigProviderBindings.get(this).getBoolean("enable_autobackup", true)) {
- if (fileName.endsWith(VOICEMAIL_BACKUP_FILE_SUFFIX)
- && ConfigProviderBindings.get(this).getBoolean("enable_vm_restore", true)) {
- if (DialerBackupUtils.canRestoreVoicemails(getContentResolver(), this)) {
- try {
- super.onRestoreFile(data, size, destination, type, mode, mtime);
- restoreVoicemail(destination);
- destination.delete();
- } catch (IOException e) {
- Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_RESTORE_IO_EXCEPTION);
- LogUtil.e(
- "DialerBackupAgent.onRestoreFile",
- "could not restore voicemail - IOException: ",
- e);
- }
- } else {
- LogUtil.i(
- "DialerBackupAgent.onRestoreFile", "build does not support restoring voicemails");
+ if (fileName.endsWith(VOICEMAIL_BACKUP_FILE_SUFFIX)) {
+ if (DialerBackupUtils.canRestoreVoicemails(getContentResolver(), this)) {
+ try {
+ super.onRestoreFile(data, size, destination, type, mode, mtime);
+ restoreVoicemail(destination);
+ destination.delete();
+ } catch (IOException e) {
+ Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_RESTORE_IO_EXCEPTION);
+ LogUtil.e(
+ "DialerBackupAgent.onRestoreFile", "could not restore voicemail - IOException: ", e);
}
-
} else {
- super.onRestoreFile(data, size, destination, type, mode, mtime);
- LogUtil.i("DialerBackupAgent.onRestoreFile", "restored: " + fileName);
- Logger.get(this).logImpression(DialerImpression.Type.BACKUP_RESTORED_FILE);
+ LogUtil.i("DialerBackupAgent.onRestoreFile", "build does not support restoring voicemails");
}
+
} else {
- Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_RESTORE_DISABLED);
- LogUtil.i("DialerBackupAgent.onRestoreFile", "autoBackup is disabled");
+ super.onRestoreFile(data, size, destination, type, mode, mtime);
+ LogUtil.i("DialerBackupAgent.onRestoreFile", "restored: " + fileName);
+ Logger.get(this).logImpression(DialerImpression.Type.BACKUP_RESTORED_FILE);
}
}
diff --git a/java/com/android/dialer/binary/google/AndroidManifest.xml b/java/com/android/dialer/binary/google/AndroidManifest.xml
index e70e390c0..a27056ff5 100644
--- a/java/com/android/dialer/binary/google/AndroidManifest.xml
+++ b/java/com/android/dialer/binary/google/AndroidManifest.xml
@@ -16,8 +16,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
coreApp="true"
package="com.google.android.google_stub_dialer"
- android:versionCode="150000"
- android:versionName="11.0">
+ android:versionCode="160000"
+ android:versionName="12.0">
<uses-sdk
android:minSdkVersion="23"
diff --git a/java/com/android/dialer/callintent/CallIntentBuilder.java b/java/com/android/dialer/callintent/CallIntentBuilder.java
index e5449c804..36ea907ff 100644
--- a/java/com/android/dialer/callintent/CallIntentBuilder.java
+++ b/java/com/android/dialer/callintent/CallIntentBuilder.java
@@ -160,4 +160,11 @@ public class CallIntentBuilder {
public static int getLightbringerButtonAppearInSearchCount() {
return lightbringerButtonAppearInSearchCount;
}
+
+ @VisibleForTesting(otherwise = VisibleForTesting.NONE)
+ public static void clearLightbringerCounts() {
+ lightbringerButtonAppearInCollapsedCallLogItemCount = 0;
+ lightbringerButtonAppearInExpandedCallLogItemCount = 0;
+ lightbringerButtonAppearInSearchCount = 0;
+ }
}
diff --git a/java/com/android/incallui/StatusBarNotifier.java b/java/com/android/incallui/StatusBarNotifier.java
index 458df5149..53017a10e 100644
--- a/java/com/android/incallui/StatusBarNotifier.java
+++ b/java/com/android/incallui/StatusBarNotifier.java
@@ -66,6 +66,7 @@ import com.android.contacts.common.preference.ContactsPreferences;
import com.android.contacts.common.util.BitmapUtil;
import com.android.contacts.common.util.ContactDisplayUtils;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.configprovider.ConfigProviderBindings;
import com.android.dialer.enrichedcall.EnrichedCallManager;
import com.android.dialer.enrichedcall.Session;
import com.android.dialer.multimedia.MultimediaData;
@@ -308,11 +309,19 @@ public class StatusBarNotifier
if (callState == DialerCall.State.INCOMING
|| callState == DialerCall.State.CALL_WAITING
|| isVideoUpgradeRequest) {
- boolean alreadyActive =
- callList.getActiveOrBackgroundCall() != null
- && InCallPresenter.getInstance().isShowingInCallUi();
- notificationType =
- alreadyActive ? NOTIFICATION_INCOMING_CALL_QUIET : NOTIFICATION_INCOMING_CALL;
+ if (ConfigProviderBindings.get(mContext)
+ .getBoolean("quiet_incoming_call_if_ui_showing", true)) {
+ notificationType =
+ InCallPresenter.getInstance().isShowingInCallUi()
+ ? NOTIFICATION_INCOMING_CALL_QUIET
+ : NOTIFICATION_INCOMING_CALL;
+ } else {
+ boolean alreadyActive =
+ callList.getActiveOrBackgroundCall() != null
+ && InCallPresenter.getInstance().isShowingInCallUi();
+ notificationType =
+ alreadyActive ? NOTIFICATION_INCOMING_CALL_QUIET : NOTIFICATION_INCOMING_CALL;
+ }
} else {
notificationType = NOTIFICATION_IN_CALL;
}
diff --git a/java/com/android/incallui/call/TelecomAdapter.java b/java/com/android/incallui/call/TelecomAdapter.java
index 4fc9f81eb..005278bff 100644
--- a/java/com/android/incallui/call/TelecomAdapter.java
+++ b/java/com/android/incallui/call/TelecomAdapter.java
@@ -88,9 +88,13 @@ public class TelecomAdapter implements InCallServiceListener {
List<android.telecom.Call> conferenceable = call.getConferenceableCalls();
if (!conferenceable.isEmpty()) {
call.conference(conferenceable.get(0));
+ // It's safe to clear restrict count for merge action.
+ DialerCall.clearRestrictedCount();
} else {
if (call.getDetails().can(android.telecom.Call.Details.CAPABILITY_MERGE_CONFERENCE)) {
call.mergeConference();
+ // It's safe to clear restrict count for merge action.
+ DialerCall.clearRestrictedCount();
}
}
} else {
diff --git a/java/com/android/incallui/disconnectdialog/EnableWifiCallingPrompt.java b/java/com/android/incallui/disconnectdialog/EnableWifiCallingPrompt.java
index da0c9d6be..a0ca8cd04 100644
--- a/java/com/android/incallui/disconnectdialog/EnableWifiCallingPrompt.java
+++ b/java/com/android/incallui/disconnectdialog/EnableWifiCallingPrompt.java
@@ -41,7 +41,7 @@ public class EnableWifiCallingPrompt implements DisconnectDialog {
@Override
public boolean shouldShow(DisconnectCause disconnectCause) {
String reason = disconnectCause.getReason();
- if (reason.startsWith(REASON_WIFI_ON_BUT_WFC_OFF)) {
+ if (reason != null && reason.startsWith(REASON_WIFI_ON_BUT_WFC_OFF)) {
LogUtil.i(
"EnableWifiCallingPrompt.shouldShowPrompt",
"showing prompt for disconnect cause: %s",
diff --git a/java/com/android/incallui/disconnectdialog/VideoCallNotAvailablePrompt.java b/java/com/android/incallui/disconnectdialog/VideoCallNotAvailablePrompt.java
index 34db976b2..526d45ed7 100644
--- a/java/com/android/incallui/disconnectdialog/VideoCallNotAvailablePrompt.java
+++ b/java/com/android/incallui/disconnectdialog/VideoCallNotAvailablePrompt.java
@@ -24,6 +24,7 @@ import android.support.annotation.NonNull;
import android.telecom.DisconnectCause;
import android.telecom.PhoneAccountHandle;
import android.util.Pair;
+import com.android.contacts.common.compat.telecom.TelecomManagerCompat;
import com.android.dialer.callintent.CallInitiationType;
import com.android.dialer.callintent.CallIntentBuilder;
import com.android.dialer.common.LogUtil;
@@ -33,12 +34,10 @@ import com.android.incallui.call.DialerCall;
/** Prompt user to make voice call if video call is not currently available. */
public class VideoCallNotAvailablePrompt implements DisconnectDialog {
- private static final String REASON_IMS_ACCESS_BLOCKED = "IMS_ACCESS_BLOCKED";
-
@Override
public boolean shouldShow(DisconnectCause disconnectCause) {
if (disconnectCause.getCode() == DisconnectCause.ERROR
- && REASON_IMS_ACCESS_BLOCKED.equals(disconnectCause.getReason())) {
+ && TelecomManagerCompat.REASON_IMS_ACCESS_BLOCKED.equals(disconnectCause.getReason())) {
LogUtil.i(
"VideoCallNotAvailablePrompt.shouldShowPrompt",
"showing prompt for disconnect cause: %s",
diff --git a/java/com/android/voicemail/impl/AndroidManifest.xml b/java/com/android/voicemail/impl/AndroidManifest.xml
index be7dac10d..eabeadbf1 100644
--- a/java/com/android/voicemail/impl/AndroidManifest.xml
+++ b/java/com/android/voicemail/impl/AndroidManifest.xml
@@ -18,11 +18,7 @@
package="com.android.voicemailomtp">
<application
- android:allowBackup="false"
- android:supportsRtl="true"
- android:usesCleartextTraffic="true"
- android:defaultToDeviceProtectedStorage="true"
- android:directBootAware="true">
+ android:supportsRtl="true">
<!-- Causes the "Voicemail" item under "Calls" setting to be hidden. The voicemail module will
be handling the settings. Has no effect before OC where dialer cannot provide voicemail
diff --git a/java/com/android/voicemail/impl/VoicemailClientReceiver.java b/java/com/android/voicemail/impl/VoicemailClientReceiver.java
index 49a55a41b..688636e6c 100644
--- a/java/com/android/voicemail/impl/VoicemailClientReceiver.java
+++ b/java/com/android/voicemail/impl/VoicemailClientReceiver.java
@@ -23,6 +23,7 @@ import android.telecom.PhoneAccountHandle;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.voicemail.VoicemailClient;
+import com.android.voicemail.VoicemailComponent;
import com.android.voicemail.impl.sync.UploadTask;
import com.android.voicemail.impl.sync.VvmAccountManager;
@@ -31,6 +32,11 @@ public class VoicemailClientReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
+ if (!VoicemailComponent.get(context).getVoicemailClient().isVoicemailModuleEnabled()) {
+ LogUtil.i(
+ "VoicemailClientReceiver.onReceive", "module disabled, ignoring " + intent.getAction());
+ return;
+ }
switch (intent.getAction()) {
case VoicemailClient.ACTION_UPLOAD:
doUpload(context);