Sensorki – wskaźnik baterii – #4

This entry is part 5 of 10 in the series Sensorki

Jak tak patrzę na to ile rzeczy wyświetlam na kafelku, to zaczyna mnie to przytłaczać. Wskaźnik baterii jest potrzebny tylko po to, żeby wiedzieć, czy trzeba ją już podładować. Trzeba to zmodyfikować żeby sama dała znać.

Na początek usuwam wskazania baterii z kafelka, a ikonkę przenoszę na belkę z nazwą pomieszczenia. Powiększam ją żeby była lepiej widoczna i podnoszę ponad belkę żeby ikonka wyszła na wierzch.

<ImageView
android:id="@+id/battery_icon"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginEnd="4dp"
android:contentDescription="@string/battery_icon"
android:elevation="8dp"
android:src="@drawable/ic_battery"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
recycler_view_item

Klasa sensorka dostaje nową metodę getBatteryColor(), która zwróci kolor na jaki ma się zaświecić ikonka baterii w zależności od napięcia. Wartości są dobrane na podstawie obserwacji 😉 Druga metoda batteryNeedRecharge() powie czy bateria wymaga naładowania.

public int getBatteryColor() {
if (this.vbat > GOOD_BATTERY_VOLTAGE) {
return Color.parseColor(GREEN);
}
if (this.vbat > CRITICAL_BATTERY_VOLTAGE + VOLTAGE_BUFFOR) {
return Color.YELLOW;
}
return Color.RED;
}
public boolean batteryNeedRecharge() {
return this.vbat <= CRITICAL_BATTERY_VOLTAGE;
}
view raw Sensor.java hosted with ❤ by GitHub
getBatteryColor() & batteryNeedRecharge()

I teraz w klasie adaptera zamiast ustawiać w textView wartości napięcia ustawiam kolor ikonce, a żeby nie zgubić informacji o tym jakie są dokładne wskazania dorzucam onClickListener i po kliknięciu pokaże się Toast z tekstem, który poprzednio był wyświetlany na kafelku.

holder.battery.setColorFilter(sensor.getBatteryColor());
holder.battery.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), sensor.getVbatVreg(), Toast.LENGTH_SHORT).show();
}
});
batteryColor & onClickListener

Tak prezentuje się aplikacja po zmianach. Zielony kolor specjalnie niezbyt wyróżnia się z tła, bo jeśli nic nie trzeba robić z baterią to po co świecić.

Ale świecenie na ekranie to nie wszystko co można zrobić. Zrobię powiadomienia żeby nic mi nie umknęło.

private void checkBatteryState(List<Sensor> sensors) {
for (Sensor sensor : sensors) {
if (sensor.batteryNeedRecharge()) {
sendNotification(sensor);
}
}
}
private void sendNotification(Sensor sensor) {
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_battery)
.setContentTitle(getString(R.string.notification_title))
.setContentText(sensor.getLabel() + getString(R.string.notification_text))
.setAutoCancel(true)
.setOngoing(false);
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify((int) sensor.getId(), mBuilder.build());
}
powiadomienia

Screen prosto z emulatora 😉 

A kod jak zwykle tu: github

Series Navigation<< Sensorki – material design – #3Sensorki – widget – #5 >>

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

This site uses Akismet to reduce spam. Learn how your comment data is processed.