Search in sources :

Example 41 with PrinterInfo

use of android.print.PrinterInfo in project android_frameworks_base by DirtyUnicorns.

the class FusedPrintersProvider method updatePrinters.

private void updatePrinters(List<PrinterInfo> printers, List<Pair<PrinterInfo, Location>> favoritePrinters, Location location) {
    if (mPrintersUpdatedBefore && mPrinters.equals(printers) && mFavoritePrinters.equals(favoritePrinters) && Objects.equals(mLocationOfLastPrinterUpdate, location)) {
        return;
    }
    mLocationOfLastPrinterUpdate = location;
    mPrintersUpdatedBefore = true;
    // Some of the found printers may have be a printer that is in the
    // history but with its properties changed. Hence, we try to update the
    // printer to use its current properties instead of the historical one.
    mPersistenceManager.updateHistoricalPrintersIfNeeded(printers);
    Map<PrinterId, PrinterInfo> printersMap = new LinkedHashMap<>();
    final int printerCount = printers.size();
    for (int i = 0; i < printerCount; i++) {
        PrinterInfo printer = printers.get(i);
        printersMap.put(printer.getId(), printer);
    }
    computeAndDeliverResult(printersMap, favoritePrinters);
}
Also used : PrinterId(android.print.PrinterId) PrinterInfo(android.print.PrinterInfo) LinkedHashMap(java.util.LinkedHashMap)

Example 42 with PrinterInfo

use of android.print.PrinterInfo in project android_frameworks_base by DirtyUnicorns.

the class SelectPrinterActivity method onCreateContextMenu.

@Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) {
    if (view == mListView) {
        final int position = ((AdapterContextMenuInfo) menuInfo).position;
        PrinterInfo printer = (PrinterInfo) mListView.getAdapter().getItem(position);
        menu.setHeaderTitle(printer.getName());
        // Add the select menu item if applicable.
        if (printer.getStatus() != PrinterInfo.STATUS_UNAVAILABLE) {
            MenuItem selectItem = menu.add(Menu.NONE, R.string.print_select_printer, Menu.NONE, R.string.print_select_printer);
            Intent intent = new Intent();
            intent.putExtra(EXTRA_PRINTER, printer);
            selectItem.setIntent(intent);
        }
        // Add the forget menu item if applicable.
        if (mPrinterRegistry.isFavoritePrinter(printer.getId())) {
            MenuItem forgetItem = menu.add(Menu.NONE, R.string.print_forget_printer, Menu.NONE, R.string.print_forget_printer);
            Intent intent = new Intent();
            intent.putExtra(EXTRA_PRINTER_ID, printer.getId());
            forgetItem.setIntent(intent);
        }
    }
}
Also used : AdapterContextMenuInfo(android.widget.AdapterView.AdapterContextMenuInfo) MenuItem(android.view.MenuItem) Intent(android.content.Intent) PrinterInfo(android.print.PrinterInfo)

Example 43 with PrinterInfo

use of android.print.PrinterInfo in project android_frameworks_base by crdroidandroid.

the class FusedPrintersProvider method loadInternal.

private void loadInternal() {
    if (mDiscoverySession == null) {
        PrintManager printManager = (PrintManager) getContext().getSystemService(Context.PRINT_SERVICE);
        mDiscoverySession = printManager.createPrinterDiscoverySession();
        mPersistenceManager.readPrinterHistory();
    } else if (mPersistenceManager.isHistoryChanged()) {
        mPersistenceManager.readPrinterHistory();
    }
    if (mPersistenceManager.isReadHistoryCompleted() && !mDiscoverySession.isPrinterDiscoveryStarted()) {
        mDiscoverySession.setOnPrintersChangeListener(new OnPrintersChangeListener() {

            @Override
            public void onPrintersChanged() {
                if (DEBUG) {
                    Log.i(LOG_TAG, "onPrintersChanged() count:" + mDiscoverySession.getPrinters().size() + " " + FusedPrintersProvider.this.hashCode());
                }
                updatePrinters(mDiscoverySession.getPrinters(), mFavoritePrinters, getCurrentLocation());
            }
        });
        final int favoriteCount = mFavoritePrinters.size();
        List<PrinterId> printerIds = new ArrayList<>(favoriteCount);
        for (int i = 0; i < favoriteCount; i++) {
            printerIds.add(mFavoritePrinters.get(i).first.getId());
        }
        mDiscoverySession.startPrinterDiscovery(printerIds);
        List<PrinterInfo> printers = mDiscoverySession.getPrinters();
        updatePrinters(printers, mFavoritePrinters, getCurrentLocation());
    }
}
Also used : OnPrintersChangeListener(android.print.PrinterDiscoverySession.OnPrintersChangeListener) ArrayList(java.util.ArrayList) PrinterId(android.print.PrinterId) PrintManager(android.print.PrintManager) PrinterInfo(android.print.PrinterInfo)

Example 44 with PrinterInfo

use of android.print.PrinterInfo in project android_frameworks_base by crdroidandroid.

the class FusedPrintersProvider method computeAndDeliverResult.

/**
     * Compute the printers, order them appropriately and deliver the printers to the clients. We
     * prefer printers that have been previously used (favorites) and printers that have been used
     * previously close to the current location (near printers).
     *
     * @param discoveredPrinters All printers currently discovered by the print discovery session.
     * @param favoritePrinters The ordered list of printers. The earlier in the list, the more
     *            preferred.
     */
