From d2faadf5269d5ffa65175b35266af3bc7be3ece9 Mon Sep 17 00:00:00 2001 From: Anton Obzhirov Date: Wed, 29 Jan 2020 18:02:54 +0000 Subject: [PATCH] Add Android DALi demo build. Generates DALi examples shared objects and Android DALi launcher application. Android DALi application apk then can be installed on supported Android device. Change-Id: I2f87030feab33aa5c4c944323eb0ca0c042db6bd --- README.md | 33 +- build/android/.gitignore | 7 + build/android/app/.gitignore | 1 + build/android/app/build.gradle | 120 ++++++ build/android/app/src/main/AndroidManifest.xml | 72 ++++ build/android/app/src/main/cpp/CMakeLists.txt | 54 +++ build/android/app/src/main/cpp/main.cpp | 293 +++++++++++++ .../java/com/sec/dalidemo/DaliDemoApplication.java | 6 + .../com/sec/dalidemo/DaliDemoNativeActivity.java | 97 +++++ .../sec/dalidemo/DaliExamplesNativeActivity.java | 5 + .../com/sec/dalidemo/DaliTestsNativeActivity.java | 4 + .../app/src/main/res/mipmap-hdpi/dali_examples.png | Bin 0 -> 15310 bytes .../app/src/main/res/mipmap-hdpi/dali_launcher.png | Bin 0 -> 7555 bytes .../app/src/main/res/mipmap-hdpi/dali_tests.png | Bin 0 -> 15135 bytes .../app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3418 bytes .../app/src/main/res/mipmap-mdpi/dali_examples.png | Bin 0 -> 15310 bytes .../app/src/main/res/mipmap-mdpi/dali_launcher.png | Bin 0 -> 4563 bytes .../app/src/main/res/mipmap-mdpi/dali_tests.png | Bin 0 -> 15135 bytes .../app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2206 bytes .../src/main/res/mipmap-xhdpi/dali_examples.png | Bin 0 -> 15310 bytes .../src/main/res/mipmap-xhdpi/dali_launcher.png | Bin 0 -> 12472 bytes .../app/src/main/res/mipmap-xhdpi/dali_tests.png | Bin 0 -> 15135 bytes .../app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4842 bytes .../src/main/res/mipmap-xxhdpi/dali_examples.png | Bin 0 -> 15310 bytes .../src/main/res/mipmap-xxhdpi/dali_launcher.png | Bin 0 -> 18354 bytes .../app/src/main/res/mipmap-xxhdpi/dali_tests.png | Bin 0 -> 15135 bytes .../app/src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7718 bytes build/android/app/src/main/res/values/strings.xml | 7 + build/android/build.gradle | 26 ++ build/android/build.sh | 93 ++++ build/android/dali/.gitignore | 7 + build/android/dali/build.sh | 33 ++ build/android/dali/build_adaptor.sh | 27 ++ build/android/dali/build_core.sh | 27 ++ build/android/dali/build_demo.sh | 32 ++ build/android/dali/build_toolkit.sh | 33 ++ build/android/dali/env.sh | 23 + build/android/key.jks | Bin 0 -> 2126 bytes build/android/settings.gradle | 2 + build/tizen/CMakeLists.txt | 59 ++- build/tizen/demo/CMakeLists.txt | 20 +- build/tizen/examples-reel/CMakeLists.txt | 20 +- build/tizen/examples/CMakeLists.txt | 6 +- build/tizen/tests-reel/CMakeLists.txt | 19 +- demo/dali-demo.cpp | 2 + examples-reel/dali-examples-reel.cpp | 2 + .../animated-gradient-call-active.cpp | 2 +- .../animated-gradient-card-active.cpp | 2 +- examples/bezier-curve/bezier-curve-example.cpp | 5 +- examples/bloom-view/bloom-view-example.cpp | 2 +- examples/frame-callback/frame-callback.cpp | 3 +- examples/gestures/gesture-example.cpp | 5 +- examples/page-turn-view/page-turn-view-example.cpp | 2 +- .../pre-render-callback-example.cpp | 2 +- .../refraction-effect-example.cpp | 2 +- examples/rendering-basic-pbr/ktx-loader.cpp | 4 +- .../simple-text-label-example.cpp | 2 +- examples/simple-text-field/simple-text-field.cpp | 2 +- .../simple-text-label-example.cpp | 2 +- .../simple-text-renderer-example.cpp | 2 +- .../simple-text-visual-example.cpp | 2 +- packaging/com.samsung.dali-demo.spec | 4 +- .../animated-gradient-call-active-style.json | 76 ++++ resources/style/android/base-theme.json | 206 +++++++++ resources/style/android/basic-light-theme.json | 44 ++ .../style/android/contact-cards-example-theme.json | 35 ++ .../style/android/progress-bar-example-theme.json | 34 ++ resources/style/android/simple-example-theme.json | 50 +++ .../style/android/style-example-theme-one.json | 467 +++++++++++++++++++++ .../style/android/style-example-theme-three.json | 109 +++++ .../style/android/style-example-theme-two.json | 235 +++++++++++ .../style/android/text-editor-example-theme.json | 34 ++ resources/style/android/tooltip-example-theme.json | 85 ++++ shared/dali-demo-strings.h | 2 + shared/dali-table-view.cpp | 2 +- shared/execute-process-android.cpp | 48 +++ shared/execute-process-unix.cpp | 4 +- shared/execute-process-win.cpp | 2 +- shared/execute-process.h | 3 +- tests-reel/dali-tests-reel.cpp | 3 +- 80 files changed, 2562 insertions(+), 50 deletions(-) create mode 100644 build/android/.gitignore create mode 100644 build/android/app/.gitignore create mode 100644 build/android/app/build.gradle create mode 100644 build/android/app/src/main/AndroidManifest.xml create mode 100644 build/android/app/src/main/cpp/CMakeLists.txt create mode 100644 build/android/app/src/main/cpp/main.cpp create mode 100644 build/android/app/src/main/java/com/sec/dalidemo/DaliDemoApplication.java create mode 100644 build/android/app/src/main/java/com/sec/dalidemo/DaliDemoNativeActivity.java create mode 100644 build/android/app/src/main/java/com/sec/dalidemo/DaliExamplesNativeActivity.java create mode 100644 build/android/app/src/main/java/com/sec/dalidemo/DaliTestsNativeActivity.java create mode 100644 build/android/app/src/main/res/mipmap-hdpi/dali_examples.png create mode 100644 build/android/app/src/main/res/mipmap-hdpi/dali_launcher.png create mode 100644 build/android/app/src/main/res/mipmap-hdpi/dali_tests.png create mode 100644 build/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 build/android/app/src/main/res/mipmap-mdpi/dali_examples.png create mode 100644 build/android/app/src/main/res/mipmap-mdpi/dali_launcher.png create mode 100644 build/android/app/src/main/res/mipmap-mdpi/dali_tests.png create mode 100644 build/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 build/android/app/src/main/res/mipmap-xhdpi/dali_examples.png create mode 100644 build/android/app/src/main/res/mipmap-xhdpi/dali_launcher.png create mode 100644 build/android/app/src/main/res/mipmap-xhdpi/dali_tests.png create mode 100644 build/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 build/android/app/src/main/res/mipmap-xxhdpi/dali_examples.png create mode 100644 build/android/app/src/main/res/mipmap-xxhdpi/dali_launcher.png create mode 100644 build/android/app/src/main/res/mipmap-xxhdpi/dali_tests.png create mode 100644 build/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 build/android/app/src/main/res/values/strings.xml create mode 100644 build/android/build.gradle create mode 100755 build/android/build.sh create mode 100644 build/android/dali/.gitignore create mode 100755 build/android/dali/build.sh create mode 100755 build/android/dali/build_adaptor.sh create mode 100755 build/android/dali/build_core.sh create mode 100755 build/android/dali/build_demo.sh create mode 100755 build/android/dali/build_toolkit.sh create mode 100755 build/android/dali/env.sh create mode 100644 build/android/key.jks create mode 100644 build/android/settings.gradle create mode 100644 resources/style/android/animated-gradient-call-active-style.json create mode 100644 resources/style/android/base-theme.json create mode 100644 resources/style/android/basic-light-theme.json create mode 100644 resources/style/android/contact-cards-example-theme.json create mode 100644 resources/style/android/progress-bar-example-theme.json create mode 100644 resources/style/android/simple-example-theme.json create mode 100644 resources/style/android/style-example-theme-one.json create mode 100644 resources/style/android/style-example-theme-three.json create mode 100644 resources/style/android/style-example-theme-two.json create mode 100644 resources/style/android/text-editor-example-theme.json create mode 100644 resources/style/android/tooltip-example-theme.json create mode 100644 shared/execute-process-android.cpp diff --git a/README.md b/README.md index e4ee788..d154302 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ ### Requirements - - Ubuntu 14.04 or later + - Ubuntu 16.04 or later - Environment created using dali_env script in dali-core repository - GCC version 6 @@ -71,3 +71,34 @@ Before running make install as normal: - Add all source files for the required example in this directory. - Modify "com.samsung.dali-demo.xml" to include your example so that it can be launched on target. - No changes are required to the make system as long as the above is followed, your example will be automatically built & installed. + +## 3. Building for Android + +### Requirements + + - Ubuntu 16.04 or later + - GCC version 6 + +### Building the Repository + +To build the repository enter the 'build/android' folder: + + $ cd dali-demo/build/android + +Then run the following command: + + $ ./build.sh + +For debug build: + + $ DEBUG=1 ./build.sh + +To clean the build: + + $ ./build.sh clean + +To install apks: + + $ adb install -r ./app/build/outputs/apk/debug/dali-demo-debug.apk + $ adb install -r ./app/build/outputs/apk/release/dali-demo-release.apk + diff --git a/build/android/.gitignore b/build/android/.gitignore new file mode 100644 index 0000000..e136078 --- /dev/null +++ b/build/android/.gitignore @@ -0,0 +1,7 @@ +build +gradle +.gradle +gradlew +gradlew.bat +local.properties +gradle.properties diff --git a/build/android/app/.gitignore b/build/android/app/.gitignore new file mode 100644 index 0000000..0e60033 --- /dev/null +++ b/build/android/app/.gitignore @@ -0,0 +1 @@ +.cxx diff --git a/build/android/app/build.gradle b/build/android/app/build.gradle new file mode 100644 index 0000000..28042e4 --- /dev/null +++ b/build/android/app/build.gradle @@ -0,0 +1,120 @@ +apply plugin: 'com.android.application' + +def buildType = "debug" +def androidABI = System.getenv('TARGET') +def daliDir = System.getenv('DALI_DIR') +def daliEnvDir = System.getenv('DALI_ENV_DIR') +def daliEnvLibDir = daliEnvDir + '/lib' +def daliEnvFilesDir = daliEnvDir + '/files' + +android { + signingConfigs { + config { + storeFile file("../key.jks") + storePassword "Samsung" + keyAlias "key0" + keyPassword "Samsung" + } + } + compileSdkVersion 28 + defaultConfig { + applicationId = 'com.sec.dalidemo' + minSdkVersion 26 + targetSdkVersion 26 + versionCode 1 + versionName "1.0" + externalNativeBuild { + cmake { + cppFlags "-fexceptions -frtti -w -Wall -std=gnu++11" + arguments '-DANDROID_STL=c++_shared' + } + } + } + project.archivesBaseName = 'dali-demo' + aaptOptions { + noCompress '' + } + buildTypes { + debug { + ndk { + abiFilters androidABI + } + buildType = "debug" + } + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), + 'proguard-rules.pro' + ndk { + abiFilters androidABI + } + + signingConfig signingConfigs.config + buildType = "release" + } + } + packagingOptions { + if( androidABI == "arm64-v8a" ) + { + pickFirst 'lib/arm64-v8a/libc++_shared.so' + pickFirst 'lib/arm64-v8a/libdaliview.so' + } + else + { + pickFirst 'lib/armeabi-v7a/libc++_shared.so' + pickFirst 'lib/armeabi-v7a/libdaliview.so' + } + } + sourceSets { + main { + jniLibs.srcDirs += daliEnvLibDir + assets.srcDirs += daliEnvFilesDir + } + } + lintOptions { + checkReleaseBuilds false + } + externalNativeBuild { + cmake { + version '3.10.2' + path 'src/main/cpp/CMakeLists.txt' + } + } + compileOptions { + targetCompatibility = 1.6 + sourceCompatibility = 1.6 + } +} + +dependencies { + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' +} + +task buildDaliDependencies(type:Exec) { + environment "PREFIX", daliEnvDir + environment "ANDROID_ABI", androidABI + environment "ANDROID_PLATFORM", "26" + if (buildType == 'debug') + environment "DEBUG", "1" + workingDir file(daliDir + '/android-dependencies/cmake').getAbsolutePath() + commandLine 'sh', './buildall.sh' +} + +task buildDali(type:Exec) { + workingDir "../dali" + if (buildType == 'debug') + environment "DEBUG", "1" + commandLine 'sh', './build.sh' +} + +task cleanDali(type:Exec) { + workingDir "../dali" + commandLine 'sh', './build.sh', 'clean' +} + +buildDali.dependsOn buildDaliDependencies +preBuild.dependsOn buildDali + +clean.dependsOn cleanDali diff --git a/build/android/app/src/main/AndroidManifest.xml b/build/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..15e8dc0 --- /dev/null +++ b/build/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/android/app/src/main/cpp/CMakeLists.txt b/build/android/app/src/main/cpp/CMakeLists.txt new file mode 100644 index 0000000..39e67ad --- /dev/null +++ b/build/android/app/src/main/cpp/CMakeLists.txt @@ -0,0 +1,54 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 3.4.1) + +SET(DALI_ENV_DIR $ENV{DALI_ENV_DIR}) +SET(ENV{PKG_CONFIG_PATH} "${DALI_ENV_DIR}/lib/${ANDROID_ABI}/pkgconfig:$ENV{PKG_CONFIG_PATH}") +FIND_PACKAGE(PkgConfig REQUIRED) + +SET(ANDROID_SDK $ENV{ANDROID_SDK}) +SET(ANDROID_NDK $ENV{ANDROID_NDK}) + +# build native_app_glue as a static lib +ADD_LIBRARY(native_app_glue STATIC + ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c) + +# now build app's shared lib +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions -frtti -w -Wall -std=gnu++11") + +# Export ANativeActivity_onCreate(), +# Refer to: https://github.com/android-ndk/ndk/issues/381. +SET(CMAKE_SHARED_LINKER_FLAGS + "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate") + +ADD_LIBRARY(native-activity SHARED main.cpp) + +TARGET_INCLUDE_DIRECTORIES(native-activity PRIVATE + ${ANDROID_NDK}/sources/android/native_app_glue) + +INCLUDE_DIRECTORIES(${DALI_ENV_DIR}/include) +INCLUDE_DIRECTORIES(${DALI_ENV_DIR}/include/dali) + +IF(${CMAKE_BUILD_TYPE} STREQUAL "Debug") + SET(ENABLE_TRACE ON) +ELSE() + SET(ENABLE_TRACE OFF) +ENDIF() + +IF(EXISTS "${DALI_ENV_DIR}") + PKG_CHECK_MODULES(DALI_CORE dali-core REQUIRED NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH) + PKG_CHECK_MODULES(DALI_ADAPTOR dali-adaptor REQUIRED NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH) + PKG_CHECK_MODULES(DALI_TOOLKIT dali-toolkit REQUIRED NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH) +ELSE() + MESSAGE(WARNING "${DALI_ENV_DIR} not found!") +ENDIF() + +# add lib dependencies +TARGET_LINK_LIBRARIES(native-activity + ${DALI_TOOLKIT_LDFLAGS} + ${DALI_ADAPTOR_LDFLAGS} + ${DALI_CORE_LDFLAGS} + native_app_glue + z + android + log + EGL + GLESv3) diff --git a/build/android/app/src/main/cpp/main.cpp b/build/android/app/src/main/cpp/main.cpp new file mode 100644 index 0000000..02fb4c4 --- /dev/null +++ b/build/android/app/src/main/cpp/main.cpp @@ -0,0 +1,293 @@ +/* + * Copyright (c) 2020 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// EXTERNAL INCLUDES +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +// from android_native_app_glue.c +#ifndef NDEBUG +#define LOGV(...) ((void)__android_log_print(ANDROID_LOG_VERBOSE, "dalidemo", __VA_ARGS__)) +#else +#define LOGV(...) ((void)0) +#endif + +namespace +{ + +void free_saved_state(struct android_app *android_app) +{ + pthread_mutex_lock(&android_app->mutex); + + if (android_app->savedState != NULL) + { + free(android_app->savedState); + android_app->savedState = NULL; + android_app->savedStateSize = 0; + } + + pthread_mutex_unlock(&android_app->mutex); +} + +void android_app_destroy(struct android_app *android_app) +{ + LOGV("android_app_destroy"); + free_saved_state(android_app); + pthread_mutex_lock(&android_app->mutex); + + if (android_app->inputQueue != NULL) + { + AInputQueue_detachLooper(android_app->inputQueue); + } + + AConfiguration_delete(android_app->config); + android_app->destroyed = 1; + + pthread_cond_broadcast(&android_app->cond); + pthread_mutex_unlock(&android_app->mutex); + + // Can't touch android_app object after this. +} + +} + +void ExtractAsset(struct android_app* state, const std::string& assetPath, const std::string& filePath) +{ + AAsset* asset = AAssetManager_open(state->activity->assetManager, assetPath.c_str(), AASSET_MODE_BUFFER); + if (asset) + { + size_t length = AAsset_getLength(asset) + 1; + + char* buffer = new char[length]; + length = AAsset_read(asset, buffer, length); + + FILE* file = fopen(filePath.c_str(), "wb"); + if (file) + { + fwrite(buffer, 1, length, file); + fclose(file); + } + + delete[] buffer; + AAsset_close(asset); + } +} + +void ExtractAssets(struct android_app* state, const std::string& assetDirPath, const std::string& filesDirPath) +{ + AAssetDir* assetDir = AAssetManager_openDir(state->activity->assetManager, assetDirPath.c_str()); + if (assetDir) + { + if (mkdir(filesDirPath.c_str(), S_IRWXU) != -1) + { + const char *filename = NULL; + std::string assetPath = assetDirPath + "/"; + while ((filename = AAssetDir_getNextFileName(assetDir)) != NULL) + { + ExtractAsset(state, assetPath + filename, filesDirPath + "/" + filename); + } + } + + AAssetDir_close(assetDir); + } +} + +void ExtractFontConfig(struct android_app* state, std::string assetFontConfig, std::string fontsPath) +{ + AAsset* asset = AAssetManager_open(state->activity->assetManager, assetFontConfig.c_str(), AASSET_MODE_BUFFER); + if (asset) + { + size_t length = AAsset_getLength(asset) + 1; + + char* buffer = new char[length]; + length = AAsset_read(asset, buffer, length); + + std::string fontConfig = std::string(buffer, length); + int i = fontConfig.find("~"); + if (i != std::string::npos) + { + std::string filesDir = state->activity->internalDataPath; + fontConfig.replace(i, 1, filesDir); + } + + std::string fontsFontConfig = fontsPath; + FILE* file = fopen(fontsFontConfig.c_str(), "wb"); + if (file) + { + fwrite(fontConfig.c_str(), 1, fontConfig.size(), file); + fclose(file); + } + + delete[] buffer; + AAsset_close(asset); + } +} + +class DaliDemoNativeActivity +{ +public: + ANativeActivity* activity; + DaliDemoNativeActivity(ANativeActivity* activity) + : activity(activity) + { + } + + class NativeActivityJNI + { + public: + ANativeActivity* activity; + JNIEnv* env; + jclass clazz; + + NativeActivityJNI(ANativeActivity* activity) + : activity(activity) + { + activity->vm->AttachCurrentThread(&env, NULL); + clazz = env->GetObjectClass(activity->clazz); + } + + ~NativeActivityJNI() + { + activity->vm->DetachCurrentThread(); + } + + jstring toJString(const std::string& str) + { + return env->NewStringUTF(str.c_str()); + } + + std::string toString(jstring jstr) + { + std::string out; + if (jstr) + { + const char* utf = env->GetStringUTFChars(jstr, 0); + out = std::string(utf); + env->ReleaseStringUTFChars(jstr, utf); + } + + return out; + } + + std::string callStringMethod(const std::string& name, const std::string& arg) + { + jmethodID methodID = env->GetMethodID(clazz, name.c_str(), "(Ljava/lang/String;)Ljava/lang/String;"); + jstring jstr = (jstring)env->CallObjectMethod(activity->clazz, methodID, toJString(arg)); + return toString(jstr); + } + }; + + std::string getMetaData(const std::string& key) + { + NativeActivityJNI nativeActivityJNI(activity); + return nativeActivityJNI.callStringMethod("getMetaData", key); + } + + std::string getIntentStringExtra(const std::string& key) + { + NativeActivityJNI nativeActivityJNI(activity); + return nativeActivityJNI.callStringMethod("getIntentStringExtra", key); + } +}; + +extern "C" void FcConfigPathInit(const char* path, const char* file); + +void android_main( struct android_app* state ) +{ + std::string filesDir = state->activity->internalDataPath; + + std::string fontconfigPath = filesDir + "/fonts"; + setenv("FONTCONFIG_PATH", fontconfigPath.c_str(), 1); + + std::string fontconfigFile = fontconfigPath + "/fonts.conf"; + setenv("FONTCONFIG_FILE", fontconfigFile.c_str(), 1); + + struct stat st = { 0 }; + FcConfigPathInit( fontconfigPath.c_str(), fontconfigFile.c_str() ); + + if (stat(fontconfigPath.c_str(), &st) == -1) + { + mkdir(fontconfigPath.c_str(), S_IRWXU); + ExtractFontConfig(state, "fonts/fonts.conf", fontconfigPath + "/fonts.conf"); + ExtractFontConfig(state, "fonts/fonts.dtd", fontconfigPath + "/fonts.dtd" ); + ExtractFontConfig(state, "fonts/local.conf", fontconfigPath + "/local.conf"); + ExtractAssets(state, "fonts/dejavu", fontconfigPath + "/dejavu"); + ExtractAssets(state, "fonts/tizen", fontconfigPath + "/tizen"); + ExtractAssets(state, "fonts/bitmap", fontconfigPath + "/bitmap"); + } + + Dali::Integration::AndroidFramework::New(); + Dali::Integration::AndroidFramework::Get().SetNativeApplication( state ); + Dali::Integration::AndroidFramework::Get().SetApplicationConfiguration( state->config ); + Dali::Integration::AndroidFramework::Get().SetApplicationAssets( state->activity->assetManager ); + Dali::Integration::AndroidFramework::Get().SetInternalDataPath( filesDir ); + + DaliDemoNativeActivity nativeActivity(state->activity); + + int status = 0; + std::string libpath = "/data/data/com.sec.dalidemo/lib/libdali-demo.so"; + std::string callParam = nativeActivity.getIntentStringExtra("start"); + if (callParam.empty()) + { + callParam = nativeActivity.getMetaData("start"); + } + + if (!callParam.empty()) + { + libpath = "/data/data/com.sec.dalidemo/lib/lib" + callParam + ".so"; + } + + void* handle = dlopen( libpath.c_str(), RTLD_LAZY ); + if (!handle) + { + std::exit(status); + } + + dlerror(); /* Clear any existing error */ + + int (*main)(int, char**) = (int(*)(int, char**))dlsym(handle, "main"); + if (main) + { + status = main( 0, nullptr ); + } + + if (handle) + { + dlclose(handle); + handle = nullptr; + } + + android_app_destroy(state); + + Dali::Integration::AndroidFramework::Get().SetNativeApplication(nullptr); + Dali::Integration::AndroidFramework::Get().SetApplicationConfiguration(nullptr); + Dali::Integration::AndroidFramework::Get().SetApplicationAssets(nullptr); + Dali::Integration::AndroidFramework::Delete(); + + // We need to kill the application process manually, DALi cannot restart in the same process due to memory leaks + std::exit(status); +} + +//END_INCLUDE(all) diff --git a/build/android/app/src/main/java/com/sec/dalidemo/DaliDemoApplication.java b/build/android/app/src/main/java/com/sec/dalidemo/DaliDemoApplication.java new file mode 100644 index 0000000..7c853cc --- /dev/null +++ b/build/android/app/src/main/java/com/sec/dalidemo/DaliDemoApplication.java @@ -0,0 +1,6 @@ +package com.sec.dalidemo; + +import android.app.Application; + +public class DaliDemoApplication extends Application { +} diff --git a/build/android/app/src/main/java/com/sec/dalidemo/DaliDemoNativeActivity.java b/build/android/app/src/main/java/com/sec/dalidemo/DaliDemoNativeActivity.java new file mode 100644 index 0000000..64a7853 --- /dev/null +++ b/build/android/app/src/main/java/com/sec/dalidemo/DaliDemoNativeActivity.java @@ -0,0 +1,97 @@ +package com.sec.dalidemo; + +import android.annotation.TargetApi; +import android.app.NativeActivity; +import android.content.ComponentName; +import android.content.Context; +import android.content.pm.ActivityInfo; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.view.View; +import android.view.WindowManager; + +public class DaliDemoNativeActivity extends NativeActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Hide toolbar + int SDK_INT = android.os.Build.VERSION.SDK_INT; + if(SDK_INT >= 19) + { + setImmersiveSticky(); + + View decorView = getWindow().getDecorView(); + decorView.setOnSystemUiVisibilityChangeListener + (new View.OnSystemUiVisibilityChangeListener() { + @Override + public void onSystemUiVisibilityChange(int visibility) { + setImmersiveSticky(); + } + }); + } + } + + @TargetApi(19) + void setImmersiveSticky() { + View decorView = getWindow().getDecorView(); + decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); + } + + @TargetApi(19) + protected void onResume() { + super.onResume(); + + //Hide toolbar + int SDK_INT = android.os.Build.VERSION.SDK_INT; + if (SDK_INT >= 11 && SDK_INT < 14) + { + getWindow().getDecorView().setSystemUiVisibility(View.STATUS_BAR_HIDDEN); + } + else if (SDK_INT >= 14 && SDK_INT < 19) + { + getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LOW_PROFILE); + } + else if (SDK_INT >= 19) + { + setImmersiveSticky(); + } + } + + protected void onPause() { + super.onPause(); + } + + public final void setSoftInputMode(boolean visible) { + if (visible) { + getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); + } + else { + getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); + } + } + + public final String getMetaData(String key) { + try { + ActivityInfo ai = getApplicationContext().getPackageManager() + .getActivityInfo(getComponentName(), PackageManager.GET_META_DATA); + Bundle bundle = ai.metaData; + if (bundle != null) + return bundle.getString(key); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + + return null; + } + + public final String getIntentStringExtra(String key) { + return getIntent().getStringExtra(key); + } +} diff --git a/build/android/app/src/main/java/com/sec/dalidemo/DaliExamplesNativeActivity.java b/build/android/app/src/main/java/com/sec/dalidemo/DaliExamplesNativeActivity.java new file mode 100644 index 0000000..a331a47 --- /dev/null +++ b/build/android/app/src/main/java/com/sec/dalidemo/DaliExamplesNativeActivity.java @@ -0,0 +1,5 @@ +package com.sec.dalidemo; + +public class DaliExamplesNativeActivity extends DaliDemoNativeActivity { +} + diff --git a/build/android/app/src/main/java/com/sec/dalidemo/DaliTestsNativeActivity.java b/build/android/app/src/main/java/com/sec/dalidemo/DaliTestsNativeActivity.java new file mode 100644 index 0000000..09420a7 --- /dev/null +++ b/build/android/app/src/main/java/com/sec/dalidemo/DaliTestsNativeActivity.java @@ -0,0 +1,4 @@ +package com.sec.dalidemo; + +public class DaliTestsNativeActivity extends DaliDemoNativeActivity { +} diff --git a/build/android/app/src/main/res/mipmap-hdpi/dali_examples.png b/build/android/app/src/main/res/mipmap-hdpi/dali_examples.png new file mode 100644 index 0000000000000000000000000000000000000000..349b175d4100d111e9ce0a6f894efd66a6cd66af GIT binary patch literal 15310 zcmWk#18`hx6y7A8WRu2d(6~_>+qP}nwr$&PY+DT*G;D0!=G!+ryLaa9%-+5CKmR!& z&WVth6+?u_g$Doth!Wz$ir}OF|8Ecs_;Y~QU>tmaF_aP$27Lbi%I_{s0-u4i7uRqC z0KTCA|Aqi$W@Cd-!a7UHh`??`!lV4a5dFeo0ss&JB!mT&-B-?iJlvJ{yFU-B8jTs3 zLBS{>d42?vtw2qnvM}_iVy)DY!gT=YizXeO33lS-mGR4{!#ch&8 zMScto=-;wL!PLfi@79;k?+zPI2RTVhNpQhmwKfhjDE=7#oyd56_2_;5olz2zbgJie zP0_kV3XrWy0slS2pYXQvBZ_v?)wQ~BQS0{mLKcY4kw^&kB{ z-3%;uhnZ4nwEl*(vB-p@Fy;bScw=v&*^zi-q3Fi_DFe}g{$}X}#P&VCH3Q5D>6tK- z%mt9)sDaqT;wXW?EPetkqda_1#Wgn2GT9xB^v9AB$sRYp@xb}_-kv<|(}|HS*5p)J zuX7eh#ov;~R>EC#KiOkvPr+VwiJVc7KmQFj_V0%Xt|^5O6fm&FO)QDPCJvttGtF!! z3#@aswm8n*B1^0K>38#|n*zfAP1e)I`*=2^d@{>y5Y%2Kj}m%ST)g$}d+O|@y>Xd> z33&KCJJiXiM;v%5r<|5XhldvKG$0Zk-6opyV=w6P7TI=Lq@jCXp2C%b%;(#ChC5!YHhi>J(`O->0whJjF+Fh0E47g!_cJ%orv;6L(Ir8mbws16MP5$h>S%_b%s z=6!B#g?v%V1NJFYrLNlblC&ERExM?5Oa7#y!i4_5Mxfb)F5ADk;@zJF^y>?#;erw`DTa$B7TI^@i0eiFpahwqR+)pBxC{; zjC-nx8CUniCikUw8Uz8|MMB6lj=#R1(dQ&(JgXW#rCK;jps0=-+*PU5aE#Zj zFw}22DE}5Qf{d?Tr`2{@kvB5+4GsRtA=IpwHj7)e&2REHOPnr z`0jyDIy>r=RO*#f6lzb+7hIeboMfT%6?UKi<4mNnP;!1>mH3sV(1yntWz$TuPi_Tp zd2qWnk>{8Ve!}Nh;1JmZ`W%5T+L0*EsDYd^T

