Loading packages/PrintSpooler/res/values/styles.xml +0 −1 Original line number Original line Diff line number Diff line Loading @@ -30,7 +30,6 @@ </style> </style> <style name="PrintOptionEditTextStyle"> <style name="PrintOptionEditTextStyle"> <item name="android:selectAllOnFocus">true</item> <item name="android:minHeight">?android:attr/listPreferredItemHeightSmall</item> <item name="android:minHeight">?android:attr/listPreferredItemHeightSmall</item> <item name="android:singleLine">true</item> <item name="android:singleLine">true</item> <item name="android:ellipsize">end</item> <item name="android:ellipsize">end</item> Loading packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java +5 −6 Original line number Original line Diff line number Diff line Loading @@ -63,7 +63,6 @@ public class FusedPrintersProvider extends Loader<List<PrinterInfo>> { private static final boolean DEBUG = false; private static final boolean DEBUG = false; private static final double WEIGHT_DECAY_COEFFICIENT = 0.95f; private static final double WEIGHT_DECAY_COEFFICIENT = 0.95f; private static final int MAX_HISTORY_LENGTH = 50; private static final int MAX_HISTORY_LENGTH = 50; private static final int MAX_FAVORITE_PRINTER_COUNT = 4; private static final int MAX_FAVORITE_PRINTER_COUNT = 4; Loading Loading @@ -388,25 +387,25 @@ public class FusedPrintersProvider extends Loader<List<PrinterInfo>> { + FusedPrintersProvider.this.hashCode()); + FusedPrintersProvider.this.hashCode()); } } // Ignore printer records whose target services are not installed. // Ignore printer records whose target services are not enabled. PrintManager printManager = (PrintManager) getContext() PrintManager printManager = (PrintManager) getContext() .getSystemService(Context.PRINT_SERVICE); .getSystemService(Context.PRINT_SERVICE); List<PrintServiceInfo> services = printManager List<PrintServiceInfo> services = printManager .getInstalledPrintServices(); .getEnabledPrintServices(); Set<ComponentName> installedComponents = new ArraySet<ComponentName>(); Set<ComponentName> enabledComponents = new ArraySet<ComponentName>(); final int installedServiceCount = services.size(); final int installedServiceCount = services.size(); for (int i = 0; i < installedServiceCount; i++) { for (int i = 0; i < installedServiceCount; i++) { ServiceInfo serviceInfo = services.get(i).getResolveInfo().serviceInfo; ServiceInfo serviceInfo = services.get(i).getResolveInfo().serviceInfo; ComponentName componentName = new ComponentName( ComponentName componentName = new ComponentName( serviceInfo.packageName, serviceInfo.name); serviceInfo.packageName, serviceInfo.name); installedComponents.add(componentName); enabledComponents.add(componentName); } } final int printerCount = printers.size(); final int printerCount = printers.size(); for (int i = printerCount - 1; i >= 0; i--) { for (int i = printerCount - 1; i >= 0; i--) { ComponentName printerServiceName = printers.get(i).getId().getServiceName(); ComponentName printerServiceName = printers.get(i).getId().getServiceName(); if (!installedComponents.contains(printerServiceName.getPackageName())) { if (!enabledComponents.contains(printerServiceName)) { printers.remove(i); printers.remove(i); } } } } Loading packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java +21 −14 Original line number Original line Diff line number Diff line Loading @@ -1214,7 +1214,7 @@ public class PrintJobConfigActivity extends Activity { if (capabilitiesChanged || statusChanged) { if (capabilitiesChanged || statusChanged) { // If something changed during update... // If something changed during update... if (updateUi()) { if (updateUi() || !mController.hasPerformedLayout()) { // Update the document. // Update the document. mController.update(); mController.update(); } } Loading Loading @@ -1269,10 +1269,6 @@ public class PrintJobConfigActivity extends Activity { showUi(UI_EDITING_PRINT_JOB, null); showUi(UI_EDITING_PRINT_JOB, null); bindUi(); bindUi(); mCurrentPrinter = mDestinationSpinnerAdapter.mFakePdfPrinter; updatePrintAttributes(mCurrentPrinter.getCapabilities()); updateUi(); updateUi(); } } Loading Loading @@ -2001,11 +1997,10 @@ public class PrintJobConfigActivity extends Activity { implements LoaderManager.LoaderCallbacks<List<PrinterInfo>>{ implements LoaderManager.LoaderCallbacks<List<PrinterInfo>>{ private final List<PrinterInfo> mPrinters = new ArrayList<PrinterInfo>(); private final List<PrinterInfo> mPrinters = new ArrayList<PrinterInfo>(); private final PrinterInfo mFakePdfPrinter; private PrinterInfo mFakePdfPrinter; public DestinationAdapter() { public DestinationAdapter() { getLoaderManager().initLoader(LOADER_ID_PRINTERS_LOADER, null, this); getLoaderManager().initLoader(LOADER_ID_PRINTERS_LOADER, null, this); mFakePdfPrinter = createFakePdfPrinter(); } } public int getPrinterIndex(PrinterId printerId) { public int getPrinterIndex(PrinterId printerId) { Loading Loading @@ -2039,7 +2034,9 @@ public class PrintJobConfigActivity extends Activity { @Override @Override public int getCount() { public int getCount() { return Math.min(mPrinters.size() + 2, DEST_ADAPTER_MAX_ITEM_COUNT); final int additionalItemCount = (mFakePdfPrinter != null) ? 2 : 1; return Math.min(mPrinters.size() + additionalItemCount, DEST_ADAPTER_MAX_ITEM_COUNT); } } @Override @Override Loading @@ -2055,14 +2052,14 @@ public class PrintJobConfigActivity extends Activity { @Override @Override public Object getItem(int position) { public Object getItem(int position) { if (mPrinters.isEmpty()) { if (mPrinters.isEmpty()) { if (position == 0) { if (position == 0 && mFakePdfPrinter != null) { return mFakePdfPrinter; return mFakePdfPrinter; } } } else { } else { if (position < 1) { if (position < 1) { return mPrinters.get(position); return mPrinters.get(position); } } if (position == 1) { if (position == 1 && mFakePdfPrinter != null) { return mFakePdfPrinter; return mFakePdfPrinter; } } if (position < getCount() - 1) { if (position < getCount() - 1) { Loading @@ -2075,14 +2072,14 @@ public class PrintJobConfigActivity extends Activity { @Override @Override public long getItemId(int position) { public long getItemId(int position) { if (mPrinters.isEmpty()) { if (mPrinters.isEmpty()) { if (position == 0) { if (position == 0 && mFakePdfPrinter != null) { return DEST_ADAPTER_ITEM_ID_SAVE_AS_PDF; return DEST_ADAPTER_ITEM_ID_SAVE_AS_PDF; } } if (position == 1) { if (position == 1) { return DEST_ADAPTER_ITEM_ID_ALL_PRINTERS; return DEST_ADAPTER_ITEM_ID_ALL_PRINTERS; } } } else { } else { if (position == 1) { if (position == 1 && mFakePdfPrinter != null) { return DEST_ADAPTER_ITEM_ID_SAVE_AS_PDF; return DEST_ADAPTER_ITEM_ID_SAVE_AS_PDF; } } if (position == getCount() - 1) { if (position == getCount() - 1) { Loading Loading @@ -2114,14 +2111,14 @@ public class PrintJobConfigActivity extends Activity { Drawable icon = null; Drawable icon = null; if (mPrinters.isEmpty()) { if (mPrinters.isEmpty()) { if (position == 0) { if (position == 0 && mFakePdfPrinter != null) { PrinterInfo printer = (PrinterInfo) getItem(position); PrinterInfo printer = (PrinterInfo) getItem(position); title = printer.getName(); title = printer.getName(); } else if (position == 1) { } else if (position == 1) { title = getString(R.string.all_printers); title = getString(R.string.all_printers); } } } else { } else { if (position == 1) { if (position == 1 && mFakePdfPrinter != null) { PrinterInfo printer = (PrinterInfo) getItem(position); PrinterInfo printer = (PrinterInfo) getItem(position); title = printer.getName(); title = printer.getName(); } else if (position == getCount() - 1) { } else if (position == getCount() - 1) { Loading Loading @@ -2174,6 +2171,16 @@ public class PrintJobConfigActivity extends Activity { @Override @Override public void onLoadFinished(Loader<List<PrinterInfo>> loader, public void onLoadFinished(Loader<List<PrinterInfo>> loader, List<PrinterInfo> printers) { List<PrinterInfo> printers) { // If this is the first load, create the fake PDF printer. // We do this to avoid flicker where the PDF printer is the // only one and as soon as the loader loads the favorites // it gets switched. Not a great user experience. if (mFakePdfPrinter == null) { mCurrentPrinter = mFakePdfPrinter = createFakePdfPrinter(); updatePrintAttributes(mCurrentPrinter.getCapabilities()); updateUi(); } // We rearrange the printers if the user selects a printer // We rearrange the printers if the user selects a printer // not shown in the initial short list. Therefore, we have // not shown in the initial short list. Therefore, we have // to keep the printer order. // to keep the printer order. Loading packages/PrintSpooler/src/com/android/printspooler/SelectPrinterFragment.java +8 −4 Original line number Original line Diff line number Diff line Loading @@ -99,19 +99,19 @@ public final class SelectPrinterFragment extends ListFragment { adapter.registerDataSetObserver(new DataSetObserver() { adapter.registerDataSetObserver(new DataSetObserver() { @Override @Override public void onChanged() { public void onChanged() { if (adapter.getCount() <= 0) { if (!getActivity().isFinishing() && adapter.getCount() <= 0) { updateEmptyView(adapter); updateEmptyView(adapter); } } } } @Override @Override public void onInvalidated() { public void onInvalidated() { if (!getActivity().isFinishing()) { updateEmptyView(adapter); updateEmptyView(adapter); } } } }); }); setListAdapter(adapter); setListAdapter(adapter); View emptyView = getActivity().findViewById(R.id.empty_print_state); getListView().setEmptyView(emptyView); } } @Override @Override Loading Loading @@ -230,6 +230,10 @@ public final class SelectPrinterFragment extends ListFragment { } } public void updateEmptyView(DestinationAdapter adapter) { public void updateEmptyView(DestinationAdapter adapter) { if (getListView().getEmptyView() == null) { View emptyView = getActivity().findViewById(R.id.empty_print_state); getListView().setEmptyView(emptyView); } TextView titleView = (TextView) getActivity().findViewById(R.id.title); TextView titleView = (TextView) getActivity().findViewById(R.id.title); View progressBar = getActivity().findViewById(R.id.progress_bar); View progressBar = getActivity().findViewById(R.id.progress_bar); if (adapter.getUnfilteredCount() <= 0) { if (adapter.getUnfilteredCount() <= 0) { Loading Loading
packages/PrintSpooler/res/values/styles.xml +0 −1 Original line number Original line Diff line number Diff line Loading @@ -30,7 +30,6 @@ </style> </style> <style name="PrintOptionEditTextStyle"> <style name="PrintOptionEditTextStyle"> <item name="android:selectAllOnFocus">true</item> <item name="android:minHeight">?android:attr/listPreferredItemHeightSmall</item> <item name="android:minHeight">?android:attr/listPreferredItemHeightSmall</item> <item name="android:singleLine">true</item> <item name="android:singleLine">true</item> <item name="android:ellipsize">end</item> <item name="android:ellipsize">end</item> Loading
packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java +5 −6 Original line number Original line Diff line number Diff line Loading @@ -63,7 +63,6 @@ public class FusedPrintersProvider extends Loader<List<PrinterInfo>> { private static final boolean DEBUG = false; private static final boolean DEBUG = false; private static final double WEIGHT_DECAY_COEFFICIENT = 0.95f; private static final double WEIGHT_DECAY_COEFFICIENT = 0.95f; private static final int MAX_HISTORY_LENGTH = 50; private static final int MAX_HISTORY_LENGTH = 50; private static final int MAX_FAVORITE_PRINTER_COUNT = 4; private static final int MAX_FAVORITE_PRINTER_COUNT = 4; Loading Loading @@ -388,25 +387,25 @@ public class FusedPrintersProvider extends Loader<List<PrinterInfo>> { + FusedPrintersProvider.this.hashCode()); + FusedPrintersProvider.this.hashCode()); } } // Ignore printer records whose target services are not installed. // Ignore printer records whose target services are not enabled. PrintManager printManager = (PrintManager) getContext() PrintManager printManager = (PrintManager) getContext() .getSystemService(Context.PRINT_SERVICE); .getSystemService(Context.PRINT_SERVICE); List<PrintServiceInfo> services = printManager List<PrintServiceInfo> services = printManager .getInstalledPrintServices(); .getEnabledPrintServices(); Set<ComponentName> installedComponents = new ArraySet<ComponentName>(); Set<ComponentName> enabledComponents = new ArraySet<ComponentName>(); final int installedServiceCount = services.size(); final int installedServiceCount = services.size(); for (int i = 0; i < installedServiceCount; i++) { for (int i = 0; i < installedServiceCount; i++) { ServiceInfo serviceInfo = services.get(i).getResolveInfo().serviceInfo; ServiceInfo serviceInfo = services.get(i).getResolveInfo().serviceInfo; ComponentName componentName = new ComponentName( ComponentName componentName = new ComponentName( serviceInfo.packageName, serviceInfo.name); serviceInfo.packageName, serviceInfo.name); installedComponents.add(componentName); enabledComponents.add(componentName); } } final int printerCount = printers.size(); final int printerCount = printers.size(); for (int i = printerCount - 1; i >= 0; i--) { for (int i = printerCount - 1; i >= 0; i--) { ComponentName printerServiceName = printers.get(i).getId().getServiceName(); ComponentName printerServiceName = printers.get(i).getId().getServiceName(); if (!installedComponents.contains(printerServiceName.getPackageName())) { if (!enabledComponents.contains(printerServiceName)) { printers.remove(i); printers.remove(i); } } } } Loading
packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java +21 −14 Original line number Original line Diff line number Diff line Loading @@ -1214,7 +1214,7 @@ public class PrintJobConfigActivity extends Activity { if (capabilitiesChanged || statusChanged) { if (capabilitiesChanged || statusChanged) { // If something changed during update... // If something changed during update... if (updateUi()) { if (updateUi() || !mController.hasPerformedLayout()) { // Update the document. // Update the document. mController.update(); mController.update(); } } Loading Loading @@ -1269,10 +1269,6 @@ public class PrintJobConfigActivity extends Activity { showUi(UI_EDITING_PRINT_JOB, null); showUi(UI_EDITING_PRINT_JOB, null); bindUi(); bindUi(); mCurrentPrinter = mDestinationSpinnerAdapter.mFakePdfPrinter; updatePrintAttributes(mCurrentPrinter.getCapabilities()); updateUi(); updateUi(); } } Loading Loading @@ -2001,11 +1997,10 @@ public class PrintJobConfigActivity extends Activity { implements LoaderManager.LoaderCallbacks<List<PrinterInfo>>{ implements LoaderManager.LoaderCallbacks<List<PrinterInfo>>{ private final List<PrinterInfo> mPrinters = new ArrayList<PrinterInfo>(); private final List<PrinterInfo> mPrinters = new ArrayList<PrinterInfo>(); private final PrinterInfo mFakePdfPrinter; private PrinterInfo mFakePdfPrinter; public DestinationAdapter() { public DestinationAdapter() { getLoaderManager().initLoader(LOADER_ID_PRINTERS_LOADER, null, this); getLoaderManager().initLoader(LOADER_ID_PRINTERS_LOADER, null, this); mFakePdfPrinter = createFakePdfPrinter(); } } public int getPrinterIndex(PrinterId printerId) { public int getPrinterIndex(PrinterId printerId) { Loading Loading @@ -2039,7 +2034,9 @@ public class PrintJobConfigActivity extends Activity { @Override @Override public int getCount() { public int getCount() { return Math.min(mPrinters.size() + 2, DEST_ADAPTER_MAX_ITEM_COUNT); final int additionalItemCount = (mFakePdfPrinter != null) ? 2 : 1; return Math.min(mPrinters.size() + additionalItemCount, DEST_ADAPTER_MAX_ITEM_COUNT); } } @Override @Override Loading @@ -2055,14 +2052,14 @@ public class PrintJobConfigActivity extends Activity { @Override @Override public Object getItem(int position) { public Object getItem(int position) { if (mPrinters.isEmpty()) { if (mPrinters.isEmpty()) { if (position == 0) { if (position == 0 && mFakePdfPrinter != null) { return mFakePdfPrinter; return mFakePdfPrinter; } } } else { } else { if (position < 1) { if (position < 1) { return mPrinters.get(position); return mPrinters.get(position); } } if (position == 1) { if (position == 1 && mFakePdfPrinter != null) { return mFakePdfPrinter; return mFakePdfPrinter; } } if (position < getCount() - 1) { if (position < getCount() - 1) { Loading @@ -2075,14 +2072,14 @@ public class PrintJobConfigActivity extends Activity { @Override @Override public long getItemId(int position) { public long getItemId(int position) { if (mPrinters.isEmpty()) { if (mPrinters.isEmpty()) { if (position == 0) { if (position == 0 && mFakePdfPrinter != null) { return DEST_ADAPTER_ITEM_ID_SAVE_AS_PDF; return DEST_ADAPTER_ITEM_ID_SAVE_AS_PDF; } } if (position == 1) { if (position == 1) { return DEST_ADAPTER_ITEM_ID_ALL_PRINTERS; return DEST_ADAPTER_ITEM_ID_ALL_PRINTERS; } } } else { } else { if (position == 1) { if (position == 1 && mFakePdfPrinter != null) { return DEST_ADAPTER_ITEM_ID_SAVE_AS_PDF; return DEST_ADAPTER_ITEM_ID_SAVE_AS_PDF; } } if (position == getCount() - 1) { if (position == getCount() - 1) { Loading Loading @@ -2114,14 +2111,14 @@ public class PrintJobConfigActivity extends Activity { Drawable icon = null; Drawable icon = null; if (mPrinters.isEmpty()) { if (mPrinters.isEmpty()) { if (position == 0) { if (position == 0 && mFakePdfPrinter != null) { PrinterInfo printer = (PrinterInfo) getItem(position); PrinterInfo printer = (PrinterInfo) getItem(position); title = printer.getName(); title = printer.getName(); } else if (position == 1) { } else if (position == 1) { title = getString(R.string.all_printers); title = getString(R.string.all_printers); } } } else { } else { if (position == 1) { if (position == 1 && mFakePdfPrinter != null) { PrinterInfo printer = (PrinterInfo) getItem(position); PrinterInfo printer = (PrinterInfo) getItem(position); title = printer.getName(); title = printer.getName(); } else if (position == getCount() - 1) { } else if (position == getCount() - 1) { Loading Loading @@ -2174,6 +2171,16 @@ public class PrintJobConfigActivity extends Activity { @Override @Override public void onLoadFinished(Loader<List<PrinterInfo>> loader, public void onLoadFinished(Loader<List<PrinterInfo>> loader, List<PrinterInfo> printers) { List<PrinterInfo> printers) { // If this is the first load, create the fake PDF printer. // We do this to avoid flicker where the PDF printer is the // only one and as soon as the loader loads the favorites // it gets switched. Not a great user experience. if (mFakePdfPrinter == null) { mCurrentPrinter = mFakePdfPrinter = createFakePdfPrinter(); updatePrintAttributes(mCurrentPrinter.getCapabilities()); updateUi(); } // We rearrange the printers if the user selects a printer // We rearrange the printers if the user selects a printer // not shown in the initial short list. Therefore, we have // not shown in the initial short list. Therefore, we have // to keep the printer order. // to keep the printer order. Loading
packages/PrintSpooler/src/com/android/printspooler/SelectPrinterFragment.java +8 −4 Original line number Original line Diff line number Diff line Loading @@ -99,19 +99,19 @@ public final class SelectPrinterFragment extends ListFragment { adapter.registerDataSetObserver(new DataSetObserver() { adapter.registerDataSetObserver(new DataSetObserver() { @Override @Override public void onChanged() { public void onChanged() { if (adapter.getCount() <= 0) { if (!getActivity().isFinishing() && adapter.getCount() <= 0) { updateEmptyView(adapter); updateEmptyView(adapter); } } } } @Override @Override public void onInvalidated() { public void onInvalidated() { if (!getActivity().isFinishing()) { updateEmptyView(adapter); updateEmptyView(adapter); } } } }); }); setListAdapter(adapter); setListAdapter(adapter); View emptyView = getActivity().findViewById(R.id.empty_print_state); getListView().setEmptyView(emptyView); } } @Override @Override Loading Loading @@ -230,6 +230,10 @@ public final class SelectPrinterFragment extends ListFragment { } } public void updateEmptyView(DestinationAdapter adapter) { public void updateEmptyView(DestinationAdapter adapter) { if (getListView().getEmptyView() == null) { View emptyView = getActivity().findViewById(R.id.empty_print_state); getListView().setEmptyView(emptyView); } TextView titleView = (TextView) getActivity().findViewById(R.id.title); TextView titleView = (TextView) getActivity().findViewById(R.id.title); View progressBar = getActivity().findViewById(R.id.progress_bar); View progressBar = getActivity().findViewById(R.id.progress_bar); if (adapter.getUnfilteredCount() <= 0) { if (adapter.getUnfilteredCount() <= 0) { Loading