2 * Copyright (c) 2019 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <dali/internal/adaptor/common/framework.h>
22 #include <dali/integration-api/debug.h>
23 #include <dali/integration-api/adaptor-framework/android/android-framework.h>
24 #include <dali/public-api/adaptor-framework/application.h>
25 #include <dali/devel-api/adaptor-framework/application-devel.h>
28 #include <dali/internal/adaptor/common/application-impl.h>
29 #include <dali/internal/adaptor/android/android-framework-impl.h>
30 #include <dali/internal/system/common/callback-manager.h>
44 * Impl to hide android data members
46 struct Framework::Impl
50 Impl( Framework* framework )
51 : mAbortCallBack( nullptr ),
52 mCallbackManager( CallbackManager::New() ),
53 mLanguage( "NOT_SUPPORTED" ),
54 mRegion( "NOT_SUPPORTED" )
56 AndroidFramework::GetImplementation( AndroidFramework::Get() ).SetFramework( framework );
61 AndroidFramework::GetImplementation( AndroidFramework::Get() ).SetFramework( nullptr );
63 delete mAbortCallBack;
64 mAbortCallBack = nullptr;
66 // we're quiting the main loop so
67 // mCallbackManager->RemoveAllCallBacks() does not need to be called
68 // to delete our abort handler
69 delete mCallbackManager;
70 mCallbackManager = nullptr;
73 std::string GetLanguage() const
78 std::string GetRegion() const
83 CallbackBase* mAbortCallBack;
84 CallbackManager* mCallbackManager;
85 std::string mLanguage;
89 Framework::Framework( Framework::Observer& observer, int *argc, char ***argv, Type type )
90 : mObserver( observer ),
91 mInitialised( false ),
98 mAbortHandler( MakeCallback( this, &Framework::AbortCallback ) ),
101 mImpl = new Impl( this );
104 Framework::~Framework()
115 void Framework::Run()
120 unsigned int Framework::AddIdle( int timeout, void* data, bool ( *callback )( void *data ) )
122 JNIEnv *env = nullptr;
123 JavaVM* javaVM = AndroidFramework::Get().GetJVM();
124 if( javaVM == nullptr || javaVM->GetEnv( reinterpret_cast<void **>( &env ), JNI_VERSION_1_6 ) != JNI_OK )
126 DALI_LOG_ERROR("Couldn't get JNI env.");
130 jclass clazz = env->FindClass( "com/sec/daliview/DaliView" );
133 DALI_LOG_ERROR("Couldn't find com.sec.daliview.DaliView.");
137 jmethodID addIdle = env->GetStaticMethodID( clazz, "addIdle", "(JJJ)I" );
140 DALI_LOG_ERROR("Couldn't find com.sec.daliview.DaliView.addIdle.");
144 jint id = env->CallStaticIntMethod( clazz, addIdle, reinterpret_cast<jlong>( callback ), reinterpret_cast<jlong>( data ), static_cast<jlong>( timeout ) );
145 return static_cast<unsigned int>( id );
148 void Framework::RemoveIdle( unsigned int id )
150 JNIEnv *env = nullptr;
151 JavaVM* javaVM = AndroidFramework::Get().GetJVM();
152 if( javaVM == nullptr || javaVM->GetEnv( reinterpret_cast<void **>( &env ), JNI_VERSION_1_6 ) != JNI_OK )
154 DALI_LOG_ERROR("Couldn't get JNI env.");
158 jclass clazz = env->FindClass( "com/sec/daliview/DaliView" );
161 DALI_LOG_ERROR("Couldn't find com.sec.daliview.DaliView.");
165 jmethodID removeIdle = env->GetStaticMethodID( clazz, "removeIdle", "(I)V" );
168 DALI_LOG_ERROR("Couldn't find com.sec.daliview.DaliView.removeIdle.");
172 env->CallStaticVoidMethod( clazz, removeIdle, static_cast<jint>( id ) );
175 void Framework::Quit()
177 DALI_LOG_ERROR("Quit does nothing for DaliView!");
180 bool Framework::IsMainLoopRunning()
185 void Framework::AddAbortCallback( CallbackBase* callback )
187 mImpl->mAbortCallBack = callback;
190 std::string Framework::GetBundleName() const
195 void Framework::SetBundleName(const std::string& name)
200 std::string Framework::GetBundleId() const
205 std::string Framework::GetResourcePath()
207 return DALI_DATA_RO_DIR;
210 std::string Framework::GetDataPath()
215 void Framework::SetBundleId(const std::string& id)
220 void Framework::AbortCallback( )
222 // if an abort call back has been installed run it.
223 if (mImpl->mAbortCallBack)
225 CallbackBase::Execute( *mImpl->mAbortCallBack );
233 bool Framework::AppStatusHandler(int type, void* data)
237 case APP_WINDOW_CREATED:
244 mObserver.OnSurfaceCreated( data );
247 case APP_WINDOW_DESTROYED:
248 mObserver.OnSurfaceDestroyed( data );
256 mObserver.OnResume();
263 case APP_LANGUAGE_CHANGE:
264 mObserver.OnLanguageChanged();
268 mObserver.OnTerminate();
269 mInitialised = false;
279 void Framework::InitThreads()
283 std::string Framework::GetLanguage() const
285 return mImpl->GetLanguage();
288 std::string Framework::GetRegion() const
290 return mImpl->GetRegion();
293 } // namespace Adaptor
295 } // namespace Internal