private void computeAndDeliverResult(Map<PrinterId, PrinterInfo> discoveredPrinters, List<Pair<PrinterInfo, Location>> favoritePrinters) {
    List<PrinterInfo> printers = new ArrayList<>();
    // Store the printerIds that have already been added. We cannot compare the printerInfos in
    // "printers" as they might have been taken from discoveredPrinters and the printerInfo does
    // not equals() anymore
    HashSet<PrinterId> alreadyAddedPrinter = new HashSet<>(MAX_FAVORITE_PRINTER_COUNT);
    Location location = getCurrentLocation();
    // Add the favorite printers that have last been used close to the current location
    final int favoritePrinterCount = favoritePrinters.size();
    if (location != null) {
        for (int i = 0; i < favoritePrinterCount; i++) {
            // Only add a certain amount of favorite printers
            if (printers.size() == MAX_FAVORITE_PRINTER_COUNT) {
                break;
            }
            PrinterInfo favoritePrinter = favoritePrinters.get(i).first;
            Location printerLocation = favoritePrinters.get(i).second;
            if (printerLocation != null && !alreadyAddedPrinter.contains(favoritePrinter.getId())) {
                if (printerLocation.distanceTo(location) <= MAX_PRINTER_DISTANCE) {
                    updateAndAddPrinter(printers, favoritePrinter, discoveredPrinters);
                    alreadyAddedPrinter.add(favoritePrinter.getId());
                }
            }
        }
    }
    // Add the other favorite printers
    for (int i = 0; i < favoritePrinterCount; i++) {
        // Only add a certain amount of favorite printers
        if (printers.size() == MAX_FAVORITE_PRINTER_COUNT) {
            break;
        }
        PrinterInfo favoritePrinter = favoritePrinters.get(i).first;
        if (!alreadyAddedPrinter.contains(favoritePrinter.getId())) {
            updateAndAddPrinter(printers, favoritePrinter, discoveredPrinters);
            alreadyAddedPrinter.add(favoritePrinter.getId());
        }
    }
    // Add other updated printers. Printers that have already been added have been removed from
    // discoveredPrinters in the calls to updateAndAddPrinter
    final int printerCount = mPrinters.size();
    for (int i = 0; i < printerCount; i++) {
        PrinterInfo printer = mPrinters.get(i);
        PrinterInfo updatedPrinter = discoveredPrinters.remove(printer.getId());
        if (updatedPrinter != null) {
            printers.add(updatedPrinter);
        }
    }
    // Add the new printers, i.e. what is left.
    printers.addAll(discoveredPrinters.values());
    // Update the list of printers.
    mPrinters.clear();
    mPrinters.addAll(printers);
    if (isStarted()) {
        // If stated deliver the new printers.
        deliverResult(printers);
    } else {
        // Otherwise, take a note for the change.
        onContentChanged();
    }
}
Also used : ArrayList(java.util.ArrayList) PrinterId(android.print.PrinterId) PrinterInfo(android.print.PrinterInfo) HashSet(java.util.HashSet) Location(android.location.Location)

Example 45 with PrinterInfo

use of android.print.PrinterInfo in project android_frameworks_base by crdroidandroid.

the class FusedPrintersProvider method updatePrinters.

private void updatePrinters(List<PrinterInfo> printers, List<Pair<PrinterInfo, Location>> favoritePrinters, Location location) {
    if (mPrintersUpdatedBefore && mPrinters.equals(printers) && mFavoritePrinters.equals(favoritePrinters) && Objects.equals(mLocationOfLastPrinterUpdate, location)) {
        return;
    }
    mLocationOfLastPrinterUpdate = location;
    mPrintersUpdatedBefore = true;
    // Some of the found printers may have be a printer that is in the
    // history but with its properties changed. Hence, we try to update the
    // printer to use its current properties instead of the historical one.
    mPersistenceManager.updateHistoricalPrintersIfNeeded(printers);
    Map<PrinterId, PrinterInfo> printersMap = new LinkedHashMap<>();
    final int printerCount = printers.size();
    for (int i = 0; i < printerCount; i++) {
        PrinterInfo printer = printers.get(i);
        printersMap.put(printer.getId(), printer);
    }
    computeAndDeliverResult(printersMap, favoritePrinters);
}
Also used : PrinterId(android.print.PrinterId) PrinterInfo(android.print.PrinterInfo) LinkedHashMap(java.util.LinkedHashMap)

Aggregations

PrinterInfo (android.print.PrinterInfo)46 PrinterId (android.print.PrinterId)30 RemoteException (android.os.RemoteException)15 ArrayList (java.util.ArrayList)15 PrintManager (android.print.PrintManager)10 View (android.view.View)6 AdapterView (android.widget.AdapterView)6 ImageView (android.widget.ImageView)6 ListView (android.widget.ListView)6 SearchView (android.widget.SearchView)6 TextView (android.widget.TextView)6 Intent (android.content.Intent)5 DataSetObserver (android.database.DataSetObserver)5 Location (android.location.Location)5 OnPrintersChangeListener (android.print.PrinterDiscoverySession.OnPrintersChangeListener)5 PrintServiceInfo (android.printservice.PrintServiceInfo)5 MenuItem (android.view.MenuItem)5 OnClickListener (android.view.View.OnClickListener)5 AdapterContextMenuInfo (android.widget.AdapterView.AdapterContextMenuInfo)5 HashSet (java.util.HashSet)5