You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.3 KiB
C#

using System.Threading;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
using WalletConnectUnity.Core.Networking;
using WalletConnectUnity.UI;
namespace WalletConnectUnity.Modal.Views
{
public abstract class ApprovalViewPageBase : WCTabPage
{
[SerializeField] private Image _walletIconImage;
[SerializeField] private Button _copyLinkButton;
[SerializeField] private Sprite _fallbackWalletIconSprite;
private RemoteSprite<Image> _walletIconRemoteSprite;
protected string Uri { get; private set; }
protected WCModal Modal { get; private set; }
protected Wallet Wallet { get; private set; }
public virtual async Task InitializeAsync(
Wallet wallet,
WCModal modal,
RemoteSprite<Image> remoteWalletIcon,
CancellationToken cancellationToken)
{
Modal = modal;
Wallet = wallet;
var connectedData = await WalletConnectModal.ConnectionController.GetConnectionDataAsync(cancellationToken);
Uri = connectedData.Uri;
if (remoteWalletIcon != null)
{
_walletIconRemoteSprite = remoteWalletIcon;
_walletIconRemoteSprite.SubscribeImage(_walletIconImage);
}
else
{
_walletIconImage.sprite = _fallbackWalletIconSprite;
}
EnableCopyLink();
}
public override void Disable()
{
base.Disable();
DisableCopyLink();
_walletIconRemoteSprite?.UnsubscribeImage(_walletIconImage);
}
private void EnableCopyLink()
{
if (_copyLinkButton.gameObject.activeSelf) return;
_copyLinkButton.gameObject.SetActive(true);
_copyLinkButton.onClick.AddListener(OnCopyToClipboardClicked);
}
private void DisableCopyLink()
{
if (!_copyLinkButton.gameObject.activeSelf) return;
_copyLinkButton.gameObject.SetActive(false);
_copyLinkButton.onClick.RemoveListener(OnCopyToClipboardClicked);
}
private void OnCopyToClipboardClicked()
{
Modal.Header.Snackbar.Show(WCSnackbar.Type.Success, "Link copied");
GUIUtility.systemCopyBuffer = Uri;
}
}
}