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
17package com.android.inputmethod.latin.spellcheck;
18
19import android.Manifest;
20import android.content.SharedPreferences;
21import android.os.Bundle;
22import android.preference.PreferenceScreen;
23import android.preference.SwitchPreference;
24import android.text.TextUtils;
25
26import com.android.inputmethod.latin.R;
27import com.android.inputmethod.latin.permissions.PermissionsManager;
28import com.android.inputmethod.latin.permissions.PermissionsUtil;
29import com.android.inputmethod.latin.settings.SubScreenFragment;
30import com.android.inputmethod.latin.settings.TwoStatePreferenceHelper;
31import com.android.inputmethod.latin.utils.ApplicationUtils;
32
33import static com.android.inputmethod.latin.permissions.PermissionsManager.get;
34
35/**
36 * Preference screen.
37 */
38public 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