DefaultAppSettings.java revision aed8994f6f50a6bc0adfaa92b499ebde3a8f2a76
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 */
16package com.android.settings.applications;
17
18import android.app.Activity;
19import android.content.Context;
20import android.provider.SearchIndexableResource;
21import android.text.TextUtils;
22
23import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
24import com.android.settings.R;
25import com.android.settings.applications.assist.DefaultAssistPreferenceController;
26import com.android.settings.applications.defaultapps.DefaultBrowserPreferenceController;
27import com.android.settings.applications.defaultapps.DefaultEmergencyPreferenceController;
28import com.android.settings.applications.defaultapps.DefaultHomePreferenceController;
29import com.android.settings.applications.defaultapps.DefaultPaymentSettingsPreferenceController;
30import com.android.settings.applications.defaultapps.DefaultPhonePreferenceController;
31import com.android.settings.applications.defaultapps.DefaultSmsPreferenceController;
32import com.android.settings.applications.defaultapps.DefaultWorkBrowserPreferenceController;
33import com.android.settings.applications.defaultapps.DefaultWorkPhonePreferenceController;
34import com.android.settings.dashboard.DashboardFragment;
35import com.android.settings.dashboard.SummaryLoader;
36import com.android.settings.search.BaseSearchIndexProvider;
37import com.android.settings.search.Indexable;
38import com.android.settings.widget.PreferenceCategoryController;
39import com.android.settingslib.core.AbstractPreferenceController;
40
41import java.util.ArrayList;
42import java.util.Arrays;
43import java.util.List;
44
45public class DefaultAppSettings extends DashboardFragment {
46
47    static final String TAG = "DefaultAppSettings";
48
49    private static final String KEY_DEFAULT_WORK_CATEGORY = "work_app_defaults";
50    private static final String KEY_ASSIST_VOICE_INPUT = "assist_and_voice_input";
51
52    @Override
53    protected String getLogTag() {
54        return TAG;
55    }
56
57    @Override
58    protected int getPreferenceScreenResId() {
59        return R.xml.app_default_settings;
60    }
61
62    @Override
63    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
64        return buildPreferenceControllers(context);
65    }
66
67    @Override
68    public int getMetricsCategory() {
69        return MetricsEvent.APPLICATIONS_ADVANCED;
70    }
71
72    private static List<AbstractPreferenceController> buildPreferenceControllers(Context context) {
73        final List<AbstractPreferenceController> controllers = new ArrayList<>();
74        final List<AbstractPreferenceController> workControllers = new ArrayList<>();
75        workControllers.add(new DefaultWorkPhonePreferenceController(context));
76        workControllers.add(new DefaultWorkBrowserPreferenceController(context));
77        controllers.addAll(workControllers);
78        controllers.add(new PreferenceCategoryController(
79                context, KEY_DEFAULT_WORK_CATEGORY, workControllers));
80        controllers.add(new DefaultAssistPreferenceController(context, KEY_ASSIST_VOICE_INPUT,
81                false /* showSetting */));
82        controllers.add(new DefaultBrowserPreferenceController(context));
83        controllers.add(new DefaultPhonePreferenceController(context));
84        controllers.add(new DefaultSmsPreferenceController(context));
85        controllers.add(new DefaultEmergencyPreferenceController(context));
86        controllers.add(new DefaultHomePreferenceController(context));
87        controllers.add(new DefaultPaymentSettingsPreferenceController(context));
88        return controllers;
89    }
90
91    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
92            new BaseSearchIndexProvider() {
93                @Override
94                public List<SearchIndexableResource> getXmlResourcesToIndex(
95                        Context context, boolean enabled) {
96                    final SearchIndexableResource sir = new SearchIndexableResource(context);
97                    sir.xmlResId = R.xml.app_default_settings;
98                    return Arrays.asList(sir);
99                }
100
101                @Override
102                public List<String> getNonIndexableKeys(Context context) {
103                    List<String> keys = super.getNonIndexableKeys(context);
104                    keys.add(KEY_ASSIST_VOICE_INPUT);
105                    // TODO (b/38230148) Remove these keys when we can differentiate work results
106                    keys.add(DefaultWorkPhonePreferenceController.KEY);
107                    keys.add(DefaultWorkBrowserPreferenceController.KEY);
108                    return keys;
109                }
110
111                @Override
112                public List<AbstractPreferenceController> createPreferenceControllers(
113                        Context context) {
114                    return buildPreferenceControllers(context);
115                }
116            };
117
118    static class SummaryProvider implements SummaryLoader.SummaryProvider {
119
120        private final Context mContext;
121        private final SummaryLoader mSummaryLoader;
122        private final DefaultSmsPreferenceController mDefaultSmsPreferenceController;
123        private final DefaultBrowserPreferenceController mDefaultBrowserPreferenceController;
124        private final DefaultPhonePreferenceController mDefaultPhonePreferenceController;
125
126        public SummaryProvider(Context context, SummaryLoader summaryLoader) {
127            mContext = context;
128            mSummaryLoader = summaryLoader;
129            mDefaultSmsPreferenceController = new DefaultSmsPreferenceController(mContext);
130            mDefaultBrowserPreferenceController = new DefaultBrowserPreferenceController(mContext);
131            mDefaultPhonePreferenceController = new DefaultPhonePreferenceController(mContext);
132        }
133
134        @Override
135        public void setListening(boolean listening) {
136            if (!listening) {
137                return;
138            }
139            CharSequence summary = concatSummaryText(
140                    mDefaultBrowserPreferenceController.getDefaultAppLabel(),
141                    mDefaultPhonePreferenceController.getDefaultAppLabel());
142            summary = concatSummaryText(summary,
143                    mDefaultSmsPreferenceController.getDefaultAppLabel());
144            if (!TextUtils.isEmpty(summary)) {
145                mSummaryLoader.setSummary(this, summary);
146            }
147        }
148
149        private CharSequence concatSummaryText(CharSequence summary1, CharSequence summary2) {
150            if (TextUtils.isEmpty(summary1)) {
151                return summary2;
152            }
153            if (TextUtils.isEmpty(summary2)) {
154                return summary1;
155            }
156            return mContext.getString(R.string.join_many_items_middle, summary1, summary2);
157        }
158    }
159
160    public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY =
161            new SummaryLoader.SummaryProviderFactory() {
162                @Override
163                public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
164                        SummaryLoader summaryLoader) {
165                    return new DefaultAppSettings.SummaryProvider(activity, summaryLoader);
166                }
167            };
168}
169