From 85e6949e388c53e4866c0b274c30f334870bf8cb Mon Sep 17 00:00:00 2001 From: weijiaxu Date: Mon, 20 Nov 2017 14:47:46 -0800 Subject: Add fast database populating button for benefit of testing. Bug: 69431528 Test: On a local device. PiperOrigin-RevId: 176420058 Change-Id: I3013800d86597b19268723377112286d2e2ceb68 --- .../dialer/databasepopulator/CallLogPopulator.java | 18 +++++++++++-- .../databasepopulator/ContactsPopulator.java | 16 +++++++++-- .../databasepopulator/VoicemailPopulator.java | 22 ++++++++++++--- .../dialer/simulator/impl/SimulatorMainMenu.java | 31 +++++++++++++++++----- 4 files changed, 73 insertions(+), 14 deletions(-) diff --git a/java/com/android/dialer/databasepopulator/CallLogPopulator.java b/java/com/android/dialer/databasepopulator/CallLogPopulator.java index 7c387ecd1..eb3328c78 100644 --- a/java/com/android/dialer/databasepopulator/CallLogPopulator.java +++ b/java/com/android/dialer/databasepopulator/CallLogPopulator.java @@ -26,9 +26,11 @@ import android.provider.CallLog.Calls; import android.support.annotation.NonNull; import android.support.annotation.WorkerThread; import com.android.dialer.common.Assert; +import com.android.dialer.databasepopulator.CallLogPopulator.CallEntry.Builder; 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 +86,20 @@ public final class CallLogPopulator { } @WorkerThread - public static void populateCallLog(@NonNull Context context, boolean isWithoutMissedCalls) { + public static void populateCallLog( + @NonNull Context context, boolean isWithoutMissedCalls, boolean fastMode) { Assert.isWorkerThread(); ArrayList operations = new ArrayList<>(); // Do this 4 times to make the call log 4 times bigger. long timeMillis = System.currentTimeMillis(); + List 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; @@ -110,6 +119,11 @@ public final class CallLogPopulator { } } + @WorkerThread + public static void populateCallLog(@NonNull Context context, boolean isWithoutMissedCalls) { + populateCallLog(context, isWithoutMissedCalls, false); + } + @WorkerThread public static void deleteAllCallLog(@NonNull Context context) { Assert.isWorkerThread(); diff --git a/java/com/android/dialer/databasepopulator/ContactsPopulator.java b/java/com/android/dialer/databasepopulator/ContactsPopulator.java index e93c5697a..79492e9d3 100644 --- a/java/com/android/dialer/databasepopulator/ContactsPopulator.java +++ b/java/com/android/dialer/databasepopulator/ContactsPopulator.java @@ -127,12 +127,19 @@ public final class ContactsPopulator { }; @WorkerThread - public static void populateContacts(@NonNull Context context) { + public static void populateContacts(@NonNull Context context, boolean fastMode) { Assert.isWorkerThread(); ArrayList operations = new ArrayList<>(); - for (Contact contact : SIMPLE_CONTACTS) { + List 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) { @@ -140,6 +147,11 @@ public final class ContactsPopulator { } } + @WorkerThread + public static void populateContacts(@NonNull Context context) { + populateContacts(context, false); + } + @WorkerThread public static void deleteAllContacts(@NonNull Context context) { Assert.isWorkerThread(); diff --git a/java/com/android/dialer/databasepopulator/VoicemailPopulator.java b/java/com/android/dialer/databasepopulator/VoicemailPopulator.java index 9e0f45345..3e692ebcf 100644 --- a/java/com/android/dialer/databasepopulator/VoicemailPopulator.java +++ b/java/com/android/dialer/databasepopulator/VoicemailPopulator.java @@ -29,7 +29,11 @@ import android.support.annotation.WorkerThread; import android.telecom.PhoneAccountHandle; import android.telephony.TelephonyManager; import com.android.dialer.common.Assert; +import com.android.dialer.databasepopulator.VoicemailPopulator.Voicemail.Builder; 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 +78,19 @@ public final class VoicemailPopulator { }; @WorkerThread - public static void populateVoicemail(@NonNull Context context) { + public static void populateVoicemail(@NonNull Context context, boolean fastMode) { Assert.isWorkerThread(); enableVoicemail(context); - + List 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() @@ -93,12 +102,17 @@ public final class VoicemailPopulator { } } + @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/simulator/impl/SimulatorMainMenu.java b/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java index e2082105b..6053a0d52 100644 --- a/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java +++ b/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java @@ -40,6 +40,7 @@ final class SimulatorMainMenu { .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 @@ final class SimulatorMainMenu { .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 @@ final class SimulatorMainMenu { private SimulatorMainMenu() {} - private static class PopulateDatabaseWorker implements Worker { + private static class PopulateDatabaseWorker implements Worker { @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 @@ final class SimulatorMainMenu { return PersistentLogger.dumpLogToString(); } } + + private static class PopulateDatabaseWorkerInput { + Context context; + boolean fastMode; + + PopulateDatabaseWorkerInput(Context context, boolean fastMode) { + this.context = context; + this.fastMode = fastMode; + } + } } -- cgit v1.2.3 From f2d88b65fe86a7e2a67958ae0ac7e1961de9ac44 Mon Sep 17 00:00:00 2001 From: twyen Date: Mon, 20 Nov 2017 14:48:06 -0800 Subject: Clear pendingAction when pausing PreCallCoordinator When resumed runNextAction() will assert that pendingAction is null so if there's any it won't be interrupted. When the coordinator is paused all dialogs and pending actions must be discarded. If the pending action is not properly discarded it will still assert when trying to call finish(). Bug: 69069675 Test: PreCallCoordinatorImplTest PiperOrigin-RevId: 176420108 Change-Id: Ie89bda3621371a105dc58ff02d83812194a1ea0b --- java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java b/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java index 485823e9a..de32cc2ae 100644 --- a/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java +++ b/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java @@ -76,6 +76,7 @@ public class PreCallCoordinatorImpl implements PreCallCoordinator { currentAction.onDiscard(); } currentAction = null; + pendingAction = null; } void onSaveInstanceState(Bundle outState) { -- cgit v1.2.3 From ba99befea1f4402a854351f80d8627909a532331 Mon Sep 17 00:00:00 2001 From: twyen Date: Mon, 20 Nov 2017 15:13:07 -0800 Subject: Implement SIM selection dialog Bug: 64216442,64214592,64213352 Test: N/A PiperOrigin-RevId: 176424724 Change-Id: I1709156098a14ac3bd35d98b913e7b881fcd9b2b --- .../common/res/layout/default_account_checkbox.xml | 42 ++++++++----- .../common/res/layout/select_account_list_item.xml | 70 +++++++++++++--------- .../widget/SelectPhoneAccountDialogFragment.java | 57 +++++++++++++++--- .../precall/impl/CallingAccountSelector.java | 45 ++++++++++++-- .../dialer/precall/impl/res/values/strings.xml | 12 ++++ .../com/android/incallui/InCallActivityCommon.java | 4 +- 6 files changed, 172 insertions(+), 58 deletions(-) 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 b7c0cf644..1e76b74f5 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 @@ --> - + + /> + + + 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 fbd31e573..8f7cc7017 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 @@ + 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"> + android:id="@+id/icon" + android:layout_width="24dp" + android:layout_height="24dp" + android:scaleType="center"/> - + android:layout_weight="1" + android:paddingStart="24dp" + android:gravity="start|center_vertical" + android:orientation="vertical"> + 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"/> + + diff --git a/java/com/android/contacts/common/widget/SelectPhoneAccountDialogFragment.java b/java/com/android/contacts/common/widget/SelectPhoneAccountDialogFragment.java index e21fded97..3c9d9268f 100644 --- a/java/com/android/contacts/common/widget/SelectPhoneAccountDialogFragment.java +++ b/java/com/android/contacts/common/widget/SelectPhoneAccountDialogFragment.java @@ -55,12 +55,15 @@ public class SelectPhoneAccountDialogFragment extends DialogFragment { 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 mAccountHandles; + private List mHints; private boolean mIsSelected; private boolean mIsDefaultChecked; private SelectPhoneAccountListener mListener; @@ -78,7 +81,7 @@ public class SelectPhoneAccountDialogFragment extends DialogFragment { 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 @@ public class SelectPhoneAccountDialogFragment extends DialogFragment { * @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 accountHandles, SelectPhoneAccountListener listener, - @Nullable String callId) { + @Nullable String callId, + @Nullable List hints) { ArrayList accountHandlesCopy = new ArrayList<>(); if (accountHandles != null) { accountHandlesCopy.addAll(accountHandles); @@ -105,9 +115,13 @@ public class SelectPhoneAccountDialogFragment extends DialogFragment { 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 @@ public class SelectPhoneAccountDialogFragment extends DialogFragment { 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 @@ public class SelectPhoneAccountDialogFragment extends DialogFragment { 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 @@ public class SelectPhoneAccountDialogFragment extends DialogFragment { 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 @@ public class SelectPhoneAccountDialogFragment extends DialogFragment { private static class SelectAccountListAdapter extends ArrayAdapter { private int mResId; + private final List mHints; SelectAccountListAdapter( - Context context, int resource, List accountHandles) { + Context context, + int resource, + List accountHandles, + @Nullable List hints) { super(context, resource, accountHandles); + mHints = hints; mResId = resource; } @@ -269,6 +296,7 @@ public class SelectPhoneAccountDialogFragment extends DialogFragment { 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 @@ public class SelectPhoneAccountDialogFragment extends DialogFragment { } 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 @@ public class SelectPhoneAccountDialogFragment extends DialogFragment { TextView labelTextView; TextView numberTextView; + TextView hintTextView; ImageView imageView; } } diff --git a/java/com/android/dialer/precall/impl/CallingAccountSelector.java b/java/com/android/dialer/precall/impl/CallingAccountSelector.java index d46e31711..fe3a5b631 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.PreferredSimFallbackContract.PreferredSim 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 @@ public class CallingAccountSelector implements PreCallAction { PendingAction pendingAction, @Nullable String dataId, @Nullable String number, - @Nullable Suggestion unusedSuggestion) { // TODO(twyen): incoporate suggestion in dialog + @Nullable Suggestion suggestion) { Assert.isMainThread(); + List 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 buildHint( + Context context, + List phoneAccountHandles, + @Nullable Suggestion suggestion) { + if (suggestion == null) { + return null; + } + List 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/res/values/strings.xml b/java/com/android/dialer/precall/impl/res/values/strings.xml index 894394662..0d30ac9e5 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]--> Call with + + Remember this choice + + + Same carrier + + + You use often + \ No newline at end of file diff --git a/java/com/android/incallui/InCallActivityCommon.java b/java/com/android/incallui/InCallActivityCommon.java index e8588a67a..d2aae485d 100644 --- a/java/com/android/incallui/InCallActivityCommon.java +++ b/java/com/android/incallui/InCallActivityCommon.java @@ -524,9 +524,11 @@ public class InCallActivityCommon { 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; -- cgit v1.2.3 From 1b39ebece6d773567a29884adc78d2c42378cacb Mon Sep 17 00:00:00 2001 From: twyen Date: Mon, 20 Nov 2017 15:28:48 -0800 Subject: Remove assert on StubVoicemailClient.addActivationStateListener() The default "do nothing" behavior is enough. Bug: 69309850 Test: N/A PiperOrigin-RevId: 176427193 Change-Id: Icd66f8ebb75b889a3cceef895bc3bf71c466ccf6 --- java/com/android/voicemail/stub/StubVoicemailClient.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/com/android/voicemail/stub/StubVoicemailClient.java b/java/com/android/voicemail/stub/StubVoicemailClient.java index 3069ea4ba..2b02261c4 100644 --- a/java/com/android/voicemail/stub/StubVoicemailClient.java +++ b/java/com/android/voicemail/stub/StubVoicemailClient.java @@ -111,12 +111,12 @@ public final class StubVoicemailClient implements VoicemailClient { @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 -- cgit v1.2.3 From 7ef551e512ea6cc80a393f52902f1450e3a1d9d4 Mon Sep 17 00:00:00 2001 From: twyen Date: Mon, 20 Nov 2017 16:13:33 -0800 Subject: Initialize executors before updating change PIN state When the activity is launched it might immediately attempt to verify the stored pin, which happened before the executor is initialized Bug: 69179171 Test: N/A - legacy code, refactoring required PiperOrigin-RevId: 176433263 Change-Id: I8202a760dbfc7759e128ef31d477510526d0bee7 --- .../voicemail/settings/VoicemailChangePinActivity.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/java/com/android/dialer/voicemail/settings/VoicemailChangePinActivity.java b/java/com/android/dialer/voicemail/settings/VoicemailChangePinActivity.java index 4d53d61d2..13ca5b724 100644 --- a/java/com/android/dialer/voicemail/settings/VoicemailChangePinActivity.java +++ b/java/com/android/dialer/voicemail/settings/VoicemailChangePinActivity.java @@ -357,13 +357,6 @@ public class VoicemailChangePinActivity extends Activity 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 @@ public class VoicemailChangePinActivity extends Activity .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. */ -- cgit v1.2.3 From d2f29974f3e0a9c54a341996a90d39342be07ca3 Mon Sep 17 00:00:00 2001 From: erfanian Date: Mon, 20 Nov 2017 16:57:06 -0800 Subject: Add impression to track when users explicitly disable assisted dialing. Test: new unit tests PiperOrigin-RevId: 176438950 Change-Id: Ic0747302170593b91da4148029396c36ab070c6e --- .../ui/AssistedDialingSettingFragment.java | 17 +++++++++++++++++ java/com/android/dialer/logging/dialer_impression.proto | 3 +++ 2 files changed, 20 insertions(+) diff --git a/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java b/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java index a70844fbd..05ca6d912 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.os.Bundle; 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 @@ public class AssistedDialingSettingFragment extends PreferenceFragment { // 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 @@ public class AssistedDialingSettingFragment extends PreferenceFragment { countryChooserPref.setSummary(countryChooserPref.getEntry()); } countryChooserPref.setOnPreferenceChangeListener(this::updateListSummary); + switchPref.setOnPreferenceChangeListener(this::logIfUserDisabledFeature); } boolean updateListSummary(Preference pref, Object newValue) { @@ -46,4 +54,13 @@ public class AssistedDialingSettingFragment extends PreferenceFragment { 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/logging/dialer_impression.proto b/java/com/android/dialer/logging/dialer_impression.proto index 3dd645e65..c2456d8ac 100644 --- a/java/com/android/dialer/logging/dialer_impression.proto +++ b/java/com/android/dialer/logging/dialer_impression.proto @@ -12,6 +12,7 @@ message DialerImpression { // 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 @@ message DialerImpression { // 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 = -- cgit v1.2.3 From 236d6dbb0f6a7d352345b0a59fa21499ad55c2d5 Mon Sep 17 00:00:00 2001 From: weijiaxu Date: Mon, 20 Nov 2017 17:40:49 -0800 Subject: Quick fix recursively importing. Test: On a local device. PiperOrigin-RevId: 176443649 Change-Id: I73982924baf6ce0e947137766ec0038decd716e5 --- java/com/android/dialer/databasepopulator/CallLogPopulator.java | 3 +-- java/com/android/dialer/databasepopulator/VoicemailPopulator.java | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/java/com/android/dialer/databasepopulator/CallLogPopulator.java b/java/com/android/dialer/databasepopulator/CallLogPopulator.java index eb3328c78..dd6dc6420 100644 --- a/java/com/android/dialer/databasepopulator/CallLogPopulator.java +++ b/java/com/android/dialer/databasepopulator/CallLogPopulator.java @@ -26,7 +26,6 @@ import android.provider.CallLog.Calls; import android.support.annotation.NonNull; import android.support.annotation.WorkerThread; import com.android.dialer.common.Assert; -import com.android.dialer.databasepopulator.CallLogPopulator.CallEntry.Builder; import com.google.auto.value.AutoValue; import java.util.ArrayList; import java.util.Arrays; @@ -92,7 +91,7 @@ public final class CallLogPopulator { ArrayList operations = new ArrayList<>(); // Do this 4 times to make the call log 4 times bigger. long timeMillis = System.currentTimeMillis(); - List callLogs = new ArrayList<>(); + List callLogs = new ArrayList<>(); if (fastMode) { callLogs.add(SIMPLE_CALL_LOG[0]); } else { diff --git a/java/com/android/dialer/databasepopulator/VoicemailPopulator.java b/java/com/android/dialer/databasepopulator/VoicemailPopulator.java index 3e692ebcf..b1f8d1fe4 100644 --- a/java/com/android/dialer/databasepopulator/VoicemailPopulator.java +++ b/java/com/android/dialer/databasepopulator/VoicemailPopulator.java @@ -29,7 +29,6 @@ import android.support.annotation.WorkerThread; import android.telecom.PhoneAccountHandle; import android.telephony.TelephonyManager; import com.android.dialer.common.Assert; -import com.android.dialer.databasepopulator.VoicemailPopulator.Voicemail.Builder; import com.google.auto.value.AutoValue; import java.util.ArrayList; import java.util.Arrays; @@ -81,7 +80,7 @@ public final class VoicemailPopulator { public static void populateVoicemail(@NonNull Context context, boolean fastMode) { Assert.isWorkerThread(); enableVoicemail(context); - List voicemails = new ArrayList<>(); + List voicemails = new ArrayList<>(); if (fastMode) { voicemails.add(SIMPLE_VOICEMAILS[0]); } else { -- cgit v1.2.3