diff -Nru ukui-biometric-manager-4.10.0.0/debian/changelog ukui-biometric-manager-4.10.0.0/debian/changelog
--- ukui-biometric-manager-4.10.0.0/debian/changelog	2024-08-19 17:44:17.000000000 +0800
+++ ukui-biometric-manager-4.10.0.0/debian/changelog	2025-01-21 11:22:30.000000000 +0800
@@ -1,3 +1,21 @@
+ukui-biometric-manager (4.10.0.0-ok4.7) nile; urgency=medium
+
+  * BUG号:无
+  * 需求号:无
+  * 其他改动说明:v11代码同源
+  * 其他改动影响域:无,commit id:
+
+ -- liudun <liudun@kylinos.cn>  Tue, 21 Jan 2025 11:22:30 +0800
+
+ukui-biometric-manager (4.10.0.0-ok4.6) nile; urgency=medium
+
+  * BUG号:无
+  * 需求号:无
+  * 其他改动说明:使用到控制面板libukcc中的控件适配sdk接口
+  * 其他改动影响域:无,commit id:
+
+ -- liudun <liudun@kylinos.cn>  Fri, 17 Jan 2025 09:47:19 +0800
+
 ukui-biometric-manager (4.10.0.0-ok4.5) nile; urgency=medium
 
   * BUG号:#IAAT5S【中】【gg-维哈柯】【生物特征管理工具】【设备与权限】【维吾尔语】权限-生物设备下方的文案显示不全,按钮位置过于靠近边框;鼠标悬浮在生物设备-设备的小叹号上,设备信息悬浮框文案布局不完全对
