diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2017-07-11 07:30:26 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2017-07-11 07:30:26 +0000 |
commit | d7380586250c1926a685636eedc5ad139657f95e (patch) | |
tree | 67496cf4485559ded1a2b4b0c158380be0858656 | |
parent | 917a16680022efb427836b375c70f9ca51b3961e (diff) | |
parent | 9ef68bd518def395a5b9cbc8b8d4646c9d27e8d6 (diff) | |
download | android_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
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); |