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