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