qhk2f-)wkmxw|vNNNnBg7;_dVDz` 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 literal 0 HcmV?d00001 diff --git a/build/android/app/src/main/res/mipmap-hdpi/dali_launcher.png b/build/android/app/src/main/res/mipmap-hdpi/dali_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2ea08cea0af5d4681883501101e3dc0d26121f70 GIT binary patch literal 7555 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 too!LsNn=6^t#7zU6plLx@Zfs=&}x=q;1Ed#Z+D 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 literal 0 HcmV?d00001 diff --git a/build/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/build/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..cde69bcccec65160d92116f20ffce4fce0b5245c GIT binary patch literal 3418 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

qhk2f-)wkmxw|vNNNnBg7;_dVDz` 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 literal 0 HcmV?d00001 diff --git a/build/android/app/src/main/res/mipmap-mdpi/dali_launcher.png b/build/android/app/src/main/res/mipmap-mdpi/dali_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..e7100a3421ffb431e9b3de404a9e3071d4ba5e1c GIT binary patch literal 4563 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 too!LsNn=6^t#7zU6plLx@Zfs=&}x=q;1Ed#Z+D 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 literal 0 HcmV?d00001 diff --git a/build/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/build/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..c133a0cbd379f5af6dbf1a899a0293ca5eccfad0 GIT binary patch literal 2206 zcmZ{mc|6mPAICqNwJrBe)OTwlM~;a|Uz&T!k&1?zWA4p4M`7F7`J;wP4IvS^nJ7{y zAtgDMD>=W8<&GtU-}>|S$M5}kyxz~p>-~Pb{(irc?QF~icx8A201&Xin%Hxx@kekd zw>yHjlemC*8(JFz05gs6x7#7EM|xoGtpVVs0szqB0bqwaqAdVG7&rLc6#(=y0YEA! z=jFw}xeKVfmAMI*+}bv7qH=LK2#X5^06wul0s+}M(f|O@&WMyG9frlGyLb z&Eix=47rL84J+tEWcy_XTyc*xw9uOQy`qmHCjAeJ?d=dUhm;P}^F=LH42AEMIh6X8 z*I7Q1jK%gVlL|8w?%##)xSIY`Y+9$SC8!X*_A*S0SWOKNUtza(FZHahoC2|6f=*oD zxJ8-RZk!+YpG+J}Uqnq$y%y>O^@e5M3SSw^29PMwt%8lX^9FT=O@VX$FCLBdlj#<{ zJWWH<#iU!^E7axvK+`u;$*sGq1SmGYc&{g03Md&$r@btQSUIjl&yJXA&=79FdJ+D< z4K^ORdM{M0b2{wRROvjz1@Rb>5dFb@gfkYiIOAKM(NR3*1JpeR_Hk3>WGvU&>}D^HXZ02JUnM z@1s_HhX#rG7;|FkSh2#agJ_2fREo)L`ws+6{?IeWV(>Dy8A(6)IjpSH-n_uO=810y z#4?ez9NnERv6k)N13sXmx)=sv=$$i_QK`hp%I2cyi*J=ihBWZLwpx9Z#|s;+XI!0s zLjYRVt!1KO;mnb7ZL~XoefWU02f{jcY`2wZ4QK+q7gc4iz%d0)5$tPUg~$jVI6vFO zK^wG7t=**T40km@TNUK+WTx<1mL|6Tn6+kB+E$Gpt8SauF9E-CR9Uui_EHn_nmBqS z>o#G}58nHFtICqJPx<_?UZ;z0_(0&UqMnTftMKW@%AxYpa!g0fxGe060^xkRtYguj ze&fPtC!?RgE}FsE0*^2lnE>42K#jp^nJDyzp{JV*jU?{+%KzW37-q|d3i&%eooE6C8Z2t2 z9bBL;^fzVhdLxCQh1+Ms5P)ilz9MYFKdqYN%*u^ch(Fq~QJASr5V_=szAKA4Xm5M} z(Kka%r!noMtz6ZUbjBrJ?Hy&c+mHB{OFQ}=41Irej{0N90`E*~_F1&7Du+zF{Dky) z+KN|-mmIT`Thcij!{3=ibyIn830G zN{kI3d`NgUEJ|2If}J!?@w~FV+v?~tlo8ps3Nl`3^kI)WfZ0|ms6U8HEvD9HIDWkz6`T_QSewYZyzkRh)!g~R>!jaR9;K|#82kfE5^;R!~}H4C?q{1AG?O$5kGp)G$f%VML%aPD?{ zG6)*KodSZRXbl8OD=ETxQLJz)KMI7xjArKUNh3@0f|T|75?Yy=pD7056ja0W)O;Td zCEJ=7q?d|$3rZb+8Cvt6mybV-#1B2}Jai^DOjM2<90tpql|M5tmheg){2NyZR}x3w zL6u}F+C-PIzZ56q0x$;mVJXM1V0;F}y9F29ob51f;;+)t&7l30gloMMHPTuod530FC}j^4#qOJV%5!&e!H9#!N&XQvs5{R zD_FOomd-uk@?_JiWP%&nQ_myBlM6so1Ffa1aaL7B`!ZTXPg_S%TUS*>M^8iJRj1*~ e{{%>Z1YfTk|3C04d;8A^0$7;Zm{b|L#{L(;l>}-4 literal 0 HcmV?d00001 diff --git a/build/android/app/src/main/res/mipmap-xhdpi/dali_examples.png b/build/android/app/src/main/res/mipmap-xhdpi/dali_examples.png new file mode 100644 index 0000000000000000000000000000000000000000..349b175d4100d111e9ce0a6f894efd66a6cd66af GIT binary patch literal 15310 zcmWk#18`hx6y7A8WRu2d(6~_>+qP}nwr$&PY+DT*G;D0!=G!+ryLaa9%-+5CKmR!& z&WVth6+?u_g$Doth!Wz$ir}OF|8Ecs_;Y~QU>tmaF_aP$27Lbi%I_{s0-u4i7uRqC z0KTCA|Aqi$W@Cd-!a7UHh`??`!lV4a5dFeo0ss&JB!mT&-B-?iJlvJ{yFU-B8jTs3 zLBS{>d42?vtw2qnvM}_iVy)DY!gT=YizXeO33lS-mGR4{!#ch&8 zMScto=-;wL!PLfi@79;k?+zPI2RTVhNpQhmwKfhjDE=7#oyd56_2_;5olz2zbgJie zP0_kV3XrWy0slS2pYXQvBZ_v?)wQ~BQS0{mLKcY4kw^&kB{ z-3%;uhnZ4nwEl*(vB-p@Fy;bScw=v&*^zi-q3Fi_DFe}g{$}X}#P&VCH3Q5D>6tK- z%mt9)sDaqT;wXW?EPetkqda_1#Wgn2GT9xB^v9AB$sRYp@xb}_-kv<|(}|HS*5p)J zuX7eh#ov;~R>EC#KiOkvPr+VwiJVc7KmQFj_V0%Xt|^5O6fm&FO)QDPCJvttGtF!! z3#@aswm8n*B1^0K>38#|n*zfAP1e)I`*=2^d@{>y5Y%2Kj}m%ST)g$}d+O|@y>Xd> z33&KCJJiXiM;v%5r<|5XhldvKG$0Zk-6opyV=w6P7TI=Lq@jCXp2C%b%;(#ChC5!YHhi>J(`O->0whJjF+Fh0E47g!_cJ%orv;6L(Ir8mbws16MP5$h>S%_b%s z=6!B#g?v%V1NJFYrLNlblC&ERExM?5Oa7#y!i4_5Mxfb)F5ADk;@zJF^y>?#;erw`DTa$B7TI^@i0eiFpahwqR+)pBxC{; zjC-nx8CUniCikUw8Uz8|MMB6lj=#R1(dQ&(JgXW#rCK;jps0=-+*PU5aE#Zj zFw}22DE}5Qf{d?Tr`2{@kvB5+4GsRtA=IpwHj7)e&2REHOPnr z`0jyDIy>r=RO*#f6lzb+7hIeboMfT%6?UKi<4mNnP;!1>mH3sV(1yntWz$TuPi_Tp zd2qWnk>{8Ve!}Nh;1JmZ`W%5T+L0*EsDYd^T

