Android: Use re-usable "copy and ask for overwrite" callable

Change-Id: I73779b5eaeebbd44fa6333f067adf220ddd77be4
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Eike Ziller
2020-06-11 16:24:42 +02:00
parent 7496136992
commit 92cd8e6005
2 changed files with 10 additions and 74 deletions

View File

@@ -245,7 +245,7 @@ void ChooseDirectoryPage::initializePage()
// CreateAndroidManifestWizard // CreateAndroidManifestWizard
// //
CreateAndroidManifestWizard::CreateAndroidManifestWizard(BuildSystem *buildSystem) CreateAndroidManifestWizard::CreateAndroidManifestWizard(BuildSystem *buildSystem)
: m_buildSystem(buildSystem), m_copyState(Ask) : m_buildSystem(buildSystem)
{ {
setWindowTitle(tr("Create Android Template Files Wizard")); setWindowTitle(tr("Create Android Template Files Wizard"));
@@ -290,70 +290,12 @@ void CreateAndroidManifestWizard::setCopyGradle(bool copy)
m_copyGradle = copy; m_copyGradle = copy;
} }
bool CreateAndroidManifestWizard::copy(const QFileInfo &src, const QFileInfo &dst, QStringList * addedFiles)
{
bool copyFile = true;
if (dst.exists()) {
switch (m_copyState) {
case Ask:
{
int res = QMessageBox::question(this,
tr("Overwrite %1 file").arg(dst.fileName()),
tr("Overwrite existing \"%1\"?")
.arg(QDir(m_directory).relativeFilePath(dst.absoluteFilePath())),
QMessageBox::Yes | QMessageBox::YesToAll |
QMessageBox::No | QMessageBox::NoToAll |
QMessageBox::Cancel);
switch (res) {
case QMessageBox::YesToAll:
m_copyState = OverwriteAll;
break;
case QMessageBox::Yes:
break;
case QMessageBox::NoToAll:
m_copyState = SkipAll;
copyFile = false;
break;
case QMessageBox::No:
copyFile = false;
break;
default:
return false;
}
}
break;
case SkipAll:
copyFile = false;
break;
default:
break;
}
if (copyFile)
QFile::remove(dst.filePath());
}
if (!dst.absoluteDir().exists())
dst.absoluteDir().mkpath(dst.absolutePath());
if (copyFile && !QFile::copy(src.filePath(), dst.filePath())) {
QMessageBox::warning(this, tr("File Creation Error"),
tr("Could not copy file \"%1\" to \"%2\".")
.arg(src.filePath()).arg(dst.filePath()));
return false;
}
addedFiles->append(dst.absoluteFilePath());
return true;
}
void CreateAndroidManifestWizard::createAndroidTemplateFiles() void CreateAndroidManifestWizard::createAndroidTemplateFiles()
{ {
if (m_directory.isEmpty()) if (m_directory.isEmpty())
return; return;
QStringList addedFiles; FileUtils::CopyAskingForOverwrite copy(this);
Target *target = m_buildSystem->target(); Target *target = m_buildSystem->target();
QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(target->kit()); QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(target->kit());
if (!version) if (!version)
@@ -361,21 +303,23 @@ void CreateAndroidManifestWizard::createAndroidTemplateFiles()
if (version->qtVersion() < QtSupport::QtVersionNumber(5, 4, 0)) { if (version->qtVersion() < QtSupport::QtVersionNumber(5, 4, 0)) {
const QString src = version->prefix().toString() + "/src/android/java/AndroidManifest.xml"; const QString src = version->prefix().toString() + "/src/android/java/AndroidManifest.xml";
FileUtils::copyRecursively(FilePath::fromString(src), FileUtils::copyRecursively(FilePath::fromString(src),
FilePath::fromString(m_directory + QLatin1String("/AndroidManifest.xml")), FilePath::fromString(m_directory
nullptr, [this, &addedFiles](QFileInfo src, QFileInfo dst, QString *){return copy(src, dst, &addedFiles);}); + QLatin1String("/AndroidManifest.xml")),
nullptr,
copy);
} else { } else {
const QString src = version->prefix().toString() + "/src/android/templates"; const QString src = version->prefix().toString() + "/src/android/templates";
FileUtils::copyRecursively(FilePath::fromString(src), FileUtils::copyRecursively(FilePath::fromString(src),
FilePath::fromString(m_directory), FilePath::fromString(m_directory),
nullptr, [this, &addedFiles](QFileInfo src, QFileInfo dst, QString *){return copy(src, dst, &addedFiles);}); nullptr,
copy);
if (m_copyGradle) { if (m_copyGradle) {
FilePath gradlePath = version->prefix().pathAppended("src/3rdparty/gradle"); FilePath gradlePath = version->prefix().pathAppended("src/3rdparty/gradle");
if (!gradlePath.exists()) if (!gradlePath.exists())
gradlePath = AndroidConfigurations::currentConfig().sdkLocation().pathAppended("/tools/templates/gradle/wrapper"); gradlePath = AndroidConfigurations::currentConfig().sdkLocation().pathAppended("/tools/templates/gradle/wrapper");
FileUtils::copyRecursively(gradlePath, FilePath::fromString(m_directory), FileUtils::copyRecursively(gradlePath, FilePath::fromString(m_directory), nullptr, copy);
nullptr, [this, &addedFiles](QFileInfo src, QFileInfo dst, QString *){return copy(src, dst, &addedFiles);});
} }
AndroidManager::updateGradleProperties(target, m_buildKey); AndroidManager::updateGradleProperties(target, m_buildKey);
@@ -385,7 +329,7 @@ void CreateAndroidManifestWizard::createAndroidTemplateFiles()
QString androidPackageDir; QString androidPackageDir;
ProjectNode *node = target->project()->findNodeForBuildKey(m_buildKey); ProjectNode *node = target->project()->findNodeForBuildKey(m_buildKey);
if (node) { if (node) {
node->addFiles(addedFiles); node->addFiles(copy.files());
androidPackageDir = node->data(Android::Constants::AndroidPackageSourceDir).toString(); androidPackageDir = node->data(Android::Constants::AndroidPackageSourceDir).toString();
if (androidPackageDir.isEmpty()) { if (androidPackageDir.isEmpty()) {

View File

@@ -54,19 +54,11 @@ public:
ProjectExplorer::BuildSystem *buildSystem() const; ProjectExplorer::BuildSystem *buildSystem() const;
private: private:
enum CopyState {
Ask,
OverwriteAll,
SkipAll
};
bool copy(const QFileInfo &src, const QFileInfo &dst, QStringList *addedFiles);
void createAndroidManifestFile(); void createAndroidManifestFile();
void createAndroidTemplateFiles(); void createAndroidTemplateFiles();
ProjectExplorer::BuildSystem *m_buildSystem; ProjectExplorer::BuildSystem *m_buildSystem;
QString m_buildKey; QString m_buildKey;
QString m_directory; QString m_directory;
CopyState m_copyState;
bool m_copyGradle; bool m_copyGradle;
}; };