1a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang/*
2a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang * Copyright (C) 2017 The Android Open Source Project
3a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang *
4a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang * Licensed under the Apache License, Version 2.0 (the "License");
5a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang * you may not use this file except in compliance with the License.
6a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang * You may obtain a copy of the License at
7a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang *
8a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang *      http://www.apache.org/licenses/LICENSE-2.0
9a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang *
10a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang * Unless required by applicable law or agreed to in writing, software
11a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang * distributed under the License is distributed on an "AS IS" BASIS,
12a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang * See the License for the specific language governing permissions and
14a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang * limitations under the License.
15a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang */
16a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang
17a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhangpackage com.android.settings.security.screenlock;
18a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang
19a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhangimport android.app.Fragment;
20a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhangimport android.content.Context;
21a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhangimport android.os.UserHandle;
22a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhangimport android.provider.SearchIndexableResource;
23a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang
24a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhangimport com.android.internal.logging.nano.MetricsProto;
25a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhangimport com.android.internal.widget.LockPatternUtils;
26a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhangimport com.android.settings.R;
27a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhangimport com.android.settings.dashboard.DashboardFragment;
28a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhangimport com.android.settings.search.BaseSearchIndexProvider;
29a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhangimport com.android.settings.search.Indexable;
30a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhangimport com.android.settings.security.OwnerInfoPreferenceController;
31a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhangimport com.android.settingslib.core.AbstractPreferenceController;
32a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhangimport com.android.settingslib.core.lifecycle.Lifecycle;
33a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang
34a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhangimport java.util.ArrayList;
35a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhangimport java.util.List;
36a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang
37a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhangpublic class ScreenLockSettings extends DashboardFragment
38a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang        implements OwnerInfoPreferenceController.OwnerInfoCallback {
39a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang
40a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang    private static final String TAG = "ScreenLockSettings";
41a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang
428c5bc0abf004d47870d34906c32ca0b1af9f6d96jeffreyhuang    private static final String KEY_LOCK_SCREEN_TITLE = "security_settings_password_sub_screen";
438c5bc0abf004d47870d34906c32ca0b1af9f6d96jeffreyhuang
44a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang    private static final int MY_USER_ID = UserHandle.myUserId();
45a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang    private LockPatternUtils mLockPatternUtils;
46a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang
47a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang    @Override
48a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang    public int getMetricsCategory() {
49ca2e54be593aa49f07456b800698f1c4ef69843cFan Zhang        return MetricsProto.MetricsEvent.SCREEN_LOCK_SETTINGS;
50a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang    }
51a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang
52a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang    @Override
53a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang    protected int getPreferenceScreenResId() {
54a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang        return R.xml.screen_lock_settings;
55a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang    }
56a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang
57a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang    @Override
58a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang    protected String getLogTag() {
59a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang        return TAG;
60a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang    }
61a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang
62a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang    @Override
63f7843adabd4e8e1cc84a52721daabefa3a1410fdFan Zhang    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
64a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang        mLockPatternUtils = new LockPatternUtils(context);
65a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang        return buildPreferenceControllers(context, this /* parent */, getLifecycle(),
66a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang                mLockPatternUtils);
67a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang    }
68a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang
69a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang    @Override
70a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang    public void onOwnerInfoUpdated() {
71f7843adabd4e8e1cc84a52721daabefa3a1410fdFan Zhang        use(OwnerInfoPreferenceController.class).updateSummary();
72a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang    }
73a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang
74a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang    private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
75a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang            Fragment parent, Lifecycle lifecycle, LockPatternUtils lockPatternUtils) {
76a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang        final List<AbstractPreferenceController> controllers = new ArrayList<>();
77a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang        controllers.add(new PatternVisiblePreferenceController(
78a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang                context, MY_USER_ID, lockPatternUtils));
79a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang        controllers.add(new PowerButtonInstantLockPreferenceController(
80a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang                context, MY_USER_ID, lockPatternUtils));
81a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang        controllers.add(new LockAfterTimeoutPreferenceController(
82a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang                context, MY_USER_ID, lockPatternUtils));
83a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang        controllers.add(new OwnerInfoPreferenceController(context, parent, lifecycle));
84a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang        return controllers;
85a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang    }
86a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang
87a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang
88a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
89a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang            new BaseSearchIndexProvider() {
90a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang                @Override
91a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang                public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
92a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang                        boolean enabled) {
93a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang                    final ArrayList<SearchIndexableResource> result = new ArrayList<>();
94a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang
95a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang                    final SearchIndexableResource sir = new SearchIndexableResource(context);
96a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang                    sir.xmlResId = R.xml.screen_lock_settings;
97a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang                    result.add(sir);
98a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang                    return result;
99a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang                }
100a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang
101a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang                @Override
102aed8994f6f50a6bc0adfaa92b499ebde3a8f2a76Fan Zhang                public List<AbstractPreferenceController> createPreferenceControllers(
103a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang                        Context context) {
104a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang                    return buildPreferenceControllers(context, null /* parent */,
105a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang                            null /* lifecycle */, new LockPatternUtils(context));
106a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang                }
1078c5bc0abf004d47870d34906c32ca0b1af9f6d96jeffreyhuang
1088c5bc0abf004d47870d34906c32ca0b1af9f6d96jeffreyhuang                @Override
1098c5bc0abf004d47870d34906c32ca0b1af9f6d96jeffreyhuang                public List<String> getNonIndexableKeys(Context context) {
1108c5bc0abf004d47870d34906c32ca0b1af9f6d96jeffreyhuang                    final List<String> keys = super.getNonIndexableKeys(context);
1118c5bc0abf004d47870d34906c32ca0b1af9f6d96jeffreyhuang                    keys.add(KEY_LOCK_SCREEN_TITLE);
1128c5bc0abf004d47870d34906c32ca0b1af9f6d96jeffreyhuang                    return keys;
1138c5bc0abf004d47870d34906c32ca0b1af9f6d96jeffreyhuang                }
114a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang            };
115a681094e8a30e42e34e261d9e928709256bb8f61Fan Zhang}
116