@@ -35,9 +35,10 @@ using namespace dfmplugin_diskenc;
3535using namespace disk_encrypt ;
3636
3737static constexpr char kActIDEncrypt [] { " de_0_encrypt" };
38- static constexpr char kActIDResume [] { " de_0_resume " };
38+ static constexpr char kActIDResumeEncrypt [] { " de_0_resumeEncrypt " };
3939static constexpr char kActIDUnlock [] { " de_0_unlock" };
4040static constexpr char kActIDDecrypt [] { " de_1_decrypt" };
41+ static constexpr char kActIDResumeDecrypt [] { " de_1_resumeDecrypt" };
4142static constexpr char kActIDChangePwd [] { " de_2_changePwd" };
4243
4344DiskEncryptMenuScene::DiskEncryptMenuScene (QObject *parent)
@@ -145,8 +146,12 @@ bool DiskEncryptMenuScene::create(QMenu *)
145146 actions.insert (kActIDChangePwd , act);
146147
147148 act = new QAction (tr (" Continue partition encryption" ));
148- act->setProperty (ActionPropertyKey::kActionID , kActIDResume );
149- actions.insert (kActIDResume , act);
149+ act->setProperty (ActionPropertyKey::kActionID , kActIDResumeEncrypt );
150+ actions.insert (kActIDResumeEncrypt , act);
151+
152+ act = new QAction (tr (" Continue partition decryption" ));
153+ act->setProperty (ActionPropertyKey::kActionID , kActIDResumeDecrypt );
154+ actions.insert (kActIDResumeDecrypt , act);
150155
151156 act = new QAction (tr (" Enable partition encryption" ));
152157 act->setProperty (ActionPropertyKey::kActionID , kActIDEncrypt );
@@ -161,9 +166,9 @@ bool DiskEncryptMenuScene::triggered(QAction *action)
161166
162167 if (actID == kActIDEncrypt ) {
163168 encryptDevice (param);
164- } else if (actID == kActIDResume ) {
169+ } else if (actID == kActIDResumeEncrypt ) {
165170 EventsHandler::instance ()->resumeEncrypt (param.devDesc );
166- } else if (actID == kActIDDecrypt ) {
171+ } else if (actID == kActIDDecrypt || actID == kActIDResumeDecrypt ) {
167172 QString displayName = QString (" %1(%2)" ).arg (param.deviceDisplayName ).arg (param.devDesc .mid (5 ));
168173 if (dialog_utils::showConfirmDecryptionDialog (displayName, param.initOnly ) != QDialog::Accepted)
169174 return true ;
@@ -593,22 +598,47 @@ void DiskEncryptMenuScene::updateActions()
593598 act->setEnabled (false );
594599 });
595600
601+ // update operatable
602+ bool taskWorking = EventsHandler::instance ()->isTaskWorking ();
603+ bool currDevOperating = EventsHandler::instance ()->isUnderOperating (param.devDesc );
604+ bool hasPendingJob = EventsHandler::instance ()->hasPendingTask ();
605+ actions[kActIDEncrypt ]->setEnabled (!taskWorking && !hasPendingJob);
606+ actions[kActIDDecrypt ]->setEnabled (!taskWorking && !hasPendingJob && !currDevOperating);
607+ actions[kActIDChangePwd ]->setEnabled (!taskWorking);
608+ actions[kActIDResumeEncrypt ]->setEnabled (!taskWorking && !currDevOperating);
609+ actions[kActIDUnlock ]->setEnabled (!currDevOperating);
610+
596611 // update visibility
597612 if (hasCryptHeader) {
598- bool unlocked = selectedItemInfo.value (" CleartextDevice" ).toString () != " /" ;
599613 int states = EventsHandler::instance ()->deviceEncryptStatus (param.devDesc );
600- if (states & kStatusFinished ) { // fully encrypted
614+ // fully encrypted
615+ if (states & kStatusFinished ) {
616+ bool unlocked = selectedItemInfo.value (" CleartextDevice" ).toString () != " /" ;
601617 actions[kActIDDecrypt ]->setVisible (true );
602618 actions[kActIDUnlock ]->setVisible (!unlocked);
603619 if (param.type != disk_encrypt::kTPMOnly )
604620 actions[kActIDChangePwd ]->setVisible (true );
605- } else if (states & (kStatusOnline | kStatusEncrypt )) { // not fully encrypted
606- if (states & kStatusNoEncryptConfig ) {
607- param.isDetachedHeader = true ;
608- actions[kActIDEncrypt ]->setVisible (true );
609- } else {
610- param.isDetachedHeader = false ;
611- actions[kActIDResume ]->setVisible (true );
621+ }
622+ // not finished
623+ else if (states & kStatusOnline ) {
624+ // encrytp not finish
625+ if (states & kStatusEncrypt ) {
626+ if (states & kStatusNoEncryptConfig ) {
627+ param.isDetachedHeader = true ;
628+ actions[kActIDEncrypt ]->setVisible (true );
629+ } else {
630+ param.isDetachedHeader = false ;
631+ actions[kActIDResumeEncrypt ]->setVisible (true );
632+ }
633+ }
634+ // decrypt not finish
635+ else if (states & kStatusDecrypt ) {
636+ actions[kActIDDecrypt ]->setVisible (false );
637+ actions[kActIDResumeDecrypt ]->setVisible (true );
638+
639+ actions[kActIDResumeDecrypt ]->setEnabled (true );
640+ actions[kActIDChangePwd ]->setEnabled (false );
641+ actions[kActIDUnlock ]->setEnabled (false );
612642 }
613643 } else {
614644 qWarning () << " unmet status!" << param.devDesc << states;
@@ -617,16 +647,6 @@ void DiskEncryptMenuScene::updateActions()
617647 actions[kActIDEncrypt ]->setVisible (true );
618648 }
619649
620- // update operatable
621- bool taskWorking = EventsHandler::instance ()->isTaskWorking ();
622- bool currDevOperating = EventsHandler::instance ()->isUnderOperating (param.devDesc );
623- bool hasPendingJob = EventsHandler::instance ()->hasPendingTask ();
624- actions[kActIDEncrypt ]->setEnabled (!taskWorking && !hasPendingJob);
625- actions[kActIDDecrypt ]->setEnabled (!taskWorking && !hasPendingJob && !currDevOperating);
626- actions[kActIDChangePwd ]->setEnabled (!taskWorking);
627- actions[kActIDResume ]->setEnabled (!taskWorking && !currDevOperating);
628- actions[kActIDUnlock ]->setEnabled (!currDevOperating);
629-
630650 QString dev = param.devDesc ;
631651 QString fileName = kRebootFlagFilePrefix + dev.replace (" /" , " _" );
632652 QFile rebootFlag (fileName);
0 commit comments