Loading core/java/android/print/PrinterCapabilitiesInfo.java +32 −16 Original line number Diff line number Diff line Loading @@ -24,11 +24,13 @@ import android.print.PrintAttributes.DuplexMode; import android.print.PrintAttributes.Margins; import android.print.PrintAttributes.MediaSize; import android.print.PrintAttributes.Resolution; import com.android.internal.util.Preconditions; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.function.IntConsumer; /** * This class represents the capabilities of a printer. Instances Loading @@ -55,9 +57,9 @@ public final class PrinterCapabilitiesInfo implements Parcelable { private static final Margins DEFAULT_MARGINS = new Margins(0, 0, 0, 0); private Margins mMinMargins = DEFAULT_MARGINS; private List<MediaSize> mMediaSizes; private List<Resolution> mResolutions; private @NonNull Margins mMinMargins = DEFAULT_MARGINS; private @NonNull List<MediaSize> mMediaSizes; private @NonNull List<Resolution> mResolutions; private int mColorModes; private int mDuplexModes; Loading Loading @@ -205,15 +207,37 @@ public final class PrinterCapabilitiesInfo implements Parcelable { return builder.build(); } /** * Call enforceSingle for each bit in the mask. * * @param mask The mask * @param enforceSingle The function to call */ private static void enforceValidMask(int mask, IntConsumer enforceSingle) { int current = mask; while (current > 0) { final int currentMode = (1 << Integer.numberOfTrailingZeros(current)); current &= ~currentMode; enforceSingle.accept(currentMode); } } private PrinterCapabilitiesInfo(Parcel parcel) { mMinMargins = readMargins(parcel); mMinMargins = Preconditions.checkNotNull(readMargins(parcel)); readMediaSizes(parcel); readResolutions(parcel); mColorModes = parcel.readInt(); enforceValidMask(mColorModes, (currentMode) -> PrintAttributes.enforceValidColorMode(currentMode)); mDuplexModes = parcel.readInt(); enforceValidMask(mDuplexModes, (currentMode) -> PrintAttributes.enforceValidColorMode(currentMode)); readDefaults(parcel); Preconditions.checkArgument(mMediaSizes.size() > mDefaults[PROPERTY_MEDIA_SIZE]); Preconditions.checkArgument(mResolutions.size() > mDefaults[PROPERTY_RESOLUTION]); } @Override Loading Loading @@ -537,12 +561,8 @@ public final class PrinterCapabilitiesInfo implements Parcelable { */ public @NonNull Builder setColorModes(@ColorMode int colorModes, @ColorMode int defaultColorMode) { int currentModes = colorModes; while (currentModes > 0) { final int currentMode = (1 << Integer.numberOfTrailingZeros(currentModes)); currentModes &= ~currentMode; PrintAttributes.enforceValidColorMode(currentMode); } enforceValidMask(colorModes, (currentMode) -> PrintAttributes.enforceValidColorMode(currentMode)); PrintAttributes.enforceValidColorMode(defaultColorMode); mPrototype.mColorModes = colorModes; mPrototype.mDefaults[PROPERTY_COLOR_MODE] = defaultColorMode; Loading @@ -568,12 +588,8 @@ public final class PrinterCapabilitiesInfo implements Parcelable { */ public @NonNull Builder setDuplexModes(@DuplexMode int duplexModes, @DuplexMode int defaultDuplexMode) { int currentModes = duplexModes; while (currentModes > 0) { final int currentMode = (1 << Integer.numberOfTrailingZeros(currentModes)); currentModes &= ~currentMode; PrintAttributes.enforceValidDuplexMode(currentMode); } enforceValidMask(duplexModes, (currentMode) -> PrintAttributes.enforceValidDuplexMode(currentMode)); PrintAttributes.enforceValidDuplexMode(defaultDuplexMode); mPrototype.mDuplexModes = duplexModes; mPrototype.mDefaults[PROPERTY_DUPLEX_MODE] = defaultDuplexMode; Loading Loading
core/java/android/print/PrinterCapabilitiesInfo.java +32 −16 Original line number Diff line number Diff line Loading @@ -24,11 +24,13 @@ import android.print.PrintAttributes.DuplexMode; import android.print.PrintAttributes.Margins; import android.print.PrintAttributes.MediaSize; import android.print.PrintAttributes.Resolution; import com.android.internal.util.Preconditions; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.function.IntConsumer; /** * This class represents the capabilities of a printer. Instances Loading @@ -55,9 +57,9 @@ public final class PrinterCapabilitiesInfo implements Parcelable { private static final Margins DEFAULT_MARGINS = new Margins(0, 0, 0, 0); private Margins mMinMargins = DEFAULT_MARGINS; private List<MediaSize> mMediaSizes; private List<Resolution> mResolutions; private @NonNull Margins mMinMargins = DEFAULT_MARGINS; private @NonNull List<MediaSize> mMediaSizes; private @NonNull List<Resolution> mResolutions; private int mColorModes; private int mDuplexModes; Loading Loading @@ -205,15 +207,37 @@ public final class PrinterCapabilitiesInfo implements Parcelable { return builder.build(); } /** * Call enforceSingle for each bit in the mask. * * @param mask The mask * @param enforceSingle The function to call */ private static void enforceValidMask(int mask, IntConsumer enforceSingle) { int current = mask; while (current > 0) { final int currentMode = (1 << Integer.numberOfTrailingZeros(current)); current &= ~currentMode; enforceSingle.accept(currentMode); } } private PrinterCapabilitiesInfo(Parcel parcel) { mMinMargins = readMargins(parcel); mMinMargins = Preconditions.checkNotNull(readMargins(parcel)); readMediaSizes(parcel); readResolutions(parcel); mColorModes = parcel.readInt(); enforceValidMask(mColorModes, (currentMode) -> PrintAttributes.enforceValidColorMode(currentMode)); mDuplexModes = parcel.readInt(); enforceValidMask(mDuplexModes, (currentMode) -> PrintAttributes.enforceValidColorMode(currentMode)); readDefaults(parcel); Preconditions.checkArgument(mMediaSizes.size() > mDefaults[PROPERTY_MEDIA_SIZE]); Preconditions.checkArgument(mResolutions.size() > mDefaults[PROPERTY_RESOLUTION]); } @Override Loading Loading @@ -537,12 +561,8 @@ public final class PrinterCapabilitiesInfo implements Parcelable { */ public @NonNull Builder setColorModes(@ColorMode int colorModes, @ColorMode int defaultColorMode) { int currentModes = colorModes; while (currentModes > 0) { final int currentMode = (1 << Integer.numberOfTrailingZeros(currentModes)); currentModes &= ~currentMode; PrintAttributes.enforceValidColorMode(currentMode); } enforceValidMask(colorModes, (currentMode) -> PrintAttributes.enforceValidColorMode(currentMode)); PrintAttributes.enforceValidColorMode(defaultColorMode); mPrototype.mColorModes = colorModes; mPrototype.mDefaults[PROPERTY_COLOR_MODE] = defaultColorMode; Loading @@ -568,12 +588,8 @@ public final class PrinterCapabilitiesInfo implements Parcelable { */ public @NonNull Builder setDuplexModes(@DuplexMode int duplexModes, @DuplexMode int defaultDuplexMode) { int currentModes = duplexModes; while (currentModes > 0) { final int currentMode = (1 << Integer.numberOfTrailingZeros(currentModes)); currentModes &= ~currentMode; PrintAttributes.enforceValidDuplexMode(currentMode); } enforceValidMask(duplexModes, (currentMode) -> PrintAttributes.enforceValidDuplexMode(currentMode)); PrintAttributes.enforceValidDuplexMode(defaultDuplexMode); mPrototype.mDuplexModes = duplexModes; mPrototype.mDefaults[PROPERTY_DUPLEX_MODE] = defaultDuplexMode; Loading