Procházet zdrojové kódy

Merge pull request #6091 from Laserlicht/screen_on

keep screen on in launcher while downloading
Ivan Savenko před 1 měsícem
rodič
revize
a56c0ca8db

+ 10 - 0
android/vcmi-app/src/main/java/eu/vcmi/vcmi/ActivityLauncher.java

@@ -6,6 +6,8 @@ import android.net.Uri;
 import android.os.Bundle;
 import android.os.Environment;
 import android.provider.DocumentsContract;
+import android.view.Window;
+import android.view.WindowManager;
 
 import androidx.annotation.Nullable;
 
@@ -55,6 +57,14 @@ public class ActivityLauncher extends org.qtproject.qt5.android.bindings.QtActiv
         startActivityForResult(intent, PICK_EXTERNAL_VCMI_DATA_TO_COPY);
     }
 
+    public void keepScreenOn(boolean isEnabled)
+    {
+        if(isEnabled)
+            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+        else
+            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+    }
+
     public void onLaunchGameBtnPressed()
     {
         startActivity(new Intent(ActivityLauncher.this, VcmiSDLActivity.class));

+ 1 - 0
ios/CMakeLists.txt

@@ -4,6 +4,7 @@ add_library(iOS_utils SHARED
 )
 target_link_libraries(iOS_utils PRIVATE
 	"-framework Foundation"
+	"-framework UIKit"
 )
 target_include_directories(iOS_utils PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
 

+ 1 - 0
ios/iOS_utils.h

@@ -27,5 +27,6 @@ const char *frameworksPath();
 const char *bundleIdentifier();
 
 bool isOsVersionAtLeast(unsigned int osMajorVersion);
+void keepScreenOn(bool isEnabled);
 }
 #pragma GCC visibility pop

+ 6 - 0
ios/iOS_utils.mm

@@ -11,6 +11,7 @@
 #include "iOS_utils.h"
 
 #import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
 
 namespace
 {
@@ -51,4 +52,9 @@ bool isOsVersionAtLeast(unsigned int osMajorVersion)
 {
 	return NSProcessInfo.processInfo.operatingSystemVersion.majorVersion >= osMajorVersion;
 }
+
+void keepScreenOn(bool isEnabled)
+{
+	UIApplication.sharedApplication.idleTimerDisabled = isEnabled ? YES : NO;
+}
 }

+ 2 - 0
launcher/firstLaunch/firstlaunch_moc.cpp

@@ -445,10 +445,12 @@ void FirstLaunchView::extractGogDataAsync(QString filePathBin, QString filePathE
 	if(errorText.isEmpty())
 	{
 		logGlobal->info("Performing extraction using innoextract...");
+		Helper::keepScreenOn(true);
 		errorText = Innoextract::extract(tmpFileExe, tempDir.path(), [this](float progress) {
 			ui->progressBarGog->setValue(progress * 100);
 			qApp->processEvents();
 		});
+		Helper::keepScreenOn(false);
 		logGlobal->info("Extraction done!");
 	}
 

+ 14 - 0
launcher/helper.cpp

@@ -26,6 +26,7 @@
 
 #ifdef VCMI_IOS
 #include "ios/revealdirectoryinfiles.h"
+#include "iOS_utils.h"
 #endif
 
 #ifdef VCMI_MOBILE
@@ -114,4 +115,17 @@ MainWindow * getMainWindow()
 			return mainWin;
 	return nullptr;
 }
+
+
+void keepScreenOn(bool isEnabled)
+{
+#if defined(VCMI_ANDROID)
+	QtAndroid::runOnAndroidThread([isEnabled]
+	{
+		QtAndroid::androidActivity().callMethod<void>("keepScreenOn", "(Z)V", isEnabled);
+	});
+#elif defined(VCMI_IOS)
+	iOS_utils::keepScreenOn(isEnabled);
+#endif
+}
 }

+ 1 - 0
launcher/helper.h

@@ -23,4 +23,5 @@ QString getRealPath(QString path);
 void performNativeCopy(QString src, QString dst);
 void revealDirectoryInFileBrowser(QString path);
 MainWindow * getMainWindow();
+void keepScreenOn(bool isEnabled);
 }

+ 6 - 0
launcher/modManager/cmodlistview_moc.cpp

@@ -793,6 +793,7 @@ void CModListView::downloadFile(QString file, QUrl url, QString description, qin
 		ui->progressBar->setFormat(progressBarFormat);
 	}
 
+	Helper::keepScreenOn(true);
 	dlManager->downloadFile(url, file, sizeBytes);
 }
 
@@ -852,6 +853,7 @@ void CModListView::downloadFinished(QStringList savedFiles, QStringList failedFi
 	if(doInstallFiles)
 		installFiles(savedFiles);
 
+	Helper::keepScreenOn(false);
 	hideProgressBar();
 }
 
@@ -980,6 +982,8 @@ void CModListView::installFiles(QStringList files)
 
 		float prog = 0.0;
 
+		Helper::keepScreenOn(true);
+
 		auto futureExtract = std::async(std::launch::async, [this, exe, &prog]()
 		{
 			ChroniclesExtractor ce(this, [&prog](float progress) { prog = progress; });
@@ -995,6 +999,7 @@ void CModListView::installFiles(QStringList files)
 
 		if(futureExtract.get())
 		{
+			Helper::keepScreenOn(false);
 			hideProgressBar();
 			ui->abortButton->setEnabled(true);
 			ui->progressWidget->setVisible(false);
@@ -1233,6 +1238,7 @@ void CModListView::on_abortButton_clicked()
 {
 	delete dlManager;
 	dlManager = nullptr;
+	Helper::keepScreenOn(false);
 	hideProgressBar();
 }