diff -r 773449708c84 -r 4ad59aaee882 javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/InstallerUiEswt.java --- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/InstallerUiEswt.java Thu Sep 02 20:20:40 2010 +0300 +++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/InstallerUiEswt.java Fri Sep 17 08:28:21 2010 +0300 @@ -104,6 +104,9 @@ /** Flag telling if the first progress bar update has been traced. */ private boolean iProgressBarUpdateTraced = false; + /** Certificate details view, owned by the view where it was opened. */ + private CertificateDetailsView iCertificateDetailsView = null; + /** Hashtable for storing the loaded icons. */ private static Hashtable iImageTable = null; /** Best size for application icon. */ @@ -253,6 +256,10 @@ public void cancelConfirmations() { super.cancelConfirmations(); + if (iCertificateDetailsView != null) + { + iCertificateDetailsView.confirmCancel(); + } if (iInstallConfirmationView != null) { iInstallConfirmationView.confirmCancel(); @@ -390,6 +397,9 @@ return true; } + // Ensure that UI is visible when this prompt is displayed. + unhide(); + synchronized (iProgressSyncObject) { // Do not display progress bar during dialog. @@ -471,7 +481,8 @@ // do not display installation progress. return; } - if (iDisplayProgress && !iProgressView.isVisible()) + if (iDisplayProgress && !iProgressView.isVisible() && + iCertificateDetailsView == null) { // Re-create iProgressView here so that it gets // application info that was set when confirm() @@ -605,7 +616,8 @@ synchronized (iProgressSyncObject) { - if (iDisplayProgress && !iDlProgressView.isVisible()) + if (iDisplayProgress && !iDlProgressView.isVisible() && + iCertificateDetailsView == null) { iDlProgressView.setVisible(true); } @@ -641,7 +653,8 @@ } synchronized (iProgressSyncObject) { - if (iDisplayProgress && !iProgressView.isVisible()) + if (iDisplayProgress && !iProgressView.isVisible() && + iCertificateDetailsView == null) { iProgressView.setVisible(true); } @@ -682,7 +695,8 @@ } if (iOcspProgressView != null) { - if (!iOcspProgressView.isVisible()) + if (!iOcspProgressView.isVisible() && + iCertificateDetailsView == null) { iOcspProgressView.setVisible(true); } @@ -761,7 +775,8 @@ if (DISABLE_UI) return; // Disable UI temporarily. waitForUi(); - if (!isUiReady()) { + waitForCertificateDetailsView(); + if (!isUiReady() || iHidden || iConfirmationsCanceled) { return; } @@ -821,6 +836,14 @@ if (!isUiReady()) { return true; } + waitForCertificateDetailsView(); + if (iConfirmationsCanceled) + { + return false; + } + + // Ensure that UI is visible when this prompt is displayed. + unhide(); if (iRuntimeConfirmationView == null) { @@ -857,11 +880,15 @@ { if (DISABLE_UI) return new String[] { "", "" }; // Disable UI temporarily. waitForUi(); - if (!isUiReady()) + waitForCertificateDetailsView(); + if (!isUiReady() || iConfirmationsCanceled) { return null; } + // Ensure that UI is visible when this prompt is displayed. + unhide(); + synchronized (iProgressSyncObject) { // Do not display progress bar during dialog. @@ -913,10 +940,13 @@ { if (DISABLE_UI) return false; // Disable UI temporarily. waitForUi(); - if (!isUiReady() || iConfirmationsCanceled || getInstallInfo() == null) + waitForCertificateDetailsView(); + if (!isUiReady() || iConfirmationsCanceled || + iHidden || getInstallInfo() == null) { - // Either UI is not yet ready, or user has cancelled - // installation, in both cases do nothing. + // Either UI is not yet ready, user has cancelled + // installation or UI is hidden; in all these cases + // do nothing. return false; } @@ -954,7 +984,10 @@ */ public void syncExec(Runnable aRunnable) { - iParent.getDisplay().syncExec(aRunnable); + if (!iParent.getDisplay().isDisposed()) + { + iParent.getDisplay().syncExec(aRunnable); + } } /** @@ -962,14 +995,14 @@ */ public void hide(boolean aHide) { - final boolean hide = aHide; - if (iParent != null) + iHidden = aHide; + if (iDialog != null) { - iParent.getDisplay().syncExec(new Runnable() + iDialog.getDisplay().syncExec(new Runnable() { public void run() { - iParent.setMinimized(hide); + iDialog.setMinimized(iHidden); } }); } @@ -988,6 +1021,45 @@ } /** + * Sets flag telling if certificate details view is open. + */ + protected void setCertificateDetailsView(CertificateDetailsView aView) + { + if (iCertificateDetailsView != null && aView == null) + { + // Certificate details view has been closed, + // notify possible waiters. + synchronized (iCertificateDetailsView) + { + iCertificateDetailsView.notify(); + } + } + iCertificateDetailsView = aView; + } + + /** + * Waits until certificate details view is closed. + */ + protected void waitForCertificateDetailsView() + { + if (iCertificateDetailsView != null) + { + // If certificate details view is open, wait until + // user closes it. + synchronized (iCertificateDetailsView) + { + try + { + iCertificateDetailsView.wait(); + } + catch (InterruptedException ie) + { + } + } + } + } + + /** * Returns string title basing on mode of this InstallerUi. */ protected String getTitle()