diff --git a/backends/dlc/android/playstore.h b/backends/dlc/android/playstore.h
new file mode 100644
index 00000000000..7137f61e2b1
--- /dev/null
+++ b/backends/dlc/android/playstore.h
@@ -0,0 +1,54 @@
+/* ScummVM - Graphic Adventure Engine
+*
+* ScummVM is the legal property of its developers, whose names
+* are too numerous to list here. Please refer to the COPYRIGHT
+* file distributed with this source distribution.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*
+*/
+
+#ifndef BACKENDS_DLC_PLAYSTORE_PLAYSTORE_H
+#define BACKENDS_DLC_PLAYSTORE_PLAYSTORE_H
+
+#include "backends/dlc/store.h"
+#include "common/callback.h"
+
+namespace DLC {
+namespace PlayStore {
+
+class PlayStore: public DLC::Store {
+
+public:
+ PlayStore() {}
+ virtual ~PlayStore() {}
+
+ virtual void init() override {}
+
+ virtual void requestInfo() override {}
+
+ virtual void getDownloadState() override {}
+
+ virtual void requestDownload() override {}
+
+ virtual void getBytesDownloaded() override {}
+
+ virtual void cancelDownload() override {}
+};
+
+} // End of namespace PlayStore
+} // End of namespace DLC
+
+#endif
diff --git a/backends/dlc/dlcmanager.cpp b/backends/dlc/dlcmanager.cpp
new file mode 100644
index 00000000000..ab662845c26
--- /dev/null
+++ b/backends/dlc/dlcmanager.cpp
@@ -0,0 +1,52 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+
+#include "backends/dlc/dlcmanager.h"
+#include "backends/dlc/android/playstore.h"
+
+namespace Common {
+
+DECLARE_SINGLETON(DLC::DLCManager);
+
+}
+
+namespace DLC {
+
+DLCManager::DLCManager() {
+ // if --playstore flag
+ _store = new DLC::PlayStore::PlayStore();
+}
+
+void DLCManager::init() {
+
+}
+
+void DLCManager::initDownload() {
+ _store->requestDownload();
+ // handle errors
+}
+
+bool DLCManager::getFeatureState(DLC::Feature f) {
+ return false;
+}
+
+} // End of namespace DLC
diff --git a/backends/dlc/dlcmanager.h b/backends/dlc/dlcmanager.h
new file mode 100644
index 00000000000..8bc760a5790
--- /dev/null
+++ b/backends/dlc/dlcmanager.h
@@ -0,0 +1,71 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+#ifndef DLC_DLCMANAGER_H
+#define DLC_DLCMANAGER_H
+
+#include "common/str.h"
+#include "common/singleton.h"
+#include "backends/dlc/store.h"
+
+namespace DLC {
+
+enum Feature {
+ kInProgress
+};
+
+class DLCManager : public Common::Singleton {
+
+ struct DLCDesc {
+ Common::String name;
+ Common::String description;
+ uint32 size;
+ uint32 game_id;
+ };
+
+ Store* _store;
+
+public:
+ DLCManager();
+ virtual ~DLCManager() {}
+
+ void init();
+
+ DLCDesc getDLCList();
+
+ void initDownload();
+
+ void cancelDownload();
+
+ bool getFeatureState(DLC::Feature f);
+ void setFeatureState(DLC::Feature f, bool enable);
+
+ void getPercentDownloaded();
+
+ uint32 getInProgressGame();
+};
+
+#define DLCMan DLC::DLCManager::instance()
+
+} // End of namespace DLC
+
+
+#endif
diff --git a/backends/dlc/store.h b/backends/dlc/store.h
new file mode 100644
index 00000000000..186e68189fe
--- /dev/null
+++ b/backends/dlc/store.h
@@ -0,0 +1,49 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+#ifndef DLC_STORE_H
+#define DLC_STORE_H
+
+namespace DLC {
+
+class Store {
+
+public:
+ Store() {}
+ virtual ~Store() {}
+
+ virtual void init() = 0;
+
+ virtual void requestInfo() = 0;
+
+ virtual void getDownloadState() = 0;
+
+ virtual void requestDownload() = 0;
+
+ virtual void getBytesDownloaded() = 0;
+
+ virtual void cancelDownload() = 0;
+};
+
+} // End of namespace DLC
+
+
+#endif
diff --git a/backends/module.mk b/backends/module.mk
index 4473de46ebd..fbe00cb1295 100644
--- a/backends/module.mk
+++ b/backends/module.mk
@@ -5,6 +5,7 @@ MODULE_OBJS := \
modular-backend.o \
audiocd/audiocd-stream.o \
audiocd/default/default-audiocd.o \
+ dlc/dlcmanager.o \
events/default/default-events.o \
fs/abstract-fs.o \
fs/stdiostream.o \
diff --git a/backends/platform/android/android.cpp b/backends/platform/android/android.cpp
index e89dd8f84d4..694985af579 100644
--- a/backends/platform/android/android.cpp
+++ b/backends/platform/android/android.cpp
@@ -637,6 +637,7 @@ bool OSystem_Android::hasFeature(Feature f) {
f == kFeatureTouchscreen) {
return true;
}
+ if (f == kFeatureDLC) return true;
/* Even if we are using the 2D graphics manager,
* we are at one initGraphics3d call of supporting GLES2 */
if (f == kFeatureOpenGLForGame) return true;
diff --git a/base/main.cpp b/base/main.cpp
index 44098d82e02..6f3afde422d 100644
--- a/base/main.cpp
+++ b/base/main.cpp
@@ -71,6 +71,7 @@
#include "backends/keymapper/action.h"
#include "backends/keymapper/keymap.h"
#include "backends/keymapper/keymapper.h"
+#include "backends/dlc/dlcmanager.h"
#ifdef USE_CLOUD
#ifdef USE_LIBCURL
@@ -699,6 +700,8 @@ extern "C" int scummvm_main(int argc, const char * const argv[]) {
CloudMan.syncSaves();
#endif
+ DLCMan.init();
+
// Unless a game was specified, show the launcher dialog
if (nullptr == ConfMan.getActiveDomain())
launcherDialog();
@@ -848,6 +851,7 @@ extern "C" int scummvm_main(int argc, const char * const argv[]) {
Cloud::CloudManager::destroy();
#endif
#endif
+ DLC::DLCManager::destroy();
PluginManager::instance().unloadDetectionPlugin();
PluginManager::instance().unloadAllPlugins();
PluginManager::destroy();
diff --git a/common/system.h b/common/system.h
index 84384a2679e..4f5543c604d 100644
--- a/common/system.h
+++ b/common/system.h
@@ -569,6 +569,11 @@ public:
*/
kFeatureShaders,
+ /**
+ * Support for downloading DLC packages.
+ */
+ kFeatureDLC,
+
/**
* Support for using the native system file browser dialog
* through the DialogManager.
diff --git a/gui/launcher.cpp b/gui/launcher.cpp
index 6fc6222aab0..3aac8b46ca4 100644
--- a/gui/launcher.cpp
+++ b/gui/launcher.cpp
@@ -256,8 +256,11 @@ void LauncherDialog::build() {
new ButtonWidget(this, _title + ".AboutButton", _("A~b~out"), _("About ScummVM"), kAboutCmd);
// I18N: Button caption. O is the shortcut, Ctrl+O, put it in parens for non-latin (~O~)
new ButtonWidget(this, _title + ".OptionsButton", _("Global ~O~ptions..."), _("Change global ScummVM options"), kOptionsCmd, 0, _c("Global ~O~pts...", "lowres"));
- // I18N: Button download games button.
- new ButtonWidget(this, _title + ".DownloadGamesButton", _("Download Games"), _("Download freeware games for ScummVM"), kDownloadGameCmd);
+
+ if (g_system->hasFeature(OSystem::kFeatureDLC)) {
+ // I18N: Button browse downloadable games (DLC)
+ new ButtonWidget(this, _title + ".DownloadGamesButton", _("Download Games"), _("Download freeware games for ScummVM"), kDownloadGameCmd);
+ }
// Above the lowest button rows: two more buttons (directly below the list box)
DropdownButtonWidget *addButton =