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()
117 AndroidFramework::GetImplementation( AndroidFramework::Get() ).SetFramework( this );
121 unsigned int Framework::AddIdle( int timeout, void* data, bool ( *callback )( void *data ) )
123 JNIEnv *env = nullptr;
124 JavaVM* javaVM = AndroidFramework::Get().GetJVM();
125 if( javaVM == nullptr || javaVM->GetEnv( reinterpret_cast<void **>( &env ), JNI_VERSION_1_6 ) != JNI_OK )
127 DALI_LOG_ERROR("Couldn't get JNI env.");
131 jclass clazz = env->FindClass( "com/sec/daliview/DaliView" );
134 DALI_LOG_ERROR("Couldn't find com.sec.daliview.DaliView.");
138 jmethodID addIdle = env->GetStaticMethodID( clazz, "addIdle", "(JJJ)I" );
141 DALI_LOG_ERROR("Couldn't find com.sec.daliview.DaliView.addIdle.");
145 jint id = env->CallStaticIntMethod( clazz, addIdle, reinterpret_cast<jlong>( callback ), reinterpret_cast<jlong>( data ), static_cast<jlong>( timeout ) );
146 return static_cast<unsigned int>( id );
149 void Framework::RemoveIdle( unsigned int id )
151 JNIEnv *env = nullptr;
152 JavaVM* javaVM = AndroidFramework::Get().GetJVM();
153 if( javaVM == nullptr || javaVM->GetEnv( reinterpret_cast<void **>( &env ), JNI_VERSION_1_6 ) != JNI_OK )
155 DALI_LOG_ERROR("Couldn't get JNI env.");
159 jclass clazz = env->FindClass( "com/sec/daliview/DaliView" );
162 DALI_LOG_ERROR("Couldn't find com.sec.daliview.DaliView.");
166 jmethodID removeIdle = env->GetStaticMethodID( clazz, "removeIdle", "(I)V" );
169 DALI_LOG_ERROR("Couldn't find com.sec.daliview.DaliView.removeIdle.");
173 env->CallStaticVoidMethod( clazz, removeIdle, static_cast<jint>( id ) );
176 void Framework::Quit()
178 DALI_LOG_ERROR("Quit does nothing for DaliView!");
181 bool Framework::IsMainLoopRunning()
186 void Framework::AddAbortCallback( CallbackBase* callback )
188 mImpl->mAbortCallBack = callback;
191 std::string Framework::GetBundleName() const
196 void Framework::SetBundleName(const std::string& name)
201 std::string Framework::GetBundleId() const
206 std::string Framework::GetResourcePath()
208 return DALI_DATA_RO_DIR;
211 std::string Framework::GetDataPath()
216 void Framework::SetBundleId(const std::string& id)
221 void Framework::AbortCallback( )
223 // if an abort call back has been installed run it.
224 if (mImpl->mAbortCallBack)
226 CallbackBase::Execute( *mImpl->mAbortCallBack );
234 bool Framework::AppStatusHandler(int type, void* data)
238 case APP_WINDOW_CREATED:
245 mObserver.OnSurfaceCreated( data );
248 case APP_WINDOW_DESTROYED:
249 mObserver.OnSurfaceDestroyed( data );
257 mObserver.OnResume();
264 case APP_LANGUAGE_CHANGE:
265 mObserver.OnLanguageChanged();
269 mObserver.OnTerminate();
272 mInitialised = false;
282 void Framework::InitThreads()
286 std::string Framework::GetLanguage() const
288 return mImpl->GetLanguage();
291 std::string Framework::GetRegion() const
293 return mImpl->GetRegion();
296 } // namespace Adaptor
298 } // namespace Internal