@Override
    public void onPermissionsDenied(
        @NonNull String[] grantedPermissions,
        @NonNull String[] deniedPermissions,
        @NonNull String[] declinedPermissions) {
      MainSettingsActivity activity = mMainSettingsActivityWeakReference.get();
      if (activity == null) return;
      // if the result is DENIED and the OS says "do not show rationale", it means the user has
      // ticked "Don't ask me again".
      final boolean userSaysDontAskAgain =
          !ActivityCompat.shouldShowRequestPermissionRationale(
              activity, Manifest.permission.READ_CONTACTS);
      // the user has denied us from reading the Contacts information.
      // I'll ask them to whether they want to grant anyway, or disable ContactDictionary
      AlertDialog.Builder builder = new AlertDialog.Builder(activity);
      builder.setCancelable(true);
      builder.setIcon(R.drawable.ic_notification_contacts_permission_required);
      builder.setTitle(R.string.notification_read_contacts_title);
      builder.setMessage(activity.getString(R.string.contacts_permissions_dialog_message));
      builder.setPositiveButton(
          activity.getString(
              userSaysDontAskAgain
                  ? R.string.navigate_to_app_permissions
                  : R.string.allow_permission),
          activity.mContactsDictionaryDialogListener);
      builder.setNegativeButton(
          activity.getString(R.string.turn_off_contacts_dictionary),
          activity.mContactsDictionaryDialogListener);

      if (activity.mAlertDialog != null && activity.mAlertDialog.isShowing())
        activity.mAlertDialog.dismiss();
      activity.mAlertDialog = builder.create();
      activity.mAlertDialog.show();
    }
  @Test
  public void testOnCreateWhenASKNotEnabled() throws Exception {
    // mocking ASK as disabled and inactive
    ShadowSettings.ShadowSecure.putString(
        RuntimeEnvironment.application.getContentResolver(),
        Settings.Secure.ENABLED_INPUT_METHODS,
        new ComponentName("net.some.one.else", "net.some.one.else.IME").flattenToString());
    ShadowSettings.ShadowSecure.putString(
        RuntimeEnvironment.application.getContentResolver(),
        Settings.Secure.DEFAULT_INPUT_METHOD,
        new ComponentName("net.some.one.else", "net.some.one.else.IME").flattenToString());

    Assert.assertNull(ShadowApplication.getInstance().getNextStartedActivity());
    ActivityController<LauncherSettingsActivity> controller =
        Robolectric.buildActivity(LauncherSettingsActivity.class).attach().create().resume();
    Intent startWizardActivityIntent = ShadowApplication.getInstance().getNextStartedActivity();
    Assert.assertNotNull(startWizardActivityIntent);

    Intent expectIntent =
        MainSettingsActivity.createStartActivityIntentForAddingFragmentToUi(
            controller.get(),
            MainSettingsActivity.class,
            new SetUpKeyboardWizardFragment(),
            TransitionExperiences.ROOT_FRAGMENT_EXPERIENCE_TRANSITION);

    Assert.assertEquals(expectIntent.getComponent(), startWizardActivityIntent.getComponent());
    Assert.assertEquals(expectIntent.getAction(), startWizardActivityIntent.getAction());
    Assert.assertEquals(
        expectIntent.getParcelableExtra("FragmentChauffeurActivity_KEY_FRAGMENT_ANIMATION"),
        startWizardActivityIntent.getParcelableExtra(
            "FragmentChauffeurActivity_KEY_FRAGMENT_ANIMATION"));
    Assert.assertEquals(
        expectIntent.getSerializableExtra("FragmentChauffeurActivity_KEY_FRAGMENT_CLASS_TO_ADD"),
        startWizardActivityIntent.getSerializableExtra(
            "FragmentChauffeurActivity_KEY_FRAGMENT_CLASS_TO_ADD"));
  }
 @Override
 public void onStart() {
   super.onStart();
   MainSettingsActivity.setActivityTitle(this, getString(R.string.next_word_dict_settings));
   loadUsageStatistics();
 }