forked from amazingfate/loongoffice
This commit will add the ability to create a new document. A FAB is used in home screen which on expansion gives four options namely new writer document, new impress, new Sheet or new Draw. Two new events loadNewDocument and saveDocumentAs have been added. Another major change includes the use of constraint layout in LOUIActivity layout as it decreases nesting of views and improves the app performance. This was needed because of the new FAB layouts being added. Support for vector drawables has been enabled. Change-Id: Ia3ea17f73c0d8514f8ddb7b9a1cbd2ce7de6ac08 Reviewed-on: https://gerrit.libreoffice.org/35183 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
293 lines
11 KiB
Groovy
293 lines
11 KiB
Groovy
project.ext.set("archivesBaseName", "LibreOfficeViewer")
|
|
//build-time dependencies - android plugin for gradle
|
|
buildscript {
|
|
repositories {
|
|
jcenter()
|
|
}
|
|
dependencies {
|
|
classpath 'com.android.tools.build:gradle:2.3.0'
|
|
}
|
|
}
|
|
|
|
apply plugin: 'com.android.application'
|
|
// buildhost settings - paths and the like
|
|
apply from: 'liboSettings.gradle'
|
|
|
|
// compile-time dependencies
|
|
dependencies {
|
|
compile fileTree(dir: "${liboInstdir}/${liboUREJavaFolder}", include: [
|
|
"java_uno.jar",
|
|
"juh.jar",
|
|
"jurt.jar",
|
|
"ridl.jar",
|
|
"unoloader.jar"
|
|
])
|
|
compile files("${liboInstdir}/${liboShareJavaFolder}/unoil.jar")
|
|
compile files("${liboWorkdir}/UnpackedTarball/owncloud_android_lib/bin/owncloud-android-library.jar")
|
|
compile 'com.android.support:appcompat-v7:25.1.0'
|
|
compile 'com.android.support:design:25.1.0'
|
|
compile 'com.android.support.constraint:constraint-layout:1.0.2'
|
|
}
|
|
|
|
android {
|
|
compileSdkVersion 25
|
|
buildToolsVersion "25.0.1"
|
|
compileOptions {
|
|
// silence some java-language features hints
|
|
sourceCompatibility 6
|
|
}
|
|
// uses non-conventional source layout, so need to reconfigure accordingly
|
|
// ToDo move to conventional layout, so stuff can be stripped down.
|
|
sourceSets {
|
|
main.manifest.srcFile 'AndroidManifest.xml'
|
|
// override the debuggable flag that needs to be in AndroidManifest.xml
|
|
// since ndk-gdb awks for the literal string in there :-/
|
|
release.manifest.srcFile 'ReleaseManifest.xml'
|
|
main.assets.srcDirs = ['assets']
|
|
main.res.srcDirs = ['res']
|
|
main.java.srcDirs = ['../Bootstrap/src', 'src/java']
|
|
main.jniLibs.srcDirs = ['jniLibs']
|
|
main.jni.srcDirs = [] // don't attempt to build native-lib via gradle
|
|
// gdbserver for debugvariant
|
|
debug.jniLibs.srcDirs "jniLibs_debug"
|
|
// the configuration data that might be stripped or not
|
|
fullUI.assets.srcDirs 'assets_fullUI'
|
|
strippedUI.assets.srcDirs 'assets_strippedUI'
|
|
}
|
|
lintOptions {
|
|
// ndk-gdb looks for the literal value in the pre-processed manifest :-(
|
|
disable 'HardcodedDebugMode'
|
|
}
|
|
defaultConfig {
|
|
minSdkVersion 14
|
|
// openssl on x86 makes the native-code.so contain text-relocations,
|
|
// 22 treats them as warnings, on 23 it is fatal error
|
|
// ToDo: fix openssl stuff to not block targeting 23 or later
|
|
targetSdkVersion 22
|
|
manifestPlaceholders = [installLocation: "preferExternal"]
|
|
vectorDrawables.useSupportLibrary = true
|
|
}
|
|
buildTypes {
|
|
debug {
|
|
// make android studio happy...
|
|
jniDebuggable true
|
|
// would work just fine with external, but setting emulator up is a little more work
|
|
manifestPlaceholders = [installLocation: "internalOnly"]
|
|
}
|
|
}
|
|
productFlavors {
|
|
strippedUI
|
|
fullUI
|
|
}
|
|
}
|
|
|
|
/* remark inherited from makefile:
|
|
Then "assets". Let the directory structure under assets mimic
|
|
that under solver for now.
|
|
|
|
Please note that I have no idea what all of this is really necessary and for
|
|
much of this stuff being copied, no idea whether it makes any sense at all.
|
|
Much of this is copy-pasted from android/qa/sc/Makefile (where a couple of
|
|
unit tests for sc are built, and those do seem to mostly work) and
|
|
android/qa/desktop/Makefile (mmeeks's desktop demo, also works to some
|
|
extent)
|
|
*/
|
|
|
|
// Assets that are unpacked at run-time into the app's data directory. These
|
|
// are files read by non-LO code, fontconfig and freetype for now, that doesn't
|
|
// understand "/assets" paths.
|
|
task copyUnpackAssets(type: Copy) {
|
|
description "copies assets that need to be extracted on the device"
|
|
into 'assets/unpack'
|
|
into('program') {
|
|
from("${liboInstdir}/${liboEtcFolder}/types") {
|
|
includes = [
|
|
"offapi.rdb",
|
|
"oovbaapi.rdb"
|
|
]
|
|
}
|
|
from("${liboInstdir}/${liboUreMiscFolder}") {
|
|
includes = ["types.rdb"]
|
|
rename 'types.rdb', 'udkapi.rdb'
|
|
}
|
|
}
|
|
into('user/fonts') {
|
|
from "${liboInstdir}/share/fonts/truetype"
|
|
// Note: restrict list of fonts due to size considerations - no technical reason anymore
|
|
// ToDo: fonts would be good candidate for using Expansion Files instead
|
|
includes = [
|
|
"Liberation*.ttf",
|
|
"Caladea-*.ttf",
|
|
"Carlito-*.ttf",
|
|
"Gen*.ttf",
|
|
"opens___.ttf"
|
|
]
|
|
}
|
|
into('etc/fonts') {
|
|
from "./"
|
|
includes = ['fonts.conf']
|
|
filter {
|
|
String line ->
|
|
line.replaceAll(
|
|
'@@APPLICATION_ID@@', new String("${android.defaultConfig.applicationId}")
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
task copyAssets(type: Copy) {
|
|
description "copies assets that can be accessed within the installed apk"
|
|
into 'assets'
|
|
from("${liboSrcRoot}/readlicense_oo/license/") {
|
|
includes = ["LICENSE", "NOTICE"]
|
|
rename "LICENSE", "license.txt"
|
|
rename "NOTICE", "notice.txt"
|
|
}
|
|
from("${liboExampleDocument}") {
|
|
rename ".*", "example.odt"
|
|
}
|
|
into('program') {
|
|
from "${liboInstdir}/program"
|
|
includes = ['services.rdb', 'services/services.rdb']
|
|
|
|
into('resource') {
|
|
from "${liboInstdir}/${liboSharedResFolder}"
|
|
includes = ['*en-US.res']
|
|
}
|
|
}
|
|
into('share') {
|
|
from "${liboInstdir}/share"
|
|
// Filter data is needed by e.g. the drawingML preset shape import.
|
|
includes = ['registry/**', 'filter/**']
|
|
// those two get processed by mobile-config.py
|
|
excludes = ['registry/main.xcd', 'registry/res/registry_en-US.xcd']
|
|
}
|
|
}
|
|
|
|
task createFullConfig(type: Copy) {
|
|
// grab dir to clear whole hierarchy on clean target
|
|
outputs.dir "assets_fullUI"
|
|
into 'assets_fullUI/share/config/soffice.cfg'
|
|
from "${liboInstdir}/share/config/soffice.cfg"
|
|
}
|
|
|
|
task createStrippedConfig {
|
|
def preserveDir = file("assets_strippedUI/share/config/soffice.cfg/empty")
|
|
outputs.dir "assets_strippedUI"
|
|
outputs.dir "assets_strippedUI/share/registry/res"
|
|
outputs.file preserveDir
|
|
|
|
doLast {
|
|
file('assets_strippedUI/share/registry/res').mkdirs()
|
|
file("assets_strippedUI/share/config/soffice.cfg").mkdirs()
|
|
// just empty file
|
|
preserveDir.text = ""
|
|
}
|
|
}
|
|
|
|
|
|
task createStrippedConfigMain(type: Exec) {
|
|
dependsOn 'createStrippedConfig'
|
|
inputs.files "${liboInstdir}/share/registry/main.xcd", "${liboSrcRoot}/android/mobile-config.py"
|
|
outputs.file "assets_strippedUI/share/registry/main.xcd"
|
|
executable "${liboSrcRoot}/android/mobile-config.py"
|
|
args = ["${liboInstdir}/share/registry/main.xcd", "assets_strippedUI/share/registry/main.xcd"]
|
|
}
|
|
|
|
task createStrippedConfigRegistry(type: Exec) {
|
|
dependsOn 'createStrippedConfig'
|
|
inputs.files "${liboInstdir}/share/registry/res/registry_en-US.xcd", "${liboSrcRoot}/android/mobile-config.py"
|
|
outputs.file "assets_strippedUI/share/registry/res/registry_en-US.xcd"
|
|
executable "${liboSrcRoot}/android/mobile-config.py"
|
|
args = ["${liboInstdir}/share/registry/res/registry_en-US.xcd", "assets_strippedUI/share/registry/res/registry_en-US.xcd"]
|
|
doFirst {
|
|
file('assets_strippedUI/share/registry/res').mkdirs()
|
|
}
|
|
}
|
|
|
|
// ndk-gdb requires the gdb.setup to be in libs/<arch>/ folder - it's hardcoded in the script
|
|
// it should in theory also be able to copy the gdbserver binary onto the device, but the matching
|
|
// against prebuilt archs is too rudimentary and doesn't map armeabi-v7 to arm for example
|
|
task copyNdkDebugServer(type: Copy) {
|
|
description "copies gdbserver into and creates gdb.setup and Application.mk for use with ndk-gdb"
|
|
inputs.file "liboSettings.gradle"
|
|
def gdbsetup = file("libs/${liboAndroidAppAbi}/gdb.setup") // only needed on buildhost
|
|
// hardcoded path from ndk-gdb - reads the host architecture from that file
|
|
def applicationmk = file("jni/Application.mk")
|
|
outputs.files gdbsetup, applicationmk
|
|
outputs.dir 'jniLibs_debug' // own the directory, so it is removed on this task's clean
|
|
outputs.dir 'libs' // own the directory, so it is removed on this task's clean
|
|
into "jniLibs_debug/${liboAndroidAppAbi}"
|
|
from "${liboNdkGdbserver}"
|
|
doLast {
|
|
file("libs/${liboAndroidAppAbi}").mkdirs()
|
|
gdbsetup.text = "set solib-search-path ./obj/local/${liboAndroidAppAbi}\n"
|
|
applicationmk.text = "APP_ABI := ${liboAndroidAppAbi}\n"
|
|
}
|
|
}
|
|
|
|
task createRCfiles {
|
|
inputs.file "liboSettings.gradle"
|
|
dependsOn copyUnpackAssets, copyAssets
|
|
def sofficerc = file('assets/unpack/program/sofficerc')
|
|
def fundamentalrc = file('assets/program/fundamentalrc')
|
|
def bootstraprc = file('assets/program/bootstraprc')
|
|
def unorc = file('assets/program/unorc')
|
|
def versionrc = file('assets/program/versionrc')
|
|
|
|
outputs.files sofficerc, fundamentalrc, unorc, bootstraprc, versionrc
|
|
|
|
doLast {
|
|
sofficerc.text = '''\
|
|
[Bootstrap]
|
|
Logo=1
|
|
NativeProgress=1
|
|
URE_BOOTSTRAP=file:///assets/program/fundamentalrc
|
|
HOME=$APP_DATA_DIR/cache
|
|
OSL_SOCKET_PATH=$APP_DATA_DIR/cache
|
|
'''.stripIndent()
|
|
|
|
fundamentalrc.text = '''\
|
|
[Bootstrap]
|
|
LO_LIB_DIR=file://$APP_DATA_DIR/lib/
|
|
BRAND_BASE_DIR=file:///assets
|
|
CONFIGURATION_LAYERS=xcsxcu:${BRAND_BASE_DIR}/share/registry res:${BRAND_BASE_DIR}/share/registry
|
|
URE_BIN_DIR=file:///assets/ure/bin/dir/nothing-here/we-can/exec-anyway
|
|
'''.stripIndent()
|
|
|
|
bootstraprc.text = '''\
|
|
[Bootstrap]
|
|
InstallMode=<installmode>
|
|
ProductKey=LibreOffice '''+ "${liboVersionMajor}.${liboVersionMinor}" + '''
|
|
UserInstallation=file://$APP_DATA_DIR
|
|
'''.stripIndent()
|
|
|
|
unorc.text = '''\
|
|
[Bootstrap]
|
|
URE_INTERNAL_LIB_DIR=file://$APP_DATA_DIR/lib/
|
|
UNO_TYPES=file://$APP_DATA_DIR/program/udkapi.rdb file://$APP_DATA_DIR/program/offapi.rdb file://$APP_DATA_DIR/program/oovbaapi.rdb
|
|
UNO_SERVICES=file:///assets/program/services.rdb file:///assets/program/services/services.rdb
|
|
'''.stripIndent()
|
|
|
|
versionrc.text = '''\
|
|
[Version]
|
|
AllLanguages=en-US
|
|
BuildVersion=
|
|
buildid=''' + "${liboGitFullCommit}" + '''
|
|
ReferenceOOoMajorMinor=4.1
|
|
'''.stripIndent()
|
|
}
|
|
}
|
|
|
|
// creating the UI stuff is cheap, don't bother only applying it for the flavor..
|
|
preBuild.dependsOn 'createRCfiles',
|
|
'createStrippedConfigMain',
|
|
'createStrippedConfigRegistry',
|
|
'createFullConfig',
|
|
'copyNdkDebugServer'
|
|
|
|
clean.dependsOn 'cleanCopyAssets',
|
|
'cleanCreateStrippedConfig',
|
|
'cleanCreateFullConfig',
|
|
'cleanCopyNdkDebugServer'
|