Merge changes I73982924,Ic0747302,I8202a760,Icd66f8eb,I17091560, ...
* changes:
Quick fix recursively importing.
Add impression to track when users explicitly disable assisted dialing.
Initialize executors before updating change PIN state
Remove assert on StubVoicemailClient.addActivationStateListener()
Implement SIM selection dialog
Clear pendingAction when pausing PreCallCoordinator
Add fast database populating button for benefit of testing.
diff --git a/java/com/android/contacts/common/res/layout/default_account_checkbox.xml b/java/com/android/contacts/common/res/layout/default_account_checkbox.xml
index b7c0cf6..1e76b74 100644
--- a/java/com/android/contacts/common/res/layout/default_account_checkbox.xml
+++ b/java/com/android/contacts/common/res/layout/default_account_checkbox.xml
@@ -15,22 +15,36 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/default_account_checkbox_layout"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:padding="4dp"
- android:orientation="vertical">
- <CheckBox
- android:id="@+id/default_account_checkbox_view"
+ android:id="@+id/default_account_checkbox_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="20dip"
- android:layout_marginLeft="13dip"
- android:paddingStart="15dip"
+ android:padding="4dp"
+ android:paddingStart="0dp"
+ android:paddingEnd="24dp"
android:gravity="center"
- android:text="@string/set_default_account"
- android:textAlignment="viewStart"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="@color/dialer_secondary_text_color"
+ android:minHeight="56dp"
+ android:orientation="horizontal"
+ android:focusable="true">
+ <FrameLayout
+ android:layout_width="72dp"
+ android:layout_height="wrap_content">
+ <CheckBox
+ android:id="@+id/default_account_checkbox_view"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:checked="false"/>
/>
+ </FrameLayout>
+ <TextView
+ android:id="@+id/default_account_checkbox_text"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:text="@string/set_default_account"
+ android:textAlignment="viewStart"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textColor="@color/dialer_secondary_text_color"
+ />
+
</LinearLayout>
diff --git a/java/com/android/contacts/common/res/layout/select_account_list_item.xml b/java/com/android/contacts/common/res/layout/select_account_list_item.xml
index fbd31e5..8f7cc70 100644
--- a/java/com/android/contacts/common/res/layout/select_account_list_item.xml
+++ b/java/com/android/contacts/common/res/layout/select_account_list_item.xml
@@ -16,41 +16,53 @@
<!-- Layout of a single item in the InCallUI Account Chooser Dialog. -->
<com.android.contacts.common.widget.ActivityTouchLinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:padding="8dp"
- android:orientation="horizontal">
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="64dp"
+ android:padding="8dp"
+ android:paddingStart="24dp"
+ android:paddingEnd="24dp"
+ android:orientation="horizontal"
+ android:gravity="center">
<ImageView
- android:id="@+id/icon"
- android:layout_width="48dp"
- android:layout_height="48dp"
- android:scaleType="center"/>
+ android:id="@+id/icon"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:scaleType="center"/>
<LinearLayout
- android:id="@+id/text"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:layout_marginStart="8dp"
- android:gravity="start|center_vertical"
- android:orientation="vertical">
- <TextView
- android:id="@+id/label"
- android:layout_width="match_parent"
+ android:id="@+id/text"
+ android:layout_width="0dp"
android:layout_height="wrap_content"
- android:includeFontPadding="false"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="@color/dialer_primary_text_color"/>
+ android:layout_weight="1"
+ android:paddingStart="24dp"
+ android:gravity="start|center_vertical"
+ android:orientation="vertical">
<TextView
- android:id="@+id/number"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:includeFontPadding="false"
- android:maxLines="1"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:visibility="gone"/>
+ android:id="@+id/label"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:includeFontPadding="false"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textColor="@color/dialer_primary_text_color"/>
+ <TextView
+ android:id="@+id/number"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:includeFontPadding="false"
+ android:maxLines="1"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:visibility="gone"/>
+ <TextView
+ android:id="@+id/hint"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:includeFontPadding="false"
+ android:maxLines="1"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:visibility="gone"/>
</LinearLayout>
</com.android.contacts.common.widget.ActivityTouchLinearLayout>
diff --git a/java/com/android/contacts/common/widget/SelectPhoneAccountDialogFragment.java b/java/com/android/contacts/common/widget/SelectPhoneAccountDialogFragment.java
index e21fded..3c9d926 100644
--- a/java/com/android/contacts/common/widget/SelectPhoneAccountDialogFragment.java
+++ b/java/com/android/contacts/common/widget/SelectPhoneAccountDialogFragment.java
@@ -55,12 +55,15 @@
private static final String ARG_TITLE_RES_ID = "title_res_id";
private static final String ARG_CAN_SET_DEFAULT = "can_set_default";
+ private static final String ARG_SET_DEFAULT_RES_ID = "set_default_res_id";
private static final String ARG_ACCOUNT_HANDLES = "account_handles";
private static final String ARG_IS_DEFAULT_CHECKED = "is_default_checked";
private static final String ARG_LISTENER = "listener";
private static final String ARG_CALL_ID = "call_id";
+ private static final String ARG_HINTS = "hints";
private List<PhoneAccountHandle> mAccountHandles;
+ private List<String> mHints;
private boolean mIsSelected;
private boolean mIsDefaultChecked;
private SelectPhoneAccountListener mListener;
@@ -78,7 +81,7 @@
SelectPhoneAccountListener listener,
@Nullable String callId) {
return newInstance(
- R.string.select_account_dialog_title, false, accountHandles, listener, callId);
+ R.string.select_account_dialog_title, false, 0, accountHandles, listener, callId, null);
}
/**
@@ -88,15 +91,22 @@
* @param titleResId The resource ID for the string to use in the title of the dialog.
* @param canSetDefault {@code true} if the dialog should include an option to set the selection
* as the default. False otherwise.
+ * @param setDefaultResId The resource ID for the string to use in the "set as default" checkbox
* @param accountHandles The {@code PhoneAccountHandle}s available to select from.
* @param listener The listener for the results of the account selection.
+ * @param callId The callId to be passed back to the listener in {@link
+ * SelectPhoneAccountListener#EXTRA_CALL_ID}
+ * @param hints Additional information to be shown underneath the phone account to help user
+ * choose. Index must match {@code accountHandles}
*/
public static SelectPhoneAccountDialogFragment newInstance(
int titleResId,
boolean canSetDefault,
+ int setDefaultResId,
List<PhoneAccountHandle> accountHandles,
SelectPhoneAccountListener listener,
- @Nullable String callId) {
+ @Nullable String callId,
+ @Nullable List<String> hints) {
ArrayList<PhoneAccountHandle> accountHandlesCopy = new ArrayList<>();
if (accountHandles != null) {
accountHandlesCopy.addAll(accountHandles);
@@ -105,9 +115,13 @@
final Bundle args = new Bundle();
args.putInt(ARG_TITLE_RES_ID, titleResId);
args.putBoolean(ARG_CAN_SET_DEFAULT, canSetDefault);
+ args.putInt(ARG_SET_DEFAULT_RES_ID, setDefaultResId);
args.putParcelableArrayList(ARG_ACCOUNT_HANDLES, accountHandlesCopy);
args.putParcelable(ARG_LISTENER, listener);
args.putString(ARG_CALL_ID, callId);
+ if (hints != null) {
+ args.putStringArrayList(ARG_HINTS, new ArrayList<>(hints));
+ }
fragment.setArguments(args);
fragment.setListener(listener);
return fragment;
@@ -140,6 +154,7 @@
boolean canSetDefault = getArguments().getBoolean(ARG_CAN_SET_DEFAULT);
mAccountHandles = getArguments().getParcelableArrayList(ARG_ACCOUNT_HANDLES);
mListener = getArguments().getParcelable(ARG_LISTENER);
+ mHints = getArguments().getStringArrayList(ARG_HINTS);
if (savedInstanceState != null) {
mIsDefaultChecked = savedInstanceState.getBoolean(ARG_IS_DEFAULT_CHECKED);
}
@@ -173,7 +188,7 @@
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
ListAdapter selectAccountListAdapter =
new SelectAccountListAdapter(
- builder.getContext(), R.layout.select_account_list_item, mAccountHandles);
+ builder.getContext(), R.layout.select_account_list_item, mAccountHandles, mHints);
AlertDialog dialog =
builder
@@ -189,10 +204,17 @@
LayoutInflater.from(builder.getContext())
.inflate(R.layout.default_account_checkbox, null);
- CheckBox cb = (CheckBox) checkboxLayout.findViewById(R.id.default_account_checkbox_view);
- cb.setOnCheckedChangeListener(checkListener);
- cb.setChecked(mIsDefaultChecked);
+ CheckBox checkBox = checkboxLayout.findViewById(R.id.default_account_checkbox_view);
+ checkBox.setOnCheckedChangeListener(checkListener);
+ checkBox.setChecked(mIsDefaultChecked);
+ TextView textView = checkboxLayout.findViewById(R.id.default_account_checkbox_text);
+ int setDefaultResId =
+ getArguments().getInt(ARG_SET_DEFAULT_RES_ID, R.string.set_default_account);
+ textView.setText(setDefaultResId);
+ textView.setOnClickListener((view) -> checkBox.performClick());
+ checkboxLayout.setOnClickListener((view) -> checkBox.performClick());
+ checkboxLayout.setContentDescription(getString(setDefaultResId));
dialog.getListView().addFooterView(checkboxLayout);
}
@@ -248,10 +270,15 @@
private static class SelectAccountListAdapter extends ArrayAdapter<PhoneAccountHandle> {
private int mResId;
+ private final List<String> mHints;
SelectAccountListAdapter(
- Context context, int resource, List<PhoneAccountHandle> accountHandles) {
+ Context context,
+ int resource,
+ List<PhoneAccountHandle> accountHandles,
+ @Nullable List<String> hints) {
super(context, resource, accountHandles);
+ mHints = hints;
mResId = resource;
}
@@ -269,6 +296,7 @@
holder = new ViewHolder();
holder.labelTextView = (TextView) rowView.findViewById(R.id.label);
holder.numberTextView = (TextView) rowView.findViewById(R.id.number);
+ holder.hintTextView = rowView.findViewById(R.id.hint);
holder.imageView = (ImageView) rowView.findViewById(R.id.icon);
rowView.setTag(holder);
} else {
@@ -294,6 +322,18 @@
}
holder.imageView.setImageDrawable(
PhoneAccountCompat.createIconDrawable(account, getContext()));
+ if (mHints != null && position < mHints.size()) {
+ String hint = mHints.get(position);
+ if (TextUtils.isEmpty(hint)) {
+ holder.hintTextView.setVisibility(View.GONE);
+ } else {
+ holder.hintTextView.setVisibility(View.VISIBLE);
+ holder.hintTextView.setText(hint);
+ }
+ } else {
+ holder.hintTextView.setVisibility(View.GONE);
+ }
+
return rowView;
}
@@ -301,6 +341,7 @@
TextView labelTextView;
TextView numberTextView;
+ TextView hintTextView;
ImageView imageView;
}
}
diff --git a/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java b/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
index a70844f..05ca6d9 100644
--- a/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
+++ b/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
@@ -19,7 +19,10 @@
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
+import android.preference.SwitchPreference;
import android.text.TextUtils;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.logging.Logger;
/** The setting for Assisted Dialing */
public class AssistedDialingSettingFragment extends PreferenceFragment {
@@ -30,6 +33,10 @@
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.assisted_dialing_setting);
+ SwitchPreference switchPref =
+ (SwitchPreference)
+ findPreference(getContext().getString(R.string.assisted_dialing_setting_toggle_key));
+
ListPreference countryChooserPref =
(ListPreference)
findPreference(getContext().getString(R.string.assisted_dialing_setting_cc_key));
@@ -38,6 +45,7 @@
countryChooserPref.setSummary(countryChooserPref.getEntry());
}
countryChooserPref.setOnPreferenceChangeListener(this::updateListSummary);
+ switchPref.setOnPreferenceChangeListener(this::logIfUserDisabledFeature);
}
boolean updateListSummary(Preference pref, Object newValue) {
@@ -46,4 +54,13 @@
listPref.setSummary(entries[listPref.findIndexOfValue(newValue.toString())]);
return true;
}
+
+ boolean logIfUserDisabledFeature(Preference pref, Object newValue) {
+ if (!((boolean) newValue)) {
+ Logger.get(getActivity().getApplicationContext())
+ .logImpression(DialerImpression.Type.ASSISTED_DIALING_FEATURE_DISABLED_BY_USER);
+ }
+
+ return true;
+ }
}
diff --git a/java/com/android/dialer/databasepopulator/CallLogPopulator.java b/java/com/android/dialer/databasepopulator/CallLogPopulator.java
index 7c387ec..dd6dc64 100644
--- a/java/com/android/dialer/databasepopulator/CallLogPopulator.java
+++ b/java/com/android/dialer/databasepopulator/CallLogPopulator.java
@@ -29,6 +29,7 @@
import com.google.auto.value.AutoValue;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
import java.util.concurrent.TimeUnit;
/** Populates the device database with call log entries. */
@@ -84,13 +85,20 @@
}
@WorkerThread
- public static void populateCallLog(@NonNull Context context, boolean isWithoutMissedCalls) {
+ public static void populateCallLog(
+ @NonNull Context context, boolean isWithoutMissedCalls, boolean fastMode) {
Assert.isWorkerThread();
ArrayList<ContentProviderOperation> operations = new ArrayList<>();
// Do this 4 times to make the call log 4 times bigger.
long timeMillis = System.currentTimeMillis();
+ List<CallEntry.Builder> callLogs = new ArrayList<>();
+ if (fastMode) {
+ callLogs.add(SIMPLE_CALL_LOG[0]);
+ } else {
+ callLogs = Arrays.asList(SIMPLE_CALL_LOG);
+ }
for (int i = 0; i < 4; i++) {
- for (CallEntry.Builder builder : SIMPLE_CALL_LOG) {
+ for (CallEntry.Builder builder : callLogs) {
CallEntry callEntry = builder.setTimeMillis(timeMillis).build();
if (isWithoutMissedCalls && builder.build().getType() == Calls.MISSED_TYPE) {
continue;
@@ -111,6 +119,11 @@
}
@WorkerThread
+ public static void populateCallLog(@NonNull Context context, boolean isWithoutMissedCalls) {
+ populateCallLog(context, isWithoutMissedCalls, false);
+ }
+
+ @WorkerThread
public static void deleteAllCallLog(@NonNull Context context) {
Assert.isWorkerThread();
try {
diff --git a/java/com/android/dialer/databasepopulator/ContactsPopulator.java b/java/com/android/dialer/databasepopulator/ContactsPopulator.java
index e93c569..79492e9 100644
--- a/java/com/android/dialer/databasepopulator/ContactsPopulator.java
+++ b/java/com/android/dialer/databasepopulator/ContactsPopulator.java
@@ -127,12 +127,19 @@
};
@WorkerThread
- public static void populateContacts(@NonNull Context context) {
+ public static void populateContacts(@NonNull Context context, boolean fastMode) {
Assert.isWorkerThread();
ArrayList<ContentProviderOperation> operations = new ArrayList<>();
- for (Contact contact : SIMPLE_CONTACTS) {
+ List<Contact> contacts = new ArrayList<>();
+ if (fastMode) {
+ contacts.add(SIMPLE_CONTACTS[0]);
+ } else {
+ contacts = Arrays.asList(SIMPLE_CONTACTS);
+ }
+ for (Contact contact : contacts) {
addContact(contact, operations);
}
+
try {
context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, operations);
} catch (RemoteException | OperationApplicationException e) {
@@ -141,6 +148,11 @@
}
@WorkerThread
+ public static void populateContacts(@NonNull Context context) {
+ populateContacts(context, false);
+ }
+
+ @WorkerThread
public static void deleteAllContacts(@NonNull Context context) {
Assert.isWorkerThread();
try {
diff --git a/java/com/android/dialer/databasepopulator/VoicemailPopulator.java b/java/com/android/dialer/databasepopulator/VoicemailPopulator.java
index 9e0f453..b1f8d1f 100644
--- a/java/com/android/dialer/databasepopulator/VoicemailPopulator.java
+++ b/java/com/android/dialer/databasepopulator/VoicemailPopulator.java
@@ -30,6 +30,9 @@
import android.telephony.TelephonyManager;
import com.android.dialer.common.Assert;
import com.google.auto.value.AutoValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
import java.util.concurrent.TimeUnit;
/** Populates the device database with voicemail entries. */
@@ -74,14 +77,19 @@
};
@WorkerThread
- public static void populateVoicemail(@NonNull Context context) {
+ public static void populateVoicemail(@NonNull Context context, boolean fastMode) {
Assert.isWorkerThread();
enableVoicemail(context);
-
+ List<Voicemail.Builder> voicemails = new ArrayList<>();
+ if (fastMode) {
+ voicemails.add(SIMPLE_VOICEMAILS[0]);
+ } else {
+ voicemails = Arrays.asList(SIMPLE_VOICEMAILS);
+ }
// Do this 4 times to make the voicemail database 4 times bigger.
long timeMillis = System.currentTimeMillis();
for (int i = 0; i < 4; i++) {
- for (Voicemail.Builder builder : SIMPLE_VOICEMAILS) {
+ for (Voicemail.Builder builder : voicemails) {
Voicemail voicemail = builder.setTimeMillis(timeMillis).build();
context
.getContentResolver()
@@ -94,11 +102,16 @@
}
@WorkerThread
+ public static void populateVoicemail(@NonNull Context context) {
+ populateVoicemail(context, false);
+ }
+
+ @WorkerThread
public static void deleteAllVoicemail(@NonNull Context context) {
Assert.isWorkerThread();
context
.getContentResolver()
- .delete(Voicemails.buildSourceUri(context.getPackageName()), "", new String[] {});
+ .delete(Voicemails.buildSourceUri(context.getPackageName()), null, null);
}
@VisibleForTesting
diff --git a/java/com/android/dialer/logging/dialer_impression.proto b/java/com/android/dialer/logging/dialer_impression.proto
index 3dd645e..c2456d8 100644
--- a/java/com/android/dialer/logging/dialer_impression.proto
+++ b/java/com/android/dialer/logging/dialer_impression.proto
@@ -12,6 +12,7 @@
// Event enums to be used for Impression Logging in Dialer.
// It's perfectly acceptable for this enum to be large
// Values should be from 1000 to 100000.
+ // Next Tag: 1293
enum Type {
UNKNOWN_AOSP_EVENT_TYPE = 1000;
@@ -589,6 +590,8 @@
// Indicates that the number attempting to be assisted dialed had an
// extension.
ASSISTED_DIALING_CONSTRAINT_NUMBER_HAS_EXTENSION = 1289;
+ // Indicates that the user disabled the feature.
+ ASSISTED_DIALING_FEATURE_DISABLED_BY_USER = 1292;
// User reports a same prefix call as spam from call history
REPORT_SAME_PREFIX_CALL_AS_SPAM_VIA_CALL_HISTORY =
diff --git a/java/com/android/dialer/precall/impl/CallingAccountSelector.java b/java/com/android/dialer/precall/impl/CallingAccountSelector.java
index d46e317..fe3a5b6 100644
--- a/java/com/android/dialer/precall/impl/CallingAccountSelector.java
+++ b/java/com/android/dialer/precall/impl/CallingAccountSelector.java
@@ -48,6 +48,7 @@
import com.android.dialer.preferredsim.suggestion.SimSuggestionComponent;
import com.android.dialer.preferredsim.suggestion.SuggestionProvider.Suggestion;
import com.google.common.base.Optional;
+import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -158,22 +159,54 @@
PendingAction pendingAction,
@Nullable String dataId,
@Nullable String number,
- @Nullable Suggestion unusedSuggestion) { // TODO(twyen): incoporate suggestion in dialog
+ @Nullable Suggestion suggestion) {
Assert.isMainThread();
+ List<PhoneAccountHandle> phoneAccountHandles =
+ coordinator
+ .getActivity()
+ .getSystemService(TelecomManager.class)
+ .getCallCapablePhoneAccounts();
selectPhoneAccountDialogFragment =
SelectPhoneAccountDialogFragment.newInstance(
R.string.pre_call_select_phone_account,
dataId != null /* canSetDefault */,
- coordinator
- .getActivity()
- .getSystemService(TelecomManager.class)
- .getCallCapablePhoneAccounts(),
+ R.string.pre_call_select_phone_account_remember,
+ phoneAccountHandles,
new SelectedListener(coordinator, pendingAction, dataId, number),
- null /* call ID */);
+ null /* call ID */,
+ buildHint(coordinator.getActivity(), phoneAccountHandles, suggestion));
selectPhoneAccountDialogFragment.show(
coordinator.getActivity().getFragmentManager(), TAG_CALLING_ACCOUNT_SELECTOR);
}
+ @Nullable
+ private static List<String> buildHint(
+ Context context,
+ List<PhoneAccountHandle> phoneAccountHandles,
+ @Nullable Suggestion suggestion) {
+ if (suggestion == null) {
+ return null;
+ }
+ List<String> hints = new ArrayList<>();
+ for (PhoneAccountHandle phoneAccountHandle : phoneAccountHandles) {
+ if (!phoneAccountHandle.equals(suggestion.phoneAccountHandle)) {
+ hints.add(null);
+ continue;
+ }
+ switch (suggestion.reason) {
+ case INTRA_CARRIER:
+ hints.add(context.getString(R.string.pre_call_select_phone_account_hint_intra_carrier));
+ break;
+ case FREQUENT:
+ hints.add(context.getString(R.string.pre_call_select_phone_account_hint_frequent));
+ break;
+ default:
+ throw Assert.createAssertionFailException("unexpected reason " + suggestion.reason);
+ }
+ }
+ return hints;
+ }
+
@MainThread
@Override
public void onDiscard() {
diff --git a/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java b/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java
index 485823e..de32cc2 100644
--- a/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java
+++ b/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java
@@ -76,6 +76,7 @@
currentAction.onDiscard();
}
currentAction = null;
+ pendingAction = null;
}
void onSaveInstanceState(Bundle outState) {
diff --git a/java/com/android/dialer/precall/impl/res/values/strings.xml b/java/com/android/dialer/precall/impl/res/values/strings.xml
index 8943946..0d30ac9 100644
--- a/java/com/android/dialer/precall/impl/res/values/strings.xml
+++ b/java/com/android/dialer/precall/impl/res/values/strings.xml
@@ -19,4 +19,16 @@
multiple SIMs [CHAR LIMIT=40]-->
<string name="pre_call_select_phone_account">Call with</string>
+ <!-- Checkbox label when selecting a SIM when calling a contact, to use the selected SIM for the
+ same contact and never ask again [CHAR LIMIT=40]-->
+ <string name="pre_call_select_phone_account_remember">Remember this choice</string>
+
+ <!-- Hint text under a SIM when selecting SIM to call, indicating the SIM is on the same carrier
+ as the outgoing call.[CHAR LIMIT=40]-->
+ <string name="pre_call_select_phone_account_hint_intra_carrier">Same carrier</string>
+
+ <!-- Hint text under a SIM when selecting SIM to call, indicating user often use the SIM to call
+ the contact.[CHAR LIMIT=40]-->
+ <string name="pre_call_select_phone_account_hint_frequent">You use often</string>
+
</resources>
\ No newline at end of file
diff --git a/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java b/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java
index e208210..6053a0d 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java
@@ -40,6 +40,7 @@
.addItem("IMS video", SimulatorVideoCall.getActionProvider(context))
.addItem("Notifications", SimulatorNotifications.getActionProvider(context))
.addItem("Populate database", () -> populateDatabase(context))
+ .addItem("Fast populate database", () -> fastPopulateDatabase(context))
.addItem("Clean database", () -> cleanDatabase(context))
.addItem("clear preferred SIM", () -> clearPreferredSim(context))
.addItem("Sync voicemail", () -> syncVoicemail(context))
@@ -54,7 +55,15 @@
.dialerExecutorFactory()
.createNonUiTaskBuilder(new PopulateDatabaseWorker())
.build()
- .executeSerial(context);
+ .executeSerial(new PopulateDatabaseWorkerInput(context, false));
+ }
+
+ private static void fastPopulateDatabase(@NonNull Context context) {
+ DialerExecutorComponent.get(context)
+ .dialerExecutorFactory()
+ .createNonUiTaskBuilder(new PopulateDatabaseWorker())
+ .build()
+ .executeSerial(new PopulateDatabaseWorkerInput(context, true));
}
private static void cleanDatabase(@NonNull Context context) {
@@ -97,13 +106,13 @@
private SimulatorMainMenu() {}
- private static class PopulateDatabaseWorker implements Worker<Context, Void> {
+ private static class PopulateDatabaseWorker implements Worker<PopulateDatabaseWorkerInput, Void> {
@Nullable
@Override
- public Void doInBackground(Context context) {
- ContactsPopulator.populateContacts(context);
- CallLogPopulator.populateCallLog(context);
- VoicemailPopulator.populateVoicemail(context);
+ public Void doInBackground(PopulateDatabaseWorkerInput input) {
+ ContactsPopulator.populateContacts(input.context, input.fastMode);
+ CallLogPopulator.populateCallLog(input.context, false, input.fastMode);
+ VoicemailPopulator.populateVoicemail(input.context, input.fastMode);
return null;
}
}
@@ -135,4 +144,14 @@
return PersistentLogger.dumpLogToString();
}
}
+
+ private static class PopulateDatabaseWorkerInput {
+ Context context;
+ boolean fastMode;
+
+ PopulateDatabaseWorkerInput(Context context, boolean fastMode) {
+ this.context = context;
+ this.fastMode = fastMode;
+ }
+ }
}
diff --git a/java/com/android/dialer/voicemail/settings/VoicemailChangePinActivity.java b/java/com/android/dialer/voicemail/settings/VoicemailChangePinActivity.java
index 4d53d61..13ca5b7 100644
--- a/java/com/android/dialer/voicemail/settings/VoicemailChangePinActivity.java
+++ b/java/com/android/dialer/voicemail/settings/VoicemailChangePinActivity.java
@@ -357,13 +357,6 @@
mHintText = (TextView) view.findViewById(R.id.hintText);
mErrorText = (TextView) view.findViewById(R.id.errorText);
- if (isPinScrambled(this, mPhoneAccountHandle)) {
- mOldPin = mPinChanger.getScrambledPin();
- updateState(State.VerifyOldPin);
- } else {
- updateState(State.EnterOldPin);
- }
-
mChangePinExecutor =
DialerExecutorComponent.get(this)
.dialerExecutorFactory()
@@ -371,6 +364,13 @@
.onSuccess(this::sendResult)
.onFailure((tr) -> sendResult(PinChanger.CHANGE_PIN_SYSTEM_ERROR))
.build();
+
+ if (isPinScrambled(this, mPhoneAccountHandle)) {
+ mOldPin = mPinChanger.getScrambledPin();
+ updateState(State.VerifyOldPin);
+ } else {
+ updateState(State.EnterOldPin);
+ }
}
/** Extracts the pin length requirement sent by the server with a STATUS SMS. */
diff --git a/java/com/android/incallui/InCallActivityCommon.java b/java/com/android/incallui/InCallActivityCommon.java
index e8588a6..d2aae48 100644
--- a/java/com/android/incallui/InCallActivityCommon.java
+++ b/java/com/android/incallui/InCallActivityCommon.java
@@ -524,9 +524,11 @@
SelectPhoneAccountDialogFragment.newInstance(
R.string.select_phone_account_for_calls,
true,
+ 0,
phoneAccountHandles,
selectAccountListener,
- waitingForAccountCall.getId());
+ waitingForAccountCall.getId(),
+ null);
selectPhoneAccountDialogFragment.show(
inCallActivity.getFragmentManager(), TAG_SELECT_ACCOUNT_FRAGMENT);
return true;
diff --git a/java/com/android/voicemail/stub/StubVoicemailClient.java b/java/com/android/voicemail/stub/StubVoicemailClient.java
index 3069ea4..2b02261 100644
--- a/java/com/android/voicemail/stub/StubVoicemailClient.java
+++ b/java/com/android/voicemail/stub/StubVoicemailClient.java
@@ -111,12 +111,12 @@
@Override
public void addActivationStateListener(ActivationStateListener listener) {
- throw Assert.createAssertionFailException("should never be called on stub.");
+ // Do nothing
}
@Override
public void removeActivationStateListener(ActivationStateListener listener) {
- throw Assert.createAssertionFailException("should never be called on stub.");
+ // Do nothing
}
@Override