On Mon, Jun 23, 2014 at 8:18 PM, Venkatesh Shukla <
venkatesh.shukla.ee...@iitbhu.ac.in> wrote:

> Hello
>
> For building subsurface on android, a template is needed. In this
> template, android specific files, like AndroidManifest.xml, java files and
> android xml files among others would be added. I am attaching a patch which
> does takes care of this template while building for android.
> The included manifest file contains permissions for USB usage on android
> and device_filter.xml file to recognize the supported devices.
>
> --
> Venkatesh Shukla
>
>
On suggestion of Anton, I have changed the package name to
'org.subsurface'. Other modifications include inclusion of string.xml for
proper naming of application and proper formatting of AndroidManifest.xml
and setting default orientation to landscape.

-- 
Venkatesh Shukla
From 251ab194b9357e58eacb2cc3ec590b037e3effab Mon Sep 17 00:00:00 2001
From: Venkatesh Shukla <venkatesh.shukla.ee...@iitbhu.ac.in>
Date: Mon, 23 Jun 2014 17:18:17 +0530
Subject: [PATCH] Template for subsurface android package

For modifications to the final source code of built android package
such as permission additions and inclusion of xml and java files, it
is necessary to maintain a template. The template is copied without
any modifications on top of qt android-template before building
subsurface libraries. ( Refer: http://goo.gl/z44dQC )

All android specific files would be added to android subdirectory.

In this commit, permission for usage of USB devices is added to
AndroidManifest.xml. Also included is device_filter.xml. When
devices having VID, PID listed in this file is attached to android,
a dialogbox is displayed asking for permission for subsurface to
use this USB device. Accepting it would take you straight to subsurface
application.

Signed-off-by: Venkatesh Shukla <venkatesh.shukla.ee...@iitbhu.ac.in>
---
 .gitignore                        |   2 +
 android/AndroidManifest.xml       | 117 ++++++++++++++++++++++++++++++++++++++
 android/res/values/strings.xml    |   8 +++
 android/res/xml/device_filter.xml |  16 ++++++
 subsurface-install.pri            |   2 +
 subsurface.pro                    |   6 ++
 6 files changed, 151 insertions(+)
 create mode 100644 android/AndroidManifest.xml
 create mode 100644 android/res/values/strings.xml
 create mode 100644 android/res/xml/device_filter.xml

diff --git a/.gitignore b/.gitignore
index 9272286..24e8eb7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,3 +30,5 @@ Makefile
 subsurface.pro.user*
 Subsurface.app
 .DS_Store
+!android/**/*.xml
+
diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
new file mode 100644
index 0000000..4eb97e5
--- /dev/null
+++ b/android/AndroidManifest.xml
@@ -0,0 +1,117 @@
+<?xml version='1.0' encoding='utf-8'?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android";
+    package="org.subsurface"
+    android:installLocation="auto"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <application
+        android:name="org.qtproject.qt5.android.bindings.QtApplication"
+        android:hardwareAccelerated="true"
+        android:label="@string/app_name" >
+        <activity
+            android:name="org.qtproject.qt5.android.bindings.QtActivity"
+            android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|locale|fontScale|keyboard|keyboardHidden|navigation"
+            android:label="@string/app_name"
+            android:launchMode="singleTop"
+            android:screenOrientation="sensorLandscape" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+
+            <meta-data
+                android:name="android.app.lib_name"
+                android:value="-- %%INSERT_APP_LIB_NAME%% --" />
+            <meta-data
+                android:name="android.app.qt_sources_resource_id"
+                android:resource="@array/qt_sources" />
+            <meta-data
+                android:name="android.app.repository"
+                android:value="default" />
+            <meta-data
+                android:name="android.app.qt_libs_resource_id"
+                android:resource="@array/qt_libs" />
+            <meta-data
+                android:name="android.app.bundled_libs_resource_id"
+                android:resource="@array/bundled_libs" />
+            <!-- Deploy Qt libs as part of package -->
+            <meta-data
+                android:name="android.app.bundle_local_qt_libs"
+                android:value="-- %%BUNDLE_LOCAL_QT_LIBS%% --" />
+            <meta-data
+                android:name="android.app.bundled_in_lib_resource_id"
+                android:resource="@array/bundled_in_lib" />
+            <meta-data
+                android:name="android.app.bundled_in_assets_resource_id"
+                android:resource="@array/bundled_in_assets" />
+            <!-- Run with local libs -->
+            <meta-data
+                android:name="android.app.use_local_qt_libs"
+                android:value="-- %%USE_LOCAL_QT_LIBS%% --" />
+            <meta-data
+                android:name="android.app.libs_prefix"
+                android:value="/data/local/tmp/qt/" />
+            <meta-data
+                android:name="android.app.load_local_libs"
+                android:value="-- %%INSERT_LOCAL_LIBS%% --" />
+            <meta-data
+                android:name="android.app.load_local_jars"
+                android:value="-- %%INSERT_LOCAL_JARS%% --" />
+            <meta-data
+                android:name="android.app.static_init_classes"
+                android:value="-- %%INSERT_INIT_CLASSES%% --" />
+            <!-- Messages maps -->
+            <meta-data
+                android:name="android.app.ministro_not_found_msg"
+                android:value="@string/ministro_not_found_msg" />
+            <meta-data
+                android:name="android.app.ministro_needed_msg"
+                android:value="@string/ministro_needed_msg" />
+            <meta-data
+                android:name="android.app.fatal_error_msg"
+                android:value="@string/fatal_error_msg" />
+            <!-- Messages maps -->
+
+
+            <!-- Splash screen -->
+            <!--
+	    <meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/logo"/>
+            -->
+            <!-- Splash screen -->
+
+	    <intent-filter>
+                <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
+            </intent-filter>
+
+            <meta-data
+                android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
+                android:resource="@xml/device_filter" />
+        </activity>
+    </application>
+
+    <uses-sdk android:minSdkVersion="12" />
+
+    <supports-screens
+        android:anyDensity="true"
+        android:largeScreens="true"
+        android:normalScreens="true"
+        android:smallScreens="true" />
+
+    <uses-feature android:name="android.hardware.usb.host" />
+
+    <!--
+         The following comment will be replaced upon deployment with default permissions based on the dependencies of the application.
+         Remove the comment if you do not require these default permissions.
+    -->
+    <!-- %%INSERT_PERMISSIONS -->
+
+
+    <!--
+         The following comment will be replaced upon deployment with default features based on the dependencies of the application.
+         Remove the comment if you do not require these default features.
+    -->
+    <!-- %%INSERT_FEATURES -->
+
+</manifest>
diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml
new file mode 100644
index 0000000..2a79f11
--- /dev/null
+++ b/android/res/values/strings.xml
@@ -0,0 +1,8 @@
+<?xml version='1.0' encoding='utf-8'?>
+<resources>
+    <string name="app_name">Subsurface</string>
+
+    <string name="ministro_not_found_msg">Can\'t find Ministro service.\nThe application can\'t start.</string>
+    <string name="ministro_needed_msg">This application requires Ministro service. Would you like to install it?</string>
+    <string name="fatal_error_msg">Your application encountered a fatal error and cannot continue.</string>
+</resources>
diff --git a/android/res/xml/device_filter.xml b/android/res/xml/device_filter.xml
new file mode 100644
index 0000000..822680b
--- /dev/null
+++ b/android/res/xml/device_filter.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<resources>
+    <!-- FTDI Chips -->
+    <!-- (Smart Interface), Heinrichs Weikamp -->
+    <usb-device vendor-id="1027" product-id="24577"/>
+    <usb-device vendor-id="1027" product-id="24592"/>
+    <usb-device vendor-id="1027" product-id="24593"/>
+    <!-- Oceanic Custom PID -->
+    <usb-device vendor-id="1027" product-id="62560"/>
+    <!-- Suunto Custom PID -->
+    <usb-device vendor-id="1027" product-id="63104"/>
+    <!-- Cressi (Leonardo) Custom PID -->
+    <usb-device vendor-id="1027" product-id="63104"/>
+</resources>
+
diff --git a/subsurface-install.pri b/subsurface-install.pri
index db1c0ff..0fec89d 100644
--- a/subsurface-install.pri
+++ b/subsurface-install.pri
@@ -130,6 +130,8 @@ mac {
 } else: android {
 	# Android install rules
 	QMAKE_BUNDLE_DATA += translation qttranslation
+	# Android template directory
+	ANDROID_PACKAGE_SOURCE_DIR = $$OUT_PWD/android
 } else {
 	# Linux install rules
 	# On Linux, we can count on packagers doing the right thing
diff --git a/subsurface.pro b/subsurface.pro
index 1172020..86d19cd 100644
--- a/subsurface.pro
+++ b/subsurface.pro
@@ -263,6 +263,12 @@ theme.commands += $(CHK_DIR_EXISTS) $$OUT_PWD/theme || $(COPY_DIR) $$PWD/theme $
 all.depends += theme
 QMAKE_EXTRA_TARGETS += theme
 
+android {
+	android.commands += $(CHK_DIR_EXISTS) $$OUT_PWD/android || $(COPY_DIR) $$PWD/android $$OUT_PWD
+	all.depends += android
+	QMAKE_EXTRA_TARGETS += android
+}
+
 DESKTOP_FILE = subsurface.desktop
 mac: ICON = packaging/macosx/Subsurface.icns
 else: ICON = subsurface-icon.svg
-- 
1.9.3

_______________________________________________
subsurface mailing list
subsurface@hohndel.org
http://lists.hohndel.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to