in car_app_library/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/renderer/CarHardwareRenderer.java [307:505]
public void renderFrame(@NonNull Canvas canvas, @Nullable Rect visibleArea,
@Nullable Rect stableArea) {
if (stableArea != null) {
if (stableArea.isEmpty()) {
// No inset set. The entire area is considered safe to draw.
stableArea.set(0, 0, canvas.getWidth() - 1, canvas.getHeight() - 1);
}
int height = Math.min(stableArea.height() / 8, MAX_FONT_SIZE);
int updatedSize = height - ROW_SPACING;
mCarInfoPaint.setTextSize(updatedSize);
canvas.drawRect(stableArea, mCarInfoPaint);
Paint.FontMetrics fm = mCarInfoPaint.getFontMetrics();
float verticalPos = stableArea.top - fm.ascent;
// Prepare text for Toll card status
StringBuilder info = new StringBuilder();
if (!mHasTollCardPermission) {
info.append("No TollCard Permission.");
} else if (mTollCard == null) {
info.append("Fetching Toll information.");
} else {
if (mTollCard.getCardState().getStatus() != CarValue.STATUS_SUCCESS) {
info.append("Toll card state: N/A. ");
} else {
info.append("Toll card state: ");
info.append(mTollCard.getCardState().getValue());
}
}
canvas.drawText(info.toString(), LEFT_MARGIN, verticalPos, mCarInfoPaint);
verticalPos += height;
// Prepare text for Energy Level
info = new StringBuilder();
if (!mHasEnergyLevelPermission) {
info.append("No EnergyLevel Permission.");
} else if (mEnergyLevel == null) {
info.append("Fetching Energy Level.");
} else {
if (mEnergyLevel.getEnergyIsLow().getStatus() != CarValue.STATUS_SUCCESS) {
info.append("Low energy: N/A. ");
} else {
info.append("Low energy: ");
info.append(mEnergyLevel.getEnergyIsLow().getValue());
info.append(" ");
}
if (mEnergyLevel.getRangeRemainingMeters().getStatus() != CarValue.STATUS_SUCCESS) {
info.append("Range: N/A. ");
} else {
info.append("Range: ");
info.append(mEnergyLevel.getRangeRemainingMeters().getValue());
info.append(" m. ");
}
if (mEnergyLevel.getFuelPercent().getStatus() != CarValue.STATUS_SUCCESS) {
info.append("Fuel: N/A. ");
} else {
info.append("Fuel: ");
info.append(mEnergyLevel.getFuelPercent().getValue());
info.append("% ");
}
if (mEnergyLevel.getBatteryPercent().getStatus() != CarValue.STATUS_SUCCESS) {
info.append("Battery: N/A. ");
} else {
info.append("Battery: ");
info.append(mEnergyLevel.getBatteryPercent().getValue());
info.append("% ");
}
}
canvas.drawText(info.toString(), LEFT_MARGIN, verticalPos, mCarInfoPaint);
verticalPos += height;
// Prepare text for Speed
info = new StringBuilder();
if (!mHasSpeedPermission) {
info.append("No Speed Permission.");
} else if (mSpeed == null) {
info.append("Fetching Speed.");
} else {
if (mSpeed.getDisplaySpeedMetersPerSecond().getStatus()
!= CarValue.STATUS_SUCCESS) {
info.append("Display Speed: N/A. ");
} else {
info.append("Display Speed: ");
info.append(mSpeed.getDisplaySpeedMetersPerSecond().getValue());
info.append(" m/s. ");
}
if (mSpeed.getRawSpeedMetersPerSecond().getStatus() != CarValue.STATUS_SUCCESS) {
info.append("Raw Speed: N/A. ");
} else {
info.append("Raw Speed: ");
info.append(mSpeed.getRawSpeedMetersPerSecond().getValue());
info.append(" m/s. ");
}
if (mSpeed.getSpeedDisplayUnit().getStatus() != CarValue.STATUS_SUCCESS) {
info.append("Unit: N/A.");
} else {
info.append("Unit: ");
info.append(mSpeed.getSpeedDisplayUnit().getValue());
info.append(" ");
}
}
canvas.drawText(info.toString(), LEFT_MARGIN, verticalPos, mCarInfoPaint);
verticalPos += height;
// Prepare text for Odometer
info = new StringBuilder();
if (!mHasMileagePermission) {
info.append("No Mileage Permission.");
} else if (mMileage == null) {
info.append("Fetching mileage.");
} else {
if (mMileage.getOdometerMeters().getStatus() != CarValue.STATUS_SUCCESS) {
info.append("Odometer: N/A. ");
} else {
info.append("Odometer: ");
info.append(mMileage.getOdometerMeters().getValue());
info.append(" m. ");
}
if (mMileage.getDistanceDisplayUnit().getStatus() != CarValue.STATUS_SUCCESS) {
info.append("Unit: N/A.");
} else {
info.append("Unit: ");
info.append(mMileage.getDistanceDisplayUnit().getValue());
info.append(" ");
}
}
canvas.drawText(info.toString(), LEFT_MARGIN, verticalPos, mCarInfoPaint);
verticalPos += height;
// Prepare text for Accelerometer
info = new StringBuilder();
if (!mHasAccelerometerPermission) {
info.append("No Accelerometer Permission.");
} else if (mAccelerometer == null) {
info.append("Fetching accelerometer");
} else {
if (mAccelerometer.getForces().getStatus() != CarValue.STATUS_SUCCESS) {
info.append("Accelerometer N/A.");
} else {
info.append("Accelerometer: ");
appendFloatList(info, mAccelerometer.getForces().getValue());
}
}
canvas.drawText(info.toString(), LEFT_MARGIN, verticalPos, mCarInfoPaint);
verticalPos += height;
// Prepare text for Gyroscope
info = new StringBuilder();
if (!mHasGyroscopePermission) {
info.append("No Gyroscope Permission.");
} else if (mGyroscope == null) {
info.append("Fetching gyroscope");
} else {
if (mGyroscope.getRotations().getStatus() != CarValue.STATUS_SUCCESS) {
info.append("Gyroscope N/A.");
} else {
info.append("Gyroscope: ");
appendFloatList(info, mGyroscope.getRotations().getValue());
}
}
canvas.drawText(info.toString(), LEFT_MARGIN, verticalPos, mCarInfoPaint);
verticalPos += height;
// Prepare text for Compass
info = new StringBuilder();
if (!mHasCompassPermission) {
info.append("No Compass Permission.");
} else if (mCompass == null) {
info.append("Fetching compass");
} else {
if (mCompass.getOrientations().getStatus() != CarValue.STATUS_SUCCESS) {
info.append("Compass N/A.");
} else {
info.append("Compass: ");
appendFloatList(info, mCompass.getOrientations().getValue());
}
}
canvas.drawText(info.toString(), LEFT_MARGIN, verticalPos, mCarInfoPaint);
verticalPos += height;
// Prepare text for Location
info = new StringBuilder();
if (!mHasCarHardwareLocationPermission) {
info.append("No CarHardwareLocation Permission.");
} else if (mCarHardwareLocation == null) {
info.append("Fetching location");
} else {
if (mCarHardwareLocation.getLocation().getStatus() != CarValue.STATUS_SUCCESS) {
info.append("Car Hardware Location N/A");
} else {
info.append("Car Hardware location: ");
info.append(mCarHardwareLocation.getLocation().getValue().toString());
}
}
canvas.drawText(info.toString(), LEFT_MARGIN, verticalPos, mCarInfoPaint);
}
}