1fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani/* 2fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani * Copyright (C) 2011 The Android Open Source Project 3fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani * 4fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani * Licensed under the Apache License, Version 2.0 (the "License"); 5fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani * you may not use this file except in compliance with the License. 6fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani * You may obtain a copy of the License at 7fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani * 8fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani * http://www.apache.org/licenses/LICENSE-2.0 9fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani * 10fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani * Unless required by applicable law or agreed to in writing, software 11fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani * distributed under the License is distributed on an "AS IS" BASIS, 12fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani * See the License for the specific language governing permissions and 14fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani * limitations under the License. 15fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani */ 16fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani 17fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasanipackage com.android.settings; 18fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani 19fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasaniimport android.content.ComponentName; 20b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglioimport android.content.Context; 21fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasaniimport android.content.Intent; 22fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasaniimport android.content.pm.PackageManager; 23fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasaniimport android.content.pm.ResolveInfo; 24fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasaniimport android.os.Bundle; 2539b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference; 2639b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.PreferenceScreen; 2739b467482d1bf256a111c757e9b7621c6f523271Jason Monk 289d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wrenimport com.android.internal.logging.MetricsProto.MetricsEvent; 2945f754e50618076213ed6911ff1e6c37b4db0467Fabrice Di Meglioimport com.android.settings.search.BaseSearchIndexProvider; 30fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Meglioimport com.android.settings.search.Indexable; 31fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Meglioimport com.android.settings.search.SearchIndexableRaw; 32fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani 33b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglioimport java.util.ArrayList; 34fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasaniimport java.util.List; 35fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani 36b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Megliopublic class WallpaperTypeSettings extends SettingsPreferenceFragment implements Indexable { 37b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio 38fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani @Override 398a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren protected int getMetricsCategory() { 409d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren return MetricsEvent.WALLPAPER_TYPE; 418a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren } 428a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren 438a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren @Override 4423acc2bb8af7da000d72a8c1d8c28a2792200348Jason Monk protected int getHelpResource() { 4523acc2bb8af7da000d72a8c1d8c28a2792200348Jason Monk return R.string.help_uri_wallpaper; 4623acc2bb8af7da000d72a8c1d8c28a2792200348Jason Monk } 4723acc2bb8af7da000d72a8c1d8c28a2792200348Jason Monk 4823acc2bb8af7da000d72a8c1d8c28a2792200348Jason Monk @Override 49fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani public void onCreate(Bundle savedInstanceState) { 50fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani super.onCreate(savedInstanceState); 51fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani 52fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani addPreferencesFromResource(R.xml.wallpaper_settings); 53fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani populateWallpaperTypes(); 54fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani } 55fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani 56fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani private void populateWallpaperTypes() { 57fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani // Search for activities that satisfy the ACTION_SET_WALLPAPER action 58b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio final Intent intent = new Intent(Intent.ACTION_SET_WALLPAPER); 59fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani final PackageManager pm = getPackageManager(); 60b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio final List<ResolveInfo> rList = pm.queryIntentActivities(intent, 61fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani PackageManager.MATCH_DEFAULT_ONLY); 62fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani 63a4379d6b38e568fcb60831d6f2fa349ba20f9b82Amith Yamasani final PreferenceScreen parent = getPreferenceScreen(); 64a4379d6b38e568fcb60831d6f2fa349ba20f9b82Amith Yamasani parent.setOrderingAsAdded(false); 65fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani // Add Preference items for each of the matching activities 66fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani for (ResolveInfo info : rList) { 6739b467482d1bf256a111c757e9b7621c6f523271Jason Monk Preference pref = new Preference(getPrefContext()); 68bfcf2a9044916ea077289dd2af02c243e741335bSunny Goyal pref.setLayoutResource(R.layout.preference_wallpaper_type); 69fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani Intent prefIntent = new Intent(intent); 70fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani prefIntent.setComponent(new ComponentName( 71fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani info.activityInfo.packageName, info.activityInfo.name)); 72fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani pref.setIntent(prefIntent); 73fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani CharSequence label = info.loadLabel(pm); 74fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani if (label == null) label = info.activityInfo.packageName; 75fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani pref.setTitle(label); 76bfcf2a9044916ea077289dd2af02c243e741335bSunny Goyal pref.setIcon(info.loadIcon(pm)); 77a4379d6b38e568fcb60831d6f2fa349ba20f9b82Amith Yamasani parent.addPreference(pref); 78fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani } 79fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani } 80b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio 81fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Meglio public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = 8245f754e50618076213ed6911ff1e6c37b4db0467Fabrice Di Meglio new BaseSearchIndexProvider() { 83b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio @Override 8451bfee595c3ce587e2e26565fd9e8f4ae02c3482Fabrice Di Meglio public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) { 85fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Meglio final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>(); 86b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio 87b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio final Intent intent = new Intent(Intent.ACTION_SET_WALLPAPER); 88b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio final PackageManager pm = context.getPackageManager(); 89b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio final List<ResolveInfo> rList = pm.queryIntentActivities(intent, 90b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio PackageManager.MATCH_DEFAULT_ONLY); 91b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio 92b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio // Add indexable data for each of the matching activities 93b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio for (ResolveInfo info : rList) { 94b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio CharSequence label = info.loadLabel(pm); 95b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio if (label == null) label = info.activityInfo.packageName; 96b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio 97fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Meglio SearchIndexableRaw data = new SearchIndexableRaw(context); 98b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio data.title = label.toString(); 99fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Meglio data.screenTitle = context.getResources().getString( 100b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio R.string.wallpaper_settings_fragment_title); 101fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Meglio data.intentAction = Intent.ACTION_SET_WALLPAPER; 102b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio data.intentTargetPackage = info.activityInfo.packageName; 103b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio data.intentTargetClass = info.activityInfo.name; 104b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio result.add(data); 105b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio } 106b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio 107b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio return result; 108b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio } 109b8dfbf140986a9c0781f268ea40914063f026436Fabrice Di Meglio }; 110fcbf7cffb6e16b202006d306bafaace97508332bAmith Yamasani} 111