summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/PrintingSettings.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/settings/PrintingSettings.java')
-rw-r--r--src/com/android/settings/PrintingSettings.java587
1 files changed, 0 insertions, 587 deletions
diff --git a/src/com/android/settings/PrintingSettings.java b/src/com/android/settings/PrintingSettings.java
deleted file mode 100644
index 723bdc9..0000000
--- a/src/com/android/settings/PrintingSettings.java
+++ /dev/null
@@ -1,587 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings;
-
-import android.app.ActionBar;
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.content.ComponentName;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.database.ContentObserver;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.preference.Preference;
-import android.preference.PreferenceActivity;
-import android.preference.PreferenceCategory;
-import android.preference.PreferenceScreen;
-import android.printservice.PrintServiceInfo;
-import android.provider.Settings;
-import android.text.TextUtils;
-import android.text.TextUtils.SimpleStringSplitter;
-import android.view.Gravity;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.widget.Switch;
-import android.widget.TextView;
-
-import com.android.internal.content.PackageMonitor;
-import com.android.settings.PrintingSettings.ToggleSwitch.OnBeforeCheckedChangeListener;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Activity with the printing settings.
- */
-public class PrintingSettings extends SettingsPreferenceFragment implements DialogCreatable {
-
- private static final char ENABLED_PRINT_SERVICES_SEPARATOR = ':';
-
- // Preference categories
- private static final String SERVICES_CATEGORY = "services_category";
-
- // Extras passed to sub-fragments.
- private static final String EXTRA_PREFERENCE_KEY = "preference_key";
- private static final String EXTRA_CHECKED = "checked";
- private static final String EXTRA_TITLE = "title";
- private static final String EXTRA_ENABLE_WARNING_TITLE = "enable_warning_title";
- private static final String EXTRA_ENABLE_WARNING_MESSAGE = "enable_warning_message";
- private static final String EXTRA_SETTINGS_TITLE = "settings_title";
- private static final String EXTRA_SETTINGS_COMPONENT_NAME = "settings_component_name";
- private static final String EXTRA_ADD_PRINTERS_TITLE = "add_printers_title";
- private static final String EXTRA_ADD_PRINTERS_COMPONENT_NAME = "add_printers_component_name";
- private static final String EXTRA_SERVICE_COMPONENT_NAME = "service_component_name";
-
- // Auxiliary members.
- private final static SimpleStringSplitter sStringColonSplitter =
- new SimpleStringSplitter(ENABLED_PRINT_SERVICES_SEPARATOR);
-
- private static final List<ResolveInfo> sInstalledServicesList = new ArrayList<ResolveInfo>();
-
- private static final Set<ComponentName> sEnabledServiceNameSet = new HashSet<ComponentName>();
-
- private final PackageMonitor mSettingsPackageMonitor = new SettingsPackageMonitor();
-
- private final Handler mHandler = new Handler() {
- @Override
- public void dispatchMessage(Message msg) {
- super.dispatchMessage(msg);
- loadInstalledServices(getActivity());
- loadEnabledServices(getActivity());
- updateServicesPreferences();
- }
- };
-
- private final SettingsContentObserver mSettingsContentObserver =
- new SettingsContentObserver(mHandler) {
- @Override
- public void onChange(boolean selfChange, Uri uri) {
- loadInstalledServices(getActivity());
- loadEnabledServices(getActivity());
- updateServicesPreferences();
- }
- };
-
- // Preference controls.
- private PreferenceCategory mServicesCategory;
-
- private Preference mNoServicesMessagePreference;
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- addPreferencesFromResource(R.xml.print_settings);
- mServicesCategory = (PreferenceCategory) findPreference(SERVICES_CATEGORY);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- mSettingsPackageMonitor.register(getActivity(), getActivity().getMainLooper(), false);
- mSettingsContentObserver.register(getContentResolver());
- loadInstalledServices(getActivity());
- loadEnabledServices(getActivity());
- updateServicesPreferences();
- }
-
- @Override
- public void onPause() {
- mSettingsPackageMonitor.unregister();
- mSettingsContentObserver.unregister(getContentResolver());
- super.onPause();
- }
-
- private void updateServicesPreferences() {
- // Since services category is auto generated we have to do a pass
- // to generate it since services can come and go.
- mServicesCategory.removeAll();
-
- final int installedServiceCount = sInstalledServicesList.size();
- for (int i = 0; i < installedServiceCount; i++) {
- ResolveInfo installedService = sInstalledServicesList.get(i);
-
- PreferenceScreen preference = getPreferenceManager().createPreferenceScreen(
- getActivity());
-
- String title = installedService.loadLabel(getPackageManager()).toString();
- preference.setTitle(title);
-
- ComponentName componentName = new ComponentName(
- installedService.serviceInfo.packageName,
- installedService.serviceInfo.name);
- preference.setKey(componentName.flattenToString());
-
- final boolean serviceEnabled = sEnabledServiceNameSet.contains(componentName);
- if (serviceEnabled) {
- preference.setSummary(getString(R.string.print_feature_state_on));
- } else {
- preference.setSummary(getString(R.string.print_feature_state_off));
- }
-
- preference.setOrder(i);
- preference.setFragment(TogglePrintServicePreferenceFragment.class.getName());
- preference.setPersistent(false);
-
- Bundle extras = preference.getExtras();
- extras.putString(EXTRA_PREFERENCE_KEY, preference.getKey());
- extras.putBoolean(EXTRA_CHECKED, serviceEnabled);
- extras.putString(EXTRA_TITLE, title);
-
- PrintServiceInfo printServiceInfo = PrintServiceInfo.create(
- installedService, getActivity());
-
- CharSequence applicationLabel = installedService.loadLabel(getPackageManager());
-
- extras.putString(EXTRA_ENABLE_WARNING_TITLE, getString(
- R.string.print_service_security_warning_title, applicationLabel));
- extras.putString(EXTRA_ENABLE_WARNING_MESSAGE, getString(
- R.string.print_service_security_warning_summary, applicationLabel));
-
- String settingsClassName = printServiceInfo.getSettingsActivityName();
- if (!TextUtils.isEmpty(settingsClassName)) {
- extras.putString(EXTRA_SETTINGS_TITLE,
- getString(R.string.print_menu_item_settings));
- extras.putString(EXTRA_SETTINGS_COMPONENT_NAME,
- new ComponentName(installedService.serviceInfo.packageName,
- settingsClassName).flattenToString());
- }
-
- String addPrinterClassName = printServiceInfo.getAddPrintersActivityName();
- if (!TextUtils.isEmpty(addPrinterClassName)) {
- extras.putString(EXTRA_ADD_PRINTERS_TITLE,
- getString(R.string.print_menu_item_add_printers));
- extras.putString(EXTRA_ADD_PRINTERS_COMPONENT_NAME,
- new ComponentName(installedService.serviceInfo.packageName,
- addPrinterClassName).flattenToString());
- }
-
- extras.putString(EXTRA_SERVICE_COMPONENT_NAME, componentName.flattenToString());
-
- mServicesCategory.addPreference(preference);
- }
-
- if (mServicesCategory.getPreferenceCount() == 0) {
- if (mNoServicesMessagePreference == null) {
- mNoServicesMessagePreference = new Preference(getActivity()) {
- @Override
- protected void onBindView(View view) {
- super.onBindView(view);
- TextView summaryView = (TextView) view.findViewById(R.id.summary);
- String title = getString(R.string.print_no_services_installed);
- summaryView.setText(title);
- }
- };
- mNoServicesMessagePreference.setPersistent(false);
- mNoServicesMessagePreference.setLayoutResource(
- R.layout.text_description_preference);
- mNoServicesMessagePreference.setSelectable(false);
- }
- mServicesCategory.addPreference(mNoServicesMessagePreference);
- }
- }
-
- private static void loadInstalledServices(Context context) {
- sInstalledServicesList.clear();
- List<ResolveInfo> resolveInfos = context.getPackageManager().queryIntentServices(
- new Intent(android.printservice.PrintService.SERVICE_INTERFACE),
- PackageManager.GET_SERVICES | PackageManager.GET_META_DATA);
- final int resolveInfoCount = resolveInfos.size();
- for (int i = 0, count = resolveInfoCount; i < count; i++) {
- ResolveInfo resolveInfo = resolveInfos.get(i);
- sInstalledServicesList.add(resolveInfo);
- }
- }
-
- private static void loadEnabledServices(Context context) {
- sEnabledServiceNameSet.clear();
-
- String enabledServicesSetting = Settings.Secure.getString(context
- .getContentResolver(), Settings.Secure.ENABLED_PRINT_SERVICES);
- if (enabledServicesSetting == null) {
- enabledServicesSetting = "";
- }
-
- SimpleStringSplitter colonSplitter = sStringColonSplitter;
- colonSplitter.setString(enabledServicesSetting);
-
- while (colonSplitter.hasNext()) {
- String componentNameString = colonSplitter.next();
- ComponentName enabledService = ComponentName.unflattenFromString(
- componentNameString);
- sEnabledServiceNameSet.add(enabledService);
- }
- }
-
- private class SettingsPackageMonitor extends PackageMonitor {
- @Override
- public void onPackageAdded(String packageName, int uid) {
- mHandler.obtainMessage().sendToTarget();
- }
-
- @Override
- public void onPackageAppeared(String packageName, int reason) {
- mHandler.obtainMessage().sendToTarget();
- }
-
- @Override
- public void onPackageDisappeared(String packageName, int reason) {
- mHandler.obtainMessage().sendToTarget();
- }
-
- @Override
- public void onPackageRemoved(String packageName, int uid) {
- mHandler.obtainMessage().sendToTarget();
- }
- }
-
- public static class ToggleSwitch extends Switch {
-
- private OnBeforeCheckedChangeListener mOnBeforeListener;
-
- public static interface OnBeforeCheckedChangeListener {
- public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked);
- }
-
- public ToggleSwitch(Context context) {
- super(context);
- }
-
- public void setOnBeforeCheckedChangeListener(OnBeforeCheckedChangeListener listener) {
- mOnBeforeListener = listener;
- }
-
- @Override
- public void setChecked(boolean checked) {
- if (mOnBeforeListener != null
- && mOnBeforeListener.onBeforeCheckedChanged(this, checked)) {
- return;
- }
- super.setChecked(checked);
- }
-
- public void setCheckedInternal(boolean checked) {
- super.setChecked(checked);
- }
- }
-
- public static class TogglePrintServicePreferenceFragment
- extends ToggleFeaturePreferenceFragment implements DialogInterface.OnClickListener {
-
- private static final int DIALOG_ID_ENABLE_WARNING = 1;
-
- private final SettingsContentObserver mSettingsContentObserver =
- new SettingsContentObserver(new Handler()) {
- @Override
- public void onChange(boolean selfChange, Uri uri) {
- String settingValue = Settings.Secure.getString(getContentResolver(),
- Settings.Secure.ENABLED_PRINT_SERVICES);
- final boolean enabled = settingValue.contains(mComponentName);
- mToggleSwitch.setCheckedInternal(enabled);
- }
- };
-
- private CharSequence mEnableWarningTitle;
- private CharSequence mEnableWarningMessage;
-
- private String mComponentName;
-
- @Override
- public void onResume() {
- mSettingsContentObserver.register(getContentResolver());
- super.onResume();
- }
-
- @Override
- public void onPause() {
- mSettingsContentObserver.unregister(getContentResolver());
- super.onPause();
- }
-
- @Override
- public void onPreferenceToggled(String preferenceKey, boolean enabled) {
- Set<ComponentName> enabledServices = sEnabledServiceNameSet;
- ComponentName toggledService = ComponentName.unflattenFromString(preferenceKey);
- if (enabled) {
- enabledServices.add(toggledService);
- } else {
- enabledServices.remove(toggledService);
- }
- StringBuilder enabledServicesBuilder = new StringBuilder();
- for (ComponentName enabledService : enabledServices) {
- enabledServicesBuilder.append(enabledService.flattenToString());
- enabledServicesBuilder.append(ENABLED_PRINT_SERVICES_SEPARATOR);
- }
- final int enabledServicesBuilderLength = enabledServicesBuilder.length();
- if (enabledServicesBuilderLength > 0) {
- enabledServicesBuilder.deleteCharAt(enabledServicesBuilderLength - 1);
- }
- Settings.Secure.putString(getContentResolver(),
- Settings.Secure.ENABLED_PRINT_SERVICES,
- enabledServicesBuilder.toString());
- }
-
- @Override
- public Dialog onCreateDialog(int dialogId) {
- CharSequence title = null;
- CharSequence message = null;
- switch (dialogId) {
- case DIALOG_ID_ENABLE_WARNING:
- title = mEnableWarningTitle;
- message = mEnableWarningMessage;
- break;
- default:
- throw new IllegalArgumentException();
- }
- return new AlertDialog.Builder(getActivity())
- .setTitle(title)
- .setIconAttribute(android.R.attr.alertDialogIcon)
- .setMessage(message)
- .setCancelable(true)
- .setPositiveButton(android.R.string.ok, this)
- .setNegativeButton(android.R.string.cancel, this)
- .create();
- }
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- final boolean checked;
- switch (which) {
- case DialogInterface.BUTTON_POSITIVE:
- checked = true;
- mToggleSwitch.setCheckedInternal(checked);
- getArguments().putBoolean(EXTRA_CHECKED, checked);
- onPreferenceToggled(mPreferenceKey, checked);
- break;
- case DialogInterface.BUTTON_NEGATIVE:
- checked = false;
- mToggleSwitch.setCheckedInternal(checked);
- getArguments().putBoolean(EXTRA_CHECKED, checked);
- onPreferenceToggled(mPreferenceKey, checked);
- break;
- default:
- throw new IllegalArgumentException();
- }
- }
-
- @Override
- protected void onInstallActionBarToggleSwitch() {
- super.onInstallActionBarToggleSwitch();
- mToggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() {
- @Override
- public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) {
- if (checked) {
- if (!TextUtils.isEmpty(mEnableWarningMessage)) {
- toggleSwitch.setCheckedInternal(false);
- getArguments().putBoolean(EXTRA_CHECKED, false);
- showDialog(DIALOG_ID_ENABLE_WARNING);
- return true;
- }
- onPreferenceToggled(mPreferenceKey, true);
- } else {
- onPreferenceToggled(mPreferenceKey, false);
- }
- return false;
- }
- });
- }
-
- @Override
- protected void onProcessArguments(Bundle arguments) {
- super.onProcessArguments(arguments);
- // Settings title and intent.
- String settingsTitle = arguments.getString(EXTRA_SETTINGS_TITLE);
- String settingsComponentName = arguments.getString(EXTRA_SETTINGS_COMPONENT_NAME);
- if (!TextUtils.isEmpty(settingsTitle) && !TextUtils.isEmpty(settingsComponentName)) {
- Intent settingsIntent = new Intent(Intent.ACTION_MAIN).setComponent(
- ComponentName.unflattenFromString(settingsComponentName.toString()));
- if (!getPackageManager().queryIntentActivities(settingsIntent, 0).isEmpty()) {
- mSettingsTitle = settingsTitle;
- mSettingsIntent = settingsIntent;
- setHasOptionsMenu(true);
- }
- }
- // Add printers title and intent.
- String addPrintersTitle = arguments.getString(EXTRA_ADD_PRINTERS_TITLE);
- String addPrintersComponentName =
- arguments.getString(EXTRA_ADD_PRINTERS_COMPONENT_NAME);
- if (!TextUtils.isEmpty(addPrintersTitle)
- && !TextUtils.isEmpty(addPrintersComponentName)) {
- Intent addPritnersIntent = new Intent(Intent.ACTION_MAIN).setComponent(
- ComponentName.unflattenFromString(addPrintersComponentName.toString()));
- if (!getPackageManager().queryIntentActivities(addPritnersIntent, 0).isEmpty()) {
- mAddPrintersTitle = addPrintersTitle;
- mAddPrintersIntent = addPritnersIntent;
- setHasOptionsMenu(true);
- }
- }
- // Enable warning title.
- mEnableWarningTitle = arguments.getCharSequence(
- PrintingSettings.EXTRA_ENABLE_WARNING_TITLE);
- // Enable warning message.
- mEnableWarningMessage = arguments.getCharSequence(
- PrintingSettings.EXTRA_ENABLE_WARNING_MESSAGE);
- // Component name.
- mComponentName = arguments.getString(EXTRA_SERVICE_COMPONENT_NAME);
- }
- }
-
- public static abstract class ToggleFeaturePreferenceFragment
- extends SettingsPreferenceFragment {
-
- protected ToggleSwitch mToggleSwitch;
-
- protected String mPreferenceKey;
-
- protected CharSequence mSettingsTitle;
- protected Intent mSettingsIntent;
-
- protected CharSequence mAddPrintersTitle;
- protected Intent mAddPrintersIntent;
-
- // TODO: Showing sub-sub fragment does not handle the activity title
- // so we do it but this is wrong. Do a real fix when there is time.
- private CharSequence mOldActivityTitle;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- PreferenceScreen preferenceScreen = getPreferenceManager().createPreferenceScreen(
- getActivity());
- setPreferenceScreen(preferenceScreen);
- }
-
- @Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- onInstallActionBarToggleSwitch();
- onProcessArguments(getArguments());
- getListView().setDivider(null);
- getListView().setEnabled(false);
- }
-
- @Override
- public void onDestroyView() {
- getActivity().getActionBar().setCustomView(null);
- if (mOldActivityTitle != null) {
- getActivity().getActionBar().setTitle(mOldActivityTitle);
- }
- mToggleSwitch.setOnBeforeCheckedChangeListener(null);
- super.onDestroyView();
- }
-
- protected abstract void onPreferenceToggled(String preferenceKey, boolean enabled);
-
- @Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- super.onCreateOptionsMenu(menu, inflater);
- if (!TextUtils.isEmpty(mSettingsTitle) && mSettingsIntent != null) {
- MenuItem menuItem = menu.add(mSettingsTitle);
- menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
- menuItem.setIntent(mSettingsIntent);
- }
- if (!TextUtils.isEmpty(mAddPrintersTitle) && mAddPrintersIntent != null) {
- MenuItem menuItem = menu.add(mAddPrintersTitle);
- menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
- menuItem.setIntent(mAddPrintersIntent);
- }
- }
-
- protected void onInstallActionBarToggleSwitch() {
- mToggleSwitch = createAndAddActionBarToggleSwitch(getActivity());
- }
-
- private ToggleSwitch createAndAddActionBarToggleSwitch(Activity activity) {
- ToggleSwitch toggleSwitch = new ToggleSwitch(activity);
- final int padding = activity.getResources().getDimensionPixelSize(
- R.dimen.action_bar_switch_padding);
- toggleSwitch.setPaddingRelative(0, 0, padding, 0);
- activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
- ActionBar.DISPLAY_SHOW_CUSTOM);
- activity.getActionBar().setCustomView(toggleSwitch,
- new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT,
- ActionBar.LayoutParams.WRAP_CONTENT,
- Gravity.CENTER_VERTICAL | Gravity.END));
- return toggleSwitch;
- }
-
- protected void onProcessArguments(Bundle arguments) {
- // Key.
- mPreferenceKey = arguments.getString(EXTRA_PREFERENCE_KEY);
- // Enabled.
- final boolean enabled = arguments.getBoolean(EXTRA_CHECKED);
- mToggleSwitch.setCheckedInternal(enabled);
- // Title.
- PreferenceActivity activity = (PreferenceActivity) getActivity();
- if (!activity.onIsMultiPane() || activity.onIsHidingHeaders()) {
- mOldActivityTitle = getActivity().getTitle();
- String title = arguments.getString(EXTRA_TITLE);
- getActivity().getActionBar().setTitle(title);
- }
- }
- }
-
- private static abstract class SettingsContentObserver extends ContentObserver {
-
- public SettingsContentObserver(Handler handler) {
- super(handler);
- }
-
- public void register(ContentResolver contentResolver) {
- contentResolver.registerContentObserver(Settings.Secure.getUriFor(
- Settings.Secure.ENABLED_PRINT_SERVICES), false, this);
- }
-
- public void unregister(ContentResolver contentResolver) {
- contentResolver.unregisterContentObserver(this);
- }
-
- @Override
- public abstract void onChange(boolean selfChange, Uri uri);
- }
-}