diff -Nru ukui-biometric-manager-4.10.0.0/debian/patches/0022-Translated-using-Weblate-Mongolian.patch ukui-biometric-manager-4.10.0.0/debian/patches/0022-Translated-using-Weblate-Mongolian.patch
--- ukui-biometric-manager-4.10.0.0/debian/patches/0022-Translated-using-Weblate-Mongolian.patch	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-manager-4.10.0.0/debian/patches/0022-Translated-using-Weblate-Mongolian.patch	2025-01-21 11:22:30.000000000 +0800
@@ -0,0 +1,34 @@
+From: KevinDuan <duankaiwen@kylinos.cn>
+Date: Tue, 27 Aug 2024 10:57:11 +0000
+Subject: Translated using Weblate (Mongolian)
+
+Currently translated at 100.0% (176 of 176 strings)
+
+Translation: openkylin-nile-new/ukui-biometric-manager
+Translate-URL: http://weblate.openkylin.top/projects/openkylin-nile-new/ukui-biometric-manager/mn/
+---
+ biometric-manager/i18n_ts/mn.ts | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/biometric-manager/i18n_ts/mn.ts b/biometric-manager/i18n_ts/mn.ts
+index f4944a9..f4d4feb 100644
+--- a/biometric-manager/i18n_ts/mn.ts
++++ b/biometric-manager/i18n_ts/mn.ts
+@@ -342,7 +342,7 @@ p, li { white-space: pre-wrap; }
+     <message>
+         <location filename="../src/contentpane.cpp" line="300"/>
+         <source>Rename Feature</source>
+-        <translation>ᠣᠨᠴᠠᠯᠢᠭ&#x202f;ᠢ ᠳᠠᠬᠢᠨ ᠨᠡᠡᠷᠡᠢᠳᠴᠤ ᠪᠠᠢᠨ᠎ᠠ</translation>
++        <translation>ᠣᠨᠴᠠᠯᠢᠭ ᠢ ᠳᠠᠬᠢᠨ ᠨᠡᠡᠷᠡᠢᠳᠴᠤ ᠪᠠᠢᠨ᠎ᠠ</translation>
+     </message>
+     <message>
+         <source>Duplicate feature name</source>
+@@ -1574,7 +1574,7 @@ Please authenticate yourself to continue</source>
+         <location filename="../src/main.cpp" line="167"/>
+         <location filename="../src/main.cpp" line="178"/>
+         <source>OK</source>
+-        <translation>ᠪᠠᠰᠠ ᠪᠣᠯᠣᠨ᠎ᠠ ᠃</translation>
++        <translation>ᠡᠬᠢᠯᠡᠪᠡ</translation>
+     </message>
+     <message>
+         <location filename="../src/main.cpp" line="176"/>
diff -Nru ukui-biometric-manager-4.10.0.0/debian/patches/0023-changelog.patch ukui-biometric-manager-4.10.0.0/debian/patches/0023-changelog.patch
--- ukui-biometric-manager-4.10.0.0/debian/patches/0023-changelog.patch	1970-01-01 08:00:00.000000000 +0800
+++ ukui-biometric-manager-4.10.0.0/debian/patches/0023-changelog.patch	2025-01-21 11:22:30.000000000 +0800
@@ -0,0 +1,2189 @@
+From: liudun <liudun@kylinos.cn>
+Date: Tue, 21 Jan 2025 11:24:16 +0800
+Subject: =?utf-8?b?5pu05pawY2hhbmdlbG9n?=
+
+---
+ biometric-manager/i18n_ts/zh_CN.ts     |   4 +-
+ biometric-manager/i18n_ts/zh_HK.ts     |   4 +-
+ biometric-manager/src/mainwindow.cpp   |  18 +-
+ biometric-manager/src/mainwindow.h     |   1 +
+ biometric-plugin/biometric-plugin.pro  |   6 -
+ biometric-plugin/biometricenroll.cpp   |   1 -
+ biometric-plugin/biometricenroll.h     |   3 -
+ biometric-plugin/biometricmoreinfo.cpp | 250 -------------
+ biometric-plugin/biometricmoreinfo.h   |  84 -----
+ biometric-plugin/biometricmoreinfo.ui  | 311 ---------------
+ biometric-plugin/biometricswidget.cpp  |  23 +-
+ biometric-plugin/biometricswidget.h    |   2 -
+ biometric-plugin/biometricswidget.ui   |   7 +-
+ biometric-plugin/changepwddialog.cpp   | 405 --------------------
+ biometric-plugin/changepwddialog.h     | 107 ------
+ biometric-plugin/changepwddialog.ui    | 665 ---------------------------------
+ biometric-plugin/qrcodeenroll.cpp      |   1 -
+ biometric-plugin/qrcodeenroll.h        |   3 -
+ 18 files changed, 21 insertions(+), 1874 deletions(-)
+ delete mode 100644 biometric-plugin/biometricmoreinfo.cpp
+ delete mode 100644 biometric-plugin/biometricmoreinfo.h
+ delete mode 100644 biometric-plugin/biometricmoreinfo.ui
+ delete mode 100644 biometric-plugin/changepwddialog.cpp
+ delete mode 100644 biometric-plugin/changepwddialog.h
+ delete mode 100644 biometric-plugin/changepwddialog.ui
+
+diff --git a/biometric-manager/i18n_ts/zh_CN.ts b/biometric-manager/i18n_ts/zh_CN.ts
+index c4406e1..d2fcebe 100644
+--- a/biometric-manager/i18n_ts/zh_CN.ts
++++ b/biometric-manager/i18n_ts/zh_CN.ts
+@@ -950,7 +950,7 @@ p, li { white-space: pre-wrap; }
+     <message>
+         <location filename="../src/mainwindow.ui" line="20"/>
+         <source>BiometricManager</source>
+-        <translation>生物特征管理</translation>
++        <translation>生物特征管理工具</translation>
+     </message>
+     <message>
+         <location filename="../src/mainwindow.ui" line="432"/>
+@@ -961,7 +961,7 @@ p, li { white-space: pre-wrap; }
+     <message>
+         <location filename="../src/mainwindow.ui" line="153"/>
+         <source>Biometirc Manager</source>
+-        <translation>生物特征管理</translation>
++        <translation>生物特征管理工具</translation>
+     </message>
+     <message>
+         <source>UserName</source>
+diff --git a/biometric-manager/i18n_ts/zh_HK.ts b/biometric-manager/i18n_ts/zh_HK.ts
+index ad6f088..cbb9da3 100644
+--- a/biometric-manager/i18n_ts/zh_HK.ts
++++ b/biometric-manager/i18n_ts/zh_HK.ts
+@@ -950,7 +950,7 @@ p, li { white-space: pre-wrap; }
+     <message>
+         <location filename="../src/mainwindow.ui" line="20"/>
+         <source>BiometricManager</source>
+-        <translation>生物特徵管理</translation>
++        <translation>生物特徵管理工具</translation>
+     </message>
+     <message>
+         <location filename="../src/mainwindow.ui" line="432"/>
+@@ -961,7 +961,7 @@ p, li { white-space: pre-wrap; }
+     <message>
+         <location filename="../src/mainwindow.ui" line="153"/>
+         <source>Biometirc Manager</source>
+-        <translation>生物特徵管理</translation>
++        <translation>生物特徵管理工具</translation>
+     </message>
+     <message>
+         <source>UserName</source>
+diff --git a/biometric-manager/src/mainwindow.cpp b/biometric-manager/src/mainwindow.cpp
+index e23d352..69446b5 100644
+--- a/biometric-manager/src/mainwindow.cpp
++++ b/biometric-manager/src/mainwindow.cpp
+@@ -197,6 +197,9 @@ void MainWindow::resizeEvent(QResizeEvent *event)
+     if (event->oldSize().width() != event->size().width()) {
+         update_label_width();
+     }
++    if (m_dialogLoading && m_dialogLoading->isVisible()) {
++        m_dialogLoading->setFixedSize(event->size());
++    }
+ }
+ 
+ bool MainWindow::eventFilter(QObject *obj, QEvent *event)
+@@ -222,18 +225,22 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *event)
+                     if(dialog)
+                         return false;
+                     deviceInfo = info;
+-                    dialog =new AttributeWindow(deviceInfo, this);
++                    dialog = new AttributeWindow(deviceInfo, this);
+                     int x = QCursor::pos().x();
+                     int y = QCursor::pos().y();
+-                    dialog->setGeometry(x+ 10, y+ 10, dialog->width(), dialog->height());
++                    dialog->setGeometry(x + 10, y + 10, dialog->width(), dialog->height());
+                     dialog->show();
++                    m_isShowDialog = true;
++                    QTimer::singleShot(100, this, [this]() {
++                        m_isShowDialog = false;
++                    });
+                     break;
+                 }
+ 
+             }
+         }
+         else if(event->type() == QEvent::Leave){
+-            if(dialog == nullptr)
++            if(dialog == nullptr || m_isShowDialog)
+                 return false;
+             dialog->hide();
+             dialog->close();
+@@ -614,7 +621,10 @@ void MainWindow::initSysMenu()
+         }
+     });
+ 
+-    menu->addActions({serviceStatusAction, helpAction,aboutAction,exitAction});
++    KMenuButton* menubutton = new KMenuButton();
++    menubutton->feedbackAction()->setVisible(true);
++
++    menu->addActions({serviceStatusAction, helpAction,aboutAction,menubutton->feedbackAction(),exitAction});
+     ui->btnMenu->setPopupMode(QToolButton::InstantPopup   );
+     ui->btnMenu->setMenu(menu);
+ }
+diff --git a/biometric-manager/src/mainwindow.h b/biometric-manager/src/mainwindow.h
+index 0fca5e1..2fb22bc 100644
+--- a/biometric-manager/src/mainwindow.h
++++ b/biometric-manager/src/mainwindow.h
+@@ -147,6 +147,7 @@ private:
+     QLabel  *lblStatus;
+     QLabel *permissionLabel ;
+     AttributeWindow *dialog = nullptr;
++    bool m_isShowDialog = false;
+ 
+     KNavigationBar *scrollArea = nullptr;
+     QStandardItem *permissionItem = nullptr;
+diff --git a/biometric-plugin/biometric-plugin.pro b/biometric-plugin/biometric-plugin.pro
+index ae4a54b..907c032 100644
+--- a/biometric-plugin/biometric-plugin.pro
++++ b/biometric-plugin/biometric-plugin.pro
+@@ -67,7 +67,6 @@ SOURCES += \
+     biometricdeviceinfo.cpp \
+     biometricproxy.cpp \
+     biometricenroll.cpp \
+-    biometricmoreinfo.cpp \
+     enrollbtn.cpp \
+     giodbus.cpp \
+     kalabel.cpp \
+@@ -76,7 +75,6 @@ SOURCES += \
+     servicemanager.cpp \
+     namelabel.cpp \
+     changefeaturename.cpp \
+-    changepwddialog.cpp \
+     changeuserpwd.cpp \
+     elipsemaskwidget.cpp \
+     passwdcheckutil.cpp \
+@@ -91,7 +89,6 @@ HEADERS += \
+     biometricdeviceinfo.h \
+     biometricproxy.h \
+     biometricenroll.h \
+-    biometricmoreinfo.h \
+     enrollbtn.h \
+     giodbus.h \
+     kalabel.h \
+@@ -101,7 +98,6 @@ HEADERS += \
+     namelabel.h \
+     changeuserpwd.h \
+     changefeaturename.h \
+-    changepwddialog.h \
+     elipsemaskwidget.h \
+     passwdcheckutil.h \  \
+     uniauthservice.h \
+@@ -111,10 +107,8 @@ HEADERS += \
+ 
+ FORMS += \
+     biometricswidget.ui \
+-    biometricmoreinfo.ui \
+     biometricenroll.ui \
+     changefeaturename.ui \
+-    changepwddialog.ui \
+     qrcodeenroll.ui
+ 
+ 
+diff --git a/biometric-plugin/biometricenroll.cpp b/biometric-plugin/biometricenroll.cpp
+index 0220b4a..81e16a7 100644
+--- a/biometric-plugin/biometricenroll.cpp
++++ b/biometric-plugin/biometricenroll.cpp
+@@ -25,7 +25,6 @@
+ #include <unistd.h>
+ #include <opencv2/opencv.hpp>
+ 
+-#include "ukcc/widgets/closebutton.h"
+ #include "biometricdeviceinfo.h"
+ #include "biometricproxy.h"
+ #include "servicemanager.h"
+diff --git a/biometric-plugin/biometricenroll.h b/biometric-plugin/biometricenroll.h
+index 7a8acbf..2baaf28 100644
+--- a/biometric-plugin/biometricenroll.h
++++ b/biometric-plugin/biometricenroll.h
+@@ -35,9 +35,6 @@
+ #include <QCoreApplication>
+ #include "biometricdeviceinfo.h"
+ 
+-#include <ukcc/widgets/hoverwidget.h>
+-
+-
+ namespace Ui {
+ class BiometricEnrollDialog;
+ }
+diff --git a/biometric-plugin/biometricmoreinfo.cpp b/biometric-plugin/biometricmoreinfo.cpp
+deleted file mode 100644
+index 88c4dc4..0000000
+--- a/biometric-plugin/biometricmoreinfo.cpp
++++ /dev/null
+@@ -1,250 +0,0 @@
+-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+- *
+- * Copyright (C) 2020 KYLINOS Information Technology Co., Ltd.
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+- *
+- */
+-
+-#include "biometricmoreinfo.h"
+-#include "ui_biometricmoreinfo.h"
+-#include <QPixmap>
+-
+-#include <ukcc/widgets/closebutton.h>
+-#include "biometricdeviceinfo.h"
+-#include "biometricproxy.h"
+-
+-extern void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed);
+-
+-enum VerifyType {
+-    VERIFY_HARDWARE,
+-    VERIFY_SOFTWARE,
+-    VERIFY_MIX,
+-    VERIFY_OTHER
+-};
+-
+-enum StorageType {
+-    STORAGE_DEVICE,
+-    STORAGE_OS,
+-    STORAGE_MIX
+-};
+-
+-enum BusType {
+-    BUS_SERIAL,
+-    BUS_USB,
+-    BUS_PCIE,
+-    BUS_ANY = 100,
+-    BUS_OTHER
+-};
+-
+-enum IdentifyType {
+-    IDENTIFY_HARDWARE,
+-    IDENTIFY_SOFTWARE,
+-    IDENTIFY_MIX,
+-    IDENTIFY_OTHER
+-};
+-
+-struct SearchResult {
+-    int uid;
+-    int index;
+-    QString indexName;
+-};
+-
+-BiometricMoreInfoDialog::BiometricMoreInfoDialog( DeviceInfoPtr deviceinfo, QWidget *parent) :
+-    QDialog(parent),
+-    deviceInfo(deviceinfo),
+-    ui(new Ui::BiometricMoreInfoDialog)
+-{
+-    ui->setupUi(this);
+-    setupInit();
+-
+-    QString verifyType = transferVerifyType(deviceInfo->verifyType);
+-    QString busType = transferBusType(deviceInfo->busType);
+-    QString storageType = transferStorageType(deviceInfo->storageType);
+-    QString identifyType = transferIdentifyType(deviceInfo->identifyType);
+-    QString devStatus = deviceInfo->deviceNum > 0 ? tr("Connected") : tr("Unconnected");
+-
+-    qDebug()<<verifyType<<busType<<storageType<<identifyType<<devStatus;
+-    ui->bioBusTypeLbl->setText(busType);
+-    ui->bioVerifyTypeLbl->setText(verifyType);
+-    ui->bioStorageTypeLbl->setText(storageType);
+-    ui->bioIdentificationTypeLbl->setText(identifyType);
+-    ui->bioDeviceStatusLbll->setText(devStatus);
+-
+-    defaultDeviceBtn = new SwitchButton(ui->biometricDefaultFrame);
+-  //  defaultDeviceBtn->setChecked(false);
+-    if(getDefaultDevice() == deviceinfo->shortName)
+-        defaultDeviceBtn->setChecked(true);
+-    else
+-        defaultDeviceBtn->setChecked(false);
+-
+-    ui->biometridDefaulltDeviceLayout->addWidget(defaultDeviceBtn);
+-    connect(defaultDeviceBtn, &SwitchButton::checkedChanged, [=](bool checked){
+-        if(checked)
+-            setDefaultDevice(deviceinfo->shortName);
+-        else
+-            setDefaultDevice("");
+-    });
+-
+-    mWatcher = nullptr;
+-    if(!mWatcher){
+-        mWatcher = new QFileSystemWatcher(this);
+-        mWatcher->addPath(QDir::homePath() + "/" + UKUI_BIOMETRIC_CONFIG_PATH);
+-        connect(mWatcher,&QFileSystemWatcher::fileChanged,this,[=](const QString &path){
+-            mWatcher->addPath(QDir::homePath() + "/" + UKUI_BIOMETRIC_CONFIG_PATH);
+-            defaultDeviceBtn->blockSignals(true);
+-            if(getDefaultDevice() == deviceinfo->shortName)
+-                defaultDeviceBtn->setChecked(true);
+-            else
+-                defaultDeviceBtn->setChecked(false);
+-            defaultDeviceBtn->blockSignals(false);
+-        });
+-    }
+-}
+-
+-BiometricMoreInfoDialog::~BiometricMoreInfoDialog()
+-{
+-    delete ui;
+-}
+-
+-QString BiometricMoreInfoDialog::transferBioType(int type)
+-{
+-    switch(type) {
+-    case BIOTYPE_FINGERPRINT:
+-        return tr("FingerPrint");
+-    case BIOTYPE_FINGERVEIN:
+-        return tr("Fingervein");
+-    case BIOTYPE_IRIS:
+-        return tr("Iris");
+-    case BIOTYPE_FACE:
+-        return tr("Face");
+-    case BIOTYPE_VOICEPRINT:
+-        return tr("VoicePrint");
+-    }
+-    return QString();
+-}
+-
+-QString BiometricMoreInfoDialog::transferVerifyType(int type)
+-{
+-    switch(type) {
+-    case VERIFY_HARDWARE:
+-        return tr("Hardware Verification");
+-    case VERIFY_SOFTWARE:
+-        return tr("Software Verification");
+-    case VERIFY_MIX:
+-        return tr("Mix Verification");
+-    case VERIFY_OTHER:
+-        return tr("Other Verification");
+-    }
+-    return QString();
+-}
+-QString BiometricMoreInfoDialog::transferStorageType(int type)
+-{
+-    switch(type) {
+-    case STORAGE_DEVICE:
+-        return tr("Device Storage");
+-    case STORAGE_OS:
+-        return tr("OS Storage");
+-    case STORAGE_MIX:
+-        return tr("Mix Storage");
+-    }
+-    return QString();
+-}
+-QString BiometricMoreInfoDialog::transferBusType(int type)
+-{
+-    switch(type) {
+-    case BUS_SERIAL:
+-        return tr("Serial");
+-    case BUS_USB:
+-        return tr("USB");
+-    case BUS_PCIE:
+-        return tr("PCIE");
+-    case BUS_ANY:
+-        return tr("Any");
+-    case BUS_OTHER:
+-        return tr("Other");
+-    }
+-    return QString();
+-}
+-QString BiometricMoreInfoDialog::transferIdentifyType(int type)
+-{
+-    switch(type) {
+-    case VERIFY_HARDWARE:
+-        return tr("Hardware Identification");
+-    case VERIFY_SOFTWARE:
+-        return tr("Software Identification");
+-    case VERIFY_MIX:
+-        return tr("Mix Identification");
+-    case VERIFY_OTHER:
+-        return tr("Other Identification");
+-    }
+-    return QString();
+-}
+-
+-void BiometricMoreInfoDialog::on_closeBtn_clicked()
+-{
+-    close();
+-}
+-
+-void BiometricMoreInfoDialog::setupInit()
+-{
+-    setWindowTitle(tr(""));
+-    setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
+-    setAttribute(Qt::WA_TranslucentBackground);
+-    setAttribute(Qt::WA_DeleteOnClose);
+-
+-    ui->closeBtn->setIcon(QIcon("://img/titlebar/close.svg"));
+-
+-}
+-
+-void BiometricMoreInfoDialog::paintEvent(QPaintEvent * event){
+-    Q_UNUSED(event)
+-
+-    QPainter p(this);
+-    p.setRenderHint(QPainter::Antialiasing);
+-    QPainterPath rectPath;
+-    rectPath.addRoundedRect(this->rect().adjusted(10, 10, -10, -10), 6, 6);
+-
+-    // 画一个黑底
+-    QPixmap pixmap(this->rect().size());
+-    pixmap.fill(Qt::transparent);
+-    QPainter pixmapPainter(&pixmap);
+-    pixmapPainter.setRenderHint(QPainter::Antialiasing);
+-    pixmapPainter.setPen(Qt::transparent);
+-    pixmapPainter.setBrush(Qt::black);
+-    pixmapPainter.drawPath(rectPath);
+-    pixmapPainter.end();
+-
+-    // 模糊这个黑底
+-    QImage img = pixmap.toImage();
+-    qt_blurImage(img, 10, false, false);
+-
+-    // 挖掉中心
+-    pixmap = QPixmap::fromImage(img);
+-    QPainter pixmapPainter2(&pixmap);
+-    pixmapPainter2.setRenderHint(QPainter::Antialiasing);
+-    pixmapPainter2.setCompositionMode(QPainter::CompositionMode_Clear);
+-    pixmapPainter2.setPen(Qt::transparent);
+-    pixmapPainter2.setBrush(Qt::transparent);
+-    pixmapPainter2.drawPath(rectPath);
+-
+-    // 绘制阴影
+-    p.drawPixmap(this->rect(), pixmap, pixmap.rect());
+-
+-    // 绘制一个背景
+-    p.save();
+-    p.fillPath(rectPath,palette().color(QPalette::Base));
+-    p.restore();
+-}
+diff --git a/biometric-plugin/biometricmoreinfo.h b/biometric-plugin/biometricmoreinfo.h
+deleted file mode 100644
+index 72532cf..0000000
+--- a/biometric-plugin/biometricmoreinfo.h
++++ /dev/null
+@@ -1,84 +0,0 @@
+-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+- *
+- * Copyright (C) 2020 KYLINOS Information Technology Co., Ltd.
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+- *
+- */
+-
+-#ifndef BIOMETRICMOREINFO_H
+-#define BIOMETRICMOREINFO_H
+-
+-#include <QDialog>
+-#include <QPainter>
+-#include <QPainterPath>
+-#include <QListWidget>
+-#include <QDebug>
+-#include <QPushButton>
+-#include <QFileSystemWatcher>
+-#include <QMovie>
+-#include <QDBusInterface>
+-#include <QDBusArgument>
+-#include <QDBusReply>
+-#include <QMessageBox>
+-#include <QCoreApplication>
+-
+-
+-#include <ukcc/widgets/hoverwidget.h>
+-#include "biometricdeviceinfo.h"
+-#include "biometricproxy.h"
+-#include <ukcc/widgets/switchbutton.h>
+-
+-namespace Ui {
+-class BiometricMoreInfoDialog;
+-}
+-
+-class BiometricMoreInfoDialog : public QDialog
+-{
+-    Q_OBJECT
+-
+-public:
+-    explicit BiometricMoreInfoDialog(DeviceInfoPtr deviceinfo, QWidget *parent = nullptr);
+-
+-    ~BiometricMoreInfoDialog();
+-
+-
+-protected:
+-    void paintEvent(QPaintEvent * event);
+-
+-
+-private slots:
+-    void on_closeBtn_clicked();
+-
+-private:
+-    Ui::BiometricMoreInfoDialog *ui;
+-
+-    void setupInit();
+-
+-    QString transferBioType(int type);
+-    QString transferVerifyType(int type);
+-    QString transferStorageType(int type);
+-    QString transferBusType(int type);
+-    QString transferIdentifyType(int type);
+-
+-    DeviceInfoPtr deviceInfo;
+-    SwitchButton  *defaultDeviceBtn;
+-    QFileSystemWatcher  *mWatcher;
+-
+-private slots:
+-
+-};
+-
+-#endif // BIOMETRICENROLL_H
+diff --git a/biometric-plugin/biometricmoreinfo.ui b/biometric-plugin/biometricmoreinfo.ui
+deleted file mode 100644
+index 92ed518..0000000
+--- a/biometric-plugin/biometricmoreinfo.ui
++++ /dev/null
+@@ -1,311 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<ui version="4.0">
+- <class>BiometricMoreInfoDialog</class>
+- <widget class="QDialog" name="BiometricMoreInfoDialog">
+-  <property name="geometry">
+-   <rect>
+-    <x>0</x>
+-    <y>0</y>
+-    <width>350</width>
+-    <height>300</height>
+-   </rect>
+-  </property>
+-  <property name="minimumSize">
+-   <size>
+-    <width>350</width>
+-    <height>300</height>
+-   </size>
+-  </property>
+-  <property name="maximumSize">
+-   <size>
+-    <width>350</width>
+-    <height>300</height>
+-   </size>
+-  </property>
+-  <property name="windowTitle">
+-   <string>Dialog</string>
+-  </property>
+-  <layout class="QVBoxLayout" name="verticalLayout_2">
+-   <property name="spacing">
+-    <number>8</number>
+-   </property>
+-   <property name="leftMargin">
+-    <number>8</number>
+-   </property>
+-   <property name="topMargin">
+-    <number>8</number>
+-   </property>
+-   <property name="rightMargin">
+-    <number>8</number>
+-   </property>
+-   <property name="bottomMargin">
+-    <number>8</number>
+-   </property>
+-   <item>
+-    <layout class="QHBoxLayout" name="horizontalLayout">
+-     <property name="spacing">
+-      <number>8</number>
+-     </property>
+-     <property name="leftMargin">
+-      <number>8</number>
+-     </property>
+-     <property name="topMargin">
+-      <number>8</number>
+-     </property>
+-     <property name="rightMargin">
+-      <number>8</number>
+-     </property>
+-     <property name="bottomMargin">
+-      <number>0</number>
+-     </property>
+-     <item>
+-      <widget class="TitleLabel" name="titleLabel">
+-       <property name="sizePolicy">
+-        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+-         <horstretch>0</horstretch>
+-         <verstretch>0</verstretch>
+-        </sizepolicy>
+-       </property>
+-       <property name="minimumSize">
+-        <size>
+-         <width>0</width>
+-         <height>30</height>
+-        </size>
+-       </property>
+-       <property name="text">
+-        <string>Biometrics </string>
+-       </property>
+-       <property name="alignment">
+-        <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+-       </property>
+-      </widget>
+-     </item>
+-     <item>
+-      <spacer name="horizontalSpacer">
+-       <property name="orientation">
+-        <enum>Qt::Horizontal</enum>
+-       </property>
+-       <property name="sizeHint" stdset="0">
+-        <size>
+-         <width>40</width>
+-         <height>20</height>
+-        </size>
+-       </property>
+-      </spacer>
+-     </item>
+-     <item>
+-      <widget class="CloseButton" name="closeBtn">
+-       <property name="minimumSize">
+-        <size>
+-         <width>30</width>
+-         <height>30</height>
+-        </size>
+-       </property>
+-       <property name="maximumSize">
+-        <size>
+-         <width>30</width>
+-         <height>30</height>
+-        </size>
+-       </property>
+-       <property name="focusPolicy">
+-        <enum>Qt::NoFocus</enum>
+-       </property>
+-       <property name="text">
+-        <string/>
+-       </property>
+-      </widget>
+-     </item>
+-    </layout>
+-   </item>
+-   <item>
+-    <layout class="QVBoxLayout" name="verticalLayout">
+-     <property name="spacing">
+-      <number>8</number>
+-     </property>
+-     <property name="leftMargin">
+-      <number>0</number>
+-     </property>
+-     <property name="topMargin">
+-      <number>0</number>
+-     </property>
+-     <property name="rightMargin">
+-      <number>0</number>
+-     </property>
+-     <property name="bottomMargin">
+-      <number>0</number>
+-     </property>
+-     <item>
+-      <widget class="QFrame" name="biometricDefaultFrame">
+-       <property name="minimumSize">
+-        <size>
+-         <width>0</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <layout class="QHBoxLayout" name="horizontalLayout_4">
+-        <property name="spacing">
+-         <number>0</number>
+-        </property>
+-        <property name="leftMargin">
+-         <number>22</number>
+-        </property>
+-        <property name="topMargin">
+-         <number>0</number>
+-        </property>
+-        <property name="rightMargin">
+-         <number>22</number>
+-        </property>
+-        <property name="bottomMargin">
+-         <number>0</number>
+-        </property>
+-        <item>
+-         <layout class="QHBoxLayout" name="biometridDefaulltDeviceLayout">
+-          <item>
+-           <widget class="TitleLabel" name="label">
+-            <property name="text">
+-             <string>Default device </string>
+-            </property>
+-           </widget>
+-          </item>
+-          <item>
+-           <spacer name="horizontalSpacer_2">
+-            <property name="orientation">
+-             <enum>Qt::Horizontal</enum>
+-            </property>
+-            <property name="sizeHint" stdset="0">
+-             <size>
+-              <width>40</width>
+-              <height>20</height>
+-             </size>
+-            </property>
+-           </spacer>
+-          </item>
+-         </layout>
+-        </item>
+-       </layout>
+-      </widget>
+-     </item>
+-     <item>
+-      <widget class="QWidget" name="widget" native="true">
+-       <property name="minimumSize">
+-        <size>
+-         <width>0</width>
+-         <height>0</height>
+-        </size>
+-       </property>
+-       <layout class="QVBoxLayout" name="verticalLayout_3">
+-        <property name="leftMargin">
+-         <number>12</number>
+-        </property>
+-        <property name="rightMargin">
+-         <number>12</number>
+-        </property>
+-        <item>
+-         <layout class="QGridLayout" name="gridLayout_3">
+-          <item row="1" column="0">
+-           <widget class="QLabel" name="label_2">
+-            <property name="text">
+-             <string>Verify Type:</string>
+-            </property>
+-           </widget>
+-          </item>
+-          <item row="3" column="0">
+-           <widget class="QLabel" name="label_7">
+-            <property name="text">
+-             <string>Bus Type:</string>
+-            </property>
+-           </widget>
+-          </item>
+-          <item row="0" column="0">
+-           <widget class="QLabel" name="label_3">
+-            <property name="text">
+-             <string>Device Status:</string>
+-            </property>
+-           </widget>
+-          </item>
+-          <item row="1" column="1">
+-           <widget class="QLabel" name="bioVerifyTypeLbl">
+-            <property name="text">
+-             <string/>
+-            </property>
+-           </widget>
+-          </item>
+-          <item row="0" column="1">
+-           <widget class="QLabel" name="bioDeviceStatusLbll">
+-            <property name="text">
+-             <string/>
+-            </property>
+-           </widget>
+-          </item>
+-          <item row="2" column="0">
+-           <widget class="QLabel" name="label_6">
+-            <property name="text">
+-             <string>Storage Type:</string>
+-            </property>
+-           </widget>
+-          </item>
+-          <item row="4" column="0">
+-           <widget class="QLabel" name="label_8">
+-            <property name="text">
+-             <string>Identification Type:</string>
+-            </property>
+-           </widget>
+-          </item>
+-          <item row="2" column="1">
+-           <widget class="QLabel" name="bioStorageTypeLbl">
+-            <property name="text">
+-             <string/>
+-            </property>
+-           </widget>
+-          </item>
+-          <item row="3" column="1">
+-           <widget class="QLabel" name="bioBusTypeLbl">
+-            <property name="text">
+-             <string/>
+-            </property>
+-           </widget>
+-          </item>
+-          <item row="4" column="1">
+-           <widget class="QLabel" name="bioIdentificationTypeLbl">
+-            <property name="text">
+-             <string/>
+-            </property>
+-           </widget>
+-          </item>
+-         </layout>
+-        </item>
+-       </layout>
+-      </widget>
+-     </item>
+-     <item>
+-      <spacer name="verticalSpacer">
+-       <property name="orientation">
+-        <enum>Qt::Vertical</enum>
+-       </property>
+-       <property name="sizeHint" stdset="0">
+-        <size>
+-         <width>20</width>
+-         <height>20</height>
+-        </size>
+-       </property>
+-      </spacer>
+-     </item>
+-    </layout>
+-   </item>
+-  </layout>
+- </widget>
+- <customwidgets>
+-  <customwidget>
+-   <class>TitleLabel</class>
+-   <extends>QLabel</extends>
+-   <header location="global">/usr/include/ukcc/widgets//titlelabel.h</header>
+-  </customwidget>
+-  <customwidget>
+-   <class>CloseButton</class>
+-   <extends>QPushButton</extends>
+-   <header location="global">/usr/include/ukcc/widgets/closebutton.h</header>
+-  </customwidget>
+- </customwidgets>
+- <resources/>
+- <connections/>
+-</ui>
+diff --git a/biometric-plugin/biometricswidget.cpp b/biometric-plugin/biometricswidget.cpp
+index fecc495..226b663 100644
+--- a/biometric-plugin/biometricswidget.cpp
++++ b/biometric-plugin/biometricswidget.cpp
+@@ -17,8 +17,6 @@
+ #include <QLineEdit>
+ #include <QMessageBox>
+ #include <unistd.h>
+-#include <ukcc/widgets/switchbutton.h>
+-#include <ukcc/widgets/imageutil.h>
+ #include "namelabel.h"
+ #include "changefeaturename.h"
+ #include "elipsemaskwidget.h"
+@@ -60,6 +58,7 @@ void BiometricsWidget::initBioComonent()
+                                           , QDBusConnection::systemBus());
+     serviceInterface->setTimeout(2147483647); /* 微秒 */
+ 
++    ui->titleLabel->setContentsMargins(16, 0, 0,  0);
+ 
+     addBioFeatureBtn = new EnrollBtn;
+     addUserHorLayout = new QHBoxLayout();
+@@ -712,26 +711,6 @@ void BiometricsWidget::showVerifyDialog(FeatureInfoPtr featureinfo)
+     dialog->verify(deviceInfoPtr->id,getuid(),featureinfo->index);
+ }
+ 
+-void BiometricsWidget::biometricShowMoreInfoDialog()
+-{
+-    if(ui->biometricDeviceBox_2->count() <= 0 || ui->biometrictypeBox->count() <= 0)
+-        return ;
+-
+-    int index = ui->biometricDeviceBox_2->currentIndex();
+-    int type = ui->biometrictypeBox->currentData().toInt();
+-
+-    if(index < 0|| type < 0)
+-        return ;
+-
+-    DeviceInfoPtr deviceInfo = deviceMap.value(type).at(index);
+-
+-    if(!deviceInfo)
+-        return ;
+-
+-    BiometricMoreInfoDialog * dialog = new BiometricMoreInfoDialog(deviceInfo);
+-    dialog->exec();
+-}
+-
+ void BiometricsWidget::renameFeaturedone(FeatureInfoPtr featureinfo ,QString newname)
+ {
+      QListWidgetItem *item = biometricFeatureMap.value(featureinfo->index_name);
+diff --git a/biometric-plugin/biometricswidget.h b/biometric-plugin/biometricswidget.h
+index 74ce875..9a02a42 100644
+--- a/biometric-plugin/biometricswidget.h
++++ b/biometric-plugin/biometricswidget.h
+@@ -8,7 +8,6 @@
+ #include "biometricproxy.h"
+ #include "biometricenroll.h"
+ #include "qrcodeenroll.h"
+-#include "biometricmoreinfo.h"
+ #include "pwdchangethread.h"
+ #include "enrollbtn.h"
+ #include "kswitchbutton.h"
+@@ -73,7 +72,6 @@ private:
+     void deleteFeaturedone(FeatureInfoPtr feature);
+     void renameFeaturedone(FeatureInfoPtr feature,QString newname);
+     void setBiometricDeviceVisible(QString userName, int authType, bool visible);
+-    void biometricShowMoreInfoDialog();
+     bool isShowBiometric();
+     void initUserInfo();
+     QString _accountTypeIntToString(int type);
+diff --git a/biometric-plugin/biometricswidget.ui b/biometric-plugin/biometricswidget.ui
+index d7e6d41..c80542e 100644
+--- a/biometric-plugin/biometricswidget.ui
++++ b/biometric-plugin/biometricswidget.ui
+@@ -48,7 +48,7 @@
+        <number>0</number>
+       </property>
+       <item>
+-       <widget class="TitleLabel" name="titleLabel">
++       <widget class="QLabel" name="titleLabel">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+@@ -804,11 +804,6 @@
+    <extends>QLabel</extends>
+    <header>kalabel.h</header>
+   </customwidget>
+-  <customwidget>
+-   <class>TitleLabel</class>
+-   <extends>QLabel</extends>
+-   <header location="global">/usr/include/ukcc/widgets/titlelabel.h</header>
+-  </customwidget>
+  </customwidgets>
+  <resources/>
+  <connections/>
+diff --git a/biometric-plugin/changepwddialog.cpp b/biometric-plugin/changepwddialog.cpp
+deleted file mode 100644
+index 77c6e58..0000000
+--- a/biometric-plugin/changepwddialog.cpp
++++ /dev/null
+@@ -1,405 +0,0 @@
+-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+- *
+- * Copyright (C) 2019 Tianjin KYLIN Information Technology Co., Ltd.
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+- *
+- */
+-#include "changepwddialog.h"
+-#include "ui_changepwddialog.h"
+-
+-#include "elipsemaskwidget.h"
+-#include "passwdcheckutil.h"
+-
+-#include <QStyledItemDelegate>
+-
+-#include <QDebug>
+-
+-#include "ukcc/widgets/closebutton.h"
+-
+-/* qt会将glib里的signals成员识别为宏,所以取消该宏
+- * 后面如果用到signals时,使用Q_SIGNALS代替即可
+- **/
+-#ifdef signals
+-#undef signals
+-#endif
+-
+-extern "C" {
+-#include <glib.h>
+-#include <gio/gio.h>
+-
+-}
+-
+-
+-#define PWD_LOW_LENGTH 6
+-#define PWD_HIGH_LENGTH 20
+-
+-
+-extern void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed);
+-
+-
+-ChangePwdDialog::ChangePwdDialog(bool _isCurrentUser, QString _username, QWidget *parent) :
+-    QDialog(parent),
+-    isCurrentUser(_isCurrentUser),
+-    ui(new Ui::ChangePwdDialog),
+-    currentUserName(_username)
+-{
+-    ui->setupUi(this);
+-
+-    setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
+-    setAttribute(Qt::WA_TranslucentBackground);
+-    setAttribute(Qt::WA_DeleteOnClose);
+-    setWindowTitle(tr("Change pwd"));
+-
+-    curPwdTip = "";
+-
+-    timerForCheckPwd = new QTimer;
+-    timerForCheckPwd->setInterval(1000);
+-    timerForCheckPwd->setSingleShot(true);
+-
+-    ui->titleLabel->setStyleSheet("QLabel{color: palette(windowText);}");
+-    ui->pwdFrame->setFrameShape(QFrame::Shape::Box);
+-    ui->tipLabel->setAlignment(Qt::AlignCenter);
+-    ui->tipLabel->setStyleSheet("color:red;");
+-
+-//    ui->closeBtn->setIcon(QIcon("://img/titlebar/close.svg"));
+-
+-//    isCurrentUser = true;
+-
+-    pcThread = new PwdCheckThread();
+-
+-
+-    initPwdChecked();
+-    setupComponent();
+-    setupConnect();
+-}
+-
+-ChangePwdDialog::~ChangePwdDialog()
+-{
+-    delete ui;
+-    ui = nullptr;
+-
+-//    pcThread->terminate();
+-//    delete pcThread;
+-}
+-
+-bool ChangePwdDialog::checkOtherPasswd(QString name, QString pwd){
+-    FILE * stream;
+-    char command[128];
+-    char output[256];
+-
+-    QByteArray ba1 = name.toLatin1();
+-
+-    //
+-    if (pwd.contains("'")){
+-        snprintf(command, 128, "/usr/bin/checkTest %s \"%s\"", ba1.data(), pwd.toLatin1().data());
+-    } else {
+-
+-        snprintf(command, 128, "/usr/bin/checkTest %s '%s'", ba1.data(), pwd.toLatin1().data());
+-    }
+-
+-    if ((stream = popen(command, "r")) == NULL){
+-        return false;
+-    }
+-
+-    while(fgets(output, 256, stream) != NULL){
+-        qDebug() << "output:" << QString(output).simplified();
+-    }
+-
+-//    if (fread(output, sizeof(char), 128, stream) > 0){
+-//        pclose(stream);
+-//        return true;
+-//    }
+-
+-
+-
+-    pclose(stream);
+-    return false;
+-}
+-
+-void ChangePwdDialog::initPwdChecked(){
+-
+-
+-
+-#ifdef ENABLEPQ
+-    int ret;
+-    void *auxerror;
+-    char buf[255];
+-
+-    settings = pwquality_default_settings();
+-    if (settings == NULL) {
+-        enablePwdQuality = false;
+-        qDebug() << "init pwquality settings failed";
+-    } else {
+-        enablePwdQuality = true;
+-    }
+-
+-    ret = pwquality_read_config(settings, PWCONF, &auxerror);
+-    if (ret != 0){
+-        enablePwdQuality = false;
+-        qDebug() << "Reading pwquality configuration file failed: " << pwquality_strerror(buf, sizeof(buf), ret, auxerror);
+-    } else {
+-        enablePwdQuality = true;
+-    }
+-
+-    if (PasswdCheckUtil::getCurrentPamState())
+-        enablePwdQuality = true;
+-    else
+-        enablePwdQuality = false;
+-
+-#else
+-    enablePwdQuality = false;
+-#endif
+-}
+-
+-void ChangePwdDialog::setupComponent(){
+-
+-    ElipseMaskWidget * cpMaskWidget = new ElipseMaskWidget(ui->faceLabel);
+-    cpMaskWidget->setGeometry(0, 0, ui->faceLabel->width(), ui->faceLabel->height());
+-
+-    ui->pwdtypeComboBox->setText(tr("General Pwd"));
+-
+-    ui->curPwdLineEdit->setEchoMode(QLineEdit::Password);
+-    ui->pwdLineEdit->setEchoMode(QLineEdit::Password);
+-    ui->pwdsureLineEdit->setEchoMode(QLineEdit::Password);
+-
+-    ui->curPwdLineEdit->setPlaceholderText(tr("Current Password"));
+-    ui->pwdLineEdit->setPlaceholderText(tr("New Password"));
+-    ui->pwdsureLineEdit->setPlaceholderText(tr("New Password Identify"));
+-
+-    refreshConfirmBtnStatus();
+-}
+-
+-void ChangePwdDialog::setupConnect(){
+-/*
+-    connect(pcThread, &PwdCheckThread::complete, this, [=](bool re){
+-        curPwdTip = re ? "" : tr("Pwd input error, re-enter!");
+-
+-        if (pwdTip.isEmpty() && pwdSureTip.isEmpty()){
+-            ui->tipLabel->setText(curPwdTip);
+-        }
+-
+-        if (curPwdTip.isEmpty()){
+-            pwdTip.isEmpty() ? ui->tipLabel->setText(pwdSureTip) : ui->tipLabel->setText(pwdTip);
+-        }
+-
+-        refreshConfirmBtnStatus();
+-    });
+-*/
+-    if (isCurrentUser){
+-
+-        connect(timerForCheckPwd, &QTimer::timeout, [=]{
+-            /* 密码为空不检测 */
+-            if (ui->curPwdLineEdit->text().isEmpty()){
+-                return;
+-            }
+-
+-            pcThread->setArgs(currentUserName, ui->curPwdLineEdit->text());
+-
+-            pcThread->start();
+-
+-        });
+-
+-        connect(ui->curPwdLineEdit, &QLineEdit::textChanged, [=]{
+-            pwdLegalityCheck();
+-
+-            ui->confirmPushBtn->setEnabled(false);
+-
+-            timerForCheckPwd->start();
+-        });
+-
+-        connect(ui->confirmPushBtn, &QPushButton::clicked, [=]{
+-            this->accept();
+-
+-            emit passwd_send(ui->pwdLineEdit->text());
+-        });
+-    } else {
+-        connect(ui->confirmPushBtn, &QPushButton::clicked, [=]{
+-            this->accept();
+-
+-            emit passwd_send2(ui->pwdLineEdit->text());
+-        });
+-    }
+-
+-
+-
+-    connect(ui->pwdLineEdit, &QLineEdit::textChanged, [=]{
+-        pwdLegalityCheck();
+-
+-        refreshConfirmBtnStatus();
+-    });
+-    connect(ui->pwdsureLineEdit, &QLineEdit::textChanged, [=](QString text){
+-        if (!text.isEmpty() && text != ui->pwdLineEdit->text()){
+-            pwdSureTip = tr("Inconsistency with pwd");
+-        } else {
+-            pwdSureTip = "";
+-        }
+-
+-        ui->tipLabel->setText(pwdSureTip);
+-        if (pwdSureTip.isEmpty()){
+-            pwdTip.isEmpty() ? ui->tipLabel->setText(curPwdTip) : ui->tipLabel->setText(pwdTip);
+-        }
+-
+-        refreshConfirmBtnStatus();
+-    });
+-
+-    connect(ui->cancelPushBtn, &QPushButton::clicked, [=]{
+-//        reject();
+-        close();
+-    });
+-}
+-
+-void ChangePwdDialog::setFace(QString iconfile){
+-    ui->faceLabel->setPixmap(QPixmap(iconfile).scaled(QSize(80, 80)));
+-
+-}
+-
+-void ChangePwdDialog::setUsername(QString realname){
+-    ui->usernameLabel->setText(realname);
+-}
+-
+-void ChangePwdDialog::setAccountType(QString aType){
+-    ui->aTypeLabel->setText(aType);
+-}
+-
+-void ChangePwdDialog::haveCurrentPwdEdit(bool have){
+-    ui->curPwdLineEdit->setVisible(have);
+-    ui->label->setVisible(have);
+-}
+-
+-void ChangePwdDialog::paintEvent(QPaintEvent *event) {
+-    Q_UNUSED(event)
+-
+-    QPainter p(this);
+-    p.setRenderHint(QPainter::Antialiasing);
+-    QPainterPath rectPath;
+-    rectPath.addRoundedRect(this->rect().adjusted(10, 10, -10, -10), 6, 6);
+-
+-    // 画一个黑底
+-    QPixmap pixmap(this->rect().size());
+-    pixmap.fill(Qt::transparent);
+-    QPainter pixmapPainter(&pixmap);
+-    pixmapPainter.setRenderHint(QPainter::Antialiasing);
+-    pixmapPainter.setPen(Qt::transparent);
+-    pixmapPainter.setBrush(Qt::black);
+-    pixmapPainter.setOpacity(0.65);
+-    pixmapPainter.drawPath(rectPath);
+-    pixmapPainter.end();
+-
+-    // 模糊这个黑底
+-    QImage img = pixmap.toImage();
+-    qt_blurImage(img, 10, false, false);
+-
+-    // 挖掉中心
+-    pixmap = QPixmap::fromImage(img);
+-    QPainter pixmapPainter2(&pixmap);
+-    pixmapPainter2.setRenderHint(QPainter::Antialiasing);
+-    pixmapPainter2.setCompositionMode(QPainter::CompositionMode_Clear);
+-    pixmapPainter2.setPen(Qt::transparent);
+-    pixmapPainter2.setBrush(Qt::transparent);
+-    pixmapPainter2.drawPath(rectPath);
+-
+-    // 绘制阴影
+-    p.drawPixmap(this->rect(), pixmap, pixmap.rect());
+-
+-    // 绘制一个背景
+-    p.save();
+-    p.fillPath(rectPath,palette().color(QPalette::Base));
+-    p.restore();
+-
+-}
+-
+-void ChangePwdDialog::pwdLegalityCheck(){
+-    //
+-    if (!checkCharLegitimacy(ui->pwdLineEdit->text())){
+-        pwdTip = tr("Contains illegal characters!");
+-    } else if (QString::compare(ui->pwdLineEdit->text(), ui->curPwdLineEdit->text()) == 0 && !ui->pwdLineEdit->text().isEmpty()){
+-        pwdTip = tr("Same with old pwd");
+-    } else {
+-        if (enablePwdQuality){
+-#ifdef ENABLEPQ
+-            void * auxerror;
+-            int ret;
+-            const char * msg;
+-            char buf[256];
+-
+-            QByteArray ba = ui->pwdLineEdit->text().toLatin1();
+-            QByteArray ba1 = ui->curPwdLineEdit->text().toLatin1();
+-
+-            if (isCurrentUser){
+-               ret = pwquality_check(settings, ba.data(), ba1.data(), currentUserName.toLatin1().data(), &auxerror);
+-            } else {
+-               ret = pwquality_check(settings, ba.data(), NULL, currentUserName.toLatin1().data(), &auxerror);
+-            }
+-
+-            if (ret < 0 && ui->pwdLineEdit->text().length() > 0){
+-                msg = pwquality_strerror(buf, sizeof(buf), ret, auxerror);
+-                pwdTip = QString(msg);
+-            } else {
+-                pwdTip = "";
+-            }
+-#endif
+-
+-        } else { //系统未开启pwdquality模块
+-            pwdTip = "";
+-        }
+-    }
+-
+-    //防止先输入确认密码,再输入密码后pwdsuretipLabel无法刷新
+-    if (!ui->pwdsureLineEdit->text().isEmpty()){
+-        if (ui->pwdLineEdit->text() == ui->pwdsureLineEdit->text()) {
+-            pwdSureTip = "";
+-        } else {
+-            pwdSureTip = tr("Inconsistency with pwd");
+-        }
+-    }
+-
+-    ui->tipLabel->setText(pwdTip);
+-    if (pwdTip.isEmpty()){
+-        pwdSureTip.isEmpty() ? ui->tipLabel->setText(curPwdTip) : ui->tipLabel->setText(pwdSureTip);
+-    }
+-}
+-
+-bool ChangePwdDialog::checkCharLegitimacy(QString password){
+-    foreach (QChar ch, password){
+-        if (int(ch.toLatin1() <= 0 || int(ch.toLatin1()) > 127)){
+-            return false;
+-        }
+-    }
+-    return true;
+-}
+-
+-
+-void ChangePwdDialog::refreshConfirmBtnStatus(){
+-
+-    if (getuid() && isCurrentUser){
+-        if (!ui->tipLabel->text().isEmpty() || \
+-                ui->curPwdLineEdit->text().isEmpty() || ui->curPwdLineEdit->text() == tr("Current Password") || \
+-                ui->pwdLineEdit->text().isEmpty() || ui->pwdLineEdit->text() == tr("New Password") || \
+-                ui->pwdsureLineEdit->text().isEmpty() || ui->pwdsureLineEdit->text() == tr("New Password Identify") ||
+-                !curPwdTip.isEmpty() || !pwdTip.isEmpty() || !pwdSureTip.isEmpty())
+-            ui->confirmPushBtn->setEnabled(false);
+-        else
+-            ui->confirmPushBtn->setEnabled(true);
+-    } else {
+-        if (!ui->tipLabel->text().isEmpty() || \
+-                ui->pwdLineEdit->text().isEmpty() || ui->pwdLineEdit->text() == tr("New Password") || \
+-                ui->pwdsureLineEdit->text().isEmpty() || ui->pwdsureLineEdit->text() == tr("New Password Identify") ||
+-                !pwdTip.isEmpty() || !pwdSureTip.isEmpty())
+-            ui->confirmPushBtn->setEnabled(false);
+-        else
+-            ui->confirmPushBtn->setEnabled(true);
+-    }
+-}
+diff --git a/biometric-plugin/changepwddialog.h b/biometric-plugin/changepwddialog.h
+deleted file mode 100644
+index 218c91a..0000000
+--- a/biometric-plugin/changepwddialog.h
++++ /dev/null
+@@ -1,107 +0,0 @@
+-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+- *
+- * Copyright (C) 2019 Tianjin KYLIN Information Technology Co., Ltd.
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+- *
+- */
+-#ifndef CHANGEPWDDIALOG_H
+-#define CHANGEPWDDIALOG_H
+-
+-#include <QDialog>
+-#include <QPainter>
+-#include <QPainterPath>
+-#include <QThread>
+-
+-#include <QTimer>
+-
+-#include "pwdcheckthread.h"
+-
+-#ifdef ENABLEPQ
+-extern "C" {
+-
+-#include <pwquality.h>
+-
+-}
+-
+-#define PWCONF "/etc/security/pwquality.conf"
+-#define RFLAG 0x1
+-#define CFLAG 0x2
+-
+-#endif
+-
+-namespace Ui {
+-class ChangePwdDialog;
+-}
+-
+-class ChangePwdDialog : public QDialog
+-{
+-    Q_OBJECT
+-
+-public:
+-    explicit ChangePwdDialog(bool _isCurrentUser, QString _username, QWidget *parent = 0);
+-    ~ChangePwdDialog();
+-
+-public:
+-    void initPwdChecked();
+-    void setupComponent();
+-    void setupConnect();
+-
+-    void refreshConfirmBtnStatus();
+-
+-    void setFace(QString iconfile);
+-    void setUsername(QString realname);
+-    void setPwdType(QString type);
+-    void setAccountType(QString text);
+-    void haveCurrentPwdEdit(bool have);
+-
+-    bool isCurrentUser;
+-
+-protected:
+-    void paintEvent(QPaintEvent *);
+-
+-private:
+-    Ui::ChangePwdDialog *ui;
+-
+-    bool checkCharLegitimacy(QString password);
+-    bool checkOtherPasswd(QString name, QString pwd);
+-
+-    QString currentUserName;
+-    QString pwdTip;
+-    QString pwdSureTip;
+-    QString curPwdTip;
+-
+-    bool enablePwdQuality;
+-
+-#ifdef ENABLEPQ
+-    pwquality_settings_t *settings;
+-#endif
+-
+-private:
+-    PwdCheckThread * pcThread;
+-
+-    QTimer * timerForCheckPwd;
+-
+-
+-private Q_SLOTS:
+-    void pwdLegalityCheck();
+-
+-Q_SIGNALS:
+-    void passwd_send(QString pwd);
+-    void passwd_send2(QString pwd);
+-    void pwdCheckOver();
+-};
+-
+-#endif // CHANGEPWDDIALOG_H
+diff --git a/biometric-plugin/changepwddialog.ui b/biometric-plugin/changepwddialog.ui
+deleted file mode 100644
+index b092ad2..0000000
+--- a/biometric-plugin/changepwddialog.ui
++++ /dev/null
+@@ -1,665 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<ui version="4.0">
+- <class>ChangePwdDialog</class>
+- <widget class="QDialog" name="ChangePwdDialog">
+-  <property name="geometry">
+-   <rect>
+-    <x>0</x>
+-    <y>0</y>
+-    <width>420</width>
+-    <height>412</height>
+-   </rect>
+-  </property>
+-  <property name="sizePolicy">
+-   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-    <horstretch>0</horstretch>
+-    <verstretch>0</verstretch>
+-   </sizepolicy>
+-  </property>
+-  <property name="minimumSize">
+-   <size>
+-    <width>420</width>
+-    <height>412</height>
+-   </size>
+-  </property>
+-  <property name="maximumSize">
+-   <size>
+-    <width>420</width>
+-    <height>456</height>
+-   </size>
+-  </property>
+-  <property name="windowTitle">
+-   <string notr="true">Change Pwd</string>
+-  </property>
+-  <layout class="QVBoxLayout" name="verticalLayout_2">
+-   <property name="spacing">
+-    <number>0</number>
+-   </property>
+-   <property name="leftMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="topMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="rightMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="bottomMargin">
+-    <number>0</number>
+-   </property>
+-   <item>
+-    <widget class="QFrame" name="frame">
+-     <property name="sizePolicy">
+-      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+-       <horstretch>0</horstretch>
+-       <verstretch>0</verstretch>
+-      </sizepolicy>
+-     </property>
+-     <property name="minimumSize">
+-      <size>
+-       <width>420</width>
+-       <height>412</height>
+-      </size>
+-     </property>
+-     <property name="maximumSize">
+-      <size>
+-       <width>424</width>
+-       <height>456</height>
+-      </size>
+-     </property>
+-     <property name="frameShape">
+-      <enum>QFrame::NoFrame</enum>
+-     </property>
+-     <property name="frameShadow">
+-      <enum>QFrame::Raised</enum>
+-     </property>
+-     <layout class="QVBoxLayout" name="verticalLayout">
+-      <property name="spacing">
+-       <number>0</number>
+-      </property>
+-      <property name="leftMargin">
+-       <number>32</number>
+-      </property>
+-      <property name="topMargin">
+-       <number>32</number>
+-      </property>
+-      <property name="rightMargin">
+-       <number>32</number>
+-      </property>
+-      <property name="bottomMargin">
+-       <number>8</number>
+-      </property>
+-      <item>
+-       <layout class="QHBoxLayout" name="horizontalLayout_2">
+-        <property name="spacing">
+-         <number>0</number>
+-        </property>
+-        <property name="sizeConstraint">
+-         <enum>QLayout::SetDefaultConstraint</enum>
+-        </property>
+-        <property name="leftMargin">
+-         <number>0</number>
+-        </property>
+-        <property name="topMargin">
+-         <number>0</number>
+-        </property>
+-        <property name="rightMargin">
+-         <number>0</number>
+-        </property>
+-        <item>
+-         <widget class="TitleLabel" name="titleLabel">
+-          <property name="sizePolicy">
+-           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+-            <horstretch>0</horstretch>
+-            <verstretch>0</verstretch>
+-           </sizepolicy>
+-          </property>
+-          <property name="minimumSize">
+-           <size>
+-            <width>0</width>
+-            <height>36</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>16777215</width>
+-            <height>36</height>
+-           </size>
+-          </property>
+-          <property name="text">
+-           <string>Change Pwd</string>
+-          </property>
+-          <property name="alignment">
+-           <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+-          </property>
+-         </widget>
+-        </item>
+-        <item>
+-         <spacer name="horizontalSpacer_4">
+-          <property name="orientation">
+-           <enum>Qt::Horizontal</enum>
+-          </property>
+-          <property name="sizeHint" stdset="0">
+-           <size>
+-            <width>401</width>
+-            <height>33</height>
+-           </size>
+-          </property>
+-         </spacer>
+-        </item>
+-       </layout>
+-      </item>
+-      <item>
+-       <layout class="QVBoxLayout" name="verticalLayout_4">
+-        <property name="spacing">
+-         <number>0</number>
+-        </property>
+-        <property name="leftMargin">
+-         <number>0</number>
+-        </property>
+-        <property name="topMargin">
+-         <number>0</number>
+-        </property>
+-        <property name="rightMargin">
+-         <number>0</number>
+-        </property>
+-        <property name="bottomMargin">
+-         <number>0</number>
+-        </property>
+-        <item>
+-         <layout class="QHBoxLayout" name="horizontalLayout_4">
+-          <property name="spacing">
+-           <number>16</number>
+-          </property>
+-          <property name="rightMargin">
+-           <number>0</number>
+-          </property>
+-          <item>
+-           <widget class="QLabel" name="faceLabel">
+-            <property name="sizePolicy">
+-             <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+-              <horstretch>0</horstretch>
+-              <verstretch>0</verstretch>
+-             </sizepolicy>
+-            </property>
+-            <property name="minimumSize">
+-             <size>
+-              <width>48</width>
+-              <height>48</height>
+-             </size>
+-            </property>
+-            <property name="maximumSize">
+-             <size>
+-              <width>48</width>
+-              <height>48</height>
+-             </size>
+-            </property>
+-            <property name="text">
+-             <string/>
+-            </property>
+-            <property name="scaledContents">
+-             <bool>true</bool>
+-            </property>
+-           </widget>
+-          </item>
+-          <item>
+-           <layout class="QVBoxLayout" name="verticalLayout_8">
+-            <property name="spacing">
+-             <number>3</number>
+-            </property>
+-            <item alignment="Qt::AlignBottom">
+-             <widget class="QLabel" name="usernameLabel">
+-              <property name="sizePolicy">
+-               <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+-                <horstretch>0</horstretch>
+-                <verstretch>0</verstretch>
+-               </sizepolicy>
+-              </property>
+-              <property name="text">
+-               <string/>
+-              </property>
+-             </widget>
+-            </item>
+-            <item alignment="Qt::AlignTop">
+-             <widget class="QLabel" name="aTypeLabel">
+-              <property name="sizePolicy">
+-               <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+-                <horstretch>0</horstretch>
+-                <verstretch>0</verstretch>
+-               </sizepolicy>
+-              </property>
+-              <property name="text">
+-               <string/>
+-              </property>
+-             </widget>
+-            </item>
+-           </layout>
+-          </item>
+-          <item>
+-           <spacer name="horizontalSpacer_6">
+-            <property name="orientation">
+-             <enum>Qt::Horizontal</enum>
+-            </property>
+-            <property name="sizeHint" stdset="0">
+-             <size>
+-              <width>40</width>
+-              <height>20</height>
+-             </size>
+-            </property>
+-           </spacer>
+-          </item>
+-         </layout>
+-        </item>
+-        <item>
+-         <widget class="QWidget" name="widget" native="true">
+-          <property name="sizePolicy">
+-           <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
+-            <horstretch>0</horstretch>
+-            <verstretch>0</verstretch>
+-           </sizepolicy>
+-          </property>
+-          <layout class="QVBoxLayout" name="verticalLayout_11">
+-           <property name="spacing">
+-            <number>0</number>
+-           </property>
+-           <property name="leftMargin">
+-            <number>0</number>
+-           </property>
+-           <property name="topMargin">
+-            <number>0</number>
+-           </property>
+-           <property name="rightMargin">
+-            <number>0</number>
+-           </property>
+-           <property name="bottomMargin">
+-            <number>0</number>
+-           </property>
+-           <item>
+-            <layout class="QVBoxLayout" name="verticalLayout_10">
+-             <property name="spacing">
+-              <number>8</number>
+-             </property>
+-             <property name="leftMargin">
+-              <number>0</number>
+-             </property>
+-             <property name="topMargin">
+-              <number>32</number>
+-             </property>
+-             <property name="rightMargin">
+-              <number>0</number>
+-             </property>
+-             <property name="bottomMargin">
+-              <number>0</number>
+-             </property>
+-             <item>
+-              <layout class="QHBoxLayout" name="horizontalLayout_5">
+-               <item>
+-                <widget class="QLabel" name="label_5">
+-                 <property name="sizePolicy">
+-                  <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+-                   <horstretch>0</horstretch>
+-                   <verstretch>0</verstretch>
+-                  </sizepolicy>
+-                 </property>
+-                 <property name="minimumSize">
+-                  <size>
+-                   <width>104</width>
+-                   <height>0</height>
+-                  </size>
+-                 </property>
+-                 <property name="maximumSize">
+-                  <size>
+-                   <width>16777215</width>
+-                   <height>16777215</height>
+-                  </size>
+-                 </property>
+-                 <property name="text">
+-                  <string>Pwd type</string>
+-                 </property>
+-                </widget>
+-               </item>
+-               <item>
+-                <widget class="QFrame" name="pwdFrame">
+-                 <property name="minimumSize">
+-                  <size>
+-                   <width>0</width>
+-                   <height>0</height>
+-                  </size>
+-                 </property>
+-                 <property name="maximumSize">
+-                  <size>
+-                   <width>16777215</width>
+-                   <height>16777215</height>
+-                  </size>
+-                 </property>
+-                 <property name="frameShape">
+-                  <enum>QFrame::StyledPanel</enum>
+-                 </property>
+-                 <property name="frameShadow">
+-                  <enum>QFrame::Raised</enum>
+-                 </property>
+-                 <layout class="QHBoxLayout" name="horizontalLayout_8">
+-                  <property name="spacing">
+-                   <number>0</number>
+-                  </property>
+-                  <property name="leftMargin">
+-                   <number>0</number>
+-                  </property>
+-                  <property name="topMargin">
+-                   <number>0</number>
+-                  </property>
+-                  <property name="rightMargin">
+-                   <number>0</number>
+-                  </property>
+-                  <property name="bottomMargin">
+-                   <number>0</number>
+-                  </property>
+-                  <item>
+-                   <widget class="QLabel" name="pwdtypeComboBox">
+-                    <property name="sizePolicy">
+-                     <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+-                      <horstretch>0</horstretch>
+-                      <verstretch>0</verstretch>
+-                     </sizepolicy>
+-                    </property>
+-                    <property name="text">
+-                     <string/>
+-                    </property>
+-                   </widget>
+-                  </item>
+-                 </layout>
+-                </widget>
+-               </item>
+-              </layout>
+-             </item>
+-             <item>
+-              <layout class="QHBoxLayout" name="horizontalLayout_9">
+-               <property name="topMargin">
+-                <number>0</number>
+-               </property>
+-               <item>
+-                <widget class="QLabel" name="label">
+-                 <property name="minimumSize">
+-                  <size>
+-                   <width>104</width>
+-                   <height>0</height>
+-                  </size>
+-                 </property>
+-                 <property name="maximumSize">
+-                  <size>
+-                   <width>104</width>
+-                   <height>16777215</height>
+-                  </size>
+-                 </property>
+-                 <property name="text">
+-                  <string>Cur pwd</string>
+-                 </property>
+-                </widget>
+-               </item>
+-               <item>
+-                <widget class="QLineEdit" name="curPwdLineEdit">
+-                 <property name="minimumSize">
+-                  <size>
+-                   <width>0</width>
+-                   <height>36</height>
+-                  </size>
+-                 </property>
+-                 <property name="maximumSize">
+-                  <size>
+-                   <width>16777215</width>
+-                   <height>36</height>
+-                  </size>
+-                 </property>
+-                </widget>
+-               </item>
+-              </layout>
+-             </item>
+-             <item>
+-              <layout class="QHBoxLayout" name="horizontalLayout_6">
+-               <item>
+-                <widget class="QLabel" name="pwdLabel">
+-                 <property name="sizePolicy">
+-                  <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+-                   <horstretch>0</horstretch>
+-                   <verstretch>0</verstretch>
+-                  </sizepolicy>
+-                 </property>
+-                 <property name="minimumSize">
+-                  <size>
+-                   <width>104</width>
+-                   <height>0</height>
+-                  </size>
+-                 </property>
+-                 <property name="maximumSize">
+-                  <size>
+-                   <width>104</width>
+-                   <height>16777215</height>
+-                  </size>
+-                 </property>
+-                 <property name="text">
+-                  <string>New pwd</string>
+-                 </property>
+-                </widget>
+-               </item>
+-               <item>
+-                <widget class="QLineEdit" name="pwdLineEdit">
+-                 <property name="minimumSize">
+-                  <size>
+-                   <width>0</width>
+-                   <height>36</height>
+-                  </size>
+-                 </property>
+-                 <property name="maximumSize">
+-                  <size>
+-                   <width>16777215</width>
+-                   <height>36</height>
+-                  </size>
+-                 </property>
+-                </widget>
+-               </item>
+-              </layout>
+-             </item>
+-             <item>
+-              <layout class="QHBoxLayout" name="horizontalLayout_7">
+-               <item>
+-                <widget class="QLabel" name="pwdsureLabel">
+-                 <property name="sizePolicy">
+-                  <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                   <horstretch>0</horstretch>
+-                   <verstretch>0</verstretch>
+-                  </sizepolicy>
+-                 </property>
+-                 <property name="minimumSize">
+-                  <size>
+-                   <width>104</width>
+-                   <height>0</height>
+-                  </size>
+-                 </property>
+-                 <property name="maximumSize">
+-                  <size>
+-                   <width>16777215</width>
+-                   <height>16777215</height>
+-                  </size>
+-                 </property>
+-                 <property name="text">
+-                  <string>New pwd sure</string>
+-                 </property>
+-                </widget>
+-               </item>
+-               <item>
+-                <widget class="QLineEdit" name="pwdsureLineEdit">
+-                 <property name="minimumSize">
+-                  <size>
+-                   <width>0</width>
+-                   <height>36</height>
+-                  </size>
+-                 </property>
+-                 <property name="maximumSize">
+-                  <size>
+-                   <width>16777215</width>
+-                   <height>36</height>
+-                  </size>
+-                 </property>
+-                </widget>
+-               </item>
+-              </layout>
+-             </item>
+-             <item>
+-              <layout class="QHBoxLayout" name="horizontalLayout_3">
+-               <property name="spacing">
+-                <number>0</number>
+-               </property>
+-               <property name="leftMargin">
+-                <number>0</number>
+-               </property>
+-               <item>
+-                <widget class="QLabel" name="tipLabel">
+-                 <property name="sizePolicy">
+-                  <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+-                   <horstretch>0</horstretch>
+-                   <verstretch>0</verstretch>
+-                  </sizepolicy>
+-                 </property>
+-                 <property name="minimumSize">
+-                  <size>
+-                   <width>0</width>
+-                   <height>28</height>
+-                  </size>
+-                 </property>
+-                 <property name="maximumSize">
+-                  <size>
+-                   <width>16777215</width>
+-                   <height>28</height>
+-                  </size>
+-                 </property>
+-                 <property name="text">
+-                  <string/>
+-                 </property>
+-                 <property name="alignment">
+-                  <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+-                 </property>
+-                </widget>
+-               </item>
+-              </layout>
+-             </item>
+-            </layout>
+-           </item>
+-          </layout>
+-         </widget>
+-        </item>
+-        <item>
+-         <spacer name="verticalSpacer_2">
+-          <property name="orientation">
+-           <enum>Qt::Vertical</enum>
+-          </property>
+-          <property name="sizeType">
+-           <enum>QSizePolicy::Expanding</enum>
+-          </property>
+-          <property name="sizeHint" stdset="0">
+-           <size>
+-            <width>20</width>
+-            <height>24</height>
+-           </size>
+-          </property>
+-         </spacer>
+-        </item>
+-        <item>
+-         <layout class="QHBoxLayout" name="horizontalLayout">
+-          <property name="spacing">
+-           <number>8</number>
+-          </property>
+-          <property name="topMargin">
+-           <number>0</number>
+-          </property>
+-          <property name="rightMargin">
+-           <number>0</number>
+-          </property>
+-          <item>
+-           <spacer name="horizontalSpacer">
+-            <property name="orientation">
+-             <enum>Qt::Horizontal</enum>
+-            </property>
+-            <property name="sizeHint" stdset="0">
+-             <size>
+-              <width>40</width>
+-              <height>20</height>
+-             </size>
+-            </property>
+-           </spacer>
+-          </item>
+-          <item>
+-           <widget class="QPushButton" name="cancelPushBtn">
+-            <property name="minimumSize">
+-             <size>
+-              <width>120</width>
+-              <height>36</height>
+-             </size>
+-            </property>
+-            <property name="maximumSize">
+-             <size>
+-              <width>120</width>
+-              <height>36</height>
+-             </size>
+-            </property>
+-            <property name="text">
+-             <string>Cancel</string>
+-            </property>
+-            <property name="flat">
+-             <bool>false</bool>
+-            </property>
+-           </widget>
+-          </item>
+-          <item>
+-           <widget class="QPushButton" name="confirmPushBtn">
+-            <property name="minimumSize">
+-             <size>
+-              <width>120</width>
+-              <height>36</height>
+-             </size>
+-            </property>
+-            <property name="maximumSize">
+-             <size>
+-              <width>120</width>
+-              <height>36</height>
+-             </size>
+-            </property>
+-            <property name="text">
+-             <string>Confirm</string>
+-            </property>
+-           </widget>
+-          </item>
+-         </layout>
+-        </item>
+-       </layout>
+-      </item>
+-      <item>
+-       <spacer name="verticalSpacer_4">
+-        <property name="orientation">
+-         <enum>Qt::Vertical</enum>
+-        </property>
+-        <property name="sizeType">
+-         <enum>QSizePolicy::Fixed</enum>
+-        </property>
+-        <property name="sizeHint" stdset="0">
+-         <size>
+-          <width>20</width>
+-          <height>20</height>
+-         </size>
+-        </property>
+-       </spacer>
+-      </item>
+-     </layout>
+-    </widget>
+-   </item>
+-  </layout>
+- </widget>
+- <customwidgets>
+-  <customwidget>
+-   <class>TitleLabel</class>
+-   <extends>QLabel</extends>
+-   <header location="global">/usr/include/ukcc/widgets//titlelabel.h</header>
+-  </customwidget>
+- </customwidgets>
+- <resources/>
+- <connections/>
+-</ui>
+diff --git a/biometric-plugin/qrcodeenroll.cpp b/biometric-plugin/qrcodeenroll.cpp
+index 41227fc..8ffc1b6 100644
+--- a/biometric-plugin/qrcodeenroll.cpp
++++ b/biometric-plugin/qrcodeenroll.cpp
+@@ -25,7 +25,6 @@
+ #include <unistd.h>
+ #include <opencv2/opencv.hpp>
+ #include <QDBusAbstractInterface>
+-#include "ukcc/widgets/closebutton.h"
+ #include "biometricdeviceinfo.h"
+ #include "biometricproxy.h"
+ #include "servicemanager.h"
+diff --git a/biometric-plugin/qrcodeenroll.h b/biometric-plugin/qrcodeenroll.h
+index 3e10ffb..25a1cdd 100644
+--- a/biometric-plugin/qrcodeenroll.h
++++ b/biometric-plugin/qrcodeenroll.h
+@@ -39,9 +39,6 @@
+ #include "kalabel.h"
+ #include "biometricdeviceinfo.h"
+ 
+-#include <ukcc/widgets/hoverwidget.h>
+-
+-
+ /**
+  * @brief UpdateStauts调用返回的结果
+  */
diff -Nru ukui-biometric-manager-4.10.0.0/debian/patches/series ukui-biometric-manager-4.10.0.0/debian/patches/series
--- ukui-biometric-manager-4.10.0.0/debian/patches/series	2024-08-19 17:44:17.000000000 +0800
+++ ukui-biometric-manager-4.10.0.0/debian/patches/series	2025-01-21 11:22:30.000000000 +0800
@@ -19,3 +19,5 @@
 0019-21-bug-I9IU27.patch
 0020-update-biometric-manager-data-biometric-manager.desk.patch
 0021-23.patch
+0022-Translated-using-Weblate-Mongolian.patch
+0023-changelog.patch