diff options
| author | Menny Even Danan <menny@evendanan.net> | 2016-02-26 05:41:14 +0000 |
|---|---|---|
| committer | Menny Even Danan <menny@evendanan.net> | 2016-02-26 05:41:14 +0000 |
| commit | 5b5dca2d97f7f557800a0a666e22fea03989d550 (patch) | |
| tree | 5bcc01e65254761aad00948a58b7ebe02106607b /src/main/java/com/anysoftkeyboard | |
| parent | 92cd901da558d31409bfec60b9c16daedad4a248 (diff) | |
| download | AnySoftKeyboard-5b5dca2d97f7f557800a0a666e22fea03989d550.tar.gz AnySoftKeyboard-5b5dca2d97f7f557800a0a666e22fea03989d550.tar.bz2 | |
supporting permenant contacts denied. #470
Diffstat (limited to 'src/main/java/com/anysoftkeyboard')
| -rw-r--r-- | src/main/java/com/anysoftkeyboard/ui/settings/MainSettingsActivity.java | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/main/java/com/anysoftkeyboard/ui/settings/MainSettingsActivity.java b/src/main/java/com/anysoftkeyboard/ui/settings/MainSettingsActivity.java index d3e773fec..1d465bfee 100644 --- a/src/main/java/com/anysoftkeyboard/ui/settings/MainSettingsActivity.java +++ b/src/main/java/com/anysoftkeyboard/ui/settings/MainSettingsActivity.java @@ -16,21 +16,28 @@ package com.anysoftkeyboard.ui.settings; +import android.Manifest; +import android.content.DialogInterface; import android.content.SharedPreferences; +import android.content.pm.PackageManager; import android.content.res.Configuration; import android.os.Bundle; +import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.content.ContextCompat; +import android.support.v4.content.SharedPreferencesCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; +import android.support.v7.app.AlertDialog; import android.view.Gravity; import android.view.MenuItem; import android.view.View; import android.widget.TextView; +import com.anysoftkeyboard.PermissionsRequestCodes; import com.anysoftkeyboard.keyboards.KeyboardFactory; import com.anysoftkeyboard.theme.KeyboardTheme; import com.anysoftkeyboard.theme.KeyboardThemeFactory; @@ -120,6 +127,15 @@ public class MainSettingsActivity extends PermissionsFragmentChauffeurActivity { } @Override + protected void onStop() { + super.onStop(); + if (mAlertDialog != null && mAlertDialog.isShowing()) { + mAlertDialog.dismiss(); + mAlertDialog = null; + } + } + + @Override protected void onDestroy() { super.onDestroy(); AnyApplication.getConfig().removeChangedListener(menuExtraUpdaterOnConfigChange); @@ -238,4 +254,51 @@ public class MainSettingsActivity extends PermissionsFragmentChauffeurActivity { activity.setTitle(title); } } + + private final DialogInterface.OnClickListener mContactsDictionaryDialogListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, final int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: + if (ActivityCompat.shouldShowRequestPermissionRationale(MainSettingsActivity.this, Manifest.permission.READ_CONTACTS)) { + startPermissionsRequest(PermissionsRequestCodes.CONTACTS.getRequestCode(), Manifest.permission.READ_CONTACTS); + } else { + startAppPermissionsActivity(); + } + break; + case DialogInterface.BUTTON_NEGATIVE: + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); + SharedPreferencesCompat.EditorCompat.getInstance().apply( + sharedPreferences + .edit() + .putBoolean(getString(R.string.settings_key_use_contacts_dictionary), false) + ); + break; + } + } + }; + + private AlertDialog mAlertDialog; + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == PermissionsRequestCodes.CONTACTS.getRequestCode() && grantResults[0] == PackageManager.PERMISSION_DENIED) { + //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(this, 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(this); + builder.setCancelable(true); + builder.setIcon(R.drawable.ic_notification_contacts_permission_required); + builder.setTitle(R.string.notification_read_contacts_title); + builder.setMessage(getString(R.string.contacts_permissions_dialog_message)); + builder.setPositiveButton(getString(userSaysDontAskAgain ? R.string.navigate_to_app_permissions : R.string.allow_permission), mContactsDictionaryDialogListener); + builder.setNegativeButton(getString(R.string.turn_off_contacts_dictionary), mContactsDictionaryDialogListener); + + if (mAlertDialog != null && mAlertDialog.isShowing()) mAlertDialog.dismiss(); + mAlertDialog = builder.create(); + mAlertDialog.show(); + } + } } |
