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.
97 lines
3.4 KiB
C#
97 lines
3.4 KiB
C#
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using WalletConnectUnity.Core.Networking;
|
|
using WalletConnectUnity.Core.Utils;
|
|
using WalletConnectUnity.UI;
|
|
using DeviceType = WalletConnectUnity.Core.Utils.DeviceType;
|
|
|
|
namespace WalletConnectUnity.Modal.Views
|
|
{
|
|
public class QRCodePage : ApprovalViewPageBase
|
|
{
|
|
[SerializeField] private RectTransform _viewRoot;
|
|
|
|
[Space]
|
|
[SerializeField] private GameObject _walletIconRoot;
|
|
|
|
[SerializeField] private GameObject _fallbackWalletIconRoot;
|
|
|
|
[Space]
|
|
[SerializeField] private RectTransform _qrCodeRoot;
|
|
|
|
[SerializeField] private RawImage _qrCodeRawImage;
|
|
[SerializeField] private float _qrCodePadding = 20f;
|
|
|
|
public override async Task InitializeAsync(
|
|
Wallet wallet,
|
|
WCModal modal,
|
|
RemoteSprite<Image> remoteWalletIcon,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
if (DeviceUtils.GetDeviceType() is DeviceType.Phone)
|
|
{
|
|
// On phones don't show any icons above the QR code may be too small
|
|
_walletIconRoot.SetActive(false);
|
|
_fallbackWalletIconRoot.SetActive(false);
|
|
}
|
|
else
|
|
{
|
|
var validWallet = remoteWalletIcon != null;
|
|
_walletIconRoot.SetActive(validWallet);
|
|
_fallbackWalletIconRoot.SetActive(!validWallet);
|
|
}
|
|
|
|
await base.InitializeAsync(wallet, modal, remoteWalletIcon, cancellationToken);
|
|
var texture = QRCode.EncodeTexture(Uri);
|
|
|
|
WCLoadingAnimator.Instance.Unsubscribe(_qrCodeRawImage);
|
|
|
|
_qrCodeRawImage.texture = texture;
|
|
}
|
|
|
|
public override float GetPageHeight()
|
|
{
|
|
ResizeQrCode();
|
|
return base.GetPageHeight();
|
|
}
|
|
|
|
public void ResizeQrCode()
|
|
{
|
|
var oldQrCodeHeight = _qrCodeRoot.sizeDelta.y;
|
|
Vector2 newSizeDelta;
|
|
|
|
if (DeviceUtils.GetDeviceType() is DeviceType.Phone
|
|
&& Screen.orientation is ScreenOrientation.LandscapeLeft or ScreenOrientation.LandscapeRight)
|
|
{
|
|
var screenHeight = Modal.RootRectTransform.sizeDelta.y;
|
|
var workingHeight = screenHeight
|
|
* Modal.MobileMaxHeightPercent
|
|
- Modal.Header.RectTransform.sizeDelta.y;
|
|
|
|
var qrCodeSize = workingHeight - _qrCodePadding * 2;
|
|
qrCodeSize *= 0.85f; // leave some space for the other elements to hint at scrolling
|
|
newSizeDelta = new Vector2(qrCodeSize, qrCodeSize);
|
|
}
|
|
else
|
|
{
|
|
// Stretch the QR code to the full width of the view, but keep the aspect ratio and padding
|
|
var qrCodeSize = _viewRoot.rect.width - _qrCodePadding * 2;
|
|
newSizeDelta = new Vector2(qrCodeSize, qrCodeSize);
|
|
}
|
|
|
|
_qrCodeRoot.sizeDelta = newSizeDelta;
|
|
|
|
// Resize the container to fit the QR code
|
|
var heightDelta = newSizeDelta.y - oldQrCodeHeight;
|
|
(transform as RectTransform)!.sizeDelta += new Vector2(0, heightDelta);
|
|
}
|
|
|
|
public override void Disable()
|
|
{
|
|
base.Disable();
|
|
_qrCodeRawImage.texture = null;
|
|
}
|
|
}
|
|
} |