import { getDeviceInfo } from '@zos/device' import { push } from '@zos/router' import { createWidget, widget, align, text_style } from '@zos/ui' //Renderer module for TOTPs page const { width, height } = getDeviceInfo() const buttonWidth = width - width / 20 //Width of container const buttonHeight = height / 4 //Height of container const containerColor = 0x303030 //Color of container const containerRadius = 20 //Corner radius of container const textColor = 0xa0a0a0 //Color of TOTP description text const textSize = 24 //Size of TOTP description text const statusBarPading = 65 /** Function for render box container for TOTP values * * @param {number} position position offset of container * @param {string} issuer issuer of TOTP * @param {string} client client of TOTP */ export function RenderTOTPContainer(position, issuer, client) { const yPos = getYPos(position) createWidget(widget.FILL_RECT, { x: width / 2 - buttonWidth / 2, y: yPos, w: buttonWidth, h: buttonHeight, color: containerColor, radius: containerRadius }) createWidget(widget.TEXT, { x: 0 + (width - buttonWidth) / 2, y: yPos + 10, w: width - (width - buttonWidth), h: 26, color: textColor, text_size: textSize, align_h: align.CENTER_H, align_v: align.CENTER_V, text_style: text_style.NONE, text: issuer + ': ' + client }) } /** Render OTP Value on container * * @param {number} position position offset of container * @param {string} otpValue value to display * @returns widget with OTP */ export function RenderOTPValue(position, otpValue) { const yPos = getYPos(position) return createWidget(widget.TEXT, { x: 0, y: yPos + 50, w: width, h: 40, color: 0xffffff, text_size: 40, align_h: align.CENTER_H, align_v: align.CENTER_V, text_style: text_style.NONE, text: otpValue }) } /** Render expire bar * * @param {} position position offset of container * @param {*} createdTime UNIX epoch time of creation * @param {*} fetchTime time in seconds to fetch value * @returns widget with bar */ export function RenderExpireBar(position, createdTime, fetchTime) { const yPos = getYPos(position) const expireDif = Math.abs((((Date.now() - createdTime) / 1000) / fetchTime) - 1) return createWidget(widget.ARC, { x: buttonWidth - 50, y: yPos + 52, w: 40, h: 40, line_width: 5, color: expireDif > 0.25 ? 0x1ca9c9 : 0xfa0404, start_angle: -90, end_angle: (expireDif * 360) - 90, text: expireDif }); } /** Function for render 'Add' button on center of screen * * @param {string} pagePath destination to page onClick ex: 'page/index' */ export function RenderAddButton(pagePath) { createWidget(widget.BUTTON, { x: width / 2 - 40, y: height / 2 - 20, w: 80, h: 80, text: '+', radius: 50, text_size: 40, normal_color: 0x303030, press_color: 0x181c18, click_func: () => { push({ url: pagePath }) } }) } function getYPos(position) { return position * (buttonHeight + 10) + statusBarPading }