70 lines
2.6 KiB
Java
70 lines
2.6 KiB
Java
/* GENERATED SOURCE. DO NOT MODIFY. */
|
|
// © 2020 and later: Unicode, Inc. and others.
|
|
// License & terms of use: http://www.unicode.org/copyright.html
|
|
package android.icu.impl.number;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.util.List;
|
|
|
|
import android.icu.impl.units.ComplexUnitsConverter;
|
|
import android.icu.impl.units.MeasureUnitImpl;
|
|
import android.icu.impl.units.UnitsRouter;
|
|
import android.icu.util.MeasureUnit;
|
|
import android.icu.util.ULocale;
|
|
|
|
/**
|
|
* @hide Only a subset of ICU is exposed in Android
|
|
*/
|
|
public class UsagePrefsHandler implements MicroPropsGenerator {
|
|
|
|
private final MicroPropsGenerator fParent;
|
|
private UnitsRouter fUnitsRouter;
|
|
|
|
public UsagePrefsHandler(ULocale locale, MeasureUnit inputUnit, String usage, MicroPropsGenerator parent) {
|
|
assert parent != null;
|
|
|
|
this.fParent = parent;
|
|
this.fUnitsRouter = new UnitsRouter(MeasureUnitImpl.forIdentifier(inputUnit.getIdentifier()), locale, usage);
|
|
}
|
|
|
|
/**
|
|
* Populates micros.mixedMeasures and modifies quantity, based on the values
|
|
* in measures.
|
|
*/
|
|
protected static void
|
|
mixedMeasuresToMicros(ComplexUnitsConverter.ComplexConverterResult complexConverterResult, DecimalQuantity quantity, MicroProps outMicros) {
|
|
outMicros.mixedMeasures = complexConverterResult.measures;
|
|
outMicros.indexOfQuantity = complexConverterResult.indexOfQuantity;
|
|
quantity.setToBigDecimal((BigDecimal) outMicros.mixedMeasures.get(outMicros.indexOfQuantity).getNumber());
|
|
}
|
|
|
|
/**
|
|
* Returns the list of possible output units, i.e. the full set of
|
|
* preferences, for the localized, usage-specific unit preferences.
|
|
* <p>
|
|
* The returned pointer should be valid for the lifetime of the
|
|
* UsagePrefsHandler instance.
|
|
*/
|
|
public List<MeasureUnit> getOutputUnits() {
|
|
return fUnitsRouter.getOutputUnits();
|
|
}
|
|
|
|
/**
|
|
* Obtains the appropriate output value, MeasureUnit and
|
|
* rounding/precision behaviour from the UnitsRouter.
|
|
* <p>
|
|
* The output unit is passed on to the LongNameHandler via
|
|
* micros.outputUnit.
|
|
*/
|
|
@Override
|
|
public MicroProps processQuantity(DecimalQuantity quantity) {
|
|
MicroProps micros = this.fParent.processQuantity(quantity);
|
|
|
|
quantity.roundToInfinity(); // Enables toDouble
|
|
final UnitsRouter.RouteResult routed = fUnitsRouter.route(quantity.toBigDecimal(), micros);
|
|
micros.outputUnit = routed.outputUnit.build();
|
|
UsagePrefsHandler.mixedMeasuresToMicros(routed.complexConverterResult, quantity, micros);
|
|
return micros;
|
|
}
|
|
}
|