190 lines
7.1 KiB
C#
190 lines
7.1 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using Kill.UI.Components;
|
|
using Kill.Managers;
|
|
using UnityEngine.UI;
|
|
using System;
|
|
using Kill.Network;
|
|
using Kill.Bluetooth;
|
|
using Kill.Core;
|
|
using System.Threading.Tasks;
|
|
namespace Kill.UI.Pages
|
|
{
|
|
public class DeviceSharedUserPage : MonoBehaviour
|
|
{
|
|
public Transform sharedUserListContainer;
|
|
public GameObject sharedUserItemPrefab;
|
|
public WindowTipCtrl stopShareTip;
|
|
public Button backButton;
|
|
public List<SharedUserInfo> sharedUsers = new List<SharedUserInfo>();
|
|
List<GameObject> sharedUserItems = new List<GameObject>();
|
|
public string shareTimeLanguageKey = "100211";
|
|
string shareTimeString = "";
|
|
public GameObject noTip;
|
|
|
|
// Start is called before the first frame update
|
|
void Start()
|
|
{
|
|
shareTimeString = LanguageManager.Instance.GetLanguage(shareTimeLanguageKey);
|
|
UIManager.Instance.RegisterBackAction(Back);
|
|
backButton.onClick.RemoveAllListeners();
|
|
backButton.onClick.AddListener(Back);
|
|
stopShareTip.Init(SureStopShare, () => { selectedSharedUserIndex = -1; stopShareTip.gameObject.SetActive(false); });
|
|
LoadSharedUsersAsync();
|
|
}
|
|
public async Task LoadSharedUsersAsync()
|
|
{
|
|
LoadingUI.Show();
|
|
|
|
var response = await NetworkCtrl.Instance.Get<ShareUserListResponse>("/api/v1/device/shared-users?mac=" + DataManager.Instance.selectedDevice.ble_mac);
|
|
|
|
LoadingUI.Hide();
|
|
|
|
ResponseCodeHandler.HandleResponse(response,
|
|
onSuccess: (data) =>
|
|
{
|
|
sharedUsers = data.data.list;
|
|
if (sharedUsers == null)
|
|
{
|
|
sharedUsers = new List<SharedUserInfo>();
|
|
}
|
|
InitUserList();
|
|
},
|
|
onError: (code, msg) =>
|
|
{
|
|
Debug.LogError("获取共享用户列表失败: " + msg);
|
|
}
|
|
);
|
|
|
|
}
|
|
public void InitUserList()
|
|
{
|
|
noTip.SetActive(false);
|
|
if (sharedUserItems != null)
|
|
{
|
|
foreach (var item in sharedUserItems)
|
|
{
|
|
Destroy(item);
|
|
}
|
|
sharedUserItems.Clear();
|
|
sharedUserItems = new List<GameObject>();
|
|
for (int i = 0; i < sharedUsers.Count; i++)
|
|
{
|
|
var user = sharedUsers[i];
|
|
var item = Instantiate(sharedUserItemPrefab, sharedUserListContainer);
|
|
item.SetActive(true);
|
|
item.transform.Find("昵称").GetComponent<Text>().text = user.user_name;
|
|
item.transform.Find("分享时间").GetComponent<Text>().text = shareTimeString + user.share_time.ToString("yyyy-MM-dd HH:mm");
|
|
Image image = item.transform.Find("头像遮罩").Find("头像").GetComponent<Image>();
|
|
if (string.IsNullOrEmpty(user.avatar))
|
|
{
|
|
Debug.Log("用户 " + user.user_name + " 没有头像,使用默认头像");
|
|
image.gameObject.SetActive(false);
|
|
image.GetComponentInParent<Mask>().showMaskGraphic = true;
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("用户 " + user.user_name + " 有头像,加载头像");
|
|
image.gameObject.SetActive(true);
|
|
image.GetComponentInParent<Mask>().showMaskGraphic = false;
|
|
NetworkCtrl.Instance.LoadImageToUIImageAsync(user.avatar, image);
|
|
}
|
|
int index = i;
|
|
item.transform.Find("删除").GetComponent<Button>().onClick.AddListener(() => StopShareByOwner(index));
|
|
|
|
sharedUserItems.Add(item);
|
|
}
|
|
if (sharedUserItems.Count > 0)
|
|
noTip.SetActive(false);
|
|
else
|
|
noTip.SetActive(true);
|
|
}
|
|
else
|
|
noTip.SetActive(true);
|
|
}
|
|
public void Back()
|
|
{
|
|
UIManager.Instance.RegisterBackAction(GetComponentInParent<DeviceInfoPage>().Back);
|
|
Destroy(gameObject);
|
|
}
|
|
int selectedSharedUserIndex = -1;
|
|
public void StopShareByOwner(int index)
|
|
{
|
|
selectedSharedUserIndex = index;
|
|
stopShareTip.gameObject.SetActive(true);
|
|
|
|
|
|
}
|
|
public void SureStopShare()
|
|
{
|
|
if (selectedSharedUserIndex >= 0 && selectedSharedUserIndex < sharedUsers.Count)
|
|
{
|
|
CancelShareAsync(sharedUsers[selectedSharedUserIndex].user_id);
|
|
}
|
|
stopShareTip.gameObject.SetActive(false);
|
|
}
|
|
public void RemoveUserAndRefresh()
|
|
{
|
|
if (selectedSharedUserIndex >= 0 && selectedSharedUserIndex < sharedUsers.Count)
|
|
{
|
|
sharedUsers.RemoveAt(selectedSharedUserIndex);
|
|
InitUserList();
|
|
}
|
|
}
|
|
public async Task CancelShareAsync(string targetUserId)
|
|
{
|
|
|
|
// 调用后端接口共享设备
|
|
LoadingUI.Show();
|
|
|
|
var requestData = new ShareDeviceRequest
|
|
{
|
|
device_sn = DataManager.Instance.selectedDevice.ble_mac,
|
|
target_user_id = targetUserId,
|
|
owner_id = DataManager.Instance.userInfo.id
|
|
};
|
|
try
|
|
{
|
|
var response = await NetworkCtrl.Instance.Post<NoDataResponse>("/api/v1/device/unshare", requestData);
|
|
|
|
ResponseCodeHandler.HandleResponse(response,
|
|
onSuccess: (data) =>
|
|
{
|
|
Debug.Log("取消设备共享成功");
|
|
ToastUI.Show("100206");
|
|
if (BluetoothManager.Instance.IsConnected)
|
|
{
|
|
BLECommunicationManager.Instance.UnregisterUser(targetUserId, (unregisterSuccess) =>
|
|
{
|
|
Loom.QueueOnMainThread(() =>
|
|
{
|
|
LoadingUI.Hide();
|
|
RemoveUserAndRefresh();
|
|
});
|
|
});
|
|
}
|
|
else
|
|
{
|
|
LoadingUI.Hide();
|
|
RemoveUserAndRefresh();
|
|
}
|
|
},
|
|
onError: (code, msg) =>
|
|
{
|
|
Debug.LogError($"取消设备共享失败: {code} - {msg}");
|
|
ToastUI.ShowText(code.ToString());
|
|
}
|
|
);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LoadingUI.Hide();
|
|
Debug.LogError("取消设备共享失败: " + ex.Message);
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|