| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 | 
							- /*
 
-  * helper.cpp, part of VCMI engine
 
-  *
 
-  * Authors: listed in file AUTHORS in main folder
 
-  *
 
-  * License: GNU General Public License v2.0 or later
 
-  * Full text of license available in license.txt file, in main folder
 
-  *
 
-  */
 
- #include "StdInc.h"
 
- #include "helper.h"
 
- #include "mainwindow_moc.h"
 
- #include "settingsView/csettingsview_moc.h"
 
- #include "modManager/cmodlistview_moc.h"
 
- #include "../lib/CConfigHandler.h"
 
- #include <QObject>
 
- #include <QScroller>
 
- #ifdef VCMI_ANDROID
 
- #include <QAndroidJniObject>
 
- #include <QtAndroid>
 
- #include <QAndroidJniEnvironment>
 
- #endif
 
- #ifdef VCMI_IOS
 
- #include "ios/revealdirectoryinfiles.h"
 
- #endif
 
- #ifdef VCMI_MOBILE
 
- static QScrollerProperties generateScrollerProperties()
 
- {
 
- 	QScrollerProperties result;
 
- 	result.setScrollMetric(QScrollerProperties::OvershootDragResistanceFactor, 0.25);
 
- 	result.setScrollMetric(QScrollerProperties::OvershootDragDistanceFactor, 0.25);
 
- 	result.setScrollMetric(QScrollerProperties::HorizontalOvershootPolicy, QScrollerProperties::OvershootAlwaysOff);
 
- 	return result;
 
- }
 
- #endif
 
- namespace Helper
 
- {
 
- void loadSettings()
 
- {
 
- 	settings.init("config/settings.json", "vcmi:settings");
 
- 	persistentStorage.init("config/persistentStorage.json", "");
 
- }
 
- void reLoadSettings()
 
- {
 
- 	loadSettings();
 
- 	for(const auto widget : qApp->allWidgets())
 
- 		if(auto settingsView = qobject_cast<CSettingsView *>(widget))
 
- 		{
 
- 			settingsView->loadSettings();
 
- 			break;
 
- 		}
 
- 	getMainWindow()->updateTranslation();
 
- 	getMainWindow()->getModView()->reload();
 
- }
 
- void enableScrollBySwiping(QObject * scrollTarget)
 
- {
 
- #ifdef VCMI_MOBILE
 
- 	QScroller::grabGesture(scrollTarget, QScroller::LeftMouseButtonGesture);
 
- 	QScroller * scroller = QScroller::scroller(scrollTarget);
 
- 	scroller->setScrollerProperties(generateScrollerProperties());
 
- #endif
 
- }
 
- QString getRealPath(QString path)
 
- {
 
- #ifdef VCMI_ANDROID
 
- 	if(path.contains("content://", Qt::CaseInsensitive))
 
- 	{
 
- 		auto str = QAndroidJniObject::fromString(path);
 
- 		return QAndroidJniObject::callStaticObjectMethod("eu/vcmi/vcmi/util/FileUtil", "getFilenameFromUri", "(Ljava/lang/String;Landroid/content/Context;)Ljava/lang/String;", str.object<jstring>(), QtAndroid::androidContext().object()).toString();
 
- 	}
 
- 	else
 
- 		return path;
 
- #else
 
- 	return path;
 
- #endif
 
- }
 
- void performNativeCopy(QString src, QString dst)
 
- {
 
- #ifdef VCMI_ANDROID
 
- 	auto srcStr = QAndroidJniObject::fromString(src);
 
- 	auto dstStr = QAndroidJniObject::fromString(dst);
 
- 	QAndroidJniObject::callStaticObjectMethod("eu/vcmi/vcmi/util/FileUtil", "copyFileFromUri", "(Ljava/lang/String;Ljava/lang/String;Landroid/content/Context;)V", srcStr.object<jstring>(), dstStr.object<jstring>(), QtAndroid::androidContext().object());
 
- #else
 
- 	QFile::copy(src, dst);
 
- #endif
 
- }
 
- void revealDirectoryInFileBrowser(QString path)
 
- {
 
- 	const auto dirUrl = QUrl::fromLocalFile(QFileInfo{path}.absoluteFilePath());
 
- #ifdef VCMI_IOS
 
- 	iOS_utils::revealDirectoryInFiles(dirUrl);
 
- #else
 
- 	QDesktopServices::openUrl(dirUrl);
 
- #endif
 
- }
 
- MainWindow * getMainWindow()
 
- {
 
- 	foreach(QWidget *w, qApp->allWidgets())
 
- 		if(auto mainWin = qobject_cast<MainWindow*>(w))
 
- 			return mainWin;
 
- 	return nullptr;
 
- }
 
- void keepScreenOn(bool on)
 
- {
 
- #if defined(VCMI_ANDROID)
 
- 	// based on https://stackoverflow.com/a/38846485
 
- 	QtAndroid::runOnAndroidThread([on]
 
- 	{
 
- 		QAndroidJniObject activity = QtAndroid::androidActivity();
 
- 		if(activity.isValid())
 
- 		{
 
- 			QAndroidJniObject window = activity.callObjectMethod("getWindow", "()Landroid/view/Window;");
 
- 			if(window.isValid())
 
- 			{
 
- 				const int FLAG_KEEP_SCREEN_ON = 128;
 
- 				if(on)
 
- 					window.callMethod<void>("addFlags", "(I)V", FLAG_KEEP_SCREEN_ON);
 
- 				else
 
- 					window.callMethod<void>("clearFlags", "(I)V", FLAG_KEEP_SCREEN_ON);
 
- 			}
 
- 		}
 
- 		QAndroidJniEnvironment env;
 
- 		if (env->ExceptionCheck())
 
- 			env->ExceptionClear();
 
- 	});
 
- #endif
 
- }
 
- }
 
 
  |