use of com.android.tools.idea.wizard.model.ModelWizardDialog in project android by JetBrains.
the class InstallCMakeHyperlink method execute.
@Override
protected void execute(@NotNull Project project) {
// We need to statically fetch the SDK handler each time because the location might change.
// TODO: remove the need for doing this each time.
AndroidSdkHandler sdkHandler = AndroidSdks.getInstance().tryToChooseSdkHandler();
StudioLoggerProgressIndicator progressIndicator = new StudioLoggerProgressIndicator(getClass());
RepoManager sdkManager = sdkHandler.getSdkManager(progressIndicator);
StudioProgressRunner progressRunner = new StudioProgressRunner(false, /* backgroundable */
false, /* cancellable */
"Loading Remote SDK", true, /* in UI thread */
project);
RepoManager.RepoLoadedCallback onComplete = packages -> {
Collection<RemotePackage> cmakePackages = packages.getRemotePackagesForPrefix(FD_CMAKE);
if (!cmakePackages.isEmpty()) {
RemotePackage cmakePackage;
if (cmakePackages.size() == 1) {
cmakePackage = getFirstItem(cmakePackages);
} else {
cmakePackage = sdkHandler.getLatestRemotePackageForPrefix(FD_CMAKE, false, progressIndicator);
}
if (cmakePackage != null) {
ModelWizardDialog dialog = createDialogForPaths(project, ImmutableList.of(cmakePackage.getPath()));
if (dialog != null && dialog.showAndGet()) {
GradleSyncInvoker.getInstance().requestProjectSyncAndSourceGeneration(project, null);
}
return;
}
notifyCMakePackageNotFound(project);
}
};
Runnable onError = () -> notifyCMakePackageNotFound(project);
sdkManager.load(DEFAULT_EXPIRATION_PERIOD_MS, null, ImmutableList.of(onComplete), ImmutableList.of(onError), progressRunner, new StudioDownloader(), StudioSettingsController.getInstance(), false);
}
use of com.android.tools.idea.wizard.model.ModelWizardDialog in project android by JetBrains.
the class InstallNdkHyperlink method execute.
@Override
protected void execute(@NotNull Project project) {
File path = getNdkPath(project);
if (path != null) {
// Try to install SDK in local.properties.
SelectNdkDialog dialog = new SelectNdkDialog(path.getPath(), false, true);
dialog.setModal(true);
if (dialog.showAndGet() && setNdkPath(project, dialog.getAndroidNdkPath())) {
// Saving NDK path is successful.
GradleSyncInvoker.getInstance().requestProjectSyncAndSourceGeneration(project, null);
}
return;
}
// There is no path. Try installing from SDK.
AndroidSdkHandler sdkHandler = AndroidSdks.getInstance().tryToChooseSdkHandler();
StudioLoggerProgressIndicator progressIndicator = new StudioLoggerProgressIndicator(getClass());
RepoManager sdkManager = sdkHandler.getSdkManager(progressIndicator);
StudioProgressRunner progressRunner = new StudioProgressRunner(false, /* backgroundable */
false, /* cancellable */
"Loading Remote SDK", true, /* in UI thread */
project);
RepoManager.RepoLoadedCallback onComplete = packages -> {
Map<String, RemotePackage> remotePackages = packages.getRemotePackages();
RemotePackage ndkPackage = remotePackages.get(FD_NDK);
if (ndkPackage != null) {
ModelWizardDialog dialog = createDialogForPaths(project, ImmutableList.of(ndkPackage.getPath()));
if (dialog != null && dialog.showAndGet()) {
GradleSyncInvoker.getInstance().requestProjectSyncAndSourceGeneration(project, null);
}
return;
}
notifyNdkPackageNotFound(project);
};
Runnable onError = () -> notifyNdkPackageNotFound(project);
sdkManager.load(DEFAULT_EXPIRATION_PERIOD_MS, null, ImmutableList.of(onComplete), ImmutableList.of(onError), progressRunner, new StudioDownloader(), StudioSettingsController.getInstance(), false);
}
use of com.android.tools.idea.wizard.model.ModelWizardDialog in project android by JetBrains.
the class InstallRepositoryHyperlink method execute.
@Override
protected void execute(@NotNull Project project) {
List<String> requested = Lists.newArrayList();
requested.add(myRepository.getPackageId());
ModelWizardDialog dialog = SdkQuickfixUtils.createDialogForPaths(project, requested);
if (dialog != null) {
dialog.setTitle("Install Missing Components");
if (dialog.showAndGet()) {
GradleSyncInvoker.getInstance().requestProjectSyncAndSourceGeneration(project, null);
}
}
}
use of com.android.tools.idea.wizard.model.ModelWizardDialog in project android by JetBrains.
the class ModuleDependenciesPanel method installRepositoryIfNeeded.
private String installRepositoryIfNeeded(String coordinateText) {
GradleCoordinate gradleCoordinate = GradleCoordinate.parseCoordinateString(coordinateText);
// Only allowed to click ok when the string is valid.
assert gradleCoordinate != null;
SupportLibrary supportLibrary = SupportLibrary.forGradleCoordinate(gradleCoordinate);
if (!REVISION_ANY.equals(gradleCoordinate.getRevision()) || supportLibrary == null) {
// No installation needed, or it's not a local repository.
return coordinateText;
}
String message = "Library " + gradleCoordinate.getArtifactId() + " is not installed. Install repository?";
if (Messages.showYesNoDialog(myProject, message, "Install Repository", Messages.getQuestionIcon()) != Messages.YES) {
// User cancelled installation.
return null;
}
List<String> requested = Lists.newArrayList();
SdkMavenRepository repository;
if (coordinateText.startsWith("com.android.support")) {
repository = SdkMavenRepository.ANDROID;
} else if (coordinateText.startsWith("com.google.android")) {
repository = SdkMavenRepository.GOOGLE;
} else {
// EXTRAS_REPOSITORY.containsKey() should have returned false.
assert false;
return coordinateText + ':' + REVISION_ANY;
}
requested.add(repository.getPackageId());
ModelWizardDialog dialog = SdkQuickfixUtils.createDialogForPaths(myProject, requested);
if (dialog != null) {
dialog.setTitle("Install Missing Components");
if (dialog.showAndGet()) {
return RepositoryUrlManager.get().getLibraryStringCoordinate(supportLibrary, true);
}
}
// Installation wizard didn't complete - skip adding the dependency.
return null;
}
use of com.android.tools.idea.wizard.model.ModelWizardDialog in project android by JetBrains.
the class InstallTask method showPrepareCompleteNotification.
private void showPrepareCompleteNotification(@NotNull final Collection<RepoPackage> packages) {
final NotificationListener notificationListener = new NotificationListener.Adapter() {
@Override
protected void hyperlinkActivated(@NotNull Notification notification, @NotNull HyperlinkEvent event) {
if ("install".equals(event.getDescription())) {
ModelWizardDialog dialogForPaths = SdkQuickfixUtils.createDialogForPackages(null, myInstallRequests, myUninstallRequests, false);
if (dialogForPaths != null) {
dialogForPaths.show();
}
}
notification.expire();
}
};
final NotificationGroup group = new NotificationGroup("SDK Installer", NotificationDisplayType.STICKY_BALLOON, false);
Project[] openProjects = ProjectManager.getInstance().getOpenProjects();
final Project[] openProjectsOrNull = openProjects.length == 0 ? new Project[] { null } : openProjects;
ApplicationManager.getApplication().invokeLater(() -> {
for (Project p : openProjectsOrNull) {
String message;
if (packages.size() == 1) {
RepoPackage pack = packages.iterator().next();
PackageOperation op = myRepoManager.getInProgressInstallOperation(pack);
// op shouldn't be null. But just in case, we assume it's an install.
String opName = op == null || op instanceof Installer ? "Install" : "Uninstall";
message = String.format("%1$sation of '%2$s' is ready to continue<br/><a href=\"install\">%1$s Now</a>", opName, pack.getDisplayName());
} else {
message = packages.size() + " packages are ready to install or uninstall<br/><a href=\"install\">Continue</a>";
}
group.createNotification("SDK Install", message, NotificationType.INFORMATION, notificationListener).notify(p);
}
}, // Don't show while we're in a modal context (e.g. sdk manager)
ModalityState.NON_MODAL, o -> {
for (RepoPackage pack : packages) {
PackageOperation installer = myRepoManager.getInProgressInstallOperation(pack);
if (installer != null && installer.getInstallStatus() == PackageOperation.InstallStatus.PREPARED) {
return false;
}
}
return true;
});
}
Aggregations