1/*
2 * Copyright (C) 2017 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.settings.notification;
18
19import android.app.Fragment;
20import android.content.Context;
21import android.provider.SearchIndexableResource;
22import android.service.notification.ConditionProviderService;
23
24import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
25import com.android.settings.R;
26import com.android.settings.search.BaseSearchIndexProvider;
27import com.android.settings.search.Indexable;
28import com.android.settings.utils.ManagedServiceSettings;
29import com.android.settings.utils.ZenServiceListing;
30import com.android.settingslib.core.AbstractPreferenceController;
31import com.android.settingslib.core.lifecycle.Lifecycle;
32
33import java.util.ArrayList;
34import java.util.List;
35
36public class ZenModeAutomationSettings extends ZenModeSettingsBase {
37    protected final ManagedServiceSettings.Config CONFIG = getConditionProviderConfig();
38
39    @Override
40    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
41        ZenServiceListing serviceListing = new ZenServiceListing(getContext(), CONFIG);
42        serviceListing.reloadApprovedServices();
43        return buildPreferenceControllers(context, this, serviceListing, getLifecycle());
44    }
45
46    private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
47            Fragment parent, ZenServiceListing serviceListing, Lifecycle lifecycle) {
48        List<AbstractPreferenceController> controllers = new ArrayList<>();
49        controllers.add(new ZenModeAddAutomaticRulePreferenceController(context, parent,
50                serviceListing, lifecycle));
51        controllers.add(new ZenModeAutomaticRulesPreferenceController(context, parent, lifecycle));
52
53        return controllers;
54    }
55
56    @Override
57    protected int getPreferenceScreenResId() {
58        return R.xml.zen_mode_automation_settings;
59    }
60
61    @Override
62    public int getMetricsCategory() {
63        return MetricsEvent.NOTIFICATION_ZEN_MODE_AUTOMATION;
64    }
65
66    protected static ManagedServiceSettings.Config getConditionProviderConfig() {
67        return new ManagedServiceSettings.Config.Builder()
68                .setTag(TAG)
69                .setIntentAction(ConditionProviderService.SERVICE_INTERFACE)
70                .setPermission(android.Manifest.permission.BIND_CONDITION_PROVIDER_SERVICE)
71                .setNoun("condition provider")
72                .build();
73    }
74
75    /**
76     * For Search.
77     */
78    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
79            new BaseSearchIndexProvider() {
80
81                @Override
82                public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
83                        boolean enabled) {
84                    final ArrayList<SearchIndexableResource> result = new ArrayList<>();
85
86                    final SearchIndexableResource sir = new SearchIndexableResource(context);
87                    sir.xmlResId = R.xml.zen_mode_automation_settings;
88                    result.add(sir);
89                    return result;
90                }
91
92                @Override
93                public List<String> getNonIndexableKeys(Context context) {
94                    final List<String> keys = super.getNonIndexableKeys(context);
95                    keys.add(ZenModeAddAutomaticRulePreferenceController.KEY);
96                    keys.add(ZenModeAutomaticRulesPreferenceController.KEY);
97                    return keys;
98                }
99
100                @Override
101                public List<AbstractPreferenceController> createPreferenceControllers(
102                        Context context) {
103                    return buildPreferenceControllers(context, null, null, null);
104                }
105            };
106}
107