codec2_talkie/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/group/StationHolder.java

82 wiersze
3.6 KiB
Java
Czysty Zwykły widok Historia

2022-07-24 06:58:45 +00:00
package com.radio.codec2talkie.storage.log.group;
2022-07-20 21:32:26 +00:00
2022-07-24 11:04:32 +00:00
import android.annotation.SuppressLint;
import android.content.Context;
2022-07-26 12:20:13 +00:00
import android.graphics.Bitmap;
2022-07-24 11:04:32 +00:00
import android.location.Location;
import android.location.LocationManager;
2022-07-26 12:20:13 +00:00
import android.util.Log;
2022-07-20 21:32:26 +00:00
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
2022-07-26 12:20:13 +00:00
import android.widget.ImageView;
2022-07-20 21:32:26 +00:00
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import com.radio.codec2talkie.R;
2022-07-26 12:20:13 +00:00
import com.radio.codec2talkie.protocol.aprs.tools.AprsSymbolTable;
2022-07-24 11:04:32 +00:00
import com.radio.codec2talkie.protocol.position.Position;
2022-07-24 09:18:09 +00:00
import com.radio.codec2talkie.tools.UnitTools;
import java.util.Locale;
2022-07-20 21:32:26 +00:00
2022-09-03 09:01:45 +00:00
public class StationHolder extends RecyclerView.ViewHolder {
2022-07-20 21:32:26 +00:00
2022-07-26 12:20:13 +00:00
private static final String TAG = RecyclerView.class.getSimpleName();
2022-07-20 21:32:26 +00:00
private final TextView _logItemViewTitle;
2022-07-24 11:04:32 +00:00
private final TextView _logItemViewDistance;
2022-07-20 21:32:26 +00:00
private final TextView _logItemViewMessage;
2022-07-26 12:20:13 +00:00
private final ImageView _symbolIcon;
2022-07-24 11:04:32 +00:00
private final LocationManager _locationManager;
2022-07-26 12:20:13 +00:00
private final AprsSymbolTable _symbolTable;
2022-07-20 21:32:26 +00:00
2022-09-03 09:01:45 +00:00
private StationHolder(View itemView) {
2022-07-20 21:32:26 +00:00
super(itemView);
_logItemViewTitle = itemView.findViewById(R.id.log_view_group_item_title);
2022-07-24 11:04:32 +00:00
_logItemViewDistance = itemView.findViewById(R.id.log_view_group_item_distance);
2022-07-20 21:32:26 +00:00
_logItemViewMessage = itemView.findViewById(R.id.log_view_group_item_message);
2022-07-26 12:20:13 +00:00
_symbolIcon = itemView.findViewById(R.id.log_view_group_item_icon);
_symbolTable = AprsSymbolTable.getInstance(itemView.getContext());
2022-07-24 11:04:32 +00:00
_locationManager = (LocationManager) itemView.getContext().getSystemService(Context.LOCATION_SERVICE);
2022-07-20 21:32:26 +00:00
}
2022-09-03 09:01:45 +00:00
public void bind(Station group) {
2022-07-24 11:04:32 +00:00
@SuppressLint("MissingPermission") Location loc = _locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (loc == null) {
2022-07-26 13:00:59 +00:00
_logItemViewDistance.setText("");
} else {
double distanceKm = Position.distanceTo(loc.getLatitude(), loc.getLongitude(), loc.getAltitude(),
group.getLatitude(), group.getLongitude(), group.getAltitudeMeters()) / 1000.0;
String bearing = Position.bearing(loc.getLatitude(), loc.getLongitude(), group.getLatitude(), group.getLongitude());
_logItemViewDistance.setText(String.format(Locale.US, "%s %.1f km", bearing, distanceKm));
}
2022-07-24 09:18:09 +00:00
_logItemViewTitle.setText(String.format(Locale.US, "%s",
group.getSrcCallsign()));
2022-08-21 11:07:26 +00:00
String status = String.format(Locale.US, "%s %f %f %03d° %03dkm/h %04dm %s %s",
2022-07-24 09:18:09 +00:00
group.getMaidenHead(),
group.getLatitude(),
group.getLongitude(),
(int)group.getBearingDegrees(),
UnitTools.metersPerSecondToKilometersPerHour((int)group.getSpeedMetersPerSecond()),
(int)group.getAltitudeMeters(),
group.getStatus(),
2022-08-21 11:07:26 +00:00
group.getComment());
_logItemViewMessage.setText(group.getMaidenHead() == null ? group.getLogLine() : status);
2022-07-26 12:20:13 +00:00
String symbol = group.getSymbolCode();
2022-08-21 09:32:38 +00:00
Bitmap iconBitmap = _symbolTable.bitmapFromSymbol(symbol == null ? "/." : symbol, false);
2022-07-26 12:20:13 +00:00
if (iconBitmap == null) {
2022-08-21 11:07:26 +00:00
Log.e(TAG, "Cannot load bitmap for " + symbol);
2022-07-26 12:20:13 +00:00
} else {
_symbolIcon.setImageBitmap(iconBitmap);
}
2022-07-20 21:32:26 +00:00
}
2022-09-03 09:01:45 +00:00
static StationHolder create(ViewGroup parent) {
2022-07-20 21:32:26 +00:00
View view = LayoutInflater.from(parent.getContext()).inflate(
R.layout.activity_log_view_group_item, parent, false);
2022-09-03 09:01:45 +00:00
return new StationHolder(view);
2022-07-20 21:32:26 +00:00
}
}