PrintSettingsFragment.java revision fe47a8dc89fe0393dae16b1c2152c901feab4dcb
12d531653595344ed7e61c093dca308b9ba7ec185Svetoslav/* 22d531653595344ed7e61c093dca308b9ba7ec185Svetoslav * Copyright (C) 2013 The Android Open Source Project 32d531653595344ed7e61c093dca308b9ba7ec185Svetoslav * 42d531653595344ed7e61c093dca308b9ba7ec185Svetoslav * Licensed under the Apache License, Version 2.0 (the "License"); 52d531653595344ed7e61c093dca308b9ba7ec185Svetoslav * you may not use this file except in compliance with the License. 62d531653595344ed7e61c093dca308b9ba7ec185Svetoslav * You may obtain a copy of the License at 72d531653595344ed7e61c093dca308b9ba7ec185Svetoslav * 82d531653595344ed7e61c093dca308b9ba7ec185Svetoslav * http://www.apache.org/licenses/LICENSE-2.0 92d531653595344ed7e61c093dca308b9ba7ec185Svetoslav * 102d531653595344ed7e61c093dca308b9ba7ec185Svetoslav * Unless required by applicable law or agreed to in writing, software 112d531653595344ed7e61c093dca308b9ba7ec185Svetoslav * distributed under the License is distributed on an "AS IS" BASIS, 122d531653595344ed7e61c093dca308b9ba7ec185Svetoslav * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132d531653595344ed7e61c093dca308b9ba7ec185Svetoslav * See the License for the specific language governing permissions and 142d531653595344ed7e61c093dca308b9ba7ec185Svetoslav * limitations under the License. 152d531653595344ed7e61c093dca308b9ba7ec185Svetoslav */ 162d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 172d531653595344ed7e61c093dca308b9ba7ec185Svetoslavpackage com.android.settings.print; 182d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 19fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport android.app.Activity; 20bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.app.ActivityManager; 21bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.app.LoaderManager.LoaderCallbacks; 22bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.content.AsyncTaskLoader; 232d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.content.ComponentName; 242d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.content.ContentResolver; 252d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.content.Context; 262d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.content.Intent; 27bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.content.Loader; 282d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.content.pm.PackageManager; 292d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.content.pm.ResolveInfo; 302d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.database.ContentObserver; 312d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.net.Uri; 322d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.os.Bundle; 332d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.os.Handler; 342d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.os.Message; 35fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport android.os.UserHandle; 36fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport android.os.UserManager; 37fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport android.os.Process; 382d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.preference.Preference; 39bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.preference.PreferenceCategory; 402d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.preference.PreferenceScreen; 41bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.print.PrintJob; 42bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.print.PrintJobId; 43bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.print.PrintJobInfo; 44bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.print.PrintManager; 45bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.print.PrintManager.PrintJobStateChangeListener; 462d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.printservice.PrintServiceInfo; 47d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslavimport android.provider.SearchIndexableResource; 482d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.provider.Settings; 492d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.text.TextUtils; 50bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.text.format.DateUtils; 51bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.util.Log; 522d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.view.Menu; 532d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.view.MenuInflater; 542d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.view.MenuItem; 552d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.view.View; 56bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.view.ViewGroup; 57fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport android.widget.AdapterView; 582d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport android.widget.TextView; 592d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 602d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport com.android.internal.content.PackageMonitor; 61fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport com.android.settings.UserSpinnerAdapter; 62fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport com.android.settings.UserSpinnerAdapter.UserDetails; 632d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport com.android.settings.DialogCreatable; 642d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport com.android.settings.R; 652d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport com.android.settings.SettingsPreferenceFragment; 66d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslavimport com.android.settings.search.BaseSearchIndexProvider; 677e920da6564032ddcc40db95925083ef59d19e58Fabrice Di Meglioimport com.android.settings.search.Indexable; 68d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslavimport com.android.settings.search.SearchIndexableRaw; 692d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 70bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport java.text.DateFormat; 71bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport java.util.ArrayList; 722d531653595344ed7e61c093dca308b9ba7ec185Svetoslavimport java.util.List; 732d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 74fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport android.widget.AdapterView.OnItemSelectedListener; 75fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghinaimport android.widget.Spinner; 76fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 772d531653595344ed7e61c093dca308b9ba7ec185Svetoslav/** 782d531653595344ed7e61c093dca308b9ba7ec185Svetoslav * Fragment with the top level print settings. 792d531653595344ed7e61c093dca308b9ba7ec185Svetoslav */ 80d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslavpublic class PrintSettingsFragment extends SettingsPreferenceFragment 81fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina implements DialogCreatable, Indexable, OnItemSelectedListener { 822d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 83bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov private static final int LOADER_ID_PRINT_JOBS_LOADER = 1; 84bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 85bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov private static final String PRINT_JOBS_CATEGORY = "print_jobs_category"; 86bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov private static final String PRINT_SERVICES_CATEGORY = "print_services_category"; 87bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 882d531653595344ed7e61c093dca308b9ba7ec185Svetoslav // Extras passed to sub-fragments. 89bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov static final String EXTRA_PREFERENCE_KEY = "EXTRA_PREFERENCE_KEY"; 90bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov static final String EXTRA_CHECKED = "EXTRA_CHECKED"; 91bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov static final String EXTRA_TITLE = "EXTRA_TITLE"; 92bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov static final String EXTRA_ENABLE_WARNING_TITLE = "EXTRA_ENABLE_WARNING_TITLE"; 93bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov static final String EXTRA_ENABLE_WARNING_MESSAGE = "EXTRA_ENABLE_WARNING_MESSAGE"; 94bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov static final String EXTRA_SETTINGS_TITLE = "EXTRA_SETTINGS_TITLE"; 95bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov static final String EXTRA_SETTINGS_COMPONENT_NAME = "EXTRA_SETTINGS_COMPONENT_NAME"; 96bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov static final String EXTRA_ADD_PRINTERS_TITLE = "EXTRA_ADD_PRINTERS_TITLE"; 97bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov static final String EXTRA_ADD_PRINTERS_COMPONENT_NAME = "EXTRA_ADD_PRINTERS_COMPONENT_NAME"; 98bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov static final String EXTRA_SERVICE_COMPONENT_NAME = "EXTRA_SERVICE_COMPONENT_NAME"; 99bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 100bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov static final String EXTRA_PRINT_JOB_ID = "EXTRA_PRINT_JOB_ID"; 1012d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 1020ad40283bb6b811c26874af3fccf25745f63de8dSvetoslav private static final String EXTRA_PRINT_SERVICE_COMPONENT_NAME = 1030ad40283bb6b811c26874af3fccf25745f63de8dSvetoslav "EXTRA_PRINT_SERVICE_COMPONENT_NAME"; 1040ad40283bb6b811c26874af3fccf25745f63de8dSvetoslav 1052d531653595344ed7e61c093dca308b9ba7ec185Svetoslav private final PackageMonitor mSettingsPackageMonitor = new SettingsPackageMonitor(); 1062d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 1072d531653595344ed7e61c093dca308b9ba7ec185Svetoslav private final Handler mHandler = new Handler() { 1082d531653595344ed7e61c093dca308b9ba7ec185Svetoslav @Override 1092d531653595344ed7e61c093dca308b9ba7ec185Svetoslav public void dispatchMessage(Message msg) { 1102d531653595344ed7e61c093dca308b9ba7ec185Svetoslav updateServicesPreferences(); 1112d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 1122d531653595344ed7e61c093dca308b9ba7ec185Svetoslav }; 1132d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 1142d531653595344ed7e61c093dca308b9ba7ec185Svetoslav private final SettingsContentObserver mSettingsContentObserver = 1152d531653595344ed7e61c093dca308b9ba7ec185Svetoslav new SettingsContentObserver(mHandler) { 1162d531653595344ed7e61c093dca308b9ba7ec185Svetoslav @Override 1172d531653595344ed7e61c093dca308b9ba7ec185Svetoslav public void onChange(boolean selfChange, Uri uri) { 1182d531653595344ed7e61c093dca308b9ba7ec185Svetoslav updateServicesPreferences(); 1192d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 1202d531653595344ed7e61c093dca308b9ba7ec185Svetoslav }; 1212d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 122bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov private PreferenceCategory mActivePrintJobsCategory; 123bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov private PreferenceCategory mPrintServicesCategory; 124bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 125bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov private PrintJobsController mPrintJobsController; 126fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina private Context mContext; 127fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina private UserSpinnerAdapter mProfileSpinnerAdapter; 128fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 129fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 130fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public void onAttach(Activity activity) { 131fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina super.onAttach(activity); 132fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina mContext = activity; 133fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 134bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 1352d531653595344ed7e61c093dca308b9ba7ec185Svetoslav @Override 1362d531653595344ed7e61c093dca308b9ba7ec185Svetoslav public void onCreate(Bundle icicle) { 1372d531653595344ed7e61c093dca308b9ba7ec185Svetoslav super.onCreate(icicle); 1382d531653595344ed7e61c093dca308b9ba7ec185Svetoslav addPreferencesFromResource(R.xml.print_settings); 139bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 140bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov mActivePrintJobsCategory = (PreferenceCategory) findPreference( 141bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov PRINT_JOBS_CATEGORY); 142d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav mPrintServicesCategory = (PreferenceCategory) findPreference( 143bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov PRINT_SERVICES_CATEGORY); 144bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov getPreferenceScreen().removePreference(mActivePrintJobsCategory); 145bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 146bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov mPrintJobsController = new PrintJobsController(); 147bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov getActivity().getLoaderManager().initLoader(LOADER_ID_PRINT_JOBS_LOADER, 148bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov null, mPrintJobsController); 1492d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 1502d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 1512d531653595344ed7e61c093dca308b9ba7ec185Svetoslav @Override 1522d531653595344ed7e61c093dca308b9ba7ec185Svetoslav public void onResume() { 1532d531653595344ed7e61c093dca308b9ba7ec185Svetoslav super.onResume(); 1542d531653595344ed7e61c093dca308b9ba7ec185Svetoslav mSettingsPackageMonitor.register(getActivity(), getActivity().getMainLooper(), false); 1552d531653595344ed7e61c093dca308b9ba7ec185Svetoslav mSettingsContentObserver.register(getContentResolver()); 1562d531653595344ed7e61c093dca308b9ba7ec185Svetoslav updateServicesPreferences(); 1572d531653595344ed7e61c093dca308b9ba7ec185Svetoslav setHasOptionsMenu(true); 158bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov startSubSettingsIfNeeded(); 1592d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 1602d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 1612d531653595344ed7e61c093dca308b9ba7ec185Svetoslav @Override 1622d531653595344ed7e61c093dca308b9ba7ec185Svetoslav public void onPause() { 1632d531653595344ed7e61c093dca308b9ba7ec185Svetoslav mSettingsPackageMonitor.unregister(); 1642d531653595344ed7e61c093dca308b9ba7ec185Svetoslav mSettingsContentObserver.unregister(getContentResolver()); 1652d531653595344ed7e61c093dca308b9ba7ec185Svetoslav super.onPause(); 1662d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 1672d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 1682d531653595344ed7e61c093dca308b9ba7ec185Svetoslav @Override 1692d531653595344ed7e61c093dca308b9ba7ec185Svetoslav public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 1702d531653595344ed7e61c093dca308b9ba7ec185Svetoslav super.onCreateOptionsMenu(menu, inflater); 1715c3052936883038d25b2afe52c2dd023e9aa6812Svetoslav String searchUri = Settings.Secure.getString(getContentResolver(), 1725c3052936883038d25b2afe52c2dd023e9aa6812Svetoslav Settings.Secure.PRINT_SERVICE_SEARCH_URI); 1735c3052936883038d25b2afe52c2dd023e9aa6812Svetoslav if (!TextUtils.isEmpty(searchUri)) { 1745c3052936883038d25b2afe52c2dd023e9aa6812Svetoslav MenuItem menuItem = menu.add(R.string.print_menu_item_add_service); 17511a67c14a2969668d00d30a43d12e0685596884fFabrice Di Meglio menuItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_NEVER); 176d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav menuItem.setIntent(new Intent(Intent.ACTION_VIEW, Uri.parse(searchUri))); 1775c3052936883038d25b2afe52c2dd023e9aa6812Svetoslav } 1782d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 1792d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 180bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov @Override 181bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov public void onViewCreated(View view, Bundle savedInstanceState) { 182bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov super.onViewCreated(view, savedInstanceState); 183bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov ViewGroup contentRoot = (ViewGroup) getListView().getParent(); 184bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov View emptyView = getActivity().getLayoutInflater().inflate( 185d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav R.layout.empty_print_state, contentRoot, false); 186bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov TextView textView = (TextView) emptyView.findViewById(R.id.message); 187bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov textView.setText(R.string.print_no_services_installed); 188bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov contentRoot.addView(emptyView); 189bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov getListView().setEmptyView(emptyView); 190fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 191fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina final UserManager um = (UserManager) getSystemService(Context.USER_SERVICE); 192fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina List<UserHandle> userProfiles = um.getUserProfiles(); 193fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina if (userProfiles.size() >= 2) { 194fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina Spinner spinner = (Spinner) getActivity().getLayoutInflater().inflate( 195fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina R.layout.spinner_view, null); 196fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 197fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina UserHandle myUserHandle = Process.myUserHandle(); 198fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina userProfiles.remove(myUserHandle); 199fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina userProfiles.add(0, myUserHandle); 200fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina ArrayList<UserDetails> userDetails = new ArrayList<UserDetails>(userProfiles.size()); 201fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina final int count = userProfiles.size(); 202fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina for (int i = 0; i < count; i++) { 203fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina userDetails.add(new UserDetails(userProfiles.get(i), um, mContext)); 204fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 205fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 206fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina mProfileSpinnerAdapter = new UserSpinnerAdapter(mContext, userDetails); 207fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina spinner.setAdapter(mProfileSpinnerAdapter); 208fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina spinner.setOnItemSelectedListener(this); 209fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina setPinnedHeaderView(spinner); 210fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 211bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 212bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 2132d531653595344ed7e61c093dca308b9ba7ec185Svetoslav private void updateServicesPreferences() { 214bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov if (getPreferenceScreen().findPreference(PRINT_SERVICES_CATEGORY) == null) { 215bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov getPreferenceScreen().addPreference(mPrintServicesCategory); 216bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } else { 217bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov // Since services category is auto generated we have to do a pass 218bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov // to generate it since services can come and go. 219bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov mPrintServicesCategory.removeAll(); 220bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 2212d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 22263609c58a0ae857cc6ec62d28d73e2a0fb8241e9Fabrice Di Meglio List<ComponentName> enabledServices = PrintSettingsUtils 2232d531653595344ed7e61c093dca308b9ba7ec185Svetoslav .readEnabledPrintServices(getActivity()); 2242d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 2252d531653595344ed7e61c093dca308b9ba7ec185Svetoslav List<ResolveInfo> installedServices = getActivity().getPackageManager() 2262d531653595344ed7e61c093dca308b9ba7ec185Svetoslav .queryIntentServices( 2272d531653595344ed7e61c093dca308b9ba7ec185Svetoslav new Intent(android.printservice.PrintService.SERVICE_INTERFACE), 2282d531653595344ed7e61c093dca308b9ba7ec185Svetoslav PackageManager.GET_SERVICES | PackageManager.GET_META_DATA); 2292d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 2302d531653595344ed7e61c093dca308b9ba7ec185Svetoslav final int installedServiceCount = installedServices.size(); 2312d531653595344ed7e61c093dca308b9ba7ec185Svetoslav for (int i = 0; i < installedServiceCount; i++) { 2322d531653595344ed7e61c093dca308b9ba7ec185Svetoslav ResolveInfo installedService = installedServices.get(i); 2332d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 2342d531653595344ed7e61c093dca308b9ba7ec185Svetoslav PreferenceScreen preference = getPreferenceManager().createPreferenceScreen( 2352d531653595344ed7e61c093dca308b9ba7ec185Svetoslav getActivity()); 2362d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 2372d531653595344ed7e61c093dca308b9ba7ec185Svetoslav String title = installedService.loadLabel(getPackageManager()).toString(); 2382d531653595344ed7e61c093dca308b9ba7ec185Svetoslav preference.setTitle(title); 2392d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 2402d531653595344ed7e61c093dca308b9ba7ec185Svetoslav ComponentName componentName = new ComponentName( 2412d531653595344ed7e61c093dca308b9ba7ec185Svetoslav installedService.serviceInfo.packageName, 2422d531653595344ed7e61c093dca308b9ba7ec185Svetoslav installedService.serviceInfo.name); 2432d531653595344ed7e61c093dca308b9ba7ec185Svetoslav preference.setKey(componentName.flattenToString()); 2442d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 2452d531653595344ed7e61c093dca308b9ba7ec185Svetoslav preference.setOrder(i); 2462d531653595344ed7e61c093dca308b9ba7ec185Svetoslav preference.setFragment(PrintServiceSettingsFragment.class.getName()); 2472d531653595344ed7e61c093dca308b9ba7ec185Svetoslav preference.setPersistent(false); 2482d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 2492d531653595344ed7e61c093dca308b9ba7ec185Svetoslav final boolean serviceEnabled = enabledServices.contains(componentName); 2502d531653595344ed7e61c093dca308b9ba7ec185Svetoslav if (serviceEnabled) { 2512d531653595344ed7e61c093dca308b9ba7ec185Svetoslav preference.setSummary(getString(R.string.print_feature_state_on)); 2522d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } else { 2532d531653595344ed7e61c093dca308b9ba7ec185Svetoslav preference.setSummary(getString(R.string.print_feature_state_off)); 2542d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 2552d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 2562d531653595344ed7e61c093dca308b9ba7ec185Svetoslav Bundle extras = preference.getExtras(); 2572d531653595344ed7e61c093dca308b9ba7ec185Svetoslav extras.putString(EXTRA_PREFERENCE_KEY, preference.getKey()); 2582d531653595344ed7e61c093dca308b9ba7ec185Svetoslav extras.putBoolean(EXTRA_CHECKED, serviceEnabled); 2592d531653595344ed7e61c093dca308b9ba7ec185Svetoslav extras.putString(EXTRA_TITLE, title); 2602d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 2612d531653595344ed7e61c093dca308b9ba7ec185Svetoslav PrintServiceInfo printServiceInfo = PrintServiceInfo.create( 2622d531653595344ed7e61c093dca308b9ba7ec185Svetoslav installedService, getActivity()); 2632d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 2642d531653595344ed7e61c093dca308b9ba7ec185Svetoslav CharSequence applicationLabel = installedService.loadLabel(getPackageManager()); 2652d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 2662d531653595344ed7e61c093dca308b9ba7ec185Svetoslav extras.putString(EXTRA_ENABLE_WARNING_TITLE, getString( 2672d531653595344ed7e61c093dca308b9ba7ec185Svetoslav R.string.print_service_security_warning_title, applicationLabel)); 2682d531653595344ed7e61c093dca308b9ba7ec185Svetoslav extras.putString(EXTRA_ENABLE_WARNING_MESSAGE, getString( 2692d531653595344ed7e61c093dca308b9ba7ec185Svetoslav R.string.print_service_security_warning_summary, applicationLabel)); 2702d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 2712d531653595344ed7e61c093dca308b9ba7ec185Svetoslav String settingsClassName = printServiceInfo.getSettingsActivityName(); 2722d531653595344ed7e61c093dca308b9ba7ec185Svetoslav if (!TextUtils.isEmpty(settingsClassName)) { 2732d531653595344ed7e61c093dca308b9ba7ec185Svetoslav extras.putString(EXTRA_SETTINGS_TITLE, 2742d531653595344ed7e61c093dca308b9ba7ec185Svetoslav getString(R.string.print_menu_item_settings)); 2752d531653595344ed7e61c093dca308b9ba7ec185Svetoslav extras.putString(EXTRA_SETTINGS_COMPONENT_NAME, 2762d531653595344ed7e61c093dca308b9ba7ec185Svetoslav new ComponentName(installedService.serviceInfo.packageName, 2772d531653595344ed7e61c093dca308b9ba7ec185Svetoslav settingsClassName).flattenToString()); 2782d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 2792d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 2802d531653595344ed7e61c093dca308b9ba7ec185Svetoslav String addPrinterClassName = printServiceInfo.getAddPrintersActivityName(); 2812d531653595344ed7e61c093dca308b9ba7ec185Svetoslav if (!TextUtils.isEmpty(addPrinterClassName)) { 2822d531653595344ed7e61c093dca308b9ba7ec185Svetoslav extras.putString(EXTRA_ADD_PRINTERS_TITLE, 2832d531653595344ed7e61c093dca308b9ba7ec185Svetoslav getString(R.string.print_menu_item_add_printers)); 2842d531653595344ed7e61c093dca308b9ba7ec185Svetoslav extras.putString(EXTRA_ADD_PRINTERS_COMPONENT_NAME, 2852d531653595344ed7e61c093dca308b9ba7ec185Svetoslav new ComponentName(installedService.serviceInfo.packageName, 2862d531653595344ed7e61c093dca308b9ba7ec185Svetoslav addPrinterClassName).flattenToString()); 2872d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 2882d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 2892d531653595344ed7e61c093dca308b9ba7ec185Svetoslav extras.putString(EXTRA_SERVICE_COMPONENT_NAME, componentName.flattenToString()); 2902d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 291bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov mPrintServicesCategory.addPreference(preference); 2922d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 2932d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 294bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov if (mPrintServicesCategory.getPreferenceCount() == 0) { 295bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov getPreferenceScreen().removePreference(mPrintServicesCategory); 2962d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 2972d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 2982d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 299bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov private void startSubSettingsIfNeeded() { 3000ad40283bb6b811c26874af3fccf25745f63de8dSvetoslav if (getArguments() == null) { 3010ad40283bb6b811c26874af3fccf25745f63de8dSvetoslav return; 3020ad40283bb6b811c26874af3fccf25745f63de8dSvetoslav } 3030ad40283bb6b811c26874af3fccf25745f63de8dSvetoslav String componentName = getArguments().getString(EXTRA_PRINT_SERVICE_COMPONENT_NAME); 3040ad40283bb6b811c26874af3fccf25745f63de8dSvetoslav if (componentName != null) { 3050ad40283bb6b811c26874af3fccf25745f63de8dSvetoslav getArguments().remove(EXTRA_PRINT_SERVICE_COMPONENT_NAME); 3060ad40283bb6b811c26874af3fccf25745f63de8dSvetoslav Preference prereference = findPreference(componentName); 3070ad40283bb6b811c26874af3fccf25745f63de8dSvetoslav if (prereference != null) { 3080ad40283bb6b811c26874af3fccf25745f63de8dSvetoslav prereference.performClick(getPreferenceScreen()); 3090ad40283bb6b811c26874af3fccf25745f63de8dSvetoslav } 3100ad40283bb6b811c26874af3fccf25745f63de8dSvetoslav } 3110ad40283bb6b811c26874af3fccf25745f63de8dSvetoslav } 3120ad40283bb6b811c26874af3fccf25745f63de8dSvetoslav 313fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 314fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 315fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina UserHandle selectedUser = mProfileSpinnerAdapter.getUserHandle(position); 316fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina if (selectedUser.getIdentifier() != UserHandle.myUserId()) { 317fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina Intent intent = new Intent(Settings.ACTION_PRINT_SETTINGS); 318fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 319fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina mContext.startActivityAsUser(intent, selectedUser); 320fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina getActivity().finish(); 321fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 322fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 323fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 324fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina @Override 325fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina public void onNothingSelected(AdapterView<?> parent) { 326fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina // Nothing to do 327fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina } 328fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina 3292d531653595344ed7e61c093dca308b9ba7ec185Svetoslav private class SettingsPackageMonitor extends PackageMonitor { 3302d531653595344ed7e61c093dca308b9ba7ec185Svetoslav @Override 3312d531653595344ed7e61c093dca308b9ba7ec185Svetoslav public void onPackageAdded(String packageName, int uid) { 332d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav mHandler.obtainMessage().sendToTarget(); 3332d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 3342d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 3352d531653595344ed7e61c093dca308b9ba7ec185Svetoslav @Override 3362d531653595344ed7e61c093dca308b9ba7ec185Svetoslav public void onPackageAppeared(String packageName, int reason) { 3372d531653595344ed7e61c093dca308b9ba7ec185Svetoslav mHandler.obtainMessage().sendToTarget(); 3382d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 3392d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 3402d531653595344ed7e61c093dca308b9ba7ec185Svetoslav @Override 3412d531653595344ed7e61c093dca308b9ba7ec185Svetoslav public void onPackageDisappeared(String packageName, int reason) { 3422d531653595344ed7e61c093dca308b9ba7ec185Svetoslav mHandler.obtainMessage().sendToTarget(); 3432d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 3442d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 3452d531653595344ed7e61c093dca308b9ba7ec185Svetoslav @Override 3462d531653595344ed7e61c093dca308b9ba7ec185Svetoslav public void onPackageRemoved(String packageName, int uid) { 3472d531653595344ed7e61c093dca308b9ba7ec185Svetoslav mHandler.obtainMessage().sendToTarget(); 3482d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 3492d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 3502d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 3512d531653595344ed7e61c093dca308b9ba7ec185Svetoslav private static abstract class SettingsContentObserver extends ContentObserver { 3522d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 3532d531653595344ed7e61c093dca308b9ba7ec185Svetoslav public SettingsContentObserver(Handler handler) { 3542d531653595344ed7e61c093dca308b9ba7ec185Svetoslav super(handler); 3552d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 3562d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 3572d531653595344ed7e61c093dca308b9ba7ec185Svetoslav public void register(ContentResolver contentResolver) { 3582d531653595344ed7e61c093dca308b9ba7ec185Svetoslav contentResolver.registerContentObserver(Settings.Secure.getUriFor( 3592d531653595344ed7e61c093dca308b9ba7ec185Svetoslav Settings.Secure.ENABLED_PRINT_SERVICES), false, this); 3602d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 3612d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 3622d531653595344ed7e61c093dca308b9ba7ec185Svetoslav public void unregister(ContentResolver contentResolver) { 3632d531653595344ed7e61c093dca308b9ba7ec185Svetoslav contentResolver.unregisterContentObserver(this); 3642d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 3652d531653595344ed7e61c093dca308b9ba7ec185Svetoslav 3662d531653595344ed7e61c093dca308b9ba7ec185Svetoslav @Override 3672d531653595344ed7e61c093dca308b9ba7ec185Svetoslav public abstract void onChange(boolean selfChange, Uri uri); 3682d531653595344ed7e61c093dca308b9ba7ec185Svetoslav } 369bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 370bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov private final class PrintJobsController implements LoaderCallbacks<List<PrintJobInfo>> { 371bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 372bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov @Override 373bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov public Loader<List<PrintJobInfo>> onCreateLoader(int id, Bundle args) { 374bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov if (id == LOADER_ID_PRINT_JOBS_LOADER) { 375bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov return new PrintJobsLoader(getActivity()); 376bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 377bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov return null; 378bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 379bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 380bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov @Override 381bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov public void onLoadFinished(Loader<List<PrintJobInfo>> loader, 382bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov List<PrintJobInfo> printJobs) { 383bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov if (printJobs == null || printJobs.isEmpty()) { 384bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov getPreferenceScreen().removePreference(mActivePrintJobsCategory); 385bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } else { 386bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov if (getPreferenceScreen().findPreference(PRINT_JOBS_CATEGORY) == null) { 387bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov getPreferenceScreen().addPreference(mActivePrintJobsCategory); 388bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 389bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 390bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov mActivePrintJobsCategory.removeAll(); 391bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 392bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov final int printJobCount = printJobs.size(); 393bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov for (int i = 0; i < printJobCount; i++) { 394bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov PrintJobInfo printJob = printJobs.get(i); 395bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 396bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov PreferenceScreen preference = getPreferenceManager() 397bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov .createPreferenceScreen(getActivity()); 398bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 399bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov preference.setPersistent(false); 400bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov preference.setFragment(PrintJobSettingsFragment.class.getName()); 401bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov preference.setKey(printJob.getId().flattenToString()); 402bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 403bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov switch (printJob.getState()) { 404bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov case PrintJobInfo.STATE_QUEUED: 405bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov case PrintJobInfo.STATE_STARTED: { 40697e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav if (!printJob.isCancelling()) { 40797e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav preference.setTitle(getString( 40897e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav R.string.print_printing_state_title_template, 40997e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav printJob.getLabel())); 41097e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav } else { 41197e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav preference.setTitle(getString( 41297e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav R.string.print_cancelling_state_title_template, 41397e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav printJob.getLabel())); 41497e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav } 415bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } break; 416bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 417bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov case PrintJobInfo.STATE_FAILED: { 418bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov preference.setTitle(getString( 419bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov R.string.print_failed_state_title_template, 420bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov printJob.getLabel())); 421bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } break; 422bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 423bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov case PrintJobInfo.STATE_BLOCKED: { 42497e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav if (!printJob.isCancelling()) { 42597e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav preference.setTitle(getString( 42697e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav R.string.print_blocked_state_title_template, 42797e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav printJob.getLabel())); 42897e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav } else { 42997e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav preference.setTitle(getString( 43097e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav R.string.print_cancelling_state_title_template, 43197e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav printJob.getLabel())); 43297e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav } 433bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } break; 434bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 435bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 436bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov preference.setSummary(getString(R.string.print_job_summary, 437bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov printJob.getPrinterName(), DateUtils.formatSameDayTime( 438bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov printJob.getCreationTime(), printJob.getCreationTime(), 439bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov DateFormat.SHORT, DateFormat.SHORT))); 440bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 441bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov switch (printJob.getState()) { 442bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov case PrintJobInfo.STATE_QUEUED: 443bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov case PrintJobInfo.STATE_STARTED: { 444bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov preference.setIcon(com.android.internal.R.drawable.ic_print); 445bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } break; 446bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 447bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov case PrintJobInfo.STATE_FAILED: 448bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov case PrintJobInfo.STATE_BLOCKED: { 449bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov preference.setIcon(com.android.internal.R.drawable.ic_print_error); 450bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } break; 451bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 452bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 453bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov Bundle extras = preference.getExtras(); 454d9f156ddf072775c894db1ca3c3fe8989be4dbebSvetoslav extras.putString(EXTRA_PRINT_JOB_ID, printJob.getId().flattenToString()); 455bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 456bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov mActivePrintJobsCategory.addPreference(preference); 457bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 458bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 459bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 460bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 461bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov @Override 462bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov public void onLoaderReset(Loader<List<PrintJobInfo>> loader) { 463bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov getPreferenceScreen().removePreference(mActivePrintJobsCategory); 464bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 465bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 466bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 467bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov private static final class PrintJobsLoader extends AsyncTaskLoader<List<PrintJobInfo>> { 468bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 469bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov private static final String LOG_TAG = "PrintJobsLoader"; 470bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 471d9f156ddf072775c894db1ca3c3fe8989be4dbebSvetoslav private static final boolean DEBUG = false; 472bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 473d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav private List<PrintJobInfo> mPrintJobs = new ArrayList<PrintJobInfo>(); 474bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 475bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov private final PrintManager mPrintManager; 476bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 477bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov private PrintJobStateChangeListener mPrintJobStateChangeListener; 478bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 479bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov public PrintJobsLoader(Context context) { 480bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov super(context); 481bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov mPrintManager = ((PrintManager) context.getSystemService( 482bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov Context.PRINT_SERVICE)).getGlobalPrintManagerForUser( 483d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav ActivityManager.getCurrentUser()); 484bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 485bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 486bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov @Override 487bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov public void deliverResult(List<PrintJobInfo> printJobs) { 488bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov if (isStarted()) { 489bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov super.deliverResult(printJobs); 490bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 491bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 492bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 493bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov @Override 494bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov protected void onStartLoading() { 495bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov if (DEBUG) { 496bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov Log.i(LOG_TAG, "onStartLoading()"); 497bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 498bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov // If we already have a result, deliver it immediately. 499bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov if (!mPrintJobs.isEmpty()) { 500bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov deliverResult(new ArrayList<PrintJobInfo>(mPrintJobs)); 501bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 502bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov // Start watching for changes. 503bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov if (mPrintJobStateChangeListener == null) { 504bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov mPrintJobStateChangeListener = new PrintJobStateChangeListener() { 505bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov @Override 506d9f156ddf072775c894db1ca3c3fe8989be4dbebSvetoslav public void onPrintJobStateChanged(PrintJobId printJobId) { 507bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov onForceLoad(); 508bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 509bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov }; 510bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov mPrintManager.addPrintJobStateChangeListener( 511bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov mPrintJobStateChangeListener); 512bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 513bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov // If the data changed or we have no data - load it now. 514bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov if (mPrintJobs.isEmpty()) { 515bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov onForceLoad(); 516bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 517bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 518bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 519bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov @Override 520bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov protected void onStopLoading() { 521bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov if (DEBUG) { 522bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov Log.i(LOG_TAG, "onStopLoading()"); 523bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 524bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov // Cancel the load in progress if possible. 525bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov onCancelLoad(); 526bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 527bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 528bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov @Override 529bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov protected void onReset() { 530bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov if (DEBUG) { 531bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov Log.i(LOG_TAG, "onReset()"); 532bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 533bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov // Stop loading. 534bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov onStopLoading(); 535bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov // Clear the cached result. 536bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov mPrintJobs.clear(); 537bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov // Stop watching for changes. 538bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov if (mPrintJobStateChangeListener != null) { 539bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov mPrintManager.removePrintJobStateChangeListener( 540bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov mPrintJobStateChangeListener); 541bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov mPrintJobStateChangeListener = null; 542bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 543bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 544bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 545bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov @Override 546bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov public List<PrintJobInfo> loadInBackground() { 547bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov List<PrintJobInfo> printJobInfos = null; 548bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov List<PrintJob> printJobs = mPrintManager.getPrintJobs(); 549bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov final int printJobCount = printJobs.size(); 550bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov for (int i = 0; i < printJobCount; i++) { 551bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov PrintJobInfo printJob = printJobs.get(i).getInfo(); 552bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov if (shouldShowToUser(printJob)) { 553bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov if (printJobInfos == null) { 554bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov printJobInfos = new ArrayList<PrintJobInfo>(); 555bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 556bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov printJobInfos.add(printJob); 557bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 558bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 559bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov return printJobInfos; 560bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 561bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov 562bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov private static boolean shouldShowToUser(PrintJobInfo printJob) { 563bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov switch (printJob.getState()) { 564bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov case PrintJobInfo.STATE_QUEUED: 565bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov case PrintJobInfo.STATE_STARTED: 566bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov case PrintJobInfo.STATE_BLOCKED: 567bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov case PrintJobInfo.STATE_FAILED: { 568bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov return true; 569bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 570bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 571bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov return false; 572bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 573bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov } 574d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav 575d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = 576d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav new BaseSearchIndexProvider() { 577d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav @Override 578d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) { 579d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav List<SearchIndexableRaw> indexables = new ArrayList<SearchIndexableRaw>(); 580d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav 581d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav PackageManager packageManager = context.getPackageManager(); 582d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav PrintManager printManager = (PrintManager) context.getSystemService( 583d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav Context.PRINT_SERVICE); 584d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav 5857476f5b904f16a0b330a99fc0f7d900a722554eaFabrice Di Meglio String screenTitle = context.getResources().getString(R.string.print_settings); 586d729029b904d43c5c6d06f1d95004fe35445873dFabrice Di Meglio SearchIndexableRaw data = new SearchIndexableRaw(context); 587d729029b904d43c5c6d06f1d95004fe35445873dFabrice Di Meglio data.title = screenTitle; 588d729029b904d43c5c6d06f1d95004fe35445873dFabrice Di Meglio data.screenTitle = screenTitle; 589d729029b904d43c5c6d06f1d95004fe35445873dFabrice Di Meglio indexables.add(data); 590d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav 591d729029b904d43c5c6d06f1d95004fe35445873dFabrice Di Meglio // Indexing all services, regardless if enabled. 592d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav List<PrintServiceInfo> services = printManager.getInstalledPrintServices(); 593d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav final int serviceCount = services.size(); 594d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav for (int i = 0; i < serviceCount; i++) { 595d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav PrintServiceInfo service = services.get(i); 596c853a4282d0511d4a6886dfa95000c4dddff6a31Fabrice Di Meglio 597c853a4282d0511d4a6886dfa95000c4dddff6a31Fabrice Di Meglio ComponentName componentName = new ComponentName( 598c853a4282d0511d4a6886dfa95000c4dddff6a31Fabrice Di Meglio service.getResolveInfo().serviceInfo.packageName, 599c853a4282d0511d4a6886dfa95000c4dddff6a31Fabrice Di Meglio service.getResolveInfo().serviceInfo.name); 600c853a4282d0511d4a6886dfa95000c4dddff6a31Fabrice Di Meglio 601d729029b904d43c5c6d06f1d95004fe35445873dFabrice Di Meglio data = new SearchIndexableRaw(context); 602d729029b904d43c5c6d06f1d95004fe35445873dFabrice Di Meglio data.key = componentName.flattenToString(); 603d729029b904d43c5c6d06f1d95004fe35445873dFabrice Di Meglio data.title = service.getResolveInfo().loadLabel(packageManager).toString(); 604d729029b904d43c5c6d06f1d95004fe35445873dFabrice Di Meglio data.summaryOn = context.getString(R.string.print_feature_state_on); 605d729029b904d43c5c6d06f1d95004fe35445873dFabrice Di Meglio data.summaryOff = context.getString(R.string.print_feature_state_off); 606d729029b904d43c5c6d06f1d95004fe35445873dFabrice Di Meglio data.screenTitle = screenTitle; 607d729029b904d43c5c6d06f1d95004fe35445873dFabrice Di Meglio indexables.add(data); 608d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav } 609d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav 610d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav return indexables; 611d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav } 612d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav 613d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav @Override 614d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav public List<SearchIndexableResource> getXmlResourcesToIndex(Context context, 615d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav boolean enabled) { 616d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav List<SearchIndexableResource> indexables = new ArrayList<SearchIndexableResource>(); 617d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav SearchIndexableResource indexable = new SearchIndexableResource(context); 618d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav indexable.xmlResId = R.xml.print_settings; 619d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav indexables.add(indexable); 620d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav return indexables; 621d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav } 622d78d44d32ae76e4eab843504114446dec3b22ed3Svetoslav }; 623fe47a8dc89fe0393dae16b1c2152c901feab4dcbAlexandra Gherghina} 624