92 lines
2.7 KiB
C#
92 lines
2.7 KiB
C#
using Com.Lvcheng.Lock.Shared.Nfc.Kmp;
|
|
using Java.Lang;
|
|
using NFCLockDemoV2.ViewModels;
|
|
using Math = System.Math;
|
|
|
|
namespace NFCLockDemoV2;
|
|
|
|
public class AndroidNfcCallBack : Java.Lang.Object, IAndroidNFCCallbacks
|
|
{
|
|
private readonly MainViewModel mainViewModel;
|
|
private long startTimestamp;
|
|
|
|
public AndroidNfcCallBack(MainViewModel mainViewModel)
|
|
{
|
|
this.mainViewModel = mainViewModel;
|
|
}
|
|
|
|
public void Charging(Result result, Integer? p1)
|
|
{
|
|
startTimestamp = System.Diagnostics.Stopwatch.GetTimestamp();
|
|
if (result == Result.Ok)
|
|
{
|
|
var level = p1?.IntValue() ?? 0;
|
|
string levelText = level.ToString();
|
|
|
|
var progress = Math.Min(level, 100) / 3 * 2;
|
|
mainViewModel.ArcProgress = progress;
|
|
mainViewModel.UpdateMessage("充电中(" + levelText + "%)");
|
|
}
|
|
else if (result == Result.Unauthorized)
|
|
{
|
|
mainViewModel.ArcProgress = 0;
|
|
mainViewModel.UpdateMessage("验证失败");
|
|
}
|
|
else
|
|
{
|
|
mainViewModel.UpdateMessage("充电失败");
|
|
}
|
|
}
|
|
|
|
public void Controlling(Result result, Integer? p1, Ctrl ctrl)
|
|
{
|
|
var operationType = ctrl == Ctrl.Lock ? "关锁" : "开锁";
|
|
if (result == Result.Ok)
|
|
{
|
|
mainViewModel.OperationElapsed = FormatElapsed(startTimestamp);
|
|
mainViewModel.ArcProgress = 100;
|
|
mainViewModel.UpdateMessage($"{operationType}成功");
|
|
|
|
} else if (result == Result.Unauthorized)
|
|
{
|
|
mainViewModel.ArcProgress = 0;
|
|
mainViewModel.UpdateMessage($"验证失败");
|
|
}
|
|
else
|
|
{
|
|
mainViewModel.ArcProgress = 0;
|
|
mainViewModel.UpdateMessage($"{operationType}失败");
|
|
}
|
|
}
|
|
|
|
public void CustomData(Result result, CustomDataConfig config, byte[]? data)
|
|
{
|
|
}
|
|
|
|
public void Discovered(long id, bool isNew, Integer? p2)
|
|
{
|
|
// 更新设备信息
|
|
mainViewModel.DeviceId = id.ToString();
|
|
mainViewModel.DeviceRssi = p2?.ToString() ?? "--";
|
|
}
|
|
|
|
public void Finished()
|
|
{
|
|
startTimestamp = 0;
|
|
mainViewModel.DeviceId = "--";
|
|
mainViewModel.DeviceRssi = "--";
|
|
mainViewModel.DeviceStatus = "NFC操作完成";
|
|
mainViewModel.Operation = null;
|
|
mainViewModel.ArcProgress = 0;
|
|
}
|
|
|
|
public void SetKey(Result result, string password)
|
|
{
|
|
}
|
|
|
|
private static string FormatElapsed(long startTimestamp)
|
|
{
|
|
double elapsedMs = (System.Diagnostics.Stopwatch.GetTimestamp() - startTimestamp) * 1000.0 / System.Diagnostics.Stopwatch.Frequency;
|
|
return elapsedMs >= 1000 ? $"{elapsedMs / 1000.0:F2}s" : $"{elapsedMs:F0}ms";
|
|
}
|
|
} |