Home | History | Annotate | Download | only in spellcheck
      1 /*
      2  * Copyright (C) 2011 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.inputmethod.latin.spellcheck;
     18 
     19 import android.Manifest;
     20 import android.content.SharedPreferences;
     21 import android.os.Bundle;
     22 import android.preference.PreferenceScreen;
     23 import android.preference.SwitchPreference;
     24 import android.text.TextUtils;
     25 
     26 import com.android.inputmethod.latin.R;
     27 import com.android.inputmethod.latin.permissions.PermissionsManager;
     28 import com.android.inputmethod.latin.permissions.PermissionsUtil;
     29 import com.android.inputmethod.latin.settings.SubScreenFragment;
     30 import com.android.inputmethod.latin.settings.TwoStatePreferenceHelper;
     31 import com.android.inputmethod.latin.utils.ApplicationUtils;
     32 
     33 import static com.android.inputmethod.latin.permissions.PermissionsManager.get;
     34 
     35 /**
     36  * Preference screen.
     37  */
     38 public final class SpellCheckerSettingsFragment extends SubScreenFragment
     39     implements SharedPreferences.OnSharedPreferenceChangeListener,
     40             PermissionsManager.PermissionsResultCallback {
     41 
     42     private SwitchPreference mLookupContactsPreference;
     43 
     44     @Override
     45     public void onActivityCreated(final Bundle savedInstanceState) {
     46         super.onActivityCreated(savedInstanceState);
     47         addPreferencesFromResource(R.xml.spell_checker_settings);
     48         final PreferenceScreen preferenceScreen = getPreferenceScreen();
     49         preferenceScreen.setTitle(ApplicationUtils.getActivityTitleResId(
     50                 getActivity(), SpellCheckerSettingsActivity.class));
     51         TwoStatePreferenceHelper.replaceCheckBoxPreferencesBySwitchPreferences(preferenceScreen);
     52 
     53         mLookupContactsPreference = (SwitchPreference) findPreference(
     54                 AndroidSpellCheckerService.PREF_USE_CONTACTS_KEY);
     55         turnOffLookupContactsIfNoPermission();
     56     }
     57 
     58     @Override
     59     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
     60         if (!TextUtils.equals(key, AndroidSpellCheckerService.PREF_USE_CONTACTS_KEY)) {
     61             return;
     62         }
     63 
     64         if (!sharedPreferences.getBoolean(key, false)) {
     65             // don't care if the preference is turned off.
     66             return;
     67         }
     68 
     69         // Check for permissions.
     70         if (PermissionsUtil.checkAllPermissionsGranted(
     71                 getActivity() /* context */, Manifest.permission.READ_CONTACTS)) {
     72             return; // all permissions granted, no need to request permissions.
     73         }
     74 
     75         get(getActivity() /* context */).requestPermissions(this /* PermissionsResultCallback */,
     76                 getActivity() /* activity */, Manifest.permission.READ_CONTACTS);
     77     }
     78 
     79     @Override
     80     public void onRequestPermissionsResult(boolean allGranted) {
     81         turnOffLookupContactsIfNoPermission();
     82     }
     83 
     84     private void turnOffLookupContactsIfNoPermission() {
     85         if (!PermissionsUtil.checkAllPermissionsGranted(
     86                 getActivity(), Manifest.permission.READ_CONTACTS)) {
     87             mLookupContactsPreference.setChecked(false);
     88         }
     89     }
     90 }
     91