qhk2f-)wkmxw|vNNNnBg7;_dVDz` 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 literal 0 HcmV?d00001 diff --git a/build/android/app/src/main/res/mipmap-xhdpi/dali_launcher.png b/build/android/app/src/main/res/mipmap-xhdpi/dali_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb63d43411c3868c8ede8d8e9b61d08752716d5 GIT binary patch literal 12472 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 too!LsNn=6^t#7zU6plLx@Zfs=&}x=q;1Ed#Z+D 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 literal 0 HcmV?d00001 diff --git a/build/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/build/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..bfa42f0e7b91d006d22352c9ff2f134e504e3c1d GIT binary patch literal 4842 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 literal 0 HcmV?d00001 diff --git a/build/android/app/src/main/res/mipmap-xxhdpi/dali_examples.png b/build/android/app/src/main/res/mipmap-xxhdpi/dali_examples.png new file mode 100644 index 0000000000000000000000000000000000000000..349b175d4100d111e9ce0a6f894efd66a6cd66af GIT binary patch literal 15310 zcmWk#18`hx6y7A8WRu2d(6~_>+qP}nwr$&PY+DT*G;D0!=G!+ryLaa9%-+5CKmR!& z&WVth6+?u_g$Doth!Wz$ir}OF|8Ecs_;Y~QU>tmaF_aP$27Lbi%I_{s0-u4i7uRqC z0KTCA|Aqi$W@Cd-!a7UHh`??`!lV4a5dFeo0ss&JB!mT&-B-?iJlvJ{yFU-B8jTs3 zLBS{>d42?vtw2qnvM}_iVy)DY!gT=YizXeO33lS-mGR4{!#ch&8 zMScto=-;wL!PLfi@79;k?+zPI2RTVhNpQhmwKfhjDE=7#oyd56_2_;5olz2zbgJie zP0_kV3XrWy0slS2pYXQvBZ_v?)wQ~BQS0{mLKcY4kw^&kB{ z-3%;uhnZ4nwEl*(vB-p@Fy;bScw=v&*^zi-q3Fi_DFe}g{$}X}#P&VCH3Q5D>6tK- z%mt9)sDaqT;wXW?EPetkqda_1#Wgn2GT9xB^v9AB$sRYp@xb}_-kv<|(}|HS*5p)J zuX7eh#ov;~R>EC#KiOkvPr+VwiJVc7KmQFj_V0%Xt|^5O6fm&FO)QDPCJvttGtF!! z3#@aswm8n*B1^0K>38#|n*zfAP1e)I`*=2^d@{>y5Y%2Kj}m%ST)g$}d+O|@y>Xd> z33&KCJJiXiM;v%5r<|5XhldvKG$0Zk-6opyV=w6P7TI=Lq@jCXp2C%b%;(#ChC5!YHhi>J(`O->0whJjF+Fh0E47g!_cJ%orv;6L(Ir8mbws16MP5$h>S%_b%s z=6!B#g?v%V1NJFYrLNlblC&ERExM?5Oa7#y!i4_5Mxfb)F5ADk;@zJF^y>?#;erw`DTa$B7TI^@i0eiFpahwqR+)pBxC{; zjC-nx8CUniCikUw8Uz8|MMB6lj=#R1(dQ&(JgXW#rCK;jps0=-+*PU5aE#Zj zFw}22DE}5Qf{d?Tr`2{@kvB5+4GsRtA=IpwHj7)e&2REHOPnr z`0jyDIy>r=RO*#f6lzb+7hIeboMfT%6?UKi<4mNnP;!1>mH3sV(1yntWz$TuPi_Tp zd2qWnk>{8Ve!}Nh;1JmZ`W%5T+L0*EsDYd^T

qhk2f-)wkmxw|vNNNnBg7;_dVDz` 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 literal 0 HcmV?d00001 diff --git a/build/android/app/src/main/res/mipmap-xxhdpi/dali_launcher.png b/build/android/app/src/main/res/mipmap-xxhdpi/dali_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..6a18f3d4108e90a9683a95890bb4e48c21e62b8b GIT binary patch literal 18354 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 too!LsNn=6^t#7zU6plLx@Zfs=&}x=q;1Ed#Z+D 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 literal 0 HcmV?d00001 diff --git a/build/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/build/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..324e72cdd7480cb983fa1bcc7ce686e51ef87fe7 GIT binary patch literal 7718 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 literal 0 HcmV?d00001 diff --git a/build/android/app/src/main/res/values/strings.xml b/build/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..e07cdd0 --- /dev/null +++ b/build/android/app/src/main/res/values/strings.xml @@ -0,0 +1,7 @@ + + + DALi + DALi Demo + DALi Examples + DALi Tests + diff --git a/build/android/build.gradle b/build/android/build.gradle new file mode 100644 index 0000000..5b10372 --- /dev/null +++ b/build/android/build.gradle @@ -0,0 +1,26 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +buildscript { + repositories { + google() + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:3.5.2' + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} + + + + + diff --git a/build/android/build.sh b/build/android/build.sh new file mode 100755 index 0000000..6e0bf9f --- /dev/null +++ b/build/android/build.sh @@ -0,0 +1,93 @@ +[ -z $ROOT_DIR ] && ROOT_DIR=$HOME +echo "Using ROOT_DIR=\"$ROOT_DIR\"" + +[ -z $DALI_DIR ] && DALI_DIR=$(cd ../../../;pwd) +echo "Using DALI_DIR=\"$DALI_DIR\"" +export DALI_DIR=$DALI_DIR + +[ -z $DALI_ENV_DIR ] && DALI_ENV_DIR=$DALI_DIR/dali-env/android +echo "Using DALI_ENV_DIR=\"$DALI_ENV_DIR\"" +export DALI_ENV_DIR=$DALI_ENV_DIR + +[ -z $TARGET ] && export TARGET=armeabi-v7a +echo "Using TARGET=\"$TARGET\"" + +if [ ! -z $http_proxy ] +then + proxyFull=${http_proxy/http:\/\/} + proxyHost=$(echo $proxyFull | cut -d: -f 1) + proxyPort=$(echo $proxyFull | cut -d: -f 2) + SdbProxyOptions="--proxy=http --proxy_host=$proxyHost --proxy_port=$proxyPort" + echo "Proxy detected Host:$proxyHost Port:$proxyPort" +fi + +if [ ! -d "$ANDROID_SDK" ]; then + if [ ! -d "$ROOT_DIR/Android/Sdk" ]; then + mkdir -p "$ROOT_DIR/Android/Sdk" + cd "$ROOT_DIR/Android/Sdk" + wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip + unzip sdk-tools-linux-4333796.zip + tools/bin/sdkmanager --update $SdbProxyOptions + yes | tools/bin/sdkmanager $SdbProxyOptions "patcher;v4" "platform-tools" "platforms;android-29" "build-tools;29.0.2" "lldb;3.1" "cmake;3.10.2.4988404" "ndk-bundle" "ndk;20.1.5948944" + cd - + fi +fi + +if [ ! -d "$ANDROID_SDK" ]; then +# try default path + if [ -d "$ROOT_DIR/Android/Sdk" ]; then + export ANDROID_SDK=$ROOT_DIR/Android/Sdk + fi +fi + +if [ ! -d "$ANDROID_NDK" ]; then + if [ -d "$ANDROID_SDK" ]; then + NDK_DIR=$(find $ANDROID_SDK -maxdepth 2 -name ndk-build | sed 's/\/ndk-build//') + if [ -d "$NDK_DIR" ]; then + export ANDROID_NDK=$NDK_DIR + fi + fi +fi + +if [ ! -d "$ROOT_DIR/gradle/gradle-5.4.1" ]; then + mkdir -p $ROOT_DIR/gradle + cd $ROOT_DIR/gradle + wget https://services.gradle.org/distributions/gradle-5.4.1-bin.zip + unzip gradle-5.4.1-bin.zip + cd - +fi + +GRADLE_PROPERTIES_FILE=gradle.properties +if [ ! -f $GRADLE_PROPERTIES_FILE ] +then + echo "org.gradle.jvmargs=-Xmx1536m" > $GRADLE_PROPERTIES_FILE + if [ ! -z $http_proxy ] + then + echo "systemProp.http.proxyHost=$proxyHost" >> $GRADLE_PROPERTIES_FILE + echo "systemProp.http.proxyPort=$proxyPort" >> $GRADLE_PROPERTIES_FILE + + if [ ! -z $https_proxy ] + then + httpsProxyFull=${https_proxy/https:\/\/} + httpsProxyHost=$(echo $httpsProxyFull | cut -d: -f 1) + httpsProxyPort=$(echo $httpsProxyFull | cut -d: -f 2) + echo "systemProp.https.proxyHost=$httpsProxyHost" >> $GRADLE_PROPERTIES_FILE + echo "systemProp.https.proxyPort=$httpsProxyPort" >> $GRADLE_PROPERTIES_FILE + fi + fi +fi + +export PATH=$PATH:$ROOT_DIR/gradle/gradle-5.4.1/bin +[ ! -f local.properties ] && echo 'sdk.dir='$(echo $ANDROID_SDK) > local.properties + +gradle wrapper +if [ "$1" = "clean" ]; then + ./gradlew clean +else + if [ -z "$DEBUG" ]; then + ./gradlew assembleRelease + else + ./gradlew assembleDebug + fi +fi + diff --git a/build/android/dali/.gitignore b/build/android/dali/.gitignore new file mode 100644 index 0000000..d5e56bb --- /dev/null +++ b/build/android/dali/.gitignore @@ -0,0 +1,7 @@ +lib +obj +dali-core +dali-adaptor +dali-toolkit +dali-demo + diff --git a/build/android/dali/build.sh b/build/android/dali/build.sh new file mode 100755 index 0000000..62969f4 --- /dev/null +++ b/build/android/dali/build.sh @@ -0,0 +1,33 @@ +#!/bin/bash +if [ -z "$ANDROID_SDK" ]; then + . ./env.sh +fi + +if [ ! -d "$ANDROID_SDK" ]; then + echo "Please install Android SDK into "$ANDROID_SDK + exit 1 +fi + +if [ ! -d "$ANDROID_NDK" ]; then + echo "Please install Android NDK into "$ANDROID_NDK + exit 1 +fi + +if [ "$1" = "clean" ]; then + echo "Cleaning dali..." + rm -rf ./dali-core + rm -rf ./dali-adaptor + rm -rf ./dali-toolkit + rm -rf ./dali-demo + exit 0 +fi + +if [ ! -z "$DEBUG" ]; then + export ENABLE_TRACE=ON +fi + +ANDROID_PLATFORM=26 ANDROID_ABI=${TARGET} ./build_core.sh || exit 1 +ANDROID_PLATFORM=26 ANDROID_ABI=${TARGET} ./build_adaptor.sh || exit 1 +ANDROID_PLATFORM=26 ANDROID_ABI=${TARGET} ./build_toolkit.sh || exit 1 +ANDROID_PLATFORM=26 ANDROID_ABI=${TARGET} ./build_demo.sh || exit 1 + diff --git a/build/android/dali/build_adaptor.sh b/build/android/dali/build_adaptor.sh new file mode 100755 index 0000000..76ab10e --- /dev/null +++ b/build/android/dali/build_adaptor.sh @@ -0,0 +1,27 @@ +if [ -d ./dali-adaptor/cmake/${ANDROID_ABI} ]; then + cd ./dali-adaptor/cmake/${ANDROID_ABI} +else + mkdir -p ./dali-adaptor/cmake/${ANDROID_ABI} + cd ./dali-adaptor/cmake/${ANDROID_ABI} + + if [ ! -z "$DEBUG" ]; then + export CMAKE_BUILD_TYPE=Debug + else + export CMAKE_BUILD_TYPE=Release + fi + + if [ -z "$ENABLE_TRACE" ]; then + export ENABLE_TRACE=OFF + fi + + export PREFIX=${DALI_ENV_DIR} + export PKG_CONFIG_LIBDIR=${ANDROID_NDK}/prebuilt/linux-x86_64/lib/pkgconfig + export PKG_CONFIG_PATH=${PREFIX}/lib/${ANDROID_ABI}/pkgconfig + export DALI_DATA_RO_DIR=assets + export DALI_DATA_RW_DIR=/data/data/com.sec.dali_demo/files + ${ANDROID_SDK}/cmake/3.10.2.4988404/bin/cmake ${DALI_DIR}/dali-adaptor/build/tizen -DCMAKE_C_COMPILER=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -DCMAKE_CXX_COMPILER=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=${ANDROID_PLATFORM} -DANDROID_ABI=${ANDROID_ABI} -DANDROID_NDK=${ANDROID_NDK} -DANDROID_STL=c++_shared -DCMAKE_CXX_FLAGS='-fexceptions -frtti -w -Wall -std=gnu++11' -DINCLUDE_DIR=${PREFIX}/include -DLIB_DIR=${PREFIX}/lib/${ANDROID_ABI} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DENABLE_TRACE=${ENABLE_TRACE} -DENABLE_PROFILE=ANDROID +fi + +make -j8 || exit 1 +make install || exit 1 +cd - diff --git a/build/android/dali/build_core.sh b/build/android/dali/build_core.sh new file mode 100755 index 0000000..0632405 --- /dev/null +++ b/build/android/dali/build_core.sh @@ -0,0 +1,27 @@ + +if [ -d ./dali-core/cmake/${ANDROID_ABI} ]; then + cd ./dali-core/cmake/${ANDROID_ABI} +else + mkdir -p ./dali-core/cmake/${ANDROID_ABI} + cd ./dali-core/cmake/${ANDROID_ABI} + + if [ ! -z "$DEBUG" ]; then + export CMAKE_BUILD_TYPE=Debug + else + export CMAKE_BUILD_TYPE=Release + fi + + if [ -z "$ENABLE_TRACE" ]; then + export ENABLE_TRACE=OFF + fi + + export PREFIX=${DALI_ENV_DIR} + export PKG_CONFIG_LIBDIR=${ANDROID_NDK}/prebuilt/linux-x86_64/lib/pkgconfig + export PKG_CONFIG_PATH=${PREFIX}/lib/${ANDROID_ABI}/pkgconfig + ${ANDROID_SDK}/cmake/3.10.2.4988404/bin/cmake ${DALI_DIR}/dali-core/build/tizen -DCMAKE_C_COMPILER=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -DCMAKE_CXX_COMPILER=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=${ANDROID_PLATFORM} -DANDROID_ABI=${ANDROID_ABI} -DANDROID_NDK=${ANDROID_NDK} -DANDROID_STL=c++_shared -DCMAKE_CXX_FLAGS='-fexceptions -frtti -w -Wall -std=gnu++11' -DINCLUDE_DIR=${PREFIX}/include -DLIB_DIR=${PREFIX}/lib/${ANDROID_ABI} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DENABLE_TRACE=${ENABLE_TRACE} +fi + +make -j8 || exit 1 +make install || exit 1 + +cd - diff --git a/build/android/dali/build_demo.sh b/build/android/dali/build_demo.sh new file mode 100755 index 0000000..add4444 --- /dev/null +++ b/build/android/dali/build_demo.sh @@ -0,0 +1,32 @@ + +if [ -d ./dali-demo/cmake/${ANDROID_ABI} ]; then + cd ./dali-demo/cmake/${ANDROID_ABI} +else + mkdir -p ./dali-demo/cmake/${ANDROID_ABI} + cd ./dali-demo/cmake/${ANDROID_ABI} + + if [ ! -z "$DEBUG" ]; then + export CMAKE_BUILD_TYPE=Debug + else + export CMAKE_BUILD_TYPE=Release + fi + + if [ -z "$ENABLE_TRACE" ]; then + export ENABLE_TRACE=OFF + fi + + export PREFIX=${DALI_ENV_DIR} + export PKG_CONFIG_LIBDIR=${ANDROID_NDK}/prebuilt/linux-x86_64/lib/pkgconfig + export PKG_CONFIG_PATH=${PREFIX}/lib/${ANDROID_ABI}/pkgconfig + export DALI_APP_RES_DIR=${PREFIX}/files + export DALI_APP_DIR=${PREFIX}/lib/${ANDROID_ABI} + export DALI_DEMO_RES_DIR=assets + + ${ANDROID_SDK}/cmake/3.10.2.4988404/bin/cmake ${DALI_DIR}/dali-demo/build/tizen -DCMAKE_C_COMPILER=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -DCMAKE_CXX_COMPILER=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=${ANDROID_PLATFORM} -DANDROID_ABI=${ANDROID_ABI} -DANDROID_NDK=${ANDROID_NDK} -DANDROID_STL=c++_shared -DCMAKE_CXX_FLAGS='-fexceptions -frtti -w -Wall -std=gnu++11' -DINCLUDE_DIR=${PREFIX}/include -DLIB_DIR=${PREFIX}/lib/${ANDROID_ABI} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DENABLE_TRACE=${ENABLE_TRACE} -DINTERNATIONALIZATION=OFF -DSHARED=ON -DDALI_APP_RES_DIR=${DALI_APP_RES_DIR} -DDALI_APP_DIR=${DALI_APP_DIR} -DDALI_DEMO_RES_DIR=${DALI_DEMO_RES_DIR} +fi + +make -j8 || exit 1 +make install || exit 1 + +cd - + diff --git a/build/android/dali/build_toolkit.sh b/build/android/dali/build_toolkit.sh new file mode 100755 index 0000000..3b4f9a9 --- /dev/null +++ b/build/android/dali/build_toolkit.sh @@ -0,0 +1,33 @@ + +if [ -d ./dali-toolkit/cmake/${ANDROID_ABI} ]; then + cd ./dali-toolkit/cmake/${ANDROID_ABI} +else + mkdir -p ./dali-toolkit/cmake/${ANDROID_ABI} + cd ./dali-toolkit/cmake/${ANDROID_ABI} + + if [ ! -z "$DEBUG" ]; then + export CMAKE_BUILD_TYPE=Debug + else + export CMAKE_BUILD_TYPE=Release + fi + + if [ -z "$ENABLE_TRACE" ]; then + export ENABLE_TRACE=OFF + fi + + export PREFIX=${DALI_ENV_DIR} + export PKG_CONFIG_LIBDIR=${ANDROID_NDK}/prebuilt/linux-x86_64/lib/pkgconfig + export PKG_CONFIG_PATH=${PREFIX}/lib/${ANDROID_ABI}/pkgconfig + export DALI_DATA_RO_DIR=assets + export DALI_DATA_RW_DIR=/data/data/com.sec.dali_demo/files + export DALI_DATA_RO_INSTALL_DIR=${PREFIX}/files + export DALI_DATA_RW_INSTALL_DIR=${PREFIX}/files + + ${ANDROID_SDK}/cmake/3.10.2.4988404/bin/cmake ${DALI_DIR}/dali-toolkit/build/tizen -DCMAKE_C_COMPILER=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -DCMAKE_CXX_COMPILER=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=${ANDROID_PLATFORM} -DANDROID_ABI=${ANDROID_ABI} -DANDROID_NDK=${ANDROID_NDK} -DANDROID_STL=c++_shared -DCMAKE_CXX_FLAGS='-fexceptions -frtti -w -Wall -std=gnu++11' -DINCLUDE_DIR=${PREFIX}/include -DLIB_DIR=${PREFIX}/lib/${ANDROID_ABI} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DENABLE_TRACE=${ENABLE_TRACE} -DWITH_STYLE='2048x1080' +fi + +make -j8 || exit 1 +make install || exit 1 +cp -R ${DALI_DIR}/dali-toolkit/automated-tests/resources/fonts/* ${DALI_DIR}/dali-env/android/files/fonts + +cd - diff --git a/build/android/dali/env.sh b/build/android/dali/env.sh new file mode 100755 index 0000000..09f0539 --- /dev/null +++ b/build/android/dali/env.sh @@ -0,0 +1,23 @@ +if [ ! -d "$ANDROID_SDK" ]; then +# try default path +if [ -d "$HOME/Android/Sdk" ]; then +export ANDROID_SDK=$HOME/Android/Sdk +fi +fi + +if [ ! -d "$ANDROID_NDK" ]; then +if [ -d $ANDROID_SDK ]; then +NDK_DIR=$(find $ANDROID_SDK -maxdepth 2 -name ndk-build | sed 's/\/ndk-build//') +if [ -d "$NDK_DIR" ]; then +export ANDROID_NDK=$NDK_DIR +fi +fi +fi + +if [ ! -d "$DALI_DIR" ]; then +export DALI_DIR=$(cd ../../../../; pwd) +fi + +if [ ! -d "$DALI_ENV_DIR" ]; then +export DALI_ENV_DIR=$DALI_DIR/dali-env/android +fi diff --git a/build/android/key.jks b/build/android/key.jks new file mode 100644 index 0000000000000000000000000000000000000000..f2502d9b595954e8bea744b6eb64427e51908e62 GIT binary patch literal 2126 zcmbW1c{J3G8pr21#!QxBgi^M_m1Qi0#+DFGQFg_8Czr@Vv-?biKHS-*L}~u=e&R4KfdQV&-Xm%InQ~%=X`jpyj2hg1l||$mmq<@ z5$OFU&_)qk0Rr)Z&=klnS_CSHf&vgg9V`X_{2&MgvX~nh|A~`FP3|~3@*1dh{^DJl zJ=|(FRpH8(4zW`dtOBbaY`LxK4!SZPIG@i;E?sdo32AbKk;8nA&znK%zN2LlT`3|D zYKSV88ilLL;7!G>xDy+2@`DJ4{2tF ztJ1O9#Yt5|&M#+lbDBARhI}jH2>q$zpRYK27OkDO(4*2eI9R#eS8-+K4Dn$ph4}C@ zREY9q%_(C85-zjeO&AMh)C?k+w3#aZk~XCIr__AT(#7WNn`n&WK}Jm5Sc%;CNAWUP z_Rdh{>g@Z`-%4YpgLA_~(cOe96?27+XW0uN430nDf*k4~?QCvV>I2bYWX~S+FkH0I zYNFcU+b;OzFkLr7EgwHITiiESXP%aW-YwVz8sJ}K%x9DNkG z^W;u+?Dc!|e1p zA89zL(2z23(0K9iyJ}A1)#!8$>-9!cIC*6W3jCF7+lHF4Q2m|4Vz{}L zX}2R!+BBkx9e;?fm+G8tN6Km>%)*p48$- zp8MwQqLxjw@f17hE5eHq9_rPcRwE2Ho>342{2ozZDisMOJf$TExAE~tLeK36Q2Ni< zB#6njy>yTDx}sqJ=2cWGyHmGMn7bnwmKL^-wO?-{N?q!{#g@*0CjiTCP%q&Uts$6r zIKfs6vsN%x%?g>wxm%nh)mh`}++%S1_aq_;uV$4xwG3w2S`RKu~(5XbuT2_741>UTFHaO#VnQ+uK#wd zlzM%RN(&INz9I%8B{bLVy;B_}s07Fr7qGDX-|DIbpQ20~GP+&!m;0+GD&{^r|C8uz zBcALaRZyy4XP7G+ywRE9W6}^ue)xWXFpxZ6_&k`nYI=fH!Z`-DKD%4wxOYh^ZeZYI zT@CGvG-LCTHX<)dmn?= zl`n(fyFP-My4IVTU1>X6QFK?mdmCF=roODQzAKUnU*B$9LJ*Mzl^1^8b7HSX^~sYL zs?H~XX)yn{V>GY~i=?!KB=oF(sHz$Qq-ULP$d4q^GBw@hjrc#-^n66{{&jMg$M0iT zM)J@q>~p8T*|{!rUk|!$;q}97BC=GYP;^NMv%GCyru!Ea`JJ^eXd@7aPXJBf<403~ z)l5Dx00u*Xz)y_PaHxQK+}XIFZ~ze62d175Vjq}%ju4nQ3?F(WAjp^aKSyxixk4b4 zg8X&hXrcei2#G`R7agt9a);qMMreHaqd~wM+62oMKbdze$a}VP>$%&Hly{qU_yjy_5?=egdU%8JNS#Ca0P+TOLXt zYk7nK=80lfqO;uEXc*(eJ+$LAQvub~6E%xwFp@>+&bUK=?ht~}_T{Dh);vBnI=oCr zB((DIAeavT0XYh2d9>_)7P2CcLl6l^Mnz$ZqwmQqS}(+WyD5Mx)$#i8Pux#<|A_#o zKIC+J|M@9{(J8uI2|ipRIAV@jnvP*ha_fz3gRS_wnT)LLORb>{tpTL6@%I_~b{Cx4 zH9ShG*DH7HqrnC@rO$*q;@vw1BEdj9E%SU1F_ZOCqHf!nmGhcI@HMaUEVI3e;12#{ z2HBli?nWQxII`}FloAb6hlJ%*jChlN*UrxiWCtVUwx-=2q17riUSz&IZ%%uKJoLuu z&gF2bI9=D)1og*j`N*-}CyMaQwAp3(Z*RY|bMzi6RrQpVFJzkZ;Srj!#E9k};3BcU zh0jRbO()Cv@$NzMdm<5c$6YL+d9u8)urtFeepL~hwV>QMzr7ZBNL!M-#;@_c1w%{g TXi`1%D_Vp5lW_mDxahwDTW89W literal 0 HcmV?d00001 diff --git a/build/android/settings.gradle b/build/android/settings.gradle new file mode 100644 index 0000000..573abcb --- /dev/null +++ b/build/android/settings.gradle @@ -0,0 +1,2 @@ +include ':app' + diff --git a/build/tizen/CMakeLists.txt b/build/tizen/CMakeLists.txt index a0b8322..f6d8ad8 100644 --- a/build/tizen/CMakeLists.txt +++ b/build/tizen/CMakeLists.txt @@ -17,15 +17,15 @@ SET(DEMO_SHARED ${CMAKE_SOURCE_DIR}/../../shared) SET(PREFIX ${CMAKE_INSTALL_PREFIX}) IF(DEFINED DALI_APP_DIR) - SET(BINDIR ${DALI_APP_DIR}/bin) + SET(BINDIR ${DALI_APP_DIR}) ELSE() - SET(BINDIR ${PREFIX}/bin) + SET(BINDIR ${PREFIX}/bin) ENDIF() IF(DEFINED DALI_APP_RES_DIR) - SET(APP_DATA_RES_DIR ${DALI_APP_RES_DIR}) + SET(APP_DATA_RES_DIR ${DALI_APP_RES_DIR}) ELSE() - SET(APP_DATA_RES_DIR ${PREFIX}/share/com.samsung.dali-demo/res) + SET(APP_DATA_RES_DIR ${PREFIX}/share/com.samsung.dali-demo/res) ENDIF() MESSAGE( STATUS "CMAKE_BUILD_TYPE: " ${CMAKE_BUILD_TYPE} ) @@ -42,7 +42,11 @@ SET(LOCAL_MODELS_DIR ${RESOURCE_DIR}/models) SET(LOCAL_SCRIPTS_DIR ${RESOURCE_DIR}/scripts) SET(LOCAL_SHADERS_DIR ${RESOURCE_DIR}/shaders) IF(NOT DEFINED LOCAL_STYLE_DIR) - SET(LOCAL_STYLE_DIR ${RESOURCE_DIR}/style) + SET(LOCAL_STYLE_DIR ${RESOURCE_DIR}/style) +ENDIF() + +IF(ANDROID) + SET(LOCAL_STYLE_ANDROID_DIR ${RESOURCE_DIR}/style/android) ENDIF() SET(IMAGES_DIR ${APP_DATA_RES_DIR}/images/) @@ -54,23 +58,36 @@ SET(SHADERS_DIR ${APP_DATA_RES_DIR}/shaders/) SET(STYLE_DIR ${APP_DATA_RES_DIR}/style/) IF(NOT DEFINED LOCALE_DIR) - SET(LOCALE_DIR ${PREFIX}/share/locale) + SET(LOCALE_DIR ${PREFIX}/share/locale) +ENDIF() + +IF(DEFINED DALI_DEMO_RES_DIR) + SET(DEMO_IMAGE_DIR \\"${DALI_DEMO_RES_DIR}/images/\\") + SET(DEMO_GAME_DIR \\"${DALI_DEMO_RES_DIR}/game/\\") + SET(DEMO_VIDEO_DIR \\"${DALI_DEMO_RES_DIR}/videos/\\") + SET(DEMO_MODEL_DIR \\"${DALI_DEMO_RES_DIR}/models/\\") + SET(DEMO_SCRIPT_DIR \\"${DALI_DEMO_RES_DIR}/scripts/\\") + SET(DEMO_SHADER_DIR \\"${DALI_DEMO_RES_DIR}/shaders/\\") + SET(DEMO_STYLE_DIR \\"${DALI_DEMO_RES_DIR}/style/\\") + SET(DEMO_THEME_PATH \\"${DALI_DEMO_RES_DIR}/style/demo-theme.json\\") + SET(DEMO_LOCALE_DIR \\"${DALI_DEMO_RES_DIR}/locale\\") + SET(DEMO_STYLE_IMAGE_DIR \\"${DALI_DEMO_RES_DIR}/style/images\\") +ELSE() + SET(DEMO_GAME_DIR \\"${GAME_DIR}\\") + SET(DEMO_IMAGE_DIR \\"${IMAGES_DIR}\\") + SET(DEMO_VIDEO_DIR \\"${VIDEOS_DIR}\\") + SET(DEMO_MODEL_DIR \\"${MODELS_DIR}\\") + SET(DEMO_SCRIPT_DIR \\"${SCRIPTS_DIR}\\") + SET(DEMO_SHADER_DIR \\"${SHADERS_DIR}\\") + SET(DEMO_STYLE_DIR \\"${STYLE_DIR}\\") + SET(DEMO_THEME_PATH \\"${STYLE_DIR}demo-theme.json\\") + SET(DEMO_LOCALE_DIR \\"${LOCALE_DIR}\\") + SET(DEMO_STYLE_IMAGE_DIR ${STYLE_DIR}/images) ENDIF() -SET(DEMO_GAME_DIR \\"${GAME_DIR}\\") -SET(DEMO_IMAGE_DIR \\"${IMAGES_DIR}\\") -SET(DEMO_VIDEO_DIR \\"${VIDEOS_DIR}\\") -SET(DEMO_MODEL_DIR \\"${MODELS_DIR}\\") -SET(DEMO_SCRIPT_DIR \\"${SCRIPTS_DIR}\\") -SET(DEMO_SHADER_DIR \\"${SHADERS_DIR}\\") -SET(DEMO_STYLE_DIR \\"${STYLE_DIR}\\") -SET(DEMO_THEME_PATH \\"${STYLE_DIR}demo-theme.json\\") SET(DEMO_EXAMPLE_BIN \\"${BINDIR}/\\") -SET(DEMO_LOCALE_DIR \\"${LOCALE_DIR}\\") SET(DEMO_LANG \\"${LANG}\\") -SET(DEMO_STYLE_IMAGE_DIR ${STYLE_DIR}/images) - FILE(GLOB LOCAL_IMAGES_PNG RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.png") FILE(GLOB LOCAL_IMAGES_JPG RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.jpg") FILE(GLOB LOCAL_IMAGES_GIF RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.gif") @@ -121,6 +138,14 @@ FOREACH(flag ${LOCAL_STYLES_LIST}) ENDFOREACH(flag) MESSAGE("Installed ${LOCAL_STYLES_LIST} to ${STYLE_DIR}") +IF(ANDROID) +FILE(GLOB LOCAL_STYLES_ANDROID_LIST "${LOCAL_STYLE_ANDROID_DIR}/*.json") +FOREACH(flag ${LOCAL_STYLES_ANDROID_LIST}) + INSTALL(FILES ${flag} DESTINATION ${STYLE_DIR}) +ENDFOREACH(flag) +MESSAGE("Installed ${LOCAL_STYLES_ANDROID_LIST} to ${STYLE_DIR}") +ENDIF() + FILE(GLOB LOCAL_STYLE_IMAGES_LIST "${LOCAL_STYLE_DIR}/images/*.png") FOREACH(flag ${LOCAL_STYLE_IMAGES_LIST}) INSTALL(FILES ${flag} DESTINATION ${STYLE_DIR}/images) diff --git a/build/tizen/demo/CMakeLists.txt b/build/tizen/demo/CMakeLists.txt index 4e73070..ac3c3f5 100644 --- a/build/tizen/demo/CMakeLists.txt +++ b/build/tizen/demo/CMakeLists.txt @@ -6,10 +6,26 @@ SET(DEMO_SRCS ${DEMO_SRCS} "${ROOT_SRC_DIR}/shared/resources-location.cpp" "${ROOT_SRC_DIR}/shared/dali-table-view.cpp" - "${ROOT_SRC_DIR}/shared/execute-process-unix.cpp" ) -ADD_EXECUTABLE(${PROJECT_NAME} ${DEMO_SRCS}) +IF(ANDROID) + SET(DEMO_SRCS + ${DEMO_SRCS} + "${ROOT_SRC_DIR}/shared/execute-process-android.cpp" + ) +ELSE() + SET(DEMO_SRCS + ${DEMO_SRCS} + "${ROOT_SRC_DIR}/shared/execute-process-unix.cpp" + ) +ENDIF() + +IF(SHARED) + ADD_LIBRARY(${PROJECT_NAME} SHARED ${DEMO_SRCS}) +ELSE() + ADD_EXECUTABLE(${PROJECT_NAME} ${DEMO_SRCS}) +ENDIF() + TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${REQUIRED_PKGS_LDFLAGS} -pie) INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR}) diff --git a/build/tizen/examples-reel/CMakeLists.txt b/build/tizen/examples-reel/CMakeLists.txt index 887ce5c..aae2efd 100644 --- a/build/tizen/examples-reel/CMakeLists.txt +++ b/build/tizen/examples-reel/CMakeLists.txt @@ -6,10 +6,26 @@ SET(EXAMPLES_REEL_SRCS ${EXAMPLES_REEL_SRCS} "${ROOT_SRC_DIR}/shared/resources-location.cpp" "${ROOT_SRC_DIR}/shared/dali-table-view.cpp" - "${ROOT_SRC_DIR}/shared/execute-process-unix.cpp" ) -ADD_EXECUTABLE(dali-examples ${EXAMPLES_REEL_SRCS}) +IF(ANDROID) + SET(EXAMPLES_REEL_SRCS + ${EXAMPLES_REEL_SRCS} + "${ROOT_SRC_DIR}/shared/execute-process-android.cpp" + ) +ELSE() + SET(EXAMPLES_REEL_SRCS + ${EXAMPLES_REEL_SRCS} + "${ROOT_SRC_DIR}/shared/execute-process-unix.cpp" + ) +ENDIF() + +IF(SHARED) + ADD_LIBRARY(dali-examples SHARED ${EXAMPLES_REEL_SRCS}) +ELSE() + ADD_EXECUTABLE(dali-examples ${EXAMPLES_REEL_SRCS}) +ENDIF() + TARGET_LINK_LIBRARIES(dali-examples ${REQUIRED_PKGS_LDFLAGS} -pie) INSTALL(TARGETS dali-examples DESTINATION ${BINDIR}) diff --git a/build/tizen/examples/CMakeLists.txt b/build/tizen/examples/CMakeLists.txt index ee0d04f..3a55570 100644 --- a/build/tizen/examples/CMakeLists.txt +++ b/build/tizen/examples/CMakeLists.txt @@ -16,7 +16,11 @@ SUBDIRLIST(SUBDIRS ${EXAMPLES_SRC_DIR}) FOREACH(EXAMPLE ${SUBDIRS}) FILE(GLOB SRCS "${EXAMPLES_SRC_DIR}/${EXAMPLE}/*.cpp") SET(SRCS ${SRCS} "${ROOT_SRC_DIR}/shared/resources-location.cpp") - ADD_EXECUTABLE(${EXAMPLE}.example ${SRCS}) + IF(SHARED) + ADD_LIBRARY(${EXAMPLE}.example SHARED ${SRCS}) + ELSE() + ADD_EXECUTABLE(${EXAMPLE}.example ${SRCS}) + ENDIF() TARGET_LINK_LIBRARIES(${EXAMPLE}.example ${REQUIRED_PKGS_LDFLAGS} -pie) INSTALL(TARGETS ${EXAMPLE}.example DESTINATION ${BINDIR}) ENDFOREACH(EXAMPLE) diff --git a/build/tizen/tests-reel/CMakeLists.txt b/build/tizen/tests-reel/CMakeLists.txt index 2eb4c53..6c69839 100644 --- a/build/tizen/tests-reel/CMakeLists.txt +++ b/build/tizen/tests-reel/CMakeLists.txt @@ -6,10 +6,25 @@ SET(TESTS_REEL_SRCS ${TESTS_REEL_SRCS} "${ROOT_SRC_DIR}/shared/resources-location.cpp" "${ROOT_SRC_DIR}/shared/dali-table-view.cpp" - "${ROOT_SRC_DIR}/shared/execute-process-unix.cpp" ) -ADD_EXECUTABLE(dali-tests ${TESTS_REEL_SRCS}) +IF(ANDROID) + SET(TESTS_REEL_SRCS + ${TESTS_REEL_SRCS} + "${ROOT_SRC_DIR}/shared/execute-process-android.cpp" + ) +ELSE() + SET(TESTS_REEL_SRCS + ${TESTS_REEL_SRCS} + "${ROOT_SRC_DIR}/shared/execute-process-unix.cpp" + ) +ENDIF() + +IF(SHARED) + ADD_LIBRARY(dali-tests SHARED ${TESTS_REEL_SRCS}) +ELSE() + ADD_EXECUTABLE(dali-tests ${TESTS_REEL_SRCS}) +ENDIF() TARGET_LINK_LIBRARIES(dali-tests ${REQUIRED_PKGS_LDFLAGS} -pie) INSTALL(TARGETS dali-tests DESTINATION ${BINDIR}) diff --git a/demo/dali-demo.cpp b/demo/dali-demo.cpp index b720769..2884a32 100644 --- a/demo/dali-demo.cpp +++ b/demo/dali-demo.cpp @@ -27,9 +27,11 @@ using namespace Dali; int DALI_EXPORT_API main(int argc, char **argv) { // Configure gettext for internalization +#ifdef INTERNATIONALIZATION_ENABLED bindtextdomain(DALI_DEMO_DOMAIN_LOCAL, DEMO_LOCALE_DIR); textdomain(DALI_DEMO_DOMAIN_LOCAL); setlocale(LC_ALL, DEMO_LANG); +#endif Application app = Application::New(&argc, &argv, DEMO_THEME_PATH); diff --git a/examples-reel/dali-examples-reel.cpp b/examples-reel/dali-examples-reel.cpp index a1358a8..f525f07 100644 --- a/examples-reel/dali-examples-reel.cpp +++ b/examples-reel/dali-examples-reel.cpp @@ -27,9 +27,11 @@ using namespace Dali; int DALI_EXPORT_API main(int argc, char **argv) { // Configure gettext for internalization +#ifdef INTERNATIONALIZATION_ENABLED bindtextdomain(DALI_DEMO_DOMAIN_LOCAL, DEMO_LOCALE_DIR); textdomain(DALI_DEMO_DOMAIN_LOCAL); setlocale(LC_ALL, DEMO_LANG); +#endif Application app = Application::New( &argc, &argv, DEMO_STYLE_DIR "/examples-theme.json" ); diff --git a/examples/animated-gradient-call-active/animated-gradient-call-active.cpp b/examples/animated-gradient-call-active/animated-gradient-call-active.cpp index 5f515a8..49fdd43 100644 --- a/examples/animated-gradient-call-active/animated-gradient-call-active.cpp +++ b/examples/animated-gradient-call-active/animated-gradient-call-active.cpp @@ -402,7 +402,7 @@ private: float mButtonDelay; }; -int main(int argc, char **argv) +int DALI_EXPORT_API main(int argc, char **argv) { Application application = Application::New( &argc, &argv ); diff --git a/examples/animated-gradient-card-active/animated-gradient-card-active.cpp b/examples/animated-gradient-card-active/animated-gradient-card-active.cpp index 3414361..2678b19 100644 --- a/examples/animated-gradient-card-active/animated-gradient-card-active.cpp +++ b/examples/animated-gradient-card-active/animated-gradient-card-active.cpp @@ -824,7 +824,7 @@ private: bool mIsTouchedActor; }; -int main(int argc, char **argv) +int DALI_EXPORT_API main(int argc, char **argv) { Application application = Application::New( &argc, &argv ); diff --git a/examples/bezier-curve/bezier-curve-example.cpp b/examples/bezier-curve/bezier-curve-example.cpp index 8fddca7..20ce083 100644 --- a/examples/bezier-curve/bezier-curve-example.cpp +++ b/examples/bezier-curve/bezier-curve-example.cpp @@ -23,6 +23,7 @@ using namespace Dali; using namespace Dali::Toolkit; +using namespace std; namespace { @@ -444,7 +445,7 @@ public: auto gridSize = mGrid.GetProperty( Actor::Property::SIZE ); // Get target value auto currentPosition = actor.GetCurrentPosition(); // Get constrained current value - position = Vector2( std::floor( currentPosition.x ), std::floor( currentPosition.y ) ); + position = Vector2( floor( currentPosition.x ), floor( currentPosition.y ) ); point.x = Clamp( position.x / gridSize.x, -0.5f, 0.5f ) + 0.5f; point.y = 0.5f - position.y / gridSize.y; @@ -612,7 +613,7 @@ private: }; -int main( int argc, char **argv ) +int DALI_EXPORT_API main( int argc, char **argv ) { Application application = Application::New( &argc, &argv ); diff --git a/examples/bloom-view/bloom-view-example.cpp b/examples/bloom-view/bloom-view-example.cpp index dd64493..7c856c1 100644 --- a/examples/bloom-view/bloom-view-example.cpp +++ b/examples/bloom-view/bloom-view-example.cpp @@ -210,7 +210,7 @@ private: BloomView mBloomView; }; -int main(int argc, char **argv) +int DALI_EXPORT_API main(int argc, char **argv) { Application application = Application::New( &argc, &argv ); diff --git a/examples/frame-callback/frame-callback.cpp b/examples/frame-callback/frame-callback.cpp index fcab8fc..52ef117 100644 --- a/examples/frame-callback/frame-callback.cpp +++ b/examples/frame-callback/frame-callback.cpp @@ -19,6 +19,7 @@ #include "frame-callback.h" using namespace Dali; +using namespace std; FrameCallback::FrameCallback() : mActorIdContainer(), @@ -46,7 +47,7 @@ void FrameCallback::Update( Dali::UpdateProxy& updateProxy, float /* elapsedSeco if( updateProxy.GetPositionAndSize( i, position, size ) ) // Retrieve the position and size using the Actor ID. { float halfWidthPoint = stageHalfWidth - size.width * 0.5f; - float xTranslation = std::abs( position.x ); + float xTranslation = abs( position.x ); if( xTranslation > halfWidthPoint ) { // Actor has hit the edge, adjust the size accordingly. diff --git a/examples/gestures/gesture-example.cpp b/examples/gestures/gesture-example.cpp index a28ab95..2cca96d 100644 --- a/examples/gestures/gesture-example.cpp +++ b/examples/gestures/gesture-example.cpp @@ -23,6 +23,7 @@ using namespace Dali; using namespace Dali::Toolkit; +using namespace std; namespace { @@ -322,8 +323,8 @@ private: // Move actor back to center if we're out of bounds Vector2 halfStageSize = Stage::GetCurrent().GetSize() * 0.5f; - if( ( std::abs( newPosition.x ) > halfStageSize.width ) || - ( std::abs( newPosition.y ) > halfStageSize.height ) ) + if( ( abs( newPosition.x ) > halfStageSize.width ) || + ( abs( newPosition.y ) > halfStageSize.height ) ) { anim.AnimateTo( Property( actor, Actor::Property::POSITION ), Vector3::ZERO, AlphaFunction::EASE_IN ); } diff --git a/examples/page-turn-view/page-turn-view-example.cpp b/examples/page-turn-view/page-turn-view-example.cpp index 1bb1411..a8e53e5 100644 --- a/examples/page-turn-view/page-turn-view-example.cpp +++ b/examples/page-turn-view/page-turn-view-example.cpp @@ -277,7 +277,7 @@ void PageTurnExample::OnKeyEvent(const KeyEvent& event) } // Entry point for applications -int main( int argc, char **argv ) +int DALI_EXPORT_API main( int argc, char **argv ) { Application app = Application::New(&argc, &argv); PageTurnExample test ( app ); diff --git a/examples/pre-render-callback/pre-render-callback-example.cpp b/examples/pre-render-callback/pre-render-callback-example.cpp index 0b10a8c..bf5173a 100644 --- a/examples/pre-render-callback/pre-render-callback-example.cpp +++ b/examples/pre-render-callback/pre-render-callback-example.cpp @@ -253,7 +253,7 @@ private: } // namespace Dali -int main( int argc, char **argv ) +int DALI_EXPORT_API main( int argc, char **argv ) { Dali::Application application = Dali::Application::New( &argc, &argv ); Dali::PreRenderCallbackController controller( application ); diff --git a/examples/refraction-effect/refraction-effect-example.cpp b/examples/refraction-effect/refraction-effect-example.cpp index a0256c9..b825388 100644 --- a/examples/refraction-effect/refraction-effect-example.cpp +++ b/examples/refraction-effect/refraction-effect-example.cpp @@ -475,7 +475,7 @@ private: Dali::Vector fileBuffer; if( !Dali::FileLoader::ReadFile( objFileName, bufferSize, fileBuffer, Dali::FileLoader::FileType::TEXT ) ) { - DALI_LOG_WARNING( "file open failed for: \"%s\"", objFileName ); + DALI_LOG_WARNING( "file open failed for: \"%s\"", objFileName.c_str() ); return; } diff --git a/examples/rendering-basic-pbr/ktx-loader.cpp b/examples/rendering-basic-pbr/ktx-loader.cpp index 790d1e2..03b6b80 100644 --- a/examples/rendering-basic-pbr/ktx-loader.cpp +++ b/examples/rendering-basic-pbr/ktx-loader.cpp @@ -114,7 +114,7 @@ bool LoadCubeMapFromKtxFile( const std::string& path, CubeData& cubedata ) // Skip the key-values: const long int imageSizeOffset = sizeof(KtxFileHeader) + header.bytesOfKeyValueData; - if( fseek(fp, imageSizeOffset, SEEK_END) ) + if( fseek(fp, 0, SEEK_END) ) { return false; } @@ -125,6 +125,8 @@ bool LoadCubeMapFromKtxFile( const std::string& path, CubeData& cubedata ) return false; } + lSize -= imageSizeOffset; + rewind(fp); if( fseek(fp, imageSizeOffset, SEEK_SET) ) diff --git a/examples/simple-bitmap-font-text-label/simple-text-label-example.cpp b/examples/simple-bitmap-font-text-label/simple-text-label-example.cpp index 04ad1fb..51845bb 100644 --- a/examples/simple-bitmap-font-text-label/simple-text-label-example.cpp +++ b/examples/simple-bitmap-font-text-label/simple-text-label-example.cpp @@ -194,7 +194,7 @@ void RunTest( Application& application ) } /** Entry point for Linux & Tizen applications */ -int main( int argc, char **argv ) +int DALI_EXPORT_API main( int argc, char **argv ) { Application application = Application::New( &argc, &argv ); diff --git a/examples/simple-text-field/simple-text-field.cpp b/examples/simple-text-field/simple-text-field.cpp index 3516e77..45fa17d 100644 --- a/examples/simple-text-field/simple-text-field.cpp +++ b/examples/simple-text-field/simple-text-field.cpp @@ -96,7 +96,7 @@ void RunTest( Application& application ) } /** Entry point for Linux & Tizen applications */ -int main( int argc, char **argv ) +int DALI_EXPORT_API main( int argc, char **argv ) { // DALI_DEMO_THEME_PATH not passed to Application so TextField example uses default Toolkit style sheet. Application application = Application::New( &argc, &argv ); diff --git a/examples/simple-text-label/simple-text-label-example.cpp b/examples/simple-text-label/simple-text-label-example.cpp index 78e7db7..89c079d 100644 --- a/examples/simple-text-label/simple-text-label-example.cpp +++ b/examples/simple-text-label/simple-text-label-example.cpp @@ -95,7 +95,7 @@ void RunTest( Application& application ) } /** Entry point for Linux & Tizen applications */ -int main( int argc, char **argv ) +int DALI_EXPORT_API main( int argc, char **argv ) { Application application = Application::New( &argc, &argv ); diff --git a/examples/simple-text-renderer/simple-text-renderer-example.cpp b/examples/simple-text-renderer/simple-text-renderer-example.cpp index c980170..676a3e1 100644 --- a/examples/simple-text-renderer/simple-text-renderer-example.cpp +++ b/examples/simple-text-renderer/simple-text-renderer-example.cpp @@ -342,7 +342,7 @@ private: }; /** Entry point for Linux & Tizen applications */ -int main( int argc, char **argv ) +int DALI_EXPORT_API main( int argc, char **argv ) { Application application = Application::New( &argc, &argv ); diff --git a/examples/simple-text-visual/simple-text-visual-example.cpp b/examples/simple-text-visual/simple-text-visual-example.cpp index b92e2a4..5964010 100644 --- a/examples/simple-text-visual/simple-text-visual-example.cpp +++ b/examples/simple-text-visual/simple-text-visual-example.cpp @@ -104,7 +104,7 @@ void RunTest( Application& application ) } /** Entry point for Linux & Tizen applications */ -int main( int argc, char **argv ) +int DALI_EXPORT_API main( int argc, char **argv ) { Application application = Application::New( &argc, &argv ); diff --git a/packaging/com.samsung.dali-demo.spec b/packaging/com.samsung.dali-demo.spec index a9245bd..67ffb68 100755 --- a/packaging/com.samsung.dali-demo.spec +++ b/packaging/com.samsung.dali-demo.spec @@ -57,7 +57,7 @@ CXXFLAGS+=" -D_ARCH_ARM_" cd %{_builddir}/%{name}-%{version}/build/tizen -cmake -DDALI_APP_DIR=%{dali_app_ro_dir} \ +cmake -DDALI_APP_DIR=%{dali_app_ro_dir}/bin \ -DLOCALE_DIR=%{locale_dir} \ -DDALI_APP_RES_DIR=%{dali_app_res_dir} \ %if 0%{?enable_debug} @@ -75,7 +75,7 @@ make %{?jobs:-j%jobs} %install rm -rf %{buildroot} cd build/tizen -%make_install DALI_APP_DIR=%{dali_app_ro_dir} +%make_install DALI_APP_DIR=%{dali_app_ro_dir}/bin %make_install DDALI_APP_RES_DIR=%{dali_app_res_dir} mkdir -p %{buildroot}%{dali_xml_file_dir} diff --git a/resources/style/android/animated-gradient-call-active-style.json b/resources/style/android/animated-gradient-call-active-style.json new file mode 100644 index 0000000..d73dc38 --- /dev/null +++ b/resources/style/android/animated-gradient-call-active-style.json @@ -0,0 +1,76 @@ +{ + "styles": { + "IncomeBackground": { + "background": { + "visualType": "ANIMATED_GRADIENT", + "gradientType": "RADIAL", + "unitType": "USER_SPACE", + "startPosition": [0.0, 0.0], + "endPosition": [180.0, 0.0], + "startColor": [0.1333, 0.1647, 0.2941, 1.0], + "endColor": [0.0784, 0.3961, 0.4863, 1.0], + "rotateCenter": [0.0, 0.0], + "rotateAmount": 0.0, + "offset": { + "startValue": 0.0, + "targetValue": 2.0, + "directionType": "BACKWARD", + "duration": 1.25, + "delay": 0.0, + "repeat": -1, + "repeatDelay": 0.0, + "motionType": "LOOP", + "easingType": "LINEAR" + } + } + }, + "ActiveBackground":{ + "background":{ + "visualType": "ANIMATED_GRADIENT", + "gradientType": "RADIAL", + "unitType": "USER_SPACE", + "startPosition": [0.0, 0.0], + "endPosition": [180.0, 0.0], + "startColor": [0.1066, 0.1318, 0.2353, 1.0], + "endColor": [0.0627, 0.3169, 0.3890, 1.0], + "rotateCenter": [0.0, 0.0], + "rotateAmount": 0.0, + "offset": { + "startValue": 0.0, + "targetValue": 2.0, + "directionType": "BACKWARD", + "duration": 4.0, + "delay": 0.0, + "repeat": -1, + "repeatDelay": 0.0, + "motionType": "LOOP", + "easingType": "LINEAR" + } + } + }, + "DeclineButton":{ + "background":{ + "visualType": "ANIMATED_GRADIENT", + "gradientType": "LINEAR", + "unitType": "USER_SPACE", + "startPosition": [-180.0, 0.0], + "endPosition": [180.0, 0.0], + "startColor": [0.8941, 0.0078, 0.0078, 1.0], + "endColor": [1.0000, 0.5961, 0.0000, 1.0], + "rotateCenter": [0.0, 0.0], + "rotateAmount": 0.78539816, + "offset": { + "startValue": 0.0, + "targetValue": 2.0, + "directionType": "FORWARD", + "duration": 1.8, + "delay": -1.2, + "repeat": -1, + "repeatDelay": 1.2, + "motionType": "LOOP", + "easingType": "IN_OUT" + } + } + } + } +} diff --git a/resources/style/android/base-theme.json b/resources/style/android/base-theme.json new file mode 100644 index 0000000..b477b96 --- /dev/null +++ b/resources/style/android/base-theme.json @@ -0,0 +1,206 @@ +/* + * Copyright (c) 2019 Samsung Electronics Co., Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +{ + "styles": + { + "ConfirmationPopup":{ + "popupBackgroundImage":"{APPLICATION_RESOURCE_PATH}/images/00_popup_bg.9.png" + }, + + "CustomPopupStyle":{ + "popupBackgroundImage":"{APPLICATION_RESOURCE_PATH}/images/popup.9.png", + "popupBackgroundBorder":[0,4,4,0], + "tailUpImage":"{APPLICATION_RESOURCE_PATH}/images/popup-tail-up.png", + "tailDownImage":"{APPLICATION_RESOURCE_PATH}/images/popup-tail-down.png", + "tailLeftImage":"{APPLICATION_RESOURCE_PATH}/images/popup-tail-left.png", + "tailRightImage":"{APPLICATION_RESOURCE_PATH}/images/popup-tail-right.png" + }, + + "DemoTileBase": + { + "states": + { + "NORMAL": + { + "color":[0.4, 0.6, 0.9, 0.6], + "visuals": + { + "image": + { + "url":"{APPLICATION_RESOURCE_PATH}/images/demo-tile-texture.9.png", +// TILE_BACKGROUND_ALPHA +// This shader takes a texture. +// An alpha discard is performed. +// The shader uses the tiles position within the scroll-view page and the scroll-views rotation position to create a parallax effect. + "shader": + { + "fragmentShader":[ + " varying mediump vec2 vTexCoord;", + " uniform lowp vec4 uColor;", + " uniform sampler2D sTexture;", + " uniform mediump vec3 uCustomPosition;", + "", + " void main()", + " {", + " if( texture2D( sTexture, vTexCoord ).a <= 0.0001 )", + " {", + " discard;", + " }", + "", + " mediump vec2 wrapTexCoord = vec2( ( vTexCoord.x / 4.0 ) + ( uCustomPosition.x / 4.0 ) + ( uCustomPosition.z / 2.0 ), vTexCoord.y / 4.0 );", + " mediump vec4 color = texture2D( sTexture, wrapTexCoord );", + " mediump float positionWeight = ( uCustomPosition.y + 0.3 ) * color.r * 2.0;", + "", + " gl_FragColor = vec4( positionWeight, positionWeight, positionWeight, 0.9 ) * uColor + vec4( uColor.xyz, 0.0 );", + " }" + ] + } + } + } + }, + "FOCUSED": + { + "color":[0.3, 0.5, 0.8, 0.5], + "visuals": + { + "image": + { + "url":"{APPLICATION_RESOURCE_PATH}/images/demo-tile-texture-focused.9.png", +// TILE_BACKGROUND_ALPHA +// This shader takes a texture. +// An alpha discard is performed. +// The shader uses the tiles position within the scroll-view page and the scroll-views rotation position to create a parallax effect. + "shader": + { + "fragmentShader":[ + " varying mediump vec2 vTexCoord;", + " uniform lowp vec4 uColor;", + " uniform sampler2D sTexture;", + " uniform mediump vec3 uCustomPosition;", + "", + " void main()", + " {", + " if( texture2D( sTexture, vTexCoord ).a <= 0.0001 )", + " {", + " discard;", + " }", + "", + " mediump vec2 wrapTexCoord = vec2( ( vTexCoord.x / 4.0 ) + ( uCustomPosition.x / 4.0 ) + ( uCustomPosition.z / 2.0 ), vTexCoord.y / 4.0 );", + " mediump vec4 color = texture2D( sTexture, wrapTexCoord );", + " mediump float positionWeight = ( uCustomPosition.y + 0.3 ) * color.r * 2.0;", + "", + " gl_FragColor = vec4( positionWeight, positionWeight, positionWeight, 0.9 ) * uColor + vec4( uColor.xyz, 0.0 );", + " }" + ] + } + } + } + } + } + }, + "FocusActor": + { + "visuals": + { + "image": + { + "url":"{APPLICATION_RESOURCE_PATH}/images/tile-focus.9.png" + } + } + }, + "DemoTileBorder": + { + "visuals": + { + "image": + { + "url":"{APPLICATION_RESOURCE_PATH}/images/item-background.9.png" // TILE_BACKGROUND + } + } + }, + "TextLabelRosemary": + { + "fontFamily":"Rosemary" + }, + "TextLabel": + { + "fontStyle":{"weight":"normal"}, + "pointSize":8 + }, + "LauncherLabel": + { + "pointSize":8 + }, + + "ToolbarLabel": + { + "pointSize":8 + }, + + "BuilderLabel": + { + "pointSize":8 + }, + + "ScrollView": + { + "overshootEffectColor":"B018" + }, + + "ImageScalingGroupLabel": + { + "pointSize":8 + }, + + "ImageScalingButton": + { + "label":{ + "pointSize":8 + } + }, +// +// Simple Visuals Application Style section +// + "MyControl": + { + "states": + { + "NORMAL": + { + "visuals": + { + "iconVisual": + { + "url":"{APPLICATION_RESOURCE_PATH}/images/application-icon-13.png" + } + } + }, + "FOCUSED": + { + "visuals": + { + "iconVisual": + { + "url":"{APPLICATION_RESOURCE_PATH}/images/application-icon-83.png" + } + } + } + } + } + } +} diff --git a/resources/style/android/basic-light-theme.json b/resources/style/android/basic-light-theme.json new file mode 100644 index 0000000..ae863f2 --- /dev/null +++ b/resources/style/android/basic-light-theme.json @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2000-2017 Samsung Electronics Co., Ltd + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +{ + "styles": + { + // + // Simple Visuals Application styling + // + "BasicLightButton": + { + "states": + { + "NORMAL": + { + "unselectedBackgroundVisual": + { + "url":"{APPLICATION_RESOURCE_PATH}/images/button-white-up.9.png" + } + }, + "FOCUSED": + { + "unselectedBackgroundVisual": + { + "url":"{APPLICATION_RESOURCE_PATH}/images/button-white-up.9.png" + } + } + } + } + } +} diff --git a/resources/style/android/contact-cards-example-theme.json b/resources/style/android/contact-cards-example-theme.json new file mode 100644 index 0000000..3f4ea12 --- /dev/null +++ b/resources/style/android/contact-cards-example-theme.json @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2019 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +{ + "styles": + { + "ContactNameTextLabel": + { + "textColor": [ 0, 0, 0, 1 ], + "horizontalAlignment": "CENTER", + "pointSize": 8 + }, + + "ContactDetailTextLabel": + { + "textColor": [ 0, 0, 0, 1 ], + "multiLine": true, + "pointSize": 8 + } + } +} diff --git a/resources/style/android/progress-bar-example-theme.json b/resources/style/android/progress-bar-example-theme.json new file mode 100644 index 0000000..971ee7d --- /dev/null +++ b/resources/style/android/progress-bar-example-theme.json @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +{ + "styles": + { + "ProgressBar": + { + "trackVisual":{ + "url":"{APPLICATION_RESOURCE_PATH}/images/new-progress-bar-track.9.png" + }, + "progressVisual":{ + "url":"{APPLICATION_RESOURCE_PATH}/images/new-progress-bar-progress.9.png" + }, + "secondaryProgressVisual":{ + "url":"{APPLICATION_RESOURCE_PATH}/images/new-progress-bar-secondary-progress.9.png" + } + } + } +} diff --git a/resources/style/android/simple-example-theme.json b/resources/style/android/simple-example-theme.json new file mode 100644 index 0000000..d2b68e5 --- /dev/null +++ b/resources/style/android/simple-example-theme.json @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2000-2017 Samsung Electronics Co., Ltd + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +{ + "styles": + { + // + // Simple Visuals Application styling + // + "MyControl": + { + "states": + { + "NORMAL": + { + "visuals": + { + "iconVisual": + { + "url":"{APPLICATION_RESOURCE_PATH}/images/application-icon-13.png" + } + } + }, + "FOCUSED": + { + "visuals": + { + "iconVisual": + { + "url":"{APPLICATION_RESOURCE_PATH}/images/application-icon-83.png" + } + } + } + } + } + } +} diff --git a/resources/style/android/style-example-theme-one.json b/resources/style/android/style-example-theme-one.json new file mode 100644 index 0000000..74025d2 --- /dev/null +++ b/resources/style/android/style-example-theme-one.json @@ -0,0 +1,467 @@ +{ + "constants": + { + "STYLE_DIR":"{APPLICATION_RESOURCE_PATH}/style" + }, + "styles": + { + "Title":{ + "textColor":"#0000ff", + "background": + { + "visualType":"COLOR", + "mixColor": [ 1.0, 1.0, 1.0, 1.0 ] + } + }, + "TableView":{ + "background": + { + "visualType":"COLOR", + "mixColor": [ 1.0, 1.0, 1.0, 0.03 ] + } + }, + "FlexContainer":{ + "background": + { + "visualType":"COLOR", + "mixColor": [ 1.0, 1.0, 1.0, 0.1 ] + } + }, + "RadioButton":{ + "label":{ + "textColor": [1,1,1,1] + } + }, + "CheckBoxButton":{ + "label":{ + "textColor": [1,1,1,1] + } + }, + "ColorLabel1":{ + "textColor": [1,0,0,1] + }, + "ColorLabel2":{ + "textColor": [0,1,0,1] + }, + "ColorLabel3":{ + "textColor": [0.3,0.3,1,1] + }, + "ThemeLabel":{ + "textColor":[0,1,1,1] + }, + "PopupTitle":{ + "textColor":[1,1,1,1] + }, + "PopupBody":{ + "textColor":[1,1,0,1] + }, + "TextLabel":{ + "textColor":[0,0,0,1] + }, + "ColorSlider1":{ + "styles":["Slider"] + }, + "ColorSlider2":{ + "styles":["slider"] + }, + "ColorSlider3":{ + "styles":["slider"] + }, + "ImageChannelControl": + { + "enableVisibilityTransition": + [ + { + "target":"imageVisual", + "property":"opacity", + "initialValue":0, + "targetValue":1, + "animator": + { + "alphaFunction":"EASE_IN_OUT", + "timePeriod": + { + "duration":0.25, + "delay":0 + } + } + }, + { + "target":"imageVisual", + "property":"size", + "targetValue":[1,1] + } + ], + "disableVisibilityTransition": + [ + { + "target":"imageVisual", + "property":"opacity", + "targetValue":0, + "animator": + { + "alphaFunction":"EASE_IN_OUT", + "timePeriod": + { + "duration":0.25, + "delay":0 + } + } + }, + { + "target":"imageVisual", + "property":"size", + "targetValue":[1,1,1] + } + ] + }, + "ShadowButton": + { + "states": + { + "NORMAL": + { + "visuals": + { + "backgroundVisual":{ + "visualType":"IMAGE", + "url":"{STYLE_DIR}/images/shadowButtonBg.9.png", + "depthIndex":0 + }, + + "checkboxBgVisual":{ + "visualType":"IMAGE", + "url":"{STYLE_DIR}/images/CheckBg.png", + "transform":{ + "size":[0.12, 0.37], + "offset":[30,0], + "offsetPolicy":["ABSOLUTE", "ABSOLUTE"], + "sizePolicy":["RELATIVE", "RELATIVE"], + "origin":"CENTER_BEGIN", + "anchorPoint":"CENTER_BEGIN" + }, + "depthIndex":1 + }, + + "labelVisual":{ + "visualType":"TEXT", + "text":"Don't show again", + "pointSize":8, + "horizontalAlignment":"END", + "verticalAlignment":"CENTER", + "textColor":[1,1,1,1], + "mixColor":[0,0,0,1], + "transform":{ + "size":[0.9, 0.9], + "offset":[-30,0], + "offsetPolicy":["ABSOLUTE", "ABSOLUTE"], + "sizePolicy":["RELATIVE", "RELATIVE"], + "origin":"CENTER_END", + "anchorPoint":"CENTER_END" + }, + "depthIndex":1 + } + }, + + "states": + { + "CHECKED": + { + "visuals": + { + "checkboxFgVisual":{ + "visualType":"IMAGE", + "url":"{STYLE_DIR}/images/Tick.png", + "transform":{ + "size":[0.12, 0.37], + "offset":[30,0], + "offsetPolicy":["ABSOLUTE", "ABSOLUTE"], + "sizePolicy":["RELATIVE", "RELATIVE"], + "origin":"CENTER_BEGIN", + "anchorPoint":"CENTER_BEGIN" + }, + "depthIndex":2 + } + }, + "entryTransition": + [ + { + "target":"checkboxFgVisual", + "property":"pixelArea", + "initialValue":[0.0, 0.0, 0.0, 1.0], + "targetValue":[0.0, 0.0, 1.0, 1.0], + "animator": + { + "alphaFunction":"EASE_IN", + "timePeriod": + { + "duration":0.4, + "delay":0 + } + } + }, + { + "target":"checkboxFgVisual", + "property":"size", + "initialValue":[0.0, 0.37], + "targetValue":[0.12, 0.37], + "animator": + { + "alphaFunction":"EASE_IN", + "timePeriod": + { + "duration":0.4, + "delay":0 + } + } + } + ], + "exitTransition": + [ + { + "target":"checkboxFgVisual", + "property":"pixelArea", + "initialValue":[0.0, 0.0, 1.0, 1.0], + "targetValue":[0.0, 0.0, 0.0, 1.0], + "animator": + { + "alphaFunction":"EASE_OUT", + "timePeriod": + { + "duration":0.4, + "delay":0 + } + } + }, + { + "target":"checkboxFgVisual", + "property":"size", + "targetValue":[0.0, 0.37], + "animator": + { + "alphaFunction":"EASE_OUT", + "timePeriod": + { + "duration":0.4, + "delay":0 + } + } + } + ] + }, + "UNCHECKED": + { + } + } + }, + //"FOCUSED" + "DISABLED": + { + "visuals": + { + "checkboxBgVisual":{ + "visualType":"IMAGE", + "url":"{STYLE_DIR}/images/CheckBg.png", + "transform":{ + "size":[0.09, 0.28], + "offset":[30,0], + "offsetPolicy":["ABSOLUTE", "ABSOLUTE"], + "sizePolicy":["RELATIVE", "RELATIVE"], + "origin":"CENTER_BEGIN", + "anchorPoint":"CENTER_BEGIN" + }, + "depthIndex":0 + }, + + "checkboxFgVisual":{ + "visualType":"IMAGE", + "url":"{STYLE_DIR}/images/Tick.png", + "transform":{ + "size":[0.09, 0.28], + "offset":[30,0], + "offsetPolicy":["ABSOLUTE", "ABSOLUTE"], + "sizePolicy":["RELATIVE", "RELATIVE"], + "origin":"CENTER_BEGIN", + "anchorPoint":"CENTER_BEGIN" + }, + "depthIndex":1 + }, + + "labelVisual":{ + "visualType":"TEXT", + "text":"Don't show again", + "pointSize":8, + "horizontalAlignment":"END", + "verticalAlignment":"CENTER", + "textColor":[1,1,1,1], + "mixColor":[0.3, 0.3, 0.3, 1], + "transform":{ + "size":[0.9, 0.9], + "offset":[-30,0], + "offsetPolicy":["ABSOLUTE", "ABSOLUTE"], + "sizePolicy":["RELATIVE", "RELATIVE"], + "origin":"CENTER_END", + "anchorPoint":"CENTER_END" + }, + "depthIndex":1 + } + }, + "states": + { + "CHECKED": + { + "visuals": + { + "checkboxFgVisual":{ + "visualType":"IMAGE", + "url":"{STYLE_DIR}/images/Tick.png", + "transform":{ + "size":[0.09, 0.28], + "offset":[30,0], + "offsetPolicy":["ABSOLUTE", "ABSOLUTE"], + "sizePolicy":["RELATIVE", "RELATIVE"], + "origin":"CENTER_BEGIN", + "anchorPoint":"CENTER_BEGIN" + }, + "depthIndex":2 + } + } + }, + "UNCHECKED": + { + } + } + } + }, + "transitions": + [ + { + "from":"DISABLED", + "to":"NORMAL", + "visualName":"backgroundVisual", + "effect":"FADE_IN", + "animator": + { + "alphaFunction":"EASE_OUT_BACK", + "duration":0.8 + } + }, + { + "from":"DISABLED", + "to":"NORMAL", + "visualName":"*", + "effect":"CROSSFADE", + "animator": + { + "alphaFunction":"EASE_OUT_BACK", + "duration":0.8 + } + }, + { + "from":"NORMAL", + "to":"DISABLED", + "visualName":"backgroundVisual", + "effect":"FADE_OUT", + "animator": + { + "alphaFunction":"EASE_OUT_BACK", + "duration":0.8 + } + }, + { + "from":"NORMAL", + "to":"DISABLED", + "visualName":"*", + "effect":"CROSSFADE", + "animator": + { + "alphaFunction":"EASE_OUT_BACK", + "duration":0.8 + } + } + ] + }, + "BeatControl": + { + "beatVisual":{ + "visualType":"IMAGE", + "url":"{APPLICATION_RESOURCE_PATH}/images/Logo-for-demo.png" + }, + + "bounceTransition": + [ + { + "target":"beatVisual", + "property":"size", + "initialValue":[0.5, 0.5], + "targetValue":[0.75, 0.75], + "animator": + { + "alphaFunction":"BOUNCE", + "timePeriod": + { + "duration":0.5, + "delay":0 + } + } + } + ], + + "leftTransition": + [ + { + "target":"beatVisual", + "property":"offset", + "initialValue":[0, 0], + "targetValue":[0.25, 0], + "animator": + { + "alphaFunction":"BOUNCE", + "timePeriod": + { + "duration":0.5, + "delay":0 + } + } + } + ], + + "upTransition": + [ + { + "target":"beatVisual", + "property":"offset", + "initialValue":[0, 0], + "targetValue":[0, 0.25], + "animator": + { + "alphaFunction":"BOUNCE", + "timePeriod": + { + "duration":0.5, + "delay":0 + } + } + } + ], + + "fadeTransition": + [ + { + "target":"beatVisual", + "property":"opacity", + "targetValue":0, + "animator": + { + "alphaFunction":"BOUNCE", + "timePeriod": + { + "duration":0.8, + "delay":0 + } + } + } + ] + } + } +} diff --git a/resources/style/android/style-example-theme-three.json b/resources/style/android/style-example-theme-three.json new file mode 100644 index 0000000..f77d957 --- /dev/null +++ b/resources/style/android/style-example-theme-three.json @@ -0,0 +1,109 @@ +{ + "styles": + { + "Title":{ + "textColor":"#0000ff", + "background": + { + "visualType":"COLOR", + "mixColor": [ 1.0, 1.0, 1.0, 1.0 ] + } + }, + "TableView":{ + "background": + { + "visualType":"COLOR", + "mixColor": [ 1.0, 1.0, 1.0, 0.03 ] + } + }, + "RadioButton":{ + "label":{ + "textColor": [1,1,1,1] + } + }, + "CheckboxButton":{ + "label":{ + "textColor": [1,1,1,1] + } + }, + "ColorLabel1":{ + "textColor": [1,0,0,1] + }, + "ColorLabel2":{ + "textColor": [0,1,0,1] + }, + "ColorLabel3":{ + "textColor": [0.3,0.3,1,1] + }, + "ThemeLabel":{ + "textColor":[0,1,1,1] + }, + "PopupTitle":{ + "textColor":[1,1,1,1] + }, + "PopupBody":{ + "textColor":[1,1,0,1] + }, + "TextLabel":{ + "textColor":[0,0,0,1] + }, + "ImageChannelControl": + { + "enableVisibilityTransition": + [ + { + "target":"imageVisual", + "property":"size", + "initialValue":[0.1,0.1], + "targetValue":[1,1], + "animator": + { + "alphaFunction":"EASE_IN", + "timePeriod": + { + "duration":0.3, + "delay":0.1 + } + } + }, + { + "target":"imageVisual", + "property":"mixColor", + "targetValue":[1,1,1,1] + } + ], + "disableVisibilityTransition": + [ + { + "target":"imageVisual", + "property":"size", + "initialValue":[1,1], + "targetValue":[0.1,0.1], + "animator": + { + "alphaFunction":"EASE_OUT", + "timePeriod": + { + "duration":0.3, + "delay":0.0 + } + } + }, + { + "target":"imageVisual", + "property":"mixColor", + "targetValue":[1,1,1,0], + "animator": + { + "alphaFunction":"EASE_OUT", + "timePeriod": + { + "duration":0.3, + "delay":0.0 + } + } + } + ] + } + } +} diff --git a/resources/style/android/style-example-theme-two.json b/resources/style/android/style-example-theme-two.json new file mode 100644 index 0000000..fa8ed33 --- /dev/null +++ b/resources/style/android/style-example-theme-two.json @@ -0,0 +1,235 @@ +{ + "constants": + { + "STYLE_DIR":"{APPLICATION_RESOURCE_PATH}/style" + }, + "styles": + { + "Title":{ + "textColor":"#0000ff", + "background": + { + "visualType":"COLOR", + "mixColor": [ 1.0, 1.0, 1.0, 1.0 ] + } + }, + "TableView":{ + "background": + { + "visualType":"GRADIENT", + "startPosition": [0,-1], + "endPosition": [0,1], + "stopColor": [ [ 1.0, 0.0, 1.0, 0.03 ], [1.0,0.0,1.0,0.15] ] + } + }, + + // Change an icon size, see if it gets properly re-sized + "RadioButton":{ + "unselectedVisual": + { + "visualType": "IMAGE", + "url": "{STYLE_DIR}/images/radio-button-unselected.png" + }, + "selectedVisual": + { + "visualType": "IMAGE", + "url": "{STYLE_DIR}/images/radio-button-selected.png" + }, + "label":{ + "textColor": [0.1,1,1,1] + } + }, + "checkboxbutton":{ + "label":{ + "textColor": [1,1,1,1] + } + }, + "colorLabel1":{ + "textColor": [1,0,0,1] + }, + "colorLabel2":{ + "textColor": [0,1,0,1] + }, + "colorLabel3":{ + "textColor": [0.3,0.3,1,1] + }, + "themelabel":{ + "textColor":[0,1,1,1] + }, + "popupTitle":{ + "textColor":[1,1,1,1] + }, + "popupBody":{ + "textColor":[1,1,0,1] + }, + + // Note, this overrides any non-renamed label styles, e.g. those in a button. + "TextLabel":{ + //"textColor":[0,0,0,1] + }, + + "ThinSlider":{ + "styles": ["slider"], + "showPopup":true, + "showValue":false, + "valuePrecision":0, + "handleVisual":{ + "size":[48,48] + }, + "trackVisual":{ + "size":[10, 10] + }, + "enabled":true + }, + "ColorSlider1":{ + "styles":["ThinSlider"], + "progressVisual":{ + "url":"{STYLE_DIR}/images/slider-skin-progress-red.9.png" + } + }, + "ColorSlider2":{ + "styles":["ThinSlider"], + "progressVisual":{ + "url":"{STYLE_DIR}/images/slider-skin-progress-green.9.png" + } + }, + "ColorSlider3":{ + "styles":["thinslider"], + "progressVisual":{ + "url":"{STYLE_DIR}/images/slider-skin-progress-blue.9.png" + } + }, + "ImageChannelControl": + { + "enableVisibilityTransition": + [ + { + "target":"imageVisual", + "property":"mixColor", + "initialValue":[1,1,1,0], + "targetValue":[1,1,1,1], + "animator": + { + "alphaFunction":"EASE_IN_OUT", + "timePeriod": + { + "duration":0.4, + "delay":0 + } + } + }, + { + "target":"imageVisual", + "property":"size", + "targetValue":[1,1] + } + ], + "disableVisibilityTransition": + [ + { + "target":"imageVisual", + "property":"mixColor", + "targetValue":[1,1,1,0], + "animator": + { + "alphaFunction":"EASE_IN_OUT", + "timePeriod": + { + "duration":0.4, + "delay":0.2 + } + } + }, + { + "target":"imageVisual", + "property":"size", + "targetValue":[1,1] + } + ] + }, + "ShadowButton": + { + "backgroundVisual":{ + "visualType":"IMAGE", + "url":"{STYLE_DIR}/images/shadowButtonBg.9.png" + }, + "checkboxBgVisual":{ + "visualType":"IMAGE", + "url":"{STYLE_DIR}/images/CheckBg.png", + "transform":{ + "size":[0.09, 0.28], + "offset":[30,0], + "offsetPolicy":["ABSOLUTE", "ABSOLUTE"], + "sizePolicy":["RELATIVE", "RELATIVE"], + "origin":"CENTER_BEGIN", + "anchorPoint":"CENTER_BEGIN" + } + }, + "checkboxFgVisual":{ + "visualType":"IMAGE", + "url":"{STYLE_DIR}/images/Tick.png", + "transform":{ + "size":[0.09, 0.28], + "offset":[30,0], + "offsetPolicy":["ABSOLUTE", "ABSOLUTE"], + "sizePolicy":["RELATIVE", "RELATIVE"], + "origin":"CENTER_BEGIN", + "anchorPoint":"CENTER_BEGIN" + } + }, + "labelVisual":{ + "visualType":"TEXT", + "text":"Don't show again", + "pointSize":8, + "horizontalAlignment":"END", + "verticalAlignment":"CENTER", + "textColor":[1,1,1,1], + "mixColor":[0.3, 0.3, 0.3, 1], + "transform":{ + "size":[0.9, 0.9], + "offset":[-30,0], + "offsetPolicy":["ABSOLUTE", "ABSOLUTE"], + "sizePolicy":["RELATIVE", "RELATIVE"], + "origin":"CENTER_END", + "anchorPoint":"CENTER_END" + } + }, + "activeTransition": + [ + { + "target":"checkboxBgVisual", + "property":"size", + "initialValue":[0.09, 0.28], + "targetValue":[0.12, 0.37], + "animator": + { + "alphaFunction":"EASE_OUT_BACK", + "timePeriod": + { + "duration":0.8, + "delay":0 + } + } + } + ], + "inactiveTransition": + [ + { + "target":"checkboxBgVisual", + "property":"size", + "initialValue":[0.12, 0.37], + "targetValue":[0.09, 0.28], + "animator": + { + "alphaFunction":"EASE_OUT_BACK", + "timePeriod": + { + "duration":0.8, + "delay":0 + } + } + } + ] + } + } +} diff --git a/resources/style/android/text-editor-example-theme.json b/resources/style/android/text-editor-example-theme.json new file mode 100644 index 0000000..48470b4 --- /dev/null +++ b/resources/style/android/text-editor-example-theme.json @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2000-2017 Samsung Electronics Co., Ltd + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +{ + "styles": + { + "ScrollBar": + { + "indicatorShowDuration":1.0, + "indicatorHideDuration":1.0, + "background": { + "rendererType": "image", + "url": "{APPLICATION_RESOURCE_PATH}/images/button-disabled.9.png" + } + }, + "ScrollBarIndicator": + { + "resourceUrl":"{APPLICATION_RESOURCE_PATH}/images/button-white-up.9.png" + } + } +} diff --git a/resources/style/android/tooltip-example-theme.json b/resources/style/android/tooltip-example-theme.json new file mode 100644 index 0000000..74e4158 --- /dev/null +++ b/resources/style/android/tooltip-example-theme.json @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +{ + "styles": + { + "TooltipTextOnly" : + { + "tooltip": "Using defaults defined in the Toolkit stylesheet" + }, + + "TooltipArray" : + { + "tooltip" : + { + "content" : + [ + { + "visualType" : "IMAGE", + "url" : "{APPLICATION_RESOURCE_PATH}/images/application-icon-0.png", + "desiredWidth" : 75, + "desiredHeight" : 75 + }, + { + "visualType" : "TEXT", + "text" : "An icon on the left and\nmulti-line text on the right", + "multiLine" : true, + "pointSize" : 8 + } + ], + "tail" : true + } + }, + + "TooltipCustom" : + { + "tooltip": + { + "content": + { + "visualType" : "TEXT", + "textColor" : [1,1,1,1], + "text" : "Completely custom style\nthat disappears on movement", + "multiLine" : true, + "pointSize" : 8 + }, + "waitTime":0.5, + "background": + { + "visual":"{APPLICATION_RESOURCE_PATH}/images/tooltip.9.png", + "border":[1,5,5,1] + }, + "tail": + { + "visibility":true, + "aboveVisual":"{APPLICATION_RESOURCE_PATH}/images/tooltip-tail-above.png", + "belowVisual":"{APPLICATION_RESOURCE_PATH}/images/tooltip-tail-below.png" + }, + "position":"ABOVE", + "hoverPointOffset":[10,10], + "movementThreshold":5, + "disappearOnMovement":true + } + }, + + "TableView" : + { + "cellPadding" : [ 5.0, 5.0 ] + } + } +} diff --git a/shared/dali-demo-strings.h b/shared/dali-demo-strings.h index 354338f..2969f79 100644 --- a/shared/dali-demo-strings.h +++ b/shared/dali-demo-strings.h @@ -19,7 +19,9 @@ #ifndef DALI_DEMO_STRINGS_H #define DALI_DEMO_STRINGS_H +#ifdef INTERNATIONALIZATION_ENABLED #include +#endif #ifdef __cplusplus extern "C" diff --git a/shared/dali-table-view.cpp b/shared/dali-table-view.cpp index 9be600d..8fcf8b1 100644 --- a/shared/dali-table-view.cpp +++ b/shared/dali-table-view.cpp @@ -620,7 +620,7 @@ void DaliTableView::OnPressedAnimationFinished( Dali::Animation& source ) { std::string name = mPressedActor.GetName(); - ExecuteProcess( name ); + ExecuteProcess( name, mApplication ); mPressedActor.Reset(); } diff --git a/shared/execute-process-android.cpp b/shared/execute-process-android.cpp new file mode 100644 index 0000000..d042a55 --- /dev/null +++ b/shared/execute-process-android.cpp @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2020 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + // FILE HEADER +#include "execute-process.h" + + // EXTERNAL INCLUDES +#include +#include +#include + +void ExecuteProcess( const std::string& processName, Dali::Application& application ) +{ + std::stringstream stream; + stream << "am start -a android.intent.action.MAIN -n com.sec.dalidemo/.DaliDemoNativeActivity --user 0 --es start " << processName.c_str(); + pid_t parentPID = getpid(); + + pid_t pid = fork(); + if( pid == 0 ) + { + do + { + sleep( 1 ); + } + while( kill( parentPID, 0 ) == 0 ); + + system( stream.str().c_str() ); + exit( 0 ); + } + else + { + application.Quit(); + } +} diff --git a/shared/execute-process-unix.cpp b/shared/execute-process-unix.cpp index 6b87e54..aa77771 100644 --- a/shared/execute-process-unix.cpp +++ b/shared/execute-process-unix.cpp @@ -23,12 +23,12 @@ #include #include -void ExecuteProcess( const std::string& processName ) +void ExecuteProcess( const std::string& processName, Dali::Application& application ) { std::stringstream stream; stream << DEMO_EXAMPLE_BIN << processName.c_str(); pid_t pid = fork(); - if( pid == 0) + if( pid == 0 ) { execlp( stream.str().c_str(), processName.c_str(), NULL ); DALI_ASSERT_ALWAYS(false && "exec failed!"); diff --git a/shared/execute-process-win.cpp b/shared/execute-process-win.cpp index 3eb89f4..8445221 100644 --- a/shared/execute-process-win.cpp +++ b/shared/execute-process-win.cpp @@ -27,7 +27,7 @@ namespace const std::string PATH_SEPARATOR( "\\" ); } -void ExecuteProcess( const std::string& processName ) +void ExecuteProcess( const std::string& processName, Dali::Application& application ) { char currentPath[MAX_PATH]; DWORD numberOfCharacters = GetCurrentDirectory( MAX_PATH, currentPath ); diff --git a/shared/execute-process.h b/shared/execute-process.h index d31a4a1..c3d11cd 100644 --- a/shared/execute-process.h +++ b/shared/execute-process.h @@ -20,8 +20,9 @@ // EXTERNAL INCLUDES #include +#include -void ExecuteProcess( const std::string& processName ); +void ExecuteProcess( const std::string& processName, Dali::Application& application ); #endif // DALI_DEMO_EXECUTE_PROCESS_H diff --git a/tests-reel/dali-tests-reel.cpp b/tests-reel/dali-tests-reel.cpp index 18a3fa2..7abe064 100644 --- a/tests-reel/dali-tests-reel.cpp +++ b/tests-reel/dali-tests-reel.cpp @@ -27,10 +27,11 @@ using namespace Dali; int DALI_EXPORT_API main(int argc, char **argv) { // Configure gettext for internalization +#if INTERNATIONALIZATION_ENABLED bindtextdomain(DALI_DEMO_DOMAIN_LOCAL, DEMO_LOCALE_DIR); textdomain(DALI_DEMO_DOMAIN_LOCAL); setlocale(LC_ALL, DEMO_LANG); - +#endif Application app = Application::New( &argc, &argv, DEMO_STYLE_DIR "/tests-theme.json" ); // Create the demo launcher -- 2.7.4