Dialer: Remove even more dead code [7/x]
* ConfigProvider: Used for testing only
* SpeakEasy and Spam.Promo were disabled once no ConfigProvider was
left
* Buildtype: We only use RELEASE, so remove all code that's not using
it, including everything related to StrictMode
Change-Id: Ib62a2104dadbd7741cdc68046c3dcefc7f123373
diff --git a/java/com/android/contacts/common/list/ContactTileView.java b/java/com/android/contacts/common/list/ContactTileView.java
deleted file mode 100644
index 732cee7..0000000
--- a/java/com/android/contacts/common/list/ContactTileView.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source 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.contacts.common.list;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import com.android.contacts.common.MoreContactUtils;
-import com.android.dialer.callintent.CallInitiationType;
-import com.android.dialer.callintent.CallSpecificAppData;
-import com.android.dialer.common.LogUtil;
-import com.android.dialer.contactphoto.ContactPhotoManager;
-import com.android.dialer.contactphoto.ContactPhotoManager.DefaultImageRequest;
-import com.android.dialer.contacts.resources.R;
-import com.android.dialer.widget.BidiTextView;
-
-/** A ContactTile displays a contact's picture and name */
-public abstract class ContactTileView extends FrameLayout {
-
- private static final String TAG = ContactTileView.class.getSimpleName();
- protected Listener mListener;
- private Uri mLookupUri;
- private ImageView mPhoto;
- private BidiTextView mName;
- private ContactPhotoManager mPhotoManager = null;
-
- public ContactTileView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
- mName = (BidiTextView) findViewById(R.id.contact_tile_name);
- mPhoto = (ImageView) findViewById(R.id.contact_tile_image);
-
- OnClickListener listener = createClickListener();
- setOnClickListener(listener);
- }
-
- protected OnClickListener createClickListener() {
- return new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mListener == null) {
- return;
- }
- CallSpecificAppData callSpecificAppData =
- CallSpecificAppData.newBuilder()
- .setCallInitiationType(CallInitiationType.Type.SPEED_DIAL)
- .setAllowAssistedDialing(true)
- .build();
- mListener.onContactSelected(
- getLookupUri(),
- MoreContactUtils.getTargetRectFromView(ContactTileView.this),
- callSpecificAppData);
- }
- };
- }
-
- public void setPhotoManager(ContactPhotoManager photoManager) {
- mPhotoManager = photoManager;
- }
-
- /**
- * Populates the data members to be displayed from the fields in {@link
- * com.android.contacts.common.list.ContactEntry}
- */
- public void loadFromContact(ContactEntry entry) {
-
- if (entry != null) {
- mName.setText(getNameForView(entry));
- mLookupUri = entry.lookupUri;
-
- setVisibility(View.VISIBLE);
-
- if (mPhotoManager != null) {
- DefaultImageRequest request = getDefaultImageRequest(entry.namePrimary, entry.lookupKey);
- configureViewForImage(entry.photoUri == null);
- if (mPhoto != null) {
- mPhotoManager.loadPhoto(
- mPhoto,
- entry.photoUri,
- getApproximateImageSize(),
- isDarkTheme(),
- isContactPhotoCircular(),
- request);
-
-
- }
- } else {
- LogUtil.w(TAG, "contactPhotoManager not set");
- }
- } else {
- setVisibility(View.INVISIBLE);
- }
- }
-
- public void setListener(Listener listener) {
- mListener = listener;
- }
-
- public Uri getLookupUri() {
- return mLookupUri;
- }
-
- /**
- * Returns the string that should actually be displayed as the contact's name. Subclasses can
- * override this to return formatted versions of the name - i.e. first name only.
- */
- protected String getNameForView(ContactEntry contactEntry) {
- return contactEntry.namePrimary;
- }
-
- /**
- * Implemented by subclasses to estimate the size of the picture. This can return -1 if only a
- * thumbnail is shown anyway
- */
- protected abstract int getApproximateImageSize();
-
- protected abstract boolean isDarkTheme();
-
- /**
- * Implemented by subclasses to reconfigure the view's layout and subviews, based on whether or
- * not the contact has a user-defined photo.
- *
- * @param isDefaultImage True if the contact does not have a user-defined contact photo (which
- * means a default contact image will be applied by the {@link ContactPhotoManager}
- */
- protected void configureViewForImage(boolean isDefaultImage) {
- // No-op by default.
- }
-
- /**
- * Implemented by subclasses to allow them to return a {@link DefaultImageRequest} with the
- * various image parameters defined to match their own layouts.
- *
- * @param displayName The display name of the contact
- * @param lookupKey The lookup key of the contact
- * @return A {@link DefaultImageRequest} object with each field configured by the subclass as
- * desired, or {@code null}.
- */
- protected DefaultImageRequest getDefaultImageRequest(String displayName, String lookupKey) {
- return new DefaultImageRequest(displayName, lookupKey, isContactPhotoCircular());
- }
-
- /**
- * Whether contact photo should be displayed as a circular image. Implemented by subclasses so
- * they can change which drawables to fetch.
- */
- protected boolean isContactPhotoCircular() {
- return true;
- }
-
- public interface Listener {
-
- /** Notification that the contact was selected; no specific action is dictated. */
- void onContactSelected(
- Uri contactLookupUri, Rect viewRect, CallSpecificAppData callSpecificAppData);
-
- /** Notification that the specified number is to be called. */
- void onCallNumberDirectly(String phoneNumber, CallSpecificAppData callSpecificAppData);
- }
-}
diff --git a/java/com/android/contacts/common/list/OnPhoneNumberPickerActionListener.java b/java/com/android/contacts/common/list/OnPhoneNumberPickerActionListener.java
deleted file mode 100644
index c75e0a7..0000000
--- a/java/com/android/contacts/common/list/OnPhoneNumberPickerActionListener.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source 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.contacts.common.list;
-
-import android.app.ActionBar;
-import android.net.Uri;
-import com.android.dialer.callintent.CallSpecificAppData;
-
-/** Action callbacks that can be sent by a phone number picker. */
-public interface OnPhoneNumberPickerActionListener {
-
- /** Returns the selected phone number uri to the requester. */
- void onPickDataUri(Uri dataUri, boolean isVideoCall, CallSpecificAppData callSpecificAppData);
-
- /**
- * Returns the specified phone number to the requester. May call the specified phone number,
- * either as an audio or video call.
- */
- void onPickPhoneNumber(
- String phoneNumber, boolean isVideoCall, CallSpecificAppData callSpecificAppData);
-
- /** Called when home menu in {@link ActionBar} is clicked by the user. */
- void onHomeInActionBarSelected();
-}
diff --git a/java/com/android/contacts/common/util/AccountFilterUtil.java b/java/com/android/contacts/common/util/AccountFilterUtil.java
deleted file mode 100644
index 4587635..0000000
--- a/java/com/android/contacts/common/util/AccountFilterUtil.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source 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.contacts.common.util;
-
-import android.content.Context;
-import android.view.View;
-import android.widget.TextView;
-import com.android.contacts.common.list.ContactListFilter;
-import com.android.dialer.contacts.resources.R;
-
-/** Utility class for account filter manipulation. */
-public class AccountFilterUtil {
-
- /**
- * Similar to {@link #updateAccountFilterTitleForPeople(View, ContactListFilter, boolean,
- * boolean)}, but for Phone UI.
- */
- public static boolean updateAccountFilterTitleForPhone(
- View filterContainer, ContactListFilter filter, boolean showTitleForAllAccounts) {
- return updateAccountFilterTitle(filterContainer, filter, showTitleForAllAccounts, true);
- }
-
- private static boolean updateAccountFilterTitle(
- View filterContainer,
- ContactListFilter filter,
- boolean showTitleForAllAccounts,
- boolean forPhone) {
- final Context context = filterContainer.getContext();
- final TextView headerTextView =
- (TextView) filterContainer.findViewById(R.id.account_filter_header);
-
- boolean textWasSet = false;
- if (filter != null) {
- if (forPhone) {
- if (filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
- if (showTitleForAllAccounts) {
- headerTextView.setText(R.string.list_filter_phones);
- textWasSet = true;
- }
- } else if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
- headerTextView.setText(
- context.getString(R.string.listAllContactsInAccount, filter.accountName));
- textWasSet = true;
- } else if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
- headerTextView.setText(R.string.listCustomView);
- textWasSet = true;
- }
- } else {
- if (filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
- if (showTitleForAllAccounts) {
- headerTextView.setText(R.string.list_filter_all_accounts);
- textWasSet = true;
- }
- } else if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
- headerTextView.setText(
- context.getString(R.string.listAllContactsInAccount, filter.accountName));
- textWasSet = true;
- } else if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
- headerTextView.setText(R.string.listCustomView);
- textWasSet = true;
- } else if (filter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
- headerTextView.setText(R.string.listSingleContact);
- textWasSet = true;
- }
- }
- }
- return textWasSet;
- }
-}
diff --git a/java/com/android/contacts/common/util/ContactListViewUtils.java b/java/com/android/contacts/common/util/ContactListViewUtils.java
index 924789b..ba24079 100644
--- a/java/com/android/contacts/common/util/ContactListViewUtils.java
+++ b/java/com/android/contacts/common/util/ContactListViewUtils.java
@@ -43,47 +43,4 @@
listView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
}
}
-
- /**
- * Add padding to {@param listView} if this configuration has set both space weight and view
- * weight on the layout. Use this util method instead of defining the padding in the layout file
- * so that the {@param listView}'s padding can be set proportional to the card padding.
- *
- * @param listView ListView that we add padding to
- * @param rootLayout layout that contains ListView and R.id.list_card
- */
- public static void applyCardPaddingToView(
- Resources resources, final ListView listView, final View rootLayout) {
- // Set a padding on the list view so it appears in the center of the card
- // in the layout if required.
- final int listSpaceWeight = resources.getInteger(R.integer.contact_list_space_layout_weight);
- final int listViewWeight = resources.getInteger(R.integer.contact_list_card_layout_weight);
- if (listSpaceWeight > 0 && listViewWeight > 0) {
- rootLayout.setBackgroundResource(0);
- // Set the card view visible
- View mCardView = rootLayout.findViewById(R.id.list_card);
- if (mCardView == null) {
- throw new RuntimeException(
- "Your content must have a list card view who can be turned visible "
- + "whenever it is necessary.");
- }
- mCardView.setVisibility(View.VISIBLE);
-
- // Add extra padding to the list view to make them appear in the center of the card.
- // In order to avoid jumping, we skip drawing the next frame of the ListView.
- ViewUtil.doOnPreDraw(
- listView,
- false,
- new Runnable() {
- @Override
- public void run() {
- // Use the rootLayout.getWidth() instead of listView.getWidth() since
- // we sometimes hide the listView until we finish loading data. This would
- // result in incorrect padding.
- ContactListViewUtils.addPaddingToView(
- listView, rootLayout.getWidth(), listSpaceWeight, listViewWeight);
- }
- });
- }
- }
}
diff --git a/java/com/android/contacts/common/util/ContactLoaderUtils.java b/java/com/android/contacts/common/util/ContactLoaderUtils.java
index e309717..371bb4e 100644
--- a/java/com/android/contacts/common/util/ContactLoaderUtils.java
+++ b/java/com/android/contacts/common/util/ContactLoaderUtils.java
@@ -64,15 +64,6 @@
throw new IllegalArgumentException("uri format is unknown");
}
- // Legacy Style? Convert to RawContact
- final String OBSOLETE_AUTHORITY = Contacts.AUTHORITY;
- if (OBSOLETE_AUTHORITY.equals(authority)) {
- // Legacy Format. Convert to RawContact-Uri and then lookup the contact
- final long rawContactId = ContentUris.parseId(uri);
- return RawContacts.getContactLookupUri(
- resolver, ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId));
- }
-
throw new IllegalArgumentException("uri authority is unknown");
}
}
diff --git a/java/com/android/contacts/common/util/SearchUtil.java b/java/com/android/contacts/common/util/SearchUtil.java
deleted file mode 100644
index 314d565..0000000
--- a/java/com/android/contacts/common/util/SearchUtil.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source 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.contacts.common.util;
-
-import android.support.annotation.VisibleForTesting;
-
-/** Methods related to search. */
-public class SearchUtil {
-
- /**
- * Given a string with lines delimited with '\n', finds the matching line to the given substring.
- *
- * @param contents The string to search.
- * @param substring The substring to search for.
- * @return A MatchedLine object containing the matching line and the startIndex of the substring
- * match within that line.
- */
- public static MatchedLine findMatchingLine(String contents, String substring) {
- final MatchedLine matched = new MatchedLine();
-
- // Snippet may contain multiple lines separated by "\n".
- // Locate the lines of the content that contain the substring.
- final int index = SearchUtil.contains(contents, substring);
- if (index != -1) {
- // Match found. Find the corresponding line.
- int start = index - 1;
- while (start > -1) {
- if (contents.charAt(start) == '\n') {
- break;
- }
- start--;
- }
- int end = index + 1;
- while (end < contents.length()) {
- if (contents.charAt(end) == '\n') {
- break;
- }
- end++;
- }
- matched.line = contents.substring(start + 1, end);
- matched.startIndex = index - (start + 1);
- }
- return matched;
- }
-
- /**
- * Similar to String.contains() with two main differences:
- *
- * <p>1) Only searches token prefixes. A token is defined as any combination of letters or
- * numbers.
- *
- * <p>2) Returns the starting index where the substring is found.
- *
- * @param value The string to search.
- * @param substring The substring to look for.
- * @return The starting index where the substring is found. {@literal -1} if substring is not
- * found in value.
- */
- @VisibleForTesting
- static int contains(String value, String substring) {
- if (value.length() < substring.length()) {
- return -1;
- }
-
- // i18n support
- // Generate the code points for the substring once.
- // There will be a maximum of substring.length code points. But may be fewer.
- // Since the array length is not an accurate size, we need to keep a separate variable.
- final int[] substringCodePoints = new int[substring.length()];
- int substringLength = 0; // may not equal substring.length()!!
- for (int i = 0; i < substring.length(); ) {
- final int codePoint = Character.codePointAt(substring, i);
- substringCodePoints[substringLength] = codePoint;
- substringLength++;
- i += Character.charCount(codePoint);
- }
-
- for (int i = 0; i < value.length(); i = findNextTokenStart(value, i)) {
- int numMatch = 0;
- for (int j = i; j < value.length() && numMatch < substringLength; ++numMatch) {
- int valueCp = Character.toLowerCase(value.codePointAt(j));
- int substringCp = substringCodePoints[numMatch];
- if (valueCp != substringCp) {
- break;
- }
- j += Character.charCount(valueCp);
- }
- if (numMatch == substringLength) {
- return i;
- }
- }
- return -1;
- }
-
- /**
- * Find the start of the next token. A token is composed of letters and numbers. Any other
- * character are considered delimiters.
- *
- * @param line The string to search for the next token.
- * @param startIndex The index to start searching. 0 based indexing.
- * @return The index for the start of the next token. line.length() if next token not found.
- */
- @VisibleForTesting
- static int findNextTokenStart(String line, int startIndex) {
- int index = startIndex;
-
- // If already in token, eat remainder of token.
- while (index <= line.length()) {
- if (index == line.length()) {
- // No more tokens.
- return index;
- }
- final int codePoint = line.codePointAt(index);
- if (!Character.isLetterOrDigit(codePoint)) {
- break;
- }
- index += Character.charCount(codePoint);
- }
-
- // Out of token, eat all consecutive delimiters.
- while (index <= line.length()) {
- if (index == line.length()) {
- return index;
- }
- final int codePoint = line.codePointAt(index);
- if (Character.isLetterOrDigit(codePoint)) {
- break;
- }
- index += Character.charCount(codePoint);
- }
-
- return index;
- }
-
- /**
- * Anything other than letter and numbers are considered delimiters. Remove start and end
- * delimiters since they are not relevant to search.
- *
- * @param query The query string to clean.
- * @return The cleaned query. Empty string if all characters are cleaned out.
- */
- public static String cleanStartAndEndOfSearchQuery(String query) {
- int start = 0;
- while (start < query.length()) {
- int codePoint = query.codePointAt(start);
- if (Character.isLetterOrDigit(codePoint)) {
- break;
- }
- start += Character.charCount(codePoint);
- }
-
- if (start == query.length()) {
- // All characters are delimiters.
- return "";
- }
-
- int end = query.length() - 1;
- while (end > -1) {
- if (Character.isLowSurrogate(query.charAt(end))) {
- // Assume valid i18n string. There should be a matching high surrogate before it.
- end--;
- }
- int codePoint = query.codePointAt(end);
- if (Character.isLetterOrDigit(codePoint)) {
- break;
- }
- end--;
- }
-
- // end is a letter or digit.
- return query.substring(start, end + 1);
- }
-
- public static class MatchedLine {
-
- public int startIndex = -1;
- public String line;
-
- @Override
- public String toString() {
- return "MatchedLine{" + "line='" + line + '\'' + ", startIndex=" + startIndex + '}';
- }
- }
-}
diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java
deleted file mode 100644
index b878325..0000000
--- a/java/com/android/dialer/app/DialtactsActivity.java
+++ /dev/null
@@ -1,1594 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source 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.app;
-
-import android.app.Fragment;
-import android.app.FragmentTransaction;
-import android.app.KeyguardManager;
-import android.content.ActivityNotFoundException;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.SystemClock;
-import android.os.Trace;
-import android.provider.CallLog.Calls;
-import android.provider.ContactsContract.QuickContact;
-import android.speech.RecognizerIntent;
-import android.support.annotation.NonNull;
-import android.support.annotation.VisibleForTesting;
-import android.support.design.widget.CoordinatorLayout;
-import android.support.design.widget.FloatingActionButton;
-import android.support.design.widget.FloatingActionButton.OnVisibilityChangedListener;
-import android.support.design.widget.Snackbar;
-import android.support.v4.app.ActivityCompat;
-import android.support.v4.view.ViewPager;
-import android.support.v7.app.ActionBar;
-import android.telecom.PhoneAccount;
-import android.text.Editable;
-import android.text.TextUtils;
-import android.text.TextWatcher;
-import android.view.ActionMode;
-import android.view.DragEvent;
-import android.view.Gravity;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.View.OnDragListener;
-import android.view.animation.Animation;
-import android.view.animation.AnimationUtils;
-import android.widget.AbsListView.OnScrollListener;
-import android.widget.EditText;
-import android.widget.ImageButton;
-import android.widget.ImageView;
-import android.widget.PopupMenu;
-import android.widget.TextView;
-import android.widget.Toast;
-import com.android.contacts.common.dialog.ClearFrequentsDialog;
-import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
-import com.android.dialer.animation.AnimUtils;
-import com.android.dialer.animation.AnimationListenerAdapter;
-import com.android.dialer.app.calllog.CallLogActivity;
-import com.android.dialer.app.calllog.CallLogAdapter;
-import com.android.dialer.app.calllog.CallLogFragment;
-import com.android.dialer.app.calllog.CallLogNotificationsService;
-import com.android.dialer.app.calllog.IntentProvider;
-import com.android.dialer.app.list.DialtactsPagerAdapter;
-import com.android.dialer.app.list.DialtactsPagerAdapter.TabIndex;
-import com.android.dialer.app.list.DragDropController;
-import com.android.dialer.app.list.ListsFragment;
-import com.android.dialer.app.list.OldSpeedDialFragment;
-import com.android.dialer.app.list.OnDragDropListener;
-import com.android.dialer.app.list.OnListFragmentScrolledListener;
-import com.android.dialer.app.list.PhoneFavoriteSquareTileView;
-import com.android.dialer.app.settings.DialerSettingsActivity;
-import com.android.dialer.app.widget.ActionBarController;
-import com.android.dialer.app.widget.SearchEditTextLayout;
-import com.android.dialer.callcomposer.CallComposerActivity;
-import com.android.dialer.calldetails.OldCallDetailsActivity;
-import com.android.dialer.callintent.CallInitiationType;
-import com.android.dialer.callintent.CallIntentBuilder;
-import com.android.dialer.callintent.CallSpecificAppData;
-import com.android.dialer.common.Assert;
-import com.android.dialer.common.LogUtil;
-import com.android.dialer.common.UiUtil;
-import com.android.dialer.common.concurrent.DialerExecutorComponent;
-import com.android.dialer.common.concurrent.ThreadUtil;
-import com.android.dialer.configprovider.ConfigProviderComponent;
-import com.android.dialer.constants.ActivityRequestCodes;
-import com.android.dialer.contactsfragment.ContactsFragment;
-import com.android.dialer.contactsfragment.ContactsFragment.OnContactSelectedListener;
-import com.android.dialer.database.Database;
-import com.android.dialer.database.DialerDatabaseHelper;
-import com.android.dialer.dialpadview.DialpadFragment;
-import com.android.dialer.dialpadview.DialpadFragment.DialpadListener;
-import com.android.dialer.dialpadview.DialpadFragment.LastOutgoingCallCallback;
-import com.android.dialer.duo.DuoComponent;
-import com.android.dialer.i18n.LocaleUtils;
-import com.android.dialer.interactions.PhoneNumberInteraction;
-import com.android.dialer.interactions.PhoneNumberInteraction.InteractionErrorCode;
-import com.android.dialer.logging.DialerImpression;
-import com.android.dialer.logging.InteractionEvent;
-import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.ScreenEvent;
-import com.android.dialer.logging.UiAction;
-import com.android.dialer.performancereport.PerformanceReport;
-import com.android.dialer.postcall.PostCall;
-import com.android.dialer.precall.PreCall;
-import com.android.dialer.proguard.UsedByReflection;
-import com.android.dialer.searchfragment.list.NewSearchFragment;
-import com.android.dialer.searchfragment.list.NewSearchFragment.SearchFragmentListener;
-import com.android.dialer.simulator.Simulator;
-import com.android.dialer.simulator.SimulatorComponent;
-import com.android.dialer.smartdial.util.SmartDialNameMatcher;
-import com.android.dialer.smartdial.util.SmartDialPrefix;
-import com.android.dialer.storage.StorageComponent;
-import com.android.dialer.telecom.TelecomUtil;
-import com.android.dialer.util.DialerUtils;
-import com.android.dialer.util.PermissionsUtil;
-import com.android.dialer.util.TouchPointManager;
-import com.android.dialer.util.TransactionSafeActivity;
-import com.android.dialer.util.ViewUtil;
-import com.android.dialer.widget.FloatingActionButtonController;
-import com.google.common.base.Optional;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Locale;
-import java.util.concurrent.TimeUnit;
-
-/** The dialer tab's title is 'phone', a more common name (see strings.xml). */
-@UsedByReflection(value = "AndroidManifest-app.xml")
-public class DialtactsActivity extends TransactionSafeActivity
- implements View.OnClickListener,
- DialpadFragment.OnDialpadQueryChangedListener,
- OnListFragmentScrolledListener,
- CallLogFragment.HostInterface,
- CallLogAdapter.OnActionModeStateChangedListener,
- ContactsFragment.OnContactsListScrolledListener,
- DialpadFragment.HostInterface,
- OldSpeedDialFragment.HostInterface,
- OnDragDropListener,
- OnPhoneNumberPickerActionListener,
- PopupMenu.OnMenuItemClickListener,
- ViewPager.OnPageChangeListener,
- ActionBarController.ActivityUi,
- PhoneNumberInteraction.InteractionErrorListener,
- PhoneNumberInteraction.DisambigDialogDismissedListener,
- ActivityCompat.OnRequestPermissionsResultCallback,
- DialpadListener,
- SearchFragmentListener,
- OnContactSelectedListener {
-
- public static final boolean DEBUG = false;
- @VisibleForTesting public static final String TAG_DIALPAD_FRAGMENT = "dialpad";
- private static final String ACTION_SHOW_TAB = "ACTION_SHOW_TAB";
- @VisibleForTesting public static final String EXTRA_SHOW_TAB = "EXTRA_SHOW_TAB";
- public static final String EXTRA_CLEAR_NEW_VOICEMAILS = "EXTRA_CLEAR_NEW_VOICEMAILS";
- private static final String KEY_LAST_TAB = "last_tab";
- private static final String TAG = "DialtactsActivity";
- private static final String KEY_IN_REGULAR_SEARCH_UI = "in_regular_search_ui";
- private static final String KEY_IN_DIALPAD_SEARCH_UI = "in_dialpad_search_ui";
- private static final String KEY_IN_NEW_SEARCH_UI = "in_new_search_ui";
- private static final String KEY_SEARCH_QUERY = "search_query";
- private static final String KEY_DIALPAD_QUERY = "dialpad_query";
- private static final String KEY_FIRST_LAUNCH = "first_launch";
- private static final String KEY_SAVED_LANGUAGE_CODE = "saved_language_code";
- private static final String KEY_WAS_CONFIGURATION_CHANGE = "was_configuration_change";
- private static final String KEY_IS_DIALPAD_SHOWN = "is_dialpad_shown";
- private static final String KEY_FAB_VISIBLE = "fab_visible";
- private static final String TAG_NEW_SEARCH_FRAGMENT = "new_search";
- private static final String TAG_FAVORITES_FRAGMENT = "favorites";
- /** Just for backward compatibility. Should behave as same as {@link Intent#ACTION_DIAL}. */
- private static final String ACTION_TOUCH_DIALER = "com.android.phone.action.TOUCH_DIALER";
-
- private static final int FAB_SCALE_IN_DELAY_MS = 300;
-
- /**
- * Minimum time the history tab must have been selected for it to be marked as seen in onStop()
- */
- private static final long HISTORY_TAB_SEEN_TIMEOUT = TimeUnit.SECONDS.toMillis(3);
-
- private static Optional<Boolean> voiceSearchEnabledForTest = Optional.absent();
-
- /** Fragment containing the dialpad that slides into view */
- protected DialpadFragment dialpadFragment;
-
- /** Root layout of DialtactsActivity */
- private CoordinatorLayout parentLayout;
-
- /** new Fragment for search phone numbers using the keyboard and the dialpad. */
- private NewSearchFragment newSearchFragment;
-
- /** Animation that slides in. */
- private Animation slideIn;
-
- /** Animation that slides out. */
- private Animation slideOut;
- /** Fragment containing the speed dial list, call history list, and all contacts list. */
- private ListsFragment listsFragment;
- /**
- * Tracks whether onSaveInstanceState has been called. If true, no fragment transactions can be
- * commited.
- */
- private boolean stateSaved;
-
- private boolean isKeyboardOpen;
- private boolean inNewSearch;
- private boolean isRestarting;
- private boolean inDialpadSearch;
- private boolean inRegularSearch;
- private boolean clearSearchOnPause;
- private boolean isDialpadShown;
- /** Whether or not the device is in landscape orientation. */
- private boolean isLandscape;
- /** True if the dialpad is only temporarily showing due to being in call */
- private boolean inCallDialpadUp;
- /** True when this activity has been launched for the first time. */
- private boolean firstLaunch;
- /**
- * Search query to be applied to the SearchView in the ActionBar once onCreateOptionsMenu has been
- * called.
- */
- private String pendingSearchViewQuery;
-
- private PopupMenu overflowMenu;
- private EditText searchView;
- private SearchEditTextLayout searchEditTextLayout;
- private View voiceSearchButton;
- private String searchQuery;
- private String dialpadQuery;
- private DialerDatabaseHelper dialerDatabaseHelper;
- private DragDropController dragDropController;
- private ActionBarController actionBarController;
- private FloatingActionButtonController floatingActionButtonController;
- private String savedLanguageCode;
- private boolean wasConfigurationChange;
- private long timeTabSelected;
-
- public boolean isMultiSelectModeEnabled;
-
- private boolean isLastTabEnabled;
-
- AnimationListenerAdapter slideInListener =
- new AnimationListenerAdapter() {
- @Override
- public void onAnimationEnd(Animation animation) {
- maybeEnterSearchUi();
- }
- };
- /** Listener for after slide out animation completes on dialer fragment. */
- AnimationListenerAdapter slideOutListener =
- new AnimationListenerAdapter() {
- @Override
- public void onAnimationEnd(Animation animation) {
- commitDialpadFragmentHide();
- }
- };
- /** Listener used to send search queries to the phone search fragment. */
- private final TextWatcher phoneSearchQueryTextListener =
- new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
- final String newText = s.toString();
- if (newText.equals(searchQuery)) {
- // If the query hasn't changed (perhaps due to activity being destroyed
- // and restored, or user launching the same DIAL intent twice), then there is
- // no need to do anything here.
- return;
- }
-
- if (count != 0) {
- PerformanceReport.recordClick(UiAction.Type.TEXT_CHANGE_WITH_INPUT);
- }
-
- LogUtil.v("DialtactsActivity.onTextChanged", "called with new query: " + newText);
- LogUtil.v("DialtactsActivity.onTextChanged", "previous query: " + searchQuery);
- searchQuery = newText;
-
- // Show search fragment only when the query string is changed to non-empty text.
- if (!TextUtils.isEmpty(newText)) {
- // Call enterSearchUi only if we are switching search modes, or showing a search
- // fragment for the first time.
- final boolean sameSearchMode =
- (isDialpadShown && inDialpadSearch) || (!isDialpadShown && inRegularSearch);
- if (!sameSearchMode) {
- enterSearchUi(isDialpadShown, searchQuery, true /* animate */);
- }
- }
-
- if (newSearchFragment != null && newSearchFragment.isVisible()) {
- newSearchFragment.setQuery(searchQuery, getCallInitiationType());
- }
- }
-
- @Override
- public void afterTextChanged(Editable s) {}
- };
- /** Open the search UI when the user clicks on the search box. */
- private final View.OnClickListener searchViewOnClickListener =
- new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (!isInSearchUi()) {
- PerformanceReport.recordClick(UiAction.Type.OPEN_SEARCH);
- actionBarController.onSearchBoxTapped();
- enterSearchUi(
- false /* smartDialSearch */, searchView.getText().toString(), true /* animate */);
- }
- }
- };
-
- private int actionBarHeight;
- private int previouslySelectedTabIndex;
-
- /**
- * The text returned from a voice search query. Set in {@link #onActivityResult} and used in
- * {@link #onResume()} to populate the search box.
- */
- private String voiceSearchQuery;
-
- /**
- * @param tab the TAB_INDEX_* constant in {@link ListsFragment}
- * @return A intent that will open the DialtactsActivity into the specified tab. The intent for
- * each tab will be unique.
- */
- public static Intent getShowTabIntent(Context context, int tab) {
- Intent intent = new Intent(context, DialtactsActivity.class);
- intent.setAction(ACTION_SHOW_TAB);
- intent.putExtra(DialtactsActivity.EXTRA_SHOW_TAB, tab);
- intent.setData(
- new Uri.Builder()
- .scheme("intent")
- .authority(context.getPackageName())
- .appendPath(TAG)
- .appendQueryParameter(DialtactsActivity.EXTRA_SHOW_TAB, String.valueOf(tab))
- .build());
-
- return intent;
- }
-
- @Override
- public boolean dispatchTouchEvent(MotionEvent ev) {
- if (ev.getAction() == MotionEvent.ACTION_DOWN) {
- TouchPointManager.getInstance().setPoint((int) ev.getRawX(), (int) ev.getRawY());
- }
- return super.dispatchTouchEvent(ev);
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- Trace.beginSection(TAG + " onCreate");
- LogUtil.enterBlock("DialtactsActivity.onCreate");
- super.onCreate(savedInstanceState);
-
- firstLaunch = true;
- isLastTabEnabled =
- ConfigProviderComponent.get(this).getConfigProvider().getBoolean("last_tab_enabled", false);
-
- final Resources resources = getResources();
- actionBarHeight = resources.getDimensionPixelSize(R.dimen.action_bar_height_large);
-
- Trace.beginSection(TAG + " setContentView");
- setContentView(R.layout.dialtacts_activity);
- Trace.endSection();
- getWindow().setBackgroundDrawable(null);
-
- Trace.beginSection(TAG + " setup Views");
- final ActionBar actionBar = getActionBarSafely();
- actionBar.setCustomView(R.layout.search_edittext);
- actionBar.setDisplayShowCustomEnabled(true);
- actionBar.setBackgroundDrawable(null);
-
- searchEditTextLayout = actionBar.getCustomView().findViewById(R.id.search_view_container);
-
- actionBarController = new ActionBarController(this, searchEditTextLayout);
-
- searchView = searchEditTextLayout.findViewById(R.id.search_view);
- searchView.addTextChangedListener(phoneSearchQueryTextListener);
- searchView.setHint(getSearchBoxHint());
-
- voiceSearchButton = searchEditTextLayout.findViewById(R.id.voice_search_button);
- searchEditTextLayout
- .findViewById(R.id.search_box_collapsed)
- .setOnClickListener(searchViewOnClickListener);
- searchEditTextLayout
- .findViewById(R.id.search_back_button)
- .setOnClickListener(v -> exitSearchUi());
-
- isLandscape =
- getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
- previouslySelectedTabIndex = DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL;
- FloatingActionButton floatingActionButton = findViewById(R.id.floating_action_button);
- floatingActionButton.setOnClickListener(this);
- floatingActionButtonController = new FloatingActionButtonController(this, floatingActionButton);
-
- ImageButton optionsMenuButton =
- searchEditTextLayout.findViewById(R.id.dialtacts_options_menu_button);
- optionsMenuButton.setOnClickListener(this);
- overflowMenu = buildOptionsMenu(optionsMenuButton);
- optionsMenuButton.setOnTouchListener(overflowMenu.getDragToOpenListener());
-
- // Add the favorites fragment but only if savedInstanceState is null. Otherwise the
- // fragment manager is responsible for recreating it.
- if (savedInstanceState == null) {
- getFragmentManager()
- .beginTransaction()
- .add(R.id.dialtacts_frame, new ListsFragment(), TAG_FAVORITES_FRAGMENT)
- .commit();
- } else {
- searchQuery = savedInstanceState.getString(KEY_SEARCH_QUERY);
- dialpadQuery = savedInstanceState.getString(KEY_DIALPAD_QUERY);
- inRegularSearch = savedInstanceState.getBoolean(KEY_IN_REGULAR_SEARCH_UI);
- inDialpadSearch = savedInstanceState.getBoolean(KEY_IN_DIALPAD_SEARCH_UI);
- inNewSearch = savedInstanceState.getBoolean(KEY_IN_NEW_SEARCH_UI);
- firstLaunch = savedInstanceState.getBoolean(KEY_FIRST_LAUNCH);
- savedLanguageCode = savedInstanceState.getString(KEY_SAVED_LANGUAGE_CODE);
- wasConfigurationChange = savedInstanceState.getBoolean(KEY_WAS_CONFIGURATION_CHANGE);
- isDialpadShown = savedInstanceState.getBoolean(KEY_IS_DIALPAD_SHOWN);
- floatingActionButtonController.setVisible(savedInstanceState.getBoolean(KEY_FAB_VISIBLE));
- actionBarController.restoreInstanceState(savedInstanceState);
- }
-
- final boolean isLayoutRtl = ViewUtil.isRtl();
- if (isLandscape) {
- slideIn =
- AnimationUtils.loadAnimation(
- this, isLayoutRtl ? R.anim.dialpad_slide_in_left : R.anim.dialpad_slide_in_right);
- slideOut =
- AnimationUtils.loadAnimation(
- this, isLayoutRtl ? R.anim.dialpad_slide_out_left : R.anim.dialpad_slide_out_right);
- } else {
- slideIn = AnimationUtils.loadAnimation(this, R.anim.dialpad_slide_in_bottom);
- slideOut = AnimationUtils.loadAnimation(this, R.anim.dialpad_slide_out_bottom);
- }
-
- slideIn.setInterpolator(AnimUtils.EASE_IN);
- slideOut.setInterpolator(AnimUtils.EASE_OUT);
-
- slideIn.setAnimationListener(slideInListener);
- slideOut.setAnimationListener(slideOutListener);
-
- parentLayout = (CoordinatorLayout) findViewById(R.id.dialtacts_mainlayout);
- parentLayout.setOnDragListener(new LayoutOnDragListener());
- ViewUtil.doOnGlobalLayout(
- floatingActionButton,
- view -> {
- int screenWidth = parentLayout.getWidth();
- floatingActionButtonController.setScreenWidth(screenWidth);
- floatingActionButtonController.align(getFabAlignment(), false /* animate */);
- });
-
- Trace.endSection();
-
- Trace.beginSection(TAG + " initialize smart dialing");
- dialerDatabaseHelper = Database.get(this).getDatabaseHelper(this);
- SmartDialPrefix.initializeNanpSettings(this);
- Trace.endSection();
-
- Trace.endSection();
-
- updateSearchFragmentPosition();
- }
-
- @NonNull
- private ActionBar getActionBarSafely() {
- return Assert.isNotNull(getSupportActionBar());
- }
-
- @Override
- protected void onResume() {
- LogUtil.enterBlock("DialtactsActivity.onResume");
- Trace.beginSection(TAG + " onResume");
- super.onResume();
-
- // Some calls may not be recorded (eg. from quick contact),
- // so we should restart recording after these calls. (Recorded call is stopped)
- PostCall.restartPerformanceRecordingIfARecentCallExist(this);
- if (!PerformanceReport.isRecording()) {
- PerformanceReport.startRecording();
- }
-
- stateSaved = false;
- if (firstLaunch) {
- LogUtil.i("DialtactsActivity.onResume", "mFirstLaunch true, displaying fragment");
- displayFragment(getIntent());
- } else if (!phoneIsInUse() && inCallDialpadUp) {
- LogUtil.i("DialtactsActivity.onResume", "phone not in use, hiding dialpad fragment");
- hideDialpadFragment(false, true);
- inCallDialpadUp = false;
- } else if (isDialpadShown) {
- LogUtil.i("DialtactsActivity.onResume", "showing dialpad on resume");
- showDialpadFragment(false);
- } else {
- PostCall.promptUserForMessageIfNecessary(this, parentLayout);
- }
-
- // On M the fragment manager does not restore the hidden state of a fragment from
- // savedInstanceState so it must be hidden again.
- if (!isDialpadShown && dialpadFragment != null && !dialpadFragment.isHidden()) {
- LogUtil.i(
- "DialtactsActivity.onResume", "mDialpadFragment attached but not hidden, forcing hide");
- getFragmentManager().beginTransaction().hide(dialpadFragment).commit();
- }
-
- // If there was a voice query result returned in the {@link #onActivityResult} callback, it
- // will have been stashed in mVoiceSearchQuery since the search results fragment cannot be
- // shown until onResume has completed. Active the search UI and set the search term now.
- if (!TextUtils.isEmpty(voiceSearchQuery)) {
- actionBarController.onSearchBoxTapped();
- searchView.setText(voiceSearchQuery);
- voiceSearchQuery = null;
- }
-
- if (isRestarting) {
- // This is only called when the activity goes from resumed -> paused -> resumed, so it
- // will not cause an extra view to be sent out on rotation
- if (isDialpadShown) {
- Logger.get(this).logScreenView(ScreenEvent.Type.DIALPAD, this);
- }
- isRestarting = false;
- }
-
- prepareVoiceSearchButton();
-
- // Start the thread that updates the smart dial database if
- // (1) the activity is not recreated with a new configuration, or
- // (2) the activity is recreated with a new configuration but the change is a language change.
- boolean isLanguageChanged =
- !LocaleUtils.getLocale(this).getISO3Language().equals(savedLanguageCode);
- if (!wasConfigurationChange || isLanguageChanged) {
- dialerDatabaseHelper.startSmartDialUpdateThread(/* forceUpdate = */ isLanguageChanged);
- }
-
- if (isDialpadShown) {
- floatingActionButtonController.scaleOut();
- } else {
- floatingActionButtonController.align(getFabAlignment(), false /* animate */);
- }
-
- if (firstLaunch) {
- // Only process the Intent the first time onResume() is called after receiving it
- if (Calls.CONTENT_TYPE.equals(getIntent().getType())) {
- // Externally specified extras take precedence to EXTRA_SHOW_TAB, which is only
- // used internally.
- final Bundle extras = getIntent().getExtras();
- if (extras != null && extras.getInt(Calls.EXTRA_CALL_TYPE_FILTER) == Calls.VOICEMAIL_TYPE) {
- listsFragment.showTab(DialtactsPagerAdapter.TAB_INDEX_VOICEMAIL);
- Logger.get(this).logImpression(DialerImpression.Type.VVM_NOTIFICATION_CLICKED);
- } else {
- listsFragment.showTab(DialtactsPagerAdapter.TAB_INDEX_HISTORY);
- }
- } else if (getIntent().hasExtra(EXTRA_SHOW_TAB)) {
- int index =
- getIntent().getIntExtra(EXTRA_SHOW_TAB, DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL);
- if (index < listsFragment.getTabCount()) {
- // Hide dialpad since this is an explicit intent to show a specific tab, which is coming
- // from missed call or voicemail notification.
- hideDialpadFragment(false, false);
- exitSearchUi();
- listsFragment.showTab(index);
- }
- }
-
- if (getIntent().getBooleanExtra(EXTRA_CLEAR_NEW_VOICEMAILS, false)) {
- LogUtil.i("DialtactsActivity.onResume", "clearing all new voicemails");
- CallLogNotificationsService.markAllNewVoicemailsAsOld(this);
- }
- }
-
- firstLaunch = false;
-
- setSearchBoxHint();
- timeTabSelected = SystemClock.elapsedRealtime();
-
- Trace.endSection();
- }
-
- @Override
- protected void onRestart() {
- super.onRestart();
- isRestarting = true;
- }
-
- @Override
- protected void onPause() {
- if (clearSearchOnPause) {
- hideDialpadAndSearchUi();
- clearSearchOnPause = false;
- }
- if (slideOut.hasStarted() && !slideOut.hasEnded()) {
- commitDialpadFragmentHide();
- }
- super.onPause();
- }
-
- @Override
- protected void onStop() {
- super.onStop();
- boolean timeoutElapsed =
- SystemClock.elapsedRealtime() - timeTabSelected >= HISTORY_TAB_SEEN_TIMEOUT;
- boolean isOnHistoryTab =
- listsFragment.getCurrentTabIndex() == DialtactsPagerAdapter.TAB_INDEX_HISTORY;
- if (isOnHistoryTab
- && timeoutElapsed
- && !isChangingConfigurations()
- && !getSystemService(KeyguardManager.class).isKeyguardLocked()) {
- listsFragment.markMissedCallsAsReadAndRemoveNotifications();
- }
- StorageComponent.get(this)
- .unencryptedSharedPrefs()
- .edit()
- .putInt(KEY_LAST_TAB, listsFragment.getCurrentTabIndex())
- .apply();
- }
-
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- LogUtil.enterBlock("DialtactsActivity.onSaveInstanceState");
- super.onSaveInstanceState(outState);
- outState.putString(KEY_SEARCH_QUERY, searchQuery);
- outState.putString(KEY_DIALPAD_QUERY, dialpadQuery);
- outState.putString(KEY_SAVED_LANGUAGE_CODE, LocaleUtils.getLocale(this).getISO3Language());
- outState.putBoolean(KEY_IN_REGULAR_SEARCH_UI, inRegularSearch);
- outState.putBoolean(KEY_IN_DIALPAD_SEARCH_UI, inDialpadSearch);
- outState.putBoolean(KEY_IN_NEW_SEARCH_UI, inNewSearch);
- outState.putBoolean(KEY_FIRST_LAUNCH, firstLaunch);
- outState.putBoolean(KEY_IS_DIALPAD_SHOWN, isDialpadShown);
- outState.putBoolean(KEY_FAB_VISIBLE, floatingActionButtonController.isVisible());
- outState.putBoolean(KEY_WAS_CONFIGURATION_CHANGE, isChangingConfigurations());
- actionBarController.saveInstanceState(outState);
- stateSaved = true;
- }
-
- @Override
- public void onAttachFragment(final Fragment fragment) {
- LogUtil.i("DialtactsActivity.onAttachFragment", "fragment: %s", fragment);
- if (fragment instanceof DialpadFragment) {
- dialpadFragment = (DialpadFragment) fragment;
- } else if (fragment instanceof ListsFragment) {
- listsFragment = (ListsFragment) fragment;
- listsFragment.addOnPageChangeListener(this);
- } else if (fragment instanceof NewSearchFragment) {
- newSearchFragment = (NewSearchFragment) fragment;
- updateSearchFragmentPosition();
- }
- }
-
- protected void handleMenuSettings() {
- final Intent intent = new Intent(this, DialerSettingsActivity.class);
- startActivity(intent);
- }
-
- public boolean isListsFragmentVisible() {
- return listsFragment.getUserVisibleHint();
- }
-
- @Override
- public void onClick(View view) {
- int resId = view.getId();
- if (resId == R.id.floating_action_button) {
- if (!isDialpadShown) {
- LogUtil.i(
- "DialtactsActivity.onClick", "floating action button clicked, going to show dialpad");
- PerformanceReport.recordClick(UiAction.Type.OPEN_DIALPAD);
- inCallDialpadUp = false;
- showDialpadFragment(true);
- PostCall.closePrompt();
- } else {
- LogUtil.i(
- "DialtactsActivity.onClick",
- "floating action button clicked, but dialpad is already showing");
- }
- } else if (resId == R.id.voice_search_button) {
- try {
- startActivityForResult(
- new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH),
- ActivityRequestCodes.DIALTACTS_VOICE_SEARCH);
- } catch (ActivityNotFoundException e) {
- Toast.makeText(
- DialtactsActivity.this, R.string.voice_search_not_available, Toast.LENGTH_SHORT)
- .show();
- }
- } else if (resId == R.id.dialtacts_options_menu_button) {
- overflowMenu.show();
- } else {
- Assert.fail("Unexpected onClick event from " + view);
- }
- }
-
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- if (!isSafeToCommitTransactions()) {
- return true;
- }
-
- int resId = item.getItemId();
- if (resId == R.id.menu_history) {
- PerformanceReport.recordClick(UiAction.Type.OPEN_CALL_HISTORY);
- final Intent intent = new Intent(this, CallLogActivity.class);
- startActivity(intent);
- } else if (resId == R.id.menu_clear_frequents) {
- ClearFrequentsDialog.show(getFragmentManager());
- Logger.get(this).logScreenView(ScreenEvent.Type.CLEAR_FREQUENTS, this);
- return true;
- } else if (resId == R.id.menu_call_settings) {
- handleMenuSettings();
- Logger.get(this).logScreenView(ScreenEvent.Type.SETTINGS, this);
- return true;
- }
- return false;
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- LogUtil.i(
- "DialtactsActivity.onActivityResult",
- "requestCode:%d, resultCode:%d",
- requestCode,
- resultCode);
- if (requestCode == ActivityRequestCodes.DIALTACTS_VOICE_SEARCH) {
- if (resultCode == RESULT_OK) {
- final ArrayList<String> matches =
- data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
- if (matches.size() > 0) {
- voiceSearchQuery = matches.get(0);
- } else {
- LogUtil.i("DialtactsActivity.onActivityResult", "voice search - nothing heard");
- }
- } else {
- LogUtil.e("DialtactsActivity.onActivityResult", "voice search failed");
- }
- } else if (requestCode == ActivityRequestCodes.DIALTACTS_CALL_COMPOSER) {
- if (resultCode == RESULT_FIRST_USER) {
- LogUtil.i(
- "DialtactsActivity.onActivityResult", "returned from call composer, error occurred");
- String message =
- getString(
- R.string.call_composer_connection_failed,
- data.getStringExtra(CallComposerActivity.KEY_CONTACT_NAME));
- Snackbar.make(parentLayout, message, Snackbar.LENGTH_LONG).show();
- } else {
- LogUtil.i("DialtactsActivity.onActivityResult", "returned from call composer, no error");
- }
- } else if (requestCode == ActivityRequestCodes.DIALTACTS_CALL_DETAILS) {
- if (resultCode == RESULT_OK
- && data != null
- && data.getBooleanExtra(OldCallDetailsActivity.EXTRA_HAS_ENRICHED_CALL_DATA, false)) {
- String number = data.getStringExtra(OldCallDetailsActivity.EXTRA_PHONE_NUMBER);
- int snackbarDurationMillis = 5_000;
- Snackbar.make(parentLayout, getString(R.string.ec_data_deleted), snackbarDurationMillis)
- .setAction(R.string.view_conversation, v -> {
- IntentProvider provider = IntentProvider.getSendSmsIntentProvider(number);
- startActivity(provider.getClickIntent(this));
- })
- .setActionTextColor(getResources().getColor(R.color.dialer_snackbar_action_text_color))
- .show();
- }
- } else if (requestCode == ActivityRequestCodes.DIALTACTS_DUO) {
- // We just returned from starting Duo for a task. Reload our reachability data since it
- // may have changed after a user finished activating Duo.
- DuoComponent.get(this).getDuo().reloadReachability(this);
- }
- super.onActivityResult(requestCode, resultCode, data);
- }
-
- /**
- * Update the number of unread voicemails (potentially other tabs) displayed next to the tab icon.
- */
- public void updateTabUnreadCounts() {
- listsFragment.updateTabUnreadCounts();
- }
-
- /**
- * Initiates a fragment transaction to show the dialpad fragment. Animations and other visual
- * updates are handled by a callback which is invoked after the dialpad fragment is shown.
- *
- * @see #onDialpadShown
- */
- private void showDialpadFragment(boolean animate) {
- LogUtil.i("DialtactActivity.showDialpadFragment", "animate: %b", animate);
- if (isDialpadShown) {
- LogUtil.i("DialtactsActivity.showDialpadFragment", "dialpad already shown");
- return;
- }
- if (stateSaved) {
- LogUtil.i("DialtactsActivity.showDialpadFragment", "state already saved");
- return;
- }
- isDialpadShown = true;
-
- listsFragment.setUserVisibleHint(false);
-
- final FragmentTransaction ft = getFragmentManager().beginTransaction();
- if (dialpadFragment == null) {
- dialpadFragment = new DialpadFragment();
- ft.add(R.id.dialtacts_container, dialpadFragment, TAG_DIALPAD_FRAGMENT);
- } else {
- ft.show(dialpadFragment);
- }
-
- dialpadFragment.setAnimate(animate);
- Logger.get(this).logScreenView(ScreenEvent.Type.DIALPAD, this);
- ft.commit();
-
- if (animate) {
- floatingActionButtonController.scaleOut();
- maybeEnterSearchUi();
- } else {
- floatingActionButtonController.scaleOut();
- maybeEnterSearchUi();
- }
- actionBarController.onDialpadUp();
-
- Assert.isNotNull(listsFragment.getView()).animate().alpha(0).withLayer();
-
- // adjust the title, so the user will know where we're at when the activity start/resumes.
- setTitle(R.string.launcherDialpadActivityLabel);
- }
-
- @Override
- public void getLastOutgoingCall(LastOutgoingCallCallback callback) {
- DialerExecutorComponent.get(this)
- .dialerExecutorFactory()
- .createUiTaskBuilder(
- getFragmentManager(), "Query last phone number", Calls::getLastOutgoingCall)
- .onSuccess(output -> callback.lastOutgoingCall(output))
- .build()
- .executeParallel(this);
- }
-
- /** Callback from child DialpadFragment when the dialpad is shown. */
- @Override
- public void onDialpadShown() {
- LogUtil.enterBlock("DialtactsActivity.onDialpadShown");
- Assert.isNotNull(dialpadFragment);
- if (dialpadFragment.getAnimate()) {
- Assert.isNotNull(dialpadFragment.getView()).startAnimation(slideIn);
- } else {
- dialpadFragment.setYFraction(0);
- }
-
- updateSearchFragmentPosition();
- }
-
- @Override
- public void onCallPlacedFromDialpad() {
- clearSearchOnPause = true;
- }
-
- @Override
- public void onContactsListScrolled(boolean isDragging) {
- // intentionally empty.
- }
-
- /**
- * Initiates animations and other visual updates to hide the dialpad. The fragment is hidden in a
- * callback after the hide animation ends.
- *
- * @see #commitDialpadFragmentHide
- */
- private void hideDialpadFragment(boolean animate, boolean clearDialpad) {
- LogUtil.enterBlock("DialtactsActivity.hideDialpadFragment");
- if (dialpadFragment == null || dialpadFragment.getView() == null) {
- return;
- }
- if (clearDialpad) {
- // Temporarily disable accessibility when we clear the dialpad, since it should be
- // invisible and should not announce anything.
- dialpadFragment
- .getDigitsWidget()
- .setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
- dialpadFragment.clearDialpad();
- dialpadFragment
- .getDigitsWidget()
- .setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO);
- }
- if (!isDialpadShown) {
- return;
- }
- isDialpadShown = false;
- dialpadFragment.setAnimate(animate);
- listsFragment.setUserVisibleHint(true);
- listsFragment.sendScreenViewForCurrentPosition();
-
- updateSearchFragmentPosition();
-
- floatingActionButtonController.align(getFabAlignment(), animate);
- if (animate) {
- dialpadFragment.getView().startAnimation(slideOut);
- } else {
- commitDialpadFragmentHide();
- }
-
- actionBarController.onDialpadDown();
-
- // reset the title to normal.
- setTitle(R.string.launcherActivityLabel);
- }
-
- /** Finishes hiding the dialpad fragment after any animations are completed. */
- private void commitDialpadFragmentHide() {
- if (!stateSaved && dialpadFragment != null && !dialpadFragment.isHidden() && !isDestroyed()) {
- final FragmentTransaction ft = getFragmentManager().beginTransaction();
- ft.hide(dialpadFragment);
- ft.commit();
- }
- floatingActionButtonController.scaleIn();
- }
-
- private void updateSearchFragmentPosition() {
- if (newSearchFragment != null) {
- int animationDuration = getResources().getInteger(R.integer.dialpad_slide_in_duration);
- int actionbarHeight = getResources().getDimensionPixelSize(R.dimen.action_bar_height_large);
- int shadowHeight = getResources().getDrawable(R.drawable.search_shadow).getIntrinsicHeight();
- int start = isDialpadShown() ? actionbarHeight - shadowHeight : 0;
- int end = isDialpadShown() ? 0 : actionbarHeight - shadowHeight;
- newSearchFragment.animatePosition(start, end, animationDuration);
- }
- }
-
- @Override
- public boolean isInSearchUi() {
- return inDialpadSearch || inRegularSearch || inNewSearch;
- }
-
- @Override
- public boolean hasSearchQuery() {
- return !TextUtils.isEmpty(searchQuery);
- }
-
- private void setNotInSearchUi() {
- inDialpadSearch = false;
- inRegularSearch = false;
- inNewSearch = false;
- }
-
- private void hideDialpadAndSearchUi() {
- if (isDialpadShown) {
- hideDialpadFragment(false, true);
- }
- exitSearchUi();
- }
-
- private void prepareVoiceSearchButton() {
- searchEditTextLayout.setVoiceSearchEnabled(isVoiceSearchEnabled());
- voiceSearchButton.setOnClickListener(this);
- }
-
- private boolean isVoiceSearchEnabled() {
- if (voiceSearchEnabledForTest.isPresent()) {
- return voiceSearchEnabledForTest.get();
- }
- return canIntentBeHandled(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH));
- }
-
- public boolean isNearbyPlacesSearchEnabled() {
- return false;
- }
-
- protected int getSearchBoxHint() {
- return R.string.dialer_hint_find_contact;
- }
-
- /** Sets the hint text for the contacts search box */
- private void setSearchBoxHint() {
- ((TextView) searchEditTextLayout.findViewById(R.id.search_box_start_search))
- .setHint(getSearchBoxHint());
- }
-
- protected OptionsPopupMenu buildOptionsMenu(View invoker) {
- final OptionsPopupMenu popupMenu = new OptionsPopupMenu(this, invoker);
- popupMenu.inflate(R.menu.dialtacts_options);
- popupMenu.setOnMenuItemClickListener(this);
- return popupMenu;
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- if (pendingSearchViewQuery != null) {
- searchView.setText(pendingSearchViewQuery);
- pendingSearchViewQuery = null;
- }
- if (actionBarController != null) {
- actionBarController.restoreActionBarOffset();
- }
- return false;
- }
-
- /**
- * Returns true if the intent is due to hitting the green send key (hardware call button:
- * KEYCODE_CALL) while in a call.
- *
- * @param intent the intent that launched this activity
- * @return true if the intent is due to hitting the green send key while in a call
- */
- private boolean isSendKeyWhileInCall(Intent intent) {
- // If there is a call in progress and the user launched the dialer by hitting the call
- // button, go straight to the in-call screen.
- final boolean callKey = Intent.ACTION_CALL_BUTTON.equals(intent.getAction());
-
- // When KEYCODE_CALL event is handled it dispatches an intent with the ACTION_CALL_BUTTON.
- // Besides of checking the intent action, we must check if the phone is really during a
- // call in order to decide whether to ignore the event or continue to display the activity.
- if (callKey && phoneIsInUse()) {
- TelecomUtil.showInCallScreen(this, false);
- return true;
- }
-
- return false;
- }
-
- /**
- * Sets the current tab based on the intent's request type
- *
- * @param intent Intent that contains information about which tab should be selected
- */
- private void displayFragment(Intent intent) {
- // If we got here by hitting send and we're in call forward along to the in-call activity
- if (isSendKeyWhileInCall(intent)) {
- finish();
- return;
- }
-
- boolean showDialpadChooser =
- !ACTION_SHOW_TAB.equals(intent.getAction())
- && phoneIsInUse()
- && !DialpadFragment.isAddCallMode(intent);
- boolean isDialIntent = intent.getData() != null && isDialIntent(intent);
- boolean isAddCallIntent = DialpadFragment.isAddCallMode(intent);
- if (showDialpadChooser || isDialIntent || isAddCallIntent) {
- LogUtil.i(
- "DialtactsActivity.displayFragment",
- "show dialpad fragment (showDialpadChooser: %b, isDialIntent: %b, isAddCallIntent: %b)",
- showDialpadChooser,
- isDialIntent,
- isAddCallIntent);
- showDialpadFragment(false);
- dialpadFragment.setStartedFromNewIntent(true);
- if (showDialpadChooser && !dialpadFragment.isVisible()) {
- inCallDialpadUp = true;
- }
- } else if (isLastTabEnabled) {
- @TabIndex
- int tabIndex =
- StorageComponent.get(this)
- .unencryptedSharedPrefs()
- .getInt(KEY_LAST_TAB, DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL);
- // If voicemail tab is saved and its availability changes, we still move to the voicemail tab
- // but it is quickly removed and shown the contacts tab.
- if (listsFragment != null) {
- listsFragment.showTab(tabIndex);
- PerformanceReport.setStartingTabIndex(tabIndex);
- } else {
- PerformanceReport.setStartingTabIndex(DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL);
- }
- }
- }
-
- @Override
- public void onNewIntent(Intent newIntent) {
- LogUtil.enterBlock("DialtactsActivity.onNewIntent");
- setIntent(newIntent);
- firstLaunch = true;
-
- stateSaved = false;
- displayFragment(newIntent);
-
- invalidateOptionsMenu();
- }
-
- /** Returns true if the given intent contains a phone number to populate the dialer with */
- private boolean isDialIntent(Intent intent) {
- final String action = intent.getAction();
- if (Intent.ACTION_DIAL.equals(action) || ACTION_TOUCH_DIALER.equals(action)) {
- return true;
- }
- if (Intent.ACTION_VIEW.equals(action)) {
- final Uri data = intent.getData();
- if (data != null && PhoneAccount.SCHEME_TEL.equals(data.getScheme())) {
- return true;
- }
- }
- return false;
- }
-
- /** Shows the search fragment */
- private void enterSearchUi(boolean smartDialSearch, String query, boolean animate) {
- LogUtil.i("DialtactsActivity.enterSearchUi", "smart dial: %b", smartDialSearch);
- if (stateSaved || getFragmentManager().isDestroyed()) {
- // Weird race condition where fragment is doing work after the activity is destroyed
- // due to talkback being on (a bug). Just return since we can't do any
- // constructive here.
- LogUtil.i(
- "DialtactsActivity.enterSearchUi",
- "not entering search UI (mStateSaved: %b, isDestroyed: %b)",
- stateSaved,
- getFragmentManager().isDestroyed());
- return;
- }
-
- FragmentTransaction transaction = getFragmentManager().beginTransaction();
- String tag = TAG_NEW_SEARCH_FRAGMENT;
- inNewSearch = true;
-
- floatingActionButtonController.scaleOut();
-
- if (animate) {
- transaction.setCustomAnimations(android.R.animator.fade_in, 0);
- } else {
- transaction.setTransition(FragmentTransaction.TRANSIT_NONE);
- }
-
- NewSearchFragment fragment = (NewSearchFragment) getFragmentManager().findFragmentByTag(tag);
- if (fragment == null) {
- fragment = NewSearchFragment.newInstance();
- transaction.add(R.id.dialtacts_frame, fragment, tag);
- } else {
- transaction.show(fragment);
- }
-
- // DialtactsActivity will provide the options menu
- fragment.setHasOptionsMenu(false);
- fragment.setQuery(query, getCallInitiationType());
- transaction.commit();
-
- if (animate) {
- Assert.isNotNull(listsFragment.getView()).animate().alpha(0).withLayer();
- }
- listsFragment.setUserVisibleHint(false);
- }
-
- /** Hides the search fragment */
- private void exitSearchUi() {
- LogUtil.enterBlock("DialtactsActivity.exitSearchUi");
-
- // See related bug in enterSearchUI();
- if (getFragmentManager().isDestroyed() || stateSaved) {
- return;
- }
-
- searchView.setText(null);
-
- if (dialpadFragment != null) {
- dialpadFragment.clearDialpad();
- }
-
- setNotInSearchUi();
-
- // There are four states the fab can be in:
- // - Not visible and should remain not visible (do nothing)
- // - Not visible (move then show the fab)
- // - Visible, in the correct position (do nothing)
- // - Visible, in the wrong position (hide, move, then show the fab)
- if (floatingActionButtonController.isVisible()
- && getFabAlignment() != FloatingActionButtonController.ALIGN_END) {
- floatingActionButtonController.scaleOut(
- new OnVisibilityChangedListener() {
- @Override
- public void onHidden(FloatingActionButton floatingActionButton) {
- super.onHidden(floatingActionButton);
- onPageScrolled(
- listsFragment.getCurrentTabIndex(), 0 /* offset */, 0 /* pixelOffset */);
- floatingActionButtonController.scaleIn();
- }
- });
- } else if (!floatingActionButtonController.isVisible() && listsFragment.shouldShowFab()) {
- onPageScrolled(listsFragment.getCurrentTabIndex(), 0 /* offset */, 0 /* pixelOffset */);
- ThreadUtil.getUiThreadHandler()
- .postDelayed(() -> floatingActionButtonController.scaleIn(), FAB_SCALE_IN_DELAY_MS);
- }
-
- final FragmentTransaction transaction = getFragmentManager().beginTransaction();
- if (newSearchFragment != null) {
- transaction.remove(newSearchFragment);
- }
- transaction.commit();
-
- Assert.isNotNull(listsFragment.getView()).animate().alpha(1).withLayer();
-
- if (dialpadFragment == null || !dialpadFragment.isVisible()) {
- // If the dialpad fragment wasn't previously visible, then send a screen view because
- // we are exiting regular search. Otherwise, the screen view will be sent by
- // {@link #hideDialpadFragment}.
- listsFragment.sendScreenViewForCurrentPosition();
- listsFragment.setUserVisibleHint(true);
- }
- onPageSelected(listsFragment.getCurrentTabIndex());
-
- actionBarController.onSearchUiExited();
- }
-
- @Override
- public void onBackPressed() {
- PerformanceReport.recordClick(UiAction.Type.PRESS_ANDROID_BACK_BUTTON);
-
- if (stateSaved) {
- return;
- }
- if (isDialpadShown) {
- hideDialpadFragment(true, false);
- if (TextUtils.isEmpty(dialpadQuery)) {
- exitSearchUi();
- }
- } else if (isInSearchUi()) {
- if (isKeyboardOpen) {
- DialerUtils.hideInputMethod(parentLayout);
- PerformanceReport.recordClick(UiAction.Type.HIDE_KEYBOARD_IN_SEARCH);
- } else {
- exitSearchUi();
- }
- } else {
- super.onBackPressed();
- }
- }
-
- @Override
- public void onConfigurationChanged(Configuration configuration) {
- super.onConfigurationChanged(configuration);
- // Checks whether a hardware keyboard is available
- if (configuration.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
- isKeyboardOpen = true;
- } else if (configuration.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
- isKeyboardOpen = false;
- }
- }
-
- private void maybeEnterSearchUi() {
- if (!isInSearchUi()) {
- enterSearchUi(true /* isSmartDial */, searchQuery, false);
- }
- }
-
- @Override
- public void onDialpadQueryChanged(String query) {
- dialpadQuery = query;
- if (newSearchFragment != null) {
- newSearchFragment.setRawNumber(query);
- }
- final String normalizedQuery =
- SmartDialNameMatcher.normalizeNumber(/* context = */ this, query);
-
- if (!TextUtils.equals(searchView.getText(), normalizedQuery)) {
- if (DEBUG) {
- LogUtil.v("DialtactsActivity.onDialpadQueryChanged", "new query: " + query);
- }
- if (dialpadFragment == null || !dialpadFragment.isVisible()) {
- // This callback can happen if the dialpad fragment is recreated because of
- // activity destruction. In that case, don't update the search view because
- // that would bring the user back to the search fragment regardless of the
- // previous state of the application. Instead, just return here and let the
- // fragment manager correctly figure out whatever fragment was last displayed.
- if (!TextUtils.isEmpty(normalizedQuery)) {
- pendingSearchViewQuery = normalizedQuery;
- }
- return;
- }
- searchView.setText(normalizedQuery);
- }
-
- try {
- if (dialpadFragment != null && dialpadFragment.isVisible()) {
- dialpadFragment.process_quote_emergency_unquote(normalizedQuery);
- }
- } catch (Exception ignored) {
- // Skip any exceptions for this piece of code
- }
- }
-
- @Override
- public boolean onDialpadSpacerTouchWithEmptyQuery() {
- return false;
- }
-
- @Override
- public boolean shouldShowDialpadChooser() {
- // Show the dialpad chooser if we're in a call
- return true;
- }
-
- @Override
- public void onSearchListTouch() {
- if (isDialpadShown) {
- PerformanceReport.recordClick(UiAction.Type.CLOSE_DIALPAD);
- hideDialpadFragment(true, false);
- if (TextUtils.isEmpty(dialpadQuery)) {
- exitSearchUi();
- }
- } else {
- UiUtil.hideKeyboardFrom(this, searchEditTextLayout);
- }
- }
-
- @Override
- public void onListFragmentScrollStateChange(int scrollState) {
- PerformanceReport.recordScrollStateChange(scrollState);
- if (scrollState == OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
- hideDialpadFragment(true, false);
- DialerUtils.hideInputMethod(parentLayout);
- }
- }
-
- @Override
- public void onListFragmentScroll(int firstVisibleItem, int visibleItemCount, int totalItemCount) {
- // TODO: No-op for now. This should eventually show/hide the actionBar based on
- // interactions with the ListsFragments.
- }
-
- private boolean phoneIsInUse() {
- return TelecomUtil.isInManagedCall(this);
- }
-
- private boolean canIntentBeHandled(Intent intent) {
- final PackageManager packageManager = getPackageManager();
- final List<ResolveInfo> resolveInfo =
- packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
- return resolveInfo != null && resolveInfo.size() > 0;
- }
-
- /** Called when the user has long-pressed a contact tile to start a drag operation. */
- @Override
- public void onDragStarted(int x, int y, PhoneFavoriteSquareTileView view) {
- listsFragment.showRemoveView(true);
- }
-
- @Override
- public void onDragHovered(int x, int y, PhoneFavoriteSquareTileView view) {}
-
- /** Called when the user has released a contact tile after long-pressing it. */
- @Override
- public void onDragFinished(int x, int y) {
- listsFragment.showRemoveView(false);
- }
-
- @Override
- public void onDroppedOnRemove() {}
-
- @Override
- public ImageView getDragShadowOverlay() {
- return findViewById(R.id.contact_tile_drag_shadow_overlay);
- }
-
- @Override
- public void setHasFrequents(boolean hasFrequents) {
- // No-op
- }
-
- /**
- * Allows the SpeedDialFragment to attach the drag controller to mRemoveViewContainer once it has
- * been attached to the activity.
- */
- @Override
- public void setDragDropController(DragDropController dragController) {
- dragDropController = dragController;
- listsFragment.getRemoveView().setDragDropController(dragController);
- }
-
- /** Implemented to satisfy {@link OldSpeedDialFragment.HostInterface} */
- @Override
- public void showAllContactsTab() {
- if (listsFragment != null) {
- listsFragment.showTab(DialtactsPagerAdapter.TAB_INDEX_ALL_CONTACTS);
- }
- }
-
- /** Implemented to satisfy {@link CallLogFragment.HostInterface} */
- @Override
- public void showDialpad() {
- showDialpadFragment(true);
- }
-
- @Override
- public void enableFloatingButton(boolean enabled) {
- LogUtil.d("DialtactsActivity.enableFloatingButton", "enable: %b", enabled);
- // Floating button shouldn't be enabled when dialpad is shown.
- if (!isDialpadShown() || !enabled) {
- floatingActionButtonController.setVisible(enabled);
- }
- }
-
- @Override
- public void onPickDataUri(
- Uri dataUri, boolean isVideoCall, CallSpecificAppData callSpecificAppData) {
- clearSearchOnPause = true;
- PhoneNumberInteraction.startInteractionForPhoneCall(
- DialtactsActivity.this, dataUri, isVideoCall, callSpecificAppData);
- }
-
- @Override
- public void onPickPhoneNumber(
- String phoneNumber, boolean isVideoCall, CallSpecificAppData callSpecificAppData) {
- if (phoneNumber == null) {
- // Invalid phone number, but let the call go through so that InCallUI can show
- // an error message.
- phoneNumber = "";
- }
- PreCall.start(
- this,
- new CallIntentBuilder(phoneNumber, callSpecificAppData)
- .setIsVideoCall(isVideoCall)
- .setAllowAssistedDial(callSpecificAppData.getAllowAssistedDialing()));
-
- clearSearchOnPause = true;
- }
-
- @Override
- public void onHomeInActionBarSelected() {
- exitSearchUi();
- }
-
- @Override
- public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
- // FAB does not move with the new favorites UI
- }
-
- @Override
- public void onPageSelected(int position) {
- updateMissedCalls();
- int tabIndex = listsFragment.getCurrentTabIndex();
- if (tabIndex != previouslySelectedTabIndex) {
- floatingActionButtonController.scaleIn();
- }
- LogUtil.i("DialtactsActivity.onPageSelected", "tabIndex: %d", tabIndex);
- previouslySelectedTabIndex = tabIndex;
- timeTabSelected = SystemClock.elapsedRealtime();
- }
-
- @Override
- public void onPageScrollStateChanged(int state) {}
-
- public boolean isActionBarShowing() {
- return actionBarController.isActionBarShowing();
- }
-
- public boolean isDialpadShown() {
- return isDialpadShown;
- }
-
- @Override
- public void setActionBarHideOffset(int offset) {
- getActionBarSafely().setHideOffset(offset);
- }
-
- @Override
- public int getActionBarHeight() {
- return actionBarHeight;
- }
-
- @VisibleForTesting
- public int getFabAlignment() {
- return FloatingActionButtonController.ALIGN_END;
- }
-
- private void updateMissedCalls() {
- if (previouslySelectedTabIndex == DialtactsPagerAdapter.TAB_INDEX_HISTORY) {
- listsFragment.markMissedCallsAsReadAndRemoveNotifications();
- }
- }
-
- @Override
- public void onDisambigDialogDismissed() {
- // Don't do anything; the app will remain open with favorites tiles displayed.
- }
-
- @Override
- public void interactionError(@InteractionErrorCode int interactionErrorCode) {
- switch (interactionErrorCode) {
- case InteractionErrorCode.USER_LEAVING_ACTIVITY:
- // This is expected to happen if the user exits the activity before the interaction occurs.
- return;
- case InteractionErrorCode.CONTACT_NOT_FOUND:
- case InteractionErrorCode.CONTACT_HAS_NO_NUMBER:
- case InteractionErrorCode.OTHER_ERROR:
- default:
- // All other error codes are unexpected. For example, it should be impossible to start an
- // interaction with an invalid contact from the Dialtacts activity.
- Assert.fail("PhoneNumberInteraction error: " + interactionErrorCode);
- }
- }
-
- @Override
- public void onRequestPermissionsResult(
- int requestCode, String[] permissions, int[] grantResults) {
- // This should never happen; it should be impossible to start an interaction without the
- // contacts permission from the Dialtacts activity.
- Assert.fail(
- String.format(
- Locale.US,
- "Permissions requested unexpectedly: %d/%s/%s",
- requestCode,
- Arrays.toString(permissions),
- Arrays.toString(grantResults)));
- }
-
- @Override
- public void onActionModeStateChanged(ActionMode mode, boolean isEnabled) {
- isMultiSelectModeEnabled = isEnabled;
- }
-
- @Override
- public boolean isActionModeStateEnabled() {
- return isMultiSelectModeEnabled;
- }
-
- private CallInitiationType.Type getCallInitiationType() {
- return isDialpadShown
- ? CallInitiationType.Type.DIALPAD
- : CallInitiationType.Type.REGULAR_SEARCH;
- }
-
- @Override
- public void onCallPlacedFromSearch() {
- DialerUtils.hideInputMethod(parentLayout);
- clearSearchOnPause = true;
- }
-
- @Override
- public void requestingPermission() {}
-
- protected int getPreviouslySelectedTabIndex() {
- return previouslySelectedTabIndex;
- }
-
- @Override
- public void onContactSelected(ImageView photo, Uri contactUri, long contactId) {
- Logger.get(this)
- .logInteraction(InteractionEvent.Type.OPEN_QUICK_CONTACT_FROM_CONTACTS_FRAGMENT_ITEM);
- QuickContact.showQuickContact(
- this, photo, contactUri, QuickContact.MODE_LARGE, null /* excludeMimes */);
- }
-
- /** Popup menu accessible from the search bar */
- protected class OptionsPopupMenu extends PopupMenu {
-
- public OptionsPopupMenu(Context context, View anchor) {
- super(context, anchor, Gravity.END);
- }
-
- @Override
- public void show() {
- Menu menu = getMenu();
- MenuItem clearFrequents = menu.findItem(R.id.menu_clear_frequents);
- clearFrequents.setVisible(
- PermissionsUtil.hasContactsReadPermissions(DialtactsActivity.this)
- && listsFragment != null
- && listsFragment.hasFrequents());
-
- menu.findItem(R.id.menu_history)
- .setVisible(PermissionsUtil.hasPhonePermissions(DialtactsActivity.this));
-
- Context context = DialtactsActivity.this.getApplicationContext();
- MenuItem simulatorMenuItem = menu.findItem(R.id.menu_simulator_submenu);
- Simulator simulator = SimulatorComponent.get(context).getSimulator();
- if (simulator.shouldShow()) {
- simulatorMenuItem.setVisible(true);
- simulatorMenuItem.setActionProvider(simulator.getActionProvider(DialtactsActivity.this));
- } else {
- simulatorMenuItem.setVisible(false);
- }
- super.show();
- }
- }
-
- /**
- * Listener that listens to drag events and sends their x and y coordinates to a {@link
- * DragDropController}.
- */
- private class LayoutOnDragListener implements OnDragListener {
-
- @Override
- public boolean onDrag(View v, DragEvent event) {
- if (event.getAction() == DragEvent.ACTION_DRAG_LOCATION) {
- dragDropController.handleDragHovered(v, (int) event.getX(), (int) event.getY());
- }
- return true;
- }
- }
-
- @VisibleForTesting
- static void setVoiceSearchEnabledForTest(Optional<Boolean> enabled) {
- voiceSearchEnabledForTest = enabled;
- }
-}
diff --git a/java/com/android/dialer/app/MainComponent.java b/java/com/android/dialer/app/MainComponent.java
index 1d3a4ce..c076cbc 100644
--- a/java/com/android/dialer/app/MainComponent.java
+++ b/java/com/android/dialer/app/MainComponent.java
@@ -59,6 +59,6 @@
}
private static String getComponentName() {
- return "com.android.dialer.app.DialtactsActivity";
+ return "com.android.dialer.main.impl.MainActivity";
}
}
diff --git a/java/com/android/dialer/app/calllog/BlockReportSpamListener.java b/java/com/android/dialer/app/calllog/BlockReportSpamListener.java
index 825bf8c..3675df4 100644
--- a/java/com/android/dialer/app/calllog/BlockReportSpamListener.java
+++ b/java/com/android/dialer/app/calllog/BlockReportSpamListener.java
@@ -33,7 +33,6 @@
import com.android.dialer.spam.Spam;
import com.android.dialer.spam.SpamComponent;
import com.android.dialer.spam.SpamSettings;
-import com.android.dialer.spam.promo.SpamBlockingPromoHelper;
/** Listener to show dialogs for block and report spam actions. */
public class BlockReportSpamListener implements CallLogListItemViewHolder.OnClickListener {
@@ -45,7 +44,6 @@
private final FilteredNumberAsyncQueryHandler filteredNumberAsyncQueryHandler;
private final Spam spam;
private final SpamSettings spamSettings;
- private final SpamBlockingPromoHelper spamBlockingPromoHelper;
public BlockReportSpamListener(
Context context,
@@ -60,7 +58,6 @@
this.filteredNumberAsyncQueryHandler = filteredNumberAsyncQueryHandler;
spam = SpamComponent.get(context).spam();
spamSettings = SpamComponent.get(context).spamSettings();
- spamBlockingPromoHelper = new SpamBlockingPromoHelper(context, spamSettings);
}
@Override
@@ -204,28 +201,5 @@
}
private void showSpamBlockingPromoDialog() {
- if (!spamBlockingPromoHelper.shouldShowSpamBlockingPromo()) {
- return;
- }
-
- Logger.get(context).logImpression(DialerImpression.Type.SPAM_BLOCKING_CALL_LOG_PROMO_SHOWN);
- spamBlockingPromoHelper.showSpamBlockingPromoDialog(
- fragmentManager,
- () -> {
- Logger.get(context)
- .logImpression(DialerImpression.Type.SPAM_BLOCKING_ENABLED_THROUGH_CALL_LOG_PROMO);
- spamSettings.modifySpamBlockingSetting(
- true,
- success -> {
- if (!success) {
- Logger.get(context)
- .logImpression(
- DialerImpression.Type
- .SPAM_BLOCKING_MODIFY_FAILURE_THROUGH_CALL_LOG_PROMO);
- }
- spamBlockingPromoHelper.showModifySettingOnCompleteSnackbar(rootView, success);
- });
- },
- null /* onDismissListener */);
}
}
diff --git a/java/com/android/dialer/app/calllog/CallLogAdapter.java b/java/com/android/dialer/app/calllog/CallLogAdapter.java
index edea8cb..6866d46 100644
--- a/java/com/android/dialer/app/calllog/CallLogAdapter.java
+++ b/java/com/android/dialer/app/calllog/CallLogAdapter.java
@@ -68,8 +68,6 @@
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.AsyncTaskExecutor;
import com.android.dialer.common.concurrent.AsyncTaskExecutors;
-import com.android.dialer.compat.android.provider.VoicemailCompat;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.contacts.ContactsComponent;
import com.android.dialer.duo.Duo;
import com.android.dialer.duo.DuoComponent;
@@ -119,11 +117,6 @@
public static final String LOAD_DATA_TASK_IDENTIFIER = "load_data";
- public static final String ENABLE_CALL_LOG_MULTI_SELECT = "enable_call_log_multiselect";
- public static final boolean ENABLE_CALL_LOG_MULTI_SELECT_FLAG = true;
-
- @VisibleForTesting static final String FILTER_EMERGENCY_CALLS_FLAG = "filter_emergency_calls";
-
protected final Activity activity;
protected final VoicemailPlaybackPresenter voicemailPlaybackPresenter;
/** Cache for repeated requests to Telecom/Telephony. */
@@ -289,10 +282,7 @@
new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
- if (ConfigProviderComponent.get(v.getContext())
- .getConfigProvider()
- .getBoolean(ENABLE_CALL_LOG_MULTI_SELECT, ENABLE_CALL_LOG_MULTI_SELECT_FLAG)
- && voicemailPlaybackPresenter != null) {
+ if (voicemailPlaybackPresenter != null) {
if (v.getId() == R.id.primary_action_view || v.getId() == R.id.quick_contact_photo) {
if (actionMode == null) {
Logger.get(activity)
@@ -840,24 +830,12 @@
}
private boolean isHiddenRow(@Nullable String number, long rowId) {
- if (isHideableEmergencyNumberRow(number)) {
- return true;
- }
if (hiddenRowIds.contains(rowId)) {
return true;
}
return false;
}
- private boolean isHideableEmergencyNumberRow(@Nullable String number) {
- if (!ConfigProviderComponent.get(activity)
- .getConfigProvider()
- .getBoolean(FILTER_EMERGENCY_CALLS_FLAG, false)) {
- return false;
- }
- return number != null && PhoneNumberUtils.isEmergencyNumber(number);
- }
-
private void loadAndRender(
final CallLogListItemViewHolder viewHolder,
final long rowId,
@@ -1054,10 +1032,7 @@
details.number + details.postDialDigits,
details.countryIso,
details.cachedContactInfo,
- position
- < ConfigProviderComponent.get(activity)
- .getConfigProvider()
- .getLong("number_of_call_to_do_remote_lookup", 5L));
+ position < 5L);
logCp2Metrics(details, info);
}
CharSequence formattedNumber =
diff --git a/java/com/android/dialer/app/calllog/CallLogFragment.java b/java/com/android/dialer/app/calllog/CallLogFragment.java
index 51b8dd9..6a44253 100644
--- a/java/com/android/dialer/app/calllog/CallLogFragment.java
+++ b/java/com/android/dialer/app/calllog/CallLogFragment.java
@@ -58,7 +58,6 @@
import com.android.dialer.common.Assert;
import com.android.dialer.common.FragmentUtils;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.database.CallLogQueryHandler;
import com.android.dialer.database.CallLogQueryHandler.Listener;
import com.android.dialer.location.GeoUtil;
@@ -294,11 +293,6 @@
protected void setupView(View view) {
recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
- if (ConfigProviderComponent.get(getContext())
- .getConfigProvider()
- .getBoolean("is_call_log_item_anim_null", false)) {
- recyclerView.setItemAnimator(null);
- }
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
diff --git a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
index fa0e720..575de56 100644
--- a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
+++ b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
@@ -76,7 +76,6 @@
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.AsyncTaskExecutors;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.constants.ActivityRequestCodes;
import com.android.dialer.contactphoto.ContactPhotoManager;
import com.android.dialer.dialercontact.DialerContact;
@@ -152,8 +151,6 @@
public View callButtonView;
public View videoCallButtonView;
- public View setUpVideoButtonView;
- public View inviteVideoButtonView;
public View createNewContactButtonView;
public View addToExistingContactButtonView;
public View sendMessageView;
@@ -317,12 +314,7 @@
primaryActionButtonView.setOnClickListener(this);
primaryActionButtonView.setOnLongClickListener(this);
primaryActionView.setOnClickListener(this.expandCollapseListener);
- if (this.voicemailPlaybackPresenter != null
- && ConfigProviderComponent.get(this.context)
- .getConfigProvider()
- .getBoolean(
- CallLogAdapter.ENABLE_CALL_LOG_MULTI_SELECT,
- CallLogAdapter.ENABLE_CALL_LOG_MULTI_SELECT_FLAG)) {
+ if (this.voicemailPlaybackPresenter != null) {
primaryActionView.setOnLongClickListener(longPressListener);
quickContactView.setOnLongClickListener(longPressListener);
quickContactView.setMulitSelectListeners(
@@ -361,54 +353,12 @@
(ImageView) view.findViewById(R.id.primary_action_button));
}
- public static CallLogListItemViewHolder createForTest(Context context) {
- return createForTest(context, null, null, new CallLogCache(context));
- }
-
- public static CallLogListItemViewHolder createForTest(
- Context context,
- View.OnClickListener expandCollapseListener,
- VoicemailPlaybackPresenter voicemailPlaybackPresenter,
- CallLogCache callLogCache) {
- Resources resources = context.getResources();
- PhoneCallDetailsHelper phoneCallDetailsHelper =
- new PhoneCallDetailsHelper(context, resources, callLogCache);
-
- CallLogListItemViewHolder viewHolder =
- new CallLogListItemViewHolder(
- context,
- null,
- expandCollapseListener /* expandCollapseListener */,
- null,
- null,
- callLogCache,
- new CallLogListItemHelper(phoneCallDetailsHelper, resources, callLogCache),
- voicemailPlaybackPresenter,
- LayoutInflater.from(context).inflate(R.layout.call_log_list_item, null),
- new DialerQuickContactBadge(context),
- new View(context),
- PhoneCallDetailsViews.createForTest(context),
- new CardView(context),
- new TextView(context),
- new ImageView(context));
- viewHolder.detailsButtonView = new TextView(context);
- viewHolder.actionsView = new View(context);
- viewHolder.voicemailPlaybackView = new VoicemailPlaybackLayout(context);
- viewHolder.workIconView = new ImageButton(context);
- viewHolder.checkBoxView = new ImageButton(context);
- return viewHolder;
- }
-
@Override
public boolean onMenuItemClick(MenuItem item) {
int resId = item.getItemId();
if (resId == R.id.context_menu_copy_to_clipboard) {
ClipboardUtils.copyText(context, null, number, true);
return true;
- } else if (resId == R.id.context_menu_copy_transcript_to_clipboard) {
- ClipboardUtils.copyText(
- context, null, phoneCallDetailsViews.voicemailTranscriptionView.getText(), true);
- return true;
} else if (resId == R.id.context_menu_edit_before_call) {
final Intent intent = new Intent(Intent.ACTION_DIAL, CallUtil.getCallUri(number));
DialerUtils.startActivityWithErrorToast(context, intent);
@@ -459,12 +409,6 @@
videoCallButtonView = actionsView.findViewById(R.id.video_call_action);
videoCallButtonView.setOnClickListener(this);
- setUpVideoButtonView = actionsView.findViewById(R.id.set_up_video_action);
- setUpVideoButtonView.setOnClickListener(this);
-
- inviteVideoButtonView = actionsView.findViewById(R.id.invite_video_action);
- inviteVideoButtonView.setOnClickListener(this);
-
createNewContactButtonView = actionsView.findViewById(R.id.create_new_contact_action);
createNewContactButtonView.setOnClickListener(this);
@@ -596,8 +540,6 @@
// This saves us having to remember to set it to GONE in multiple places.
callButtonView.setVisibility(View.GONE);
videoCallButtonView.setVisibility(View.GONE);
- setUpVideoButtonView.setVisibility(View.GONE);
- inviteVideoButtonView.setVisibility(View.GONE);
// For an emergency number, show "Call details" only.
if (PhoneNumberHelper.isLocalEmergencyNumber(context, number)) {
@@ -703,43 +645,11 @@
break;
}
- boolean identifiedSpamCall = isSpamFeatureEnabled && isSpam;
if (duo.isReachable(context, number)) {
videoCallButtonView.setTag(
IntentProvider.getDuoVideoIntentProvider(number, isNonContactEntry(info)));
videoCallButtonView.setVisibility(View.VISIBLE);
CallIntentBuilder.increaseLightbringerCallButtonAppearInExpandedCallLogItemCount();
- } else if (duo.isActivated(context) && !identifiedSpamCall) {
- if (ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean("enable_call_log_duo_invite_button", false)) {
- inviteVideoButtonView.setTag(IntentProvider.getDuoInviteIntentProvider(number));
- inviteVideoButtonView.setVisibility(View.VISIBLE);
- Logger.get(context).logImpression(DialerImpression.Type.DUO_CALL_LOG_INVITE_SHOWN);
- CallIntentBuilder.increaseLightbringerCallButtonAppearInExpandedCallLogItemCount();
- }
- } else if (duo.isEnabled(context) && !identifiedSpamCall) {
- if (!duo.isInstalled(context)) {
- if (ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean("enable_call_log_install_duo_button", false)) {
- setUpVideoButtonView.setTag(IntentProvider.getInstallDuoIntentProvider());
- setUpVideoButtonView.setVisibility(View.VISIBLE);
- Logger.get(context)
- .logImpression(DialerImpression.Type.DUO_CALL_LOG_SET_UP_INSTALL_SHOWN);
- CallIntentBuilder.increaseLightbringerCallButtonAppearInExpandedCallLogItemCount();
- }
- } else {
- if (ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean("enable_call_log_activate_duo_button", false)) {
- setUpVideoButtonView.setTag(IntentProvider.getSetUpDuoIntentProvider());
- setUpVideoButtonView.setVisibility(View.VISIBLE);
- Logger.get(context)
- .logImpression(DialerImpression.Type.DUO_CALL_LOG_SET_UP_ACTIVATE_SHOWN);
- CallIntentBuilder.increaseLightbringerCallButtonAppearInExpandedCallLogItemCount();
- }
- }
}
break;
default:
diff --git a/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java b/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java
index 126b7a1..f37d5d3 100644
--- a/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java
+++ b/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java
@@ -23,7 +23,6 @@
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
-import android.os.Build;
import android.provider.CallLog.Calls;
import android.provider.VoicemailContract.Voicemails;
import android.support.annotation.NonNull;
@@ -38,7 +37,6 @@
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.database.Selection;
import com.android.dialer.compat.android.provider.VoicemailCompat;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.location.GeoUtil;
import com.android.dialer.phonenumbercache.ContactInfo;
import com.android.dialer.phonenumbercache.ContactInfoHelper;
@@ -51,11 +49,6 @@
/** Helper class operating on call log notifications. */
public class CallLogNotificationsQueryHelper {
-
- @VisibleForTesting
- static final String CONFIG_NEW_VOICEMAIL_NOTIFICATION_THRESHOLD_OFFSET =
- "new_voicemail_notification_threshold";
-
private final Context context;
private final NewCallsQuery newCallsQuery;
private final ContactInfoHelper contactInfoHelper;
@@ -164,11 +157,7 @@
public List<NewCall> getNewVoicemails() {
return newCallsQuery.query(
Calls.VOICEMAIL_TYPE,
- System.currentTimeMillis()
- - ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getLong(
- CONFIG_NEW_VOICEMAIL_NOTIFICATION_THRESHOLD_OFFSET, TimeUnit.DAYS.toMillis(7)));
+ System.currentTimeMillis() - TimeUnit.DAYS.toMillis(7));
}
/**
diff --git a/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java b/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
index e6b94fc..46de7ad 100644
--- a/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
+++ b/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
@@ -79,8 +79,6 @@
private final Calendar calendar;
private final CachedNumberLookupService cachedNumberLookupService;
- /** The injected current time in milliseconds since the epoch. Used only by tests. */
- private Long currentTimeMillisForTest;
private CharSequence phoneTypeLabelForTest;
/** List of items to be concatenated together for accessibility descriptions */
@@ -570,11 +568,7 @@
* <p>It can be injected in tests using {@link #setCurrentTimeForTest(long)}.
*/
private long getCurrentTimeMillis() {
- if (currentTimeMillisForTest == null) {
- return System.currentTimeMillis();
- } else {
- return currentTimeMillisForTest;
- }
+ return System.currentTimeMillis();
}
/** Sets the call count, date, and if it is a voicemail, sets the duration. */
diff --git a/java/com/android/dialer/app/list/ContentChangedFilter.java b/java/com/android/dialer/app/list/ContentChangedFilter.java
deleted file mode 100644
index 8c532ba..0000000
--- a/java/com/android/dialer/app/list/ContentChangedFilter.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source 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.app.list;
-
-import android.view.View;
-import android.view.View.AccessibilityDelegate;
-import android.view.ViewGroup;
-import android.view.accessibility.AccessibilityEvent;
-
-/**
- * AccessibilityDelegate that will filter out TYPE_WINDOW_CONTENT_CHANGED Used to suppress "Showing
- * items x of y" from firing of ListView whenever it's content changes. AccessibilityEvent can only
- * be rejected at a view's parent once it is generated, use addToParent() to add this delegate to
- * the parent.
- */
-public class ContentChangedFilter extends AccessibilityDelegate {
-
- // the view we don't want TYPE_WINDOW_CONTENT_CHANGED to fire.
- private View view;
-
- private ContentChangedFilter(View view) {
- super();
- this.view = view;
- }
-
- /** Add this delegate to the parent of @param view to filter out TYPE_WINDOW_CONTENT_CHANGED */
- public static void addToParent(View view) {
- View parent = (View) view.getParent();
- parent.setAccessibilityDelegate(new ContentChangedFilter(view));
- }
-
- @Override
- public boolean onRequestSendAccessibilityEvent(
- ViewGroup host, View child, AccessibilityEvent event) {
- if (child == view) {
- if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED) {
- return false;
- }
- }
- return super.onRequestSendAccessibilityEvent(host, child, event);
- }
-}
diff --git a/java/com/android/dialer/app/list/DialerViewPager.java b/java/com/android/dialer/app/list/DialerViewPager.java
deleted file mode 100644
index ae99f05..0000000
--- a/java/com/android/dialer/app/list/DialerViewPager.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source 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.app.list;
-
-import android.content.Context;
-import android.support.v4.view.ViewPager;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-
-/** Class that handles enabling/disabling swiping between @{ViewPagerTabs}. */
-public class DialerViewPager extends ViewPager {
-
- private boolean enableSwipingPages;
-
- public DialerViewPager(Context context, AttributeSet attributeSet) {
- super(context, attributeSet);
- enableSwipingPages = true;
- }
-
- @Override
- public boolean onInterceptTouchEvent(MotionEvent event) {
- if (enableSwipingPages) {
- return super.onInterceptTouchEvent(event);
- }
-
- return false;
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- if (enableSwipingPages) {
- return super.onTouchEvent(event);
- }
-
- return false;
- }
-
- public void setEnableSwipingPages(boolean enabled) {
- enableSwipingPages = enabled;
- }
-}
diff --git a/java/com/android/dialer/app/list/DialtactsPagerAdapter.java b/java/com/android/dialer/app/list/DialtactsPagerAdapter.java
deleted file mode 100644
index 317f24f..0000000
--- a/java/com/android/dialer/app/list/DialtactsPagerAdapter.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source 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.app.list;
-
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.support.annotation.IntDef;
-import android.support.v13.app.FragmentPagerAdapter;
-import android.view.ViewGroup;
-import com.android.dialer.app.calllog.CallLogFragment;
-import com.android.dialer.app.calllog.VisualVoicemailCallLogFragment;
-import com.android.dialer.common.Assert;
-import com.android.dialer.common.LogUtil;
-import com.android.dialer.contactsfragment.ContactsFragment;
-import com.android.dialer.contactsfragment.ContactsFragment.Header;
-import com.android.dialer.database.CallLogQueryHandler;
-import com.android.dialer.util.ViewUtil;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/** ViewPager adapter for {@link com.android.dialer.app.DialtactsActivity}. */
-public class DialtactsPagerAdapter extends FragmentPagerAdapter {
-
- /** IntDef for indices of ViewPager tabs. */
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({TAB_INDEX_SPEED_DIAL, TAB_INDEX_HISTORY, TAB_INDEX_ALL_CONTACTS, TAB_INDEX_VOICEMAIL})
- public @interface TabIndex {}
-
- public static final int TAB_INDEX_SPEED_DIAL = 0;
- public static final int TAB_INDEX_HISTORY = 1;
- public static final int TAB_INDEX_ALL_CONTACTS = 2;
- public static final int TAB_INDEX_VOICEMAIL = 3;
- public static final int TAB_COUNT_DEFAULT = 3;
- public static final int TAB_COUNT_WITH_VOICEMAIL = 4;
-
- private final List<Fragment> fragments = new ArrayList<>();
- private final String[] tabTitles;
- private OldSpeedDialFragment oldSpeedDialFragment;
- private CallLogFragment callLogFragment;
- private ContactsFragment contactsFragment;
- private CallLogFragment voicemailFragment;
-
- private boolean hasActiveVoicemailProvider;
-
- public DialtactsPagerAdapter(
- FragmentManager fm, String[] tabTitles, boolean hasVoicemailProvider) {
- super(fm);
- this.tabTitles = tabTitles;
- hasActiveVoicemailProvider = hasVoicemailProvider;
- fragments.addAll(Collections.nCopies(TAB_COUNT_WITH_VOICEMAIL, null));
- }
-
- @Override
- public long getItemId(int position) {
- return getRtlPosition(position);
- }
-
- @Override
- public Fragment getItem(int position) {
- LogUtil.d("ViewPagerAdapter.getItem", "position: %d", position);
- switch (getRtlPosition(position)) {
- case TAB_INDEX_SPEED_DIAL:
- if (oldSpeedDialFragment == null) {
- oldSpeedDialFragment = new OldSpeedDialFragment();
- }
- return oldSpeedDialFragment;
- case TAB_INDEX_HISTORY:
- if (callLogFragment == null) {
- callLogFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL);
- }
- return callLogFragment;
- case TAB_INDEX_ALL_CONTACTS:
- if (contactsFragment == null) {
- contactsFragment = ContactsFragment.newInstance(Header.ADD_CONTACT);
- }
- return contactsFragment;
- case TAB_INDEX_VOICEMAIL:
- if (voicemailFragment == null) {
- voicemailFragment = new VisualVoicemailCallLogFragment();
- LogUtil.v(
- "ViewPagerAdapter.getItem",
- "new VisualVoicemailCallLogFragment: %s",
- voicemailFragment);
- }
- return voicemailFragment;
- default:
- throw Assert.createIllegalStateFailException("No fragment at position " + position);
- }
- }
-
- @Override
- public Fragment instantiateItem(ViewGroup container, int position) {
- LogUtil.d("ViewPagerAdapter.instantiateItem", "position: %d", position);
- // On rotation the FragmentManager handles rotation. Therefore getItem() isn't called.
- // Copy the fragments that the FragmentManager finds so that we can store them in
- // instance variables for later.
- final Fragment fragment = (Fragment) super.instantiateItem(container, position);
- if (fragment instanceof OldSpeedDialFragment) {
- oldSpeedDialFragment = (OldSpeedDialFragment) fragment;
- } else if (fragment instanceof CallLogFragment && position == TAB_INDEX_HISTORY) {
- callLogFragment = (CallLogFragment) fragment;
- } else if (fragment instanceof ContactsFragment) {
- contactsFragment = (ContactsFragment) fragment;
- } else if (fragment instanceof CallLogFragment && position == TAB_INDEX_VOICEMAIL) {
- voicemailFragment = (CallLogFragment) fragment;
- LogUtil.v("ViewPagerAdapter.instantiateItem", voicemailFragment.toString());
- }
- fragments.set(position, fragment);
- return fragment;
- }
-
- /**
- * When {@link android.support.v4.view.PagerAdapter#notifyDataSetChanged} is called, this method
- * is called on all pages to determine whether they need to be recreated. When the voicemail tab
- * is removed, the view needs to be recreated by returning POSITION_NONE. If notifyDataSetChanged
- * is called for some other reason, the voicemail tab is recreated only if it is active. All other
- * tabs do not need to be recreated and POSITION_UNCHANGED is returned.
- */
- @Override
- public int getItemPosition(Object object) {
- return !hasActiveVoicemailProvider && fragments.indexOf(object) == TAB_INDEX_VOICEMAIL
- ? POSITION_NONE
- : POSITION_UNCHANGED;
- }
-
- @Override
- public int getCount() {
- return hasActiveVoicemailProvider ? TAB_COUNT_WITH_VOICEMAIL : TAB_COUNT_DEFAULT;
- }
-
- @Override
- public CharSequence getPageTitle(@TabIndex int position) {
- return tabTitles[position];
- }
-
- public int getRtlPosition(int position) {
- if (ViewUtil.isRtl()) {
- return getCount() - 1 - position;
- }
- return position;
- }
-
- public void removeVoicemailFragment(FragmentManager manager) {
- if (voicemailFragment != null) {
- manager.beginTransaction().remove(voicemailFragment).commitAllowingStateLoss();
- voicemailFragment = null;
- }
- }
-
- public boolean hasActiveVoicemailProvider() {
- return hasActiveVoicemailProvider;
- }
-
- public void setHasActiveVoicemailProvider(boolean hasActiveVoicemailProvider) {
- this.hasActiveVoicemailProvider = hasActiveVoicemailProvider;
- }
-}
diff --git a/java/com/android/dialer/app/list/DragDropController.java b/java/com/android/dialer/app/list/DragDropController.java
deleted file mode 100644
index 1c33a8a..0000000
--- a/java/com/android/dialer/app/list/DragDropController.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source 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.app.list;
-
-import android.view.View;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Class that handles and combines drag events generated from multiple views, and then fires off
- * events to any OnDragDropListeners that have registered for callbacks.
- */
-public class DragDropController {
-
- private final List<OnDragDropListener> onDragDropListeners = new ArrayList<OnDragDropListener>();
- private final DragItemContainer dragItemContainer;
- private final int[] locationOnScreen = new int[2];
-
- public DragDropController(DragItemContainer dragItemContainer) {
- this.dragItemContainer = dragItemContainer;
- }
-
- /** @return True if the drag is started, false if the drag is cancelled for some reason. */
- boolean handleDragStarted(View v, int x, int y) {
- v.getLocationOnScreen(locationOnScreen);
- x = x + locationOnScreen[0];
- y = y + locationOnScreen[1];
- final PhoneFavoriteSquareTileView tileView = dragItemContainer.getViewForLocation(x, y);
- if (tileView == null) {
- return false;
- }
- for (int i = 0; i < onDragDropListeners.size(); i++) {
- onDragDropListeners.get(i).onDragStarted(x, y, tileView);
- }
-
- return true;
- }
-
- public void handleDragHovered(View v, int x, int y) {
- v.getLocationOnScreen(locationOnScreen);
- final int screenX = x + locationOnScreen[0];
- final int screenY = y + locationOnScreen[1];
- final PhoneFavoriteSquareTileView view = dragItemContainer.getViewForLocation(screenX, screenY);
- for (int i = 0; i < onDragDropListeners.size(); i++) {
- onDragDropListeners.get(i).onDragHovered(screenX, screenY, view);
- }
- }
-
- public void handleDragFinished(int x, int y, boolean isRemoveView) {
- if (isRemoveView) {
- for (int i = 0; i < onDragDropListeners.size(); i++) {
- onDragDropListeners.get(i).onDroppedOnRemove();
- }
- }
-
- for (int i = 0; i < onDragDropListeners.size(); i++) {
- onDragDropListeners.get(i).onDragFinished(x, y);
- }
- }
-
- public void addOnDragDropListener(OnDragDropListener listener) {
- if (!onDragDropListeners.contains(listener)) {
- onDragDropListeners.add(listener);
- }
- }
-
- public void removeOnDragDropListener(OnDragDropListener listener) {
- if (onDragDropListeners.contains(listener)) {
- onDragDropListeners.remove(listener);
- }
- }
-
- /**
- * Callback interface used to retrieve views based on the current touch coordinates of the drag
- * event. The {@link DragItemContainer} houses the draggable views that this {@link
- * DragDropController} controls.
- */
- public interface DragItemContainer {
-
- PhoneFavoriteSquareTileView getViewForLocation(int x, int y);
- }
-}
diff --git a/java/com/android/dialer/app/list/ListsFragment.java b/java/com/android/dialer/app/list/ListsFragment.java
deleted file mode 100644
index e75561e..0000000
--- a/java/com/android/dialer/app/list/ListsFragment.java
+++ /dev/null
@@ -1,492 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source 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.app.list;
-
-import static android.support.v4.view.ViewPager.SCROLL_STATE_SETTLING;
-
-import android.app.Fragment;
-import android.content.SharedPreferences;
-import android.database.ContentObserver;
-import android.database.Cursor;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Trace;
-import android.preference.PreferenceManager;
-import android.provider.VoicemailContract;
-import android.support.v4.view.ViewPager.OnPageChangeListener;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import com.android.contacts.common.list.ViewPagerTabs;
-import com.android.dialer.app.R;
-import com.android.dialer.app.calllog.CallLogFragment;
-import com.android.dialer.app.calllog.CallLogFragment.CallLogFragmentListener;
-import com.android.dialer.app.calllog.CallLogNotificationsService;
-import com.android.dialer.app.calllog.VisualVoicemailCallLogFragment;
-import com.android.dialer.common.LogUtil;
-import com.android.dialer.database.CallLogQueryHandler;
-import com.android.dialer.database.CallLogQueryHandler.Listener;
-import com.android.dialer.logging.DialerImpression;
-import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.ScreenEvent;
-import com.android.dialer.logging.UiAction;
-import com.android.dialer.performancereport.PerformanceReport;
-import com.android.dialer.util.PermissionsUtil;
-import com.android.dialer.voicemailstatus.VisualVoicemailEnabledChecker;
-import com.android.dialer.voicemailstatus.VoicemailStatusHelper;
-import java.util.ArrayList;
-
-/**
- * Fragment that is used as the main screen of the Dialer.
- *
- * <p>Contains a ViewPager that contains various contact lists like the Speed Dial list and the All
- * Contacts list. This will also eventually contain the logic that allows sliding the ViewPager
- * containing the lists up above the search bar and pin it against the top of the screen.
- */
-public class ListsFragment extends Fragment
- implements OnPageChangeListener, Listener, CallLogFragmentListener {
-
- private static final String TAG = "ListsFragment";
-
- private DialerViewPager viewPager;
- private ViewPagerTabs viewPagerTabs;
- private DialtactsPagerAdapter adapter;
- private RemoveView removeView;
- private View removeViewContent;
- private Fragment currentPage;
- private SharedPreferences prefs;
- private boolean hasFetchedVoicemailStatus;
- private boolean showVoicemailTabAfterVoicemailStatusIsFetched;
- private final ArrayList<OnPageChangeListener> onPageChangeListeners = new ArrayList<>();
- /** The position of the currently selected tab. */
- private int tabIndex = DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL;
-
- private boolean paused;
- private CallLogQueryHandler callLogQueryHandler;
-
- private UiAction.Type[] actionTypeList;
- private final DialerImpression.Type[] swipeImpressionList =
- new DialerImpression.Type[DialtactsPagerAdapter.TAB_COUNT_WITH_VOICEMAIL];
- private final DialerImpression.Type[] clickImpressionList =
- new DialerImpression.Type[DialtactsPagerAdapter.TAB_COUNT_WITH_VOICEMAIL];
-
- // Only for detecting page selected by swiping or clicking.
- private boolean onPageScrolledBeforeScrollStateSettling;
-
- private final ContentObserver voicemailStatusObserver =
- new ContentObserver(new Handler()) {
- @Override
- public void onChange(boolean selfChange) {
- super.onChange(selfChange);
- callLogQueryHandler.fetchVoicemailStatus();
- }
- };
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- LogUtil.d("ListsFragment.onCreate", null);
- Trace.beginSection(TAG + " onCreate");
- super.onCreate(savedInstanceState);
- prefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext());
- Trace.endSection();
- }
-
- @Override
- public void onResume() {
- LogUtil.enterBlock("ListsFragment.onResume");
- Trace.beginSection(TAG + " onResume");
- super.onResume();
-
- paused = false;
-
- if (getUserVisibleHint()) {
- sendScreenViewForCurrentPosition();
- }
-
- // Fetch voicemail status to determine if we should show the voicemail tab.
- callLogQueryHandler =
- new CallLogQueryHandler(getActivity(), getActivity().getContentResolver(), this);
- callLogQueryHandler.fetchVoicemailStatus();
- callLogQueryHandler.fetchMissedCallsUnreadCount();
- Trace.endSection();
- currentPage = adapter.getItem(viewPager.getCurrentItem());
- }
-
- @Override
- public void onPause() {
- LogUtil.enterBlock("ListsFragment.onPause");
- super.onPause();
-
- paused = true;
- }
-
- @Override
- public void onDestroyView() {
- super.onDestroyView();
- viewPager.removeOnPageChangeListener(this);
- }
-
- @Override
- public View onCreateView(
- LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- LogUtil.enterBlock("ListsFragment.onCreateView");
- Trace.beginSection(TAG + " onCreateView");
- Trace.beginSection(TAG + " inflate view");
- final View parentView = inflater.inflate(R.layout.lists_fragment, container, false);
- Trace.endSection();
- Trace.beginSection(TAG + " setup views");
-
- actionTypeList = new UiAction.Type[DialtactsPagerAdapter.TAB_COUNT_WITH_VOICEMAIL];
- actionTypeList[DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL] =
- UiAction.Type.CHANGE_TAB_TO_FAVORITE;
- actionTypeList[DialtactsPagerAdapter.TAB_INDEX_HISTORY] = UiAction.Type.CHANGE_TAB_TO_CALL_LOG;
- actionTypeList[DialtactsPagerAdapter.TAB_INDEX_ALL_CONTACTS] =
- UiAction.Type.CHANGE_TAB_TO_CONTACTS;
- actionTypeList[DialtactsPagerAdapter.TAB_INDEX_VOICEMAIL] =
- UiAction.Type.CHANGE_TAB_TO_VOICEMAIL;
-
- swipeImpressionList[DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL] =
- DialerImpression.Type.SWITCH_TAB_TO_FAVORITE_BY_SWIPE;
- swipeImpressionList[DialtactsPagerAdapter.TAB_INDEX_HISTORY] =
- DialerImpression.Type.SWITCH_TAB_TO_CALL_LOG_BY_SWIPE;
- swipeImpressionList[DialtactsPagerAdapter.TAB_INDEX_ALL_CONTACTS] =
- DialerImpression.Type.SWITCH_TAB_TO_CONTACTS_BY_SWIPE;
- swipeImpressionList[DialtactsPagerAdapter.TAB_INDEX_VOICEMAIL] =
- DialerImpression.Type.SWITCH_TAB_TO_VOICEMAIL_BY_SWIPE;
-
- clickImpressionList[DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL] =
- DialerImpression.Type.SWITCH_TAB_TO_FAVORITE_BY_CLICK;
- clickImpressionList[DialtactsPagerAdapter.TAB_INDEX_HISTORY] =
- DialerImpression.Type.SWITCH_TAB_TO_CALL_LOG_BY_CLICK;
- clickImpressionList[DialtactsPagerAdapter.TAB_INDEX_ALL_CONTACTS] =
- DialerImpression.Type.SWITCH_TAB_TO_CONTACTS_BY_CLICK;
- clickImpressionList[DialtactsPagerAdapter.TAB_INDEX_VOICEMAIL] =
- DialerImpression.Type.SWITCH_TAB_TO_VOICEMAIL_BY_CLICK;
-
- String[] tabTitles = new String[DialtactsPagerAdapter.TAB_COUNT_WITH_VOICEMAIL];
- tabTitles[DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL] =
- getResources().getString(R.string.tab_speed_dial);
- tabTitles[DialtactsPagerAdapter.TAB_INDEX_HISTORY] =
- getResources().getString(R.string.tab_history);
- tabTitles[DialtactsPagerAdapter.TAB_INDEX_ALL_CONTACTS] =
- getResources().getString(R.string.tab_all_contacts);
- tabTitles[DialtactsPagerAdapter.TAB_INDEX_VOICEMAIL] =
- getResources().getString(R.string.tab_voicemail);
-
- int[] tabIcons = new int[DialtactsPagerAdapter.TAB_COUNT_WITH_VOICEMAIL];
- tabIcons[DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL] = R.drawable.quantum_ic_grade_vd_theme_24;
- tabIcons[DialtactsPagerAdapter.TAB_INDEX_HISTORY] = R.drawable.quantum_ic_schedule_vd_theme_24;
- tabIcons[DialtactsPagerAdapter.TAB_INDEX_ALL_CONTACTS] =
- R.drawable.quantum_ic_people_vd_theme_24;
- tabIcons[DialtactsPagerAdapter.TAB_INDEX_VOICEMAIL] =
- R.drawable.quantum_ic_voicemail_vd_theme_24;
-
- viewPager = (DialerViewPager) parentView.findViewById(R.id.lists_pager);
- adapter =
- new DialtactsPagerAdapter(
- getChildFragmentManager(),
- tabTitles,
- prefs.getBoolean(
- VisualVoicemailEnabledChecker.PREF_KEY_HAS_ACTIVE_VOICEMAIL_PROVIDER, false));
- viewPager.setAdapter(adapter);
-
- // This is deliberate. See cl/172018946 for the app startup implications of using 1 here
- // versus loading more fragments upfront.
- viewPager.setOffscreenPageLimit(1);
-
- viewPager.addOnPageChangeListener(this);
- showTab(DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL);
-
- viewPagerTabs = (ViewPagerTabs) parentView.findViewById(R.id.lists_pager_header);
- viewPagerTabs.configureTabIcons(tabIcons);
- viewPagerTabs.setViewPager(viewPager);
- addOnPageChangeListener(viewPagerTabs);
- removeView = (RemoveView) parentView.findViewById(R.id.remove_view);
- removeViewContent = parentView.findViewById(R.id.remove_view_content);
-
- if (PermissionsUtil.hasReadVoicemailPermissions(getContext())
- && PermissionsUtil.hasAddVoicemailPermissions(getContext())) {
- getActivity()
- .getContentResolver()
- .registerContentObserver(
- VoicemailContract.Status.CONTENT_URI, true, voicemailStatusObserver);
- } else {
- LogUtil.w("ListsFragment.onCreateView", "no voicemail read permissions");
- }
-
- Trace.endSection();
- Trace.endSection();
- return parentView;
- }
-
- @Override
- public void onDestroy() {
- getActivity().getContentResolver().unregisterContentObserver(voicemailStatusObserver);
- super.onDestroy();
- }
-
- public void addOnPageChangeListener(OnPageChangeListener onPageChangeListener) {
- if (!onPageChangeListeners.contains(onPageChangeListener)) {
- onPageChangeListeners.add(onPageChangeListener);
- }
- }
-
- /**
- * Shows the tab with the specified index. If the voicemail tab index is specified, but the
- * voicemail status hasn't been fetched, it will show the speed dial tab and try to show the
- * voicemail tab after the voicemail status has been fetched.
- */
- public void showTab(int index) {
- if (index == DialtactsPagerAdapter.TAB_INDEX_VOICEMAIL) {
- if (adapter.hasActiveVoicemailProvider()) {
- viewPager.setCurrentItem(adapter.getRtlPosition(DialtactsPagerAdapter.TAB_INDEX_VOICEMAIL));
- } else if (!hasFetchedVoicemailStatus) {
- // Try to show the voicemail tab after the voicemail status returns.
- showVoicemailTabAfterVoicemailStatusIsFetched = true;
- }
- } else if (index < getTabCount()) {
- viewPager.setCurrentItem(adapter.getRtlPosition(index));
- }
- }
-
- @Override
- public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
- // onPageScrolled(0, 0, 0) is called when app launch. And we should ignore it.
- // It's also called when swipe right from first tab, but we don't care.
- if (positionOffsetPixels != 0) {
- onPageScrolledBeforeScrollStateSettling = true;
- }
- tabIndex = adapter.getRtlPosition(position);
-
- final int count = onPageChangeListeners.size();
- for (int i = 0; i < count; i++) {
- onPageChangeListeners.get(i).onPageScrolled(position, positionOffset, positionOffsetPixels);
- }
- }
-
- @Override
- public void onPageSelected(int position) {
- // onPageScrollStateChanged(SCROLL_STATE_SETTLING) must be called before this.
- // If onPageScrolled() is called before that, the page is selected by swiping;
- // otherwise the page is selected by clicking.
- if (onPageScrolledBeforeScrollStateSettling) {
- Logger.get(getContext()).logImpression(swipeImpressionList[position]);
- onPageScrolledBeforeScrollStateSettling = false;
- } else {
- Logger.get(getContext()).logImpression(clickImpressionList[position]);
- }
-
- PerformanceReport.recordClick(actionTypeList[position]);
-
- LogUtil.i("ListsFragment.onPageSelected", "position: %d", position);
- tabIndex = adapter.getRtlPosition(position);
-
- // Show the tab which has been selected instead.
- showVoicemailTabAfterVoicemailStatusIsFetched = false;
-
- final int count = onPageChangeListeners.size();
- for (int i = 0; i < count; i++) {
- onPageChangeListeners.get(i).onPageSelected(position);
- }
- sendScreenViewForCurrentPosition();
-
- if (currentPage instanceof CallLogFragment) {
- ((CallLogFragment) currentPage).onNotVisible();
- }
- currentPage = adapter.getItem(position);
- if (currentPage instanceof CallLogFragment) {
- ((CallLogFragment) currentPage).onVisible();
- }
- }
-
- @Override
- public void onPageScrollStateChanged(int state) {
- if (state != SCROLL_STATE_SETTLING) {
- onPageScrolledBeforeScrollStateSettling = false;
- }
-
- final int count = onPageChangeListeners.size();
- for (int i = 0; i < count; i++) {
- onPageChangeListeners.get(i).onPageScrollStateChanged(state);
- }
- }
-
- @Override
- public void onVoicemailStatusFetched(Cursor statusCursor) {
- hasFetchedVoicemailStatus = true;
-
- if (getActivity() == null || paused) {
- return;
- }
-
- // Update hasActiveVoicemailProvider, which controls the number of tabs displayed.
- boolean hasActiveVoicemailProvider =
- VoicemailStatusHelper.getNumberActivityVoicemailSources(statusCursor) > 0;
- if (hasActiveVoicemailProvider != adapter.hasActiveVoicemailProvider()) {
- adapter.setHasActiveVoicemailProvider(hasActiveVoicemailProvider);
- adapter.notifyDataSetChanged();
-
- if (hasActiveVoicemailProvider) {
- Logger.get(getContext()).logImpression(DialerImpression.Type.VVM_TAB_VISIBLE);
- viewPagerTabs.updateTab(DialtactsPagerAdapter.TAB_INDEX_VOICEMAIL);
- } else {
- viewPagerTabs.removeTab(DialtactsPagerAdapter.TAB_INDEX_VOICEMAIL);
- adapter.removeVoicemailFragment(getChildFragmentManager());
- }
-
- prefs
- .edit()
- .putBoolean(
- VisualVoicemailEnabledChecker.PREF_KEY_HAS_ACTIVE_VOICEMAIL_PROVIDER,
- hasActiveVoicemailProvider)
- .apply();
- }
-
- if (hasActiveVoicemailProvider) {
- callLogQueryHandler.fetchVoicemailUnreadCount();
- }
-
- if (adapter.hasActiveVoicemailProvider() && showVoicemailTabAfterVoicemailStatusIsFetched) {
- showVoicemailTabAfterVoicemailStatusIsFetched = false;
- showTab(DialtactsPagerAdapter.TAB_INDEX_VOICEMAIL);
- }
- }
-
- @Override
- public void onVoicemailUnreadCountFetched(Cursor cursor) {
- if (getActivity() == null || getActivity().isFinishing() || cursor == null) {
- return;
- }
-
- int count = 0;
- try {
- count = cursor.getCount();
- } finally {
- cursor.close();
- }
-
- viewPagerTabs.setUnreadCount(count, DialtactsPagerAdapter.TAB_INDEX_VOICEMAIL);
- viewPagerTabs.updateTab(DialtactsPagerAdapter.TAB_INDEX_VOICEMAIL);
- }
-
- @Override
- public void onMissedCallsUnreadCountFetched(Cursor cursor) {
- if (getActivity() == null || getActivity().isFinishing() || cursor == null) {
- return;
- }
-
- int count = 0;
- try {
- count = cursor.getCount();
- } finally {
- cursor.close();
- }
-
- viewPagerTabs.setUnreadCount(count, DialtactsPagerAdapter.TAB_INDEX_HISTORY);
- viewPagerTabs.updateTab(DialtactsPagerAdapter.TAB_INDEX_HISTORY);
- }
-
- @Override
- public boolean onCallsFetched(Cursor statusCursor) {
- // Return false; did not take ownership of cursor
- return false;
- }
-
- public int getCurrentTabIndex() {
- return tabIndex;
- }
-
- public boolean shouldShowFab() {
- // If the VVM TOS is visible, don't show the fab
- if (currentPage instanceof VisualVoicemailCallLogFragment
- && ((VisualVoicemailCallLogFragment) currentPage).isModalAlertVisible()) {
- return false;
- }
-
- return true;
- }
-
- @Override
- public void updateTabUnreadCounts() {
- if (callLogQueryHandler != null) {
- callLogQueryHandler.fetchMissedCallsUnreadCount();
- if (adapter.hasActiveVoicemailProvider()) {
- callLogQueryHandler.fetchVoicemailUnreadCount();
- }
- }
- }
-
- /** External method to mark all missed calls as read. */
- public void markMissedCallsAsReadAndRemoveNotifications() {
- if (callLogQueryHandler != null) {
- callLogQueryHandler.markMissedCallsAsRead();
- CallLogNotificationsService.cancelAllMissedCalls(getContext());
- }
- }
-
- public void showRemoveView(boolean show) {
- removeViewContent.setVisibility(show ? View.VISIBLE : View.GONE);
- removeView.setAlpha(show ? 0 : 1);
- removeView.animate().alpha(show ? 1 : 0).start();
- }
-
- @Override
- public void showMultiSelectRemoveView(boolean show) {
- viewPagerTabs.setVisibility(show ? View.GONE : View.VISIBLE);
- viewPager.setEnableSwipingPages(!show);
- }
-
- public boolean hasFrequents() {
- OldSpeedDialFragment page =
- (OldSpeedDialFragment)
- adapter.getItem(adapter.getRtlPosition(DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL));
- return page.hasFrequents();
- }
-
- public RemoveView getRemoveView() {
- return removeView;
- }
-
- public int getTabCount() {
- return adapter.getCount();
- }
-
- public void sendScreenViewForCurrentPosition() {
- if (!isResumed()) {
- return;
- }
-
- ScreenEvent.Type screenType;
- switch (getCurrentTabIndex()) {
- case DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL:
- screenType = ScreenEvent.Type.SPEED_DIAL;
- break;
- case DialtactsPagerAdapter.TAB_INDEX_HISTORY:
- screenType = ScreenEvent.Type.CALL_LOG;
- break;
- case DialtactsPagerAdapter.TAB_INDEX_ALL_CONTACTS:
- screenType = ScreenEvent.Type.ALL_CONTACTS;
- break;
- case DialtactsPagerAdapter.TAB_INDEX_VOICEMAIL:
- screenType = ScreenEvent.Type.VOICEMAIL_LOG;
- break;
- default:
- return;
- }
- Logger.get(getActivity()).logScreenView(screenType, getActivity());
- }
-}
diff --git a/java/com/android/dialer/app/list/OldSpeedDialFragment.java b/java/com/android/dialer/app/list/OldSpeedDialFragment.java
deleted file mode 100644
index 9922ee2..0000000
--- a/java/com/android/dialer/app/list/OldSpeedDialFragment.java
+++ /dev/null
@@ -1,457 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source 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.app.list;
-
-import static android.Manifest.permission.READ_CONTACTS;
-
-import android.animation.Animator;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
-import android.app.Fragment;
-import android.app.LoaderManager;
-import android.content.CursorLoader;
-import android.content.Loader;
-import android.content.pm.PackageManager;
-import android.database.Cursor;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Trace;
-import android.support.v13.app.FragmentCompat;
-import android.support.v4.util.LongSparseArray;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.animation.AnimationUtils;
-import android.view.animation.LayoutAnimationController;
-import android.widget.AbsListView;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.FrameLayout;
-import android.widget.FrameLayout.LayoutParams;
-import android.widget.ImageView;
-import android.widget.ListView;
-import com.android.contacts.common.ContactTileLoaderFactory;
-import com.android.contacts.common.list.ContactTileView;
-import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
-import com.android.dialer.app.R;
-import com.android.dialer.callintent.CallSpecificAppData;
-import com.android.dialer.common.FragmentUtils;
-import com.android.dialer.common.LogUtil;
-import com.android.dialer.contactphoto.ContactPhotoManager;
-import com.android.dialer.util.PermissionsUtil;
-import com.android.dialer.util.ViewUtil;
-import com.android.dialer.widget.EmptyContentView;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-/** This fragment displays the user's favorite/frequent contacts in a grid. */
-public class OldSpeedDialFragment extends Fragment
- implements OnItemClickListener,
- PhoneFavoritesTileAdapter.OnDataSetChangedForAnimationListener,
- EmptyContentView.OnEmptyViewActionButtonClickedListener,
- FragmentCompat.OnRequestPermissionsResultCallback {
-
- private static final int READ_CONTACTS_PERMISSION_REQUEST_CODE = 1;
-
- /**
- * By default, the animation code assumes that all items in a list view are of the same height
- * when animating new list items into view (e.g. from the bottom of the screen into view). This
- * can cause incorrect translation offsets when a item that is larger or smaller than other list
- * item is removed from the list. This key is used to provide the actual height of the removed
- * object so that the actual translation appears correct to the user.
- */
- private static final long KEY_REMOVED_ITEM_HEIGHT = Long.MAX_VALUE;
-
- private static final String TAG = "OldSpeedDialFragment";
- /** Used with LoaderManager. */
- private static final int LOADER_ID_CONTACT_TILE = 1;
-
- private final LongSparseArray<Integer> itemIdTopMap = new LongSparseArray<>();
- private final LongSparseArray<Integer> itemIdLeftMap = new LongSparseArray<>();
- private final ContactTileView.Listener contactTileAdapterListener =
- new ContactTileAdapterListener(this);
- private final ScrollListener scrollListener = new ScrollListener(this);
- private LoaderManager.LoaderCallbacks<Cursor> contactTileLoaderListener;
- private int animationDuration;
- private PhoneFavoritesTileAdapter contactTileAdapter;
- private PhoneFavoriteListView listView;
- private View contactTileFrame;
- /** Layout used when there are no favorites. */
- private EmptyContentView emptyView;
-
- @Override
- public void onCreate(Bundle savedState) {
- Trace.beginSection(TAG + " onCreate");
- super.onCreate(savedState);
-
- // Construct two base adapters which will become part of PhoneFavoriteMergedAdapter.
- // We don't construct the resultant adapter at this moment since it requires LayoutInflater
- // that will be available on onCreateView().
- contactTileAdapter =
- new PhoneFavoritesTileAdapter(getContext(), contactTileAdapterListener, this);
- contactTileAdapter.setPhotoLoader(ContactPhotoManager.getInstance(getContext()));
- contactTileLoaderListener = new ContactTileLoaderListener(this, contactTileAdapter);
- animationDuration = getResources().getInteger(R.integer.fade_duration);
- Trace.endSection();
- }
-
- @Override
- public void onResume() {
- Trace.beginSection(TAG + " onResume");
- super.onResume();
- if (PermissionsUtil.hasContactsReadPermissions(getContext())) {
- if (getLoaderManager().getLoader(LOADER_ID_CONTACT_TILE) == null) {
- getLoaderManager().initLoader(LOADER_ID_CONTACT_TILE, null, contactTileLoaderListener);
-
- } else {
- getLoaderManager().getLoader(LOADER_ID_CONTACT_TILE).forceLoad();
- }
-
- emptyView.setDescription(R.string.speed_dial_empty);
- emptyView.setActionLabel(R.string.speed_dial_empty_add_favorite_action);
- } else {
- emptyView.setDescription(R.string.permission_no_speeddial);
- emptyView.setActionLabel(R.string.permission_single_turn_on);
- }
- Trace.endSection();
- }
-
- @Override
- public View onCreateView(
- LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- Trace.beginSection(TAG + " onCreateView");
- View parentView = inflater.inflate(R.layout.speed_dial_fragment, container, false);
-
- listView = (PhoneFavoriteListView) parentView.findViewById(R.id.contact_tile_list);
- listView.setOnItemClickListener(this);
- listView.setVerticalScrollBarEnabled(false);
- listView.setVerticalScrollbarPosition(View.SCROLLBAR_POSITION_RIGHT);
- listView.setScrollBarStyle(ListView.SCROLLBARS_OUTSIDE_OVERLAY);
- listView.getDragDropController().addOnDragDropListener(contactTileAdapter);
- listView.setDragShadowOverlay(
- FragmentUtils.getParentUnsafe(this, HostInterface.class).getDragShadowOverlay());
-
- emptyView = (EmptyContentView) parentView.findViewById(R.id.empty_list_view);
- emptyView.setImage(R.drawable.empty_speed_dial);
- emptyView.setActionClickedListener(this);
-
- contactTileFrame = parentView.findViewById(R.id.contact_tile_frame);
-
- final LayoutAnimationController controller =
- new LayoutAnimationController(
- AnimationUtils.loadAnimation(getContext(), android.R.anim.fade_in));
- controller.setDelay(0);
- listView.setLayoutAnimation(controller);
- listView.setAdapter(contactTileAdapter);
-
- listView.setOnScrollListener(scrollListener);
- listView.setFastScrollEnabled(false);
- listView.setFastScrollAlwaysVisible(false);
-
- // prevent content changes of the list from firing accessibility events.
- listView.setAccessibilityLiveRegion(View.ACCESSIBILITY_LIVE_REGION_NONE);
- ContentChangedFilter.addToParent(listView);
-
- Trace.endSection();
- return parentView;
- }
-
- public boolean hasFrequents() {
- if (contactTileAdapter == null) {
- return false;
- }
- return contactTileAdapter.getNumFrequents() > 0;
- }
-
- /* package */ void setEmptyViewVisibility(final boolean visible) {
- final int previousVisibility = emptyView.getVisibility();
- final int emptyViewVisibility = visible ? View.VISIBLE : View.GONE;
- final int listViewVisibility = visible ? View.GONE : View.VISIBLE;
-
- if (previousVisibility != emptyViewVisibility) {
- final FrameLayout.LayoutParams params = (LayoutParams) contactTileFrame.getLayoutParams();
- params.height = visible ? LayoutParams.WRAP_CONTENT : LayoutParams.MATCH_PARENT;
- contactTileFrame.setLayoutParams(params);
- emptyView.setVisibility(emptyViewVisibility);
- listView.setVisibility(listViewVisibility);
- }
- }
-
- @Override
- public void onStart() {
- super.onStart();
- listView
- .getDragDropController()
- .addOnDragDropListener(FragmentUtils.getParentUnsafe(this, OnDragDropListener.class));
- FragmentUtils.getParentUnsafe(this, HostInterface.class)
- .setDragDropController(listView.getDragDropController());
-
- // Use initLoader() instead of restartLoader() to refraining unnecessary reload.
- // This method call implicitly assures ContactTileLoaderListener's onLoadFinished() will
- // be called, on which we'll check if "all" contacts should be reloaded again or not.
- if (PermissionsUtil.hasContactsReadPermissions(getContext())) {
- getLoaderManager().initLoader(LOADER_ID_CONTACT_TILE, null, contactTileLoaderListener);
- } else {
- setEmptyViewVisibility(true);
- }
- }
-
- /**
- * {@inheritDoc}
- *
- * <p>This is only effective for elements provided by {@link #contactTileAdapter}. {@link
- * #contactTileAdapter} has its own logic for click events.
- */
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- final int contactTileAdapterCount = contactTileAdapter.getCount();
- if (position <= contactTileAdapterCount) {
- LogUtil.e(
- "OldSpeedDialFragment.onItemClick",
- "event for unexpected position. The position "
- + position
- + " is before \"all\" section. Ignored.");
- }
- }
-
- /**
- * Cache the current view offsets into memory. Once a relayout of views in the ListView has
- * happened due to a dataset change, the cached offsets are used to create animations that slide
- * views from their previous positions to their new ones, to give the appearance that the views
- * are sliding into their new positions.
- */
- private void saveOffsets(int removedItemHeight) {
- final int firstVisiblePosition = listView.getFirstVisiblePosition();
- for (int i = 0; i < listView.getChildCount(); i++) {
- final View child = listView.getChildAt(i);
- final int position = firstVisiblePosition + i;
- // Since we are getting the position from mListView and then querying
- // mContactTileAdapter, its very possible that things are out of sync
- // and we might index out of bounds. Let's make sure that this doesn't happen.
- if (!contactTileAdapter.isIndexInBound(position)) {
- continue;
- }
- final long itemId = contactTileAdapter.getItemId(position);
- itemIdTopMap.put(itemId, child.getTop());
- itemIdLeftMap.put(itemId, child.getLeft());
- }
- itemIdTopMap.put(KEY_REMOVED_ITEM_HEIGHT, removedItemHeight);
- }
-
- /*
- * Performs animations for the gridView
- */
- private void animateGridView(final long... idsInPlace) {
- if (itemIdTopMap.size() == 0) {
- // Don't do animations if the database is being queried for the first time and
- // the previous item offsets have not been cached, or the user hasn't done anything
- // (dragging, swiping etc) that requires an animation.
- return;
- }
-
- ViewUtil.doOnPreDraw(
- listView,
- true,
- new Runnable() {
- @Override
- public void run() {
-
- final int firstVisiblePosition = listView.getFirstVisiblePosition();
- final AnimatorSet animSet = new AnimatorSet();
- final ArrayList<Animator> animators = new ArrayList<Animator>();
- for (int i = 0; i < listView.getChildCount(); i++) {
- final View child = listView.getChildAt(i);
- int position = firstVisiblePosition + i;
-
- // Since we are getting the position from mListView and then querying
- // mContactTileAdapter, its very possible that things are out of sync
- // and we might index out of bounds. Let's make sure that this doesn't happen.
- if (!contactTileAdapter.isIndexInBound(position)) {
- continue;
- }
-
- final long itemId = contactTileAdapter.getItemId(position);
-
- if (containsId(idsInPlace, itemId)) {
- animators.add(ObjectAnimator.ofFloat(child, "alpha", 0.0f, 1.0f));
- break;
- } else {
- Integer startTop = itemIdTopMap.get(itemId);
- Integer startLeft = itemIdLeftMap.get(itemId);
- final int top = child.getTop();
- final int left = child.getLeft();
- int deltaX = 0;
- int deltaY = 0;
-
- if (startLeft != null) {
- if (startLeft != left) {
- deltaX = startLeft - left;
- animators.add(ObjectAnimator.ofFloat(child, "translationX", deltaX, 0.0f));
- }
- }
-
- if (startTop != null) {
- if (startTop != top) {
- deltaY = startTop - top;
- animators.add(ObjectAnimator.ofFloat(child, "translationY", deltaY, 0.0f));
- }
- }
- }
- }
-
- if (animators.size() > 0) {
- animSet.setDuration(animationDuration).playTogether(animators);
- animSet.start();
- }
-
- itemIdTopMap.clear();
- itemIdLeftMap.clear();
- }
- });
- }
-
- private boolean containsId(long[] ids, long target) {
- // Linear search on array is fine because this is typically only 0-1 elements long
- for (int i = 0; i < ids.length; i++) {
- if (ids[i] == target) {
- return true;
- }
- }
- return false;
- }
-
- @Override
- public void onDataSetChangedForAnimation(long... idsInPlace) {
- animateGridView(idsInPlace);
- }
-
- @Override
- public void cacheOffsetsForDatasetChange() {
- saveOffsets(0);
- }
-
- @Override
- public void onEmptyViewActionButtonClicked() {
- String[] deniedPermissions =
- PermissionsUtil.getPermissionsCurrentlyDenied(
- getContext(), PermissionsUtil.allContactsGroupPermissionsUsedInDialer);
- if (deniedPermissions.length > 0) {
- LogUtil.i(
- "OldSpeedDialFragment.onEmptyViewActionButtonClicked",
- "Requesting permissions: " + Arrays.toString(deniedPermissions));
- FragmentCompat.requestPermissions(
- this, deniedPermissions, READ_CONTACTS_PERMISSION_REQUEST_CODE);
- } else {
- // Switch tabs
- FragmentUtils.getParentUnsafe(this, HostInterface.class).showAllContactsTab();
- }
- }
-
- @Override
- public void onRequestPermissionsResult(
- int requestCode, String[] permissions, int[] grantResults) {
- if (requestCode == READ_CONTACTS_PERMISSION_REQUEST_CODE) {
- if (grantResults.length == 1 && PackageManager.PERMISSION_GRANTED == grantResults[0]) {
- PermissionsUtil.notifyPermissionGranted(getContext(), READ_CONTACTS);
- }
- }
- }
-
- private static final class ContactTileLoaderListener
- implements LoaderManager.LoaderCallbacks<Cursor> {
-
- private final OldSpeedDialFragment fragment;
- private final PhoneFavoritesTileAdapter adapter;
-
- ContactTileLoaderListener(OldSpeedDialFragment fragment, PhoneFavoritesTileAdapter adapter) {
- this.fragment = fragment;
- this.adapter = adapter;
- }
-
- @Override
- public CursorLoader onCreateLoader(int id, Bundle args) {
- return ContactTileLoaderFactory.createStrequentPhoneOnlyLoader(fragment.getContext());
- }
-
- @Override
- public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
- adapter.setContactCursor(data);
- fragment.setEmptyViewVisibility(adapter.getCount() == 0);
- FragmentUtils.getParentUnsafe(fragment, HostInterface.class)
- .setHasFrequents(adapter.getNumFrequents() > 0);
- }
-
- @Override
- public void onLoaderReset(Loader<Cursor> loader) {}
- }
-
- private static final class ContactTileAdapterListener implements ContactTileView.Listener {
-
- private final OldSpeedDialFragment fragment;
-
- ContactTileAdapterListener(OldSpeedDialFragment fragment) {
- this.fragment = fragment;
- }
-
- @Override
- public void onContactSelected(
- Uri contactUri, Rect targetRect, CallSpecificAppData callSpecificAppData) {
- FragmentUtils.getParentUnsafe(fragment, OnPhoneNumberPickerActionListener.class)
- .onPickDataUri(contactUri, false /* isVideoCall */, callSpecificAppData);
- }
-
- @Override
- public void onCallNumberDirectly(String phoneNumber, CallSpecificAppData callSpecificAppData) {
- FragmentUtils.getParentUnsafe(fragment, OnPhoneNumberPickerActionListener.class)
- .onPickPhoneNumber(phoneNumber, false /* isVideoCall */, callSpecificAppData);
- }
- }
-
- private static class ScrollListener implements ListView.OnScrollListener {
-
- private final OldSpeedDialFragment fragment;
-
- ScrollListener(OldSpeedDialFragment fragment) {
- this.fragment = fragment;
- }
-
- @Override
- public void onScroll(
- AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
- FragmentUtils.getParentUnsafe(fragment, OnListFragmentScrolledListener.class)
- .onListFragmentScroll(firstVisibleItem, visibleItemCount, totalItemCount);
- }
-
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState) {
- FragmentUtils.getParentUnsafe(fragment, OnListFragmentScrolledListener.class)
- .onListFragmentScrollStateChange(scrollState);
- }
- }
-
- /** Interface for parents of OldSpeedDialFragment to implement. */
- public interface HostInterface {
-
- void setDragDropController(DragDropController controller);
-
- void showAllContactsTab();
-
- ImageView getDragShadowOverlay();
-
- void setHasFrequents(boolean hasFrequents);
- }
-}
diff --git a/java/com/android/dialer/app/list/OnDragDropListener.java b/java/com/android/dialer/app/list/OnDragDropListener.java
deleted file mode 100644
index b71c7fe..0000000
--- a/java/com/android/dialer/app/list/OnDragDropListener.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source 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.app.list;
-
-/**
- * Classes that want to receive callbacks in response to drag events should implement this
- * interface.
- */
-public interface OnDragDropListener {
-
- /**
- * Called when a drag is started.
- *
- * @param x X-coordinate of the drag event
- * @param y Y-coordinate of the drag event
- * @param view The contact tile which the drag was started on
- */
- void onDragStarted(int x, int y, PhoneFavoriteSquareTileView view);
-
- /**
- * Called when a drag is in progress and the user moves the dragged contact to a location.
- *
- * @param x X-coordinate of the drag event
- * @param y Y-coordinate of the drag event
- * @param view Contact tile in the ListView which is currently being displaced by the dragged
- * contact
- */
- void onDragHovered(int x, int y, PhoneFavoriteSquareTileView view);
-
- /**
- * Called when a drag is completed (whether by dropping it somewhere or simply by dragging the
- * contact off the screen)
- *
- * @param x X-coordinate of the drag event
- * @param y Y-coordinate of the drag event
- */
- void onDragFinished(int x, int y);
-
- /**
- * Called when a contact has been dropped on the remove view, indicating that the user wants to
- * remove this contact.
- */
- void onDroppedOnRemove();
-}
diff --git a/java/com/android/dialer/app/list/OnListFragmentScrolledListener.java b/java/com/android/dialer/app/list/OnListFragmentScrolledListener.java
deleted file mode 100644
index a76f3b5..0000000
--- a/java/com/android/dialer/app/list/OnListFragmentScrolledListener.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2013 Google Inc.
- * Licensed to The Android Open Source 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.app.list;
-
-/*
- * Interface to provide callback to activity when a child fragment is scrolled
- */
-public interface OnListFragmentScrolledListener {
-
- void onListFragmentScrollStateChange(int scrollState);
-
- void onListFragmentScroll(int firstVisibleItem, int visibleItemCount, int totalItemCount);
-}
diff --git a/java/com/android/dialer/app/list/PhoneFavoriteListView.java b/java/com/android/dialer/app/list/PhoneFavoriteListView.java
deleted file mode 100644
index ff867f9..0000000
--- a/java/com/android/dialer/app/list/PhoneFavoriteListView.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source 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.app.list;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.graphics.Bitmap;
-import android.os.Handler;
-import android.util.AttributeSet;
-import android.view.DragEvent;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewConfiguration;
-import android.widget.GridView;
-import android.widget.ImageView;
-import com.android.dialer.app.R;
-import com.android.dialer.app.list.DragDropController.DragItemContainer;
-import com.android.dialer.common.LogUtil;
-
-/** Viewgroup that presents the user's speed dial contacts in a grid. */
-public class PhoneFavoriteListView extends GridView
- implements OnDragDropListener, DragItemContainer {
-
- public static final String LOG_TAG = PhoneFavoriteListView.class.getSimpleName();
- final int[] locationOnScreen = new int[2];
- private static final long SCROLL_HANDLER_DELAY_MILLIS = 5;
- private static final int DRAG_SCROLL_PX_UNIT = 25;
- private static final float DRAG_SHADOW_ALPHA = 0.7f;
- /**
- * {@link #topScrollBound} and {@link bottomScrollBound} will be offseted to the top / bottom by
- * {@link #getHeight} * {@link #BOUND_GAP_RATIO} pixels.
- */
- private static final float BOUND_GAP_RATIO = 0.2f;
-
- private float touchSlop;
- private int topScrollBound;
- private int bottomScrollBound;
- private int lastDragY;
- private Handler scrollHandler;
- private final Runnable dragScroller =
- new Runnable() {
- @Override
- public void run() {
- if (lastDragY <= topScrollBound) {
- smoothScrollBy(-DRAG_SCROLL_PX_UNIT, (int) SCROLL_HANDLER_DELAY_MILLIS);
- } else if (lastDragY >= bottomScrollBound) {
- smoothScrollBy(DRAG_SCROLL_PX_UNIT, (int) SCROLL_HANDLER_DELAY_MILLIS);
- }
- scrollHandler.postDelayed(this, SCROLL_HANDLER_DELAY_MILLIS);
- }
- };
- private boolean isDragScrollerRunning = false;
- private int touchDownForDragStartY;
- private Bitmap dragShadowBitmap;
- private ImageView dragShadowOverlay;
- private final AnimatorListenerAdapter dragShadowOverAnimatorListener =
- new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- if (dragShadowBitmap != null) {
- dragShadowBitmap.recycle();
- dragShadowBitmap = null;
- }
- dragShadowOverlay.setVisibility(GONE);
- dragShadowOverlay.setImageBitmap(null);
- }
- };
- private View dragShadowParent;
- private int animationDuration;
- // X and Y offsets inside the item from where the user grabbed to the
- // child's left coordinate. This is used to aid in the drawing of the drag shadow.
- private int touchOffsetToChildLeft;
- private int touchOffsetToChildTop;
- private int dragShadowLeft;
- private int dragShadowTop;
- private DragDropController dragDropController = new DragDropController(this);
-
- public PhoneFavoriteListView(Context context) {
- this(context, null);
- }
-
- public PhoneFavoriteListView(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public PhoneFavoriteListView(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- animationDuration = context.getResources().getInteger(R.integer.fade_duration);
- touchSlop = ViewConfiguration.get(context).getScaledPagingTouchSlop();
- dragDropController.addOnDragDropListener(this);
- }
-
- @Override
- protected void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- touchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop();
- }
-
- /**
- * TODO: This is all swipe to remove code (nothing to do with drag to remove). This should be
- * cleaned up and removed once drag to remove becomes the only way to remove contacts.
- */
- @Override
- public boolean onInterceptTouchEvent(MotionEvent ev) {
- if (ev.getAction() == MotionEvent.ACTION_DOWN) {
- touchDownForDragStartY = (int) ev.getY();
- }
-
- return super.onInterceptTouchEvent(ev);
- }
-
- @Override
- public boolean onDragEvent(DragEvent event) {
- final int action = event.getAction();
- final int eX = (int) event.getX();
- final int eY = (int) event.getY();
- switch (action) {
- case DragEvent.ACTION_DRAG_STARTED:
- {
- if (!PhoneFavoriteTileView.DRAG_PHONE_FAVORITE_TILE.equals(event.getLocalState())) {
- // Ignore any drag events that were not propagated by long pressing
- // on a {@link PhoneFavoriteTileView}
- return false;
- }
- if (!dragDropController.handleDragStarted(this, eX, eY)) {
- return false;
- }
- break;
- }
- case DragEvent.ACTION_DRAG_LOCATION:
- lastDragY = eY;
- dragDropController.handleDragHovered(this, eX, eY);
- // Kick off {@link #mScrollHandler} if it's not started yet.
- if (!isDragScrollerRunning
- &&
- // And if the distance traveled while dragging exceeds the touch slop
- (Math.abs(lastDragY - touchDownForDragStartY) >= 4 * touchSlop)) {
- isDragScrollerRunning = true;
- ensureScrollHandler();
- scrollHandler.postDelayed(dragScroller, SCROLL_HANDLER_DELAY_MILLIS);
- }
- break;
- case DragEvent.ACTION_DRAG_ENTERED:
- final int boundGap = (int) (getHeight() * BOUND_GAP_RATIO);
- topScrollBound = (getTop() + boundGap);
- bottomScrollBound = (getBottom() - boundGap);
- break;
- case DragEvent.ACTION_DRAG_EXITED:
- case DragEvent.ACTION_DRAG_ENDED:
- case DragEvent.ACTION_DROP:
- ensureScrollHandler();
- scrollHandler.removeCallbacks(dragScroller);
- isDragScrollerRunning = false;
- // Either a successful drop or it's ended with out drop.
- if (action == DragEvent.ACTION_DROP || action == DragEvent.ACTION_DRAG_ENDED) {
- dragDropController.handleDragFinished(eX, eY, false);
- }
- break;
- default:
- break;
- }
- // This ListView will consume the drag events on behalf of its children.
- return true;
- }
-
- public void setDragShadowOverlay(ImageView overlay) {
- dragShadowOverlay = overlay;
- dragShadowParent = (View) dragShadowOverlay.getParent();
- }
-
- /** Find the view under the pointer. */
- private View getViewAtPosition(int x, int y) {
- final int count = getChildCount();
- View child;
- for (int childIdx = 0; childIdx < count; childIdx++) {
- child = getChildAt(childIdx);
- if (y >= child.getTop()
- && y <= child.getBottom()
- && x >= child.getLeft()
- && x <= child.getRight()) {
- return child;
- }
- }
- return null;
- }
-
- private void ensureScrollHandler() {
- if (scrollHandler == null) {
- scrollHandler = getHandler();
- }
- }
-
- public DragDropController getDragDropController() {
- return dragDropController;
- }
-
- @Override
- public void onDragStarted(int x, int y, PhoneFavoriteSquareTileView tileView) {
- if (dragShadowOverlay == null) {
- return;
- }
-
- dragShadowOverlay.clearAnimation();
- dragShadowBitmap = createDraggedChildBitmap(tileView);
- if (dragShadowBitmap == null) {
- return;
- }
-
- tileView.getLocationOnScreen(locationOnScreen);
- dragShadowLeft = locationOnScreen[0];
- dragShadowTop = locationOnScreen[1];
-
- // x and y are the coordinates of the on-screen touch event. Using these
- // and the on-screen location of the tileView, calculate the difference between
- // the position of the user's finger and the position of the tileView. These will
- // be used to offset the location of the drag shadow so that it appears that the
- // tileView is positioned directly under the user's finger.
- touchOffsetToChildLeft = x - dragShadowLeft;
- touchOffsetToChildTop = y - dragShadowTop;
-
- dragShadowParent.getLocationOnScreen(locationOnScreen);
- dragShadowLeft -= locationOnScreen[0];
- dragShadowTop -= locationOnScreen[1];
-
- dragShadowOverlay.setImageBitmap(dragShadowBitmap);
- dragShadowOverlay.setVisibility(VISIBLE);
- dragShadowOverlay.setAlpha(DRAG_SHADOW_ALPHA);
-
- dragShadowOverlay.setX(dragShadowLeft);
- dragShadowOverlay.setY(dragShadowTop);
- }
-
- @Override
- public void onDragHovered(int x, int y, PhoneFavoriteSquareTileView tileView) {
- // Update the drag shadow location.
- dragShadowParent.getLocationOnScreen(locationOnScreen);
- dragShadowLeft = x - touchOffsetToChildLeft - locationOnScreen[0];
- dragShadowTop = y - touchOffsetToChildTop - locationOnScreen[1];
- // Draw the drag shadow at its last known location if the drag shadow exists.
- if (dragShadowOverlay != null) {
- dragShadowOverlay.setX(dragShadowLeft);
- dragShadowOverlay.setY(dragShadowTop);
- }
- }
-
- @Override
- public void onDragFinished(int x, int y) {
- if (dragShadowOverlay != null) {
- dragShadowOverlay.clearAnimation();
- dragShadowOverlay
- .animate()
- .alpha(0.0f)
- .setDuration(animationDuration)
- .setListener(dragShadowOverAnimatorListener)
- .start();
- }
- }
-
- @Override
- public void onDroppedOnRemove() {}
-
- private Bitmap createDraggedChildBitmap(View view) {
- view.setDrawingCacheEnabled(true);
- final Bitmap cache = view.getDrawingCache();
-
- Bitmap bitmap = null;
- if (cache != null) {
- try {
- bitmap = cache.copy(Bitmap.Config.ARGB_8888, false);
- } catch (final OutOfMemoryError e) {
- LogUtil.w(LOG_TAG, "Failed to copy bitmap from Drawing cache", e);
- bitmap = null;
- }
- }
-
- view.destroyDrawingCache();
- view.setDrawingCacheEnabled(false);
-
- return bitmap;
- }
-
- @Override
- public PhoneFavoriteSquareTileView getViewForLocation(int x, int y) {
- getLocationOnScreen(locationOnScreen);
- // Calculate the X and Y coordinates of the drag event relative to the view
- final int viewX = x - locationOnScreen[0];
- final int viewY = y - locationOnScreen[1];
- final View child = getViewAtPosition(viewX, viewY);
-
- if (!(child instanceof PhoneFavoriteSquareTileView)) {
- return null;
- }
-
- return (PhoneFavoriteSquareTileView) child;
- }
-}
diff --git a/java/com/android/dialer/app/list/PhoneFavoriteSquareTileView.java b/java/com/android/dialer/app/list/PhoneFavoriteSquareTileView.java
deleted file mode 100644
index 8fe67f4..0000000
--- a/java/com/android/dialer/app/list/PhoneFavoriteSquareTileView.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
-
-* Copyright (C) 2011 The Android Open Source 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.app.list;
-
-import android.content.Context;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.QuickContact;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.ImageButton;
-import android.widget.TextView;
-import com.android.contacts.common.list.ContactEntry;
-import com.android.dialer.app.R;
-import com.android.dialer.logging.InteractionEvent;
-import com.android.dialer.logging.Logger;
-import com.android.dialer.widget.BidiTextView;
-
-/** Displays the contact's picture overlaid with their name and number type in a tile. */
-public class PhoneFavoriteSquareTileView extends PhoneFavoriteTileView {
-
- private final float heightToWidthRatio;
-
- private ImageButton secondaryButton;
-
- private ContactEntry contactEntry;
-
- public PhoneFavoriteSquareTileView(Context context, AttributeSet attrs) {
- super(context, attrs);
-
- heightToWidthRatio =
- getResources().getFraction(R.dimen.contact_tile_height_to_width_ratio, 1, 1);
- }
-
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
- BidiTextView nameView = findViewById(R.id.contact_tile_name);
- nameView.setElegantTextHeight(false);
-
- TextView phoneTypeView = findViewById(R.id.contact_tile_phone_type);
- phoneTypeView.setElegantTextHeight(false);
- secondaryButton = findViewById(R.id.contact_tile_secondary_button);
- }
-
- @Override
- protected int getApproximateImageSize() {
- // The picture is the full size of the tile (minus some padding, but we can be generous)
- return getWidth();
- }
-
- private void launchQuickContact() {
- QuickContact.showQuickContact(
- getContext(),
- PhoneFavoriteSquareTileView.this,
- getLookupUri(),
- null,
- Phone.CONTENT_ITEM_TYPE);
- }
-
- @Override
- public void loadFromContact(ContactEntry entry) {
- super.loadFromContact(entry);
- if (entry != null) {
- secondaryButton.setOnClickListener(
- new OnClickListener() {
- @Override
- public void onClick(View v) {
- Logger.get(getContext())
- .logInteraction(InteractionEvent.Type.SPEED_DIAL_OPEN_CONTACT_CARD);
- launchQuickContact();
- }
- });
- }
- contactEntry = entry;
- }
-
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- final int width = MeasureSpec.getSize(widthMeasureSpec);
- final int height = (int) (heightToWidthRatio * width);
- final int count = getChildCount();
- for (int i = 0; i < count; i++) {
- getChildAt(i)
- .measure(
- MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
- }
- setMeasuredDimension(width, height);
- }
-
- @Override
- protected String getNameForView(ContactEntry contactEntry) {
- return contactEntry.getPreferredDisplayName(getContext());
- }
-
- public ContactEntry getContactEntry() {
- return contactEntry;
- }
-}
diff --git a/java/com/android/dialer/app/list/PhoneFavoriteTileView.java b/java/com/android/dialer/app/list/PhoneFavoriteTileView.java
deleted file mode 100644
index 7f0a6bc..0000000
--- a/java/com/android/dialer/app/list/PhoneFavoriteTileView.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
-
-* Copyright (C) 2011 The Android Open Source 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.app.list;
-
-import android.content.ClipData;
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Point;
-import android.net.Uri;
-import android.provider.ContactsContract.PinnedPositions;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.ImageView;
-import com.android.contacts.common.MoreContactUtils;
-import com.android.contacts.common.list.ContactEntry;
-import com.android.contacts.common.list.ContactTileView;
-import com.android.contacts.common.model.ContactLoader;
-import com.android.dialer.app.R;
-import com.android.dialer.callintent.CallInitiationType;
-import com.android.dialer.callintent.CallSpecificAppData;
-import com.android.dialer.callintent.SpeedDialContactType;
-import com.android.dialer.contactphoto.ContactPhotoManager.DefaultImageRequest;
-import com.android.dialer.lettertile.LetterTileDrawable;
-import com.android.dialer.logging.InteractionEvent;
-import com.android.dialer.logging.Logger;
-
-/**
- * A light version of the {@link com.android.contacts.common.list.ContactTileView} that is used in
- * Dialtacts for frequently called contacts. Slightly different behavior from superclass when you
- * tap it, you want to call the frequently-called number for the contact, even if that is not the
- * default number for that contact. This abstract class is the super class to both the row and tile
- * view.
- */
-public abstract class PhoneFavoriteTileView extends ContactTileView {
-
- // Constant to pass to the drag event so that the drag action only happens when a phone favorite
- // tile is long pressed.
- static final String DRAG_PHONE_FAVORITE_TILE = "PHONE_FAVORITE_TILE";
- private static final String TAG = PhoneFavoriteTileView.class.getSimpleName();
- // These parameters instruct the photo manager to display the default image/letter at 70% of
- // its normal size, and vertically offset upwards 12% towards the top of the letter tile, to
- // make room for the contact name and number label at the bottom of the image.
- private static final float DEFAULT_IMAGE_LETTER_OFFSET = -0.12f;
- private static final float DEFAULT_IMAGE_LETTER_SCALE = 0.70f;
- // Placeholder clip data object that is attached to drag shadows so that text views
- // don't crash with an NPE if the drag shadow is released in their bounds
- private static final ClipData EMPTY_CLIP_DATA = ClipData.newPlainText("", "");
- /** View that contains the transparent shadow that is overlaid on top of the contact image. */
- private View shadowOverlay;
- /** Users' most frequent phone number. */
- private String phoneNumberString;
-
- private boolean isPinned;
- private boolean isStarred;
- private int position = -1;
-
- public PhoneFavoriteTileView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
- shadowOverlay = findViewById(R.id.shadow_overlay);
-
- setOnLongClickListener(
- (v) -> {
- final PhoneFavoriteTileView view = (PhoneFavoriteTileView) v;
- // NOTE The drag shadow is handled in the ListView.
- view.startDragAndDrop(
- EMPTY_CLIP_DATA, new EmptyDragShadowBuilder(), DRAG_PHONE_FAVORITE_TILE, 0);
- return true;
- });
- }
-
- @Override
- public void loadFromContact(ContactEntry entry) {
- super.loadFromContact(entry);
- // Set phone number to null in case we're reusing the view.
- phoneNumberString = null;
- isPinned = (entry.pinned != PinnedPositions.UNPINNED);
- isStarred = entry.isFavorite;
- if (entry != null) {
- sendViewNotification(getContext(), entry.lookupUri);
- // Grab the phone-number to call directly. See {@link onClick()}.
- phoneNumberString = entry.phoneNumber;
-
- // If this is a blank entry, don't show anything. For this to truly look like an empty row
- // the entire ContactTileRow needs to be hidden.
- if (entry == ContactEntry.BLANK_ENTRY) {
- setVisibility(View.INVISIBLE);
- } else {
- final ImageView starIcon = (ImageView) findViewById(R.id.contact_star_icon);
- starIcon.setVisibility(entry.isFavorite ? View.VISIBLE : View.GONE);
- setVisibility(View.VISIBLE);
- }
- }
- }
-
- @Override
- protected boolean isDarkTheme() {
- return false;
- }
-
- @Override
- protected OnClickListener createClickListener() {
- return new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mListener == null) {
- return;
- }
-
- CallSpecificAppData.Builder callSpecificAppData =
- CallSpecificAppData.newBuilder()
- .setAllowAssistedDialing(true)
- .setCallInitiationType(CallInitiationType.Type.SPEED_DIAL)
- .setSpeedDialContactPosition(position);
- if (isStarred) {
- callSpecificAppData.addSpeedDialContactType(SpeedDialContactType.Type.STARRED_CONTACT);
- } else {
- callSpecificAppData.addSpeedDialContactType(SpeedDialContactType.Type.FREQUENT_CONTACT);
- }
- if (isPinned) {
- callSpecificAppData.addSpeedDialContactType(SpeedDialContactType.Type.PINNED_CONTACT);
- }
-
- if (TextUtils.isEmpty(phoneNumberString)) {
- // Don't set performance report now, since user may spend some time on picking a number
-
- // Copy "superclass" implementation
- Logger.get(getContext())
- .logInteraction(InteractionEvent.Type.SPEED_DIAL_CLICK_CONTACT_WITH_AMBIGUOUS_NUMBER);
- mListener.onContactSelected(
- getLookupUri(),
- MoreContactUtils.getTargetRectFromView(PhoneFavoriteTileView.this),
- callSpecificAppData.build());
- } else {
- // When you tap a frequently-called contact, you want to
- // call them at the number that you usually talk to them
- // at (i.e. the one displayed in the UI), regardless of
- // whether that's their default number.
- mListener.onCallNumberDirectly(phoneNumberString, callSpecificAppData.build());
- }
- }
- };
- }
-
- @Override
- protected DefaultImageRequest getDefaultImageRequest(String displayName, String lookupKey) {
- return new DefaultImageRequest(
- displayName,
- lookupKey,
- LetterTileDrawable.TYPE_DEFAULT,
- DEFAULT_IMAGE_LETTER_SCALE,
- DEFAULT_IMAGE_LETTER_OFFSET,
- false);
- }
-
- @Override
- protected void configureViewForImage(boolean isDefaultImage) {
- // Hide the shadow overlay if the image is a default image (i.e. colored letter tile)
- if (shadowOverlay != null) {
- shadowOverlay.setVisibility(isDefaultImage ? View.GONE : View.VISIBLE);
- }
- }
-
- @Override
- protected boolean isContactPhotoCircular() {
- // Unlike Contacts' tiles, the Dialer's favorites tiles are square.
- return false;
- }
-
- public void setPosition(int position) {
- this.position = position;
- }
-
- private ContactLoader loader;
-
- /**
- * Send a notification using a {@link ContactLoader} to inform the sync adapter that we are
- * viewing a particular contact, so that it can download the high-res photo.
- */
- private void sendViewNotification(Context context, Uri contactUri) {
- if (loader != null) {
- // Cancels the current load if it's running and clears up any memory if it's using any.
- loader.reset();
- }
- loader = new ContactLoader(context, contactUri, true /* postViewNotification */);
- // Immediately release anything we're holding in memory
- loader.registerListener(0, (loader1, contact) -> loader.reset());
- loader.startLoading();
- }
-
- /**
- * A {@link View.DragShadowBuilder} that doesn't draw anything. An object of this class should be
- * passed to {@link View#startDragAndDrop} to prevent the framework from drawing a drag shadow.
- */
- public static class EmptyDragShadowBuilder extends View.DragShadowBuilder {
-
- @Override
- public void onProvideShadowMetrics(Point size, Point touch) {
- // A workaround for P+ not accepting non-positive drag shadow sizes.
- size.set(1, 1);
- touch.set(0, 0);
- }
-
- @Override
- public void onDrawShadow(Canvas canvas) {
- // Don't draw anything
- }
- }
-}
diff --git a/java/com/android/dialer/app/list/PhoneFavoritesTileAdapter.java b/java/com/android/dialer/app/list/PhoneFavoritesTileAdapter.java
deleted file mode 100644
index 4cc48a6..0000000
--- a/java/com/android/dialer/app/list/PhoneFavoritesTileAdapter.java
+++ /dev/null
@@ -1,697 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source 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.app.list;
-
-import android.content.ContentProviderOperation;
-import android.content.ContentUris;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.OperationApplicationException;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.RemoteException;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.PinnedPositions;
-import android.support.annotation.VisibleForTesting;
-import android.text.TextUtils;
-import android.util.LongSparseArray;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-import com.android.contacts.common.ContactTileLoaderFactory;
-import com.android.contacts.common.list.ContactEntry;
-import com.android.contacts.common.list.ContactTileView;
-import com.android.dialer.app.R;
-import com.android.dialer.common.LogUtil;
-import com.android.dialer.contactphoto.ContactPhotoManager;
-import com.android.dialer.contacts.ContactsComponent;
-import com.android.dialer.duo.Duo;
-import com.android.dialer.duo.DuoComponent;
-import com.android.dialer.logging.InteractionEvent;
-import com.android.dialer.logging.Logger;
-import com.android.dialer.shortcuts.ShortcutRefresher;
-import com.android.dialer.strictmode.StrictModeUtils;
-import com.google.common.collect.ComparisonChain;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.PriorityQueue;
-
-/** Also allows for a configurable number of columns as well as a maximum row of tiled contacts. */
-public class PhoneFavoritesTileAdapter extends BaseAdapter implements OnDragDropListener {
-
- // Pinned positions start from 1, so there are a total of 20 maximum pinned contacts
- private static final int PIN_LIMIT = 21;
- private static final String TAG = PhoneFavoritesTileAdapter.class.getSimpleName();
- private static final boolean DEBUG = false;
- /**
- * The soft limit on how many contact tiles to show. NOTE This soft limit would not restrict the
- * number of starred contacts to show, rather 1. If the count of starred contacts is less than
- * this limit, show 20 tiles total. 2. If the count of starred contacts is more than or equal to
- * this limit, show all starred tiles and no frequents.
- */
- private static final int TILES_SOFT_LIMIT = 20;
- /** Contact data stored in cache. This is used to populate the associated view. */
- private ArrayList<ContactEntry> contactEntries = null;
-
- private int numFrequents;
- private int numStarred;
-
- private ContactTileView.Listener listener;
- private OnDataSetChangedForAnimationListener dataSetChangedListener;
- private Context context;
- private Resources resources;
- private final Comparator<ContactEntry> contactEntryComparator =
- new Comparator<ContactEntry>() {
- @Override
- public int compare(ContactEntry lhs, ContactEntry rhs) {
-
- return ComparisonChain.start()
- .compare(lhs.pinned, rhs.pinned)
- .compare(getPreferredSortName(lhs), getPreferredSortName(rhs))
- .result();
- }
-
- private String getPreferredSortName(ContactEntry contactEntry) {
- return ContactsComponent.get(context)
- .contactDisplayPreferences()
- .getSortName(contactEntry.namePrimary, contactEntry.nameAlternative);
- }
- };
- /** Back up of the temporarily removed Contact during dragging. */
- private ContactEntry draggedEntry = null;
- /** Position of the temporarily removed contact in the cache. */
- private int draggedEntryIndex = -1;
- /** New position of the temporarily removed contact in the cache. */
- private int dropEntryIndex = -1;
- /** New position of the temporarily entered contact in the cache. */
- private int dragEnteredEntryIndex = -1;
-
- private boolean awaitingRemove = false;
- private boolean delayCursorUpdates = false;
- private ContactPhotoManager photoManager;
-
- /** Indicates whether a drag is in process. */
- private boolean inDragging = false;
-
- public PhoneFavoritesTileAdapter(
- Context context,
- ContactTileView.Listener listener,
- OnDataSetChangedForAnimationListener dataSetChangedListener) {
- this.dataSetChangedListener = dataSetChangedListener;
- this.listener = listener;
- this.context = context;
- resources = context.getResources();
- numFrequents = 0;
- contactEntries = new ArrayList<>();
- }
-
- void setPhotoLoader(ContactPhotoManager photoLoader) {
- photoManager = photoLoader;
- }
-
- /**
- * Indicates whether a drag is in process.
- *
- * @param inDragging Boolean variable indicating whether there is a drag in process.
- */
- private void setInDragging(boolean inDragging) {
- delayCursorUpdates = inDragging;
- this.inDragging = inDragging;
- }
-
- /**
- * Gets the number of frequents from the passed in cursor.
- *
- * <p>This methods is needed so the GroupMemberTileAdapter can override this.
- *
- * @param cursor The cursor to get number of frequents from.
- */
- private void saveNumFrequentsFromCursor(Cursor cursor) {
- numFrequents = cursor.getCount() - numStarred;
- }
-
- /**
- * Creates {@link ContactTileView}s for each item in {@link Cursor}.
- *
- * <p>Else use {@link ContactTileLoaderFactory}
- */
- void setContactCursor(Cursor cursor) {
- if (!delayCursorUpdates && cursor != null && !cursor.isClosed()) {
- numStarred = getNumStarredContacts(cursor);
- if (awaitingRemove) {
- dataSetChangedListener.cacheOffsetsForDatasetChange();
- }
-
- saveNumFrequentsFromCursor(cursor);
- saveCursorToCache(cursor);
- // cause a refresh of any views that rely on this data
- notifyDataSetChanged();
- // about to start redraw
- dataSetChangedListener.onDataSetChangedForAnimation();
- }
- }
-
- /**
- * Saves the cursor data to the cache, to speed up UI changes.
- *
- * @param cursor Returned cursor from {@link ContactTileLoaderFactory} with data to populate the
- * view.
- */
- private void saveCursorToCache(Cursor cursor) {
- contactEntries.clear();
-
- if (cursor == null) {
- return;
- }
-
- final LongSparseArray<Object> duplicates = new LongSparseArray<>(cursor.getCount());
-
- // Track the length of {@link #mContactEntries} and compare to {@link #TILES_SOFT_LIMIT}.
- int counter = 0;
-
- // Data for logging
- int starredContactsCount = 0;
- int pinnedContactsCount = 0;
- int multipleNumbersContactsCount = 0;
- int contactsWithPhotoCount = 0;
- int contactsWithNameCount = 0;
- int lightbringerReachableContactsCount = 0;
-
- // The cursor should not be closed since this is invoked from a CursorLoader.
- if (cursor.moveToFirst()) {
- int starredColumn = cursor.getColumnIndexOrThrow(Contacts.STARRED);
- int contactIdColumn = cursor.getColumnIndexOrThrow(Phone.CONTACT_ID);
- int photoUriColumn = cursor.getColumnIndexOrThrow(Contacts.PHOTO_URI);
- int lookupKeyColumn = cursor.getColumnIndexOrThrow(Contacts.LOOKUP_KEY);
- int pinnedColumn = cursor.getColumnIndexOrThrow(Contacts.PINNED);
- int nameColumn = cursor.getColumnIndexOrThrow(Contacts.DISPLAY_NAME_PRIMARY);
- int nameAlternativeColumn = cursor.getColumnIndexOrThrow(Contacts.DISPLAY_NAME_ALTERNATIVE);
- int isDefaultNumberColumn = cursor.getColumnIndexOrThrow(Phone.IS_SUPER_PRIMARY);
- int phoneTypeColumn = cursor.getColumnIndexOrThrow(Phone.TYPE);
- int phoneLabelColumn = cursor.getColumnIndexOrThrow(Phone.LABEL);
- int phoneNumberColumn = cursor.getColumnIndexOrThrow(Phone.NUMBER);
- do {
- final int starred = cursor.getInt(starredColumn);
- final long id;
-
- // We display a maximum of TILES_SOFT_LIMIT contacts, or the total number of starred
- // whichever is greater.
- if (starred < 1 && counter >= TILES_SOFT_LIMIT) {
- break;
- } else {
- id = cursor.getLong(contactIdColumn);
- }
-
- final ContactEntry existing = (ContactEntry) duplicates.get(id);
- if (existing != null) {
- // Check if the existing number is a default number. If not, clear the phone number
- // and label fields so that the disambiguation dialog will show up.
- if (!existing.isDefaultNumber) {
- existing.phoneLabel = null;
- existing.phoneNumber = null;
- }
- continue;
- }
-
- final String photoUri = cursor.getString(photoUriColumn);
- final String lookupKey = cursor.getString(lookupKeyColumn);
- final int pinned = cursor.getInt(pinnedColumn);
- final String name = cursor.getString(nameColumn);
- final String nameAlternative = cursor.getString(nameAlternativeColumn);
- final boolean isStarred = cursor.getInt(starredColumn) > 0;
- final boolean isDefaultNumber = cursor.getInt(isDefaultNumberColumn) > 0;
-
- final ContactEntry contact = new ContactEntry();
-
- contact.id = id;
- contact.namePrimary =
- (!TextUtils.isEmpty(name)) ? name : resources.getString(R.string.missing_name);
- contact.nameAlternative =
- (!TextUtils.isEmpty(nameAlternative))
- ? nameAlternative
- : resources.getString(R.string.missing_name);
- contact.photoUri = (photoUri != null ? Uri.parse(photoUri) : null);
- contact.lookupKey = lookupKey;
- contact.lookupUri =
- ContentUris.withAppendedId(
- Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey), id);
- contact.isFavorite = isStarred;
- contact.isDefaultNumber = isDefaultNumber;
-
- // Set phone number and label
- final int phoneNumberType = cursor.getInt(phoneTypeColumn);
- final String phoneNumberCustomLabel = cursor.getString(phoneLabelColumn);
- contact.phoneLabel =
- (String) Phone.getTypeLabel(resources, phoneNumberType, phoneNumberCustomLabel);
- contact.phoneNumber = cursor.getString(phoneNumberColumn);
-
- contact.pinned = pinned;
- contactEntries.add(contact);
-
- // Set counts for logging
- if (isStarred) {
- // mNumStarred might be larger than the number of visible starred contact,
- // since it includes invisible ones (starred contact with no phone number).
- starredContactsCount++;
- }
- if (pinned != PinnedPositions.UNPINNED) {
- pinnedContactsCount++;
- }
- if (!TextUtils.isEmpty(name)) {
- contactsWithNameCount++;
- }
- if (photoUri != null) {
- contactsWithPhotoCount++;
- }
-
- duplicates.put(id, contact);
-
- counter++;
- } while (cursor.moveToNext());
- }
-
- awaitingRemove = false;
-
- arrangeContactsByPinnedPosition(contactEntries);
-
- ShortcutRefresher.refresh(context, contactEntries);
- notifyDataSetChanged();
-
- Duo duo = DuoComponent.get(context).getDuo();
- for (ContactEntry contact : contactEntries) {
- if (contact.phoneNumber == null) {
- multipleNumbersContactsCount++;
- } else if (duo.isReachable(context, contact.phoneNumber)) {
- lightbringerReachableContactsCount++;
- }
- }
-
- Logger.get(context)
- .logSpeedDialContactComposition(
- counter,
- starredContactsCount,
- pinnedContactsCount,
- multipleNumbersContactsCount,
- contactsWithPhotoCount,
- contactsWithNameCount,
- lightbringerReachableContactsCount);
- // Logs for manual testing
- LogUtil.v("PhoneFavoritesTileAdapter.saveCursorToCache", "counter: %d", counter);
- LogUtil.v(
- "PhoneFavoritesTileAdapter.saveCursorToCache",
- "starredContactsCount: %d",
- starredContactsCount);
- LogUtil.v(
- "PhoneFavoritesTileAdapter.saveCursorToCache",
- "pinnedContactsCount: %d",
- pinnedContactsCount);
- LogUtil.v(
- "PhoneFavoritesTileAdapter.saveCursorToCache",
- "multipleNumbersContactsCount: %d",
- multipleNumbersContactsCount);
- LogUtil.v(
- "PhoneFavoritesTileAdapter.saveCursorToCache",
- "contactsWithPhotoCount: %d",
- contactsWithPhotoCount);
- LogUtil.v(
- "PhoneFavoritesTileAdapter.saveCursorToCache",
- "contactsWithNameCount: %d",
- contactsWithNameCount);
- }
-
- /** Iterates over the {@link Cursor} Returns position of the first NON Starred Contact */
- private int getNumStarredContacts(Cursor cursor) {
- if (cursor == null) {
- return 0;
- }
-
- if (cursor.moveToFirst()) {
- int starredColumn = cursor.getColumnIndex(Contacts.STARRED);
- do {
- if (cursor.getInt(starredColumn) == 0) {
- return cursor.getPosition();
- }
- } while (cursor.moveToNext());
- }
- // There are not NON Starred contacts in cursor
- // Set divider position to end
- return cursor.getCount();
- }
-
- /** Returns the number of frequents that will be displayed in the list. */
- int getNumFrequents() {
- return numFrequents;
- }
-
- @Override
- public int getCount() {
- if (contactEntries == null) {
- return 0;
- }
-
- return contactEntries.size();
- }
-
- /**
- * Returns an ArrayList of the {@link ContactEntry}s that are to appear on the row for the given
- * position.
- */
- @Override
- public ContactEntry getItem(int position) {
- return contactEntries.get(position);
- }
-
- /**
- * For the top row of tiled contacts, the item id is the position of the row of contacts. For
- * frequent contacts, the item id is the maximum number of rows of tiled contacts + the actual
- * contact id. Since contact ids are always greater than 0, this guarantees that all items within
- * this adapter will always have unique ids.
- */
- @Override
- public long getItemId(int position) {
- return getItem(position).id;
- }
-
- @Override
- public boolean hasStableIds() {
- return true;
- }
-
- @Override
- public boolean areAllItemsEnabled() {
- return true;
- }
-
- @Override
- public boolean isEnabled(int position) {
- return getCount() > 0;
- }
-
- @Override
- public void notifyDataSetChanged() {
- if (DEBUG) {
- LogUtil.v(TAG, "notifyDataSetChanged");
- }
- super.notifyDataSetChanged();
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- if (DEBUG) {
- LogUtil.v(TAG, "get view for " + position);
- }
-
- PhoneFavoriteTileView tileView = null;
-
- if (convertView instanceof PhoneFavoriteTileView) {
- tileView = (PhoneFavoriteTileView) convertView;
- }
-
- if (tileView == null) {
- tileView =
- (PhoneFavoriteTileView) View.inflate(context, R.layout.phone_favorite_tile_view, null);
- }
- tileView.setPhotoManager(photoManager);
- tileView.setListener(listener);
- tileView.loadFromContact(getItem(position));
- tileView.setPosition(position);
- return tileView;
- }
-
- @Override
- public int getViewTypeCount() {
- return ViewTypes.COUNT;
- }
-
- @Override
- public int getItemViewType(int position) {
- return ViewTypes.TILE;
- }
-
- /**
- * Temporarily removes a contact from the list for UI refresh. Stores data for this contact in the
- * back-up variable.
- *
- * @param index Position of the contact to be removed.
- */
- private void popContactEntry(int index) {
- if (isIndexInBound(index)) {
- draggedEntry = contactEntries.get(index);
- draggedEntryIndex = index;
- dragEnteredEntryIndex = index;
- markDropArea(dragEnteredEntryIndex);
- }
- }
-
- /**
- * @param itemIndex Position of the contact in {@link #contactEntries}.
- * @return True if the given index is valid for {@link #contactEntries}.
- */
- boolean isIndexInBound(int itemIndex) {
- return itemIndex >= 0 && itemIndex < contactEntries.size();
- }
-
- /**
- * Mark the tile as drop area by given the item index in {@link #contactEntries}.
- *
- * @param itemIndex Position of the contact in {@link #contactEntries}.
- */
- private void markDropArea(int itemIndex) {
- if (draggedEntry != null
- && isIndexInBound(dragEnteredEntryIndex)
- && isIndexInBound(itemIndex)) {
- dataSetChangedListener.cacheOffsetsForDatasetChange();
- // Remove the old placeholder item and place the new placeholder item.
- contactEntries.remove(dragEnteredEntryIndex);
- dragEnteredEntryIndex = itemIndex;
- contactEntries.add(dragEnteredEntryIndex, ContactEntry.BLANK_ENTRY);
- ContactEntry.BLANK_ENTRY.id = draggedEntry.id;
- dataSetChangedListener.onDataSetChangedForAnimation();
- notifyDataSetChanged();
- }
- }
-
- /** Drops the temporarily removed contact to the desired location in the list. */
- private void handleDrop() {
- boolean changed = false;
- if (draggedEntry != null) {
- if (isIndexInBound(dragEnteredEntryIndex) && dragEnteredEntryIndex != draggedEntryIndex) {
- // Don't add the ContactEntry here (to prevent a double animation from occuring).
- // When we receive a new cursor the list of contact entries will automatically be
- // populated with the dragged ContactEntry at the correct spot.
- dropEntryIndex = dragEnteredEntryIndex;
- contactEntries.set(dropEntryIndex, draggedEntry);
- dataSetChangedListener.cacheOffsetsForDatasetChange();
- changed = true;
- } else if (isIndexInBound(draggedEntryIndex)) {
- // If {@link #mDragEnteredEntryIndex} is invalid,
- // falls back to the original position of the contact.
- contactEntries.remove(dragEnteredEntryIndex);
- contactEntries.add(draggedEntryIndex, draggedEntry);
- dropEntryIndex = draggedEntryIndex;
- notifyDataSetChanged();
- }
-
- if (changed && dropEntryIndex < PIN_LIMIT) {
- ArrayList<ContentProviderOperation> operations =
- getReflowedPinningOperations(contactEntries, draggedEntryIndex, dropEntryIndex);
- StrictModeUtils.bypass(() -> updateDatabaseWithPinnedPositions(operations));
- }
- draggedEntry = null;
- }
- }
-
- private void updateDatabaseWithPinnedPositions(ArrayList<ContentProviderOperation> operations) {
- if (operations.isEmpty()) {
- // Nothing to update
- return;
- }
- try {
- context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, operations);
- Logger.get(context).logInteraction(InteractionEvent.Type.SPEED_DIAL_PIN_CONTACT);
- } catch (RemoteException | OperationApplicationException e) {
- LogUtil.e(TAG, "Exception thrown when pinning contacts", e);
- }
- }
-
- /**
- * Used when a contact is removed from speeddial. This will both unstar and set pinned position of
- * the contact to PinnedPosition.DEMOTED so that it doesn't show up anymore in the favorites list.
- */
- private void unstarAndUnpinContact(Uri contactUri) {
- final ContentValues values = new ContentValues(2);
- values.put(Contacts.STARRED, false);
- values.put(Contacts.PINNED, PinnedPositions.DEMOTED);
- StrictModeUtils.bypass(
- () -> context.getContentResolver().update(contactUri, values, null, null));
- }
-
- /**
- * Given a list of contacts that each have pinned positions, rearrange the list (destructive) such
- * that all pinned contacts are in their defined pinned positions, and unpinned contacts take the
- * spaces between those pinned contacts. Demoted contacts should not appear in the resulting list.
- *
- * <p>This method also updates the pinned positions of pinned contacts so that they are all unique
- * positive integers within range from 0 to toArrange.size() - 1. This is because when the contact
- * entries are read from the database, it is possible for them to have overlapping pin positions
- * due to sync or modifications by third party apps.
- */
- @VisibleForTesting
- private void arrangeContactsByPinnedPosition(ArrayList<ContactEntry> toArrange) {
- final PriorityQueue<ContactEntry> pinnedQueue =
- new PriorityQueue<>(PIN_LIMIT, contactEntryComparator);
-
- final List<ContactEntry> unpinnedContacts = new LinkedList<>();
-
- final int length = toArrange.size();
- for (int i = 0; i < length; i++) {
- final ContactEntry contact = toArrange.get(i);
- // Decide whether the contact is hidden(demoted), pinned, or unpinned
- if (contact.pinned > PIN_LIMIT || contact.pinned == PinnedPositions.UNPINNED) {
- unpinnedContacts.add(contact);
- } else if (contact.pinned > PinnedPositions.DEMOTED) {
- // Demoted or contacts with negative pinned positions are ignored.
- // Pinned contacts go into a priority queue where they are ranked by pinned
- // position. This is required because the contacts provider does not return
- // contacts ordered by pinned position.
- pinnedQueue.add(contact);
- }
- }
-
- final int maxToPin = Math.min(PIN_LIMIT, pinnedQueue.size() + unpinnedContacts.size());
-
- toArrange.clear();
- for (int i = 1; i < maxToPin + 1; i++) {
- if (!pinnedQueue.isEmpty() && pinnedQueue.peek().pinned <= i) {
- final ContactEntry toPin = pinnedQueue.poll();
- toPin.pinned = i;
- toArrange.add(toPin);
- } else if (!unpinnedContacts.isEmpty()) {
- toArrange.add(unpinnedContacts.remove(0));
- }
- }
-
- // If there are still contacts in pinnedContacts at this point, it means that the pinned
- // positions of these pinned contacts exceed the actual number of contacts in the list.
- // For example, the user had 10 frequents, starred and pinned one of them at the last spot,
- // and then cleared frequents. Contacts in this situation should become unpinned.
- while (!pinnedQueue.isEmpty()) {
- final ContactEntry entry = pinnedQueue.poll();
- entry.pinned = PinnedPositions.UNPINNED;
- toArrange.add(entry);
- }
-
- // Any remaining unpinned contacts that weren't in the gaps between the pinned contacts
- // now just get appended to the end of the list.
- toArrange.addAll(unpinnedContacts);
- }
-
- /**
- * Given an existing list of contact entries and a single entry that is to be pinned at a
- * particular position, return a list of {@link ContentProviderOperation}s that contains new
- * pinned positions for all contacts that are forced to be pinned at new positions, trying as much
- * as possible to keep pinned contacts at their original location.
- *
- * <p>At this point in time the pinned position of each contact in the list has already been
- * updated by {@link #arrangeContactsByPinnedPosition}, so we can assume that all pinned
- * positions(within {@link #PIN_LIMIT} are unique positive integers.
- */
- @VisibleForTesting
- private ArrayList<ContentProviderOperation> getReflowedPinningOperations(
- ArrayList<ContactEntry> list, int oldPos, int newPinPos) {
- final ArrayList<ContentProviderOperation> positions = new ArrayList<>();
- final int lowerBound = Math.min(oldPos, newPinPos);
- final int upperBound = Math.max(oldPos, newPinPos);
- for (int i = lowerBound; i <= upperBound; i++) {
- final ContactEntry entry = list.get(i);
-
- // Pinned positions in the database start from 1 instead of being zero-indexed like
- // arrays, so offset by 1.
- final int databasePinnedPosition = i + 1;
- if (entry.pinned == databasePinnedPosition) {
- continue;
- }
-
- final Uri uri = Uri.withAppendedPath(Contacts.CONTENT_URI, String.valueOf(entry.id));
- final ContentValues values = new ContentValues();
- values.put(Contacts.PINNED, databasePinnedPosition);
- positions.add(ContentProviderOperation.newUpdate(uri).withValues(values).build());
- }
- return positions;
- }
-
- @Override
- public void onDragStarted(int x, int y, PhoneFavoriteSquareTileView view) {
- setInDragging(true);
- final int itemIndex = contactEntries.indexOf(view.getContactEntry());
- popContactEntry(itemIndex);
- }
-
- @Override
- public void onDragHovered(int x, int y, PhoneFavoriteSquareTileView view) {
- if (view == null) {
- // The user is hovering over a view that is not a contact tile, no need to do
- // anything here.
- return;
- }
- final int itemIndex = contactEntries.indexOf(view.getContactEntry());
- if (inDragging
- && dragEnteredEntryIndex != itemIndex
- && isIndexInBound(itemIndex)
- && itemIndex < PIN_LIMIT
- && itemIndex >= 0) {
- markDropArea(itemIndex);
- }
- }
-
- @Override
- public void onDragFinished(int x, int y) {
- setInDragging(false);
- // A contact has been dragged to the RemoveView in order to be unstarred, so simply wait
- // for the new contact cursor which will cause the UI to be refreshed without the unstarred
- // contact.
- if (!awaitingRemove) {
- handleDrop();
- }
- }
-
- @Override
- public void onDroppedOnRemove() {
- if (draggedEntry != null) {
- unstarAndUnpinContact(draggedEntry.lookupUri);
- awaitingRemove = true;
- Logger.get(context).logInteraction(InteractionEvent.Type.SPEED_DIAL_REMOVE_CONTACT);
- }
- }
-
- interface OnDataSetChangedForAnimationListener {
-
- void onDataSetChangedForAnimation(long... idsInPlace);
-
- void cacheOffsetsForDatasetChange();
- }
-
- private static class ViewTypes {
-
- static final int TILE = 0;
- static final int COUNT = 1;
- }
-}
diff --git a/java/com/android/dialer/app/list/RemoveView.java b/java/com/android/dialer/app/list/RemoveView.java
index c8680bf..bb54735 100644
--- a/java/com/android/dialer/app/list/RemoveView.java
+++ b/java/com/android/dialer/app/list/RemoveView.java
@@ -29,7 +29,6 @@
public class RemoveView extends FrameLayout {
- DragDropController dragDropController;
TextView removeText;
ImageView removeIcon;
int unhighlightedColor;
@@ -59,10 +58,6 @@
getContext().getTheme());
}
- public void setDragDropController(DragDropController controller) {
- dragDropController = controller;
- }
-
@Override
public boolean onDragEvent(DragEvent event) {
final int action = event.getAction();
@@ -77,15 +72,9 @@
setAppearanceNormal();
break;
case DragEvent.ACTION_DRAG_LOCATION:
- if (dragDropController != null) {
- dragDropController.handleDragHovered(this, (int) event.getX(), (int) event.getY());
- }
break;
case DragEvent.ACTION_DROP:
sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT);
- if (dragDropController != null) {
- dragDropController.handleDragFinished((int) event.getX(), (int) event.getY(), true);
- }
setAppearanceNormal();
break;
}
diff --git a/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml b/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml
index c454da8..4a220be 100644
--- a/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml
+++ b/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml
@@ -73,34 +73,6 @@
</LinearLayout>
<LinearLayout
- android:id="@+id/set_up_video_action"
- style="@style/CallLogActionStyle">
-
- <ImageView
- style="@style/CallLogActionIconStyle"
- android:src="@drawable/quantum_ic_videocam_vd_white_24"/>
-
- <TextView
- style="@style/CallLogActionTextStyle"
- android:text="@string/call_log_action_set_up_video"/>
-
- </LinearLayout>
-
- <LinearLayout
- android:id="@+id/invite_video_action"
- style="@style/CallLogActionStyle">
-
- <ImageView
- style="@style/CallLogActionIconStyle"
- android:src="@drawable/quantum_ic_videocam_vd_white_24"/>
-
- <TextView
- style="@style/CallLogActionTextStyle"
- android:text="@string/call_log_action_invite_video"/>
-
- </LinearLayout>
-
- <LinearLayout
android:id="@+id/create_new_contact_action"
style="@style/CallLogActionStyle">
diff --git a/java/com/android/dialer/app/res/layout/dialtacts_activity.xml b/java/com/android/dialer/app/res/layout/dialtacts_activity.xml
deleted file mode 100644
index 4bd00f6..0000000
--- a/java/com/android/dialer/app/res/layout/dialtacts_activity.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source 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.
--->
-<android.support.design.widget.CoordinatorLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:id="@+id/dialtacts_mainlayout"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="?android:attr/colorBackground"
- android:clipChildren="false"
- android:clipToPadding="false"
- android:focusable="true"
- android:focusableInTouchMode="true"
- android:orientation="vertical">
-
- <FrameLayout
- android:id="@+id/dialtacts_container"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:clipChildren="false">
- <!-- The main contacts grid -->
- <FrameLayout
- android:id="@+id/dialtacts_frame"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:clipChildren="false"/>
- </FrameLayout>
-
- <android.support.design.widget.FloatingActionButton
- android:id="@+id/floating_action_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal|bottom"
- android:layout_marginBottom="@dimen/floating_action_button_margin_bottom"
- android:contentDescription="@string/action_menu_dialpad_button"
- android:src="@drawable/quantum_ic_dialpad_vd_theme_24"
- app:elevation="@dimen/floating_action_button_translation_z"
- app:backgroundTint="?android:attr/colorAccent"/>
-
- <!-- Host container for the contact tile drag shadow -->
- <FrameLayout
- android:id="@+id/activity_overlay"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <ImageView
- android:id="@+id/contact_tile_drag_shadow_overlay"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:importantForAccessibility="no"
- android:visibility="gone"/>
- </FrameLayout>
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/java/com/android/dialer/app/res/layout/lists_fragment.xml b/java/com/android/dialer/app/res/layout/lists_fragment.xml
deleted file mode 100644
index cd2a33d..0000000
--- a/java/com/android/dialer/app/res/layout/lists_fragment.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source 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.
--->
-
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/lists_frame"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:animateLayoutChanges="true">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
-
- <!-- TODO: Apply background color to ActionBar instead of a FrameLayout. For now, this is
- the easiest way to preserve correct pane scrolling and searchbar collapse/expand
- behaviors. -->
- <FrameLayout
- android:layout_width="match_parent"
- android:layout_height="@dimen/action_bar_height_large"
- android:background="?android:attr/colorPrimary"
- android:elevation="@dimen/tab_elevation"/>
-
- <com.android.contacts.common.list.ViewPagerTabs
- android:id="@+id/lists_pager_header"
- style="@style/DialtactsActionBarTabTextStyle"
- android:layout_width="match_parent"
- android:layout_height="@dimen/tab_height"
- android:layout_gravity="top"
- android:elevation="@dimen/tab_elevation"
- android:orientation="horizontal"
- android:textAllCaps="true"/>
-
- <com.android.dialer.app.list.DialerViewPager
- android:id="@+id/lists_pager"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1"/>
-
- </LinearLayout>
-
- <!-- Sets android:importantForAccessibility="no" to avoid being announced when navigating with
- talkback enabled. It will still be announced when user drag or drop contact onto it.
- This is required since drag and drop event is only sent to views are visible when drag
- starts. -->
- <com.android.dialer.app.list.RemoveView
- android:id="@+id/remove_view"
- android:layout_width="match_parent"
- android:layout_height="@dimen/tab_height"
- android:layout_marginTop="@dimen/action_bar_height_large"
- android:contentDescription="@string/remove_contact"
- android:importantForAccessibility="no">
-
- <LinearLayout
- android:id="@+id/remove_view_content"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="?android:attr/colorPrimary"
- android:gravity="center"
- android:orientation="horizontal"
- android:visibility="gone">
-
- <ImageView
- android:id="@+id/remove_view_icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
- android:layout_marginBottom="8dp"
- android:src="@drawable/quantum_ic_clear_vd_theme_24"
- android:tint="?colorTextOnUnthemedDarkBackground"/>
-
- <TextView
- android:id="@+id/remove_view_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/remove_contact"
- android:textColor="?colorTextOnUnthemedDarkBackground"
- style="@style/Dialer.TextAppearance.Primary"/>
-
- </LinearLayout>
-
- </com.android.dialer.app.list.RemoveView>
-
-</FrameLayout>
diff --git a/java/com/android/dialer/app/res/layout/phone_favorite_tile_view.xml b/java/com/android/dialer/app/res/layout/phone_favorite_tile_view.xml
deleted file mode 100644
index c1903d5..0000000
--- a/java/com/android/dialer/app/res/layout/phone_favorite_tile_view.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source 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.
--->
-<view
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/contact_tile"
- class="com.android.dialer.app.list.PhoneFavoriteSquareTileView"
- android:paddingBottom="@dimen/contact_tile_divider_width"
- android:paddingEnd="@dimen/contact_tile_divider_width">
-
- <RelativeLayout
- android:id="@+id/contact_favorite_card"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:focusable="true"
- android:nextFocusRight="@+id/contact_tile_secondary_button">
-
- <com.android.contacts.common.widget.LayoutSuppressingImageView
- android:id="@+id/contact_tile_image"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:scaleType="centerCrop"/>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
- <View
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="6"/>
- <View
- android:id="@+id/shadow_overlay"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="4"
- android:background="@drawable/shadow_contact_photo"/>
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:paddingBottom="@dimen/contact_tile_text_bottom_padding"
- android:paddingStart="@dimen/contact_tile_text_side_padding"
- android:paddingEnd="@dimen/contact_tile_text_side_padding"
- android:orientation="vertical">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_vertical"
- android:orientation="horizontal">
- <com.android.dialer.widget.BidiTextView
- android:id="@+id/contact_tile_name"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:ellipsize="marquee"
- android:fadingEdge="horizontal"
- android:fadingEdgeLength="3dip"
- android:fontFamily="sans-serif-medium"
- android:singleLine="true"
- android:textAlignment="viewStart"
- android:textColor="?colorTextOnUnthemedDarkBackground"
- android:textSize="15sp"/>
- <ImageView
- android:id="@+id/contact_star_icon"
- android:layout_width="@dimen/favorites_star_icon_size"
- android:layout_height="@dimen/favorites_star_icon_size"
- android:layout_marginStart="3dp"
- android:src="@drawable/quantum_ic_star_vd_theme_24"
- android:visibility="gone"/>
- </LinearLayout>
- <TextView
- android:id="@+id/contact_tile_phone_type"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:ellipsize="marquee"
- android:fadingEdge="horizontal"
- android:fadingEdgeLength="3dip"
- android:fontFamily="sans-serif"
- android:gravity="center_vertical"
- android:singleLine="true"
- android:textAlignment="viewStart"
- android:textColor="?colorTextOnUnthemedDarkBackground"
- android:textSize="11sp"/>
- </LinearLayout>
-
- <View
- android:id="@+id/contact_tile_push_state"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="?android:selectableItemBackground"
- android:importantForAccessibility="no"/>
-
- <!-- Wrap the ImageButton in a layout with a transparent background so the ripple has something to draw on -->
- <FrameLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@android:color/transparent">
- <ImageButton
- android:id="@id/contact_tile_secondary_button"
- android:layout_width="@dimen/contact_tile_info_button_height_and_width"
- android:layout_height="@dimen/contact_tile_info_button_height_and_width"
- android:layout_gravity="top|end"
- android:paddingTop="8dp"
- android:paddingBottom="4dp"
- android:paddingStart="4dp"
- android:paddingEnd="4dp"
- android:background="@drawable/item_background_material_borderless_dark"
- android:contentDescription="@string/description_view_contact_detail"
- android:scaleType="center"
- android:src="@drawable/quantum_ic_more_vert_vd_theme_24"/>
-
- </FrameLayout>
-
- </RelativeLayout>
-</view>
diff --git a/java/com/android/dialer/app/res/layout/speed_dial_fragment.xml b/java/com/android/dialer/app/res/layout/speed_dial_fragment.xml
deleted file mode 100644
index 3fa3be2..0000000
--- a/java/com/android/dialer/app/res/layout/speed_dial_fragment.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source 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.
--->
-
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:clipChildren="false">
-
- <FrameLayout
- android:id="@+id/contact_tile_frame"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignParentLeft="true"
- android:layout_alignParentTop="true"
- android:paddingStart="@dimen/favorites_row_start_padding"
- android:paddingEnd="@dimen/favorites_row_end_padding">
- <com.android.dialer.app.list.PhoneFavoriteListView
- android:id="@+id/contact_tile_list"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingTop="@dimen/favorites_row_top_padding"
- android:paddingBottom="@dimen/floating_action_button_list_bottom_padding"
- android:clipToPadding="false"
- android:divider="@null"
- android:fadingEdge="none"
- android:nestedScrollingEnabled="true"
- android:numColumns="@integer/contact_tile_column_count_in_favorites"/>
- </FrameLayout>
-
- <com.android.dialer.widget.EmptyContentView
- android:id="@+id/empty_list_view"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:visibility="gone"/>
-
-</FrameLayout>
diff --git a/java/com/android/dialer/app/res/values/styles.xml b/java/com/android/dialer/app/res/values/styles.xml
index 0fa3503..c3c5281 100644
--- a/java/com/android/dialer/app/res/values/styles.xml
+++ b/java/com/android/dialer/app/res/values/styles.xml
@@ -172,9 +172,4 @@
<item name="android:paddingRight">16dp</item>
<item name="android:minHeight">56dp</item>
</style>
-
- <style name="PromoLinkStyle">
- <item name="android:textColor">?android:attr/colorPrimary</item>
- <item name="android:fontFamily">"sans-serif-medium"</item>
- </style>
</resources>
diff --git a/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java b/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
index 95662a1..7d6195f 100644
--- a/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
+++ b/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
@@ -51,12 +51,10 @@
import com.android.dialer.common.concurrent.AsyncTaskExecutors;
import com.android.dialer.common.concurrent.DialerExecutor;
import com.android.dialer.common.concurrent.DialerExecutorComponent;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.constants.Constants;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.dialer.phonenumbercache.CallLogQuery;
-import com.android.dialer.strictmode.StrictModeUtils;
import com.android.dialer.telecom.TelecomUtil;
import com.android.dialer.util.PermissionsUtil;
import com.google.common.io.ByteStreams;
@@ -519,7 +517,7 @@
handleError(new IllegalStateException("Cannot play voicemail when call is in progress"));
return;
}
- StrictModeUtils.bypass(this::prepareMediaPlayer);
+ prepareMediaPlayer();
}
private void prepareMediaPlayer() {
@@ -859,7 +857,7 @@
if (context == null) {
return;
}
- if (isShareVoicemailAllowed(context) && shareVoicemailButtonView != null) {
+ if (shareVoicemailButtonView != null) {
if (show) {
Logger.get(context).logImpression(DialerImpression.Type.VVM_SHARE_VISIBLE);
}
@@ -868,12 +866,6 @@
}
}
- private static boolean isShareVoicemailAllowed(Context context) {
- return ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean(CONFIG_SHARE_VOICEMAIL_ALLOWED, true);
- }
-
private static class ShareVoicemailWorker
implements DialerExecutor.Worker<Pair<Context, Uri>, Pair<Uri, String>> {
diff --git a/java/com/android/dialer/app/widget/ActionBarController.java b/java/com/android/dialer/app/widget/ActionBarController.java
deleted file mode 100644
index 8ab57bc..0000000
--- a/java/com/android/dialer/app/widget/ActionBarController.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source 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.app.widget;
-
-import android.animation.ValueAnimator;
-import android.os.Bundle;
-import com.android.dialer.animation.AnimUtils.AnimationCallback;
-import com.android.dialer.common.LogUtil;
-
-/**
- * Controls the various animated properties of the actionBar: showing/hiding, fading/revealing, and
- * collapsing/expanding, and assigns suitable properties to the actionBar based on the current state
- * of the UI.
- */
-public class ActionBarController {
-
- private static final String KEY_IS_SLID_UP = "key_actionbar_is_slid_up";
- private static final String KEY_IS_FADED_OUT = "key_actionbar_is_faded_out";
- private static final String KEY_IS_EXPANDED = "key_actionbar_is_expanded";
-
- private ActivityUi activityUi;
- private SearchEditTextLayout searchBox;
-
- private boolean isActionBarSlidUp;
-
- private final AnimationCallback fadeOutCallback =
- new AnimationCallback() {
- @Override
- public void onAnimationEnd() {
- slideActionBar(true /* slideUp */, false /* animate */);
- }
-
- @Override
- public void onAnimationCancel() {
- slideActionBar(true /* slideUp */, false /* animate */);
- }
- };
-
- private ValueAnimator animator;
-
- public ActionBarController(ActivityUi activityUi, SearchEditTextLayout searchBox) {
- this.activityUi = activityUi;
- this.searchBox = searchBox;
- }
-
- /** @return Whether or not the action bar is currently showing (both slid down and visible) */
- public boolean isActionBarShowing() {
- return !isActionBarSlidUp && !searchBox.isFadedOut();
- }
-
- /** Called when the user has tapped on the collapsed search box, to start a new search query. */
- public void onSearchBoxTapped() {
- LogUtil.d("ActionBarController.onSearchBoxTapped", "isInSearchUi " + activityUi.isInSearchUi());
- if (!activityUi.isInSearchUi()) {
- searchBox.expand(true /* animate */, true /* requestFocus */);
- }
- }
-
- /** Called when search UI has been exited for some reason. */
- public void onSearchUiExited() {
- LogUtil.d(
- "ActionBarController.onSearchUIExited",
- "isExpanded: %b, isFadedOut %b",
- searchBox.isExpanded(),
- searchBox.isFadedOut());
- if (searchBox.isExpanded()) {
- searchBox.collapse(true /* animate */);
- }
- if (searchBox.isFadedOut()) {
- searchBox.fadeIn();
- }
-
- slideActionBar(false /* slideUp */, false /* animate */);
- }
-
- /**
- * Called to indicate that the user is trying to hide the dialpad. Should be called before any
- * state changes have actually occurred.
- */
- public void onDialpadDown() {
- LogUtil.d(
- "ActionBarController.onDialpadDown",
- "isInSearchUi: %b, hasSearchQuery: %b, isFadedOut: %b, isExpanded: %b",
- activityUi.isInSearchUi(),
- activityUi.hasSearchQuery(),
- searchBox.isFadedOut(),
- searchBox.isExpanded());
- if (activityUi.isInSearchUi()) {
- if (searchBox.isFadedOut()) {
- searchBox.setVisible(true);
- }
- if (!searchBox.isExpanded()) {
- searchBox.expand(false /* animate */, false /* requestFocus */);
- }
- slideActionBar(false /* slideUp */, true /* animate */);
- }
- }
-
- /**
- * Called to indicate that the user is trying to show the dialpad. Should be called before any
- * state changes have actually occurred.
- */
- public void onDialpadUp() {
- LogUtil.d("ActionBarController.onDialpadUp", "isInSearchUi " + activityUi.isInSearchUi());
- if (activityUi.isInSearchUi()) {
- slideActionBar(true /* slideUp */, true /* animate */);
- } else {
- // From the lists fragment
- searchBox.fadeOut(fadeOutCallback);
- }
- }
-
- public void slideActionBar(boolean slideUp, boolean animate) {
- LogUtil.d("ActionBarController.slidingActionBar", "up: %b, animate: %b", slideUp, animate);
-
- if (animator != null && animator.isRunning()) {
- animator.cancel();
- animator.removeAllUpdateListeners();
- }
- if (animate) {
- animator = slideUp ? ValueAnimator.ofFloat(0, 1) : ValueAnimator.ofFloat(1, 0);
- animator.addUpdateListener(
- animation -> {
- final float value = (float) animation.getAnimatedValue();
- setHideOffset((int) (activityUi.getActionBarHeight() * value));
- });
- animator.start();
- } else {
- setHideOffset(slideUp ? activityUi.getActionBarHeight() : 0);
- }
- isActionBarSlidUp = slideUp;
- }
-
- public void setAlpha(float alphaValue) {
- searchBox.animate().alpha(alphaValue).start();
- }
-
- private void setHideOffset(int offset) {
- activityUi.setActionBarHideOffset(offset);
- }
-
- /** Saves the current state of the action bar into a provided {@link Bundle} */
- public void saveInstanceState(Bundle outState) {
- outState.putBoolean(KEY_IS_SLID_UP, isActionBarSlidUp);
- outState.putBoolean(KEY_IS_FADED_OUT, searchBox.isFadedOut());
- outState.putBoolean(KEY_IS_EXPANDED, searchBox.isExpanded());
- }
-
- /** Restores the action bar state from a provided {@link Bundle}. */
- public void restoreInstanceState(Bundle inState) {
- isActionBarSlidUp = inState.getBoolean(KEY_IS_SLID_UP);
-
- final boolean isSearchBoxFadedOut = inState.getBoolean(KEY_IS_FADED_OUT);
- if (isSearchBoxFadedOut) {
- if (!searchBox.isFadedOut()) {
- searchBox.setVisible(false);
- }
- } else if (searchBox.isFadedOut()) {
- searchBox.setVisible(true);
- }
-
- final boolean isSearchBoxExpanded = inState.getBoolean(KEY_IS_EXPANDED);
- if (isSearchBoxExpanded) {
- if (!searchBox.isExpanded()) {
- searchBox.expand(false, false);
- }
- } else if (searchBox.isExpanded()) {
- searchBox.collapse(false);
- }
- }
-
- /**
- * This should be called after onCreateOptionsMenu has been called, when the actionbar has been
- * laid out and actually has a height.
- */
- public void restoreActionBarOffset() {
- slideActionBar(isActionBarSlidUp /* slideUp */, false /* animate */);
- }
-
- public interface ActivityUi {
-
- boolean isInSearchUi();
-
- boolean hasSearchQuery();
-
- int getActionBarHeight();
-
- void setActionBarHideOffset(int offset);
- }
-}
diff --git a/java/com/android/dialer/assisteddialing/ConcreteCreator.java b/java/com/android/dialer/assisteddialing/ConcreteCreator.java
index 6e14516..39158dd 100644
--- a/java/com/android/dialer/assisteddialing/ConcreteCreator.java
+++ b/java/com/android/dialer/assisteddialing/ConcreteCreator.java
@@ -16,19 +16,6 @@
package com.android.dialer.assisteddialing;
-import android.content.Context;
-import android.os.Build;
-import android.preference.PreferenceManager;
-import android.support.annotation.NonNull;
-import android.support.v4.os.UserManagerCompat;
-import android.telephony.TelephonyManager;
-
-import com.android.dialer.R;
-import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProvider;
-import com.android.dialer.configprovider.ConfigProviderComponent;
-import com.android.dialer.strictmode.StrictModeUtils;
-
/**
* A Creator for AssistedDialingMediators.
*
@@ -40,25 +27,16 @@
/**
* Creates a new AssistedDialingMediator
*
- * @param telephonyManager The telephony manager used to determine user location.
- * @param context The context used to determine whether or not a provided number is an emergency
- * number.
* @return An AssistedDialingMediator
*/
- public static AssistedDialingMediator createNewAssistedDialingMediator(
- @NonNull TelephonyManager telephonyManager, @NonNull Context context) {
+ public static AssistedDialingMediator createNewAssistedDialingMediator() {
return new AssistedDialingMediatorStub();
}
/**
* Returns a CountryCodeProvider responsible for providing countries eligible for assisted Dialing
*/
- public static CountryCodeProvider getCountryCodeProvider(ConfigProvider configProvider) {
- if (configProvider == null) {
- LogUtil.i("ConcreteCreator.getCountryCodeProvider", "provided configProvider was null");
- throw new NullPointerException("Provided configProvider was null");
- }
-
- return new CountryCodeProvider(configProvider);
+ public static CountryCodeProvider getCountryCodeProvider() {
+ return new CountryCodeProvider();
}
}
diff --git a/java/com/android/dialer/assisteddialing/Constraints.java b/java/com/android/dialer/assisteddialing/Constraints.java
index 41a3e92..9acc04e 100644
--- a/java/com/android/dialer/assisteddialing/Constraints.java
+++ b/java/com/android/dialer/assisteddialing/Constraints.java
@@ -24,7 +24,6 @@
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.dialer.phonenumberutil.PhoneNumberHelper;
-import com.android.dialer.strictmode.StrictModeUtils;
import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
@@ -55,7 +54,7 @@
}
this.countryCodeProvider = countryCodeProvider;
- this.phoneNumberUtil = StrictModeUtils.bypass(() -> PhoneNumberUtil.getInstance());
+ this.phoneNumberUtil = PhoneNumberUtil.getInstance();
}
/**
@@ -144,18 +143,15 @@
*/
private Optional<PhoneNumber> parsePhoneNumber(
@NonNull String numberToParse, @NonNull String userHomeCountryCode) {
- return StrictModeUtils.bypass(
- () -> {
- try {
- return Optional.of(
- phoneNumberUtil.parseAndKeepRawInput(numberToParse, userHomeCountryCode));
- } catch (NumberParseException e) {
- Logger.get(context)
- .logImpression(DialerImpression.Type.ASSISTED_DIALING_CONSTRAINT_PARSING_FAILURE);
- LogUtil.i("Constraints.parsePhoneNumber", "could not parse the number");
- return Optional.empty();
- }
- });
+ try {
+ return Optional.of(
+ phoneNumberUtil.parseAndKeepRawInput(numberToParse, userHomeCountryCode));
+ } catch (NumberParseException e) {
+ Logger.get(context)
+ .logImpression(DialerImpression.Type.ASSISTED_DIALING_CONSTRAINT_PARSING_FAILURE);
+ LogUtil.i("Constraints.parsePhoneNumber", "could not parse the number");
+ return Optional.empty();
+ }
}
/** Returns a boolean indicating if the provided number is already internationally formatted. */
@@ -193,8 +189,7 @@
/** Returns a boolean indicating if the provided number is considered to be a valid number. */
private boolean isValidNumber(@NonNull Optional<PhoneNumber> parsedPhoneNumber) {
- boolean result =
- StrictModeUtils.bypass(() -> phoneNumberUtil.isValidNumber(parsedPhoneNumber.get()));
+ boolean result = phoneNumberUtil.isValidNumber(parsedPhoneNumber.get());
LogUtil.i("Constraints.isValidNumber", String.valueOf(result));
return result;
diff --git a/java/com/android/dialer/assisteddialing/CountryCodeProvider.java b/java/com/android/dialer/assisteddialing/CountryCodeProvider.java
index 04b2291..721f452 100644
--- a/java/com/android/dialer/assisteddialing/CountryCodeProvider.java
+++ b/java/com/android/dialer/assisteddialing/CountryCodeProvider.java
@@ -17,16 +17,12 @@
package com.android.dialer.assisteddialing;
import android.support.annotation.VisibleForTesting;
-import android.text.TextUtils;
import android.util.ArraySet;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProvider;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.Set;
-import java.util.StringTokenizer;
import java.util.stream.Collectors;
/** A class to provide the appropriate country codes related to assisted dialing. */
@@ -46,10 +42,8 @@
private final Set<String> supportedCountryCodes;
- CountryCodeProvider(ConfigProvider configProvider) {
- supportedCountryCodes =
- parseConfigProviderCountryCodes(
- configProvider.getString("assisted_dialing_csv_country_codes", ""))
+ CountryCodeProvider() {
+ supportedCountryCodes = DEFAULT_COUNTRY_CODES
.stream()
.map(v -> v.toUpperCase(Locale.US))
.collect(Collectors.toCollection(ArraySet::new));
@@ -61,43 +55,4 @@
public boolean isSupportedCountryCode(String countryCode) {
return supportedCountryCodes.contains(countryCode);
}
-
- private List<String> parseConfigProviderCountryCodes(String configProviderCountryCodes) {
- if (TextUtils.isEmpty(configProviderCountryCodes)) {
- LogUtil.i(
- "Constraints.parseConfigProviderCountryCodes",
- "configProviderCountryCodes was empty, returning default");
- return DEFAULT_COUNTRY_CODES;
- }
-
- StringTokenizer tokenizer = new StringTokenizer(configProviderCountryCodes, ",");
-
- if (tokenizer.countTokens() < 1) {
- LogUtil.i(
- "Constraints.parseConfigProviderCountryCodes", "insufficient provided country codes");
- return DEFAULT_COUNTRY_CODES;
- }
-
- List<String> parsedCountryCodes = new ArrayList<>();
- while (tokenizer.hasMoreTokens()) {
- String foundLocale = tokenizer.nextToken();
- if (foundLocale == null) {
- LogUtil.i(
- "Constraints.parseConfigProviderCountryCodes",
- "Unexpected empty value, returning default.");
- return DEFAULT_COUNTRY_CODES;
- }
-
- if (foundLocale.length() != 2) {
- LogUtil.i(
- "Constraints.parseConfigProviderCountryCodes",
- "Unexpected locale %s, returning default",
- foundLocale);
- return DEFAULT_COUNTRY_CODES;
- }
-
- parsedCountryCodes.add(foundLocale);
- }
- return parsedCountryCodes;
- }
}
diff --git a/java/com/android/dialer/assisteddialing/NumberTransformer.java b/java/com/android/dialer/assisteddialing/NumberTransformer.java
index eabf856..f5b1bbd 100644
--- a/java/com/android/dialer/assisteddialing/NumberTransformer.java
+++ b/java/com/android/dialer/assisteddialing/NumberTransformer.java
@@ -18,7 +18,6 @@
import android.text.TextUtils;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.strictmode.StrictModeUtils;
import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
@@ -32,7 +31,7 @@
NumberTransformer(Constraints constraints) {
this.constraints = constraints;
- this.phoneNumberUtil = StrictModeUtils.bypass(PhoneNumberUtil::getInstance);
+ this.phoneNumberUtil = PhoneNumberUtil.getInstance();
}
/**
@@ -53,27 +52,21 @@
return Optional.empty();
}
- PhoneNumber phoneNumber =
- StrictModeUtils.bypass(
- () -> {
- try {
- return phoneNumberUtil.parse(numbertoTransform, userHomeCountryCode);
- } catch (NumberParseException e) {
- LogUtil.i(
- "NumberTransformer.doAssistedDialingTransformation", "number failed to parse");
- return null;
- }
- });
+ PhoneNumber phoneNumber;
+ try {
+ phoneNumber = phoneNumberUtil.parse(numbertoTransform, userHomeCountryCode);
+ } catch (NumberParseException e) {
+ LogUtil.i(
+ "NumberTransformer.doAssistedDialingTransformation", "number failed to parse");
+ phoneNumber = null;
+ }
if (phoneNumber == null) {
return Optional.empty();
}
- String transformedNumber =
- StrictModeUtils.bypass(
- () ->
- phoneNumberUtil.formatNumberForMobileDialing(
- phoneNumber, userRoamingCountryCode, true));
+ String transformedNumber = phoneNumberUtil.formatNumberForMobileDialing(
+ phoneNumber, userRoamingCountryCode, true);
// formatNumberForMobileDialing may return an empty String.
if (TextUtils.isEmpty(transformedNumber)) {
diff --git a/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java b/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
index 76e6127..9de9912 100644
--- a/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
+++ b/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
@@ -29,7 +29,6 @@
import com.android.dialer.assisteddialing.ConcreteCreator;
import com.android.dialer.assisteddialing.CountryCodeProvider;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.google.auto.value.AutoValue;
@@ -63,13 +62,8 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- assistedDialingMediator =
- ConcreteCreator.createNewAssistedDialingMediator(
- getContext().getSystemService(TelephonyManager.class), getContext());
-
- countryCodeProvider =
- ConcreteCreator.getCountryCodeProvider(
- ConfigProviderComponent.get(getContext()).getConfigProvider());
+ assistedDialingMediator = ConcreteCreator.createNewAssistedDialingMediator();
+ countryCodeProvider = ConcreteCreator.getCountryCodeProvider();
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.assisted_dialing_setting);
diff --git a/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java b/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java
index 7f02b38..eb258e2 100644
--- a/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java
+++ b/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java
@@ -22,7 +22,6 @@
import com.android.dialer.calllog.CallLogModule;
import com.android.dialer.commandline.CommandLineModule;
import com.android.dialer.common.concurrent.DialerExecutorModule;
-import com.android.dialer.configprovider.SharedPrefConfigProviderModule;
import com.android.dialer.contacts.ContactsModule;
import com.android.dialer.duo.stub.StubDuoModule;
import com.android.dialer.enrichedcall.stub.StubEnrichedCallModule;
@@ -39,10 +38,8 @@
import com.android.dialer.simulator.stub.StubSimulatorEnrichedCallModule;
import com.android.dialer.spam.stub.StubSpamModule;
import com.android.dialer.storage.StorageModule;
-import com.android.dialer.strictmode.impl.SystemStrictModeModule;
import com.android.dialer.theme.base.impl.AospThemeModule;
import com.android.incallui.calllocation.stub.StubCallLocationModule;
-import com.android.incallui.speakeasy.StubSpeakEasyModule;
import com.android.voicemail.impl.VoicemailModule;
import dagger.Component;
import javax.inject.Singleton;
@@ -63,7 +60,6 @@
PreCallModule.class,
PreferredSimModule.class,
PromotionModule.class,
- SharedPrefConfigProviderModule.class,
SimulatorModule.class,
StubSimulatorEnrichedCallModule.class,
StorageModule.class,
@@ -74,8 +70,6 @@
StubFeedbackModule.class,
StubSimSuggestionModule.class,
StubSpamModule.class,
- StubSpeakEasyModule.class,
- SystemStrictModeModule.class,
AospThemeModule.class,
VoicemailModule.class,
})
diff --git a/java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java b/java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java
index f7d3e8e..7c9d02b 100644
--- a/java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java
+++ b/java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java
@@ -23,7 +23,6 @@
import com.android.dialer.calllog.ui.CallLogUiComponent;
import com.android.dialer.commandline.CommandLineComponent;
import com.android.dialer.common.concurrent.DialerExecutorComponent;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.contacts.ContactsComponent;
import com.android.dialer.duo.DuoComponent;
import com.android.dialer.enrichedcall.EnrichedCallComponent;
@@ -40,10 +39,8 @@
import com.android.dialer.spam.SpamComponent;
import com.android.dialer.speeddial.loader.UiItemLoaderComponent;
import com.android.dialer.storage.StorageComponent;
-import com.android.dialer.strictmode.StrictModeComponent;
import com.android.dialer.theme.base.ThemeComponent;
import com.android.incallui.calllocation.CallLocationComponent;
-import com.android.incallui.speakeasy.SpeakEasyComponent;
import com.android.voicemail.VoicemailComponent;
/**
@@ -57,7 +54,6 @@
CallLogComponent.HasComponent,
CallLogDatabaseComponent.HasComponent,
CallLogUiComponent.HasComponent,
- ConfigProviderComponent.HasComponent,
CommandLineComponent.HasComponent,
ContactsComponent.HasComponent,
DialerExecutorComponent.HasComponent,
@@ -75,8 +71,6 @@
SimSuggestionComponent.HasComponent,
SimulatorComponent.HasComponent,
SpamComponent.HasComponent,
- SpeakEasyComponent.HasComponent,
StorageComponent.HasComponent,
- StrictModeComponent.HasComponent,
ThemeComponent.HasComponent,
VoicemailComponent.HasComponent {}
diff --git a/java/com/android/dialer/binary/common/DialerApplication.java b/java/com/android/dialer/binary/common/DialerApplication.java
index 6520fc0..268845b 100644
--- a/java/com/android/dialer/binary/common/DialerApplication.java
+++ b/java/com/android/dialer/binary/common/DialerApplication.java
@@ -20,12 +20,10 @@
import android.os.Trace;
import android.support.annotation.NonNull;
import com.android.dialer.callrecord.CallRecordingAutoMigrator;
-import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.DialerExecutorComponent;
import com.android.dialer.inject.HasRootComponent;
import com.android.dialer.notification.NotificationChannelManager;
import com.android.dialer.persistentlog.PersistentLogger;
-import com.android.dialer.strictmode.StrictModeComponent;
/** A common application subclass for all Dialer build variants. */
public abstract class DialerApplication extends Application implements HasRootComponent {
@@ -35,7 +33,6 @@
@Override
public void onCreate() {
Trace.beginSection("DialerApplication.onCreate");
- StrictModeComponent.get(this).getDialerStrictMode().onApplicationCreate(this);
super.onCreate();
new CallRecordingAutoMigrator(
this.getApplicationContext(),
diff --git a/java/com/android/dialer/buildtype/BuildType.java b/java/com/android/dialer/buildtype/BuildType.java
deleted file mode 100644
index c5c41d2..0000000
--- a/java/com/android/dialer/buildtype/BuildType.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source 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.buildtype;
-
-import android.support.annotation.IntDef;
-import com.android.dialer.common.Assert;
-import com.android.dialer.common.LogUtil;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/** Utility to find out which build type the app is running as. */
-public class BuildType {
-
- /** The type of build. */
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({
- Type.BUGFOOD,
- Type.FISHFOOD,
- Type.DOGFOOD,
- Type.RELEASE,
- Type.TEST,
- })
- public @interface Type {
- int BUGFOOD = 1;
- int FISHFOOD = 2;
- int DOGFOOD = 3;
- int RELEASE = 4;
- int TEST = 5;
- }
-
- private static int cachedBuildType;
- private static boolean didInitializeBuildType;
-
- @Type
- public static synchronized int get() {
- if (!didInitializeBuildType) {
- didInitializeBuildType = true;
- try {
- Class<?> clazz = Class.forName(BuildTypeAccessor.class.getName() + "Impl");
- BuildTypeAccessor accessorImpl = (BuildTypeAccessor) clazz.getConstructor().newInstance();
- cachedBuildType = accessorImpl.getBuildType();
- } catch (ReflectiveOperationException e) {
- LogUtil.e("BuildType.get", "error creating BuildTypeAccessorImpl", e);
- Assert.fail(
- "Unable to get build type. To fix this error include one of the build type "
- + "modules (bugfood, etc...) in your target.");
- }
- }
- return cachedBuildType;
- }
-
- private BuildType() {}
-}
diff --git a/java/com/android/dialer/buildtype/BuildTypeAccessor.java b/java/com/android/dialer/buildtype/BuildTypeAccessor.java
deleted file mode 100644
index 940cf81..0000000
--- a/java/com/android/dialer/buildtype/BuildTypeAccessor.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source 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.buildtype;
-
-import com.android.dialer.proguard.UsedByReflection;
-
-/**
- * Gets the build type. The functionality depends on a an implementation being present in the app
- * that has the same package and the class name ending in "Impl". For example,
- * com.android.dialer.buildtype.BuildTypeAccessorImpl. This class is found by the module using
- * reflection.
- */
-@UsedByReflection(value = "BuildType.java")
-/* package */ interface BuildTypeAccessor {
- @BuildType.Type
- int getBuildType();
-}
diff --git a/java/com/android/dialer/buildtype/release/BuildTypeAccessorImpl.java b/java/com/android/dialer/buildtype/release/BuildTypeAccessorImpl.java
deleted file mode 100644
index 4019dd0..0000000
--- a/java/com/android/dialer/buildtype/release/BuildTypeAccessorImpl.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source 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.buildtype;
-
-import com.android.dialer.buildtype.BuildType.Type;
-import com.android.dialer.proguard.UsedByReflection;
-
-/** Gets the build type. */
-@UsedByReflection(value = "BuildType.java")
-public class BuildTypeAccessorImpl implements BuildTypeAccessor {
-
- @Override
- @BuildType.Type
- public int getBuildType() {
- return Type.RELEASE;
- }
-}
diff --git a/java/com/android/dialer/callcomposer/CallComposerActivity.java b/java/com/android/dialer/callcomposer/CallComposerActivity.java
index fc5cb22..d44bd32 100644
--- a/java/com/android/dialer/callcomposer/CallComposerActivity.java
+++ b/java/com/android/dialer/callcomposer/CallComposerActivity.java
@@ -60,7 +60,6 @@
import com.android.dialer.common.concurrent.DialerExecutor;
import com.android.dialer.common.concurrent.DialerExecutorComponent;
import com.android.dialer.common.concurrent.ThreadUtil;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.constants.Constants;
import com.android.dialer.contactphoto.ContactPhotoManager;
import com.android.dialer.dialercontact.DialerContact;
@@ -346,9 +345,7 @@
@VisibleForTesting
public long getSessionStartedTimeoutMillis() {
- return ConfigProviderComponent.get(this)
- .getConfigProvider()
- .getLong("ec_session_started_timeout", 10_000);
+ return 10_000;
}
@Override
@@ -443,11 +440,7 @@
getEnrichedCallManager().sendCallComposerData(sessionId, data);
maybeShowPrivacyToast(data);
- if (data.hasImageData()
- && ConfigProviderComponent.get(this)
- .getConfigProvider()
- .getBoolean("enable_delayed_ec_images", true)
- && !TelecomUtil.isInManagedCall(this)) {
+ if (data.hasImageData() && !TelecomUtil.isInManagedCall(this)) {
timeoutHandler.postDelayed(placeTelecomCallRunnable, getRCSTimeoutMillis());
startActivity(
CallPendingActivity.getIntent(
@@ -481,9 +474,7 @@
@VisibleForTesting
public long getRCSTimeoutMillis() {
- return ConfigProviderComponent.get(this)
- .getConfigProvider()
- .getLong("ec_image_upload_timeout", 15_000);
+ return 15_000;
}
private void placeTelecomCall() {
diff --git a/java/com/android/dialer/calllog/database/CallLogDatabaseComponent.java b/java/com/android/dialer/calllog/database/CallLogDatabaseComponent.java
index 09e291e..dc16ba4 100644
--- a/java/com/android/dialer/calllog/database/CallLogDatabaseComponent.java
+++ b/java/com/android/dialer/calllog/database/CallLogDatabaseComponent.java
@@ -23,8 +23,6 @@
@Subcomponent
public abstract class CallLogDatabaseComponent {
- public abstract Coalescer coalescer();
-
public abstract AnnotatedCallLogDatabaseHelper annotatedCallLogDatabaseHelper();
public static CallLogDatabaseComponent get(Context context) {
diff --git a/java/com/android/dialer/calllog/database/Coalescer.java b/java/com/android/dialer/calllog/database/Coalescer.java
deleted file mode 100644
index fd751e7..0000000
--- a/java/com/android/dialer/calllog/database/Coalescer.java
+++ /dev/null
@@ -1,386 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source 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.calllog.database;
-
-import android.database.Cursor;
-import android.database.StaleDataException;
-import android.provider.CallLog.Calls;
-import android.support.annotation.NonNull;
-import android.support.annotation.WorkerThread;
-import android.telecom.PhoneAccountHandle;
-import android.text.TextUtils;
-import com.android.dialer.CoalescedIds;
-import com.android.dialer.DialerPhoneNumber;
-import com.android.dialer.NumberAttributes;
-import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract.AnnotatedCallLog;
-import com.android.dialer.calllog.model.CoalescedRow;
-import com.android.dialer.common.Assert;
-import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
-import com.android.dialer.compat.telephony.TelephonyManagerCompat;
-import com.android.dialer.metrics.FutureTimer;
-import com.android.dialer.metrics.Metrics;
-import com.android.dialer.phonenumberproto.DialerPhoneNumberUtil;
-import com.android.dialer.telecom.TelecomUtil;
-import com.google.common.collect.ImmutableList;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
-import com.google.protobuf.InvalidProtocolBufferException;
-import java.util.Objects;
-import javax.inject.Inject;
-
-/** Combines adjacent rows in {@link AnnotatedCallLog}. */
-public class Coalescer {
-
- private final FutureTimer futureTimer;
- private final ListeningExecutorService backgroundExecutorService;
-
- @Inject
- Coalescer(
- @BackgroundExecutor ListeningExecutorService backgroundExecutorService,
- FutureTimer futureTimer) {
- this.backgroundExecutorService = backgroundExecutorService;
- this.futureTimer = futureTimer;
- }
-
- /**
- * Given rows from {@link AnnotatedCallLog}, combine adjacent ones which should be collapsed for
- * display purposes.
- *
- * @param allAnnotatedCallLogRowsSortedByTimestampDesc {@link AnnotatedCallLog} rows sorted in
- * descending order of timestamp.
- * @return a future of a list of {@link CoalescedRow coalesced rows}, which will be used to
- * display call log entries.
- */
- public ListenableFuture<ImmutableList<CoalescedRow>> coalesce(
- @NonNull Cursor allAnnotatedCallLogRowsSortedByTimestampDesc) {
- ListenableFuture<ImmutableList<CoalescedRow>> coalescingFuture =
- backgroundExecutorService.submit(
- () -> coalesceInternal(Assert.isNotNull(allAnnotatedCallLogRowsSortedByTimestampDesc)));
- futureTimer.applyTiming(coalescingFuture, Metrics.NEW_CALL_LOG_COALESCE);
- return coalescingFuture;
- }
-
- /**
- * Reads the entire {@link AnnotatedCallLog} into memory from the provided cursor and then builds
- * and returns a list of {@link CoalescedRow coalesced rows}, which is the result of combining
- * adjacent rows which should be collapsed for display purposes.
- *
- * @param allAnnotatedCallLogRowsSortedByTimestampDesc {@link AnnotatedCallLog} rows sorted in
- * descending order of timestamp.
- * @return a list of {@link CoalescedRow coalesced rows}, which will be used to display call log
- * entries.
- */
- @WorkerThread
- @NonNull
- private ImmutableList<CoalescedRow> coalesceInternal(
- Cursor allAnnotatedCallLogRowsSortedByTimestampDesc) throws ExpectedCoalescerException {
- Assert.isWorkerThread();
-
- ImmutableList.Builder<CoalescedRow> coalescedRowListBuilder = new ImmutableList.Builder<>();
-
- try {
- if (!allAnnotatedCallLogRowsSortedByTimestampDesc.moveToFirst()) {
- return ImmutableList.of();
- }
-
- RowCombiner rowCombiner = new RowCombiner(allAnnotatedCallLogRowsSortedByTimestampDesc);
- rowCombiner.startNewGroup();
-
- long coalescedRowId = 0;
- do {
- boolean isRowMerged = rowCombiner.mergeRow(allAnnotatedCallLogRowsSortedByTimestampDesc);
-
- if (isRowMerged) {
- allAnnotatedCallLogRowsSortedByTimestampDesc.moveToNext();
- }
-
- if (!isRowMerged || allAnnotatedCallLogRowsSortedByTimestampDesc.isAfterLast()) {
- coalescedRowListBuilder.add(
- rowCombiner.combine().toBuilder().setId(coalescedRowId++).build());
- rowCombiner.startNewGroup();
- }
- } while (!allAnnotatedCallLogRowsSortedByTimestampDesc.isAfterLast());
-
- return coalescedRowListBuilder.build();
-
- } catch (Exception exception) {
- // Coalescing can fail if cursor "allAnnotatedCallLogRowsSortedByTimestampDesc" is closed by
- // its loader while the work is still in progress.
- //
- // This can happen when the loader restarts and finishes loading data before the coalescing
- // work is completed.
- //
- // This kind of failure doesn't have to crash the app as coalescing will be restarted on the
- // latest data obtained by the loader. Therefore, we inspect the exception here and throw an
- // ExpectedCoalescerException if it is the case described above.
- //
- // The type of expected exception depends on whether AbstractWindowedCursor#checkPosition() is
- // called when the cursor is closed.
- // (1) If it is called before the cursor is closed, we will get IllegalStateException thrown
- // by SQLiteClosable when it attempts to acquire a reference to the database.
- // (2) Otherwise, we will get StaleDataException thrown by AbstractWindowedCursor's
- // checkPosition() method.
- //
- // Note that it would be more accurate to inspect the stack trace to locate the origin of the
- // exception. However, according to the documentation on Throwable#getStackTrace, "some
- // virtual machines may, under some circumstances, omit one or more stack frames from the
- // stack trace". "In the extreme case, a virtual machine that has no stack trace information
- // concerning this throwable is permitted to return a zero-length array from this method."
- // Therefore, the best we can do is to inspect the message in the exception.
- // TODO(linyuh): try to avoid the expected failure.
- String message = exception.getMessage();
- if (message != null
- && ((exception instanceof StaleDataException
- && message.startsWith("Attempting to access a closed CursorWindow"))
- || (exception instanceof IllegalStateException
- && message.startsWith("attempt to re-open an already-closed object")))) {
- throw new ExpectedCoalescerException(exception);
- }
-
- throw exception;
- }
- }
-
- /** Combines rows from {@link AnnotatedCallLog} into a {@link CoalescedRow}. */
- private static final class RowCombiner {
- private final CoalescedRow.Builder coalescedRowBuilder = CoalescedRow.newBuilder();
- private final CoalescedIds.Builder coalescedIdsBuilder = CoalescedIds.newBuilder();
-
- // Indexes for columns in AnnotatedCallLog
- private final int idColumn;
- private final int timestampColumn;
- private final int numberColumn;
- private final int formattedNumberColumn;
- private final int numberPresentationColumn;
- private final int isReadColumn;
- private final int isNewColumn;
- private final int geocodedLocationColumn;
- private final int phoneAccountComponentNameColumn;
- private final int phoneAccountIdColumn;
- private final int featuresColumn;
- private final int numberAttributesColumn;
- private final int isVoicemailCallColumn;
- private final int voicemailCallTagColumn;
- private final int callTypeColumn;
-
- // DialerPhoneNumberUtil will be created lazily as its instantiation is expensive.
- private DialerPhoneNumberUtil dialerPhoneNumberUtil = null;
-
- RowCombiner(Cursor annotatedCallLogRow) {
- idColumn = annotatedCallLogRow.getColumnIndexOrThrow(AnnotatedCallLog._ID);
- timestampColumn = annotatedCallLogRow.getColumnIndexOrThrow(AnnotatedCallLog.TIMESTAMP);
- numberColumn = annotatedCallLogRow.getColumnIndexOrThrow(AnnotatedCallLog.NUMBER);
- formattedNumberColumn =
- annotatedCallLogRow.getColumnIndexOrThrow(AnnotatedCallLog.FORMATTED_NUMBER);
- numberPresentationColumn =
- annotatedCallLogRow.getColumnIndexOrThrow(AnnotatedCallLog.NUMBER_PRESENTATION);
- isReadColumn = annotatedCallLogRow.getColumnIndexOrThrow(AnnotatedCallLog.IS_READ);
- isNewColumn = annotatedCallLogRow.getColumnIndexOrThrow(AnnotatedCallLog.NEW);
- geocodedLocationColumn =
- annotatedCallLogRow.getColumnIndexOrThrow(AnnotatedCallLog.GEOCODED_LOCATION);
- phoneAccountComponentNameColumn =
- annotatedCallLogRow.getColumnIndexOrThrow(AnnotatedCallLog.PHONE_ACCOUNT_COMPONENT_NAME);
- phoneAccountIdColumn =
- annotatedCallLogRow.getColumnIndexOrThrow(AnnotatedCallLog.PHONE_ACCOUNT_ID);
- featuresColumn = annotatedCallLogRow.getColumnIndexOrThrow(AnnotatedCallLog.FEATURES);
- numberAttributesColumn =
- annotatedCallLogRow.getColumnIndexOrThrow(AnnotatedCallLog.NUMBER_ATTRIBUTES);
- isVoicemailCallColumn =
- annotatedCallLogRow.getColumnIndexOrThrow(AnnotatedCallLog.IS_VOICEMAIL_CALL);
- voicemailCallTagColumn =
- annotatedCallLogRow.getColumnIndexOrThrow(AnnotatedCallLog.VOICEMAIL_CALL_TAG);
- callTypeColumn = annotatedCallLogRow.getColumnIndexOrThrow(AnnotatedCallLog.CALL_TYPE);
- }
-
- /**
- * Prepares {@link RowCombiner} for building a new group of rows by clearing information on all
- * previously merged rows.
- */
- void startNewGroup() {
- coalescedRowBuilder.clear();
- coalescedIdsBuilder.clear();
- }
-
- /**
- * Merge the given {@link AnnotatedCallLog} row into the current group.
- *
- * @return true if the given row is merged.
- */
- boolean mergeRow(Cursor annotatedCallLogRow) {
- Assert.checkArgument(annotatedCallLogRow.getInt(callTypeColumn) != Calls.VOICEMAIL_TYPE);
-
- if (!canMergeRow(annotatedCallLogRow)) {
- return false;
- }
-
- // Set fields that don't use the most recent value.
- //
- // Currently there is only one such field: "features".
- // If any call in a group includes a feature (like Wifi/HD), consider the group to have
- // the feature.
- coalescedRowBuilder.setFeatures(
- coalescedRowBuilder.getFeatures() | annotatedCallLogRow.getInt(featuresColumn));
-
- // Set fields that use the most recent value.
- // Rows passed to Coalescer are already sorted in descending order of timestamp. If the
- // coalesced ID list is not empty, it means RowCombiner has merged the most recent row in a
- // group and there is no need to continue as we only set fields that use the most recent value
- // from this point forward.
- if (!coalescedIdsBuilder.getCoalescedIdList().isEmpty()) {
- coalescedIdsBuilder.addCoalescedId(annotatedCallLogRow.getInt(idColumn));
- return true;
- }
-
- coalescedRowBuilder
- .setTimestamp(annotatedCallLogRow.getLong(timestampColumn))
- .setNumberPresentation(annotatedCallLogRow.getInt(numberPresentationColumn))
- .setIsRead(annotatedCallLogRow.getInt(isReadColumn) == 1)
- .setIsNew(annotatedCallLogRow.getInt(isNewColumn) == 1)
- .setIsVoicemailCall(annotatedCallLogRow.getInt(isVoicemailCallColumn) == 1)
- .setCallType(annotatedCallLogRow.getInt(callTypeColumn));
-
- // Two different DialerPhoneNumbers could be combined if they are different but considered
- // to be a match by libphonenumber; in this case we arbitrarily select the most recent one.
- try {
- coalescedRowBuilder.setNumber(
- DialerPhoneNumber.parseFrom(annotatedCallLogRow.getBlob(numberColumn)));
- } catch (InvalidProtocolBufferException e) {
- throw Assert.createAssertionFailException("Unable to parse DialerPhoneNumber bytes", e);
- }
-
- String formattedNumber = annotatedCallLogRow.getString(formattedNumberColumn);
- if (!TextUtils.isEmpty(formattedNumber)) {
- coalescedRowBuilder.setFormattedNumber(formattedNumber);
- }
-
- String geocodedLocation = annotatedCallLogRow.getString(geocodedLocationColumn);
- if (!TextUtils.isEmpty(geocodedLocation)) {
- coalescedRowBuilder.setGeocodedLocation(geocodedLocation);
- }
-
- String phoneAccountComponentName =
- annotatedCallLogRow.getString(phoneAccountComponentNameColumn);
- if (!TextUtils.isEmpty(phoneAccountComponentName)) {
- coalescedRowBuilder.setPhoneAccountComponentName(phoneAccountComponentName);
- }
-
- String phoneAccountId = annotatedCallLogRow.getString(phoneAccountIdColumn);
- if (!TextUtils.isEmpty(phoneAccountId)) {
- coalescedRowBuilder.setPhoneAccountId(phoneAccountId);
- }
-
- try {
- coalescedRowBuilder.setNumberAttributes(
- NumberAttributes.parseFrom(annotatedCallLogRow.getBlob(numberAttributesColumn)));
- } catch (InvalidProtocolBufferException e) {
- throw Assert.createAssertionFailException("Unable to parse NumberAttributes bytes", e);
- }
-
- String voicemailCallTag = annotatedCallLogRow.getString(voicemailCallTagColumn);
- if (!TextUtils.isEmpty(voicemailCallTag)) {
- coalescedRowBuilder.setVoicemailCallTag(voicemailCallTag);
- }
-
- coalescedIdsBuilder.addCoalescedId(annotatedCallLogRow.getInt(idColumn));
- return true;
- }
-
- /** Builds a {@link CoalescedRow} based on all rows merged into the current group. */
- CoalescedRow combine() {
- return coalescedRowBuilder.setCoalescedIds(coalescedIdsBuilder.build()).build();
- }
-
- /**
- * Returns true if the given {@link AnnotatedCallLog} row can be merged into the current group.
- */
- private boolean canMergeRow(Cursor annotatedCallLogRow) {
- return coalescedIdsBuilder.getCoalescedIdList().isEmpty()
- || (samePhoneAccount(annotatedCallLogRow)
- && sameNumberPresentation(annotatedCallLogRow)
- && meetsCallFeatureCriteria(annotatedCallLogRow)
- && meetsDialerPhoneNumberCriteria(annotatedCallLogRow));
- }
-
- private boolean samePhoneAccount(Cursor annotatedCallLogRow) {
- PhoneAccountHandle groupPhoneAccountHandle =
- TelecomUtil.composePhoneAccountHandle(
- coalescedRowBuilder.getPhoneAccountComponentName(),
- coalescedRowBuilder.getPhoneAccountId());
- PhoneAccountHandle rowPhoneAccountHandle =
- TelecomUtil.composePhoneAccountHandle(
- annotatedCallLogRow.getString(phoneAccountComponentNameColumn),
- annotatedCallLogRow.getString(phoneAccountIdColumn));
-
- return Objects.equals(groupPhoneAccountHandle, rowPhoneAccountHandle);
- }
-
- private boolean sameNumberPresentation(Cursor annotatedCallLogRow) {
- return coalescedRowBuilder.getNumberPresentation()
- == annotatedCallLogRow.getInt(numberPresentationColumn);
- }
-
- private boolean meetsCallFeatureCriteria(Cursor annotatedCallLogRow) {
- int groupFeatures = coalescedRowBuilder.getFeatures();
- int rowFeatures = annotatedCallLogRow.getInt(featuresColumn);
-
- // A row with FEATURES_ASSISTED_DIALING should not be combined with one without it.
- if ((groupFeatures & TelephonyManagerCompat.FEATURES_ASSISTED_DIALING)
- != (rowFeatures & TelephonyManagerCompat.FEATURES_ASSISTED_DIALING)) {
- return false;
- }
-
- // A video call should not be combined with one that is not a video call.
- if ((groupFeatures & Calls.FEATURES_VIDEO) != (rowFeatures & Calls.FEATURES_VIDEO)) {
- return false;
- }
-
- // A RTT call should not be combined with one that is not a RTT call.
- if ((groupFeatures & Calls.FEATURES_RTT) != (rowFeatures & Calls.FEATURES_RTT)) {
- return false;
- }
-
- return true;
- }
-
- private boolean meetsDialerPhoneNumberCriteria(Cursor annotatedCallLogRow) {
- DialerPhoneNumber groupPhoneNumber = coalescedRowBuilder.getNumber();
-
- DialerPhoneNumber rowPhoneNumber;
- try {
- byte[] rowPhoneNumberBytes = annotatedCallLogRow.getBlob(numberColumn);
- if (rowPhoneNumberBytes == null) {
- return false; // Empty numbers should not be combined.
- }
- rowPhoneNumber = DialerPhoneNumber.parseFrom(rowPhoneNumberBytes);
- } catch (InvalidProtocolBufferException e) {
- throw Assert.createAssertionFailException("Unable to parse DialerPhoneNumber bytes", e);
- }
-
- if (dialerPhoneNumberUtil == null) {
- dialerPhoneNumberUtil = new DialerPhoneNumberUtil();
- }
-
- return dialerPhoneNumberUtil.isMatch(groupPhoneNumber, rowPhoneNumber);
- }
- }
-
- /** A checked exception thrown when expected failure happens when coalescing is in progress. */
- public static final class ExpectedCoalescerException extends Exception {
- ExpectedCoalescerException(Throwable throwable) {
- super("Expected coalescing exception", throwable);
- }
- }
-}
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
index 7b02d0d..f534068 100644
--- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
@@ -41,7 +41,6 @@
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
-import com.android.dialer.compat.android.provider.VoicemailCompat;
import com.android.dialer.duo.Duo;
import com.android.dialer.inject.ApplicationContext;
import com.android.dialer.phonenumberproto.DialerPhoneNumberUtil;
@@ -267,7 +266,6 @@
int countryIsoColumn = cursor.getColumnIndexOrThrow(Calls.COUNTRY_ISO);
int durationsColumn = cursor.getColumnIndexOrThrow(Calls.DURATION);
int dataUsageColumn = cursor.getColumnIndexOrThrow(Calls.DATA_USAGE);
- int transcriptionColumn = cursor.getColumnIndexOrThrow(Calls.TRANSCRIPTION);
int voicemailUriColumn = cursor.getColumnIndexOrThrow(Calls.VOICEMAIL_URI);
int isReadColumn = cursor.getColumnIndexOrThrow(Calls.IS_READ);
int newColumn = cursor.getColumnIndexOrThrow(Calls.NEW);
@@ -300,7 +298,6 @@
String countryIso = cursor.getString(countryIsoColumn);
int duration = cursor.getInt(durationsColumn);
int dataUsage = cursor.getInt(dataUsageColumn);
- String transcription = cursor.getString(transcriptionColumn);
String voicemailUri = cursor.getString(voicemailUriColumn);
int isRead = cursor.getInt(isReadColumn);
int isNew = cursor.getInt(newColumn);
@@ -345,13 +342,10 @@
contentValues.put(AnnotatedCallLog.FEATURES, features);
contentValues.put(AnnotatedCallLog.DURATION, duration);
contentValues.put(AnnotatedCallLog.DATA_USAGE, dataUsage);
- contentValues.put(AnnotatedCallLog.TRANSCRIPTION, transcription);
contentValues.put(AnnotatedCallLog.VOICEMAIL_URI, voicemailUri);
contentValues.put(AnnotatedCallLog.CALL_MAPPING_ID, String.valueOf(date));
- setTranscriptionState(cursor, contentValues);
-
if (existingAnnotatedCallLogIds.contains(id)) {
mutations.update(id, contentValues);
} else {
@@ -379,14 +373,7 @@
&& ((features & Calls.FEATURES_VIDEO) != Calls.FEATURES_VIDEO);
}
- private void setTranscriptionState(Cursor cursor, ContentValues contentValues) {
- int transcriptionStateColumn =
- cursor.getColumnIndexOrThrow(VoicemailCompat.TRANSCRIPTION_STATE);
- int transcriptionState = cursor.getInt(transcriptionStateColumn);
- contentValues.put(VoicemailCompat.TRANSCRIPTION_STATE, transcriptionState);
- }
-
- private static final String[] PROJECTION_PRE_O =
+ private static final String[] PROJECTION =
new String[] {
Calls._ID,
Calls.DATE,
@@ -397,7 +384,6 @@
Calls.COUNTRY_ISO,
Calls.DURATION,
Calls.DATA_USAGE,
- Calls.TRANSCRIPTION,
Calls.VOICEMAIL_URI,
Calls.IS_READ,
Calls.NEW,
@@ -408,16 +394,8 @@
Calls.POST_DIAL_DIGITS
};
- private static final String[] PROJECTION_O_AND_LATER;
-
- static {
- List<String> projectionList = new ArrayList<>(Arrays.asList(PROJECTION_PRE_O));
- projectionList.add(VoicemailCompat.TRANSCRIPTION_STATE);
- PROJECTION_O_AND_LATER = projectionList.toArray(new String[projectionList.size()]);
- }
-
private String[] getProjection() {
- return PROJECTION_O_AND_LATER;
+ return PROJECTION;
}
private static void handleDeletes(
diff --git a/java/com/android/dialer/calllogutils/CallLogEntryDescriptions.java b/java/com/android/dialer/calllogutils/CallLogEntryDescriptions.java
deleted file mode 100644
index 52f0cfd..0000000
--- a/java/com/android/dialer/calllogutils/CallLogEntryDescriptions.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source 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.Calls;
-import android.support.annotation.PluralsRes;
-import android.telecom.PhoneAccountHandle;
-import android.telephony.PhoneNumberUtils;
-import android.text.TextUtils;
-import com.android.dialer.calllog.model.CoalescedRow;
-import com.android.dialer.telecom.TelecomUtil;
-import com.android.dialer.time.Clock;
-import com.google.common.collect.Collections2;
-import java.util.List;
-
-/** Builds descriptions of call log entries for accessibility users. */
-public final class CallLogEntryDescriptions {
-
- private CallLogEntryDescriptions() {}
-
- /**
- * Builds the content description for a call log entry.
- *
- * <p>The description is of format<br>
- * {primary description}, {secondary description}, {phone account description}.
- *
- * <ul>
- * <li>The primary description depends on the number of calls in the entry. For example:<br>
- * "1 answered call from Jane Smith", or<br>
- * "2 calls, the latest is an answered call from Jane Smith".
- * <li>The secondary description is the same as the secondary text for the call log entry,
- * except that date/time is not abbreviated. For example:<br>
- * "mobile, 11 minutes ago".
- * <li>The phone account description is of format "on {phone_account_label}, via {number}". For
- * example:<br>
- * "on SIM 1, via 6502531234".<br>
- * Note that the phone account description will be empty if the device has only one SIM.
- * </ul>
- *
- * <p>An example of the full description can be:<br>
- * "2 calls, the latest is an answered call from Jane Smith, mobile, 11 minutes ago, on SIM 1, via
- * 6502531234".
- */
- public static CharSequence buildDescriptionForEntry(
- Context context, Clock clock, CoalescedRow row) {
-
- // Build the primary description.
- // Examples:
- // (1) For an entry containing only 1 call:
- // "1 missed call from James Smith".
- // (2) For entries containing multiple calls:
- // "2 calls, the latest is a missed call from Jame Smith".
- CharSequence primaryDescription =
- TextUtils.expandTemplate(
- context
- .getResources()
- .getQuantityString(
- getPrimaryDescriptionResIdForCallType(row),
- row.getCoalescedIds().getCoalescedIdCount()),
- String.valueOf(row.getCoalescedIds().getCoalescedIdCount()),
- CallLogEntryText.buildPrimaryText(context, row));
-
- // Build the secondary description.
- // An example: "mobile, 11 minutes ago".
- CharSequence secondaryDescription =
- joinSecondaryTextComponents(
- CallLogEntryText.buildSecondaryTextListForEntries(
- context, clock, row, /* abbreviateDateTime = */ false));
-
- // Build the phone account description.
- // Note that this description can be an empty string.
- CharSequence phoneAccountDescription = buildPhoneAccountDescription(context, row);
-
- return TextUtils.isEmpty(phoneAccountDescription)
- ? TextUtils.expandTemplate(
- context
- .getResources()
- .getText(
- R.string.a11y_new_call_log_entry_full_description_without_phone_account_info),
- primaryDescription,
- secondaryDescription)
- : TextUtils.expandTemplate(
- context
- .getResources()
- .getText(R.string.a11y_new_call_log_entry_full_description_with_phone_account_info),
- primaryDescription,
- secondaryDescription,
- phoneAccountDescription);
- }
-
- private static @PluralsRes int getPrimaryDescriptionResIdForCallType(CoalescedRow row) {
- switch (row.getCallType()) {
- case Calls.INCOMING_TYPE:
- case Calls.ANSWERED_EXTERNALLY_TYPE:
- return R.plurals.a11y_new_call_log_entry_answered_call;
- case Calls.OUTGOING_TYPE:
- return R.plurals.a11y_new_call_log_entry_outgoing_call;
- case Calls.MISSED_TYPE:
- return R.plurals.a11y_new_call_log_entry_missed_call;
- case Calls.VOICEMAIL_TYPE:
- throw new IllegalStateException("Voicemails not expected in call log");
- case Calls.BLOCKED_TYPE:
- return R.plurals.a11y_new_call_log_entry_blocked_call;
- default:
- // It is possible for users to end up with calls with unknown call types in their
- // call history, possibly due to 3rd party call log implementations (e.g. to
- // distinguish between rejected and missed calls). Instead of crashing, just
- // assume that all unknown call types are missed calls.
- return R.plurals.a11y_new_call_log_entry_missed_call;
- }
- }
-
- private static CharSequence buildPhoneAccountDescription(Context context, CoalescedRow row) {
- PhoneAccountHandle phoneAccountHandle =
- TelecomUtil.composePhoneAccountHandle(
- row.getPhoneAccountComponentName(), row.getPhoneAccountId());
- if (phoneAccountHandle == null) {
- return "";
- }
-
- String phoneAccountLabel = PhoneAccountUtils.getAccountLabel(context, phoneAccountHandle);
- if (TextUtils.isEmpty(phoneAccountLabel)) {
- return "";
- }
-
- if (TextUtils.isEmpty(row.getNumber().getNormalizedNumber())) {
- return "";
- }
-
- return TextUtils.expandTemplate(
- context.getResources().getText(R.string.a11y_new_call_log_entry_phone_account),
- phoneAccountLabel,
- PhoneNumberUtils.createTtsSpannable(row.getNumber().getNormalizedNumber()));
- }
-
- private static CharSequence joinSecondaryTextComponents(List<CharSequence> components) {
- return TextUtils.join(
- ", ", Collections2.filter(components, (text) -> !TextUtils.isEmpty(text)));
- }
-}
diff --git a/java/com/android/dialer/calllogutils/CallLogEntryText.java b/java/com/android/dialer/calllogutils/CallLogEntryText.java
index 1ec172f..a8aedaa 100644
--- a/java/com/android/dialer/calllogutils/CallLogEntryText.java
+++ b/java/com/android/dialer/calllogutils/CallLogEntryText.java
@@ -23,7 +23,6 @@
import com.android.dialer.calllog.model.CoalescedRow;
import com.android.dialer.duo.DuoComponent;
import com.android.dialer.spam.Spam;
-import com.android.dialer.time.Clock;
import com.google.common.base.Optional;
import com.google.common.collect.Collections2;
import java.util.ArrayList;
@@ -78,94 +77,7 @@
}
/**
- * The secondary text to be shown in the main call log entry list.
- *
- * <p>This method first obtains a list of strings to be shown in order and then concatenates them
- * with " • ".
- *
- * <p>Examples:
- *
- * <ul>
- * <li>Mobile, Duo video • 10 min ago
- * <li>Spam • Mobile • Now
- * <li>Blocked • Spam • Mobile • Now
- * </ul>
- *
- * @see #buildSecondaryTextListForEntries(Context, Clock, CoalescedRow, boolean) for details.
- */
- public static CharSequence buildSecondaryTextForEntries(
- Context context, Clock clock, CoalescedRow row) {
- return joinSecondaryTextComponents(
- buildSecondaryTextListForEntries(context, clock, row, /* abbreviateDateTime = */ true));
- }
-
- /**
- * Returns a list of strings to be shown in order as the main call log entry's secondary text.
- *
- * <p>Rules:
- *
- * <ul>
- * <li>An emergency number: [{Date}]
- * <li>Number - not blocked, call - not spam:
- * <p>[{$Label(, Duo video|Carrier video)?|$Location}, {Date}]
- * <li>Number - blocked, call - not spam:
- * <p>["Blocked", {$Label(, Duo video|Carrier video)?|$Location}, {Date}]
- * <li>Number - not blocked, call - spam:
- * <p>["Spam", {$Label(, Duo video|Carrier video)?}, {Date}]
- * <li>Number - blocked, call - spam:
- * <p>["Blocked, Spam", {$Label(, Duo video|Carrier video)?}, {Date}]
- * </ul>
- *
- * <p>Examples:
- *
- * <ul>
- * <li>["Mobile, Duo video", "Now"]
- * <li>["Duo video", "10 min ago"]
- * <li>["Mobile", "11:45 PM"]
- * <li>["Mobile", "Sun"]
- * <li>["Blocked", "Mobile, Duo video", "Now"]
- * <li>["Blocked", "Brooklyn, NJ", "10 min ago"]
- * <li>["Spam", "Mobile", "Now"]
- * <li>["Spam", "Now"]
- * <li>["Blocked", "Spam", "Mobile", "Now"]
- * <li>["Brooklyn, NJ", "Jan 15"]
- * </ul>
- *
- * <p>See {@link CallLogDates#newCallLogTimestampLabel(Context, long, long, boolean)} for date
- * rules.
- */
- static List<CharSequence> buildSecondaryTextListForEntries(
- Context context, Clock clock, CoalescedRow row, boolean abbreviateDateTime) {
- // For emergency numbers, the secondary text should contain only the timestamp.
- if (row.getNumberAttributes().getIsEmergencyNumber()) {
- return Collections.singletonList(
- CallLogDates.newCallLogTimestampLabel(
- context, clock.currentTimeMillis(), row.getTimestamp(), abbreviateDateTime));
- }
-
- List<CharSequence> components = new ArrayList<>();
-
- if (row.getNumberAttributes().getIsBlocked()) {
- components.add(context.getText(R.string.new_call_log_secondary_blocked));
- }
- if (Spam.shouldShowAsSpam(row.getNumberAttributes().getIsSpam(), row.getCallType())) {
- components.add(context.getText(R.string.new_call_log_secondary_spam));
- }
-
- components.add(getNumberTypeLabel(context, row));
-
- components.add(
- CallLogDates.newCallLogTimestampLabel(
- context, clock.currentTimeMillis(), row.getTimestamp(), abbreviateDateTime));
- return components;
- }
-
- /**
* The secondary text to show in the top item of the bottom sheet.
- *
- * <p>This is basically the same as {@link #buildSecondaryTextForEntries(Context, Clock,
- * CoalescedRow)} except that instead of suffixing with the time of the call, we suffix with the
- * formatted number.
*/
public static CharSequence buildSecondaryTextForBottomSheet(Context context, CoalescedRow row) {
/*
diff --git a/java/com/android/dialer/callstats/CallStatsAdapter.java b/java/com/android/dialer/callstats/CallStatsAdapter.java
index 1d673fc..8319484 100644
--- a/java/com/android/dialer/callstats/CallStatsAdapter.java
+++ b/java/com/android/dialer/callstats/CallStatsAdapter.java
@@ -28,7 +28,6 @@
import android.view.ViewGroup;
import com.android.dialer.R;
-import com.android.dialer.app.DialtactsActivity;
import com.android.dialer.app.contactinfo.ContactInfoCache;
import com.android.dialer.app.contactinfo.NumberWithCountryIso;
import com.android.dialer.clipboard.ClipboardUtils;
diff --git a/java/com/android/dialer/commandline/CommandLineModule.java b/java/com/android/dialer/commandline/CommandLineModule.java
index c3b58d1..9c7d87a 100644
--- a/java/com/android/dialer/commandline/CommandLineModule.java
+++ b/java/com/android/dialer/commandline/CommandLineModule.java
@@ -18,7 +18,6 @@
import com.android.dialer.commandline.impl.ActiveCallsCommand;
import com.android.dialer.commandline.impl.BlockingCommand;
-import com.android.dialer.commandline.impl.CallCommand;
import com.android.dialer.commandline.impl.Echo;
import com.android.dialer.commandline.impl.Help;
import com.android.dialer.commandline.impl.Version;
@@ -48,7 +47,6 @@
private final Version version;
private final Echo echo;
private final BlockingCommand blockingCommand;
- private final CallCommand callCommand;
private final ActiveCallsCommand activeCallsCommand;
@Inject
@@ -57,13 +55,11 @@
Version version,
Echo echo,
BlockingCommand blockingCommand,
- CallCommand callCommand,
ActiveCallsCommand activeCallsCommand) {
this.help = help;
this.version = version;
this.echo = echo;
this.blockingCommand = blockingCommand;
- this.callCommand = callCommand;
this.activeCallsCommand = activeCallsCommand;
}
@@ -72,7 +68,6 @@
builder.addCommand("version", version);
builder.addCommand("echo", echo);
builder.addCommand("blocking", blockingCommand);
- builder.addCommand("call", callCommand);
builder.addCommand("activecalls", activeCallsCommand);
return builder;
}
diff --git a/java/com/android/dialer/commandline/CommandLineReceiver.java b/java/com/android/dialer/commandline/CommandLineReceiver.java
index effca2e..4624731 100644
--- a/java/com/android/dialer/commandline/CommandLineReceiver.java
+++ b/java/com/android/dialer/commandline/CommandLineReceiver.java
@@ -20,8 +20,6 @@
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
-import com.android.dialer.buildtype.BuildType;
-import com.android.dialer.buildtype.BuildType.Type;
import com.android.dialer.commandline.Command.IllegalCommandLineArgumentException;
import com.android.dialer.common.LogUtil;
import com.google.common.util.concurrent.FutureCallback;
@@ -45,7 +43,7 @@
LogUtil.e("CommandLineReceiver", "missing tag");
return;
}
- if (!LogUtil.isDebugEnabled() && BuildType.get() != Type.BUGFOOD) {
+ if (!LogUtil.isDebugEnabled()) {
LogUtil.i(outputTag, "DISABLED");
return;
}
diff --git a/java/com/android/dialer/commandline/impl/CallCommand.java b/java/com/android/dialer/commandline/impl/CallCommand.java
deleted file mode 100644
index d0008a3..0000000
--- a/java/com/android/dialer/commandline/impl/CallCommand.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source 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.commandline.impl;
-
-import android.content.Context;
-import android.content.Intent;
-import android.support.annotation.NonNull;
-import android.telecom.TelecomManager;
-import com.android.dialer.buildtype.BuildType;
-import com.android.dialer.buildtype.BuildType.Type;
-import com.android.dialer.callintent.CallInitiationType;
-import com.android.dialer.callintent.CallIntentBuilder;
-import com.android.dialer.commandline.Arguments;
-import com.android.dialer.commandline.Command;
-import com.android.dialer.inject.ApplicationContext;
-import com.android.dialer.precall.PreCall;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-import javax.inject.Inject;
-
-/** Make calls. Requires bugfood build. */
-public class CallCommand implements Command {
-
- private final Context appContext;
-
- @Inject
- CallCommand(@ApplicationContext Context appContext) {
- this.appContext = appContext;
- }
-
- @NonNull
- @Override
- public String getShortDescription() {
- return "make a call";
- }
-
- @NonNull
- @Override
- public String getUsage() {
- return "call [flags --] number\n"
- + "\nuse 'voicemail' to call voicemail"
- + "\n\nflags:"
- + "\n--direct send intent to telecom instead of pre call";
- }
-
- @Override
- @SuppressWarnings("missingPermission")
- public ListenableFuture<String> run(Arguments args) throws IllegalCommandLineArgumentException {
- if (BuildType.get() != Type.BUGFOOD) {
- throw new SecurityException("Bugfood only command");
- }
- String number = args.expectPositional(0, "number");
- TelecomManager telecomManager = appContext.getSystemService(TelecomManager.class);
- CallIntentBuilder callIntentBuilder;
- if ("voicemail".equals(number)) {
- callIntentBuilder =
- CallIntentBuilder.forVoicemail(CallInitiationType.Type.DIALPAD);
- } else {
- callIntentBuilder = new CallIntentBuilder(number, CallInitiationType.Type.DIALPAD);
- }
- if (args.getBoolean("direct", false)) {
- Intent intent = callIntentBuilder.build();
- appContext
- .getSystemService(TelecomManager.class)
- .placeCall(intent.getData(), intent.getExtras());
- } else {
- Intent intent = PreCall.getIntent(appContext, callIntentBuilder);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- appContext.startActivity(intent);
- }
- return Futures.immediateFuture("Calling " + number);
- }
-}
diff --git a/java/com/android/dialer/common/Assert.java b/java/com/android/dialer/common/Assert.java
index 2d7f199..312b1e5 100644
--- a/java/com/android/dialer/common/Assert.java
+++ b/java/com/android/dialer/common/Assert.java
@@ -24,12 +24,6 @@
/** Assertions which will result in program termination unless disabled by flags. */
public class Assert {
- private static boolean areThreadAssertsEnabled = true;
-
- public static void setAreThreadAssertsEnabled(boolean areThreadAssertsEnabled) {
- Assert.areThreadAssertsEnabled = areThreadAssertsEnabled;
- }
-
/**
* Called when a truly exceptional case occurs.
*
@@ -182,9 +176,6 @@
* @throws IllegalStateException if called on a background thread
*/
public static void isMainThread(@Nullable String messageTemplate, Object... args) {
- if (!areThreadAssertsEnabled) {
- return;
- }
checkState(Looper.getMainLooper().equals(Looper.myLooper()), messageTemplate, args);
}
@@ -205,9 +196,6 @@
* @throws IllegalStateException if called on the main thread
*/
public static void isWorkerThread(@Nullable String messageTemplate, Object... args) {
- if (!areThreadAssertsEnabled) {
- return;
- }
checkState(!Looper.getMainLooper().equals(Looper.myLooper()), messageTemplate, args);
}
diff --git a/java/com/android/dialer/configprovider/AndroidManifest.xml b/java/com/android/dialer/configprovider/AndroidManifest.xml
deleted file mode 100644
index 7729971..0000000
--- a/java/com/android/dialer/configprovider/AndroidManifest.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
- ~ Copyright (C) 2017 The Android Open Source 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
- -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.dialer.configprovider">
-
- <application>
- <service android:name=".SharedPrefConfigProvider$Service"/>
- </application>
-
-</manifest>
\ No newline at end of file
diff --git a/java/com/android/dialer/configprovider/ConfigProvider.java b/java/com/android/dialer/configprovider/ConfigProvider.java
deleted file mode 100644
index 886a69e..0000000
--- a/java/com/android/dialer/configprovider/ConfigProvider.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source 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.configprovider;
-
-/** Gets config values from the container application. */
-public interface ConfigProvider {
-
- String getString(String key, String defaultValue);
-
- long getLong(String key, long defaultValue);
-
- boolean getBoolean(String key, boolean defaultValue);
-}
diff --git a/java/com/android/dialer/configprovider/ConfigProviderComponent.java b/java/com/android/dialer/configprovider/ConfigProviderComponent.java
deleted file mode 100644
index 5b5afd7..0000000
--- a/java/com/android/dialer/configprovider/ConfigProviderComponent.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source 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.configprovider;
-
-import android.content.Context;
-import android.support.annotation.NonNull;
-import com.android.dialer.inject.HasRootComponent;
-import com.android.dialer.inject.IncludeInDialerRoot;
-import dagger.Subcomponent;
-
-/** Dagger component to provide a {@link ConfigProvider}. */
-@Subcomponent
-public abstract class ConfigProviderComponent {
-
- @NonNull
- public abstract ConfigProvider getConfigProvider();
-
- public static ConfigProviderComponent get(Context context) {
- return ((ConfigProviderComponent.HasComponent)
- ((HasRootComponent) context.getApplicationContext()).component())
- .configProviderComponent();
- }
-
- /** Used to refer to the root application component. */
- @IncludeInDialerRoot
- public interface HasComponent {
- ConfigProviderComponent configProviderComponent();
- }
-}
diff --git a/java/com/android/dialer/configprovider/SharedPrefConfigProvider.java b/java/com/android/dialer/configprovider/SharedPrefConfigProvider.java
deleted file mode 100644
index c68312f..0000000
--- a/java/com/android/dialer/configprovider/SharedPrefConfigProvider.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source 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.configprovider;
-
-import android.app.IntentService;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
-import android.support.annotation.Nullable;
-import com.android.dialer.common.Assert;
-import com.android.dialer.common.LogUtil;
-import com.android.dialer.storage.StorageComponent;
-import com.android.dialer.storage.Unencrypted;
-import com.android.dialer.strictmode.StrictModeUtils;
-import javax.inject.Inject;
-
-/**
- * {@link ConfigProvider} which uses a shared preferences file.
- *
- * <p>Config flags can be written using adb (with root access), for example:
- *
- * <pre>
- * adb root
- * adb shell am startservice -n \
- * 'com.android.dialer/.configprovider.SharedPrefConfigProvider\$Service' \
- * --ez boolean_flag_name flag_value
- * </pre>
- *
- * <p>(For longs use --el and for strings use --es.)
- *
- * <p>Flags can be viewed with:
- *
- * <pre>
- * adb shell cat \
- * /data/user_de/0/com.android.dialer/shared_prefs/com.android.dialer_preferences.xml
- * </pre>
- */
-public class SharedPrefConfigProvider implements ConfigProvider {
- private static final String PREF_PREFIX = "config_provider_prefs_";
-
- private final SharedPreferences sharedPreferences;
-
- @Inject
- SharedPrefConfigProvider(@Unencrypted SharedPreferences sharedPreferences) {
- this.sharedPreferences = sharedPreferences;
- }
-
- /** Service to write values into {@link SharedPrefConfigProvider} using adb. */
- public static class Service extends IntentService {
-
- public Service() {
- super("SharedPrefConfigProvider.Service");
- }
-
- @Override
- protected void onHandleIntent(@Nullable Intent intent) {
- if (intent == null || intent.getExtras() == null || intent.getExtras().size() != 1) {
- LogUtil.w("SharedPrefConfigProvider.Service.onHandleIntent", "must set exactly one extra");
- return;
- }
- String key = intent.getExtras().keySet().iterator().next();
- Object value = intent.getExtras().get(key);
- put(key, value);
- }
-
- private void put(String key, Object value) {
- Editor editor = getSharedPrefs(getApplicationContext()).edit();
- String prefixedKey = PREF_PREFIX + key;
- if (value instanceof Boolean) {
- editor.putBoolean(prefixedKey, (Boolean) value);
- } else if (value instanceof Long) {
- editor.putLong(prefixedKey, (Long) value);
- } else if (value instanceof String) {
- editor.putString(prefixedKey, (String) value);
- } else {
- throw Assert.createAssertionFailException("unsupported extra type: " + value.getClass());
- }
- editor.apply();
- }
- }
-
- /** Set a boolean config value. */
- public void putBoolean(String key, boolean value) {
- sharedPreferences.edit().putBoolean(PREF_PREFIX + key, value).apply();
- }
-
- public void putLong(String key, long value) {
- sharedPreferences.edit().putLong(PREF_PREFIX + key, value).apply();
- }
-
- public void putString(String key, String value) {
- sharedPreferences.edit().putString(PREF_PREFIX + key, value).apply();
- }
-
- @Override
- public String getString(String key, String defaultValue) {
- // Reading shared prefs on the main thread is generally safe since a single instance is cached.
- return StrictModeUtils.bypass(
- () -> sharedPreferences.getString(PREF_PREFIX + key, defaultValue));
- }
-
- @Override
- public long getLong(String key, long defaultValue) {
- // Reading shared prefs on the main thread is generally safe since a single instance is cached.
- return StrictModeUtils.bypass(() -> sharedPreferences.getLong(PREF_PREFIX + key, defaultValue));
- }
-
- @Override
- public boolean getBoolean(String key, boolean defaultValue) {
- // Reading shared prefs on the main thread is generally safe since a single instance is cached.
- return StrictModeUtils.bypass(
- () -> sharedPreferences.getBoolean(PREF_PREFIX + key, defaultValue));
- }
-
- private static SharedPreferences getSharedPrefs(Context appContext) {
- return StorageComponent.get(appContext).unencryptedSharedPrefs();
- }
-}
diff --git a/java/com/android/dialer/configprovider/SharedPrefConfigProviderModule.java b/java/com/android/dialer/configprovider/SharedPrefConfigProviderModule.java
deleted file mode 100644
index 81bed19..0000000
--- a/java/com/android/dialer/configprovider/SharedPrefConfigProviderModule.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source 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.configprovider;
-
-import com.android.dialer.inject.DialerVariant;
-import com.android.dialer.inject.InstallIn;
-import com.android.dialer.storage.StorageModule;
-import dagger.Binds;
-import dagger.Module;
-import javax.inject.Singleton;
-
-/** Dagger module providing {@link ConfigProvider} based on shared preferences. */
-@InstallIn(variants = {DialerVariant.DIALER_TEST})
-@Module(includes = StorageModule.class)
-public abstract class SharedPrefConfigProviderModule {
-
- private SharedPrefConfigProviderModule() {}
-
- @Binds
- @Singleton
- abstract ConfigProvider to(SharedPrefConfigProvider impl);
-}
diff --git a/java/com/android/dialer/constants/ScheduledJobIds.java b/java/com/android/dialer/constants/ScheduledJobIds.java
index 1a852d0..69070e2 100644
--- a/java/com/android/dialer/constants/ScheduledJobIds.java
+++ b/java/com/android/dialer/constants/ScheduledJobIds.java
@@ -29,14 +29,6 @@
* <p>Do not change any existing IDs.
*/
public final class ScheduledJobIds {
- public static final int SPAM_JOB_WIFI = 50;
- public static final int SPAM_JOB_ANY_NETWORK = 51;
-
- /** Spam job type including all spam job IDs. */
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({SPAM_JOB_WIFI, SPAM_JOB_ANY_NETWORK})
- public @interface SpamJobType {}
-
// This job refreshes dynamic launcher shortcuts.
public static final int SHORTCUT_PERIODIC_JOB = 100;
@@ -47,10 +39,4 @@
public static final int VVM_TRANSCRIPTION_BACKFILL_JOB = 204;
public static final int VVM_NOTIFICATION_JOB = 205;
public static final int VVM_TRANSCRIPTION_RATING_JOB = 206;
-
- public static final int VOIP_REGISTRATION = 300;
-
- // Job Ids from 10_000 to 10_100 should be reserved for proto upload jobs.
- public static final int PROTO_UPLOAD_JOB_MIN_ID = 10_000;
- public static final int PROTO_UPLOAD_JOB_MAX_ID = 10_100;
}
diff --git a/java/com/android/dialer/contactphoto/ContactPhotoManager.java b/java/com/android/dialer/contactphoto/ContactPhotoManager.java
index 353c1ee..67f4371 100644
--- a/java/com/android/dialer/contactphoto/ContactPhotoManager.java
+++ b/java/com/android/dialer/contactphoto/ContactPhotoManager.java
@@ -40,7 +40,6 @@
public static final float SCALE_DEFAULT = 1.0f;
public static final float OFFSET_DEFAULT = 0.0f;
- public static final boolean IS_CIRCULAR_DEFAULT = false;
// TODO: Use LogUtil.isVerboseEnabled for DEBUG branches instead of a lint check.
// LINT.DoNotSubmitIf(true)
static final boolean DEBUG = false;
@@ -55,62 +54,10 @@
private static final String OFFSET_PARAM_KEY = "offset";
private static final String IS_CIRCULAR_PARAM_KEY = "is_circular";
private static final String DEFAULT_IMAGE_URI_SCHEME = "defaultimage";
- private static final Uri DEFAULT_IMAGE_URI = Uri.parse(DEFAULT_IMAGE_URI_SCHEME + "://");
public static final DefaultImageProvider DEFAULT_AVATAR = new LetterTileDefaultImageProvider();
private static ContactPhotoManager instance;
/**
- * Given a {@link DefaultImageRequest}, returns an Uri that can be used to request a letter tile
- * avatar when passed to the {@link ContactPhotoManager}. The internal implementation of this uri
- * is not guaranteed to remain the same across application versions, so the actual uri should
- * never be persisted in long-term storage and reused.
- *
- * @param request A {@link DefaultImageRequest} object with the fields configured to return a
- * @return A Uri that when later passed to the {@link ContactPhotoManager} via {@link
- * #loadPhoto(ImageView, Uri, int, boolean, boolean, DefaultImageRequest)}, can be used to
- * request a default contact image, drawn as a letter tile using the parameters as configured
- * in the provided {@link DefaultImageRequest}
- */
- public static Uri getDefaultAvatarUriForContact(DefaultImageRequest request) {
- final Builder builder = DEFAULT_IMAGE_URI.buildUpon();
- if (request != null) {
- if (!TextUtils.isEmpty(request.displayName)) {
- builder.appendQueryParameter(DISPLAY_NAME_PARAM_KEY, request.displayName);
- }
- if (!TextUtils.isEmpty(request.identifier)) {
- builder.appendQueryParameter(IDENTIFIER_PARAM_KEY, request.identifier);
- }
- if (request.contactType != LetterTileDrawable.TYPE_DEFAULT) {
- builder.appendQueryParameter(CONTACT_TYPE_PARAM_KEY, String.valueOf(request.contactType));
- }
- if (request.scale != SCALE_DEFAULT) {
- builder.appendQueryParameter(SCALE_PARAM_KEY, String.valueOf(request.scale));
- }
- if (request.offset != OFFSET_DEFAULT) {
- builder.appendQueryParameter(OFFSET_PARAM_KEY, String.valueOf(request.offset));
- }
- if (request.isCircular != IS_CIRCULAR_DEFAULT) {
- builder.appendQueryParameter(IS_CIRCULAR_PARAM_KEY, String.valueOf(request.isCircular));
- }
- }
- return builder.build();
- }
-
- /**
- * Adds a business contact type encoded fragment to the URL. Used to ensure photo URLS from Nearby
- * Places can be identified as business photo URLs rather than URLs for personal contact photos.
- *
- * @param photoUrl The photo URL to modify.
- * @return URL with the contact type parameter added and set to TYPE_BUSINESS.
- */
- public static String appendBusinessContactType(String photoUrl) {
- Uri uri = Uri.parse(photoUrl);
- Builder builder = uri.buildUpon();
- builder.encodedFragment(String.valueOf(LetterTileDrawable.TYPE_BUSINESS));
- return builder.build().toString();
- }
-
- /**
* Removes the contact type information stored in the photo URI encoded fragment.
*
* @param photoUri The photo URI to remove the contact type from.
diff --git a/java/com/android/dialer/database/DialerDatabaseHelper.java b/java/com/android/dialer/database/DialerDatabaseHelper.java
index 8c1c1cc..c9ba376 100644
--- a/java/com/android/dialer/database/DialerDatabaseHelper.java
+++ b/java/com/android/dialer/database/DialerDatabaseHelper.java
@@ -41,7 +41,6 @@
import com.android.dialer.common.concurrent.DialerExecutorComponent;
import com.android.dialer.common.concurrent.DialerFutureSerializer;
import com.android.dialer.common.database.Selection;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.contacts.resources.R;
import com.android.dialer.smartdial.util.SmartDialNameMatcher;
import com.android.dialer.smartdial.util.SmartDialPrefix;
@@ -654,13 +653,8 @@
final SharedPreferences databaseLastUpdateSharedPref =
context.getSharedPreferences(DATABASE_LAST_CREATED_SHARED_PREF, Context.MODE_PRIVATE);
- long defaultLastUpdateMillis =
- ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getLong(DEFAULT_LAST_UPDATED_CONFIG_KEY, 0);
-
long sharedPrefLastUpdateMillis =
- databaseLastUpdateSharedPref.getLong(LAST_UPDATED_MILLIS, defaultLastUpdateMillis);
+ databaseLastUpdateSharedPref.getLong(LAST_UPDATED_MILLIS, 0);
final String lastUpdateMillis = String.valueOf(forceUpdate ? 0 : sharedPrefLastUpdateMillis);
diff --git a/java/com/android/dialer/main/impl/AndroidManifest.xml b/java/com/android/dialer/main/impl/AndroidManifest.xml
index 55eea5d..743e6f8 100644
--- a/java/com/android/dialer/main/impl/AndroidManifest.xml
+++ b/java/com/android/dialer/main/impl/AndroidManifest.xml
@@ -111,14 +111,5 @@
</activity>
- <!-- This is the historical name of the "main" activity and is kept as an alias for backwards
- compatibility in case older apps refer to the activity in this way. -->
-
- <!-- {@deprecated Use .MainActivity instead.} -->
- <activity-alias
- android:name="com.android.dialer.app.DialtactsActivity"
- android:exported="true"
- android:targetActivity=".MainActivity"/>
-
</application>
</manifest>
diff --git a/java/com/android/dialer/main/impl/MainActivity.java b/java/com/android/dialer/main/impl/MainActivity.java
index c7f2ae6..c261967 100644
--- a/java/com/android/dialer/main/impl/MainActivity.java
+++ b/java/com/android/dialer/main/impl/MainActivity.java
@@ -47,42 +47,19 @@
*/
private ShowBlockReportSpamDialogReceiver showBlockReportSpamDialogReceiver;
- public static Intent getShowCallLogIntent(Context context) {
- return getShowTabIntent(context, TabIndex.CALL_LOG);
- }
-
- /** Returns intent that will open MainActivity to the specified tab. */
- public static Intent getShowTabIntent(Context context, @TabIndex int tabIndex) {
- return OldMainActivityPeer.getShowTabIntent(context, tabIndex);
- }
-
- /**
- * @param context Context of the application package implementing MainActivity class.
- * @return intent for MainActivity.class
- */
- public static Intent getIntent(Context context) {
- return new Intent(context, MainActivity.class)
- .setAction(Intent.ACTION_VIEW)
- .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- }
-
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.MainActivityTheme);
super.onCreate(savedInstanceState);
LogUtil.enterBlock("MainActivity.onCreate");
- // If peer was set by the super, don't reset it.
- activePeer = getNewPeer();
+
+ activePeer = new OldMainActivityPeer(this);
activePeer.onActivityCreate(savedInstanceState);
showBlockReportSpamDialogReceiver =
new ShowBlockReportSpamDialogReceiver(getSupportFragmentManager());
}
- protected MainActivityPeer getNewPeer() {
- return new OldMainActivityPeer(this);
- }
-
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
diff --git a/java/com/android/dialer/main/impl/MainSearchController.java b/java/com/android/dialer/main/impl/MainSearchController.java
index 515f11b..fb8b08c 100644
--- a/java/com/android/dialer/main/impl/MainSearchController.java
+++ b/java/com/android/dialer/main/impl/MainSearchController.java
@@ -561,14 +561,6 @@
}
}
- public void addOnSearchShowListener(OnSearchShowListener listener) {
- onSearchShowListenerList.add(listener);
- }
-
- public void removeOnSearchShowListener(OnSearchShowListener listener) {
- onSearchShowListenerList.remove(listener);
- }
-
private void notifyListenersOnSearchOpen() {
for (OnSearchShowListener listener : onSearchShowListenerList) {
listener.onSearchOpen();
diff --git a/java/com/android/dialer/main/impl/OldMainActivityPeer.java b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
index ebc4845..6ccfbaa 100644
--- a/java/com/android/dialer/main/impl/OldMainActivityPeer.java
+++ b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
@@ -46,14 +46,11 @@
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.view.ActionMode;
-import android.view.DragEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
-import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
import com.android.dialer.R;
-import com.android.dialer.animation.AnimUtils;
import com.android.dialer.app.MainComponent;
import com.android.dialer.app.calllog.CallLogAdapter;
import com.android.dialer.app.calllog.CallLogFragment;
@@ -61,12 +58,6 @@
import com.android.dialer.app.calllog.CallLogNotificationsService;
import com.android.dialer.app.calllog.IntentProvider;
import com.android.dialer.app.calllog.VisualVoicemailCallLogFragment;
-import com.android.dialer.app.list.DragDropController;
-import com.android.dialer.app.list.OldSpeedDialFragment;
-import com.android.dialer.app.list.OnDragDropListener;
-import com.android.dialer.app.list.OnListFragmentScrolledListener;
-import com.android.dialer.app.list.PhoneFavoriteSquareTileView;
-import com.android.dialer.app.list.RemoveView;
import com.android.dialer.callcomposer.CallComposerActivity;
import com.android.dialer.calldetails.OldCallDetailsActivity;
import com.android.dialer.callintent.CallIntentBuilder;
@@ -87,7 +78,6 @@
import com.android.dialer.dialpadview.DialpadFragment.OnDialpadQueryChangedListener;
import com.android.dialer.duo.DuoComponent;
import com.android.dialer.i18n.LocaleUtils;
-import com.android.dialer.interactions.PhoneNumberInteraction;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.dialer.logging.ScreenEvent;
@@ -98,7 +88,6 @@
import com.android.dialer.main.impl.bottomnav.MissedCallCountObserver;
import com.android.dialer.main.impl.toolbar.MainToolbar;
import com.android.dialer.postcall.PostCall;
-import com.android.dialer.precall.PreCall;
import com.android.dialer.promotion.Promotion;
import com.android.dialer.promotion.Promotion.PromotionType;
import com.android.dialer.promotion.PromotionComponent;
@@ -109,7 +98,6 @@
import com.android.dialer.telecom.TelecomUtil;
import com.android.dialer.theme.base.Theme;
import com.android.dialer.theme.base.ThemeComponent;
-import com.android.dialer.util.DialerUtils;
import com.android.dialer.util.PermissionsUtil;
import com.android.dialer.util.TransactionSafeActivity;
import com.android.dialer.voicemailstatus.VisualVoicemailEnabledChecker;
@@ -156,11 +144,8 @@
// Call Log
private MainCallLogHost callLogHostInterface;
private MainCallLogFragmentListener callLogFragmentListener;
- private MainOnListFragmentScrolledListener onListFragmentScrolledListener;
// Speed Dial
- private MainOnPhoneNumberPickerActionListener onPhoneNumberPickerActionListener;
- private MainOldSpeedDialFragmentHost oldSpeedDialFragmentHost;
private MainSpeedDialFragmentHost speedDialFragmentHost;
/** Language the device was in last time {@link #onSaveInstanceState(Bundle)} was called. */
@@ -176,14 +161,6 @@
private UiListener<Integer> missedCallObserverUiListener;
private View bottomSheet;
- public static Intent getShowTabIntent(Context context, @TabIndex int tabIndex) {
- Intent intent = new Intent(context, MainActivity.class);
- intent.setAction(ACTION_SHOW_TAB);
- intent.putExtra(EXTRA_SHOW_TAB, tabIndex);
- // TODO(calderwoodra): Do we need to set some URI data here
- return intent;
- }
-
static boolean isShowTabIntent(Intent intent) {
return ACTION_SHOW_TAB.equals(intent.getAction()) && intent.hasExtra(EXTRA_SHOW_TAB);
}
@@ -291,17 +268,6 @@
new MainCallLogAdapterOnActionModeStateChangedListener();
callLogHostInterface = new MainCallLogHost(searchController, fab);
- onListFragmentScrolledListener = new MainOnListFragmentScrolledListener(snackbarContainer);
- onPhoneNumberPickerActionListener = new MainOnPhoneNumberPickerActionListener(activity);
- oldSpeedDialFragmentHost =
- new MainOldSpeedDialFragmentHost(
- activity,
- activity.findViewById(R.id.root_layout),
- bottomNav,
- activity.findViewById(R.id.contact_tile_drag_shadow_overlay),
- activity.findViewById(R.id.remove_view),
- activity.findViewById(R.id.search_view_container),
- toolbar);
speedDialFragmentHost =
new MainSpeedDialFragmentHost(
toolbar,
@@ -612,12 +578,6 @@
return (T) callLogHostInterface;
} else if (callbackInterface.isInstance(callLogFragmentListener)) {
return (T) callLogFragmentListener;
- } else if (callbackInterface.isInstance(onListFragmentScrolledListener)) {
- return (T) onListFragmentScrolledListener;
- } else if (callbackInterface.isInstance(onPhoneNumberPickerActionListener)) {
- return (T) onPhoneNumberPickerActionListener;
- } else if (callbackInterface.isInstance(oldSpeedDialFragmentHost)) {
- return (T) oldSpeedDialFragmentHost;
} else if (callbackInterface.isInstance(searchController)) {
return (T) searchController;
} else if (callbackInterface.isInstance(speedDialFragmentHost)) {
@@ -1016,157 +976,6 @@
}
}
- /** @see OnListFragmentScrolledListener */
- private static final class MainOnListFragmentScrolledListener
- implements OnListFragmentScrolledListener {
-
- private final View parentLayout;
-
- MainOnListFragmentScrolledListener(View parentLayout) {
- this.parentLayout = parentLayout;
- }
-
- @Override
- public void onListFragmentScrollStateChange(int scrollState) {
- DialerUtils.hideInputMethod(parentLayout);
- }
-
- @Override
- public void onListFragmentScroll(
- int firstVisibleItem, int visibleItemCount, int totalItemCount) {
- // TODO: No-op for now. This should eventually show/hide the actionBar based on
- // interactions with the ListsFragments.
- }
- }
-
- /** @see OnPhoneNumberPickerActionListener */
- private static final class MainOnPhoneNumberPickerActionListener
- implements OnPhoneNumberPickerActionListener {
-
- private final TransactionSafeActivity activity;
-
- MainOnPhoneNumberPickerActionListener(TransactionSafeActivity activity) {
- this.activity = activity;
- }
-
- @Override
- public void onPickDataUri(
- Uri dataUri, boolean isVideoCall, CallSpecificAppData callSpecificAppData) {
- PhoneNumberInteraction.startInteractionForPhoneCall(
- activity, dataUri, isVideoCall, callSpecificAppData);
- }
-
- @Override
- public void onPickPhoneNumber(
- String phoneNumber, boolean isVideoCall, CallSpecificAppData callSpecificAppData) {
- if (phoneNumber == null) {
- // Invalid phone number, but let the call go through so that InCallUI can show
- // an error message.
- phoneNumber = "";
- }
- PreCall.start(
- activity,
- new CallIntentBuilder(phoneNumber, callSpecificAppData)
- .setIsVideoCall(isVideoCall)
- .setAllowAssistedDial(callSpecificAppData.getAllowAssistedDialing()));
- }
-
- @Override
- public void onHomeInActionBarSelected() {
- // TODO(calderwoodra): investigate if we need to exit search here
- // PhoneNumberPickerFragment#onOptionsItemSelected
- }
- }
-
- /**
- * Handles the callbacks for {@link OldSpeedDialFragment} and drag/drop logic for drag to remove.
- *
- * @see OldSpeedDialFragment.HostInterface
- * @see OnDragDropListener
- */
- private static final class MainOldSpeedDialFragmentHost
- implements OldSpeedDialFragment.HostInterface, OnDragDropListener {
-
- private final Context context;
- private final View rootLayout;
- private final BottomNavBar bottomNavBar;
- private final ImageView dragShadowOverlay;
- private final RemoveView removeView;
- private final View removeViewContent;
- private final View searchViewContainer;
- private final MainToolbar toolbar;
-
- MainOldSpeedDialFragmentHost(
- Context context,
- View rootLayout,
- BottomNavBar bottomNavBar,
- ImageView dragShadowOverlay,
- RemoveView removeView,
- View searchViewContainer,
- MainToolbar toolbar) {
- this.context = context;
- this.rootLayout = rootLayout;
- this.bottomNavBar = bottomNavBar;
- this.dragShadowOverlay = dragShadowOverlay;
- this.removeView = removeView;
- this.searchViewContainer = searchViewContainer;
- this.toolbar = toolbar;
- removeViewContent = removeView.findViewById(R.id.remove_view_content);
- }
-
- @Override
- public void setDragDropController(DragDropController dragDropController) {
- removeView.setDragDropController(dragDropController);
- rootLayout.setOnDragListener(
- (v, event) -> {
- if (event.getAction() == DragEvent.ACTION_DRAG_LOCATION) {
- dragDropController.handleDragHovered(v, (int) event.getX(), (int) event.getY());
- }
- return true;
- });
- }
-
- @Override
- public void showAllContactsTab() {
- bottomNavBar.selectTab(TabIndex.CONTACTS);
- Logger.get(context).logImpression(DialerImpression.Type.MAIN_OPEN_WITH_TAB_CONTACTS);
- }
-
- @Override
- public ImageView getDragShadowOverlay() {
- return dragShadowOverlay;
- }
-
- @Override
- public void setHasFrequents(boolean hasFrequents) {
- toolbar.showClearFrequents(hasFrequents);
- }
-
- @Override
- public void onDragStarted(int x, int y, PhoneFavoriteSquareTileView view) {
- showRemoveView(true);
- }
-
- @Override
- public void onDragHovered(int x, int y, PhoneFavoriteSquareTileView view) {}
-
- @Override
- public void onDragFinished(int x, int y) {
- showRemoveView(false);
- }
-
- @Override
- public void onDroppedOnRemove() {}
-
- private void showRemoveView(boolean show) {
- if (show) {
- AnimUtils.crossFadeViews(removeViewContent, searchViewContainer, 300);
- } else {
- AnimUtils.crossFadeViews(searchViewContainer, removeViewContent, 300);
- }
- }
- }
-
/**
* Handles the callbacks for {@link SpeedDialFragment}.
*
diff --git a/java/com/android/dialer/main/impl/bottomnav/BottomNavItem.java b/java/com/android/dialer/main/impl/bottomnav/BottomNavItem.java
index 4cba2a4..a2eca33 100644
--- a/java/com/android/dialer/main/impl/bottomnav/BottomNavItem.java
+++ b/java/com/android/dialer/main/impl/bottomnav/BottomNavItem.java
@@ -29,8 +29,6 @@
import android.widget.LinearLayout;
import android.widget.TextView;
import com.android.dialer.common.Assert;
-import com.android.dialer.configprovider.ConfigProviderComponent;
-import com.android.dialer.theme.base.ThemeComponent;
/** Navigation item in a bottom nav. */
final class BottomNavItem extends LinearLayout {
@@ -74,15 +72,7 @@
} else {
String countString = String.format(Integer.toString(count));
- boolean use99PlusCount =
- ConfigProviderComponent.get(getContext())
- .getConfigProvider()
- .getBoolean("use_99_plus", false);
- boolean use9Plus = !use99PlusCount;
-
- if (use99PlusCount && count > 99) {
- countString = getContext().getString(R.string.bottom_nav_count_99_plus);
- } else if (use9Plus && count > 9) {
+ if (count > 9) {
countString = getContext().getString(R.string.bottom_nav_count_9_plus);
}
notificationBadge.setVisibility(View.VISIBLE);
diff --git a/java/com/android/dialer/metrics/Metrics.java b/java/com/android/dialer/metrics/Metrics.java
index f4ca4d0..0a4a4da 100644
--- a/java/com/android/dialer/metrics/Metrics.java
+++ b/java/com/android/dialer/metrics/Metrics.java
@@ -23,7 +23,6 @@
public interface Metrics {
// Events related to refreshing the annotated call log.
- String NEW_CALL_LOG_COALESCE = "NewCallLog.Coalesce";
String ANNOTATED_CALL_LOG_NOT_DIRTY = "RefreshAnnotatedCallLogReceiver.NotDirty";
String ANNOTATED_CALL_LOG_CHANGES_NEEDED = "RefreshAnnotatedCallLogReceiver.ChangesNeeded";
String ANNOTATED_LOG_NO_CHANGES_NEEDED = "RefreshAnnotatedCallLogReceiver.NoChangesNeeded";
diff --git a/java/com/android/dialer/oem/CequintCallerIdManager.java b/java/com/android/dialer/oem/CequintCallerIdManager.java
index da217c8..f620347 100644
--- a/java/com/android/dialer/oem/CequintCallerIdManager.java
+++ b/java/com/android/dialer/oem/CequintCallerIdManager.java
@@ -28,7 +28,6 @@
import android.text.TextUtils;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.google.auto.value.AutoValue;
import java.util.concurrent.ConcurrentHashMap;
@@ -110,11 +109,6 @@
/** Check whether Cequint Caller ID provider package is available and enabled. */
@AnyThread
public static synchronized boolean isCequintCallerIdEnabled(@NonNull Context context) {
- if (!ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean(CONFIG_CALLER_ID_ENABLED, true)) {
- return false;
- }
if (!hasAlreadyCheckedCequintCallerIdPackage) {
hasAlreadyCheckedCequintCallerIdPackage = true;
diff --git a/java/com/android/dialer/oem/MotorolaUtils.java b/java/com/android/dialer/oem/MotorolaUtils.java
index 0268937..3aa3344 100644
--- a/java/com/android/dialer/oem/MotorolaUtils.java
+++ b/java/com/android/dialer/oem/MotorolaUtils.java
@@ -22,23 +22,12 @@
import android.telephony.TelephonyManager;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.PackageUtils;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/** Util class for Motorola OEM devices. */
public class MotorolaUtils {
- private static final String CONFIG_HD_CODEC_BLINKING_ICON_WHEN_CONNECTING_CALL_ENABLED =
- "hd_codec_blinking_icon_when_connecting_enabled";
- private static final String CONFIG_HD_CODEC_SHOW_ICON_IN_NOTIFICATION_ENABLED =
- "hd_codec_show_icon_in_notification_enabled";
- private static final String CONFIG_WIFI_CALL_SHOW_ICON_IN_CALL_LOG_ENABLED =
- "wifi_call_show_icon_in_call_log_enabled";
-
- @VisibleForTesting
- static final String CONFIG_DISABLE_PHONE_NUMBER_FORMATTING = "disable_phone_number_formatting";
-
// This is used to check if a Motorola device supports HD voice call feature, which comes from
// system feature setting.
private static final String HD_CALL_FEATRURE = "com.motorola.software.sprint.hd_call";
@@ -79,24 +68,15 @@
}
public static boolean shouldBlinkHdIconWhenConnectingCall(Context context) {
- return ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean(CONFIG_HD_CODEC_BLINKING_ICON_WHEN_CONNECTING_CALL_ENABLED, true)
- && isSupportingSprintHdCodec(context);
+ return isSupportingSprintHdCodec(context);
}
public static boolean shouldShowHdIconInNotification(Context context) {
- return ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean(CONFIG_HD_CODEC_SHOW_ICON_IN_NOTIFICATION_ENABLED, true)
- && isSupportingSprintHdCodec(context);
+ return isSupportingSprintHdCodec(context);
}
public static boolean shouldShowWifiIconInCallLog(Context context, int features) {
- return ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean(CONFIG_WIFI_CALL_SHOW_ICON_IN_CALL_LOG_ENABLED, true)
- && (features & Calls.FEATURES_WIFI) == Calls.FEATURES_WIFI
+ return (features & Calls.FEATURES_WIFI) == Calls.FEATURES_WIFI
&& isSupportingSprintWifiCall(context);
}
@@ -105,10 +85,7 @@
return disablePhoneNumberFormattingForTest;
}
- return ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean(CONFIG_DISABLE_PHONE_NUMBER_FORMATTING, true)
- && context.getResources().getBoolean(R.bool.motorola_disable_phone_number_formatting);
+ return context.getResources().getBoolean(R.bool.motorola_disable_phone_number_formatting);
}
/**
diff --git a/java/com/android/dialer/persistentlog/PersistentLogger.java b/java/com/android/dialer/persistentlog/PersistentLogger.java
index 608602e..847625e 100644
--- a/java/com/android/dialer/persistentlog/PersistentLogger.java
+++ b/java/com/android/dialer/persistentlog/PersistentLogger.java
@@ -26,7 +26,6 @@
import android.support.v4.os.UserManagerCompat;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.strictmode.StrictModeUtils;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
@@ -178,7 +177,7 @@
}
private static byte[] buildTextLog(String tag, String string) {
- Calendar c = StrictModeUtils.bypass(() -> Calendar.getInstance());
+ Calendar c = Calendar.getInstance();
return String.format("%tm-%td %tH:%tM:%tS.%tL - %s - %s", c, c, c, c, c, c, tag, string)
.getBytes(StandardCharsets.UTF_8);
}
diff --git a/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java b/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java
index 7f2d91a..5b2ce7e 100644
--- a/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java
@@ -34,7 +34,6 @@
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
import com.android.dialer.common.concurrent.Annotations.LightweightExecutor;
-import com.android.dialer.configprovider.ConfigProvider;
import com.android.dialer.inject.ApplicationContext;
import com.android.dialer.logging.Logger;
import com.android.dialer.phonelookup.PhoneLookup;
@@ -73,7 +72,6 @@
private final SharedPreferences sharedPreferences;
private final ListeningExecutorService backgroundExecutorService;
private final ListeningExecutorService lightweightExecutorService;
- private final ConfigProvider configProvider;
private final MissingPermissionsOperations missingPermissionsOperations;
@Nullable private Long currentLastTimestampProcessed;
@@ -84,13 +82,11 @@
@Unencrypted SharedPreferences sharedPreferences,
@BackgroundExecutor ListeningExecutorService backgroundExecutorService,
@LightweightExecutor ListeningExecutorService lightweightExecutorService,
- ConfigProvider configProvider,
MissingPermissionsOperations missingPermissionsOperations) {
this.appContext = appContext;
this.sharedPreferences = sharedPreferences;
this.backgroundExecutorService = backgroundExecutorService;
this.lightweightExecutorService = lightweightExecutorService;
- this.configProvider = configProvider;
this.missingPermissionsOperations = missingPermissionsOperations;
}
@@ -971,6 +967,6 @@
* if there are too many we fall back to querying CP2 at render time.
*/
private long getMaxSupportedInvalidNumbers() {
- return configProvider.getLong("cp2_phone_lookup_max_invalid_numbers", 5);
+ return 5;
}
}
diff --git a/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java b/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java
index 237ae5e..a777233 100644
--- a/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java
@@ -26,11 +26,7 @@
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
import com.android.dialer.common.concurrent.Annotations.LightweightExecutor;
-import com.android.dialer.common.concurrent.Annotations.NonUiSerial;
-import com.android.dialer.configprovider.ConfigProvider;
import com.android.dialer.inject.ApplicationContext;
-import com.android.dialer.logging.DialerImpression;
-import com.android.dialer.logging.Logger;
import com.android.dialer.phonelookup.PhoneLookup;
import com.android.dialer.phonelookup.PhoneLookupInfo;
import com.android.dialer.phonelookup.PhoneLookupInfo.Cp2Info;
@@ -43,9 +39,6 @@
import com.google.common.util.concurrent.ListeningExecutorService;
import java.util.ArrayList;
import java.util.List;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
import java.util.function.Predicate;
import javax.inject.Inject;
@@ -63,25 +56,19 @@
"cp2_extended_directory_phone_lookup_timout_millis";
private final Context appContext;
- private final ConfigProvider configProvider;
private final ListeningExecutorService backgroundExecutorService;
private final ListeningExecutorService lightweightExecutorService;
private final MissingPermissionsOperations missingPermissionsOperations;
- private final ScheduledExecutorService scheduledExecutorService;
@Inject
Cp2ExtendedDirectoryPhoneLookup(
@ApplicationContext Context appContext,
@BackgroundExecutor ListeningExecutorService backgroundExecutorService,
@LightweightExecutor ListeningExecutorService lightweightExecutorService,
- @NonUiSerial ScheduledExecutorService scheduledExecutorService,
- ConfigProvider configProvider,
MissingPermissionsOperations missingPermissionsOperations) {
this.appContext = appContext;
this.backgroundExecutorService = backgroundExecutorService;
this.lightweightExecutorService = lightweightExecutorService;
- this.scheduledExecutorService = scheduledExecutorService;
- this.configProvider = configProvider;
this.missingPermissionsOperations = missingPermissionsOperations;
}
@@ -91,32 +78,10 @@
return Futures.immediateFuture(Cp2Info.getDefaultInstance());
}
- ListenableFuture<Cp2Info> cp2InfoFuture =
- Futures.transformAsync(
+ return Futures.transformAsync(
queryCp2ForExtendedDirectoryIds(),
directoryIds -> queryCp2ForDirectoryContact(dialerPhoneNumber, directoryIds),
lightweightExecutorService);
-
- long timeoutMillis =
- configProvider.getLong(CP2_EXTENDED_DIRECTORY_PHONE_LOOKUP_TIMEOUT_MILLIS, Long.MAX_VALUE);
-
- // Do not pass Long.MAX_VALUE to Futures.withTimeout as it will cause the internal
- // ScheduledExecutorService for timing to keep waiting even after "cp2InfoFuture" is done.
- // Do not pass 0 or a negative value to Futures.withTimeout either as it will cause the timeout
- // event to be triggered immediately.
- return timeoutMillis == Long.MAX_VALUE
- ? cp2InfoFuture
- : Futures.catching(
- Futures.withTimeout(
- cp2InfoFuture, timeoutMillis, TimeUnit.MILLISECONDS, scheduledExecutorService),
- TimeoutException.class,
- unused -> {
- LogUtil.w("Cp2ExtendedDirectoryPhoneLookup.lookup", "Time out!");
- Logger.get(appContext)
- .logImpression(DialerImpression.Type.CP2_EXTENDED_DIRECTORY_PHONE_LOOKUP_TIMEOUT);
- return Cp2Info.getDefaultInstance();
- },
- lightweightExecutorService);
}
private ListenableFuture<List<Long>> queryCp2ForExtendedDirectoryIds() {
diff --git a/java/com/android/dialer/postcall/PostCall.java b/java/com/android/dialer/postcall/PostCall.java
index 69ee376..3fc9a7a 100644
--- a/java/com/android/dialer/postcall/PostCall.java
+++ b/java/com/android/dialer/postcall/PostCall.java
@@ -31,8 +31,6 @@
import android.view.View.OnClickListener;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProvider;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.enrichedcall.EnrichedCallCapabilities;
import com.android.dialer.enrichedcall.EnrichedCallComponent;
import com.android.dialer.enrichedcall.EnrichedCallManager;
@@ -100,11 +98,7 @@
activity.startActivity(PostCallActivity.newIntent(activity, number, isRcsPostCall));
};
- int durationMs =
- (int)
- ConfigProviderComponent.get(activity)
- .getConfigProvider()
- .getLong("post_call_prompt_duration_ms", 8_000);
+ int durationMs = 8_000;
activeSnackbar =
Snackbar.make(rootView, message, durationMs)
.setAction(actionText, onClickListener)
@@ -227,13 +221,11 @@
boolean isSensitiveNumber = SensitivePhoneNumbers.getInstance().isSensitiveNumber(context,
number, INVALID_SUBSCRIPTION_ID);
- ConfigProvider binding = ConfigProviderComponent.get(context).getConfigProvider();
return disconnectTimeMillis != -1
&& connectTimeMillis != -1
&& isSimReady(context)
- && binding.getLong("postcall_last_call_threshold", 30_000) > timeSinceDisconnect
- && (connectTimeMillis == 0
- || binding.getLong("postcall_call_duration_threshold", 35_000) > callDurationMillis)
+ && 30_000 > timeSinceDisconnect
+ && (connectTimeMillis == 0 || 35_000 > callDurationMillis)
&& getPhoneNumber(context) != null
&& callDisconnectedByUser
&& !isSensitiveNumber;
@@ -253,9 +245,7 @@
}
private static boolean isEnabled(Context context) {
- return ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean("enable_post_call_prod", true);
+ return true;
}
private static boolean isSimReady(Context context) {
diff --git a/java/com/android/dialer/precall/externalreceiver/LaunchPreCallActivity.java b/java/com/android/dialer/precall/externalreceiver/LaunchPreCallActivity.java
index 60245ee..9e3f231 100644
--- a/java/com/android/dialer/precall/externalreceiver/LaunchPreCallActivity.java
+++ b/java/com/android/dialer/precall/externalreceiver/LaunchPreCallActivity.java
@@ -27,8 +27,6 @@
import com.android.dialer.callintent.CallInitiationType.Type;
import com.android.dialer.callintent.CallIntentBuilder;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProvider;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.dialer.precall.PreCall;
@@ -43,8 +41,6 @@
*/
public class LaunchPreCallActivity extends Activity {
- public static final String ACTION_LAUNCH_PRE_CALL = "com.android.dialer.LAUNCH_PRE_CALL";
-
public static final String EXTRA_PHONE_ACCOUNT_HANDLE = "phone_account_handle";
public static final String EXTRA_IS_VIDEO_CALL = "is_video_call";
@@ -69,8 +65,6 @@
super.onCreate(savedInstanceState);
Logger.get(this).logImpression(DialerImpression.Type.PRECALL_INITIATED_EXTERNAL);
- ConfigProvider configProvider =
- ConfigProviderComponent.get(getApplicationContext()).getConfigProvider();
Intent intent = getIntent();
CallIntentBuilder builder = new CallIntentBuilder(intent.getData(), Type.EXTERNAL_INITIATION);
@@ -83,10 +77,7 @@
.setPhoneAccountHandle(phoneAccountHandle)
.setIsVideoCall(intent.getBooleanExtra(EXTRA_IS_VIDEO_CALL, false))
.setCallSubject(intent.getStringExtra(EXTRA_CALL_SUBJECT))
- .setAllowAssistedDial(
- intent.getBooleanExtra(
- EXTRA_ALLOW_ASSISTED_DIAL,
- configProvider.getBoolean("assisted_dialing_default_precall_state", false)));
+ .setAllowAssistedDial(intent.getBooleanExtra(EXTRA_ALLOW_ASSISTED_DIAL, false));
filterExtras(intent.getExtras(), builder);
PreCall.start(this, builder);
finish();
diff --git a/java/com/android/dialer/precall/impl/AssistedDialAction.java b/java/com/android/dialer/precall/impl/AssistedDialAction.java
index 0e38231..44b7255 100644
--- a/java/com/android/dialer/precall/impl/AssistedDialAction.java
+++ b/java/com/android/dialer/precall/impl/AssistedDialAction.java
@@ -19,8 +19,6 @@
import android.content.Context;
import android.os.Bundle;
import android.telecom.PhoneAccount;
-import android.telephony.SubscriptionInfo;
-import android.telephony.TelephonyManager;
import com.android.dialer.assisteddialing.AssistedDialingMediator;
import com.android.dialer.assisteddialing.ConcreteCreator;
import com.android.dialer.assisteddialing.TransformationInfo;
@@ -28,11 +26,8 @@
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.compat.telephony.TelephonyManagerCompat;
-import com.android.dialer.configprovider.ConfigProvider;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.precall.PreCallAction;
import com.android.dialer.precall.PreCallCoordinator;
-import com.android.dialer.telecom.TelecomUtil;
import com.android.dialer.util.CallUtil;
import java.util.Optional;
@@ -51,8 +46,7 @@
}
AssistedDialingMediator assistedDialingMediator =
- ConcreteCreator.createNewAssistedDialingMediator(
- getAssistedDialingTelephonyManager(context, builder), context);
+ ConcreteCreator.createNewAssistedDialingMediator();
// Checks the platform is N+ and meets other pre-flight checks.
if (!assistedDialingMediator.isPlatformEligible()) {
@@ -78,45 +72,6 @@
}
}
- /**
- * A convenience method to return the proper TelephonyManager in possible multi-sim environments.
- */
- private TelephonyManager getAssistedDialingTelephonyManager(
- Context context, CallIntentBuilder builder) {
-
- ConfigProvider configProvider = ConfigProviderComponent.get(context).getConfigProvider();
- TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class);
- // None of this will be required in the framework because the PhoneAccountHandle
- // is already mapped to the request in the TelecomConnection.
- if (builder.getPhoneAccountHandle() == null) {
- return telephonyManager;
- }
-
- if (!configProvider.getBoolean("assisted_dialing_dual_sim_enabled", false)) {
- return telephonyManager;
- }
-
- com.google.common.base.Optional<SubscriptionInfo> subscriptionInfo =
- TelecomUtil.getSubscriptionInfo(context, builder.getPhoneAccountHandle());
- if (!subscriptionInfo.isPresent()) {
- LogUtil.i(
- "AssistedDialAction.getAssistedDialingTelephonyManager", "subcriptionInfo was absent.");
- return telephonyManager;
- }
- TelephonyManager pinnedtelephonyManager =
- telephonyManager.createForSubscriptionId(subscriptionInfo.get().getSubscriptionId());
- if (pinnedtelephonyManager == null) {
- LogUtil.i(
- "AssistedDialAction.getAssistedDialingTelephonyManager",
- "createForSubscriptionId pinnedtelephonyManager was null.");
- return telephonyManager;
- }
- LogUtil.i(
- "AssistedDialAction.getAssistedDialingTelephonyManager",
- "createForPhoneAccountHandle using pinnedtelephonyManager from subscription id.");
- return pinnedtelephonyManager;
- }
-
@Override
public void runWithUi(PreCallCoordinator coordinator) {
runWithoutUi(coordinator.getActivity(), coordinator.getBuilder());
diff --git a/java/com/android/dialer/precall/impl/CallingAccountSelector.java b/java/com/android/dialer/precall/impl/CallingAccountSelector.java
index 042f585..9114742 100644
--- a/java/com/android/dialer/precall/impl/CallingAccountSelector.java
+++ b/java/com/android/dialer/precall/impl/CallingAccountSelector.java
@@ -32,7 +32,6 @@
import com.android.dialer.callintent.CallIntentBuilder;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.logging.DialerImpression.Type;
import com.android.dialer.logging.Logger;
import com.android.dialer.precall.PreCallAction;
@@ -64,12 +63,6 @@
@Override
public boolean requiresUi(Context context, CallIntentBuilder builder) {
- if (!ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean("precall_calling_account_selector_enabled", true)) {
- return false;
- }
-
if (builder.getPhoneAccountHandle() != null) {
return false;
}
diff --git a/java/com/android/dialer/precall/impl/UkRegionPrefixInInternationalFormatHandler.java b/java/com/android/dialer/precall/impl/UkRegionPrefixInInternationalFormatHandler.java
index 825375d..b3fb4d5 100644
--- a/java/com/android/dialer/precall/impl/UkRegionPrefixInInternationalFormatHandler.java
+++ b/java/com/android/dialer/precall/impl/UkRegionPrefixInInternationalFormatHandler.java
@@ -19,7 +19,6 @@
import android.content.Context;
import android.telephony.PhoneNumberUtils;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.precall.impl.MalformedNumberRectifier.MalformedNumberHandler;
import com.google.common.base.Optional;
@@ -37,11 +36,6 @@
@Override
public Optional<String> handle(Context context, String number) {
- if (!ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean("uk_region_prefix_in_international_format_fix_enabled", true)) {
- return Optional.absent();
- }
if (!PhoneNumberUtils.normalizeNumber(number).startsWith(MALFORMED_PREFIX)) {
return Optional.absent();
}
diff --git a/java/com/android/dialer/preferredsim/PreferredAccountUtil.java b/java/com/android/dialer/preferredsim/PreferredAccountUtil.java
index 9b7c56b..1fd8a9c 100644
--- a/java/com/android/dialer/preferredsim/PreferredAccountUtil.java
+++ b/java/com/android/dialer/preferredsim/PreferredAccountUtil.java
@@ -24,7 +24,6 @@
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableSet;
@@ -72,12 +71,9 @@
* com.android.contacts.common.model.AccountTypeManager#getAccountTypes(boolean)}. External
* accounts are not supported.
*/
- public static ImmutableSet<String> getValidAccountTypes(Context context) {
+ public static ImmutableSet<String> getValidAccountTypes() {
return ImmutableSet.copyOf(
- ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getString(
- "preferred_sim_valid_account_types",
+ (
"com.google;"
+ "com.osp.app.signin;"
+ "com.android.exchange;"
diff --git a/java/com/android/dialer/preferredsim/impl/PreferredAccountWorkerImpl.java b/java/com/android/dialer/preferredsim/impl/PreferredAccountWorkerImpl.java
index ffd98f4..3ef08e5 100644
--- a/java/com/android/dialer/preferredsim/impl/PreferredAccountWorkerImpl.java
+++ b/java/com/android/dialer/preferredsim/impl/PreferredAccountWorkerImpl.java
@@ -44,7 +44,6 @@
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.inject.ApplicationContext;
import com.android.dialer.logging.DialerImpression.Type;
import com.android.dialer.logging.Logger;
@@ -264,8 +263,7 @@
if (cursor == null) {
return Optional.absent();
}
- ImmutableSet<String> validAccountTypes =
- PreferredAccountUtil.getValidAccountTypes(appContext);
+ ImmutableSet<String> validAccountTypes = PreferredAccountUtil.getValidAccountTypes();
String result = null;
while (cursor.moveToNext()) {
Optional<String> accountType =
@@ -357,11 +355,6 @@
@WorkerThread
private static boolean isPreferredSimEnabled(Context context) {
Assert.isWorkerThread();
- if (!ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean("preferred_sim_enabled", true)) {
- return false;
- }
Intent quickContactIntent = getQuickContactIntent();
ResolveInfo resolveInfo =
diff --git a/java/com/android/dialer/promotion/impl/DuoPromotion.java b/java/com/android/dialer/promotion/impl/DuoPromotion.java
deleted file mode 100644
index 750e4a1..0000000
--- a/java/com/android/dialer/promotion/impl/DuoPromotion.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source 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.promotion.impl;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.support.annotation.VisibleForTesting;
-import com.android.dialer.configprovider.ConfigProvider;
-import com.android.dialer.duo.Duo;
-import com.android.dialer.inject.ApplicationContext;
-import com.android.dialer.promotion.Promotion;
-import com.android.dialer.spannable.ContentWithLearnMoreSpanner;
-import com.android.dialer.storage.Unencrypted;
-import java.util.concurrent.TimeUnit;
-import javax.inject.Inject;
-
-/** Duo promotion. */
-final class DuoPromotion implements Promotion {
- private static final String SHARED_PREF_KEY_DUO_DISCLOSURE_DISMISSED = "duo_disclosure_dismissed";
-
- private static final String SHARED_PREF_KEY_DUO_DISCLOSURE_FIRST_VIEW_TIME_MILLIS =
- "duo_disclosure_first_viewed_time_ms";
- @VisibleForTesting static final String FLAG_SHOW_DUO_DISCLOSURE = "show_duo_disclosure";
-
- @VisibleForTesting
- static final String FLAG_DUO_DISCLOSURE_AUTO_DISMISS_AFTER_VIEWED_TIME_MILLIS =
- "show_duo_disclosure_auto_dismiss_after_viewed_time_millis";
-
- private final Context appContext;
- private final ConfigProvider configProvider;
- private final Duo duo;
- private final SharedPreferences sharedPreferences;
-
- @Inject
- DuoPromotion(
- @ApplicationContext Context context,
- ConfigProvider configProvider,
- Duo duo,
- @Unencrypted SharedPreferences sharedPreferences) {
- this.appContext = context;
- this.configProvider = configProvider;
- this.duo = duo;
- this.sharedPreferences = sharedPreferences;
- }
-
- @Override
- public int getType() {
- return PromotionType.CARD;
- }
-
- @Override
- public boolean isEligibleToBeShown() {
- if (!configProvider.getBoolean(FLAG_SHOW_DUO_DISCLOSURE, false)) {
- return false;
- }
- // Don't show the Duo disclosure card if
- // (1) Duo integration is not enabled on the device, or
- // (2) Duo is not activated.
- if (!duo.isEnabled(appContext) || !duo.isActivated(appContext)) {
- return false;
- }
-
- // Don't show the Duo disclosure card if it has been dismissed.
- if (sharedPreferences.getBoolean(SHARED_PREF_KEY_DUO_DISCLOSURE_DISMISSED, false)) {
- return false;
- }
-
- // At this point, Duo is activated and the disclosure card hasn't been dismissed.
- // We should show the card if it has never been viewed by the user.
- if (!sharedPreferences.contains(SHARED_PREF_KEY_DUO_DISCLOSURE_FIRST_VIEW_TIME_MILLIS)) {
- return true;
- }
-
- // At this point, the card has been viewed but not dismissed.
- // We should not show the card if it has been viewed for more than 1 day.
- long duoDisclosureFirstViewTimeMillis =
- sharedPreferences.getLong(SHARED_PREF_KEY_DUO_DISCLOSURE_FIRST_VIEW_TIME_MILLIS, 0);
- return System.currentTimeMillis() - duoDisclosureFirstViewTimeMillis
- <= configProvider.getLong(
- FLAG_DUO_DISCLOSURE_AUTO_DISMISS_AFTER_VIEWED_TIME_MILLIS, TimeUnit.DAYS.toMillis(1));
- }
-
- @Override
- public void onViewed() {
- if (!sharedPreferences.contains(SHARED_PREF_KEY_DUO_DISCLOSURE_FIRST_VIEW_TIME_MILLIS)) {
- sharedPreferences
- .edit()
- .putLong(
- SHARED_PREF_KEY_DUO_DISCLOSURE_FIRST_VIEW_TIME_MILLIS, System.currentTimeMillis())
- .apply();
- }
- }
-
- @Override
- public void dismiss() {
- sharedPreferences.edit().putBoolean(SHARED_PREF_KEY_DUO_DISCLOSURE_DISMISSED, true).apply();
- }
-
- @Override
- public CharSequence getTitle() {
- return appContext.getString(R.string.duo_disclosure_title);
- }
-
- @Override
- public CharSequence getDetails() {
- return new ContentWithLearnMoreSpanner(appContext)
- .create(
- appContext.getString(R.string.duo_disclosure_details),
- configProvider.getString(
- "duo_disclosure_link_full_url",
- "http://support.google.com/pixelphone/?p=dialer_duo"));
- }
-
- @Override
- public int getIconRes() {
- return duo.getLogo();
- }
-}
diff --git a/java/com/android/dialer/promotion/impl/PromotionModule.java b/java/com/android/dialer/promotion/impl/PromotionModule.java
index f090878..5750b5b 100644
--- a/java/com/android/dialer/promotion/impl/PromotionModule.java
+++ b/java/com/android/dialer/promotion/impl/PromotionModule.java
@@ -30,7 +30,7 @@
@Provides
static ImmutableList<Promotion> providePriorityPromotionList(
- RttPromotion rttPromotion, DuoPromotion duoPromotion) {
- return ImmutableList.of(rttPromotion, duoPromotion);
+ RttPromotion rttPromotion) {
+ return ImmutableList.of(rttPromotion);
}
}
diff --git a/java/com/android/dialer/promotion/impl/RttPromotion.java b/java/com/android/dialer/promotion/impl/RttPromotion.java
index f0f7f54..1a2df1c 100644
--- a/java/com/android/dialer/promotion/impl/RttPromotion.java
+++ b/java/com/android/dialer/promotion/impl/RttPromotion.java
@@ -20,7 +20,6 @@
import android.content.SharedPreferences;
import android.support.annotation.DrawableRes;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProvider;
import com.android.dialer.inject.ApplicationContext;
import com.android.dialer.promotion.Promotion;
import com.android.dialer.spannable.ContentWithLearnMoreSpanner;
@@ -34,7 +33,6 @@
private static final String SHARED_PREFERENCE_KEY_DISMISSED = "rtt_promotion_dismissed";
private final Context appContext;
private final SharedPreferences sharedPreferences;
- private final ConfigProvider configProvider;
@Override
public int getType() {
@@ -44,11 +42,9 @@
@Inject
RttPromotion(
@ApplicationContext Context context,
- @Unencrypted SharedPreferences sharedPreferences,
- ConfigProvider configProvider) {
+ @Unencrypted SharedPreferences sharedPreferences) {
appContext = context;
this.sharedPreferences = sharedPreferences;
- this.configProvider = configProvider;
}
@Override
@@ -67,9 +63,7 @@
return new ContentWithLearnMoreSpanner(appContext)
.create(
appContext.getString(R.string.rtt_promotion_details),
- configProvider.getString(
- "rtt_promo_learn_more_link_full_url",
- "http://support.google.com/pixelphone/?p=dialer_rtt"));
+ "http://support.google.com/pixelphone/?p=dialer_rtt");
}
@Override
diff --git a/java/com/android/dialer/shortcuts/CallContactActivity.java b/java/com/android/dialer/shortcuts/CallContactActivity.java
index 87f6fce..a6bd836 100644
--- a/java/com/android/dialer/shortcuts/CallContactActivity.java
+++ b/java/com/android/dialer/shortcuts/CallContactActivity.java
@@ -45,14 +45,9 @@
super.onCreate(savedInstanceState);
if ("com.android.dialer.shortcuts.CALL_CONTACT".equals(getIntent().getAction())) {
- if (Shortcuts.areDynamicShortcutsEnabled(this)) {
LogUtil.i("CallContactActivity.onCreate", "shortcut clicked");
contactUri = getIntent().getData();
makeCall();
- } else {
- LogUtil.i("CallContactActivity.onCreate", "dynamic shortcuts disabled");
- finish();
- }
}
}
diff --git a/java/com/android/dialer/shortcuts/ShortcutRefresher.java b/java/com/android/dialer/shortcuts/ShortcutRefresher.java
index 810fd8b..dad4a12 100644
--- a/java/com/android/dialer/shortcuts/ShortcutRefresher.java
+++ b/java/com/android/dialer/shortcuts/ShortcutRefresher.java
@@ -38,10 +38,6 @@
Assert.isMainThread();
Assert.isNotNull(context);
- if (!Shortcuts.areDynamicShortcutsEnabled(context)) {
- return;
- }
-
DialerExecutorComponent.get(context)
.dialerExecutorFactory()
.createNonUiTaskBuilder(new RefreshWorker(context))
diff --git a/java/com/android/dialer/shortcuts/Shortcuts.java b/java/com/android/dialer/shortcuts/Shortcuts.java
deleted file mode 100644
index d08e344..0000000
--- a/java/com/android/dialer/shortcuts/Shortcuts.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source 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.shortcuts;
-
-import android.content.Context;
-import android.support.annotation.NonNull;
-import com.android.dialer.configprovider.ConfigProviderComponent;
-
-/** Checks if dynamic shortcuts should be enabled. */
-public class Shortcuts {
-
- /** Key for boolean config value which determines whether or not to enable dynamic shortcuts. */
- private static final String DYNAMIC_SHORTCUTS_ENABLED = "dynamic_shortcuts_enabled";
-
- static boolean areDynamicShortcutsEnabled(@NonNull Context context) {
- return ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean(DYNAMIC_SHORTCUTS_ENABLED, true);
- }
-
- private Shortcuts() {}
-}
diff --git a/java/com/android/dialer/shortcuts/ShortcutsJobScheduler.java b/java/com/android/dialer/shortcuts/ShortcutsJobScheduler.java
deleted file mode 100644
index 4cfc436..0000000
--- a/java/com/android/dialer/shortcuts/ShortcutsJobScheduler.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source 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.shortcuts;
-
-import android.content.Context;
-import android.support.annotation.MainThread;
-import android.support.annotation.NonNull;
-import com.android.dialer.common.Assert;
-import com.android.dialer.common.LogUtil;
-
-/**
- * Schedules dialer shortcut jobs.
- *
- * <p>A {@link ConfigProvider} value controls whether the jobs which creates shortcuts should be
- * scheduled or cancelled.
- */
-public class ShortcutsJobScheduler {
-
- @MainThread
- public static void scheduleAllJobs(@NonNull Context context) {
- LogUtil.enterBlock("ShortcutsJobScheduler.scheduleAllJobs");
- Assert.isMainThread();
-
- if (Shortcuts.areDynamicShortcutsEnabled(context)) {
- LogUtil.i("ShortcutsJobScheduler.scheduleAllJobs", "enabling shortcuts");
-
- PeriodicJobService.schedulePeriodicJob(context);
- } else {
- LogUtil.i("ShortcutsJobScheduler.scheduleAllJobs", "disabling shortcuts");
-
- PeriodicJobService.cancelJob(context);
- }
- }
-}
diff --git a/java/com/android/dialer/simulator/impl/SimulatorImpl.java b/java/com/android/dialer/simulator/impl/SimulatorImpl.java
index ee910ba..9519ba8 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorImpl.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorImpl.java
@@ -18,8 +18,6 @@
import android.support.v7.app.AppCompatActivity;
import android.view.ActionProvider;
-import com.android.dialer.buildtype.BuildType;
-import com.android.dialer.buildtype.BuildType.Type;
import com.android.dialer.common.LogUtil;
import com.android.dialer.simulator.Simulator;
import javax.inject.Inject;
@@ -34,7 +32,7 @@
@Override
public boolean shouldShow() {
- return BuildType.get() == Type.BUGFOOD || LogUtil.isDebugEnabled();
+ return LogUtil.isDebugEnabled();
}
@Override
diff --git a/java/com/android/dialer/simulator/impl/SimulatorSimCallManager.java b/java/com/android/dialer/simulator/impl/SimulatorSimCallManager.java
index 0296ace..721336d 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorSimCallManager.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorSimCallManager.java
@@ -30,7 +30,6 @@
import android.telephony.TelephonyManager;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.strictmode.StrictModeUtils;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Arrays;
@@ -67,23 +66,19 @@
public static void register(@NonNull Context context) {
LogUtil.enterBlock("SimulatorSimCallManager.register");
Assert.isNotNull(context);
- StrictModeUtils.bypass(
- () -> {
- TelecomManager telecomManager = context.getSystemService(TelecomManager.class);
- telecomManager.registerPhoneAccount(buildSimCallManagerAccount(context));
- telecomManager.registerPhoneAccount(buildVideoProviderAccount(context));
- });
+
+ TelecomManager telecomManager = context.getSystemService(TelecomManager.class);
+ telecomManager.registerPhoneAccount(buildSimCallManagerAccount(context));
+ telecomManager.registerPhoneAccount(buildVideoProviderAccount(context));
}
public static void unregister(@NonNull Context context) {
LogUtil.enterBlock("SimulatorSimCallManager.unregister");
Assert.isNotNull(context);
- StrictModeUtils.bypass(
- () -> {
- TelecomManager telecomManager = context.getSystemService(TelecomManager.class);
- telecomManager.unregisterPhoneAccount(getSimCallManagerHandle(context));
- telecomManager.unregisterPhoneAccount(getVideoProviderHandle(context));
- });
+
+ TelecomManager telecomManager = context.getSystemService(TelecomManager.class);
+ telecomManager.unregisterPhoneAccount(getSimCallManagerHandle(context));
+ telecomManager.unregisterPhoneAccount(getVideoProviderHandle(context));
}
@NonNull
diff --git a/java/com/android/dialer/smartdial/util/SmartDialPrefix.java b/java/com/android/dialer/smartdial/util/SmartDialPrefix.java
index 7fef881..82bc420 100644
--- a/java/com/android/dialer/smartdial/util/SmartDialPrefix.java
+++ b/java/com/android/dialer/smartdial/util/SmartDialPrefix.java
@@ -566,15 +566,6 @@
return result;
}
- /**
- * Returns whether the user is in a region that uses Nanp format based on the sim location.
- *
- * @return Whether user is in Nanp region.
- */
- public static boolean getUserInNanpRegion() {
- return userInNanpRegion;
- }
-
/** Explicitly setting the user Nanp to the given boolean */
@VisibleForTesting
public static void setUserInNanpRegion(boolean userInNanpRegion) {
diff --git a/java/com/android/dialer/spam/promo/AndroidManifest.xml b/java/com/android/dialer/spam/promo/AndroidManifest.xml
deleted file mode 100644
index 7d766b8..0000000
--- a/java/com/android/dialer/spam/promo/AndroidManifest.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<!--
- ~ Copyright (C) 2018 The Android Open Source 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
- -->
-
-<manifest
- package="com.android.dialer.spam.promo">
-</manifest>
diff --git a/java/com/android/dialer/spam/promo/SpamBlockingPromoDialogFragment.java b/java/com/android/dialer/spam/promo/SpamBlockingPromoDialogFragment.java
deleted file mode 100644
index dbefc52..0000000
--- a/java/com/android/dialer/spam/promo/SpamBlockingPromoDialogFragment.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source 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.spam.promo;
-
-import android.app.Dialog;
-import android.content.DialogInterface;
-import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v4.app.DialogFragment;
-import android.support.v7.app.AlertDialog;
-
-/** Dialog for spam blocking on-boarding promotion. */
-public class SpamBlockingPromoDialogFragment extends DialogFragment {
-
- public static final String SPAM_BLOCKING_PROMO_DIALOG_TAG = "SpamBlockingPromoDialog";
-
- /** Called when dialog positive button is pressed. */
- protected OnEnableListener positiveListener;
-
- /** Called when the dialog is dismissed. */
- @Nullable protected DialogInterface.OnDismissListener dismissListener;
-
- public static DialogFragment newInstance(
- OnEnableListener positiveListener,
- @Nullable DialogInterface.OnDismissListener dismissListener) {
- SpamBlockingPromoDialogFragment fragment = new SpamBlockingPromoDialogFragment();
- fragment.positiveListener = positiveListener;
- fragment.dismissListener = dismissListener;
- return fragment;
- }
-
- @Override
- public void onDismiss(DialogInterface dialog) {
- if (dismissListener != null) {
- dismissListener.onDismiss(dialog);
- }
- super.onDismiss(dialog);
- }
-
- @Override
- public void onPause() {
- // The dialog is dismissed onPause, i.e. rotation.
- dismiss();
- dismissListener = null;
- positiveListener = null;
- super.onPause();
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- super.onCreateDialog(savedInstanceState);
- // Return the newly created dialog
- return new AlertDialog.Builder(getActivity())
- .setCancelable(true)
- .setTitle(R.string.spam_blocking_promo_title)
- .setMessage(R.string.spam_blocking_promo_text)
- .setNegativeButton(
- R.string.spam_blocking_promo_action_dismiss, (dialog, which) -> dismiss())
- .setPositiveButton(
- R.string.spam_blocking_promo_action_filter_spam,
- (dialog, which) -> {
- dismiss();
- positiveListener.onClick();
- })
- .create();
- }
-
- /** Positive listener for spam blocking promotion dialog. */
- public interface OnEnableListener {
- /** Called when user clicks on positive button in the spam blocking promo dialog. */
- void onClick();
- }
-}
diff --git a/java/com/android/dialer/spam/promo/SpamBlockingPromoHelper.java b/java/com/android/dialer/spam/promo/SpamBlockingPromoHelper.java
deleted file mode 100644
index cf67a79..0000000
--- a/java/com/android/dialer/spam/promo/SpamBlockingPromoHelper.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source 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.spam.promo;
-
-import android.annotation.SuppressLint;
-import android.app.Notification;
-import android.app.Notification.Builder;
-import android.app.PendingIntent;
-import android.content.Context;
-import android.content.DialogInterface.OnDismissListener;
-import android.graphics.drawable.Icon;
-import android.support.design.widget.Snackbar;
-import android.support.v4.app.FragmentManager;
-import android.view.View;
-import android.widget.Toast;
-
-import com.android.dialer.R;
-import com.android.dialer.configprovider.ConfigProviderComponent;
-import com.android.dialer.logging.DialerImpression;
-import com.android.dialer.logging.Logger;
-import com.android.dialer.notification.DialerNotificationManager;
-import com.android.dialer.notification.NotificationChannelId;
-import com.android.dialer.spam.SpamSettings;
-import com.android.dialer.spam.promo.SpamBlockingPromoDialogFragment.OnEnableListener;
-import com.android.dialer.storage.StorageComponent;
-import com.android.dialer.theme.base.ThemeComponent;
-
-/** Helper class for showing spam blocking on-boarding promotions. */
-public class SpamBlockingPromoHelper {
-
- static final String SPAM_BLOCKING_PROMO_PERIOD_MILLIS = "spam_blocking_promo_period_millis";
- static final String SPAM_BLOCKING_PROMO_LAST_SHOW_MILLIS = "spam_blocking_promo_last_show_millis";
- public static final String ENABLE_SPAM_BLOCKING_PROMO = "enable_spam_blocking_promo";
- public static final String ENABLE_AFTER_CALL_SPAM_BLOCKING_PROMO =
- "enable_after_call_spam_blocking_promo";
-
- private final Context context;
- private final SpamSettings spamSettings;
-
- public SpamBlockingPromoHelper(Context context, SpamSettings spamSettings) {
- this.context = context;
- this.spamSettings = spamSettings;
- }
-
- /**
- * Returns true if we should show a spam blocking promo.
- *
- * <p>Should show spam blocking promo only when all of the following criteria meet 1. Spam
- * blocking promo is enabled by flag. 2. Spam blocking setting is available. 3. Spam blocking
- * setting is not yet enabled. 4. Time since last spam blocking promo exceeds the threshold.
- *
- * @return true if we should show a spam blocking promo.
- */
- public boolean shouldShowSpamBlockingPromo() {
- if (!ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean(ENABLE_SPAM_BLOCKING_PROMO, false)
- || !spamSettings.isSpamEnabled()
- || !spamSettings.isSpamBlockingEnabledByFlag()
- || spamSettings.isSpamBlockingEnabledByUser()) {
- return false;
- }
-
- long lastShowMillis =
- StorageComponent.get(context)
- .unencryptedSharedPrefs()
- .getLong(SPAM_BLOCKING_PROMO_LAST_SHOW_MILLIS, 0);
- long showPeriodMillis =
- ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getLong(SPAM_BLOCKING_PROMO_PERIOD_MILLIS, Long.MAX_VALUE);
- return lastShowMillis == 0 || System.currentTimeMillis() - lastShowMillis > showPeriodMillis;
- }
-
- /* Returns true if we should show a spam blocking promo in after call notification scenario. */
- public boolean shouldShowAfterCallSpamBlockingPromo() {
- return shouldShowSpamBlockingPromo()
- && ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean(ENABLE_AFTER_CALL_SPAM_BLOCKING_PROMO, false);
- }
-
- /**
- * Shows a spam blocking promo dialog.
- *
- * @param fragmentManager the fragment manager to show the dialog.
- * @param onEnableListener the listener called when enable button is clicked.
- * @param onDismissListener the listener called when the dialog is dismissed.
- */
- public void showSpamBlockingPromoDialog(
- FragmentManager fragmentManager,
- OnEnableListener onEnableListener,
- OnDismissListener onDismissListener) {
- updateLastShowSpamTimestamp();
- SpamBlockingPromoDialogFragment.newInstance(onEnableListener, onDismissListener)
- .show(fragmentManager, SpamBlockingPromoDialogFragment.SPAM_BLOCKING_PROMO_DIALOG_TAG);
- }
-
- private void updateLastShowSpamTimestamp() {
- StorageComponent.get(context)
- .unencryptedSharedPrefs()
- .edit()
- .putLong(SPAM_BLOCKING_PROMO_LAST_SHOW_MILLIS, System.currentTimeMillis())
- .apply();
- }
-
- /**
- * Shows a modify setting on complete snackbar and a link to redirect to setting page.
- *
- * @param view the view to attach on-complete notice snackbar.
- * @param success whether the modify setting operation succceeds.
- */
- public void showModifySettingOnCompleteSnackbar(View view, boolean success) {
- String snackBarText =
- success
- ? context.getString(R.string.spam_blocking_settings_enable_complete_text)
- : context.getString(R.string.spam_blocking_settings_enable_error_text);
- Snackbar.make(view, snackBarText, Snackbar.LENGTH_LONG)
- .setAction(
- R.string.spam_blocking_setting_prompt,
- v -> context.startActivity(spamSettings.getSpamBlockingSettingIntent(context)))
- .setActionTextColor(
- context.getResources().getColor(R.color.dialer_snackbar_action_text_color))
- .show();
- }
-
- /** Shows a modify setting on complete toast message. */
- public void showModifySettingOnCompleteToast(boolean success) {
- String toastText =
- success
- ? context.getString(R.string.spam_blocking_settings_enable_complete_text)
- : context.getString(R.string.spam_blocking_settings_enable_error_text);
- Toast.makeText(context, toastText, Toast.LENGTH_LONG).show();
- }
-
- /**
- * Shows a spam blocking promo notification.
- *
- * @param notificationTag a string identifier for this notification.
- * @param notificationId an identifier for this notification.
- * @param contentIntent pending intent to be sent when notification is clicked.
- * @param actionIntent pending intent to be sent when enable-spam-blocking button is clicked.
- */
- public void showSpamBlockingPromoNotification(
- String notificationTag,
- int notificationId,
- PendingIntent contentIntent,
- PendingIntent actionIntent) {
- updateLastShowSpamTimestamp();
- Logger.get(context)
- .logImpression(DialerImpression.Type.SPAM_BLOCKING_AFTER_CALL_NOTIFICATION_PROMO_SHOWN);
- DialerNotificationManager.notify(
- context,
- notificationTag,
- notificationId,
- getSpamBlockingPromoNotification(contentIntent, actionIntent));
- }
-
- /**
- * Builds a spam blocking promo notification with given intents.
- *
- * @param contentIntent pending intent to be sent when notification is clicked.
- * @param actionIntent pending intent to be sent when enable-spam-blocking button is clicked.
- */
- @SuppressLint("NewApi")
- private Notification getSpamBlockingPromoNotification(
- PendingIntent contentIntent, PendingIntent actionIntent) {
- Notification.Builder builder =
- new Builder(context)
- .setContentIntent(contentIntent)
- .setCategory(Notification.CATEGORY_STATUS)
- .setPriority(Notification.PRIORITY_DEFAULT)
- .setColor(ThemeComponent.get(context).theme().getColorPrimary())
- .setSmallIcon(R.drawable.quantum_ic_call_vd_theme_24)
- .setLargeIcon(Icon.createWithResource(context, R.drawable.spam_blocking_promo_icon))
- .setContentText(context.getString(R.string.spam_blocking_promo_text))
- .setStyle(
- new Notification.BigTextStyle()
- .bigText(context.getString(R.string.spam_blocking_promo_text)))
- .addAction(
- new Notification.Action.Builder(
- R.drawable.quantum_ic_block_vd_theme_24,
- context.getString(R.string.spam_blocking_promo_action_filter_spam),
- actionIntent)
- .build())
- .setContentTitle(context.getString(R.string.spam_blocking_promo_title))
- .setChannelId(NotificationChannelId.DEFAULT);
- return builder.build();
- }
-}
-
diff --git a/java/com/android/dialer/spam/promo/res/drawable/spam_blocking_promo_icon.xml b/java/com/android/dialer/spam/promo/res/drawable/spam_blocking_promo_icon.xml
deleted file mode 100644
index ecb0279..0000000
--- a/java/com/android/dialer/spam/promo/res/drawable/spam_blocking_promo_icon.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
- ~ Copyright (C) 2018 The Android Open Source 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
- -->
-
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
-
- <item>
- <shape android:shape="oval">
- <!-- Note: Ensure matches incallui and blocking colors. -->
- <solid android:color="#A52714"/>
- <size
- android:height="@android:dimen/notification_large_icon_height"
- android:width="@android:dimen/notification_large_icon_width"/>
- </shape>
- </item>
-
- <item
- android:drawable="@drawable/quantum_ic_report_vd_theme_24"
- android:gravity="center"/>
-
-</layer-list>
diff --git a/java/com/android/dialer/spam/promo/res/values-af/strings.xml b/java/com/android/dialer/spam/promo/res/values-af/strings.xml
deleted file mode 100644
index 37a210f..0000000
--- a/java/com/android/dialer/spam/promo/res/values-af/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Filtreer alle verdagte strooiposoproepe?</string>
- <string name="spam_blocking_promo_text">Oproepe soos die een wat jy pas geblokkeer het, sal jou nie meer
- steur nie</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtreer strooipos</string>
- <string name="spam_blocking_promo_action_dismiss">Weier</string>
- <string name="spam_blocking_setting_prompt">Instellings</string>
- <string name="spam_blocking_settings_enable_error_text">Sukkel om strooiposfiltrering aan te skakel</string>
- <string name="spam_blocking_settings_disable_error_text">Sukkel om strooiposfiltrering af te skakel</string>
- <string name="spam_blocking_settings_enable_complete_text">Strooiposfiltrering is aangeskakel</string>
- <string name="spam_blocking_settings_disable_complete_text">Strooiposfiltrering is afgeskakel</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-am/strings.xml b/java/com/android/dialer/spam/promo/res/values-am/strings.xml
deleted file mode 100644
index 46ff084..0000000
--- a/java/com/android/dialer/spam/promo/res/values-am/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">ሁሉንም የተጠረጠሩ አይፈለጌ ጥሪዎችን አጣራ?</string>
- <string name="spam_blocking_promo_text">አሁን እንዳገዱት ጥሪ አይነት ጥሪዎች ከእንግዲህ ወዲያ አይረብሹዎትም</string>
- <string name="spam_blocking_promo_action_filter_spam">አይፈለጌ መልዕክትን አጣራ</string>
- <string name="spam_blocking_promo_action_dismiss">አሰናብት</string>
- <string name="spam_blocking_setting_prompt">ቅንብሮች</string>
- <string name="spam_blocking_settings_enable_error_text">አይፈለጌ ማጣራትን በማብራት ላይ ችግር</string>
- <string name="spam_blocking_settings_disable_error_text">አይፈለጌ ማጣራትን በማብራት ላይ ችግር</string>
- <string name="spam_blocking_settings_enable_complete_text">የአይፈለጌ መልዕክት ማጣሪያ በርቷል</string>
- <string name="spam_blocking_settings_disable_complete_text">የአይፈለጌ መልዕክት ማጣሪያ ጠፍቷል</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-ar/strings.xml b/java/com/android/dialer/spam/promo/res/values-ar/strings.xml
deleted file mode 100644
index 7e3705f..0000000
--- a/java/com/android/dialer/spam/promo/res/values-ar/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">هل تريد تصفية كل المكالمات غير المرغوب فيها؟</string>
- <string name="spam_blocking_promo_text">لن تزعجك أي مكالمات مثل التي حظرتها لتوك
- بعد الآن</string>
- <string name="spam_blocking_promo_action_filter_spam">تصفية المحتوى غير المرغوب فيه</string>
- <string name="spam_blocking_promo_action_dismiss">رفض</string>
- <string name="spam_blocking_setting_prompt">الإعدادات</string>
- <string name="spam_blocking_settings_enable_error_text">حدثت مشكلة أثناء تفعيل تصفية المحتوى غير المرغوب فيه</string>
- <string name="spam_blocking_settings_disable_error_text">حدثت مشكلة أثناء إيقاف تصفية المحتوى غير المرغوب فيه</string>
- <string name="spam_blocking_settings_enable_complete_text">تم تفعيل تصفية المحتوى غير المرغوب فيه</string>
- <string name="spam_blocking_settings_disable_complete_text">تم إيقاف تصفية المحتوى غير المرغوب فيه</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-az/strings.xml b/java/com/android/dialer/spam/promo/res/values-az/strings.xml
deleted file mode 100644
index 8faa2fa..0000000
--- a/java/com/android/dialer/spam/promo/res/values-az/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Bütün şübhəli spam zəngləri filtrlənsin?</string>
- <string name="spam_blocking_promo_text">Yeni blok etdiyiniz kimi zənglər artıq Sizi narahat etməyəcək</string>
- <string name="spam_blocking_promo_action_filter_spam">Spamı Filtrləyin</string>
- <string name="spam_blocking_promo_action_dismiss">Kənarlaşdırın</string>
- <string name="spam_blocking_setting_prompt">Ayarlar</string>
- <string name="spam_blocking_settings_enable_error_text">Spam filterini aktiv edərkən xəta baş verdi</string>
- <string name="spam_blocking_settings_disable_error_text">Spam filterini deaktiv edərkən xəta baş verdi</string>
- <string name="spam_blocking_settings_enable_complete_text">Spam filteri aktivdir</string>
- <string name="spam_blocking_settings_disable_complete_text">Spam filtri deaktivdir</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/spam/promo/res/values-b+sr+Latn/strings.xml
deleted file mode 100644
index 8f62f39..0000000
--- a/java/com/android/dialer/spam/promo/res/values-b+sr+Latn/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Želite li da filtrirate sve pozive za koje se sumnja da su nepoželjni?</string>
- <string name="spam_blocking_promo_text">Pozivi kao što je ovaj koji ste upravo blokirali vas više
- neće ometati</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtriraj nepoželjne pozive</string>
- <string name="spam_blocking_promo_action_dismiss">Odbaci</string>
- <string name="spam_blocking_setting_prompt">Podešavanja</string>
- <string name="spam_blocking_settings_enable_error_text">Problem pri uključivanju filtriranja nepoželjnih poziva</string>
- <string name="spam_blocking_settings_disable_error_text">Problem pri isključivanju filtriranja nepoželjnih poziva</string>
- <string name="spam_blocking_settings_enable_complete_text">Filtriranje nepoželjnih poziva je uključeno</string>
- <string name="spam_blocking_settings_disable_complete_text">Filtriranje nepoželjnih poziva je isključeno</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-be/strings.xml b/java/com/android/dialer/spam/promo/res/values-be/strings.xml
deleted file mode 100644
index b6e0655..0000000
--- a/java/com/android/dialer/spam/promo/res/values-be/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Фільтраванне ўсіх выклікаў, якія падазраюцца ў спаме</string>
- <string name="spam_blocking_promo_text">Выклікі, падобныя на той, які вы заблакіравалі, больш не
- будуць турбаваць вас</string>
- <string name="spam_blocking_promo_action_filter_spam">Фільтраваць спам</string>
- <string name="spam_blocking_promo_action_dismiss">Адхіліць</string>
- <string name="spam_blocking_setting_prompt">Налады</string>
- <string name="spam_blocking_settings_enable_error_text">Памылка ўключэння фільтра спама</string>
- <string name="spam_blocking_settings_disable_error_text">Памылка выключэння фільтра спама</string>
- <string name="spam_blocking_settings_enable_complete_text">Фільтрацыя спама ўключана</string>
- <string name="spam_blocking_settings_disable_complete_text">Фільтрацыя спама выключана</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-bg/strings.xml b/java/com/android/dialer/spam/promo/res/values-bg/strings.xml
deleted file mode 100644
index 608c5b2..0000000
--- a/java/com/android/dialer/spam/promo/res/values-bg/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Да се филтрират ли всички обаждания, които са възможен спам?</string>
- <string name="spam_blocking_promo_text">Повече няма да ви безпокоят обаждания като току-що блокираното от вас</string>
- <string name="spam_blocking_promo_action_filter_spam">Филтриране на спама</string>
- <string name="spam_blocking_promo_action_dismiss">Отхвърляне</string>
- <string name="spam_blocking_setting_prompt">Настройки</string>
- <string name="spam_blocking_settings_enable_error_text">При включването на филтрирането на спама възникна проблем</string>
- <string name="spam_blocking_settings_disable_error_text">При изключването на филтрирането на спама възникна проблем</string>
- <string name="spam_blocking_settings_enable_complete_text">Филтрирането на спама е включено</string>
- <string name="spam_blocking_settings_disable_complete_text">Филтрирането на спама е изключено</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-bn/strings.xml b/java/com/android/dialer/spam/promo/res/values-bn/strings.xml
deleted file mode 100644
index 60fc070..0000000
--- a/java/com/android/dialer/spam/promo/res/values-bn/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">সন্দেহজনক স্প্যাম কল ফিল্টার করবেন?</string>
- <string name="spam_blocking_promo_text">আপনি এইমাত্র যে কলটি ব্লক করলেন, সেই ধরনের কল দিয়ে আপনাকে
- আর বিরক্ত করা হবে না</string>
- <string name="spam_blocking_promo_action_filter_spam">স্প্যাম ফিল্টার করুন</string>
- <string name="spam_blocking_promo_action_dismiss">খারিজ</string>
- <string name="spam_blocking_setting_prompt">সেটিংস</string>
- <string name="spam_blocking_settings_enable_error_text">স্প্যাম ফিল্টার করার বৈশিষ্ট্য চালু করতে সমস্যা হয়েছে</string>
- <string name="spam_blocking_settings_disable_error_text">স্প্যাম ফিল্টার করার বৈশিষ্ট্য বন্ধ করতে সমস্যা হয়েছে</string>
- <string name="spam_blocking_settings_enable_complete_text">স্প্যাম ফিল্টার করার বৈশিষ্ট্য চালু করা হয়েছে</string>
- <string name="spam_blocking_settings_disable_complete_text">স্প্যাম ফিল্টার করার বৈশিষ্ট্য বন্ধ করা হয়েছে</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-bs/strings.xml b/java/com/android/dialer/spam/promo/res/values-bs/strings.xml
deleted file mode 100644
index 495192a..0000000
--- a/java/com/android/dialer/spam/promo/res/values-bs/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Filtrirati sve potencijalne neželjene pozive?</string>
- <string name="spam_blocking_promo_text">Pozivi, kao što je onaj koji ste upravo blokirali, više vas neće
- uznemiravati</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtriranje neželjenih poziva</string>
- <string name="spam_blocking_promo_action_dismiss">Odbaci</string>
- <string name="spam_blocking_setting_prompt">Postavke</string>
- <string name="spam_blocking_settings_enable_error_text">Problem prilikom uključivanja filtriranja neželjenih poziva</string>
- <string name="spam_blocking_settings_disable_error_text">Problem prilikom isključivanja filtriranja neželjenih poziva</string>
- <string name="spam_blocking_settings_enable_complete_text">Filtriranje neželjenih poziva je uključeno</string>
- <string name="spam_blocking_settings_disable_complete_text">Filtriranje neželjenih poziva je isključeno</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-ca/strings.xml b/java/com/android/dialer/spam/promo/res/values-ca/strings.xml
deleted file mode 100644
index 2b26129..0000000
--- a/java/com/android/dialer/spam/promo/res/values-ca/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Vols filtrar totes les possibles trucades brossa?</string>
- <string name="spam_blocking_promo_text">Les trucades com la que acabes de bloquejar ja no
- t\'interrompran</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtra les trucades brossa</string>
- <string name="spam_blocking_promo_action_dismiss">Ignora</string>
- <string name="spam_blocking_setting_prompt">Configuració</string>
- <string name="spam_blocking_settings_enable_error_text">S\'ha produït un error en activar el filtre de correu brossa</string>
- <string name="spam_blocking_settings_disable_error_text">S\'ha produït un error en desactivar el filtre de correu brossa</string>
- <string name="spam_blocking_settings_enable_complete_text">El filtre de trucades brossa s\'ha activat</string>
- <string name="spam_blocking_settings_disable_complete_text">El filtre de trucades brossa s\'ha desactivat</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-cs/strings.xml b/java/com/android/dialer/spam/promo/res/values-cs/strings.xml
deleted file mode 100644
index 6aa3e79..0000000
--- a/java/com/android/dialer/spam/promo/res/values-cs/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Filtrovat všechny hovory, u kterých je podezření na spam?</string>
- <string name="spam_blocking_promo_text">Hovory jako ten, který jste právě zablokovali, už vás nebudou rušit</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtrovat spam</string>
- <string name="spam_blocking_promo_action_dismiss">Zavřít</string>
- <string name="spam_blocking_setting_prompt">Nastavení</string>
- <string name="spam_blocking_settings_enable_error_text">Filtrování spamu se nepodařilo zapnout</string>
- <string name="spam_blocking_settings_disable_error_text">Filtrování spamu se nepodařilo vypnout</string>
- <string name="spam_blocking_settings_enable_complete_text">Filtrování spamu je zapnuto</string>
- <string name="spam_blocking_settings_disable_complete_text">Filtrování spamu je vypnuto</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-da/strings.xml b/java/com/android/dialer/spam/promo/res/values-da/strings.xml
deleted file mode 100644
index 2e72e5c..0000000
--- a/java/com/android/dialer/spam/promo/res/values-da/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Vil du filtrere alle formodede spamopkald?</string>
- <string name="spam_blocking_promo_text">Opkald som det, du netop har blokeret, forstyrrer dig
- ikke længere</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtrer spam</string>
- <string name="spam_blocking_promo_action_dismiss">Afvis</string>
- <string name="spam_blocking_setting_prompt">Indstillinger</string>
- <string name="spam_blocking_settings_enable_error_text">Der opstod et problem, da filtrering af spamopkald skulle aktiveres</string>
- <string name="spam_blocking_settings_disable_error_text">Der opstod et problem, da filtrering af spamopkald skulle deaktiveres</string>
- <string name="spam_blocking_settings_enable_complete_text">Filtrering af spamopkald blev aktiveret</string>
- <string name="spam_blocking_settings_disable_complete_text">Filtrering af spamopkald blev deaktiveret</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-de/strings.xml b/java/com/android/dialer/spam/promo/res/values-de/strings.xml
deleted file mode 100644
index 1d21d96..0000000
--- a/java/com/android/dialer/spam/promo/res/values-de/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Alle Anrufe bei Verdacht auf Spam herausfiltern?</string>
- <string name="spam_blocking_promo_text">Anrufe wie der, den du gerade blockiert hast,
- werden dich in Zukunft nicht mehr stören</string>
- <string name="spam_blocking_promo_action_filter_spam">Spam herausfiltern</string>
- <string name="spam_blocking_promo_action_dismiss">Schließen</string>
- <string name="spam_blocking_setting_prompt">Einstellungen</string>
- <string name="spam_blocking_settings_enable_error_text">Fehler beim Aktivieren des Spamfilters</string>
- <string name="spam_blocking_settings_disable_error_text">Fehler beim Deaktivieren des Spamfilters</string>
- <string name="spam_blocking_settings_enable_complete_text">Spamfilter aktiviert</string>
- <string name="spam_blocking_settings_disable_complete_text">Spamfilter deaktiviert</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-el/strings.xml b/java/com/android/dialer/spam/promo/res/values-el/strings.xml
deleted file mode 100644
index def1d70..0000000
--- a/java/com/android/dialer/spam/promo/res/values-el/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Φιλτράρισμα όλων των ύποπτων ανεπιθύμητων κλήσεων;</string>
- <string name="spam_blocking_promo_text">Κλήσεις όπως αυτή που μόλις αποκλείσατε δεν θα σας ενοχλούν πλέον</string>
- <string name="spam_blocking_promo_action_filter_spam">Φιλτράρισμα ανεπιθύμητων κλήσεων</string>
- <string name="spam_blocking_promo_action_dismiss">Απόρριψη</string>
- <string name="spam_blocking_setting_prompt">Ρυθμίσεις</string>
- <string name="spam_blocking_settings_enable_error_text">Προέκυψε πρόβλημα κατά την ενεργοποίηση του φιλτραρίσματος ανεπιθύμητων μηνυμάτων</string>
- <string name="spam_blocking_settings_disable_error_text">Προέκυψε πρόβλημα κατά την απενεργοποίηση του φιλτραρίσματος ανεπιθύμητων μηνυμάτων</string>
- <string name="spam_blocking_settings_enable_complete_text">Το φιλτράρισμα ανεπιθύμητων κλήσεων ενεργοποιήθηκε</string>
- <string name="spam_blocking_settings_disable_complete_text">Το φιλτράρισμα ανεπιθύμητων κλήσεων απενεργοποιήθηκε</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-en-rAU/strings.xml b/java/com/android/dialer/spam/promo/res/values-en-rAU/strings.xml
deleted file mode 100644
index ab59fce..0000000
--- a/java/com/android/dialer/spam/promo/res/values-en-rAU/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Filter all suspected spam calls?</string>
- <string name="spam_blocking_promo_text">Calls like the one that you just blocked will no longer
- disturb you</string>
- <string name="spam_blocking_promo_action_filter_spam">Filter Spam</string>
- <string name="spam_blocking_promo_action_dismiss">Dismiss</string>
- <string name="spam_blocking_setting_prompt">Settings</string>
- <string name="spam_blocking_settings_enable_error_text">Problem turning on spam filtering</string>
- <string name="spam_blocking_settings_disable_error_text">Problem turning off spam filtering</string>
- <string name="spam_blocking_settings_enable_complete_text">Spam filtering turned on</string>
- <string name="spam_blocking_settings_disable_complete_text">Spam filtering turned off</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-en-rGB/strings.xml b/java/com/android/dialer/spam/promo/res/values-en-rGB/strings.xml
deleted file mode 100644
index ab59fce..0000000
--- a/java/com/android/dialer/spam/promo/res/values-en-rGB/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Filter all suspected spam calls?</string>
- <string name="spam_blocking_promo_text">Calls like the one that you just blocked will no longer
- disturb you</string>
- <string name="spam_blocking_promo_action_filter_spam">Filter Spam</string>
- <string name="spam_blocking_promo_action_dismiss">Dismiss</string>
- <string name="spam_blocking_setting_prompt">Settings</string>
- <string name="spam_blocking_settings_enable_error_text">Problem turning on spam filtering</string>
- <string name="spam_blocking_settings_disable_error_text">Problem turning off spam filtering</string>
- <string name="spam_blocking_settings_enable_complete_text">Spam filtering turned on</string>
- <string name="spam_blocking_settings_disable_complete_text">Spam filtering turned off</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-en-rIN/strings.xml b/java/com/android/dialer/spam/promo/res/values-en-rIN/strings.xml
deleted file mode 100644
index ab59fce..0000000
--- a/java/com/android/dialer/spam/promo/res/values-en-rIN/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Filter all suspected spam calls?</string>
- <string name="spam_blocking_promo_text">Calls like the one that you just blocked will no longer
- disturb you</string>
- <string name="spam_blocking_promo_action_filter_spam">Filter Spam</string>
- <string name="spam_blocking_promo_action_dismiss">Dismiss</string>
- <string name="spam_blocking_setting_prompt">Settings</string>
- <string name="spam_blocking_settings_enable_error_text">Problem turning on spam filtering</string>
- <string name="spam_blocking_settings_disable_error_text">Problem turning off spam filtering</string>
- <string name="spam_blocking_settings_enable_complete_text">Spam filtering turned on</string>
- <string name="spam_blocking_settings_disable_complete_text">Spam filtering turned off</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-es-rUS/strings.xml b/java/com/android/dialer/spam/promo/res/values-es-rUS/strings.xml
deleted file mode 100644
index 3144e82..0000000
--- a/java/com/android/dialer/spam/promo/res/values-es-rUS/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">¿Quieres filtrar todas las llamadas que se identifiquen como spam?</string>
- <string name="spam_blocking_promo_text">Las llamadas como la que bloqueaste recién ya no
- te molestarán</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtrar spam</string>
- <string name="spam_blocking_promo_action_dismiss">Descartar</string>
- <string name="spam_blocking_setting_prompt">Configuración</string>
- <string name="spam_blocking_settings_enable_error_text">Hubo un problema al activar la opción para filtrar spam</string>
- <string name="spam_blocking_settings_disable_error_text">Hubo un problema al desactivar la opción para filtrar spam</string>
- <string name="spam_blocking_settings_enable_complete_text">Se activó la opción para filtrar spam</string>
- <string name="spam_blocking_settings_disable_complete_text">Se desactivó la opción para filtrar spam</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-es/strings.xml b/java/com/android/dialer/spam/promo/res/values-es/strings.xml
deleted file mode 100644
index 163ed85..0000000
--- a/java/com/android/dialer/spam/promo/res/values-es/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">¿Quieres filtrar todas las posibles llamadas de spam?</string>
- <string name="spam_blocking_promo_text">Las llamadas como la que acabas de bloquear ya no te
- molestarán</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtrar spam</string>
- <string name="spam_blocking_promo_action_dismiss">Ignorar</string>
- <string name="spam_blocking_setting_prompt">Ajustes</string>
- <string name="spam_blocking_settings_enable_error_text">No se ha podido activar el filtrado de spam</string>
- <string name="spam_blocking_settings_disable_error_text">No se ha podido desactivar el filtrado de spam</string>
- <string name="spam_blocking_settings_enable_complete_text">Se ha activado el filtrado de spam</string>
- <string name="spam_blocking_settings_disable_complete_text">Se ha desactivado el filtrado de spam</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-et/strings.xml b/java/com/android/dialer/spam/promo/res/values-et/strings.xml
deleted file mode 100644
index 521f14f..0000000
--- a/java/com/android/dialer/spam/promo/res/values-et/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Kas soovite filtreerida kõik arvatavad rämpskõned?</string>
- <string name="spam_blocking_promo_text">Hiljuti blokeeritud kõnega sarnased kõned
- ei häiri teid edaspidi</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtreeri rämpskõned</string>
- <string name="spam_blocking_promo_action_dismiss">Loobu</string>
- <string name="spam_blocking_setting_prompt">Seaded</string>
- <string name="spam_blocking_settings_enable_error_text">Rämpskõnede filtreerimise sisselülitamisel tekkis probleem</string>
- <string name="spam_blocking_settings_disable_error_text">Rämpskõnede filtreerimise väljalülitamisel tekkis probleem</string>
- <string name="spam_blocking_settings_enable_complete_text">Rämpskõnede filtreerimine on sisse lülitatud</string>
- <string name="spam_blocking_settings_disable_complete_text">Rämpskõnede filtreerimine on välja lülitatud</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-eu/strings.xml b/java/com/android/dialer/spam/promo/res/values-eu/strings.xml
deleted file mode 100644
index 94023c0..0000000
--- a/java/com/android/dialer/spam/promo/res/values-eu/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Ustezko spam-dei guztiak iragazi nahi dituzu?</string>
- <string name="spam_blocking_promo_text">Aurrerantzean, blokeatu berri duzunaren antzeko deiek
- ez zaituzte molestatuko</string>
- <string name="spam_blocking_promo_action_filter_spam">Iragazi spama</string>
- <string name="spam_blocking_promo_action_dismiss">Baztertu</string>
- <string name="spam_blocking_setting_prompt">Ezarpenak</string>
- <string name="spam_blocking_settings_enable_error_text">Arazo bat izan da spama iragazteko aukera aktibatzean</string>
- <string name="spam_blocking_settings_disable_error_text">Arazo bat izan da spama iragazteko aukera desaktibatzean</string>
- <string name="spam_blocking_settings_enable_complete_text">Aktibatu da spama iragazteko aukera</string>
- <string name="spam_blocking_settings_disable_complete_text">Desaktibatu da spama iragazteko aukera</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-fa/strings.xml b/java/com/android/dialer/spam/promo/res/values-fa/strings.xml
deleted file mode 100644
index db797c6..0000000
--- a/java/com/android/dialer/spam/promo/res/values-fa/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">همه تماسهای مشکوک به هرزنامه فیلتر شود؟</string>
- <string name="spam_blocking_promo_text">تماسهای مشابه تماسی که همینحالا مسدود کردید
- دیگر برای شما مزاحمت ایجاد نخواهند کرد</string>
- <string name="spam_blocking_promo_action_filter_spam">فیلتر هرزنامه</string>
- <string name="spam_blocking_promo_action_dismiss">نپذیرفتن</string>
- <string name="spam_blocking_setting_prompt">تنظیمات</string>
- <string name="spam_blocking_settings_enable_error_text">مشکل هنگام روشن کردن فیلتر هرزنامه</string>
- <string name="spam_blocking_settings_disable_error_text">مشکل هنگام خاموش کردن فیلتر هرزنامه</string>
- <string name="spam_blocking_settings_enable_complete_text">فیلتر هرزنامه فعال است</string>
- <string name="spam_blocking_settings_disable_complete_text">فیلتر هرزنامه غیرفعال است</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-fi/strings.xml b/java/com/android/dialer/spam/promo/res/values-fi/strings.xml
deleted file mode 100644
index 3b85fb0..0000000
--- a/java/com/android/dialer/spam/promo/res/values-fi/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Suodatetaanko kaikki häirikköpuheluilta vaikuttavat puhelut?</string>
- <string name="spam_blocking_promo_text">Estämäsi kaltaiset puhelut eivät enää
- häiritse sinua</string>
- <string name="spam_blocking_promo_action_filter_spam">Suodata häirikköpuhelut</string>
- <string name="spam_blocking_promo_action_dismiss">Ohita</string>
- <string name="spam_blocking_setting_prompt">Asetukset</string>
- <string name="spam_blocking_settings_enable_error_text">Häirikköpuhelujen suodatuksen käyttöönotossa oli ongelma</string>
- <string name="spam_blocking_settings_disable_error_text">Häirikköpuhelujen suodatuksen poistamisessa käytöstä oli ongelma</string>
- <string name="spam_blocking_settings_enable_complete_text">Häirikköpuhelujen suodatus päällä</string>
- <string name="spam_blocking_settings_disable_complete_text">Häirikköpuhelujen suodatus pois päältä</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-fr-rCA/strings.xml b/java/com/android/dialer/spam/promo/res/values-fr-rCA/strings.xml
deleted file mode 100644
index 312f7f0..0000000
--- a/java/com/android/dialer/spam/promo/res/values-fr-rCA/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Filtrer tous les appels importuns suspects?</string>
- <string name="spam_blocking_promo_text">Les appels comme celui que vous venez de bloquer ne vous
- dérangeront plus</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtrer les appels importuns</string>
- <string name="spam_blocking_promo_action_dismiss">Ignorer</string>
- <string name="spam_blocking_setting_prompt">Paramètres</string>
- <string name="spam_blocking_settings_enable_error_text">Problème lors de l\'activation du filtrage des appels importuns</string>
- <string name="spam_blocking_settings_disable_error_text">Problème lors de la désactivation du filtrage des appels importuns</string>
- <string name="spam_blocking_settings_enable_complete_text">Filtrage des appels importuns activé</string>
- <string name="spam_blocking_settings_disable_complete_text">Filtrage des appels importuns désactivé</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-fr/strings.xml b/java/com/android/dialer/spam/promo/res/values-fr/strings.xml
deleted file mode 100644
index c6ec5a9..0000000
--- a/java/com/android/dialer/spam/promo/res/values-fr/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Filtrer tous les appels potentiellement indésirables ?</string>
- <string name="spam_blocking_promo_text">Vous ne serez plus dérangé par des appels similaires à celui que vous venez de bloquer.</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtrer le spam</string>
- <string name="spam_blocking_promo_action_dismiss">Ignorer</string>
- <string name="spam_blocking_setting_prompt">Paramètres</string>
- <string name="spam_blocking_settings_enable_error_text">Problème lors de l\'activation du fitre antispam</string>
- <string name="spam_blocking_settings_disable_error_text">Problème lors de la désactivation du filtre antispam</string>
- <string name="spam_blocking_settings_enable_complete_text">Le filtre antispam est activé</string>
- <string name="spam_blocking_settings_disable_complete_text">Le filtre antispam est désactivé</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-gl/strings.xml b/java/com/android/dialer/spam/promo/res/values-gl/strings.xml
deleted file mode 100644
index 3b3b5df..0000000
--- a/java/com/android/dialer/spam/promo/res/values-gl/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Queres filtrar todas as posibles chamadas de spam?</string>
- <string name="spam_blocking_promo_text">Xa non te amolarán chamadas como a que
- acabas de bloquear</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtrar spam</string>
- <string name="spam_blocking_promo_action_dismiss">Ignorar</string>
- <string name="spam_blocking_setting_prompt">Configuración</string>
- <string name="spam_blocking_settings_enable_error_text">Produciuse un problema ao activar o filtrado de spam</string>
- <string name="spam_blocking_settings_disable_error_text">Produciuse un problema ao desactivar o filtrado de spam</string>
- <string name="spam_blocking_settings_enable_complete_text">Activouse o filtrado de spam</string>
- <string name="spam_blocking_settings_disable_complete_text">Desactivouse o filtrado de spam</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-gu/strings.xml b/java/com/android/dialer/spam/promo/res/values-gu/strings.xml
deleted file mode 100644
index 265ecfe..0000000
--- a/java/com/android/dialer/spam/promo/res/values-gu/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">બધા શંકાસ્પદ સ્પામ કૉલને ફિલ્ટર કરીએ?</string>
- <string name="spam_blocking_promo_text">તમે હમણાં જ જે કૉલને બ્લૉક કર્યો છે તેવા કૉલ હવેથી તમારા કામમાં ખલેલ
- પાડી શકશે નહીં</string>
- <string name="spam_blocking_promo_action_filter_spam">સ્પામ ફિલ્ટર કરો</string>
- <string name="spam_blocking_promo_action_dismiss">છોડી દો</string>
- <string name="spam_blocking_setting_prompt">સેટિંગ</string>
- <string name="spam_blocking_settings_enable_error_text">સ્પામ ફિલ્ટરિંગને ચાલુ કરવામાં સમસ્યા</string>
- <string name="spam_blocking_settings_disable_error_text">સ્પામ ફિલ્ટરિંગને બંધ કરવામાં સમસ્યા</string>
- <string name="spam_blocking_settings_enable_complete_text">સ્પામ ફિલ્ટરિંગ ચાલુ કર્યું</string>
- <string name="spam_blocking_settings_disable_complete_text">સ્પામ ફિલ્ટરિંગ બંધ કર્યું</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-hi/strings.xml b/java/com/android/dialer/spam/promo/res/values-hi/strings.xml
deleted file mode 100644
index 80a98d4..0000000
--- a/java/com/android/dialer/spam/promo/res/values-hi/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">सभी संदिग्ध स्पैम कॉल फ़िल्टर करें?</string>
- <string name="spam_blocking_promo_text">आपने अभी-अभी जिस तरह के कॉल पर रोक लगाई है, वैसे कॉल अब आपको
- परेशान नहीं करेंगे</string>
- <string name="spam_blocking_promo_action_filter_spam">स्पैम फ़िल्टर करें</string>
- <string name="spam_blocking_promo_action_dismiss">खारिज करें</string>
- <string name="spam_blocking_setting_prompt">सेटिंग</string>
- <string name="spam_blocking_settings_enable_error_text">स्पैम फ़िल्टर करने की सुविधा चालू करने में समस्या आई</string>
- <string name="spam_blocking_settings_disable_error_text">स्पैम फ़िल्टर करने की सुविधा बंद करने में समस्या आई</string>
- <string name="spam_blocking_settings_enable_complete_text">स्पैम फ़िल्टर चालू किया गया</string>
- <string name="spam_blocking_settings_disable_complete_text">स्पैम फ़िल्टर बंद किया गया</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-hr/strings.xml b/java/com/android/dialer/spam/promo/res/values-hr/strings.xml
deleted file mode 100644
index 5ce00b1..0000000
--- a/java/com/android/dialer/spam/promo/res/values-hr/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Želite li filtrirati sve moguće neželjene pozive?</string>
- <string name="spam_blocking_promo_text">Pozivi kao što je ovaj koji ste upravo blokirali više
- vas neće ometati</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtriranje neželjenih poziva</string>
- <string name="spam_blocking_promo_action_dismiss">Odbaci</string>
- <string name="spam_blocking_setting_prompt">Postavke</string>
- <string name="spam_blocking_settings_enable_error_text">Problem pri uključivanju filtriranja neželjenih poziva</string>
- <string name="spam_blocking_settings_disable_error_text">Problem pri isključivanju filtriranja neželjenih poziva</string>
- <string name="spam_blocking_settings_enable_complete_text">Filtriranje neželjenih poziva uključeno</string>
- <string name="spam_blocking_settings_disable_complete_text">Filtriranje neželjenih poziva isključeno</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-hu/strings.xml b/java/com/android/dialer/spam/promo/res/values-hu/strings.xml
deleted file mode 100644
index cdd2c57..0000000
--- a/java/com/android/dialer/spam/promo/res/values-hu/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Ki szeretné szűrni az összes gyanús spamhívást?</string>
- <string name="spam_blocking_promo_text">Az épp letiltotthoz hasonló hívások nem fogják többet zavarni.</string>
- <string name="spam_blocking_promo_action_filter_spam">Spamszűrés</string>
- <string name="spam_blocking_promo_action_dismiss">Bezárás</string>
- <string name="spam_blocking_setting_prompt">Beállítások</string>
- <string name="spam_blocking_settings_enable_error_text">Hiba történt a spamszűrés bekapcsolásakor</string>
- <string name="spam_blocking_settings_disable_error_text">Hiba történt a spamszűrés kikapcsolásakor</string>
- <string name="spam_blocking_settings_enable_complete_text">Spamszűrés bekapcsolva</string>
- <string name="spam_blocking_settings_disable_complete_text">Spamszűrés kikapcsolva</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-hy/strings.xml b/java/com/android/dialer/spam/promo/res/values-hy/strings.xml
deleted file mode 100644
index b0fe325..0000000
--- a/java/com/android/dialer/spam/promo/res/values-hy/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Զտե՞լ բոլոր անցանկալի զանգերը</string>
- <string name="spam_blocking_promo_text">Դուք քիչ առաջ զանգ արգելափակեցիք: Նման զանգերը այլևս ձեզ
- չեն անհանգստացնի</string>
- <string name="spam_blocking_promo_action_filter_spam">Զտել սպամը</string>
- <string name="spam_blocking_promo_action_dismiss">Փակել</string>
- <string name="spam_blocking_setting_prompt">Կարգավորումներ</string>
- <string name="spam_blocking_settings_enable_error_text">Չհաջողվեց միացնել սպամի զտումը</string>
- <string name="spam_blocking_settings_disable_error_text">Չհաջողվեց անջատել սպամի զտումը</string>
- <string name="spam_blocking_settings_enable_complete_text">Սպապի զտումը միացավ</string>
- <string name="spam_blocking_settings_disable_complete_text">Սպապի զտումն անջատվեց</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-in/strings.xml b/java/com/android/dialer/spam/promo/res/values-in/strings.xml
deleted file mode 100644
index 53e3e7a..0000000
--- a/java/com/android/dialer/spam/promo/res/values-in/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Filter semua panggilan yang diduga spam?</string>
- <string name="spam_blocking_promo_text">Panggilan seperti yang baru saja diblokir tidak akan lagi
- mengganggu Anda</string>
- <string name="spam_blocking_promo_action_filter_spam">Filter Spam</string>
- <string name="spam_blocking_promo_action_dismiss">Tutup</string>
- <string name="spam_blocking_setting_prompt">Setelan</string>
- <string name="spam_blocking_settings_enable_error_text">Masalah saat mengaktifkan pemfilteran spam</string>
- <string name="spam_blocking_settings_disable_error_text">Masalah saat menonaktifkan pemfilteran spam</string>
- <string name="spam_blocking_settings_enable_complete_text">Pemfilteran spam diaktifkan</string>
- <string name="spam_blocking_settings_disable_complete_text">Pemfilteran spam dinonaktifkan</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-is/strings.xml b/java/com/android/dialer/spam/promo/res/values-is/strings.xml
deleted file mode 100644
index b48f100..0000000
--- a/java/com/android/dialer/spam/promo/res/values-is/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Viltu sía út símtöl sem berast úr hugsanlegum ruslnúmerum?</string>
- <string name="spam_blocking_promo_text">Þú munt ekki lengur fá símtal eins og það
- sem þú lokaðir á</string>
- <string name="spam_blocking_promo_action_filter_spam">Sía símtöl úr ruslnúmerum</string>
- <string name="spam_blocking_promo_action_dismiss">Hunsa</string>
- <string name="spam_blocking_setting_prompt">Stillingar</string>
- <string name="spam_blocking_settings_enable_error_text">Villa við að kveikja á síun símtala úr ruslnúmerum</string>
- <string name="spam_blocking_settings_disable_error_text">Villa við að slökkva á síun símtala úr ruslnúmerum</string>
- <string name="spam_blocking_settings_enable_complete_text">Kveikt á síun símtala úr ruslnúmerum</string>
- <string name="spam_blocking_settings_disable_complete_text">Slökkt á síun símtala úr ruslnúmerum</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-it/strings.xml b/java/com/android/dialer/spam/promo/res/values-it/strings.xml
deleted file mode 100644
index e882f7b..0000000
--- a/java/com/android/dialer/spam/promo/res/values-it/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Filtrare tutte le chiamate di presunto spam?</string>
- <string name="spam_blocking_promo_text">Le chiamate come quella che hai appena bloccato non ti disturberanno più</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtro antispam</string>
- <string name="spam_blocking_promo_action_dismiss">Ignora</string>
- <string name="spam_blocking_setting_prompt">Impostazioni</string>
- <string name="spam_blocking_settings_enable_error_text">Errore durante l\'attivazione del filtro antispam</string>
- <string name="spam_blocking_settings_disable_error_text">Errore durante la disattivazione del filtro antispam</string>
- <string name="spam_blocking_settings_enable_complete_text">Filtro antispam attivato</string>
- <string name="spam_blocking_settings_disable_complete_text">Filtro antispam disattivato</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-iw/strings.xml b/java/com/android/dialer/spam/promo/res/values-iw/strings.xml
deleted file mode 100644
index 76caf27..0000000
--- a/java/com/android/dialer/spam/promo/res/values-iw/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">רוצה לסנן את כל השיחות שחשודות כספאם?</string>
- <string name="spam_blocking_promo_text">שיחות כמו השיחה שחסמת לא יטרידו אותך יותר.</string>
- <string name="spam_blocking_promo_action_filter_spam">סינון ספאם</string>
- <string name="spam_blocking_promo_action_dismiss">סגירה</string>
- <string name="spam_blocking_setting_prompt">הגדרות</string>
- <string name="spam_blocking_settings_enable_error_text">הייתה בעיה בהפעלת הסינון של שיחות ספאם</string>
- <string name="spam_blocking_settings_disable_error_text">הייתה בעיה בהשבתת הסינון של שיחות ספאם</string>
- <string name="spam_blocking_settings_enable_complete_text">סינון הספאם הופעל</string>
- <string name="spam_blocking_settings_disable_complete_text">סינון הספאם הושבת</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-ja/strings.xml b/java/com/android/dialer/spam/promo/res/values-ja/strings.xml
deleted file mode 100644
index 7e517b4..0000000
--- a/java/com/android/dialer/spam/promo/res/values-ja/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">迷惑電話の疑いがある通話をすべてブロックしますか?</string>
- <string name="spam_blocking_promo_text">迷惑電話の疑いがある通話はすべて
- ブロックされます</string>
- <string name="spam_blocking_promo_action_filter_spam">迷惑電話をフィルタリング</string>
- <string name="spam_blocking_promo_action_dismiss">閉じる</string>
- <string name="spam_blocking_setting_prompt">設定</string>
- <string name="spam_blocking_settings_enable_error_text">迷惑電話のブロックを ON にできませんでした</string>
- <string name="spam_blocking_settings_disable_error_text">迷惑電話のブロックを OFF にできませんでした</string>
- <string name="spam_blocking_settings_enable_complete_text">迷惑電話のフィルタリングを ON にしました</string>
- <string name="spam_blocking_settings_disable_complete_text">迷惑電話のフィルタリングを OFF にしました</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-ka/strings.xml b/java/com/android/dialer/spam/promo/res/values-ka/strings.xml
deleted file mode 100644
index 4452f99..0000000
--- a/java/com/android/dialer/spam/promo/res/values-ka/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">გსურთ ყველა სავარაუდოდ სპამი ზარის გაფილტვრა?</string>
- <string name="spam_blocking_promo_text">ისეთი ზარები, როგორიც ახლახან დაბლოკეთ, აღარ
- შეგაწუხებთ</string>
- <string name="spam_blocking_promo_action_filter_spam">სპამის გაფილტვრა</string>
- <string name="spam_blocking_promo_action_dismiss">დახურვა</string>
- <string name="spam_blocking_setting_prompt">პარამეტრები</string>
- <string name="spam_blocking_settings_enable_error_text">სპამის გაფილტვრის ჩართვისას წარმოიშვა პრობლემა</string>
- <string name="spam_blocking_settings_disable_error_text">სპამის გაფილტვრის გამორთვისას წარმოიშვა პრობლემა</string>
- <string name="spam_blocking_settings_enable_complete_text">სპამის გაფილტვრა ჩართულია</string>
- <string name="spam_blocking_settings_disable_complete_text">სპამის გაფილტვრა გამორთულია</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-kk/strings.xml b/java/com/android/dialer/spam/promo/res/values-kk/strings.xml
deleted file mode 100644
index 5a73b4f..0000000
--- a/java/com/android/dialer/spam/promo/res/values-kk/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Барлық күдікті спам қоңырауларды сүзу қажет пе?</string>
- <string name="spam_blocking_promo_text">Осы сияқты бөгелген қоңыраулар енді мазаңызды алмайды</string>
- <string name="spam_blocking_promo_action_filter_spam">Спам сүзу</string>
- <string name="spam_blocking_promo_action_dismiss">Жабу</string>
- <string name="spam_blocking_setting_prompt">Параметрлер</string>
- <string name="spam_blocking_settings_enable_error_text">Спам сүзгісі қосылмады</string>
- <string name="spam_blocking_settings_disable_error_text">Спам сүзгісі өшірілмеді</string>
- <string name="spam_blocking_settings_enable_complete_text">Спам сүзгісі қосылды</string>
- <string name="spam_blocking_settings_disable_complete_text">Спам сүзгісі өшірілді</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-km/strings.xml b/java/com/android/dialer/spam/promo/res/values-km/strings.xml
deleted file mode 100644
index ec3ca45..0000000
--- a/java/com/android/dialer/spam/promo/res/values-km/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">ត្រងការហៅទូរសព្ទឥតបានការដែលសង្ស័យទាំងអស់ដែរឬទេ?</string>
- <string name="spam_blocking_promo_text">ការហៅទូរសព្ទដូចការហៅដែលអ្នកទើបបានទប់ស្កាត់នឹងលែង
- រំខានអ្នកទៀតហើយ</string>
- <string name="spam_blocking_promo_action_filter_spam">តម្រងសារឥតបានការ</string>
- <string name="spam_blocking_promo_action_dismiss">បដិសេធ</string>
- <string name="spam_blocking_setting_prompt">ការកំណត់</string>
- <string name="spam_blocking_settings_enable_error_text">មានបញ្ហាក្នុងការបើកតម្រងការហៅឥតបានការ</string>
- <string name="spam_blocking_settings_disable_error_text">មានបញ្ហាបិទតម្រងការហៅឥតបានការ</string>
- <string name="spam_blocking_settings_enable_complete_text">បានបើកតម្រងការហៅឥតបានការ</string>
- <string name="spam_blocking_settings_disable_complete_text">បានបិទតម្រងការហៅឥតបានការ</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-kn/strings.xml b/java/com/android/dialer/spam/promo/res/values-kn/strings.xml
deleted file mode 100644
index bde9a45..0000000
--- a/java/com/android/dialer/spam/promo/res/values-kn/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">ಶಂಕಿತ ಸ್ಪ್ಯಾಮ್ ಕರೆಗಳನ್ನು ಫಿಲ್ಟರ್ ಮಾಡುವುದೇ?</string>
- <string name="spam_blocking_promo_text">ನೀವು ನಿರ್ಬಂಧಿಸಿದಂತಹ ಕರೆಗಳು ಇನ್ನು ಮುಂದೆ ನಿಮಗೆ ತೊಂದರೆ ಉಂಟು ಮಾಡುವುದಿಲ್ಲ</string>
- <string name="spam_blocking_promo_action_filter_spam">ಸ್ಪ್ಯಾಮ್ ಫಿಲ್ಟರ್</string>
- <string name="spam_blocking_promo_action_dismiss">ವಜಾಗೊಳಿಸಿ</string>
- <string name="spam_blocking_setting_prompt">ಸೆಟ್ಟಿಂಗ್ಗಳು</string>
- <string name="spam_blocking_settings_enable_error_text">ಸ್ಪ್ಯಾಮ್ ಫಿಲ್ಟರಿಂಗ್ ಆನ್ ಮಾಡುವಲ್ಲಿ ಸಮಸ್ಯೆ ಎದುರಾಗಿದೆ</string>
- <string name="spam_blocking_settings_disable_error_text">ಸ್ಪ್ಯಾಮ್ ಫಿಲ್ಟರಿಂಗ್ ಆಫ್ ಮಾಡುವಲ್ಲಿ ಸಮಸ್ಯೆ ಎದುರಾಗಿದೆ</string>
- <string name="spam_blocking_settings_enable_complete_text">ಸ್ಪ್ಯಾಮ್ ಫಿಲ್ಟರಿಂಗ್ ಆನ್ ಮಾಡಲಾಗಿದೆ</string>
- <string name="spam_blocking_settings_disable_complete_text">ಸ್ಪ್ಯಾಮ್ ಫಿಲ್ಟರಿಂಗ್ ಆಫ್ ಮಾಡಲಾಗಿದೆ</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-ko/strings.xml b/java/com/android/dialer/spam/promo/res/values-ko/strings.xml
deleted file mode 100644
index b6effac..0000000
--- a/java/com/android/dialer/spam/promo/res/values-ko/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">의심스러운 스팸 통화를 모두 필터링하시겠습니까?</string>
- <string name="spam_blocking_promo_text">방금 차단한 통화와 같은 스팸 통화를
- 더 이상 받지 않게 됩니다.</string>
- <string name="spam_blocking_promo_action_filter_spam">스팸 필터링</string>
- <string name="spam_blocking_promo_action_dismiss">닫기</string>
- <string name="spam_blocking_setting_prompt">설정</string>
- <string name="spam_blocking_settings_enable_error_text">스팸 필터링을 켜는 중에 문제가 발생했습니다.</string>
- <string name="spam_blocking_settings_disable_error_text">스팸 필터링을 끄는 중에 문제가 발생했습니다.</string>
- <string name="spam_blocking_settings_enable_complete_text">스팸 필터링이 켜짐</string>
- <string name="spam_blocking_settings_disable_complete_text">스팸 필터링이 꺼짐</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-ky/strings.xml b/java/com/android/dialer/spam/promo/res/values-ky/strings.xml
deleted file mode 100644
index 4f3cd6f..0000000
--- a/java/com/android/dialer/spam/promo/res/values-ky/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Бардык шектүү спам чалуулар чыпкалансынбы?</string>
- <string name="spam_blocking_promo_text">Сиз азыр эле бөгөттөгөн чалууга окшош чалуулар мындан ары
- тынчыңызды албайт</string>
- <string name="spam_blocking_promo_action_filter_spam">Спамды чыпкалоо</string>
- <string name="spam_blocking_promo_action_dismiss">Жабуу</string>
- <string name="spam_blocking_setting_prompt">Жөндөөлөр</string>
- <string name="spam_blocking_settings_enable_error_text">Спамдын чыпкасын күйгүзүүдө көйгөй келип чыкты</string>
- <string name="spam_blocking_settings_disable_error_text">Спамдын чыпкасын өчүрүүдө көйгөй келип чыкты</string>
- <string name="spam_blocking_settings_enable_complete_text">Спам чыпкасы күйгүзүлдү</string>
- <string name="spam_blocking_settings_disable_complete_text">Спам чыпкасы өчүрүлдү</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-lo/strings.xml b/java/com/android/dialer/spam/promo/res/values-lo/strings.xml
deleted file mode 100644
index 298ecae..0000000
--- a/java/com/android/dialer/spam/promo/res/values-lo/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">ກັ່ນຕອງສາຍທີ່ສົງໄສວ່າເປັນສະແປມທັງໝົດບໍ?</string>
- <string name="spam_blocking_promo_text">ສາຍແບບດຽວກັບທີ່ທ່ານຫາກໍບລັອກໄປຈະບໍ່ສາມາດລົບກວນທ່ານໄດ້ອີກ.</string>
- <string name="spam_blocking_promo_action_filter_spam">ກັ່ນຕອງສະແປມ</string>
- <string name="spam_blocking_promo_action_dismiss">ປິດໄວ້</string>
- <string name="spam_blocking_setting_prompt">ການຕັ້ງຄ່າ</string>
- <string name="spam_blocking_settings_enable_error_text">ເກີດບັນຫາໃນການເປີດຕົວກັ່ນຕອງສະແປມ</string>
- <string name="spam_blocking_settings_disable_error_text">ເກີດບັນຫາໃນການປິດຕົວກັ່ນຕອງສະແປມ</string>
- <string name="spam_blocking_settings_enable_complete_text">ເປີດຕົວກັ່ນຕອງສະແປມແລ້ວ</string>
- <string name="spam_blocking_settings_disable_complete_text">ປິດຕົວກັ່ນຕອງສະແປມແລ້ວ</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-lt/strings.xml b/java/com/android/dialer/spam/promo/res/values-lt/strings.xml
deleted file mode 100644
index d3d9cdc..0000000
--- a/java/com/android/dialer/spam/promo/res/values-lt/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Filtruoti visus įtartinus šlamšto skambučius?</string>
- <string name="spam_blocking_promo_text">Tokie skambučiai kaip ką tik užblokuotas
- nebetrukdys jums</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtruoti šlamštą</string>
- <string name="spam_blocking_promo_action_dismiss">Atsisakyti</string>
- <string name="spam_blocking_setting_prompt">Nustatymai</string>
- <string name="spam_blocking_settings_enable_error_text">Įjungiant šlamšto filtravimą kilo problema</string>
- <string name="spam_blocking_settings_disable_error_text">Išjungiant šlamšto filtravimą kilo problema</string>
- <string name="spam_blocking_settings_enable_complete_text">Šlamšto filtravimas įjungtas</string>
- <string name="spam_blocking_settings_disable_complete_text">Šlamšto filtravimas išjungtas</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-lv/strings.xml b/java/com/android/dialer/spam/promo/res/values-lv/strings.xml
deleted file mode 100644
index 9d0aafa..0000000
--- a/java/com/android/dialer/spam/promo/res/values-lv/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Vai filtrēt visus aizdomīgos nevēlamos zvanus?</string>
- <string name="spam_blocking_promo_text">Jūs vairs netraucēs tādi zvani kā zvans, ko tikko bloķējāt.</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtrēt nevēlamus zvanus</string>
- <string name="spam_blocking_promo_action_dismiss">Nerādīt</string>
- <string name="spam_blocking_setting_prompt">Iestatījumi</string>
- <string name="spam_blocking_settings_enable_error_text">Ieslēdzot nevēlamu zvanu filtrēšanu, radās problēma.</string>
- <string name="spam_blocking_settings_disable_error_text">Izslēdzot nevēlamu zvanu filtrēšanu, radās problēma.</string>
- <string name="spam_blocking_settings_enable_complete_text">Nevēlamu zvanu filtrēšana ieslēgta</string>
- <string name="spam_blocking_settings_disable_complete_text">Nevēlamu zvanu filtrēšana izslēgta</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-mk/strings.xml b/java/com/android/dialer/spam/promo/res/values-mk/strings.xml
deleted file mode 100644
index 457039a..0000000
--- a/java/com/android/dialer/spam/promo/res/values-mk/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Да се филтрираат сите повици што може да се спам?</string>
- <string name="spam_blocking_promo_text">Повици како оној што го блокиравте веќе нема
- да ве вознемируваат</string>
- <string name="spam_blocking_promo_action_filter_spam">Филтрирање спам</string>
- <string name="spam_blocking_promo_action_dismiss">Отфрли</string>
- <string name="spam_blocking_setting_prompt">Поставки</string>
- <string name="spam_blocking_settings_enable_error_text">Проблем при вклучување филтрирање спам</string>
- <string name="spam_blocking_settings_disable_error_text">Проблем при исклучување филтрирање спам</string>
- <string name="spam_blocking_settings_enable_complete_text">Филтрирањето спам е вклучено</string>
- <string name="spam_blocking_settings_disable_complete_text">Филтрирањето спам е исклучено</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-ml/strings.xml b/java/com/android/dialer/spam/promo/res/values-ml/strings.xml
deleted file mode 100644
index c76754a..0000000
--- a/java/com/android/dialer/spam/promo/res/values-ml/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">എല്ലാ സംശയാസ്പദമായ സ്പാം കോളുകളും ഫിൽട്ടർ ചെയ്യണോ?</string>
- <string name="spam_blocking_promo_text">നിങ്ങൾ ഇപ്പോൾ ബ്ലോക്ക് ചെയ്ത പോലുള്ള കോളുകൾ ഇനി നിങ്ങളെ ശല്യപ്പെടുത്തില്ല</string>
- <string name="spam_blocking_promo_action_filter_spam">സ്പാം ഫിൽട്ടർ ചെയ്യുക</string>
- <string name="spam_blocking_promo_action_dismiss">ഒഴിവാക്കുക</string>
- <string name="spam_blocking_setting_prompt">ക്രമീകരണം</string>
- <string name="spam_blocking_settings_enable_error_text">സ്പാം ഫിൽട്ടർ ചെയ്യൽ ഓണാക്കുന്നതിൽ പ്രശ്നം</string>
- <string name="spam_blocking_settings_disable_error_text">സ്പാം ഫിൽട്ടർ ചെയ്യൽ ഓഫാക്കുന്നതിൽ പ്രശ്നം</string>
- <string name="spam_blocking_settings_enable_complete_text">സ്പാം ഫിൽട്ടർ ചെയ്യൽ ഓണാക്കി</string>
- <string name="spam_blocking_settings_disable_complete_text">സ്പാം ഫിൽട്ടർ ചെയ്യൽ ഓഫാക്കി</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-mn/strings.xml b/java/com/android/dialer/spam/promo/res/values-mn/strings.xml
deleted file mode 100644
index 1acdb00..0000000
--- a/java/com/android/dialer/spam/promo/res/values-mn/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Бүх сэжигтэй спам дуудлагыг шүүх үү?</string>
- <string name="spam_blocking_promo_text">Таны саяхан блоклосон иймэрхүү дуудлагууд танд цаашид саад болохгүй</string>
- <string name="spam_blocking_promo_action_filter_spam">Спам шүүлтүүрдэх</string>
- <string name="spam_blocking_promo_action_dismiss">Хаах</string>
- <string name="spam_blocking_setting_prompt">Тохиргоо</string>
- <string name="spam_blocking_settings_enable_error_text">Спамийн шүүлтүүрийг асаахад асуудал гарсан</string>
- <string name="spam_blocking_settings_disable_error_text">Спамийн шүүлтүүрийг унтраахад асуудал гарсан</string>
- <string name="spam_blocking_settings_enable_complete_text">Спамын шүүлтүүрийг асаасан</string>
- <string name="spam_blocking_settings_disable_complete_text">Спамын шүүлтүүрийг унтраасан</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-mr/strings.xml b/java/com/android/dialer/spam/promo/res/values-mr/strings.xml
deleted file mode 100644
index 3f2bee5..0000000
--- a/java/com/android/dialer/spam/promo/res/values-mr/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">सर्व संशयित स्पॅम कॉल फिल्टर करायचे?</string>
- <string name="spam_blocking_promo_text">तुम्ही आत्ताच ब्लॉक केलेल्या सारखे कॉल तुम्हाला अडथळा आणणार नाहीत</string>
- <string name="spam_blocking_promo_action_filter_spam">स्पॅम फिल्टर करा</string>
- <string name="spam_blocking_promo_action_dismiss">डिसमिस करा</string>
- <string name="spam_blocking_setting_prompt">सेटिंग्ज</string>
- <string name="spam_blocking_settings_enable_error_text">स्पॅम फिल्टरिंग सुरू करण्यात समस्या</string>
- <string name="spam_blocking_settings_disable_error_text">स्पॅम फिल्टरिंग बंद करण्यात समस्या</string>
- <string name="spam_blocking_settings_enable_complete_text">स्पॅम फिल्टरिंग चालू केलेले आहे</string>
- <string name="spam_blocking_settings_disable_complete_text">स्पॅम फिल्टरिंग बंद केलेले आहे</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-ms/strings.xml b/java/com/android/dialer/spam/promo/res/values-ms/strings.xml
deleted file mode 100644
index 28a51da..0000000
--- a/java/com/android/dialer/spam/promo/res/values-ms/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Tapis semua panggilan yang disyaki spam?</string>
- <string name="spam_blocking_promo_text">Panggilan seperti yang baru sahaja anda sekat tidak akan mengganggu anda lagi</string>
- <string name="spam_blocking_promo_action_filter_spam">Tapis Spam</string>
- <string name="spam_blocking_promo_action_dismiss">Ketepikan</string>
- <string name="spam_blocking_setting_prompt">Tetapan</string>
- <string name="spam_blocking_settings_enable_error_text">Masalah semasa menghidupkan penapisan spam</string>
- <string name="spam_blocking_settings_disable_error_text">Masalah semasa mematikan penapisan spam</string>
- <string name="spam_blocking_settings_enable_complete_text">Penapisan spam dihidupkan</string>
- <string name="spam_blocking_settings_disable_complete_text">Penapisan spam dimatikan</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-my/strings.xml b/java/com/android/dialer/spam/promo/res/values-my/strings.xml
deleted file mode 100644
index 641e814..0000000
--- a/java/com/android/dialer/spam/promo/res/values-my/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">သံသယဖြစ်ဖွဘ် စပမ်းခေါ်ဆိုမှုအားလုံးကို စစ်ထုတ်မလား။</string>
- <string name="spam_blocking_promo_text">သင်ပိတ်ထားသော ခေါ်ဆိုမှုများသည် သင့်အား အနှောင့်အယှက် ပေးတော့မည်မဟုတ်ပါ</string>
- <string name="spam_blocking_promo_action_filter_spam">စပမ်းကို စစ်ထုတ်ရန်</string>
- <string name="spam_blocking_promo_action_dismiss">ပယ်ရန်</string>
- <string name="spam_blocking_setting_prompt">ဆက်တင်များ</string>
- <string name="spam_blocking_settings_enable_error_text">စပမ်းစစ်ထုတ်ခြင်းကို ဖွင့်ရာတွင် အခက်အခဲရှိပါသည်</string>
- <string name="spam_blocking_settings_disable_error_text">စပမ်းစစ်ထုတ်ခြင်းကို ပိတ်ရာတွင် အခက်အခဲရှိပါသည်</string>
- <string name="spam_blocking_settings_enable_complete_text">စပမ်းစစ်ထုတ်ခြင်းကို ဖွင့်လိုက်ပါပြီ</string>
- <string name="spam_blocking_settings_disable_complete_text">စပမ်းစစ်ထုတ်ခြင်းကို ပိတ်လိုက်ပါပြီ</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-nb/strings.xml b/java/com/android/dialer/spam/promo/res/values-nb/strings.xml
deleted file mode 100644
index a0b645b..0000000
--- a/java/com/android/dialer/spam/promo/res/values-nb/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Vil du filtrere alle potensielt useriøse anrop?</string>
- <string name="spam_blocking_promo_text">Anrop som det du akkurat har blokkert, kommer ikke til
- å forstyrre deg lenger</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtrér useriøse anrop</string>
- <string name="spam_blocking_promo_action_dismiss">Lukk</string>
- <string name="spam_blocking_setting_prompt">Innstillinger</string>
- <string name="spam_blocking_settings_enable_error_text">Det oppsto problemer da filtrering av useriøse anrop skulle slås på</string>
- <string name="spam_blocking_settings_disable_error_text">Det oppsto problemer da filtrering av useriøse anrop skulle slås av</string>
- <string name="spam_blocking_settings_enable_complete_text">Filtrering av useriøse anrop er slått på</string>
- <string name="spam_blocking_settings_disable_complete_text">Filtrering av useriøse anrop er slått av</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-ne/strings.xml b/java/com/android/dialer/spam/promo/res/values-ne/strings.xml
deleted file mode 100644
index 629b97c..0000000
--- a/java/com/android/dialer/spam/promo/res/values-ne/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">सबै शङ्कास्पद स्प्याम कलहरूलाई फिल्टर गर्ने हो?</string>
- <string name="spam_blocking_promo_text">तपाईंले भर्खरै रोक लगाउनुभएका जस्ता कलहरूले तपाईंलाई अब उप्रान्त बाधा पुऱ्याउने छैनन्</string>
- <string name="spam_blocking_promo_action_filter_spam">स्प्यामलाई फिल्टर गर्नुहोस्</string>
- <string name="spam_blocking_promo_action_dismiss">खारेज गर्नुहोस्</string>
- <string name="spam_blocking_setting_prompt">सेटिङहरू</string>
- <string name="spam_blocking_settings_enable_error_text">स्प्यामलाई फिल्टर गर्ने सुविधा सक्रिय गर्दा समस्या भयो</string>
- <string name="spam_blocking_settings_disable_error_text">स्प्याम फिल्टर गर्ने सुविधा निष्क्रिय पार्दा समस्या भयो</string>
- <string name="spam_blocking_settings_enable_complete_text">स्प्याम फिल्टर गर्ने सुविधा सक्रिय गरियो</string>
- <string name="spam_blocking_settings_disable_complete_text">स्प्याम फिल्टर गर्ने सुविधा निष्क्रिय पारियो</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-nl/strings.xml b/java/com/android/dialer/spam/promo/res/values-nl/strings.xml
deleted file mode 100644
index 498fb53..0000000
--- a/java/com/android/dialer/spam/promo/res/values-nl/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Alle vermoedelijke spamoproepen filteren?</string>
- <string name="spam_blocking_promo_text">Je wordt niet meer gestoord door oproepen zoals de oproep die je net hebt geblokkeerd</string>
- <string name="spam_blocking_promo_action_filter_spam">Spam filteren</string>
- <string name="spam_blocking_promo_action_dismiss">Sluiten</string>
- <string name="spam_blocking_setting_prompt">Instellingen</string>
- <string name="spam_blocking_settings_enable_error_text">Probleem bij inschakelen van spamfilters</string>
- <string name="spam_blocking_settings_disable_error_text">Probleem bij uitschakelen van spamfilters</string>
- <string name="spam_blocking_settings_enable_complete_text">Spamfilter ingeschakeld</string>
- <string name="spam_blocking_settings_disable_complete_text">Spamfilter uitgeschakeld</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-no/strings.xml b/java/com/android/dialer/spam/promo/res/values-no/strings.xml
deleted file mode 100644
index a0b645b..0000000
--- a/java/com/android/dialer/spam/promo/res/values-no/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Vil du filtrere alle potensielt useriøse anrop?</string>
- <string name="spam_blocking_promo_text">Anrop som det du akkurat har blokkert, kommer ikke til
- å forstyrre deg lenger</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtrér useriøse anrop</string>
- <string name="spam_blocking_promo_action_dismiss">Lukk</string>
- <string name="spam_blocking_setting_prompt">Innstillinger</string>
- <string name="spam_blocking_settings_enable_error_text">Det oppsto problemer da filtrering av useriøse anrop skulle slås på</string>
- <string name="spam_blocking_settings_disable_error_text">Det oppsto problemer da filtrering av useriøse anrop skulle slås av</string>
- <string name="spam_blocking_settings_enable_complete_text">Filtrering av useriøse anrop er slått på</string>
- <string name="spam_blocking_settings_disable_complete_text">Filtrering av useriøse anrop er slått av</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-pa/strings.xml b/java/com/android/dialer/spam/promo/res/values-pa/strings.xml
deleted file mode 100644
index ef0bb01..0000000
--- a/java/com/android/dialer/spam/promo/res/values-pa/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">ਕੀ ਸਾਰੀਆਂ ਸ਼ੱਕੀ ਸਪੈਮ ਕਾਲਾਂ ਫਿਲਟਰ ਕਰਨੀਆਂ ਹਨ?</string>
- <string name="spam_blocking_promo_text">ਜਿਸ ਤਰ੍ਹਾਂ ਦੀਆਂ ਕਾਲਾਂ ਤੁਸੀਂ ਬਲਾਕ ਕੀਤੀਆਂ ਹਨ ਉਹ ਹੁਣ ਤੁਹਾਨੂੰ ਕਦੇ ਵੀ ਪਰੇਸ਼ਾਨ ਨਹੀਂ ਕਰਨਗੀਆਂ</string>
- <string name="spam_blocking_promo_action_filter_spam">ਸਪੈਮ ਨੂੰ ਫਿਲਟਰ ਕਰੋ</string>
- <string name="spam_blocking_promo_action_dismiss">ਖਾਰਜ ਕਰੋ</string>
- <string name="spam_blocking_setting_prompt">ਸੈਟਿੰਗਾਂ</string>
- <string name="spam_blocking_settings_enable_error_text">ਸਪੈਮ ਫਿਲਟਰ ਕਰਨ ਦਾ ਵਿਕਲਪ ਚਾਲੂ ਕਰਨ ਵੇਲੇ ਸਮੱਸਿਆ ਆਈ</string>
- <string name="spam_blocking_settings_disable_error_text">ਸਪੈਮ ਫਿਲਟਰ ਕਰਨ ਦਾ ਵਿਕਲਪ ਬੰਦ ਕਰਨ ਵੇਲੇ ਸਮੱਸਿਆ ਆਈ</string>
- <string name="spam_blocking_settings_enable_complete_text">ਸਪੈਮ ਫਿਲਟਰ ਕਰਨਾ ਚਾਲੂ ਕੀਤਾ ਗਿਆ</string>
- <string name="spam_blocking_settings_disable_complete_text">ਸਪੈਮ ਫਿਲਟਰ ਕਰਨਾ ਬੰਦ ਕੀਤਾ ਗਿਆ</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-pl/strings.xml b/java/com/android/dialer/spam/promo/res/values-pl/strings.xml
deleted file mode 100644
index e3c35c4..0000000
--- a/java/com/android/dialer/spam/promo/res/values-pl/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Filtrować wszystkie połączenia podejrzanie o spam?</string>
- <string name="spam_blocking_promo_text">Połączenia podobne do tego, które właśnie zostało zablokowane, nie będą Ci już przeszkadzać</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtruj spam</string>
- <string name="spam_blocking_promo_action_dismiss">Odrzuć</string>
- <string name="spam_blocking_setting_prompt">Ustawienia</string>
- <string name="spam_blocking_settings_enable_error_text">Nie udało się włączyć filtrowania spamu</string>
- <string name="spam_blocking_settings_disable_error_text">Nie udało się wyłączyć filtrowania spamu</string>
- <string name="spam_blocking_settings_enable_complete_text">Włączono filtrowanie spamu</string>
- <string name="spam_blocking_settings_disable_complete_text">Wyłączono filtrowanie spamu</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-pt-rBR/strings.xml b/java/com/android/dialer/spam/promo/res/values-pt-rBR/strings.xml
deleted file mode 100644
index 42ad4a9..0000000
--- a/java/com/android/dialer/spam/promo/res/values-pt-rBR/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Filtrar todas as chamadas suspeitas (spam)?</string>
- <string name="spam_blocking_promo_text">Você não será mais incomodado por chamadas como a que acabou de bloquear</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtrar spam</string>
- <string name="spam_blocking_promo_action_dismiss">Dispensar</string>
- <string name="spam_blocking_setting_prompt">Configurações</string>
- <string name="spam_blocking_settings_enable_error_text">Ocorreu um problema ao ativar a filtragem de spam</string>
- <string name="spam_blocking_settings_disable_error_text">Ocorreu um problema ao desativar a filtragem de spam</string>
- <string name="spam_blocking_settings_enable_complete_text">A filtragem de spam foi ativada</string>
- <string name="spam_blocking_settings_disable_complete_text">A filtragem de spam foi desativada</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-pt-rPT/strings.xml b/java/com/android/dialer/spam/promo/res/values-pt-rPT/strings.xml
deleted file mode 100644
index cc9ad00..0000000
--- a/java/com/android/dialer/spam/promo/res/values-pt-rPT/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Filtrar chamadas de spam suspeitas?</string>
- <string name="spam_blocking_promo_text">As chamadas como a que acabou de bloquear não voltarão
- a incomodá-lo</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtrar spam</string>
- <string name="spam_blocking_promo_action_dismiss">Ignorar</string>
- <string name="spam_blocking_setting_prompt">Definições</string>
- <string name="spam_blocking_settings_enable_error_text">Problema ao ativar o filtro de spam</string>
- <string name="spam_blocking_settings_disable_error_text">Problema ao desativar o filtro de spam</string>
- <string name="spam_blocking_settings_enable_complete_text">Filtro de spam ativado</string>
- <string name="spam_blocking_settings_disable_complete_text">Filtro de spam desativado</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-pt/strings.xml b/java/com/android/dialer/spam/promo/res/values-pt/strings.xml
deleted file mode 100644
index 42ad4a9..0000000
--- a/java/com/android/dialer/spam/promo/res/values-pt/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Filtrar todas as chamadas suspeitas (spam)?</string>
- <string name="spam_blocking_promo_text">Você não será mais incomodado por chamadas como a que acabou de bloquear</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtrar spam</string>
- <string name="spam_blocking_promo_action_dismiss">Dispensar</string>
- <string name="spam_blocking_setting_prompt">Configurações</string>
- <string name="spam_blocking_settings_enable_error_text">Ocorreu um problema ao ativar a filtragem de spam</string>
- <string name="spam_blocking_settings_disable_error_text">Ocorreu um problema ao desativar a filtragem de spam</string>
- <string name="spam_blocking_settings_enable_complete_text">A filtragem de spam foi ativada</string>
- <string name="spam_blocking_settings_disable_complete_text">A filtragem de spam foi desativada</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-ro/strings.xml b/java/com/android/dialer/spam/promo/res/values-ro/strings.xml
deleted file mode 100644
index e96a266..0000000
--- a/java/com/android/dialer/spam/promo/res/values-ro/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Filtrați apelurile care ar putea fi spam?</string>
- <string name="spam_blocking_promo_text">Apelurile precum cel pe care tocmai l-ați blocat
- nu vă vor mai deranja</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtrați mesajele spam</string>
- <string name="spam_blocking_promo_action_dismiss">Închideți</string>
- <string name="spam_blocking_setting_prompt">Setări</string>
- <string name="spam_blocking_settings_enable_error_text">Problemă la activarea filtrării spamului</string>
- <string name="spam_blocking_settings_disable_error_text">Problemă la dezactivarea filtrării spamului</string>
- <string name="spam_blocking_settings_enable_complete_text">Filtrarea apelurilor spam este activată.</string>
- <string name="spam_blocking_settings_disable_complete_text">Filtrarea mesajelor spam este dezactivată.</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-ru/strings.xml b/java/com/android/dialer/spam/promo/res/values-ru/strings.xml
deleted file mode 100644
index 2586017..0000000
--- a/java/com/android/dialer/spam/promo/res/values-ru/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Фильтровать спам?</string>
- <string name="spam_blocking_promo_text">Звонки, подобные этому, больше не будут беспокоить вас.</string>
- <string name="spam_blocking_promo_action_filter_spam">Фильтровать спам</string>
- <string name="spam_blocking_promo_action_dismiss">Закрыть</string>
- <string name="spam_blocking_setting_prompt">Настройки</string>
- <string name="spam_blocking_settings_enable_error_text">Не удалось включить фильтрацию спама</string>
- <string name="spam_blocking_settings_disable_error_text">Не удалось выключить фильтрацию спама</string>
- <string name="spam_blocking_settings_enable_complete_text">Фильтрация спама включена</string>
- <string name="spam_blocking_settings_disable_complete_text">Фильтрация спама выключена</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-si/strings.xml b/java/com/android/dialer/spam/promo/res/values-si/strings.xml
deleted file mode 100644
index 8bf35f2..0000000
--- a/java/com/android/dialer/spam/promo/res/values-si/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">සියලු සැකසහිත අයාචිත ඇමතුම් පෙරන්නද?</string>
- <string name="spam_blocking_promo_text">ඔබ මේ දැන් අවහිර කළ එක වැනි ඇමතුම් තවදුරටත් ඔබට බාධා නොකරනු ඇත</string>
- <string name="spam_blocking_promo_action_filter_spam">අයාචිත තැපැල් පෙරහන් කරන්න</string>
- <string name="spam_blocking_promo_action_dismiss">ඉවත ලන්න</string>
- <string name="spam_blocking_setting_prompt">සැකසීම්</string>
- <string name="spam_blocking_settings_enable_error_text">අයාචිත පෙරහන ක්රියාත්මක කිරීමේ ගැටලුවකි</string>
- <string name="spam_blocking_settings_disable_error_text">අයාචිත පෙරහන ක්රියාවිරහිත කිරීමේ ගැටලුවකි</string>
- <string name="spam_blocking_settings_enable_complete_text">අයාචිත පෙරහන ක්රියාත්මකයි</string>
- <string name="spam_blocking_settings_disable_complete_text">අයාචිත පෙරහන ක්රියාවිරහිතයි</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-sk/strings.xml b/java/com/android/dialer/spam/promo/res/values-sk/strings.xml
deleted file mode 100644
index b57d9ed..0000000
--- a/java/com/android/dialer/spam/promo/res/values-sk/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Filtrovať všetky hovory, pri ktorých je podozrenie, že ide o spam?</string>
- <string name="spam_blocking_promo_text">Hovory, ako ten, ktorý ste práve zablokovali, vás už nebudú
- rušiť</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtrovať spam</string>
- <string name="spam_blocking_promo_action_dismiss">Zavrieť</string>
- <string name="spam_blocking_setting_prompt">Nastavenia</string>
- <string name="spam_blocking_settings_enable_error_text">Filtrovanie spamu sa nepodarilo zapnúť</string>
- <string name="spam_blocking_settings_disable_error_text">Filtrovanie spamu sa nepodarilo vypnúť</string>
- <string name="spam_blocking_settings_enable_complete_text">Filtrovanie spamu bolo zapnuté</string>
- <string name="spam_blocking_settings_disable_complete_text">Filtrovanie spamu bolo vypnuté</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-sl/strings.xml b/java/com/android/dialer/spam/promo/res/values-sl/strings.xml
deleted file mode 100644
index 6a2d709..0000000
--- a/java/com/android/dialer/spam/promo/res/values-sl/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Želite filtrirati vse domnevno neželene klice?</string>
- <string name="spam_blocking_promo_text">Klici kot ta, ki ste ga pravkar blokirali, vas ne bodo več
- zmotili</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtriraj neželene klice</string>
- <string name="spam_blocking_promo_action_dismiss">Opusti</string>
- <string name="spam_blocking_setting_prompt">Nastavitve</string>
- <string name="spam_blocking_settings_enable_error_text">Težava pri vklopu filtriranja neželenih klicev</string>
- <string name="spam_blocking_settings_disable_error_text">Težava pri izklopu filtriranja neželenih klicev</string>
- <string name="spam_blocking_settings_enable_complete_text">Filtriranje neželenih klicev je vklopljeno</string>
- <string name="spam_blocking_settings_disable_complete_text">Filtriranje neželenih klicev je izklopljeno</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-sq/strings.xml b/java/com/android/dialer/spam/promo/res/values-sq/strings.xml
deleted file mode 100644
index 8677f4a..0000000
--- a/java/com/android/dialer/spam/promo/res/values-sq/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Të filtrohen të gjitha telefonatat e dyshuara si të padëshiruara?</string>
- <string name="spam_blocking_promo_text">Telefonatat si ajo që sapo bllokove nuk do të të shqetësojnë më</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtro të padëshiruarat</string>
- <string name="spam_blocking_promo_action_dismiss">Hiq</string>
- <string name="spam_blocking_setting_prompt">Cilësimet</string>
- <string name="spam_blocking_settings_enable_error_text">Problem me aktivizimin e filtrimit për të padëshiruarat</string>
- <string name="spam_blocking_settings_disable_error_text">Problem me çaktivizimin e filtrimit për të padëshiruarat</string>
- <string name="spam_blocking_settings_enable_complete_text">Filtrimi për të padëshiruarat u aktivizua</string>
- <string name="spam_blocking_settings_disable_complete_text">Filtrimi për të padëshiruarat u çaktivizua</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-sr/strings.xml b/java/com/android/dialer/spam/promo/res/values-sr/strings.xml
deleted file mode 100644
index 9706917..0000000
--- a/java/com/android/dialer/spam/promo/res/values-sr/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Желите ли да филтрирате све позиве за које се сумња да су непожељни?</string>
- <string name="spam_blocking_promo_text">Позиви као што је овај који сте управо блокирали вас више
- неће ометати</string>
- <string name="spam_blocking_promo_action_filter_spam">Филтрирај непожељне позиве</string>
- <string name="spam_blocking_promo_action_dismiss">Одбаци</string>
- <string name="spam_blocking_setting_prompt">Подешавања</string>
- <string name="spam_blocking_settings_enable_error_text">Проблем при укључивању филтрирања непожељних позива</string>
- <string name="spam_blocking_settings_disable_error_text">Проблем при искључивању филтрирања непожељних позива</string>
- <string name="spam_blocking_settings_enable_complete_text">Филтрирање непожељних позива је укључено</string>
- <string name="spam_blocking_settings_disable_complete_text">Филтрирање непожељних позива је искључено</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-sv/strings.xml b/java/com/android/dialer/spam/promo/res/values-sv/strings.xml
deleted file mode 100644
index 52b32ce..0000000
--- a/java/com/android/dialer/spam/promo/res/values-sv/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Vill du filtrera alla misstänkta spamsamtal?</string>
- <string name="spam_blocking_promo_text">Du kommer inte längre att störas av samtal som det du precis blockerade</string>
- <string name="spam_blocking_promo_action_filter_spam">Filtrera spam</string>
- <string name="spam_blocking_promo_action_dismiss">Stäng</string>
- <string name="spam_blocking_setting_prompt">Inställningar</string>
- <string name="spam_blocking_settings_enable_error_text">Problemet med att aktivera spamfilter</string>
- <string name="spam_blocking_settings_disable_error_text">Problem med att stänga av spamfilter</string>
- <string name="spam_blocking_settings_enable_complete_text">Spamfiltrering har aktiverats</string>
- <string name="spam_blocking_settings_disable_complete_text">Spamfiltrering har inaktiverats</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-sw/strings.xml b/java/com/android/dialer/spam/promo/res/values-sw/strings.xml
deleted file mode 100644
index 9758fe9..0000000
--- a/java/com/android/dialer/spam/promo/res/values-sw/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Je, ungependa kuchuja simu zote unazoshuku kuwa taka?</string>
- <string name="spam_blocking_promo_text">Simu kama ile uliyozuia sasa hivi hazitakusumbua tena</string>
- <string name="spam_blocking_promo_action_filter_spam">Chuja Taka</string>
- <string name="spam_blocking_promo_action_dismiss">Ondoa</string>
- <string name="spam_blocking_setting_prompt">Mipangilio</string>
- <string name="spam_blocking_settings_enable_error_text">Hitilafu imetokea wakati wa kuwasha kipengele cha kuchuja simu taka</string>
- <string name="spam_blocking_settings_disable_error_text">Hitilafu imetokea wakati wa kuzima kipengele cha kuchuja simu taka</string>
- <string name="spam_blocking_settings_enable_complete_text">Kipengele cha kuchuja simu taka kimewashwa</string>
- <string name="spam_blocking_settings_disable_complete_text">Kipengele cha kuchuja simu taka kimezimwa</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-ta/strings.xml b/java/com/android/dialer/spam/promo/res/values-ta/strings.xml
deleted file mode 100644
index 681d289..0000000
--- a/java/com/android/dialer/spam/promo/res/values-ta/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">சந்தேகத்திற்குரிய ஸ்பேம் அழைப்புகளைத் தடுக்கவா?</string>
- <string name="spam_blocking_promo_text">இப்போது நீங்கள் தடுத்த அழைப்பு போன்று, வேறு எந்த அழைப்புகளும் இனி
- உங்களைத் தொந்தரவு செய்யாது</string>
- <string name="spam_blocking_promo_action_filter_spam">ஸ்பேமைத் தடு</string>
- <string name="spam_blocking_promo_action_dismiss">நிராகரி</string>
- <string name="spam_blocking_setting_prompt">அமைப்புகள்</string>
- <string name="spam_blocking_settings_enable_error_text">ஸ்பேம் தடுத்தலை இயக்குவதில் சிக்கல்</string>
- <string name="spam_blocking_settings_disable_error_text">ஸ்பேம் தடுத்தலை முடக்குவதில் சிக்கல்</string>
- <string name="spam_blocking_settings_enable_complete_text">ஸ்பேம் தடுத்தல் இயக்கப்பட்டது</string>
- <string name="spam_blocking_settings_disable_complete_text">ஸ்பேம் தடுத்தல் முடக்கப்பட்டது</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-te/strings.xml b/java/com/android/dialer/spam/promo/res/values-te/strings.xml
deleted file mode 100644
index 3b7aeff..0000000
--- a/java/com/android/dialer/spam/promo/res/values-te/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">అనుమానిత స్పామ్ కాల్లన్నింటినీ ఫిల్టర్ చేయాలా?</string>
- <string name="spam_blocking_promo_text">మీరు ఇప్పుడు బ్లాక్ చేసినటువంటి కాల్లు
- మీకు ఇకపై అంతరాయం కలిగించవు</string>
- <string name="spam_blocking_promo_action_filter_spam">స్పామ్ని ఫిల్టర్ చేయి</string>
- <string name="spam_blocking_promo_action_dismiss">విస్మరించు</string>
- <string name="spam_blocking_setting_prompt">సెట్టింగ్లు</string>
- <string name="spam_blocking_settings_enable_error_text">స్పామ్ ఫిల్టరింగ్ని ఆన్ చేస్తున్నప్పుడు సమస్య ఏర్పడింది</string>
- <string name="spam_blocking_settings_disable_error_text">స్పామ్ ఫిల్టరింగ్ని ఆఫ్ చేస్తున్నప్పుడు సమస్య ఏర్పడింది</string>
- <string name="spam_blocking_settings_enable_complete_text">స్పామ్ ఫిల్టరింగ్ ఆన్ చేయబడింది</string>
- <string name="spam_blocking_settings_disable_complete_text">స్పామ్ ఫిల్టరింగ్ ఆఫ్ చేయబడింది</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-th/strings.xml b/java/com/android/dialer/spam/promo/res/values-th/strings.xml
deleted file mode 100644
index 702486d..0000000
--- a/java/com/android/dialer/spam/promo/res/values-th/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">กรองสายที่สงสัยว่าเป็นสแปมทั้งหมดไหม</string>
- <string name="spam_blocking_promo_text">จะไม่มีสายแบบเดียวกับที่บล็อกเมื่อสักครู่
- มารบกวนคุณอีกต่อไป</string>
- <string name="spam_blocking_promo_action_filter_spam">กรองสแปม</string>
- <string name="spam_blocking_promo_action_dismiss">ปิด</string>
- <string name="spam_blocking_setting_prompt">การตั้งค่า</string>
- <string name="spam_blocking_settings_enable_error_text">มีปัญหาในการเปิดการกรองสแปม</string>
- <string name="spam_blocking_settings_disable_error_text">มีปัญหาในการปิดการกรองสแปม</string>
- <string name="spam_blocking_settings_enable_complete_text">เปิดตัวกรองสแปมแล้ว</string>
- <string name="spam_blocking_settings_disable_complete_text">ปิดตัวกรองสแปมแล้ว</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-tl/strings.xml b/java/com/android/dialer/spam/promo/res/values-tl/strings.xml
deleted file mode 100644
index 8844c13..0000000
--- a/java/com/android/dialer/spam/promo/res/values-tl/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">I-filter ang lahat ng pinaghihinalaang spam na tawag?</string>
- <string name="spam_blocking_promo_text">Ang mga tawag na kaka-block mo lang ay hindi
- ka na iistorbohin</string>
- <string name="spam_blocking_promo_action_filter_spam">I-filter ang Spam</string>
- <string name="spam_blocking_promo_action_dismiss">I-dismiss</string>
- <string name="spam_blocking_setting_prompt">Mga Setting</string>
- <string name="spam_blocking_settings_enable_error_text">May problema sa pag-on ng pag-filter ng spam</string>
- <string name="spam_blocking_settings_disable_error_text">May problema sa pag-off ng pag-filter ng spam</string>
- <string name="spam_blocking_settings_enable_complete_text">In-on ang pag-filter ng spam</string>
- <string name="spam_blocking_settings_disable_complete_text">In-off ang pag-filter ng spam</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-tr/strings.xml b/java/com/android/dialer/spam/promo/res/values-tr/strings.xml
deleted file mode 100644
index 0eb6609..0000000
--- a/java/com/android/dialer/spam/promo/res/values-tr/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Spam olabilecek çağrılar filtrelensin mi?</string>
- <string name="spam_blocking_promo_text">Az önce engellediğiniz gibi çağrılar artık
- sizi rahatsız edemez</string>
- <string name="spam_blocking_promo_action_filter_spam">Spam Çağrıları Filtrele</string>
- <string name="spam_blocking_promo_action_dismiss">Kapat</string>
- <string name="spam_blocking_setting_prompt">Ayarlar</string>
- <string name="spam_blocking_settings_enable_error_text">Spam filtresi etkinleştirilirken sorun oluştu</string>
- <string name="spam_blocking_settings_disable_error_text">Spam filtresi devre dışı bırakılırken sorun oluştu</string>
- <string name="spam_blocking_settings_enable_complete_text">Spam filtresi etkinleştirildi</string>
- <string name="spam_blocking_settings_disable_complete_text">Spam filtresi devre dışı bırakıldı</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-uk/strings.xml b/java/com/android/dialer/spam/promo/res/values-uk/strings.xml
deleted file mode 100644
index 16b6597..0000000
--- a/java/com/android/dialer/spam/promo/res/values-uk/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Відфільтрувати всі виклики, які можуть бути спамом?</string>
- <string name="spam_blocking_promo_text">Виклики, подібні до щойно заблокованого, більше не надходитимуть</string>
- <string name="spam_blocking_promo_action_filter_spam">Відфільтрувати спам</string>
- <string name="spam_blocking_promo_action_dismiss">Відхилити</string>
- <string name="spam_blocking_setting_prompt">Налаштування</string>
- <string name="spam_blocking_settings_enable_error_text">Проблема з увімкненням спам-фільтра</string>
- <string name="spam_blocking_settings_disable_error_text">Проблема з вимкненням спам-фільтра</string>
- <string name="spam_blocking_settings_enable_complete_text">Спам-фільтр увімкнено</string>
- <string name="spam_blocking_settings_disable_complete_text">Спам-фільтр вимкнено</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-ur/strings.xml b/java/com/android/dialer/spam/promo/res/values-ur/strings.xml
deleted file mode 100644
index 8fc0613..0000000
--- a/java/com/android/dialer/spam/promo/res/values-ur/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">کیا تمام مشتبہ اسپام کالز فلٹر کریں؟</string>
- <string name="spam_blocking_promo_text">کال جس کو آپ نے ابھی مسدود کیا ہے اس طرح کی کالز آپ کو مزید
- پریشان نہیں کریں گی</string>
- <string name="spam_blocking_promo_action_filter_spam">سپام فلٹر کریں</string>
- <string name="spam_blocking_promo_action_dismiss">برخاست کریں</string>
- <string name="spam_blocking_setting_prompt">ترتیبات</string>
- <string name="spam_blocking_settings_enable_error_text">اسپام فلٹر کرنے کی سہولت کو آن کرنے میں مسئلہ</string>
- <string name="spam_blocking_settings_disable_error_text">اسپام فلٹر کرنے کی سہولت کو آف کرنے میں مسئلہ</string>
- <string name="spam_blocking_settings_enable_complete_text">سپام فلٹر کرنے کی سہولت آن ہے</string>
- <string name="spam_blocking_settings_disable_complete_text">سپام فلٹر کرنے کی سہولت آف ہے</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-uz/strings.xml b/java/com/android/dialer/spam/promo/res/values-uz/strings.xml
deleted file mode 100644
index 5856c25..0000000
--- a/java/com/android/dialer/spam/promo/res/values-uz/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Spam deb taxmin qilingan barcha chaqiruvlar filtrlansinmi?</string>
- <string name="spam_blocking_promo_text">Shunga o‘xshash chaqiruvlar sizni boshqa bezovta qilmaydi</string>
- <string name="spam_blocking_promo_action_filter_spam">Spamni filtrlash</string>
- <string name="spam_blocking_promo_action_dismiss">Yopish</string>
- <string name="spam_blocking_setting_prompt">Sozlamalar</string>
- <string name="spam_blocking_settings_enable_error_text">Spam chaqiruvlarni filtrlar funksiyasi yoqilmadi</string>
- <string name="spam_blocking_settings_disable_error_text">Spam chaqiruvlarni filtrlar funksiyasi o‘chmadi</string>
- <string name="spam_blocking_settings_enable_complete_text">Spam chaqiruvlarni filtrlash funksiyasi yoqildi</string>
- <string name="spam_blocking_settings_disable_complete_text">Spam chaqiruvlarni filtrlash funksiyasi o‘chdi</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-vi/strings.xml b/java/com/android/dialer/spam/promo/res/values-vi/strings.xml
deleted file mode 100644
index 7eb4c0b..0000000
--- a/java/com/android/dialer/spam/promo/res/values-vi/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Lọc tất cả các cuộc gọi nghi ngờ là spam?</string>
- <string name="spam_blocking_promo_text">Các cuộc gọi như cuộc gọi bạn vừa chặn sẽ không còn
- làm phiền bạn nữa</string>
- <string name="spam_blocking_promo_action_filter_spam">Lọc spam</string>
- <string name="spam_blocking_promo_action_dismiss">Bỏ qua</string>
- <string name="spam_blocking_setting_prompt">Cài đặt</string>
- <string name="spam_blocking_settings_enable_error_text">Đã xảy ra sự cố khi bật tính năng lọc spam</string>
- <string name="spam_blocking_settings_disable_error_text">Đã xảy ra sự cố khi tắt tính năng lọc spam</string>
- <string name="spam_blocking_settings_enable_complete_text">Đã bật tính năng lọc spam</string>
- <string name="spam_blocking_settings_disable_complete_text">Đã tắt tính năng lọc spam</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-zh-rCN/strings.xml b/java/com/android/dialer/spam/promo/res/values-zh-rCN/strings.xml
deleted file mode 100644
index 560d840..0000000
--- a/java/com/android/dialer/spam/promo/res/values-zh-rCN/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">要过滤所有疑似骚扰电话吗?</string>
- <string name="spam_blocking_promo_text">您日后不会再收到与刚刚所屏蔽电话类似的骚扰电话</string>
- <string name="spam_blocking_promo_action_filter_spam">过滤骚扰电话</string>
- <string name="spam_blocking_promo_action_dismiss">关闭</string>
- <string name="spam_blocking_setting_prompt">设置</string>
- <string name="spam_blocking_settings_enable_error_text">启用骚扰电话过滤功能时出错</string>
- <string name="spam_blocking_settings_disable_error_text">停用骚扰电话过滤功能时出错</string>
- <string name="spam_blocking_settings_enable_complete_text">骚扰电话过滤功能已启用</string>
- <string name="spam_blocking_settings_disable_complete_text">骚扰电话过滤功能已停用</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-zh-rHK/strings.xml b/java/com/android/dialer/spam/promo/res/values-zh-rHK/strings.xml
deleted file mode 100644
index d0ea019..0000000
--- a/java/com/android/dialer/spam/promo/res/values-zh-rHK/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">要過濾所有疑似垃圾來電嗎?</string>
- <string name="spam_blocking_promo_text">剛封鎖的類似來電不會再
- 打擾您</string>
- <string name="spam_blocking_promo_action_filter_spam">過濾垃圾來電</string>
- <string name="spam_blocking_promo_action_dismiss">關閉</string>
- <string name="spam_blocking_setting_prompt">設定</string>
- <string name="spam_blocking_settings_enable_error_text">開啟垃圾來電濾除功能時發生錯誤</string>
- <string name="spam_blocking_settings_disable_error_text">關閉垃圾來電濾除功能時發生錯誤</string>
- <string name="spam_blocking_settings_enable_complete_text">已開啟垃圾來電過濾功能</string>
- <string name="spam_blocking_settings_disable_complete_text">已關閉垃圾來電過濾功能</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-zh-rTW/strings.xml b/java/com/android/dialer/spam/promo/res/values-zh-rTW/strings.xml
deleted file mode 100644
index 0ffc0ed..0000000
--- a/java/com/android/dialer/spam/promo/res/values-zh-rTW/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">要過濾所有可疑的騷擾/廣告來電嗎?</string>
- <string name="spam_blocking_promo_text">剛才封鎖的類似來電將不會再打擾你</string>
- <string name="spam_blocking_promo_action_filter_spam">過濾騷擾/廣告電話</string>
- <string name="spam_blocking_promo_action_dismiss">關閉</string>
- <string name="spam_blocking_setting_prompt">設定</string>
- <string name="spam_blocking_settings_enable_error_text">無法開啟過濾騷擾/廣告電話的功能</string>
- <string name="spam_blocking_settings_disable_error_text">無法關閉過濾騷擾/廣告電話的功能</string>
- <string name="spam_blocking_settings_enable_complete_text">已開啟過濾騷擾/廣告電話的功能</string>
- <string name="spam_blocking_settings_disable_complete_text">已關閉過濾騷擾/廣告電話的功能</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values-zu/strings.xml b/java/com/android/dialer/spam/promo/res/values-zu/strings.xml
deleted file mode 100644
index 88fd297..0000000
--- a/java/com/android/dialer/spam/promo/res/values-zu/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="spam_blocking_promo_title">Hlunga onke amakholi kagaxekile asolisayo?</string>
- <string name="spam_blocking_promo_text">Amakholi afana nale osanda kuyivimbela ngeke
- asakuphazamisa</string>
- <string name="spam_blocking_promo_action_filter_spam">Hlunga ugaxekile</string>
- <string name="spam_blocking_promo_action_dismiss">Cashisa</string>
- <string name="spam_blocking_setting_prompt">Izilungiselelo</string>
- <string name="spam_blocking_settings_enable_error_text">Inkinga ukuvula isihlungi sikagaxekile</string>
- <string name="spam_blocking_settings_disable_error_text">Inkinga ngokuvala isihlungi sikagaxekile</string>
- <string name="spam_blocking_settings_enable_complete_text">Ukuhlunga kogaxekile kuvuliwe</string>
- <string name="spam_blocking_settings_disable_complete_text">Ukuhlunga kogaxekile kuvaliwe</string>
-</resources>
diff --git a/java/com/android/dialer/spam/promo/res/values/strings.xml b/java/com/android/dialer/spam/promo/res/values/strings.xml
deleted file mode 100644
index 91036be..0000000
--- a/java/com/android/dialer/spam/promo/res/values/strings.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2017 The Android Open Source 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
- -->
-
-<resources>
- <!-- Title for the spam blocking promo dialog. [CHAR LIMIT=100] -->
- <string name="spam_blocking_promo_title">Filter all suspected spam calls?</string>
- <!-- Text for the spam blocking promo dialog. [CHAR LIMIT=NONE] -->
- <string name="spam_blocking_promo_text">Calls like the one you just blocked will no longer
- disturb you</string>
- <!-- Label for filter spam dialog action. [CHAR LIMIT=32] -->
- <string name="spam_blocking_promo_action_filter_spam">Filter Spam</string>
- <!-- Label for "Dismiss" dialog action. [CHAR LIMIT=32] -->
- <string name="spam_blocking_promo_action_dismiss">Dismiss</string>
- <!-- Button text to prompt a user to open spam blocking setting [CHAR LIMIT=NONE] -->
- <string name="spam_blocking_setting_prompt">Settings</string>
-
- <!-- Spam blocking error text, shown when error happens during setting enabling. -->
- <string name="spam_blocking_settings_enable_error_text">Problem turning on spam filtering</string>
- <!-- Spam blocking error text, shown when error happens during setting disabling. -->
- <string name="spam_blocking_settings_disable_error_text">Problem turning off spam filtering</string>
-
- <!-- On complete text shown when spam blocking is enabled successfully. -->
- <string name="spam_blocking_settings_enable_complete_text">Spam filtering turned on</string>
- <!-- On complete text shown when spam blocking is disabled successfully. -->
- <string name="spam_blocking_settings_disable_complete_text">Spam filtering turned off</string>
-</resources>
diff --git a/java/com/android/dialer/strictmode/DialerStrictMode.java b/java/com/android/dialer/strictmode/DialerStrictMode.java
deleted file mode 100644
index 462db57..0000000
--- a/java/com/android/dialer/strictmode/DialerStrictMode.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source 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.strictmode;
-
-import android.app.Application;
-import android.support.annotation.MainThread;
-
-/** Interface for strict mode to handle strict mode violations. */
-public interface DialerStrictMode {
-
- /** Initializes strict mode on application start. */
- @MainThread
- void onApplicationCreate(Application application);
-}
diff --git a/java/com/android/dialer/strictmode/StrictModeComponent.java b/java/com/android/dialer/strictmode/StrictModeComponent.java
deleted file mode 100644
index 7b9f48e..0000000
--- a/java/com/android/dialer/strictmode/StrictModeComponent.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source 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.strictmode;
-
-import android.content.Context;
-import com.android.dialer.inject.HasRootComponent;
-import dagger.Subcomponent;
-
-/** Dagger component for DialerStrictMode. */
-@Subcomponent
-public abstract class StrictModeComponent {
-
- public abstract DialerStrictMode getDialerStrictMode();
-
- public static StrictModeComponent get(Context context) {
- return ((StrictModeComponent.HasComponent)
- ((HasRootComponent) context.getApplicationContext()).component())
- .strictModeComponent();
- }
-
- /** Used to refer to the root application component. */
- public interface HasComponent {
- StrictModeComponent strictModeComponent();
- }
-}
diff --git a/java/com/android/dialer/strictmode/StrictModeUtils.java b/java/com/android/dialer/strictmode/StrictModeUtils.java
deleted file mode 100644
index 27f8142..0000000
--- a/java/com/android/dialer/strictmode/StrictModeUtils.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source 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.strictmode;
-
-import android.app.Application;
-import android.content.Context;
-import android.os.Looper;
-import android.os.StrictMode;
-import android.os.StrictMode.ThreadPolicy;
-import android.preference.PreferenceManager;
-import android.support.annotation.AnyThread;
-import android.support.v4.os.UserManagerCompat;
-import com.android.dialer.buildtype.BuildType;
-import com.android.dialer.buildtype.BuildType.Type;
-import com.android.dialer.function.Supplier;
-import com.android.dialer.storage.StorageComponent;
-
-/** Utilities for enforcing strict-mode in an app. */
-public final class StrictModeUtils {
-
- private static final ThreadPolicy THREAD_NO_PENALTY =
- new StrictMode.ThreadPolicy.Builder().permitAll().build();
-
- /**
- * Convenience method for disabling and enabling the thread policy death penalty using lambdas.
- *
- * <p>For example:
- *
- * <p><code>
- * Value foo = StrictModeUtils.bypass(() -> doDiskAccessOnMainThreadReturningValue());
- * </code>
- *
- * <p>The thread policy is only mutated if this is called from the main thread.
- */
- @AnyThread
- public static <T> T bypass(Supplier<T> supplier) {
- if (isStrictModeAllowed() && onMainThread()) {
- ThreadPolicy originalPolicy = StrictMode.getThreadPolicy();
- StrictMode.setThreadPolicy(THREAD_NO_PENALTY);
- try {
- return supplier.get();
- } finally {
- StrictMode.setThreadPolicy(originalPolicy);
- }
- }
- return supplier.get();
- }
-
- /**
- * Convenience method for disabling and enabling the thread policy death penalty using lambdas.
- *
- * <p>For example:
- *
- * <p><code>
- * StrictModeUtils.bypass(() -> doDiskAccessOnMainThread());
- * </code>
- *
- * <p>The thread policy is only mutated if this is called from the main thread.
- */
- @AnyThread
- public static void bypass(Runnable runnable) {
- if (isStrictModeAllowed() && onMainThread()) {
- ThreadPolicy originalPolicy = StrictMode.getThreadPolicy();
- StrictMode.setThreadPolicy(THREAD_NO_PENALTY);
- try {
- runnable.run();
- } finally {
- StrictMode.setThreadPolicy(originalPolicy);
- }
- } else {
- runnable.run();
- }
- }
-
- public static boolean isStrictModeAllowed() {
- return BuildType.get() == Type.BUGFOOD;
- }
-
- private static boolean onMainThread() {
- return Looper.getMainLooper().equals(Looper.myLooper());
- }
-
- /**
- * We frequently access shared preferences on the main thread, which causes strict mode
- * violations. When strict mode is allowed, warm up the shared preferences so that later uses of
- * shared preferences access the in-memory versions and we don't have to bypass strict mode at
- * every point in the application where shared preferences are accessed.
- */
- public static void warmupSharedPrefs(Application application) {
- // From credential-encrypted (CE) storage, i.e.:
- // /data/data/com.android.dialer/shared_prefs
-
- if (UserManagerCompat.isUserUnlocked(application)) {
- // <package_name>_preferences.xml
- PreferenceManager.getDefaultSharedPreferences(application);
-
- // <package_name>.xml
- application.getSharedPreferences(application.getPackageName(), Context.MODE_PRIVATE);
- }
-
- // From device-encrypted (DE) storage, i.e.:
- // /data/user_de/0/com.android.dialer/shared_prefs/
-
- // <package_name>_preferences.xml
- StorageComponent.get(application).unencryptedSharedPrefs();
- }
-
- private StrictModeUtils() {}
-}
diff --git a/java/com/android/dialer/strictmode/impl/SystemDialerStrictMode.java b/java/com/android/dialer/strictmode/impl/SystemDialerStrictMode.java
deleted file mode 100644
index 4e527e5..0000000
--- a/java/com/android/dialer/strictmode/impl/SystemDialerStrictMode.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source 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.strictmode.impl;
-
-import android.app.Application;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.StrictMode;
-import android.os.StrictMode.ThreadPolicy;
-import android.os.StrictMode.VmPolicy;
-import android.support.annotation.MainThread;
-import android.support.annotation.Nullable;
-import com.android.dialer.common.Assert;
-import com.android.dialer.strictmode.DialerStrictMode;
-import com.android.dialer.strictmode.StrictModeUtils;
-import com.google.auto.value.AutoValue;
-import java.util.Map;
-import javax.inject.Inject;
-
-final class SystemDialerStrictMode implements DialerStrictMode {
- private static final VmPolicy VM_DEATH_PENALTY =
- new StrictMode.VmPolicy.Builder().penaltyLog().penaltyDeath().build();
-
- private static final ThreadPolicy THREAD_DEATH_PENALTY =
- new StrictMode.ThreadPolicy.Builder().penaltyLog().penaltyDeath().build();
-
- @Inject
- public SystemDialerStrictMode() {}
-
- @MainThread
- @Override
- public void onApplicationCreate(Application application) {
- if (StrictModeUtils.isStrictModeAllowed()) {
- StrictModeUtils.warmupSharedPrefs(application);
- setRecommendedMainThreadPolicy(THREAD_DEATH_PENALTY);
- setRecommendedVMPolicy(VM_DEATH_PENALTY);
-
- // Because Android resets StrictMode policies after Application.onCreate is done, we set it
- // again right after.
- // See cl/105932355 for the discussion.
- // See a bug for the public bug.
- Handler handler = new Handler(Looper.myLooper());
- handler.postAtFrontOfQueue(() -> setRecommendedMainThreadPolicy(THREAD_DEATH_PENALTY));
- }
- }
-
- /**
- * Set the recommended policy for the app.
- *
- * @param threadPenalties policy with preferred penalties. Detection bits will be ignored.
- */
- private static void setRecommendedMainThreadPolicy(StrictMode.ThreadPolicy threadPenalties) {
- StrictMode.ThreadPolicy threadPolicy =
- new StrictMode.ThreadPolicy.Builder(threadPenalties).detectAll().build();
- StrictMode.setThreadPolicy(threadPolicy);
- }
-
- /**
- * Set the recommended policy for the app.
- *
- * @param vmPenalties policy with preferred penalties. Detection bits should be unset.
- */
- private static void setRecommendedVMPolicy(StrictMode.VmPolicy vmPenalties) {
- setRecommendedVMPolicy(vmPenalties, StrictModeVmConfig.empty());
- }
-
- /**
- * Set the recommended policy for the app.
- *
- * @param vmPenalties policy with preferred penalties. Detection bits should be unset.
- */
- private static void setRecommendedVMPolicy(
- StrictMode.VmPolicy vmPenalties, StrictModeVmConfig config) {
- Assert.isNotNull(config);
- StrictMode.VmPolicy.Builder vmPolicyBuilder =
- new StrictMode.VmPolicy.Builder(vmPenalties)
- .detectLeakedClosableObjects()
- .detectLeakedSqlLiteObjects()
- .detectContentUriWithoutPermission();
- // TODO(azlatin): Enable detecting untagged sockets once: a bug is fixed.
- // vmPolicyBuilder.detectUntaggedSockets();
- StrictMode.setVmPolicy(vmPolicyBuilder.build());
- }
-
- /** VmPolicy configuration. */
- @AutoValue
- abstract static class StrictModeVmConfig {
- /** A map of a class to the maximum number of allowed instances of that class. */
- @Nullable
- abstract Map<Class<?>, Integer> maxInstanceLimits();
-
- public static StrictModeVmConfig empty() {
- return builder().build();
- }
-
- public static Builder builder() {
- return new AutoValue_SystemDialerStrictMode_StrictModeVmConfig.Builder();
- }
-
- /** VmPolicy configuration builder. */
- @AutoValue.Builder
- public abstract static class Builder {
- public abstract Builder setMaxInstanceLimits(Map<Class<?>, Integer> limits);
-
- public abstract StrictModeVmConfig build();
-
- Builder() {}
- }
-
- StrictModeVmConfig() {}
- }
-}
diff --git a/java/com/android/dialer/strictmode/impl/SystemStrictModeModule.java b/java/com/android/dialer/strictmode/impl/SystemStrictModeModule.java
deleted file mode 100644
index ac6416c..0000000
--- a/java/com/android/dialer/strictmode/impl/SystemStrictModeModule.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source 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.strictmode.impl;
-
-import com.android.dialer.inject.DialerVariant;
-import com.android.dialer.inject.InstallIn;
-import com.android.dialer.strictmode.DialerStrictMode;
-import dagger.Binds;
-import dagger.Module;
-import javax.inject.Singleton;
-
-/** Module which binds {@link SystemDialerStrictMode}. */
-@InstallIn(variants = {DialerVariant.DIALER_TEST})
-@Module
-public abstract class SystemStrictModeModule {
-
- @Binds
- @Singleton
- public abstract DialerStrictMode bindDialerStrictMode(SystemDialerStrictMode impl);
-}
diff --git a/java/com/android/dialer/time/Clock.java b/java/com/android/dialer/time/Clock.java
deleted file mode 100644
index 4b7edc6..0000000
--- a/java/com/android/dialer/time/Clock.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source 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.time;
-
-/** Functional interface for providing time since epoch. */
-public interface Clock {
- /** Returns milliseconds since epoch. */
- long currentTimeMillis();
-}
diff --git a/java/com/android/dialer/voicemail/listui/error/VoicemailTosMessageCreator.java b/java/com/android/dialer/voicemail/listui/error/VoicemailTosMessageCreator.java
index efc094c..76f54b6 100644
--- a/java/com/android/dialer/voicemail/listui/error/VoicemailTosMessageCreator.java
+++ b/java/com/android/dialer/voicemail/listui/error/VoicemailTosMessageCreator.java
@@ -37,7 +37,6 @@
import android.view.View.OnClickListener;
import com.android.dialer.common.LogUtil;
import com.android.dialer.compat.telephony.TelephonyManagerCompat;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.dialer.voicemail.listui.error.VoicemailErrorMessage.Action;
@@ -552,11 +551,7 @@
}
private String getLearnMoreUrl() {
- return ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getString(
- "voicemail_transcription_learn_more_url",
- context.getString(R.string.dialer_terms_and_conditions_learn_more_url));
+ return context.getString(R.string.dialer_terms_and_conditions_learn_more_url);
}
private int getTosDeclinedDialogMessageId() {
diff --git a/java/com/android/dialer/voicemail/settings/VoicemailSettingsFragment.java b/java/com/android/dialer/voicemail/settings/VoicemailSettingsFragment.java
index 00b5901..3b4df9d 100644
--- a/java/com/android/dialer/voicemail/settings/VoicemailSettingsFragment.java
+++ b/java/com/android/dialer/voicemail/settings/VoicemailSettingsFragment.java
@@ -36,7 +36,6 @@
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.preference.SwitchPreferenceWithClickableSummary;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.dialer.notification.NotificationChannelManager;
@@ -310,15 +309,7 @@
}
private void setupChangeGreetingPreference() {
- if (!ConfigProviderComponent.get(getContext())
- .getConfigProvider()
- .getBoolean("voicemail_change_greeting_enabled", false)) {
- getPreferenceScreen().removePreference(changeGreetingPreference);
- return;
- }
-
- Intent changeGreetingIntent = new Intent(getContext(), CurrentVoicemailGreetingActivity.class);
- changeGreetingPreference.setIntent(changeGreetingIntent);
+ getPreferenceScreen().removePreference(changeGreetingPreference);
}
private void setupAdvancedSettingsPreference() {
diff --git a/java/com/android/dialer/voicemailstatus/AndroidManifest.xml b/java/com/android/dialer/voicemailstatus/AndroidManifest.xml
deleted file mode 100644
index a39894c..0000000
--- a/java/com/android/dialer/voicemailstatus/AndroidManifest.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<manifest
- package="com.android.dialer.voicemailstatus">
-</manifest>
diff --git a/java/com/android/dialer/voicemailstatus/VisualVoicemailEnabledChecker.java b/java/com/android/dialer/voicemailstatus/VisualVoicemailEnabledChecker.java
index 8010e02..63520d7 100644
--- a/java/com/android/dialer/voicemailstatus/VisualVoicemailEnabledChecker.java
+++ b/java/com/android/dialer/voicemailstatus/VisualVoicemailEnabledChecker.java
@@ -44,7 +44,6 @@
"has_active_voicemail_provider";
private SharedPreferences prefs;
private boolean hasActiveVoicemailProvider;
- private CallLogQueryHandler callLogQueryHandler;
private Context context;
private Callback callback;
@@ -55,23 +54,6 @@
hasActiveVoicemailProvider = prefs.getBoolean(PREF_KEY_HAS_ACTIVE_VOICEMAIL_PROVIDER, false);
}
- /**
- * @return whether visual voicemail is enabled. Result is cached, call asyncUpdate() to update the
- * result.
- */
- public boolean isVisualVoicemailEnabled() {
- return hasActiveVoicemailProvider;
- }
-
- /**
- * Perform an async query into the system to check the status of visual voicemail. If the status
- * has changed, Callback.onVisualVoicemailEnabledStatusChanged() will be called.
- */
- public void asyncUpdate() {
- callLogQueryHandler = new CallLogQueryHandler(context, context.getContentResolver(), this);
- callLogQueryHandler.fetchVoicemailStatus();
- }
-
@Override
public void onVoicemailStatusFetched(Cursor statusCursor) {
boolean hasActiveVoicemailProvider =
diff --git a/java/com/android/dialer/widget/ResizingTextTextView.java b/java/com/android/dialer/widget/ResizingTextTextView.java
deleted file mode 100644
index 100b2ca..0000000
--- a/java/com/android/dialer/widget/ResizingTextTextView.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source 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.widget;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.util.AttributeSet;
-import android.widget.TextView;
-import com.android.dialer.util.ViewUtil;
-
-/** TextView which resizes dynamically with respect to text length. */
-public class ResizingTextTextView extends TextView {
-
- private final int originalTextSize;
- private final int minTextSize;
-
- public ResizingTextTextView(Context context, AttributeSet attrs) {
- super(context, attrs);
- originalTextSize = (int) getTextSize();
- TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ResizingText);
- minTextSize =
- (int) a.getDimension(R.styleable.ResizingText_resizing_text_min_size, originalTextSize);
- a.recycle();
- }
-
- @Override
- protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
- super.onTextChanged(text, start, lengthBefore, lengthAfter);
- ViewUtil.resizeText(this, originalTextSize, minTextSize);
- }
-
- @Override
- protected void onSizeChanged(int w, int h, int oldw, int oldh) {
- super.onSizeChanged(w, h, oldw, oldh);
- ViewUtil.resizeText(this, originalTextSize, minTextSize);
- }
-}
diff --git a/java/com/android/dialer/widget/TextViewPreference.java b/java/com/android/dialer/widget/TextViewPreference.java
deleted file mode 100644
index 1c479d4..0000000
--- a/java/com/android/dialer/widget/TextViewPreference.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source 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.widget;
-
-import android.content.Context;
-import android.preference.Preference;
-import android.text.method.LinkMovementMethod;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.TextView;
-
-/**
- * Provides a {@link TextView} inside a preference. Useful for displaying static text which may
- * contain hyperlinks.
- */
-public class TextViewPreference extends Preference {
-
- /**
- * The resource ID of the text to be populated in the {@link TextView} when a resource ID is used.
- */
- private int textResourceId = 0;
-
- /** The text to be populated in the {@link TextView} when a {@link CharSequence} is used. */
- private CharSequence text;
-
- /** The {@link TextView} containing the text. */
- private TextView textView;
-
- /**
- * Instantiates the {@link TextViewPreference} instance.
- *
- * @param context The Context this is associated with, through which it can access the current
- * theme, resources, etc.
- * @param attrs The attributes of the XML tag that is inflating the preference.
- * @param defStyleAttr An attribute in the current theme that contains a reference to a style
- * resource that supplies default values for the view. Can be 0 to not look for defaults.
- * @param defStyleRes A resource identifier of a style resource that supplies default values for
- * the view, used only if defStyleAttr is 0 or can not be found in the theme. Can be 0 to not
- * look for defaults.
- */
- public TextViewPreference(
- Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
-
- setLayoutResource(R.layout.text_view_preference);
- }
-
- /**
- * Instantiates the {@link TextViewPreference} instance.
- *
- * @param context The Context this is associated with, through which it can access the current
- * theme, resources, etc.
- * @param attrs The attributes of the XML tag that is inflating the preference.
- * @param defStyleAttr An attribute in the current theme that contains a reference to a style
- * resource that supplies default values for the view. Can be 0 to not look for defaults.
- */
- public TextViewPreference(Context context, AttributeSet attrs, int defStyleAttr) {
- this(context, attrs, defStyleAttr, 0);
- }
-
- /**
- * Instantiates the {@link TextViewPreference} instance.
- *
- * @param context The Context this is associated with, through which it can access the current
- * theme, resources, etc.
- * @param attrs The attributes of the XML tag that is inflating the preference.
- */
- public TextViewPreference(Context context, AttributeSet attrs) {
- this(context, attrs, android.R.attr.preferenceStyle, 0);
- }
-
- /**
- * Instantiates the {@link TextViewPreference} instance.
- *
- * @param context The Context this is associated with, through which it can access the current
- * theme, resources, etc.
- */
- public TextViewPreference(Context context) {
- super(context, null);
-
- setLayoutResource(R.layout.text_view_preference);
- }
-
- /**
- * Handles binding the preference.
- *
- * @param view The view.
- */
- @Override
- protected void onBindView(View view) {
- super.onBindView(view);
- textView = (TextView) view.findViewById(R.id.text);
- if (textResourceId != 0) {
- setTitle(textResourceId);
- } else if (text != null) {
- setTitle(text);
- } else if (getTitleRes() != 0) {
- setTitle(getTitleRes());
- }
- }
-
- /**
- * Sets the preference title from a {@link CharSequence}.
- *
- * @param text The text.
- */
- @Override
- public void setTitle(CharSequence text) {
- textResourceId = 0;
- this.text = text;
- if (textView == null) {
- return;
- }
-
- textView.setMovementMethod(LinkMovementMethod.getInstance());
- textView.setText(text);
- }
-
- /**
- * Sets the preference title from a resource id.
- *
- * @param textResId The string resource Id.
- */
- @Override
- public void setTitle(int textResId) {
- textResourceId = textResId;
- setTitle(getContext().getString(textResId));
- }
-}
diff --git a/java/com/android/incallui/AndroidManifest.xml b/java/com/android/incallui/AndroidManifest.xml
index b10e044..2ce765f 100644
--- a/java/com/android/incallui/AndroidManifest.xml
+++ b/java/com/android/incallui/AndroidManifest.xml
@@ -125,10 +125,6 @@
android:exported="false"
android:name="com.android.incallui.NotificationBroadcastReceiver"/>
- <receiver
- android:exported="false"
- android:name=".ReturnToCallActionReceiver"/>
-
</application>
</manifest>
diff --git a/java/com/android/incallui/AnswerScreenPresenter.java b/java/com/android/incallui/AnswerScreenPresenter.java
index 8b789f3..b134d41 100644
--- a/java/com/android/incallui/AnswerScreenPresenter.java
+++ b/java/com/android/incallui/AnswerScreenPresenter.java
@@ -94,17 +94,7 @@
@Override
public void onAnswer(boolean answerVideoAsAudio) {
-
- DialerCall incomingCall = CallList.getInstance().getIncomingCall();
- InCallActivity inCallActivity =
- (InCallActivity) answerScreen.getAnswerScreenFragment().getActivity();
- ListenableFuture<Void> answerPrecondition;
-
- if (incomingCall != null && inCallActivity != null) {
- answerPrecondition = inCallActivity.getSpeakEasyCallManager().onNewIncomingCall(incomingCall);
- } else {
- answerPrecondition = Futures.immediateFuture(null);
- }
+ ListenableFuture<Void> answerPrecondition = Futures.immediateFuture(null);
Futures.addCallback(
answerPrecondition,
@@ -168,17 +158,6 @@
}
@Override
- public void onSpeakEasyCall() {
- LogUtil.enterBlock("AnswerScreenPresenter.onSpeakEasyCall");
- DialerCall incomingCall = CallList.getInstance().getIncomingCall();
- if (incomingCall == null) {
- LogUtil.i("AnswerScreenPresenter.onSpeakEasyCall", "incomingCall == null");
- return;
- }
- incomingCall.setIsSpeakEasyCall(true);
- }
-
- @Override
public void onAnswerAndReleaseCall() {
LogUtil.enterBlock("AnswerScreenPresenter.onAnswerAndReleaseCall");
DialerCall activeCall = CallList.getInstance().getActiveCall();
diff --git a/java/com/android/incallui/AnswerScreenPresenterStub.java b/java/com/android/incallui/AnswerScreenPresenterStub.java
index e85fdaa..3c85a1f 100644
--- a/java/com/android/incallui/AnswerScreenPresenterStub.java
+++ b/java/com/android/incallui/AnswerScreenPresenterStub.java
@@ -37,8 +37,6 @@
@Override
public void onReject() {}
- @Override
- public void onSpeakEasyCall() {}
@Override
public void onAnswerAndReleaseCall() {}
diff --git a/java/com/android/incallui/CallButtonPresenter.java b/java/com/android/incallui/CallButtonPresenter.java
index 0fa833e..e72f4ec 100644
--- a/java/com/android/incallui/CallButtonPresenter.java
+++ b/java/com/android/incallui/CallButtonPresenter.java
@@ -551,7 +551,7 @@
.getCallList()
.getAllCalls()
.stream()
- .noneMatch(c -> c != null && c.isSpeakEasyCall())
+ .noneMatch(c -> c != null)
&& call.can(android.telecom.Call.Details.CAPABILITY_MERGE_CONFERENCE);
final boolean showUpgradeToVideo = !isVideo && (hasVideoCallCapabilities(call));
final boolean showDowngradeToAudio = isVideo && isDowngradeToAudioSupported(call);
diff --git a/java/com/android/incallui/CallCardPresenter.java b/java/com/android/incallui/CallCardPresenter.java
index dd1fc4f..fb7dc74 100644
--- a/java/com/android/incallui/CallCardPresenter.java
+++ b/java/com/android/incallui/CallCardPresenter.java
@@ -46,7 +46,6 @@
import com.android.contacts.common.ContactsUtils;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.contacts.ContactsComponent;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
@@ -98,19 +97,11 @@
*/
private static final long ACCESSIBILITY_ANNOUNCEMENT_DELAY_MILLIS = 500;
- /** Flag to allow the user's current location to be shown during emergency calls. */
- private static final String CONFIG_ENABLE_EMERGENCY_LOCATION = "config_enable_emergency_location";
-
- private static final boolean CONFIG_ENABLE_EMERGENCY_LOCATION_DEFAULT = true;
-
/**
* Make it possible to not get location during an emergency call if the battery is too low, since
* doing so could trigger gps and thus potentially cause the phone to die in the middle of the
* call.
*/
- private static final String CONFIG_MIN_BATTERY_PERCENT_FOR_EMERGENCY_LOCATION =
- "min_battery_percent_for_emergency_location";
-
private static final long CONFIG_MIN_BATTERY_PERCENT_FOR_EMERGENCY_LOCATION_DEFAULT = 10;
private final Context context;
@@ -764,12 +755,6 @@
}
private boolean shouldShowLocation() {
- if (!ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean(CONFIG_ENABLE_EMERGENCY_LOCATION, CONFIG_ENABLE_EMERGENCY_LOCATION_DEFAULT)) {
- LogUtil.i("CallCardPresenter.getLocationFragment", "disabled by config.");
- return false;
- }
if (!isPotentialEmergencyCall()) {
LogUtil.i("CallCardPresenter.getLocationFragment", "shouldn't show location");
return false;
@@ -836,12 +821,7 @@
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batteryPercent = (100f * level) / scale;
- long threshold =
- ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getLong(
- CONFIG_MIN_BATTERY_PERCENT_FOR_EMERGENCY_LOCATION,
- CONFIG_MIN_BATTERY_PERCENT_FOR_EMERGENCY_LOCATION_DEFAULT);
+ long threshold = CONFIG_MIN_BATTERY_PERCENT_FOR_EMERGENCY_LOCATION_DEFAULT;
LogUtil.i(
"CallCardPresenter.isBatteryTooLowForEmergencyLocation",
"percent charged: " + batteryPercent + ", min required charge: " + threshold);
diff --git a/java/com/android/incallui/CallerInfoAsyncQuery.java b/java/com/android/incallui/CallerInfoAsyncQuery.java
index 35011cb..69933a0 100644
--- a/java/com/android/incallui/CallerInfoAsyncQuery.java
+++ b/java/com/android/incallui/CallerInfoAsyncQuery.java
@@ -38,7 +38,6 @@
import com.android.dialer.phonenumbercache.ContactInfoHelper;
import com.android.dialer.phonenumbercache.PhoneNumberCache;
import com.android.dialer.phonenumberutil.PhoneNumberHelper;
-import com.android.dialer.strictmode.StrictModeUtils;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
@@ -188,7 +187,7 @@
OnQueryCompleteListener listener,
Object cookie) {
Trace.beginSection("CallerInfoAsyncQuery.startOtherDirectoriesQuery");
- long[] directoryIds = StrictModeUtils.bypass(() -> getDirectoryIds(context));
+ long[] directoryIds = getDirectoryIds(context);
int size = directoryIds.length;
if (size == 0) {
Trace.endSection();
diff --git a/java/com/android/incallui/InCallActivity.java b/java/com/android/incallui/InCallActivity.java
index f23f445..4f71611 100644
--- a/java/com/android/incallui/InCallActivity.java
+++ b/java/com/android/incallui/InCallActivity.java
@@ -61,7 +61,6 @@
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.DialerExecutorComponent;
import com.android.dialer.common.concurrent.UiListener;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.logging.Logger;
import com.android.dialer.logging.ScreenEvent;
import com.android.dialer.preferredsim.PreferredAccountRecorder;
@@ -92,7 +91,6 @@
import com.android.incallui.rtt.protocol.RttCallScreen;
import com.android.incallui.rtt.protocol.RttCallScreenDelegate;
import com.android.incallui.rtt.protocol.RttCallScreenDelegateFactory;
-import com.android.incallui.speakeasy.SpeakEasyCallManager;
import com.android.incallui.telecomeventui.InternationalCallOnWifiDialogFragment;
import com.android.incallui.video.bindings.VideoBindings;
import com.android.incallui.video.protocol.VideoCallScreen;
@@ -145,8 +143,6 @@
private boolean didShowInCallScreen;
private boolean didShowVideoCallScreen;
private boolean didShowRttCallScreen;
- private boolean didShowSpeakEasyScreen;
- private String lastShownSpeakEasyScreenUniqueCallid = "";
private boolean dismissKeyguard;
private boolean isInShowMainInCallFragment;
private boolean isRecreating; // whether the activity is going to be recreated
@@ -155,7 +151,6 @@
private boolean touchDownWhenPseudoScreenOff;
private int[] backgroundDrawableColors;
@DialpadRequestType private int showDialpadRequest = DIALPAD_REQUEST_NONE;
- private SpeakEasyCallManager speakEasyCallManager;
private DialogFragment rttRequestDialogFragment;
public static Intent getIntent(
@@ -195,7 +190,6 @@
didShowInCallScreen = bundle.getBoolean(KeysForSavedInstance.DID_SHOW_IN_CALL_SCREEN);
didShowVideoCallScreen = bundle.getBoolean(KeysForSavedInstance.DID_SHOW_VIDEO_CALL_SCREEN);
didShowRttCallScreen = bundle.getBoolean(KeysForSavedInstance.DID_SHOW_RTT_CALL_SCREEN);
- didShowSpeakEasyScreen = bundle.getBoolean(KeysForSavedInstance.DID_SHOW_SPEAK_EASY_SCREEN);
}
setWindowFlags();
@@ -418,7 +412,6 @@
out.putBoolean(KeysForSavedInstance.DID_SHOW_IN_CALL_SCREEN, didShowInCallScreen);
out.putBoolean(KeysForSavedInstance.DID_SHOW_VIDEO_CALL_SCREEN, didShowVideoCallScreen);
out.putBoolean(KeysForSavedInstance.DID_SHOW_RTT_CALL_SCREEN, didShowRttCallScreen);
- out.putBoolean(KeysForSavedInstance.DID_SHOW_SPEAK_EASY_SCREEN, didShowSpeakEasyScreen);
super.onSaveInstanceState(out);
isVisible = false;
@@ -935,8 +928,7 @@
public boolean getCallCardFragmentVisible() {
return didShowInCallScreen
|| didShowVideoCallScreen
- || didShowRttCallScreen
- || didShowSpeakEasyScreen;
+ || didShowRttCallScreen;
}
public void dismissKeyguard(boolean dismiss) {
@@ -1209,21 +1201,18 @@
ShouldShowUiResult shouldShowAnswerUi = getShouldShowAnswerUi();
ShouldShowUiResult shouldShowVideoUi = getShouldShowVideoUi();
ShouldShowUiResult shouldShowRttUi = getShouldShowRttUi();
- ShouldShowUiResult shouldShowSpeakEasyUi = getShouldShowSpeakEasyUi();
LogUtil.i(
"InCallActivity.showMainInCallFragment",
"shouldShowAnswerUi: %b, shouldShowRttUi: %b, shouldShowVideoUi: %b, "
- + "shouldShowSpeakEasyUi: %b, didShowAnswerScreen: %b, didShowInCallScreen: %b, "
- + "didShowRttCallScreen: %b, didShowVideoCallScreen: %b, didShowSpeakEasyScreen: %b",
+ + "didShowAnswerScreen: %b, didShowInCallScreen: %b, "
+ + "didShowRttCallScreen: %b, didShowVideoCallScreen: %b",
shouldShowAnswerUi.shouldShow,
shouldShowRttUi.shouldShow,
shouldShowVideoUi.shouldShow,
- shouldShowSpeakEasyUi.shouldShow,
didShowAnswerScreen,
didShowInCallScreen,
didShowRttCallScreen,
- didShowVideoCallScreen,
- didShowSpeakEasyScreen);
+ didShowVideoCallScreen);
// Only video call ui allows orientation change.
setAllowOrientationChange(shouldShowVideoUi.shouldShow);
@@ -1233,31 +1222,21 @@
didChange = hideInCallScreenFragment(transaction);
didChange |= hideVideoCallScreenFragment(transaction);
didChange |= hideRttCallScreenFragment(transaction);
- didChange |= hideSpeakEasyFragment(transaction);
didChange |= showAnswerScreenFragment(transaction, shouldShowAnswerUi.call);
} else if (shouldShowVideoUi.shouldShow) {
didChange = hideInCallScreenFragment(transaction);
didChange |= showVideoCallScreenFragment(transaction, shouldShowVideoUi.call);
didChange |= hideRttCallScreenFragment(transaction);
- didChange |= hideSpeakEasyFragment(transaction);
didChange |= hideAnswerScreenFragment(transaction);
} else if (shouldShowRttUi.shouldShow) {
didChange = hideInCallScreenFragment(transaction);
didChange |= hideVideoCallScreenFragment(transaction);
didChange |= hideAnswerScreenFragment(transaction);
- didChange |= hideSpeakEasyFragment(transaction);
didChange |= showRttCallScreenFragment(transaction, shouldShowRttUi.call);
- } else if (shouldShowSpeakEasyUi.shouldShow) {
- didChange = hideInCallScreenFragment(transaction);
- didChange |= hideVideoCallScreenFragment(transaction);
- didChange |= hideAnswerScreenFragment(transaction);
- didChange |= hideRttCallScreenFragment(transaction);
- didChange |= showSpeakEasyFragment(transaction, shouldShowSpeakEasyUi.call);
} else {
didChange = showInCallScreenFragment(transaction);
didChange |= hideVideoCallScreenFragment(transaction);
didChange |= hideRttCallScreenFragment(transaction);
- didChange |= hideSpeakEasyFragment(transaction);
didChange |= hideAnswerScreenFragment(transaction);
}
@@ -1271,104 +1250,9 @@
Trace.endSection();
}
- private boolean showSpeakEasyFragment(FragmentTransaction transaction, DialerCall call) {
-
- if (didShowSpeakEasyScreen) {
- if (lastShownSpeakEasyScreenUniqueCallid.equals(call.getUniqueCallId())) {
- LogUtil.i("InCallActivity.showSpeakEasyFragment", "found existing fragment");
- return false;
- }
- hideSpeakEasyFragment(transaction);
- LogUtil.i("InCallActivity.showSpeakEasyFragment", "hid existing fragment");
- }
-
- Optional<Fragment> speakEasyFragment = speakEasyCallManager.getSpeakEasyFragment(call);
- if (speakEasyFragment.isPresent()) {
- transaction.add(R.id.main, speakEasyFragment.get(), Tags.SPEAK_EASY_SCREEN);
- didShowSpeakEasyScreen = true;
- lastShownSpeakEasyScreenUniqueCallid = call.getUniqueCallId();
- LogUtil.i(
- "InCallActivity.showSpeakEasyFragment",
- "set fragment for call %s",
- lastShownSpeakEasyScreenUniqueCallid);
- return true;
- }
- return false;
- }
-
- private Fragment getSpeakEasyScreen() {
- return getSupportFragmentManager().findFragmentByTag(Tags.SPEAK_EASY_SCREEN);
- }
-
- private boolean hideSpeakEasyFragment(FragmentTransaction transaction) {
- if (!didShowSpeakEasyScreen) {
- return false;
- }
-
- Fragment speakEasyFragment = getSpeakEasyScreen();
-
- if (speakEasyFragment != null) {
- transaction.remove(speakEasyFragment);
- didShowSpeakEasyScreen = false;
- return true;
- }
- return false;
- }
-
- @VisibleForTesting
- public void setSpeakEasyCallManager(SpeakEasyCallManager speakEasyCallManager) {
- this.speakEasyCallManager = speakEasyCallManager;
- }
-
- @Nullable
- public SpeakEasyCallManager getSpeakEasyCallManager() {
- if (this.speakEasyCallManager == null) {
- this.speakEasyCallManager = InCallPresenter.getInstance().getSpeakEasyCallManager();
- }
- return speakEasyCallManager;
- }
-
- private ShouldShowUiResult getShouldShowSpeakEasyUi() {
- SpeakEasyCallManager speakEasyCallManager = getSpeakEasyCallManager();
-
- if (speakEasyCallManager == null) {
- return new ShouldShowUiResult(false, null);
- }
-
- DialerCall call =
- CallList.getInstance().getIncomingCall() != null
- ? CallList.getInstance().getIncomingCall()
- : CallList.getInstance().getActiveCall();
-
- if (call == null) {
- // This is a special case where the first call is not automatically resumed
- // after the second active call is remotely disconnected.
- DialerCall backgroundCall = CallList.getInstance().getBackgroundCall();
- if (backgroundCall != null && backgroundCall.isSpeakEasyCall()) {
- LogUtil.i("InCallActivity.getShouldShowSpeakEasyUi", "taking call off hold");
-
- backgroundCall.unhold();
- return new ShouldShowUiResult(true, backgroundCall);
- }
-
- return new ShouldShowUiResult(false, call);
- }
-
- if (!call.isSpeakEasyCall() || !call.isSpeakEasyEligible()) {
- return new ShouldShowUiResult(false, call);
- }
-
- Optional<Fragment> speakEasyFragment = speakEasyCallManager.getSpeakEasyFragment(call);
-
- if (!speakEasyFragment.isPresent()) {
- return new ShouldShowUiResult(false, call);
- }
- return new ShouldShowUiResult(true, call);
- }
-
private ShouldShowUiResult getShouldShowAnswerUi() {
DialerCall call = CallList.getInstance().getIncomingCall();
- if (call != null && !call.isSpeakEasyCall()) {
+ if (call != null) {
LogUtil.i("InCallActivity.getShouldShowAnswerUi", "found incoming call");
return new ShouldShowUiResult(true, call);
}
@@ -1478,9 +1362,7 @@
isVideoUpgradeRequest,
call.getVideoTech().isSelfManagedCamera(),
shouldAllowAnswerAndRelease(call),
- CallList.getInstance().getBackgroundCall() != null,
- getSpeakEasyCallManager().isAvailable(getApplicationContext())
- && call.isSpeakEasyEligible());
+ CallList.getInstance().getBackgroundCall() != null);
transaction.add(R.id.main, answerScreen.getAnswerScreenFragment(), Tags.ANSWER_SCREEN);
Logger.get(this).logScreenView(ScreenEvent.Type.INCOMING_CALL, this);
@@ -1502,12 +1384,6 @@
LogUtil.i("InCallActivity.shouldAllowAnswerAndRelease", "video call");
return false;
}
- if (!ConfigProviderComponent.get(this)
- .getConfigProvider()
- .getBoolean(ConfigNames.ANSWER_AND_RELEASE_ENABLED, true)) {
- LogUtil.i("InCallActivity.shouldAllowAnswerAndRelease", "disabled by config");
- return false;
- }
return true;
}
@@ -1705,7 +1581,6 @@
static final String DID_SHOW_IN_CALL_SCREEN = "did_show_in_call_screen";
static final String DID_SHOW_VIDEO_CALL_SCREEN = "did_show_video_call_screen";
static final String DID_SHOW_RTT_CALL_SCREEN = "did_show_rtt_call_screen";
- static final String DID_SHOW_SPEAK_EASY_SCREEN = "did_show_speak_easy_screen";
}
/** Request codes for pending intents. */
@@ -1724,14 +1599,9 @@
static final String VIDEO_CALL_SCREEN = "tag_video_call_screen";
static final String RTT_CALL_SCREEN = "tag_rtt_call_screen";
static final String POST_CHAR_DIALOG_FRAGMENT = "tag_post_char_dialog_fragment";
- static final String SPEAK_EASY_SCREEN = "tag_speak_easy_screen";
static final String RTT_REQUEST_DIALOG = "tag_rtt_request_dialog";
}
- private static final class ConfigNames {
- static final String ANSWER_AND_RELEASE_ENABLED = "answer_and_release_enabled";
- }
-
private static final class SelectPhoneAccountListener
extends SelectPhoneAccountDialogFragment.SelectPhoneAccountListener {
private static final String TAG = SelectPhoneAccountListener.class.getCanonicalName();
diff --git a/java/com/android/incallui/InCallPresenter.java b/java/com/android/incallui/InCallPresenter.java
index fb13b77..3406fc7 100644
--- a/java/com/android/incallui/InCallPresenter.java
+++ b/java/com/android/incallui/InCallPresenter.java
@@ -52,7 +52,6 @@
import com.android.dialer.enrichedcall.EnrichedCallComponent;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.InteractionEvent;
-import com.android.dialer.logging.Logger;
import com.android.dialer.postcall.PostCall;
import com.android.dialer.telecom.TelecomUtil;
import com.android.dialer.util.TouchPointManager;
@@ -67,7 +66,6 @@
import com.android.incallui.disconnectdialog.DisconnectMessage;
import com.android.incallui.incalluilock.InCallUiLock;
import com.android.incallui.spam.SpamCallListListener;
-import com.android.incallui.speakeasy.SpeakEasyCallManager;
import com.android.incallui.telecomeventui.InternationalCallOnWifiDialogActivity;
import com.android.incallui.telecomeventui.InternationalCallOnWifiDialogFragment;
import com.android.incallui.videosurface.bindings.VideoSurfaceBindings;
@@ -90,8 +88,6 @@
*/
public class InCallPresenter implements CallList.Listener, AudioModeProvider.AudioModeListener {
- private static final String CALL_CONFIGURATION_EXTRA = "call_configuration";
-
private static final Bundle EMPTY_EXTRAS = new Bundle();
private static InCallPresenter inCallPresenter;
@@ -260,8 +256,6 @@
private VideoSurfaceTexture localVideoSurfaceTexture;
private VideoSurfaceTexture remoteVideoSurfaceTexture;
- private SpeakEasyCallManager speakEasyCallManager;
-
private boolean addCallClicked = false;
private boolean automaticallyMutedByAddCall = false;
@@ -328,8 +322,7 @@
StatusBarNotifier statusBarNotifier,
ExternalCallNotifier externalCallNotifier,
ContactInfoCache contactInfoCache,
- ProximitySensor proximitySensor,
- @NonNull SpeakEasyCallManager speakEasyCallManager) {
+ ProximitySensor proximitySensor) {
Trace.beginSection("InCallPresenter.setUp");
if (serviceConnected) {
LogUtil.i("InCallPresenter.setUp", "New service connection replacing existing one.");
@@ -386,8 +379,6 @@
this.callList.addListener(activeCallsListener);
VideoPauseController.getInstance().setUp(this);
-
- this.speakEasyCallManager = speakEasyCallManager;
this.context
.getSystemService(TelephonyManager.class)
.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
@@ -406,66 +397,6 @@
}
/**
- * Return whether we should start call in bubble mode and not show InCallActivity. The call mode
- * should be set in CallConfiguration in EXTRA_OUTGOING_CALL_EXTRAS when starting a call intent.
- */
- public boolean shouldStartInBubbleMode() {
- if (!ReturnToCallController.isEnabled(context)) {
- return false;
- }
-
- // We only start in Bubble mode for outgoing call
- DialerCall dialerCall = callList.getPendingOutgoingCall();
- if (dialerCall == null) {
- dialerCall = callList.getOutgoingCall();
- }
- // Outgoing call can be disconnected and reason will be shown in toast
- if (dialerCall == null) {
- dialerCall = callList.getDisconnectedCall();
- }
- if (dialerCall == null) {
- return false;
- }
- if (dialerCall.isEmergencyCall()) {
- return false;
- }
-
- Bundle extras = dialerCall.getIntentExtras();
- boolean result = shouldStartInBubbleModeWithExtras(extras);
- if (result) {
- Logger.get(context)
- .logCallImpression(
- DialerImpression.Type.START_CALL_IN_BUBBLE_MODE,
- dialerCall.getUniqueCallId(),
- dialerCall.getTimeAddedMs());
- }
- return result;
- }
-
- private boolean shouldStartInBubbleModeWithExtras(Bundle outgoingExtras) {
- if (!ReturnToCallController.isEnabled(context)) {
- return false;
- }
-
- if (outgoingExtras == null) {
- return false;
- }
- byte[] callConfigurationByteArray = outgoingExtras.getByteArray(CALL_CONFIGURATION_EXTRA);
- if (callConfigurationByteArray == null) {
- return false;
- }
- try {
- CallConfiguration callConfiguration = CallConfiguration.parseFrom(callConfigurationByteArray);
- LogUtil.i(
- "InCallPresenter.shouldStartInBubbleMode",
- "call mode: " + callConfiguration.getCallMode());
- return callConfiguration.getCallMode() == Mode.BUBBLE;
- } catch (InvalidProtocolBufferException e) {
- return false;
- }
- }
-
- /**
* Called when the telephony service has disconnected from us. This will happen when there are no
* more active calls. However, we may still want to continue showing the UI for certain cases like
* showing "Call Ended". What we really want is to wait for the activity and the service to both
@@ -597,10 +528,6 @@
Trace.endSection();
}
- public SpeakEasyCallManager getSpeakEasyCallManager() {
- return this.speakEasyCallManager;
- }
-
public void setManageConferenceActivity(
@Nullable ManageConferenceActivity manageConferenceActivity) {
this.manageConferenceActivity = manageConferenceActivity;
@@ -866,13 +793,6 @@
}
@Override
- public void onSpeakEasyStateChange() {
- if (inCallActivity != null) {
- inCallActivity.onPrimaryCallStateChanged();
- }
- }
-
- @Override
public void onSessionModificationStateChange(DialerCall call) {
int newState = call.getVideoTech().getSessionModificationState();
LogUtil.i("InCallPresenter.onSessionModificationStateChange", "state: %d", newState);
@@ -1437,7 +1357,7 @@
inCallActivity.dismissPendingDialogs();
}
- if ((showCallUi || showAccountPicker) && !shouldStartInBubbleMode()) {
+ if (showCallUi || showAccountPicker) {
LogUtil.i("InCallPresenter.startOrFinishUi", "Start in call UI");
showInCall(false /* showDialpad */, !showAccountPicker /* newOutgoingCall */);
} else if (newState == InCallState.NO_CALLS) {
@@ -1598,12 +1518,6 @@
setBoundAndWaitingForOutgoingCall(true, accountHandle);
- if (shouldStartInBubbleModeWithExtras(extras)) {
- LogUtil.i("InCallPresenter.maybeStartRevealAnimation", "shouldStartInBubbleMode");
- // Show bubble instead of in call UI
- return;
- }
-
final Intent activityIntent =
InCallActivity.getIntent(context, false, true, false /* forFullScreen */);
activityIntent.putExtra(TouchPointManager.TOUCH_POINT, touchPoint);
diff --git a/java/com/android/incallui/InCallServiceImpl.java b/java/com/android/incallui/InCallServiceImpl.java
index b225d53..9f2c92a 100644
--- a/java/com/android/incallui/InCallServiceImpl.java
+++ b/java/com/android/incallui/InCallServiceImpl.java
@@ -23,15 +23,12 @@
import android.telecom.Call;
import android.telecom.CallAudioState;
import android.telecom.InCallService;
-import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler;
import com.android.dialer.feedback.FeedbackComponent;
import com.android.incallui.audiomode.AudioModeProvider;
import com.android.incallui.call.CallList;
import com.android.incallui.call.CallRecorder;
import com.android.incallui.call.ExternalCallList;
import com.android.incallui.call.TelecomAdapter;
-import com.android.incallui.speakeasy.SpeakEasyCallManager;
-import com.android.incallui.speakeasy.SpeakEasyComponent;
/**
* Used to receive updates about calls from the Telecom component. This service is bound to Telecom
@@ -41,13 +38,7 @@
*/
public class InCallServiceImpl extends InCallService {
- private ReturnToCallController returnToCallController;
private CallList.Listener feedbackListener;
- // We only expect there to be one speakEasyCallManager to be instantiated at a time.
- // We did not use a singleton SpeakEasyCallManager to avoid holding on to state beyond the
- // lifecycle of this service, because the singleton is associated with the state of the
- // Application, not this service.
- private SpeakEasyCallManager speakEasyCallManager;
@Override
public void onCallAudioStateChanged(CallAudioState audioState) {
@@ -73,7 +64,6 @@
@Override
public void onCallRemoved(Call call) {
Trace.beginSection("InCallServiceImpl.onCallRemoved");
- speakEasyCallManager.onCallRemoved(CallList.getInstance().getDialerCallFromTelecomCall(call));
InCallPresenter.getInstance().onCallRemoved(call);
Trace.endSection();
@@ -89,7 +79,6 @@
@Override
public void onCreate() {
super.onCreate();
- this.speakEasyCallManager = SpeakEasyComponent.get(this).speakEasyCallManager();
}
@Override
@@ -107,14 +96,11 @@
new ExternalCallNotifier(context, contactInfoCache),
contactInfoCache,
new ProximitySensor(
- context, AudioModeProvider.getInstance(), new AccelerometerListener(context)),
- speakEasyCallManager);
+ context, AudioModeProvider.getInstance(), new AccelerometerListener(context)));
InCallPresenter.getInstance().onServiceBind();
InCallPresenter.getInstance().maybeStartRevealAnimation(intent);
TelecomAdapter.getInstance().setInCallService(this);
CallRecorder.getInstance().setUp(context);
- returnToCallController =
- new ReturnToCallController(this, ContactInfoCache.getInstance(context));
feedbackListener = FeedbackComponent.get(context).getCallFeedbackListener();
CallList.getInstance().addListener(feedbackListener);
@@ -141,10 +127,6 @@
// Tear down the InCall system
InCallPresenter.getInstance().tearDown();
TelecomAdapter.getInstance().clearInCallService();
- if (returnToCallController != null) {
- returnToCallController.tearDown();
- returnToCallController = null;
- }
if (feedbackListener != null) {
CallList.getInstance().removeListener(feedbackListener);
feedbackListener = null;
diff --git a/java/com/android/incallui/NotificationBroadcastReceiver.java b/java/com/android/incallui/NotificationBroadcastReceiver.java
index 5051231..b910dfb 100644
--- a/java/com/android/incallui/NotificationBroadcastReceiver.java
+++ b/java/com/android/incallui/NotificationBroadcastReceiver.java
@@ -32,7 +32,6 @@
import com.android.incallui.call.CallList;
import com.android.incallui.call.DialerCall;
import com.android.incallui.call.TelecomAdapter;
-import com.android.incallui.speakeasy.SpeakEasyCallManager;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
@@ -65,8 +64,6 @@
public static final String ACTION_TURN_ON_SPEAKER = "com.android.incallui.ACTION_TURN_ON_SPEAKER";
public static final String ACTION_TURN_OFF_SPEAKER =
"com.android.incallui.ACTION_TURN_OFF_SPEAKER";
- public static final String ACTION_ANSWER_SPEAKEASY_CALL =
- "com.android.incallui.ACTION_ANSWER_SPEAKEASY_CALL";
public static final String ACTION_PULL_EXTERNAL_CALL =
"com.android.incallui.ACTION_PULL_EXTERNAL_CALL";
@@ -84,9 +81,6 @@
answerIncomingCall(VideoProfile.STATE_BIDIRECTIONAL, context);
} else if (action.equals(ACTION_ANSWER_VOICE_INCOMING_CALL)) {
answerIncomingCall(VideoProfile.STATE_AUDIO_ONLY, context);
- } else if (action.equals(ACTION_ANSWER_SPEAKEASY_CALL)) {
- markIncomingCallAsSpeakeasyCall();
- answerIncomingCall(VideoProfile.STATE_AUDIO_ONLY, context);
} else if (action.equals(ACTION_DECLINE_INCOMING_CALL)) {
Logger.get(context)
.logImpression(DialerImpression.Type.REJECT_INCOMING_CALL_FROM_NOTIFICATION);
@@ -152,19 +146,6 @@
}
}
- private void markIncomingCallAsSpeakeasyCall() {
- CallList callList = InCallPresenter.getInstance().getCallList();
- if (callList == null) {
- LogUtil.e(
- "NotificationBroadcastReceiver.markIncomingCallAsSpeakeasyCall", "call list is empty");
- } else {
- DialerCall call = callList.getIncomingCall();
- if (call != null) {
- call.setIsSpeakEasyCall(true);
- }
- }
- }
-
private void answerIncomingCall(int videoState, @NonNull Context context) {
CallList callList = InCallPresenter.getInstance().getCallList();
if (callList == null) {
@@ -174,18 +155,8 @@
DialerCall call = callList.getIncomingCall();
if (call != null) {
- SpeakEasyCallManager speakEasyCallManager =
- InCallPresenter.getInstance().getSpeakEasyCallManager();
- ListenableFuture<Void> answerPrecondition;
-
- if (speakEasyCallManager != null) {
- answerPrecondition = speakEasyCallManager.onNewIncomingCall(call);
- } else {
- answerPrecondition = Futures.immediateFuture(null);
- }
-
Futures.addCallback(
- answerPrecondition,
+ Futures.immediateFuture(null),
new FutureCallback<Void>() {
@Override
public void onSuccess(Void result) {
diff --git a/java/com/android/incallui/ReturnToCallActionReceiver.java b/java/com/android/incallui/ReturnToCallActionReceiver.java
deleted file mode 100644
index d6014aa..0000000
--- a/java/com/android/incallui/ReturnToCallActionReceiver.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source 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.incallui;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.telecom.CallAudioState;
-import com.android.dialer.common.Assert;
-import com.android.dialer.common.LogUtil;
-import com.android.dialer.logging.DialerImpression;
-import com.android.dialer.logging.Logger;
-import com.android.incallui.audiomode.AudioModeProvider;
-import com.android.incallui.call.CallList;
-import com.android.incallui.call.DialerCall;
-import com.android.incallui.call.TelecomAdapter;
-
-/** Handles clicks on the return-to-call bubble */
-public class ReturnToCallActionReceiver extends BroadcastReceiver {
-
- public static final String ACTION_RETURN_TO_CALL = "returnToCallV2";
- public static final String ACTION_TOGGLE_SPEAKER = "toggleSpeakerV2";
- public static final String ACTION_SHOW_AUDIO_ROUTE_SELECTOR = "showAudioRouteSelectorV2";
- public static final String ACTION_TOGGLE_MUTE = "toggleMuteV2";
- public static final String ACTION_END_CALL = "endCallV2";
-
- @Override
- public void onReceive(Context context, Intent intent) {
- switch (intent.getAction()) {
- case ACTION_RETURN_TO_CALL:
- returnToCall(context);
- break;
- case ACTION_TOGGLE_SPEAKER:
- toggleSpeaker(context);
- break;
- case ACTION_SHOW_AUDIO_ROUTE_SELECTOR:
- showAudioRouteSelector(context);
- break;
- case ACTION_TOGGLE_MUTE:
- toggleMute(context);
- break;
- case ACTION_END_CALL:
- endCall(context);
- break;
- default:
- throw Assert.createIllegalStateFailException(
- "Invalid intent action: " + intent.getAction());
- }
- }
-
- private void returnToCall(Context context) {
- DialerCall call = getCall();
- Logger.get(context)
- .logCallImpression(
- DialerImpression.Type.BUBBLE_V2_RETURN_TO_CALL,
- call != null ? call.getUniqueCallId() : "",
- call != null ? call.getTimeAddedMs() : 0);
-
- Intent activityIntent = InCallActivity.getIntent(context, false, false, false);
- activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- context.startActivity(activityIntent);
- }
-
- private void toggleSpeaker(Context context) {
- CallAudioState audioState = AudioModeProvider.getInstance().getAudioState();
-
- if ((audioState.getSupportedRouteMask() & CallAudioState.ROUTE_BLUETOOTH)
- == CallAudioState.ROUTE_BLUETOOTH) {
- LogUtil.w(
- "ReturnToCallActionReceiver.toggleSpeaker",
- "toggleSpeaker() called when bluetooth available."
- + " Probably should have shown audio route selector");
- }
-
- DialerCall call = getCall();
-
- int newRoute;
- if (audioState.getRoute() == CallAudioState.ROUTE_SPEAKER) {
- newRoute = CallAudioState.ROUTE_WIRED_OR_EARPIECE;
- Logger.get(context)
- .logCallImpression(
- DialerImpression.Type.BUBBLE_V2_WIRED_OR_EARPIECE,
- call != null ? call.getUniqueCallId() : "",
- call != null ? call.getTimeAddedMs() : 0);
- } else {
- newRoute = CallAudioState.ROUTE_SPEAKER;
- Logger.get(context)
- .logCallImpression(
- DialerImpression.Type.BUBBLE_V2_SPEAKERPHONE,
- call != null ? call.getUniqueCallId() : "",
- call != null ? call.getTimeAddedMs() : 0);
- }
- TelecomAdapter.getInstance().setAudioRoute(newRoute);
- }
-
- public void showAudioRouteSelector(Context context) {
- Intent intent = new Intent(context, AudioRouteSelectorActivity.class);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
- context.startActivity(intent);
- }
-
- private void toggleMute(Context context) {
- DialerCall call = getCall();
- boolean shouldMute = !AudioModeProvider.getInstance().getAudioState().isMuted();
- Logger.get(context)
- .logCallImpression(
- shouldMute
- ? DialerImpression.Type.BUBBLE_V2_MUTE_CALL
- : DialerImpression.Type.BUBBLE_V2_UNMUTE_CALL,
- call != null ? call.getUniqueCallId() : "",
- call != null ? call.getTimeAddedMs() : 0);
- TelecomAdapter.getInstance().mute(shouldMute);
- }
-
- private void endCall(Context context) {
- DialerCall call = getCall();
-
- Logger.get(context)
- .logCallImpression(
- DialerImpression.Type.BUBBLE_V2_END_CALL,
- call != null ? call.getUniqueCallId() : "",
- call != null ? call.getTimeAddedMs() : 0);
- if (call != null) {
- call.disconnect();
- }
- }
-
- private DialerCall getCall() {
- CallList callList = InCallPresenter.getInstance().getCallList();
- if (callList != null) {
- DialerCall call = callList.getOutgoingCall();
- if (call == null) {
- call = callList.getActiveOrBackgroundCall();
- }
- if (call != null) {
- return call;
- }
- }
- return null;
- }
-}
diff --git a/java/com/android/incallui/ReturnToCallController.java b/java/com/android/incallui/ReturnToCallController.java
deleted file mode 100644
index addde55..0000000
--- a/java/com/android/incallui/ReturnToCallController.java
+++ /dev/null
@@ -1,435 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source 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.incallui;
-
-import android.app.PendingIntent;
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.Icon;
-import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.annotation.VisibleForTesting;
-import android.telecom.CallAudioState;
-import android.text.TextUtils;
-import com.android.bubble.Bubble;
-import com.android.bubble.BubbleComponent;
-import com.android.bubble.BubbleInfo;
-import com.android.bubble.BubbleInfo.Action;
-import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderComponent;
-import com.android.dialer.contacts.ContactsComponent;
-import com.android.dialer.lettertile.LetterTileDrawable;
-import com.android.dialer.telecom.TelecomUtil;
-import com.android.dialer.theme.base.ThemeComponent;
-import com.android.incallui.ContactInfoCache.ContactCacheEntry;
-import com.android.incallui.ContactInfoCache.ContactInfoCacheCallback;
-import com.android.incallui.InCallPresenter.InCallState;
-import com.android.incallui.InCallPresenter.InCallUiListener;
-import com.android.incallui.audiomode.AudioModeProvider;
-import com.android.incallui.audiomode.AudioModeProvider.AudioModeListener;
-import com.android.incallui.call.CallList;
-import com.android.incallui.call.CallList.Listener;
-import com.android.incallui.call.DialerCall;
-import com.android.incallui.speakerbuttonlogic.SpeakerButtonInfo;
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Listens for events relevant to the return-to-call bubble and updates the bubble's state as
- * necessary.
- *
- * <p>Bubble shows when one of following happens: 1. a new outgoing/ongoing call appears 2. leave
- * in-call UI with an outgoing/ongoing call
- *
- * <p>Bubble hides when one of following happens: 1. a call disconnect and there is no more
- * outgoing/ongoing call 2. show in-call UI
- */
-public class ReturnToCallController implements InCallUiListener, Listener, AudioModeListener {
-
- private final Context context;
-
- @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
- Bubble bubble;
-
- private static Boolean canShowBubblesForTesting = null;
-
- private CallAudioState audioState;
-
- private final PendingIntent toggleSpeaker;
- private final PendingIntent showSpeakerSelect;
- private final PendingIntent toggleMute;
- private final PendingIntent endCall;
- private final PendingIntent fullScreen;
-
- private final ContactInfoCache contactInfoCache;
-
- private InCallState inCallState;
-
- public static boolean isEnabled(Context context) {
- return ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean("enable_return_to_call_bubble_v2", false);
- }
-
- public ReturnToCallController(Context context, ContactInfoCache contactInfoCache) {
- this.context = context;
- this.contactInfoCache = contactInfoCache;
-
- toggleSpeaker = createActionIntent(ReturnToCallActionReceiver.ACTION_TOGGLE_SPEAKER);
- showSpeakerSelect =
- createActionIntent(ReturnToCallActionReceiver.ACTION_SHOW_AUDIO_ROUTE_SELECTOR);
- toggleMute = createActionIntent(ReturnToCallActionReceiver.ACTION_TOGGLE_MUTE);
- endCall = createActionIntent(ReturnToCallActionReceiver.ACTION_END_CALL);
- fullScreen = createActionIntent(ReturnToCallActionReceiver.ACTION_RETURN_TO_CALL);
-
- AudioModeProvider.getInstance().addListener(this);
- audioState = AudioModeProvider.getInstance().getAudioState();
- InCallPresenter.getInstance().addInCallUiListener(this);
- CallList.getInstance().addListener(this);
- }
-
- public void tearDown() {
- hide();
- InCallPresenter.getInstance().removeInCallUiListener(this);
- CallList.getInstance().removeListener(this);
- AudioModeProvider.getInstance().removeListener(this);
- }
-
- @Override
- public void onUiShowing(boolean showing) {
- if (!isEnabled(context)) {
- hide();
- return;
- }
-
- LogUtil.i("ReturnToCallController.onUiShowing", "showing: " + showing);
- if (showing) {
- LogUtil.i("ReturnToCallController.onUiShowing", "going to hide");
- hide();
- } else {
- if (getCall() != null) {
- LogUtil.i("ReturnToCallController.onUiShowing", "going to show");
- show();
- }
- }
- }
-
- private void hide() {
- if (bubble != null) {
- bubble.hide();
- } else {
- LogUtil.i("ReturnToCallController.hide", "hide() called without calling show()");
- }
- }
-
- private void show() {
- if (bubble == null) {
- bubble = startBubble();
- } else {
- bubble.show();
- }
- startContactInfoSearch();
- }
-
- /**
- * Determines whether bubbles can be shown based on permissions obtained. This should be checked
- * before attempting to create a Bubble.
- *
- * @return true iff bubbles are able to be shown.
- * @see Settings#canDrawOverlays(Context)
- */
- private static boolean canShowBubbles(@NonNull Context context) {
- return canShowBubblesForTesting != null
- ? canShowBubblesForTesting
- : Settings.canDrawOverlays(context);
- }
-
- @VisibleForTesting(otherwise = VisibleForTesting.NONE)
- static void setCanShowBubblesForTesting(boolean canShowBubbles) {
- canShowBubblesForTesting = canShowBubbles;
- }
-
- private Bubble startBubble() {
- if (!canShowBubbles(context)) {
- LogUtil.i("ReturnToCallController.startBubble", "can't show bubble, no permission");
- return null;
- }
- Bubble returnToCallBubble = BubbleComponent.get(context).getBubble();
- returnToCallBubble.setBubbleInfo(generateBubbleInfo());
- returnToCallBubble.show();
- return returnToCallBubble;
- }
-
- @Override
- public void onIncomingCall(DialerCall call) {}
-
- @Override
- public void onUpgradeToVideo(DialerCall call) {}
-
- @Override
- public void onSessionModificationStateChange(DialerCall call) {}
-
- @Override
- public void onCallListChange(CallList callList) {
- if (!isEnabled(context)) {
- hide();
- return;
- }
-
- boolean shouldStartInBubbleMode = InCallPresenter.getInstance().shouldStartInBubbleMode();
- InCallState newInCallState =
- InCallPresenter.getInstance().getPotentialStateFromCallList(callList);
- boolean isNewBackgroundCall =
- newInCallState != inCallState
- && newInCallState == InCallState.OUTGOING
- && shouldStartInBubbleMode;
- boolean bubbleNeverVisible = (bubble == null || !(bubble.isVisible() || bubble.isDismissed()));
- if (bubble != null && isNewBackgroundCall) {
- // If new outgoing call is in bubble mode, update bubble info.
- // We don't update if new call is not in bubble mode even if the existing call is.
- bubble.setBubbleInfo(generateBubbleInfoForBackgroundCalling());
- }
- if (((bubbleNeverVisible && newInCallState != InCallState.OUTGOING) || isNewBackgroundCall)
- && getCall() != null
- && !InCallPresenter.getInstance().isShowingInCallUi()) {
- LogUtil.i("ReturnToCallController.onCallListChange", "going to show bubble");
- show();
- } else {
- // The call to display might be different for the existing bubble
- startContactInfoSearch();
- }
- inCallState = newInCallState;
- }
-
- @Override
- public void onDisconnect(DialerCall call) {
- if (!isEnabled(context)) {
- hide();
- return;
- }
-
- LogUtil.enterBlock("ReturnToCallController.onDisconnect");
- if (bubble != null && bubble.isVisible() && (getCall() == null)) {
- // Show "Call ended" and hide bubble when there is no outgoing, active or background call
- LogUtil.i("ReturnToCallController.onDisconnect", "show call ended and hide bubble");
- // Don't show text if it's Duo upgrade
- // It doesn't work for Duo fallback upgrade since we're not considered in call
- if (!TelecomUtil.isInCall(context) || CallList.getInstance().getIncomingCall() != null) {
- bubble.showText(context.getText(R.string.incall_call_ended));
- }
- hide();
- } else {
- startContactInfoSearch();
- }
- }
-
- @Override
- public void onWiFiToLteHandover(DialerCall call) {}
-
- @Override
- public void onHandoverToWifiFailed(DialerCall call) {}
-
- @Override
- public void onInternationalCallOnWifi(@NonNull DialerCall call) {}
-
- @Override
- public void onAudioStateChanged(CallAudioState audioState) {
- if (!isEnabled(context)) {
- hide();
- return;
- }
-
- this.audioState = audioState;
- if (bubble != null) {
- bubble.updateActions(generateActions());
- }
- }
-
- private void startContactInfoSearch() {
- DialerCall dialerCall = getCall();
- if (dialerCall != null) {
- contactInfoCache.findInfo(
- dialerCall, false /* isIncoming */, new ReturnToCallContactInfoCacheCallback(this));
- }
- }
-
- private DialerCall getCall() {
- DialerCall dialerCall = CallList.getInstance().getOutgoingCall();
- if (dialerCall == null) {
- dialerCall = CallList.getInstance().getActiveOrBackgroundCall();
- }
- return dialerCall;
- }
-
- private void onPhotoAvatarReceived(@NonNull Drawable photo) {
- if (bubble != null) {
- bubble.updatePhotoAvatar(photo);
- }
- }
-
- private void onLetterTileAvatarReceived(@NonNull Drawable photo) {
- if (bubble != null) {
- bubble.updateAvatar(photo);
- }
- }
-
- private BubbleInfo generateBubbleInfo() {
- return BubbleInfo.builder()
- .setPrimaryColor(ThemeComponent.get(context).theme().getColorPrimary())
- .setPrimaryIcon(Icon.createWithResource(context, R.drawable.on_going_call))
- .setStartingYPosition(
- InCallPresenter.getInstance().shouldStartInBubbleMode()
- ? context.getResources().getDisplayMetrics().heightPixels / 2
- : context
- .getResources()
- .getDimensionPixelOffset(R.dimen.return_to_call_initial_offset_y))
- .setActions(generateActions())
- .build();
- }
-
- private BubbleInfo generateBubbleInfoForBackgroundCalling() {
- return BubbleInfo.builder()
- .setPrimaryColor(ThemeComponent.get(context).theme().getColorPrimary())
- .setPrimaryIcon(Icon.createWithResource(context, R.drawable.on_going_call))
- .setStartingYPosition(context.getResources().getDisplayMetrics().heightPixels / 2)
- .setActions(generateActions())
- .build();
- }
-
- @NonNull
- private List<Action> generateActions() {
- List<Action> actions = new ArrayList<>();
- SpeakerButtonInfo speakerButtonInfo = new SpeakerButtonInfo(audioState);
-
- // Return to call
- actions.add(
- Action.builder()
- .setIconDrawable(
- context.getDrawable(R.drawable.quantum_ic_exit_to_app_flip_vd_theme_24))
- .setIntent(fullScreen)
- .setName(context.getText(R.string.bubble_return_to_call))
- .setCheckable(false)
- .build());
- // Mute/unmute
- actions.add(
- Action.builder()
- .setIconDrawable(context.getDrawable(R.drawable.quantum_ic_mic_off_vd_theme_24))
- .setChecked(audioState.isMuted())
- .setIntent(toggleMute)
- .setName(context.getText(R.string.incall_label_mute))
- .build());
- // Speaker/audio selector
- actions.add(
- Action.builder()
- .setIconDrawable(context.getDrawable(speakerButtonInfo.icon))
- .setSecondaryIconDrawable(
- speakerButtonInfo.nonBluetoothMode
- ? null
- : context.getDrawable(R.drawable.quantum_ic_arrow_drop_down_vd_theme_24))
- .setName(context.getText(speakerButtonInfo.label))
- .setCheckable(speakerButtonInfo.nonBluetoothMode)
- .setChecked(speakerButtonInfo.isChecked)
- .setIntent(speakerButtonInfo.nonBluetoothMode ? toggleSpeaker : showSpeakerSelect)
- .build());
- // End call
- actions.add(
- Action.builder()
- .setIconDrawable(context.getDrawable(R.drawable.quantum_ic_call_end_vd_theme_24))
- .setIntent(endCall)
- .setName(context.getText(R.string.incall_label_end_call))
- .setCheckable(false)
- .build());
- return actions;
- }
-
- @NonNull
- private PendingIntent createActionIntent(String action) {
- Intent intent = new Intent(context, ReturnToCallActionReceiver.class);
- intent.setAction(action);
- return PendingIntent.getBroadcast(context, 0, intent, 0);
- }
-
- @NonNull
- private LetterTileDrawable createLettleTileDrawable(
- DialerCall dialerCall, ContactCacheEntry entry) {
- String preferredName =
- ContactsComponent.get(context)
- .contactDisplayPreferences()
- .getDisplayName(entry.namePrimary, entry.nameAlternative);
- if (TextUtils.isEmpty(preferredName)) {
- preferredName = entry.number;
- }
-
- LetterTileDrawable letterTile = new LetterTileDrawable(context.getResources());
- letterTile.setCanonicalDialerLetterTileDetails(
- dialerCall.updateNameIfRestricted(preferredName),
- entry.lookupKey,
- LetterTileDrawable.SHAPE_CIRCLE,
- LetterTileDrawable.getContactTypeFromPrimitives(
- dialerCall.isVoiceMailNumber(),
- dialerCall.isSpam(),
- entry.isBusiness,
- dialerCall.getNumberPresentation(),
- dialerCall.isConferenceCall()));
- return letterTile;
- }
-
- private static class ReturnToCallContactInfoCacheCallback implements ContactInfoCacheCallback {
-
- private final WeakReference<ReturnToCallController> returnToCallControllerWeakReference;
-
- private ReturnToCallContactInfoCacheCallback(ReturnToCallController returnToCallController) {
- returnToCallControllerWeakReference = new WeakReference<>(returnToCallController);
- }
-
- @Override
- public void onContactInfoComplete(String callId, ContactCacheEntry entry) {
- ReturnToCallController returnToCallController = returnToCallControllerWeakReference.get();
- if (returnToCallController == null) {
- return;
- }
- if (entry.photo != null) {
- returnToCallController.onPhotoAvatarReceived(entry.photo);
- } else {
- DialerCall dialerCall = CallList.getInstance().getCallById(callId);
- if (dialerCall != null) {
- returnToCallController.onLetterTileAvatarReceived(
- returnToCallController.createLettleTileDrawable(dialerCall, entry));
- }
- }
- }
-
- @Override
- public void onImageLoadComplete(String callId, ContactCacheEntry entry) {
- ReturnToCallController returnToCallController = returnToCallControllerWeakReference.get();
- if (returnToCallController == null) {
- return;
- }
- if (entry.photo != null) {
- returnToCallController.onPhotoAvatarReceived(entry.photo);
- } else {
- DialerCall dialerCall = CallList.getInstance().getCallById(callId);
- if (dialerCall != null) {
- returnToCallController.onLetterTileAvatarReceived(
- returnToCallController.createLettleTileDrawable(dialerCall, entry));
- }
- }
- }
- }
-}
diff --git a/java/com/android/incallui/StatusBarNotifier.java b/java/com/android/incallui/StatusBarNotifier.java
index 59a3f2e..6b78b60 100644
--- a/java/com/android/incallui/StatusBarNotifier.java
+++ b/java/com/android/incallui/StatusBarNotifier.java
@@ -22,7 +22,6 @@
import static com.android.dialer.app.DevicePolicyResources.NOTIFICATION_ONGOING_WORK_CALL_TITLE;
import static com.android.dialer.app.DevicePolicyResources.NOTIFICATION_WIFI_WORK_CALL_LABEL;
import static com.android.incallui.NotificationBroadcastReceiver.ACTION_ACCEPT_VIDEO_UPGRADE_REQUEST;
-import static com.android.incallui.NotificationBroadcastReceiver.ACTION_ANSWER_SPEAKEASY_CALL;
import static com.android.incallui.NotificationBroadcastReceiver.ACTION_ANSWER_VIDEO_INCOMING_CALL;
import static com.android.incallui.NotificationBroadcastReceiver.ACTION_ANSWER_VOICE_INCOMING_CALL;
import static com.android.incallui.NotificationBroadcastReceiver.ACTION_DECLINE_INCOMING_CALL;
@@ -59,7 +58,6 @@
import android.text.BidiFormatter;
import android.text.Spannable;
import android.text.SpannableString;
-import android.text.Spanned;
import android.text.TextDirectionHeuristics;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
@@ -68,7 +66,6 @@
import com.android.dialer.R;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.contactphoto.BitmapUtil;
import com.android.dialer.contacts.ContactsComponent;
import com.android.dialer.enrichedcall.EnrichedCallManager;
@@ -93,9 +90,7 @@
import com.android.incallui.ringtone.DialerRingtoneManager;
import com.android.incallui.ringtone.InCallTonePlayer;
import com.android.incallui.ringtone.ToneGeneratorFactory;
-import com.android.incallui.speakeasy.SpeakEasyComponent;
import com.android.incallui.videotech.utils.SessionModificationState;
-import com.google.common.base.Optional;
import java.util.Objects;
/** This class adds Notifications to the status bar for the in-call experience. */
@@ -295,20 +290,10 @@
if (callState == DialerCallState.INCOMING
|| callState == DialerCallState.CALL_WAITING
|| isVideoUpgradeRequest) {
- if (ConfigProviderComponent.get(context)
- .getConfigProvider()
- .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;
}
@@ -447,7 +432,6 @@
addVideoCallAction(builder);
} else {
addAnswerAction(builder);
- addSpeakeasyAnswerAction(builder, call);
}
}
}
@@ -658,12 +642,7 @@
} else if (call.hasProperty(Details.PROPERTY_HAS_CDMA_VOICE_PRIVACY)) {
return R.drawable.quantum_ic_phone_locked_vd_theme_24;
}
- // If ReturnToCall is enabled, use the static icon. The animated one will show in the bubble.
- if (ReturnToCallController.isEnabled(context)) {
- return R.drawable.quantum_ic_call_vd_theme_24;
- } else {
- return R.drawable.on_going_call;
- }
+ return R.drawable.on_going_call;
}
/** Returns the message to use with the notification. */
@@ -888,48 +867,6 @@
.build());
}
- private void addSpeakeasyAnswerAction(Notification.Builder builder, DialerCall call) {
- if (!call.isSpeakEasyEligible()) {
- return;
- }
-
- if (!ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean("enable_speakeasy_notification_button", false)) {
- return;
- }
-
- if (!SpeakEasyComponent.get(context).speakEasyCallManager().isAvailable(context)) {
- return;
- }
-
- Optional<Integer> buttonText = SpeakEasyComponent.get(context).speakEasyTextResource();
- if (!buttonText.isPresent()) {
- return;
- }
-
- LogUtil.d("StatusBarNotifier.addSpeakeasyAnswerAction", "showing button");
- PendingIntent answerVoicePendingIntent =
- createNotificationPendingIntent(context, ACTION_ANSWER_SPEAKEASY_CALL);
-
- Spannable spannable = new SpannableString(context.getText(buttonText.get()));
- // TODO(erfanian): Migrate these color values to somewhere more permanent in subsequent
- // implementation.
- spannable.setSpan(
- new ForegroundColorSpan(
- context.getColor(R.color.DO_NOT_USE_OR_I_WILL_BREAK_YOU_text_span_tertiary_button)),
- 0,
- spannable.length(),
- Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
-
- builder.addAction(
- new Notification.Action.Builder(
- Icon.createWithResource(context, R.drawable.quantum_ic_call_vd_theme_24),
- spannable,
- answerVoicePendingIntent)
- .build());
- }
-
private void addDismissAction(Notification.Builder builder) {
LogUtil.d(
"StatusBarNotifier.addDismissAction",
diff --git a/java/com/android/incallui/VideoCallPresenter.java b/java/com/android/incallui/VideoCallPresenter.java
index 0d1d1a5..a1fe820 100644
--- a/java/com/android/incallui/VideoCallPresenter.java
+++ b/java/com/android/incallui/VideoCallPresenter.java
@@ -29,7 +29,6 @@
import android.view.SurfaceView;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.util.PermissionsUtil;
import com.android.incallui.InCallPresenter.InCallDetailsListener;
import com.android.incallui.InCallPresenter.InCallOrientationListener;
@@ -1101,12 +1100,6 @@
"VideoCallPresenter.shouldShowCameraPermissionToast", "already shown for this call");
return false;
}
- if (!ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean("camera_permission_dialog_allowed", true)) {
- LogUtil.i("VideoCallPresenter.shouldShowCameraPermissionToast", "disabled by config");
- return false;
- }
return !VideoUtils.hasCameraPermission(context)
|| !PermissionsUtil.hasCameraPrivacyToastShown(context);
}
diff --git a/java/com/android/incallui/answer/bindings/AnswerBindings.java b/java/com/android/incallui/answer/bindings/AnswerBindings.java
index c370d74..9f4199b 100644
--- a/java/com/android/incallui/answer/bindings/AnswerBindings.java
+++ b/java/com/android/incallui/answer/bindings/AnswerBindings.java
@@ -29,8 +29,7 @@
boolean isVideoUpgradeRequest,
boolean isSelfManagedCamera,
boolean allowAnswerAndRelease,
- boolean hasCallOnHold,
- boolean allowSpeakEasy) {
+ boolean hasCallOnHold) {
return AnswerFragment.newInstance(
callId,
isRttCall,
@@ -38,7 +37,6 @@
isVideoUpgradeRequest,
isSelfManagedCamera,
allowAnswerAndRelease,
- hasCallOnHold,
- allowSpeakEasy);
+ hasCallOnHold);
}
}
diff --git a/java/com/android/incallui/answer/impl/AnswerFragment.java b/java/com/android/incallui/answer/impl/AnswerFragment.java
index 4387443..a37c4a9 100644
--- a/java/com/android/incallui/answer/impl/AnswerFragment.java
+++ b/java/com/android/incallui/answer/impl/AnswerFragment.java
@@ -86,8 +86,6 @@
import com.android.incallui.incalluilock.InCallUiLock;
import com.android.incallui.sessiondata.AvatarPresenter;
import com.android.incallui.sessiondata.MultimediaFragment;
-import com.android.incallui.speakeasy.Annotations.SpeakEasyChipResourceId;
-import com.android.incallui.speakeasy.SpeakEasyComponent;
import com.android.incallui.util.AccessibilityUtil;
import com.android.incallui.video.protocol.VideoCallScreen;
import com.android.incallui.videotech.utils.VideoUtils;
@@ -124,8 +122,6 @@
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
static final String ARG_IS_SELF_MANAGED_CAMERA = "is_self_managed_camera";
- static final String ARG_ALLOW_SPEAK_EASY = "allow_speak_easy";
-
private static final String STATE_HAS_ANIMATED_ENTRY = "hasAnimated";
private static final int HINT_SECONDARY_SHOW_DURATION_MILLIS = 5000;
@@ -227,11 +223,6 @@
}
}
- private void performSpeakEasy(View unused) {
- answerScreenDelegate.onSpeakEasyCall();
- buttonAcceptClicked = true;
- }
-
private void performAnswerAndRelease() {
restoreAnswerAndReleaseButtonAnimation();
answerScreenDelegate.onAnswerAndReleaseCall();
@@ -365,8 +356,7 @@
boolean isVideoUpgradeRequest,
boolean isSelfManagedCamera,
boolean allowAnswerAndRelease,
- boolean hasCallOnHold,
- boolean allowSpeakEasy) {
+ boolean hasCallOnHold) {
Bundle bundle = new Bundle();
bundle.putString(ARG_CALL_ID, Assert.isNotNull(callId));
bundle.putBoolean(ARG_IS_RTT_CALL, isRttCall);
@@ -375,7 +365,6 @@
bundle.putBoolean(ARG_IS_SELF_MANAGED_CAMERA, isSelfManagedCamera);
bundle.putBoolean(ARG_ALLOW_ANSWER_AND_RELEASE, allowAnswerAndRelease);
bundle.putBoolean(ARG_HAS_CALL_ON_HOLD, hasCallOnHold);
- bundle.putBoolean(ARG_ALLOW_SPEAK_EASY, allowSpeakEasy);
AnswerFragment instance = new AnswerFragment();
instance.setArguments(bundle);
@@ -466,24 +455,7 @@
/** Initialize chip buttons */
private void initChips() {
-
- if (!allowSpeakEasy()) {
- chipContainer.setVisibility(View.GONE);
- return;
- }
- chipContainer.setVisibility(View.VISIBLE);
-
- @SpeakEasyChipResourceId
- Optional<Integer> chipLayoutOptional = SpeakEasyComponent.get(getContext()).speakEasyChip();
- if (chipLayoutOptional.isPresent()) {
-
- LinearLayout chipLayout =
- (LinearLayout) getLayoutInflater().inflate(chipLayoutOptional.get(), null);
-
- chipLayout.setOnClickListener(this::performSpeakEasy);
-
- chipContainer.addView(chipLayout);
- }
+ chipContainer.setVisibility(View.GONE);
}
@Override
@@ -491,11 +463,6 @@
return getArguments().getBoolean(ARG_ALLOW_ANSWER_AND_RELEASE);
}
- @Override
- public boolean allowSpeakEasy() {
- return getArguments().getBoolean(ARG_ALLOW_SPEAK_EASY);
- }
-
private boolean hasCallOnHold() {
return getArguments().getBoolean(ARG_HAS_CALL_ON_HOLD);
}
diff --git a/java/com/android/incallui/answer/impl/classifier/HumanInteractionClassifier.java b/java/com/android/incallui/answer/impl/classifier/HumanInteractionClassifier.java
index 494a622..6e086ef 100644
--- a/java/com/android/incallui/answer/impl/classifier/HumanInteractionClassifier.java
+++ b/java/com/android/incallui/answer/impl/classifier/HumanInteractionClassifier.java
@@ -20,18 +20,13 @@
import android.hardware.SensorEvent;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
-import com.android.dialer.configprovider.ConfigProviderComponent;
/** An classifier trying to determine whether it is a human interacting with the phone or not. */
class HumanInteractionClassifier extends Classifier {
- private static final String CONFIG_ANSWER_FALSE_TOUCH_DETECTION_ENABLED =
- "answer_false_touch_detection_enabled";
-
private final StrokeClassifier[] strokeClassifiers;
private final GestureClassifier[] gestureClassifiers;
private final HistoryEvaluator historyEvaluator;
- private final boolean enabled;
HumanInteractionClassifier(Context context) {
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
@@ -43,10 +38,6 @@
float dpi = (displayMetrics.xdpi + displayMetrics.ydpi) / 2.0f;
classifierData = new ClassifierData(dpi, displayMetrics.heightPixels);
historyEvaluator = new HistoryEvaluator();
- enabled =
- ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean(CONFIG_ANSWER_FALSE_TOUCH_DETECTION_ENABLED, true);
strokeClassifiers =
new StrokeClassifier[] {
@@ -133,7 +124,7 @@
}
public boolean isEnabled() {
- return enabled;
+ return true;
}
@Override
diff --git a/java/com/android/incallui/answer/protocol/AnswerScreen.java b/java/com/android/incallui/answer/protocol/AnswerScreen.java
index 38e4dc5..f030ce9 100644
--- a/java/com/android/incallui/answer/protocol/AnswerScreen.java
+++ b/java/com/android/incallui/answer/protocol/AnswerScreen.java
@@ -32,8 +32,6 @@
boolean allowAnswerAndRelease();
- boolean allowSpeakEasy();
-
boolean isActionTimeout();
void setTextResponses(List<String> textResponses);
diff --git a/java/com/android/incallui/answer/protocol/AnswerScreenDelegate.java b/java/com/android/incallui/answer/protocol/AnswerScreenDelegate.java
index 172d964..5710922 100644
--- a/java/com/android/incallui/answer/protocol/AnswerScreenDelegate.java
+++ b/java/com/android/incallui/answer/protocol/AnswerScreenDelegate.java
@@ -30,8 +30,6 @@
void onReject();
- void onSpeakEasyCall();
-
void onAnswerAndReleaseCall();
void onAnswerAndReleaseButtonEnabled();
diff --git a/java/com/android/incallui/answerproximitysensor/AnswerProximitySensor.java b/java/com/android/incallui/answerproximitysensor/AnswerProximitySensor.java
index dbb8df9..29c557e 100644
--- a/java/com/android/incallui/answerproximitysensor/AnswerProximitySensor.java
+++ b/java/com/android/incallui/answerproximitysensor/AnswerProximitySensor.java
@@ -22,7 +22,6 @@
import android.os.Trace;
import android.view.Display;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.incallui.call.DialerCall;
import com.android.incallui.call.DialerCallListener;
import com.android.incallui.call.state.DialerCallState;
@@ -37,11 +36,6 @@
public class AnswerProximitySensor
implements DialerCallListener, AnswerProximityWakeLock.ScreenOnListener {
- private static final String CONFIG_ANSWER_PROXIMITY_SENSOR_ENABLED =
- "answer_proximity_sensor_enabled";
- private static final String CONFIG_ANSWER_PSEUDO_PROXIMITY_WAKE_LOCK_ENABLED =
- "answer_pseudo_proximity_wake_lock_enabled";
-
private final DialerCall call;
private final AnswerProximityWakeLock answerProximityWakeLock;
@@ -55,14 +49,6 @@
return false;
}
- if (!ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean(CONFIG_ANSWER_PROXIMITY_SENSOR_ENABLED, true)) {
- LogUtil.i("AnswerProximitySensor.shouldUse", "disabled by config");
- Trace.endSection();
- return false;
- }
-
if (!context.getResources().getBoolean(R.bool.config_answer_proximity_sensor_enabled)) {
LogUtil.i("AnswerProximitySensor.shouldUse", "disabled by overlay");
return false;
@@ -92,17 +78,7 @@
this.call = call;
LogUtil.i("AnswerProximitySensor.constructor", "acquiring lock");
- if (ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean(CONFIG_ANSWER_PSEUDO_PROXIMITY_WAKE_LOCK_ENABLED, true)) {
- answerProximityWakeLock = new PseudoProximityWakeLock(context, pseudoScreenState);
- } else {
- // TODO(twyen): choose a wake lock implementation base on framework/device.
- // These bugs requires the PseudoProximityWakeLock workaround:
- // a bug Proximity sensor not working on M
- // a bug fautly touch input when screen is off on marlin/sailfish
- answerProximityWakeLock = new SystemProximityWakeLock(context);
- }
+ answerProximityWakeLock = new PseudoProximityWakeLock(context, pseudoScreenState);
answerProximityWakeLock.setScreenOnListener(this);
answerProximityWakeLock.acquire();
diff --git a/java/com/android/incallui/call/CallList.java b/java/com/android/incallui/call/CallList.java
index 42d3d0c..47da983 100644
--- a/java/com/android/incallui/call/CallList.java
+++ b/java/com/android/incallui/call/CallList.java
@@ -748,9 +748,6 @@
*/
default void onUpgradeToRtt(DialerCall call, int rttRequestId) {}
- /** Called when the SpeakEasy state of a Dialer call is mutated. */
- default void onSpeakEasyStateChange() {}
-
/** Called when the session modification state of a call changes. */
void onSessionModificationStateChange(DialerCall call);
@@ -829,13 +826,6 @@
}
@Override
- public void onDialerCallSpeakEasyStateChange() {
- for (Listener listener : listeners) {
- listener.onSpeakEasyStateChange();
- }
- }
-
- @Override
public void onDialerCallUpgradeToVideo() {
for (Listener listener : listeners) {
listener.onUpgradeToVideo(call);
diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java
index 8d4e4f0..ef3527f 100644
--- a/java/com/android/incallui/call/DialerCall.java
+++ b/java/com/android/incallui/call/DialerCall.java
@@ -45,9 +45,7 @@
import android.text.TextUtils;
import android.widget.Toast;
import com.android.contacts.common.compat.CallCompat;
-import com.android.dialer.assisteddialing.ConcreteCreator;
import com.android.dialer.assisteddialing.TransformationInfo;
-import com.android.dialer.blocking.FilteredNumbersUtil;
import com.android.dialer.callintent.CallInitiationType;
import com.android.dialer.callintent.CallIntentParser;
import com.android.dialer.callintent.CallSpecificAppData;
@@ -55,7 +53,6 @@
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.DefaultFutureCallback;
import com.android.dialer.compat.telephony.TelephonyManagerCompat;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.duo.DuoComponent;
import com.android.dialer.enrichedcall.EnrichedCallCapabilities;
import com.android.dialer.enrichedcall.EnrichedCallComponent;
@@ -76,7 +73,6 @@
import com.android.dialer.telecom.TelecomCallUtil;
import com.android.dialer.telecom.TelecomUtil;
import com.android.dialer.theme.common.R;
-import com.android.dialer.time.Clock;
import com.android.dialer.util.PermissionsUtil;
import com.android.incallui.audiomode.AudioModeProvider;
import com.android.incallui.call.state.DialerCallState;
@@ -114,10 +110,6 @@
private static final String ID_PREFIX = "DialerCall_";
- @VisibleForTesting
- public static final String CONFIG_EMERGENCY_CALLBACK_WINDOW_MILLIS =
- "emergency_callback_window_millis";
-
private static int idCounter = 0;
public static final int UNKNOWN_PEER_DIMENSIONS = -1;
@@ -146,8 +138,6 @@
private final List<CannedTextResponsesLoadedListener> cannedTextResponsesLoadedListeners =
new CopyOnWriteArrayList<>();
private final VideoTechManager videoTechManager;
-
- private boolean isSpeakEasyCall;
private boolean isEmergencyCall;
private Uri handle;
private int state = DialerCallState.INVALID;
@@ -192,8 +182,6 @@
private volatile boolean feedbackRequested = false;
- private Clock clock = System::currentTimeMillis;
-
@Nullable private PreferredAccountRecorder preferredAccountRecorder;
private boolean isCallRemoved;
@@ -826,10 +814,7 @@
}
boolean isInEmergencyCallbackWindow(long timestampMillis) {
- long emergencyCallbackWindowMillis =
- ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getLong(CONFIG_EMERGENCY_CALLBACK_WINDOW_MILLIS, TimeUnit.MINUTES.toMillis(5));
+ long emergencyCallbackWindowMillis = TimeUnit.MINUTES.toMillis(5);
return System.currentTimeMillis() - timestampMillis < emergencyCallbackWindowMillis;
}
@@ -860,13 +845,13 @@
LogUtil.i("DialerCall.updateCallTiming", "state is already active");
return;
}
- logState.dialerConnectTimeMillis = clock.currentTimeMillis();
+ logState.dialerConnectTimeMillis = System.currentTimeMillis();
logState.dialerConnectTimeMillisElapsedRealtime = SystemClock.elapsedRealtime();
}
if (newState == DialerCallState.DISCONNECTED) {
long newDuration =
- getConnectTimeMillis() == 0 ? 0 : clock.currentTimeMillis() - getConnectTimeMillis();
+ getConnectTimeMillis() == 0 ? 0 : System.currentTimeMillis() - getConnectTimeMillis();
if (this.state == DialerCallState.DISCONNECTED) {
LogUtil.i(
"DialerCall.setState",
@@ -880,7 +865,7 @@
logState.dialerDurationMillis =
logState.dialerConnectTimeMillis == 0
? 0
- : clock.currentTimeMillis() - logState.dialerConnectTimeMillis;
+ : System.currentTimeMillis() - logState.dialerConnectTimeMillis;
logState.dialerDurationMillisElapsedRealtime =
logState.dialerConnectTimeMillisElapsedRealtime == 0
? 0
@@ -890,11 +875,6 @@
}
}
- @VisibleForTesting
- void setClock(Clock clock) {
- this.clock = clock;
- }
-
public boolean isOutgoing() {
return isOutgoing;
}
@@ -1672,66 +1652,6 @@
this.preferredAccountRecorder = preferredAccountRecorder;
}
- /** Indicates the call is eligible for SpeakEasy */
- public boolean isSpeakEasyEligible() {
-
- PhoneAccount phoneAccount = getPhoneAccount();
-
- if (phoneAccount == null) {
- return false;
- }
-
- if (!phoneAccount.hasCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION)) {
- return false;
- }
-
- return !isPotentialEmergencyCallback()
- && !isEmergencyCall()
- && !isActiveRttCall()
- && !isConferenceCall()
- && !isVideoCall()
- && !isVoiceMailNumber()
- && !hasReceivedVideoUpgradeRequest()
- && !isVoipCallNotSupportedBySpeakeasy();
- }
-
- private boolean isVoipCallNotSupportedBySpeakeasy() {
- Bundle extras = getIntentExtras();
-
- if (extras == null) {
- return false;
- }
-
- // Indicates an VOIP call.
- String callid = extras.getString("callid");
-
- if (TextUtils.isEmpty(callid)) {
- LogUtil.i("DialerCall.isVoipCallNotSupportedBySpeakeasy", "callid was empty");
- return false;
- }
-
- LogUtil.i("DialerCall.isVoipCallNotSupportedBySpeakeasy", "call is not eligible");
- return true;
- }
-
- /** Indicates the user has selected SpeakEasy */
- public boolean isSpeakEasyCall() {
- if (!isSpeakEasyEligible()) {
- return false;
- }
- return isSpeakEasyCall;
- }
-
- /** Sets the user preference for SpeakEasy */
- public void setIsSpeakEasyCall(boolean isSpeakEasyCall) {
- this.isSpeakEasyCall = isSpeakEasyCall;
- if (listeners != null) {
- for (DialerCallListener listener : listeners) {
- listener.onDialerCallSpeakEasyStateChange();
- }
- }
- }
-
/**
* Specifies whether a number is in the call history or not. {@link #CALL_HISTORY_STATUS_UNKNOWN}
* means there is no result.
diff --git a/java/com/android/incallui/call/DialerCallListener.java b/java/com/android/incallui/call/DialerCallListener.java
index a42ccbd..37c30d3 100644
--- a/java/com/android/incallui/call/DialerCallListener.java
+++ b/java/com/android/incallui/call/DialerCallListener.java
@@ -31,8 +31,6 @@
default void onDialerCallUpgradeToRtt(int rttRequestId) {}
- default void onDialerCallSpeakEasyStateChange() {}
-
void onDialerCallSessionModificationStateChange();
void onWiFiToLteHandover();
diff --git a/java/com/android/incallui/incall/impl/InCallFragment.java b/java/com/android/incallui/incall/impl/InCallFragment.java
index 336550d..b6c76fe 100644
--- a/java/com/android/incallui/incall/impl/InCallFragment.java
+++ b/java/com/android/incallui/incall/impl/InCallFragment.java
@@ -48,7 +48,6 @@
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.dialer.multimedia.MultimediaData;
-import com.android.dialer.strictmode.StrictModeUtils;
import com.android.dialer.widget.LockableViewPager;
import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment;
import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment.AudioRouteSelectorPresenter;
@@ -154,9 +153,7 @@
LogUtil.i("InCallFragment.onCreateView", null);
getActivity().setTheme(R.style.Theme_InCallScreen);
// Bypass to avoid StrictModeResourceMismatchViolation
- final View view =
- StrictModeUtils.bypass(
- () -> layoutInflater.inflate(R.layout.frag_incall_voice, viewGroup, false));
+ final View view = layoutInflater.inflate(R.layout.frag_incall_voice, viewGroup, false);
contactGridManager =
new ContactGridManager(
view,
diff --git a/java/com/android/incallui/spam/SpamNotificationActivity.java b/java/com/android/incallui/spam/SpamNotificationActivity.java
index 59356c7..190345c 100644
--- a/java/com/android/incallui/spam/SpamNotificationActivity.java
+++ b/java/com/android/incallui/spam/SpamNotificationActivity.java
@@ -43,8 +43,6 @@
import com.android.dialer.notification.DialerNotificationManager;
import com.android.dialer.phonenumberutil.PhoneNumberHelper;
import com.android.dialer.spam.SpamComponent;
-import com.android.dialer.spam.SpamSettings;
-import com.android.dialer.spam.promo.SpamBlockingPromoHelper;
import com.android.incallui.call.DialerCall;
/** Creates the after call notification dialogs. */
@@ -61,12 +59,6 @@
static final String ACTION_MARK_NUMBER_AS_NOT_SPAM =
"com.android.incallui.spam.ACTION_MARK_NUMBER_AS_NOT_SPAM";
- static final String ACTION_ENABLE_SPAM_BLOCKING =
- "com.android.incallui.spam.ACTION_ENABLE_SPAM_BLOCKING";
-
- static final String ACTION_SHOW_SPAM_BLOCKING_PROMO_DIALOG =
- "com.android.incallui.spam.ACTION_SHOW_SPAM_BLOCKING_PROMO_DIALOG";
-
private static final String TAG = "SpamNotifications";
private static final String EXTRA_NOTIFICATION_TAG = "notification_tag";
private static final String EXTRA_NOTIFICATION_ID = "notification_id";
@@ -87,8 +79,6 @@
}
};
private FilteredNumberAsyncQueryHandler filteredNumberAsyncQueryHandler;
- private SpamSettings spamSettings;
- private SpamBlockingPromoHelper spamBlockingPromoHelper;
/**
* Creates an intent to start this activity.
@@ -163,8 +153,6 @@
super.onCreate(savedInstanceState);
setFinishOnTouchOutside(true);
filteredNumberAsyncQueryHandler = new FilteredNumberAsyncQueryHandler(this);
- spamSettings = SpamComponent.get(this).spamSettings();
- spamBlockingPromoHelper = new SpamBlockingPromoHelper(getApplicationContext(), spamSettings);
cancelNotification();
}
@@ -199,9 +187,6 @@
showNonSpamDialog();
}
break;
- case ACTION_SHOW_SPAM_BLOCKING_PROMO_DIALOG:
- showSpamBlockingPromoDialog();
- break;
default: // fall out
}
}
@@ -512,35 +497,6 @@
}
private void maybeShowSpamBlockingPromoAndFinish() {
- if (!spamBlockingPromoHelper.shouldShowAfterCallSpamBlockingPromo()) {
- finish();
- return;
- }
- Logger.get(this)
- .logImpression(DialerImpression.Type.SPAM_BLOCKING_AFTER_CALL_NOTIFICATION_PROMO_SHOWN);
- showSpamBlockingPromoDialog();
- }
-
- private void showSpamBlockingPromoDialog() {
- spamBlockingPromoHelper.showSpamBlockingPromoDialog(
- getSupportFragmentManager(),
- () -> {
- Logger.get(this)
- .logImpression(
- DialerImpression.Type
- .SPAM_BLOCKING_ENABLED_THROUGH_AFTER_CALL_NOTIFICATION_PROMO);
- spamSettings.modifySpamBlockingSetting(
- true,
- success -> {
- if (!success) {
- Logger.get(this)
- .logImpression(
- DialerImpression.Type
- .SPAM_BLOCKING_MODIFY_FAILURE_THROUGH_AFTER_CALL_NOTIFICATION_PROMO);
- }
- spamBlockingPromoHelper.showModifySettingOnCompleteToast(success);
- });
- },
- dialog -> finish());
+ finish();
}
}
diff --git a/java/com/android/incallui/spam/SpamNotificationService.java b/java/com/android/incallui/spam/SpamNotificationService.java
index 26aec2f..04f2f29 100644
--- a/java/com/android/incallui/spam/SpamNotificationService.java
+++ b/java/com/android/incallui/spam/SpamNotificationService.java
@@ -16,7 +16,6 @@
package com.android.incallui.spam;
-import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
@@ -32,8 +31,6 @@
import com.android.dialer.logging.ReportingLocation;
import com.android.dialer.notification.DialerNotificationManager;
import com.android.dialer.spam.SpamComponent;
-import com.android.dialer.spam.SpamSettings;
-import com.android.dialer.spam.promo.SpamBlockingPromoHelper;
import com.android.incallui.call.DialerCall;
/**
@@ -103,18 +100,9 @@
ContactLookupResult.Type contactLookupResultType =
ContactLookupResult.Type.forNumber(intent.getIntExtra(EXTRA_CONTACT_LOOKUP_RESULT_TYPE, 0));
- SpamSettings spamSettings = SpamComponent.get(this).spamSettings();
- SpamBlockingPromoHelper spamBlockingPromoHelper =
- new SpamBlockingPromoHelper(this, SpamComponent.get(this).spamSettings());
- boolean shouldShowSpamBlockingPromo =
- SpamNotificationActivity.ACTION_MARK_NUMBER_AS_SPAM.equals(intent.getAction())
- && spamBlockingPromoHelper.shouldShowAfterCallSpamBlockingPromo();
-
// Cancel notification only if we are not showing spam blocking promo. Otherwise we will show
// spam blocking promo notification in place.
- if (!shouldShowSpamBlockingPromo) {
- DialerNotificationManager.cancel(this, notificationTag, notificationId);
- }
+ DialerNotificationManager.cancel(this, notificationTag, notificationId);
switch (intent.getAction()) {
case SpamNotificationActivity.ACTION_MARK_NUMBER_AS_SPAM:
@@ -129,13 +117,6 @@
ReportingLocation.Type.FEEDBACK_PROMPT,
contactLookupResultType);
new FilteredNumberAsyncQueryHandler(this).blockNumber(null, number);
- if (shouldShowSpamBlockingPromo) {
- spamBlockingPromoHelper.showSpamBlockingPromoNotification(
- notificationTag,
- notificationId,
- createPromoActivityPendingIntent(),
- createEnableSpamBlockingPendingIntent());
- }
break;
case SpamNotificationActivity.ACTION_MARK_NUMBER_AS_NOT_SPAM:
logCallImpression(
@@ -149,22 +130,6 @@
ReportingLocation.Type.FEEDBACK_PROMPT,
contactLookupResultType);
break;
- case SpamNotificationActivity.ACTION_ENABLE_SPAM_BLOCKING:
- Logger.get(this)
- .logImpression(
- DialerImpression.Type.SPAM_BLOCKING_ENABLED_THROUGH_AFTER_CALL_NOTIFICATION_PROMO);
- spamSettings.modifySpamBlockingSetting(
- true,
- success -> {
- if (!success) {
- Logger.get(this)
- .logImpression(
- DialerImpression.Type
- .SPAM_BLOCKING_MODIFY_FAILURE_THROUGH_AFTER_CALL_NOTIFICATION_PROMO);
- }
- spamBlockingPromoHelper.showModifySettingOnCompleteToast(success);
- });
- break;
default: // fall out
}
// TODO: call stopSelf() after async tasks complete (a bug)
@@ -185,28 +150,4 @@
intent.getStringExtra(EXTRA_CALL_ID),
intent.getLongExtra(EXTRA_CALL_START_TIME_MILLIS, 0));
}
-
- private PendingIntent createPromoActivityPendingIntent() {
- Intent intent =
- SpamNotificationActivity.createActivityIntent(
- this,
- null,
- SpamNotificationActivity.ACTION_SHOW_SPAM_BLOCKING_PROMO_DIALOG,
- notificationTag,
- notificationId);
- return PendingIntent.getActivity(
- this, (int) System.currentTimeMillis(), intent, PendingIntent.FLAG_ONE_SHOT);
- }
-
- private PendingIntent createEnableSpamBlockingPendingIntent() {
- Intent intent =
- SpamNotificationService.createServiceIntent(
- this,
- null,
- SpamNotificationActivity.ACTION_ENABLE_SPAM_BLOCKING,
- notificationTag,
- notificationId);
- return PendingIntent.getService(
- this, (int) System.currentTimeMillis(), intent, PendingIntent.FLAG_ONE_SHOT);
- }
}
diff --git a/java/com/android/incallui/speakeasy/Annotations.java b/java/com/android/incallui/speakeasy/Annotations.java
deleted file mode 100644
index c66fe94..0000000
--- a/java/com/android/incallui/speakeasy/Annotations.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source 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.incallui.speakeasy;
-
-import javax.inject.Qualifier;
-
-/** Annotations for Speakeasy providers. */
-public final class Annotations {
-
- /** A Speakeasy settings fragment */
- @Qualifier
- public @interface SpeakEasySettingsActivity {}
-
- /** A Speakeasy settings object */
- @Qualifier
- public @interface SpeakEasySettingsObject {}
-
- /** A Speakeasy chip */
- @Qualifier
- public @interface SpeakEasyChipResourceId {}
-
- /** A Speakeasy text resource */
- @Qualifier
- public @interface SpeakEasyTextResourceId {}
-}
diff --git a/java/com/android/incallui/speakeasy/SpeakEasyCallManager.java b/java/com/android/incallui/speakeasy/SpeakEasyCallManager.java
deleted file mode 100644
index 55905ce..0000000
--- a/java/com/android/incallui/speakeasy/SpeakEasyCallManager.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source 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.incallui.speakeasy;
-
-import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.v4.app.Fragment;
-import com.android.incallui.call.DialerCall;
-import com.google.common.util.concurrent.ListenableFuture;
-import java.util.Optional;
-
-/** Provides operations necessary to SpeakEasy. */
-public interface SpeakEasyCallManager {
-
- /**
- * Returns the Fragment used to display data.
- *
- * <p>An absent optional indicates the feature is unavailable.
- */
- Optional<Fragment> getSpeakEasyFragment(@NonNull DialerCall call);
-
- /**
- * Indicates a call has been removed.
- *
- * @param call The call which has been removed.
- */
- void onCallRemoved(@NonNull DialerCall call);
-
- /**
- * Indicates there is a new incoming call that is about to be answered.
- *
- * @param call The call which is about to become active.
- */
- ListenableFuture<Void> onNewIncomingCall(@NonNull DialerCall call);
-
- /**
- * Indicates the feature is available.
- *
- * @param context The application context.
- */
- boolean isAvailable(@NonNull Context context);
-
- /**
- * Optional: Performs work necessary to happen-before callers use other methods on this interface.
- *
- * @apiNote Use of this API is completely optional, and callers are NOT required to invoke this
- * method prior to using other methods on the interface.
- * @implSpec Other members of this interface always promise to do any required initialization work
- * at the time they are invoked. This method will always be idempotent.
- */
- default void performManualInitialization() {}
-
- /** Returns the config provider flag associated with the feature. */
- @NonNull
- String getConfigProviderFlag();
-}
diff --git a/java/com/android/incallui/speakeasy/SpeakEasyCallManagerStub.java b/java/com/android/incallui/speakeasy/SpeakEasyCallManagerStub.java
deleted file mode 100644
index 4eebc80..0000000
--- a/java/com/android/incallui/speakeasy/SpeakEasyCallManagerStub.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source 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.incallui.speakeasy;
-
-import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
-import com.android.incallui.call.DialerCall;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-import java.util.Optional;
-import javax.inject.Inject;
-
-/** Default implementation of SpeakEasyCallManager. */
-public class SpeakEasyCallManagerStub implements SpeakEasyCallManager {
-
- @Inject
- public SpeakEasyCallManagerStub() {}
-
- /** Returns an absent optional. */
- @Override
- @Nullable
- public Optional<Fragment> getSpeakEasyFragment(DialerCall call) {
- return Optional.empty();
- }
-
- /** Always inert in the stub. */
- @Override
- public void onCallRemoved(DialerCall call) {}
-
- @Override
- public ListenableFuture<Void> onNewIncomingCall(@NonNull DialerCall call) {
- return Futures.immediateFuture(null);
- }
-
- /** Always returns false. */
- @Override
- public boolean isAvailable(@NonNull Context unused) {
- return false;
- }
-
- /** Always returns a stub string. */
- @NonNull
- @Override
- public String getConfigProviderFlag() {
- return "not_yet_implmented";
- }
-}
diff --git a/java/com/android/incallui/speakeasy/SpeakEasyComponent.java b/java/com/android/incallui/speakeasy/SpeakEasyComponent.java
deleted file mode 100644
index 422ebd6..0000000
--- a/java/com/android/incallui/speakeasy/SpeakEasyComponent.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source 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.incallui.speakeasy;
-
-import android.content.Context;
-import android.preference.PreferenceActivity;
-import com.android.dialer.inject.HasRootComponent;
-import com.android.incallui.speakeasy.Annotations.SpeakEasyChipResourceId;
-import com.android.incallui.speakeasy.Annotations.SpeakEasySettingsActivity;
-import com.android.incallui.speakeasy.Annotations.SpeakEasySettingsObject;
-import com.android.incallui.speakeasy.Annotations.SpeakEasyTextResourceId;
-import com.google.common.base.Optional;
-import dagger.Subcomponent;
-
-/** Dagger component to get SpeakEasyCallManager. */
-@Subcomponent
-public abstract class SpeakEasyComponent {
-
- public static SpeakEasyComponent get(Context context) {
- return ((SpeakEasyComponent.HasComponent)
- ((HasRootComponent) context.getApplicationContext()).component())
- .speakEasyComponent();
- }
-
- public abstract SpeakEasyCallManager speakEasyCallManager();
-
- public abstract @SpeakEasySettingsActivity Optional<PreferenceActivity>
- speakEasySettingsActivity();
-
- public abstract @SpeakEasySettingsObject Optional<Object> speakEasySettingsObject();
-
- public abstract @SpeakEasyChipResourceId Optional<Integer> speakEasyChip();
-
- public abstract @SpeakEasyTextResourceId Optional<Integer> speakEasyTextResource();
-
- /** Used to refer to the root application component. */
- public interface HasComponent {
- SpeakEasyComponent speakEasyComponent();
- }
-}
diff --git a/java/com/android/incallui/speakeasy/StubSpeakEasyModule.java b/java/com/android/incallui/speakeasy/StubSpeakEasyModule.java
deleted file mode 100644
index 5441075..0000000
--- a/java/com/android/incallui/speakeasy/StubSpeakEasyModule.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source 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.incallui.speakeasy;
-
-import android.preference.PreferenceActivity;
-import com.android.dialer.inject.DialerVariant;
-import com.android.dialer.inject.InstallIn;
-import com.android.incallui.speakeasy.Annotations.SpeakEasyChipResourceId;
-import com.android.incallui.speakeasy.Annotations.SpeakEasySettingsActivity;
-import com.android.incallui.speakeasy.Annotations.SpeakEasySettingsObject;
-import com.android.incallui.speakeasy.Annotations.SpeakEasyTextResourceId;
-import com.google.common.base.Optional;
-import dagger.Binds;
-import dagger.Module;
-import dagger.Provides;
-
-/** Module which binds {@link SpeakEasyCallManagerStub}. */
-@InstallIn(variants = {DialerVariant.DIALER_TEST})
-@Module
-public abstract class StubSpeakEasyModule {
-
- @Binds
- abstract SpeakEasyCallManager bindsSpeakEasy(SpeakEasyCallManagerStub stub);
-
- @Provides
- static @SpeakEasySettingsActivity Optional<PreferenceActivity>
- provideSpeakEasySettingsActivity() {
- return Optional.absent();
- }
-
- @Provides
- static @SpeakEasySettingsObject Optional<Object> provideSpeakEasySettingsObject() {
- return Optional.absent();
- }
-
- @Provides
- static @SpeakEasyChipResourceId Optional<Integer> provideSpeakEasyChip() {
- return Optional.absent();
- }
-
- @Provides
- static @SpeakEasyTextResourceId Optional<Integer> provideSpeakEasyTextResource() {
- return Optional.absent();
- }
-}
diff --git a/java/com/android/incallui/videotech/duo/DuoVideoTech.java b/java/com/android/incallui/videotech/duo/DuoVideoTech.java
index 47f0757..d9a31a5 100644
--- a/java/com/android/incallui/videotech/duo/DuoVideoTech.java
+++ b/java/com/android/incallui/videotech/duo/DuoVideoTech.java
@@ -24,7 +24,6 @@
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.DefaultFutureCallback;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.duo.Duo;
import com.android.dialer.duo.DuoListener;
import com.android.dialer.logging.DialerImpression;
@@ -60,13 +59,6 @@
@Override
public boolean isAvailable(Context context, PhoneAccountHandle phoneAccountHandle) {
- if (!ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean("enable_lightbringer_video_upgrade", true)) {
- LogUtil.v("DuoVideoTech.isAvailable", "upgrade disabled by flag");
- return false;
- }
-
if (callState != Call.STATE_ACTIVE) {
LogUtil.v("DuoVideoTech.isAvailable", "upgrade unavailable, call must be active");
return false;
diff --git a/java/com/android/voicemail/impl/DialerVvmConfigManager.java b/java/com/android/voicemail/impl/DialerVvmConfigManager.java
index 99c95dd..ba7affa 100644
--- a/java/com/android/voicemail/impl/DialerVvmConfigManager.java
+++ b/java/com/android/voicemail/impl/DialerVvmConfigManager.java
@@ -23,7 +23,6 @@
import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting;
import android.util.ArrayMap;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.voicemail.impl.utils.XmlUtils;
import com.google.common.collect.ComparisonChain;
import java.io.IOException;
@@ -132,10 +131,7 @@
}
PersistableBundle bundle = (PersistableBundle) object;
- if (bundle.containsKey(KEY_FEATURE_FLAG_NAME)
- && !ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean(bundle.getString(KEY_FEATURE_FLAG_NAME), false)) {
+ if (bundle.containsKey(KEY_FEATURE_FLAG_NAME)) {
continue;
}
diff --git a/java/com/android/voicemail/impl/VoicemailClientImpl.java b/java/com/android/voicemail/impl/VoicemailClientImpl.java
index 2a112e8..f21f4fe 100644
--- a/java/com/android/voicemail/impl/VoicemailClientImpl.java
+++ b/java/com/android/voicemail/impl/VoicemailClientImpl.java
@@ -28,7 +28,6 @@
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.voicemail.PinChanger;
import com.android.voicemail.VisualVoicemailTypeExtensions;
import com.android.voicemail.VoicemailClient;
@@ -96,17 +95,11 @@
@Override
public boolean isVoicemailArchiveAvailable(Context context) {
- if (!ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean(ALLOW_VOICEMAIL_ARCHIVE, false)) {
- LogUtil.i(
- "VoicemailClientImpl.isVoicemailArchiveAllowed",
- "feature disabled by config: %s",
- ALLOW_VOICEMAIL_ARCHIVE);
- return false;
- }
-
- return true;
+ LogUtil.i(
+ "VoicemailClientImpl.isVoicemailArchiveAllowed",
+ "feature disabled by config: %s",
+ ALLOW_VOICEMAIL_ARCHIVE);
+ return false;
}
@Override
diff --git a/java/com/android/voicemail/impl/VoicemailStatus.java b/java/com/android/voicemail/impl/VoicemailStatus.java
index 2ebc49b..18bfb68 100644
--- a/java/com/android/voicemail/impl/VoicemailStatus.java
+++ b/java/com/android/voicemail/impl/VoicemailStatus.java
@@ -24,7 +24,6 @@
import android.provider.VoicemailContract.Status;
import android.support.annotation.Nullable;
import android.telecom.PhoneAccountHandle;
-import com.android.dialer.strictmode.StrictModeUtils;
public class VoicemailStatus {
@@ -100,7 +99,7 @@
ContentResolver contentResolver = context.getContentResolver();
Uri statusUri = VoicemailContract.Status.buildSourceUri(context.getPackageName());
try {
- StrictModeUtils.bypass(() -> contentResolver.insert(statusUri, values));
+ contentResolver.insert(statusUri, values);
} catch (IllegalArgumentException iae) {
VvmLog.e(TAG, "apply :: failed to insert content resolver ", iae);
values.clear();
diff --git a/java/com/android/voicemail/impl/configui/ConfigOverrideFragment.java b/java/com/android/voicemail/impl/configui/ConfigOverrideFragment.java
index d05940a..9e61825 100644
--- a/java/com/android/voicemail/impl/configui/ConfigOverrideFragment.java
+++ b/java/com/android/voicemail/impl/configui/ConfigOverrideFragment.java
@@ -35,7 +35,6 @@
import android.text.TextUtils;
import com.android.dialer.common.Assert;
import com.android.dialer.common.concurrent.ThreadUtil;
-import com.android.dialer.strictmode.StrictModeUtils;
import com.android.voicemail.VoicemailComponent;
/**
@@ -128,10 +127,8 @@
}
public static boolean isOverridden(Context context) {
- return StrictModeUtils.bypass(
- () ->
- PreferenceManager.getDefaultSharedPreferences(context)
- .getBoolean(context.getString(R.string.vvm_config_override_enabled_key), false));
+ return PreferenceManager.getDefaultSharedPreferences(context)
+ .getBoolean(context.getString(R.string.vvm_config_override_enabled_key), false);
}
public static PersistableBundle getConfig(Context context) {
diff --git a/java/com/android/voicemail/impl/mail/Message.java b/java/com/android/voicemail/impl/mail/Message.java
index 4e2c642..cc000db 100644
--- a/java/com/android/voicemail/impl/mail/Message.java
+++ b/java/com/android/voicemail/impl/mail/Message.java
@@ -51,39 +51,19 @@
public abstract void setSubject(String subject) throws MessagingException;
- public Date getInternalDate() {
- return internalDate;
- }
-
public void setInternalDate(Date internalDate) {
this.internalDate = internalDate;
}
- public abstract Date getReceivedDate() throws MessagingException;
-
public abstract Date getSentDate() throws MessagingException;
- public abstract void setSentDate(Date sentDate) throws MessagingException;
-
@Nullable
public abstract Long getDuration() throws MessagingException;
- public abstract Address[] getRecipients(String type) throws MessagingException;
-
- public abstract void setRecipients(String type, Address[] addresses) throws MessagingException;
-
- public void setRecipient(String type, Address address) throws MessagingException {
- setRecipients(type, new Address[] {address});
- }
-
public abstract Address[] getFrom() throws MessagingException;
public abstract void setFrom(Address from) throws MessagingException;
- public abstract Address[] getReplyTo() throws MessagingException;
-
- public abstract void setReplyTo(Address[] from) throws MessagingException;
-
// Always use these instead of getHeader("Message-ID") or setHeader("Message-ID");
public abstract void setMessageId(String messageId) throws MessagingException;
@@ -137,12 +117,6 @@
}
}
- public boolean isSet(String flag) {
- return getFlagSet().contains(flag);
- }
-
- public abstract void saveChanges() throws MessagingException;
-
@Override
public String toString() {
return getClass().getSimpleName() + ':' + uid;
diff --git a/java/com/android/voicemail/impl/mail/internet/MimeMessage.java b/java/com/android/voicemail/impl/mail/internet/MimeMessage.java
index 2997ad8..39b292b 100644
--- a/java/com/android/voicemail/impl/mail/internet/MimeMessage.java
+++ b/java/com/android/voicemail/impl/mail/internet/MimeMessage.java
@@ -156,11 +156,6 @@
}
@Override
- public Date getReceivedDate() throws MessagingException {
- return null;
- }
-
- @Override
public Date getSentDate() throws MessagingException {
if (sentDate == null) {
try {
@@ -193,12 +188,6 @@
}
@Override
- public void setSentDate(Date sentDate) throws MessagingException {
- setHeader("Date", DATE_FORMAT.format(sentDate));
- this.sentDate = sentDate;
- }
-
- @Override
@Nullable
public Long getDuration() {
String durationHeader = null;
@@ -256,66 +245,6 @@
return size;
}
- /**
- * Returns a list of the given recipient type from this message. If no addresses are found the
- * method returns an empty array.
- */
- @Override
- public Address[] getRecipients(String type) throws MessagingException {
- if (type == RECIPIENT_TYPE_TO) {
- if (to == null) {
- to = Address.parse(MimeUtility.unfold(getFirstHeader("To")));
- }
- return to;
- } else if (type == RECIPIENT_TYPE_CC) {
- if (cc == null) {
- cc = Address.parse(MimeUtility.unfold(getFirstHeader("CC")));
- }
- return cc;
- } else if (type == RECIPIENT_TYPE_BCC) {
- if (bcc == null) {
- bcc = Address.parse(MimeUtility.unfold(getFirstHeader("BCC")));
- }
- return bcc;
- } else {
- throw new MessagingException("Unrecognized recipient type.");
- }
- }
-
- @Override
- public void setRecipients(String type, Address[] addresses) throws MessagingException {
- final int toLength = 4; // "To: "
- final int ccLength = 4; // "Cc: "
- final int bccLength = 5; // "Bcc: "
- if (type == RECIPIENT_TYPE_TO) {
- if (addresses == null || addresses.length == 0) {
- removeHeader("To");
- this.to = null;
- } else {
- setHeader("To", MimeUtility.fold(Address.toHeader(addresses), toLength));
- this.to = addresses;
- }
- } else if (type == RECIPIENT_TYPE_CC) {
- if (addresses == null || addresses.length == 0) {
- removeHeader("CC");
- this.cc = null;
- } else {
- setHeader("CC", MimeUtility.fold(Address.toHeader(addresses), ccLength));
- this.cc = addresses;
- }
- } else if (type == RECIPIENT_TYPE_BCC) {
- if (addresses == null || addresses.length == 0) {
- removeHeader("BCC");
- this.bcc = null;
- } else {
- setHeader("BCC", MimeUtility.fold(Address.toHeader(addresses), bccLength));
- this.bcc = addresses;
- }
- } else {
- throw new MessagingException("Unrecognized recipient type.");
- }
- }
-
/** Returns the unfolded, decoded value of the Subject header. */
@Override
public String getSubject() throws MessagingException {
@@ -351,26 +280,6 @@
}
}
- @Override
- public Address[] getReplyTo() throws MessagingException {
- if (replyTo == null) {
- replyTo = Address.parse(MimeUtility.unfold(getFirstHeader("Reply-to")));
- }
- return replyTo;
- }
-
- @Override
- public void setReplyTo(Address[] replyTo) throws MessagingException {
- final int replyToLength = 10; // "Reply-to: "
- if (replyTo == null || replyTo.length == 0) {
- removeHeader("Reply-to");
- this.replyTo = null;
- } else {
- setHeader("Reply-to", MimeUtility.fold(Address.toHeader(replyTo), replyToLength));
- this.replyTo = replyTo;
- }
- }
-
/**
* Set the mime "Message-ID" header
*
@@ -400,11 +309,6 @@
}
@Override
- public void saveChanges() throws MessagingException {
- throw new MessagingException("saveChanges not yet implemented");
- }
-
- @Override
public Body getBody() throws MessagingException {
return body;
}
diff --git a/java/com/android/voicemail/impl/protocol/Vvm3Subscriber.java b/java/com/android/voicemail/impl/protocol/Vvm3Subscriber.java
index c478a93..1ad5c31 100644
--- a/java/com/android/voicemail/impl/protocol/Vvm3Subscriber.java
+++ b/java/com/android/voicemail/impl/protocol/Vvm3Subscriber.java
@@ -16,7 +16,6 @@
package com.android.voicemail.impl.protocol;
-import android.content.Context;
import android.net.Network;
import android.os.Build;
import android.os.Bundle;
@@ -29,7 +28,6 @@
import android.text.Spanned;
import android.text.style.URLSpan;
import android.util.ArrayMap;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.voicemail.impl.ActivationTask;
import com.android.voicemail.impl.Assert;
import com.android.voicemail.impl.OmtpEvents;
@@ -216,7 +214,7 @@
String gatewayUrl = getSelfProvisioningGateway();
String selfProvisionResponse = getSelfProvisionResponse(gatewayUrl);
String subscribeLink =
- findSubscribeLink(getSubscribeLinkPatterns(helper.getContext()), selfProvisionResponse);
+ findSubscribeLink(getSubscribeLinkPatterns(), selfProvisionResponse);
clickSubscribeLink(subscribeLink);
} catch (ProvisioningException e) {
VvmLog.e(TAG, e.toString());
@@ -321,12 +319,8 @@
}
@VisibleForTesting
- static List<Pattern> getSubscribeLinkPatterns(Context context) {
- String patternsJsonString =
- ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getString(
- VVM3_SUBSCRIBE_LINK_PATTERNS_JSON_ARRAY, VVM3_SUBSCRIBE_LINK_DEFAULT_PATTERNS);
+ static List<Pattern> getSubscribeLinkPatterns() {
+ String patternsJsonString = VVM3_SUBSCRIBE_LINK_DEFAULT_PATTERNS;
List<Pattern> patterns = new ArrayList<>();
try {
JSONArray patternsArray = new JSONArray(patternsJsonString);
diff --git a/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java b/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java
index 2daf3a1..7b251b8 100644
--- a/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java
+++ b/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java
@@ -28,7 +28,6 @@
import android.preference.PreferenceManager;
import android.support.annotation.MainThread;
import com.android.dialer.constants.ScheduledJobIds;
-import com.android.dialer.strictmode.StrictModeUtils;
import com.android.voicemail.impl.Assert;
import com.android.voicemail.impl.VvmLog;
import com.android.voicemail.impl.scheduling.Tasks.TaskCreationException;
@@ -56,9 +55,8 @@
@MainThread
public boolean onStartJob(JobParameters params) {
int jobId = params.getTransientExtras().getInt(EXTRA_JOB_ID);
- int expectedJobId =
- StrictModeUtils.bypass(
- () -> PreferenceManager.getDefaultSharedPreferences(this).getInt(EXPECTED_JOB_ID, 0));
+ int expectedJobId = PreferenceManager.getDefaultSharedPreferences(this)
+ .getInt(EXPECTED_JOB_ID, 0);
if (jobId != expectedJobId) {
VvmLog.e(
TAG, "Job " + jobId + " is not the last scheduled job " + expectedJobId + ", ignoring");
diff --git a/java/com/android/voicemail/impl/settings/VisualVoicemailSettingsUtil.java b/java/com/android/voicemail/impl/settings/VisualVoicemailSettingsUtil.java
index 3acf60d..c98dcf0 100644
--- a/java/com/android/voicemail/impl/settings/VisualVoicemailSettingsUtil.java
+++ b/java/com/android/voicemail/impl/settings/VisualVoicemailSettingsUtil.java
@@ -168,20 +168,6 @@
return prefs.getBoolean(DONATE_VOICEMAILS_KEY, false);
}
- /**
- * Whether the client enabled status is explicitly set by user or by default(Whether carrier VVM
- * app is installed). This is used to determine whether to disable the client when the carrier VVM
- * app is installed. If the carrier VVM app is installed the client should give priority to it if
- * the settings are not touched.
- */
- public static boolean isEnabledUserSet(Context context, PhoneAccountHandle phoneAccount) {
- if (phoneAccount == null) {
- return false;
- }
- VisualVoicemailPreferences prefs = new VisualVoicemailPreferences(context, phoneAccount);
- return prefs.contains(IS_ENABLED_KEY);
- }
-
/** Delete all the voicemails whose source_package field matches this package */
private static class VoicemailDeleteWorker implements Worker<Void, Void> {
private final Context context;
diff --git a/java/com/android/voicemail/impl/transcribe/TranscriptionConfigProvider.java b/java/com/android/voicemail/impl/transcribe/TranscriptionConfigProvider.java
index ee10685..252d73c 100644
--- a/java/com/android/voicemail/impl/transcribe/TranscriptionConfigProvider.java
+++ b/java/com/android/voicemail/impl/transcribe/TranscriptionConfigProvider.java
@@ -16,7 +16,6 @@
package com.android.voicemail.impl.transcribe;
import android.content.Context;
-import com.android.dialer.configprovider.ConfigProviderComponent;
import java.util.concurrent.TimeUnit;
/** Provides configuration values needed to connect to the transcription server. */
@@ -28,25 +27,17 @@
}
public boolean isVoicemailTranscriptionAvailable() {
- return ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean("voicemail_transcription_available", false);
+ return false;
}
public String getServerAddress() {
// Private voicemail transcription service
- return ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getString(
- "voicemail_transcription_server_address", "voicemailtranscription-pa.googleapis.com");
+ return "";
}
public String getApiKey() {
// Android API key restricted to com.google.android.dialer
- return ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getString(
- "voicemail_transcription_client_api_key", "AIzaSyAXdDnif6B7sBYxU8hzw9qAp3pRPVHs060");
+ return "";
}
public String getAuthToken() {
@@ -54,56 +45,35 @@
}
public boolean shouldUsePlaintext() {
- return ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean("voicemail_transcription_server_use_plaintext", false);
+ return false;
}
public boolean shouldUseSyncApi() {
- return ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean("voicemail_transcription_server_use_sync_api", false);
+ return false;
}
public long getMaxTranscriptionRetries() {
- return ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getLong("voicemail_transcription_max_transcription_retries", 2L);
+ return 2L;
}
public int getMaxGetTranscriptPolls() {
- return (int)
- ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getLong("voicemail_transcription_max_get_transcript_polls", 20L);
+ return 20;
}
public long getInitialGetTranscriptPollDelayMillis() {
- return ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getLong(
- "voicemail_transcription_get_initial_transcript_poll_delay_millis",
- TimeUnit.SECONDS.toMillis(1));
+ return TimeUnit.SECONDS.toMillis(1);
}
public long getMaxGetTranscriptPollTimeMillis() {
- return ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getLong(
- "voicemail_transcription_get_max_transcript_poll_time_millis",
- TimeUnit.MINUTES.toMillis(20));
+ return TimeUnit.MINUTES.toMillis(20);
}
public boolean isVoicemailDonationAvailable() {
- return ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean("voicemail_transcription_donation_available", false);
+ return false;
}
public boolean useClientGeneratedVoicemailIds() {
- return ConfigProviderComponent.get(context)
- .getConfigProvider()
- .getBoolean("voicemail_transcription_client_generated_voicemail_ids", false);
+ return false;
}
@Override
diff --git a/packages.mk b/packages.mk
index 2691f77..6488a9a 100644
--- a/packages.mk
+++ b/packages.mk
@@ -27,7 +27,6 @@
com.android.dialer.common \
com.android.dialer.common.concurrent.testing \
com.android.dialer.common.preference \
- com.android.dialer.configprovider \
com.android.dialer.contacts.displaypreference \
com.android.dialer.contacts.resources \
com.android.dialer.contactphoto \
@@ -65,7 +64,6 @@
com.android.dialer.shortcuts \
com.android.dialer.simulator.impl \
com.android.dialer.simulator.service \
- com.android.dialer.spam.promo \
com.android.dialer.speeddial \
com.android.dialer.spannable \
com.android.dialer.theme \
@@ -95,7 +93,6 @@
com.android.incallui.incall.impl \
com.android.incallui.rtt.impl \
com.android.incallui.rtt.protocol \
- com.android.incallui.speakeasy \
com.android.incallui.sessiondata \
com.android.incallui.spam \
com.android.incallui.speakerbuttonlogic \