From: Anton Obzhirov Date: Wed, 18 Dec 2019 15:31:56 +0000 (+0000) Subject: Fix AndroidFramework::Delete() so it doesn't crash anymore and small cleanup. X-Git-Tag: dali_1.4.52~5^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F83%2F220483%2F2;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git Fix AndroidFramework::Delete() so it doesn't crash anymore and small cleanup. Change-Id: Ib996a66781062f425dd4dc1c9e0e5a32ee638e6c --- diff --git a/dali/integration-api/adaptor-framework/android/android-framework.cpp b/dali/integration-api/adaptor-framework/android/android-framework.cpp index 5034c98..859f7c6 100644 --- a/dali/integration-api/adaptor-framework/android/android-framework.cpp +++ b/dali/integration-api/adaptor-framework/android/android-framework.cpp @@ -37,8 +37,7 @@ AndroidFramework& AndroidFramework::New() void AndroidFramework::Delete() { - DALI_ASSERT_ALWAYS( &Get() != nullptr && "AndroidFramework not instantiated" ); - delete &Get(); + Internal::Adaptor::AndroidFramework::Delete(); } void AndroidFramework::SetNativeApplication( android_app* application ) diff --git a/dali/internal/adaptor/android/android-framework-impl.cpp b/dali/internal/adaptor/android/android-framework-impl.cpp index 70afaad..025cdf3 100644 --- a/dali/internal/adaptor/android/android-framework-impl.cpp +++ b/dali/internal/adaptor/android/android-framework-impl.cpp @@ -35,11 +35,19 @@ AndroidFramework* gAndroidFramework = nullptr; // raw specific pointer to allow Dali::Integration::AndroidFramework& AndroidFramework::New() { Dali::Integration::AndroidFramework* androidFramework = new Dali::Integration::AndroidFramework; - AndroidFramework* impl = new AndroidFramework( *androidFramework ); + AndroidFramework* impl = new AndroidFramework( androidFramework ); androidFramework->mImpl = impl; return *androidFramework; } +void AndroidFramework::Delete() +{ + DALI_ASSERT_ALWAYS( gAndroidFramework != nullptr && "Cannot delete already deleted AndroidFramework." ); + + delete gAndroidFramework->mAndroidFramework; + gAndroidFramework = nullptr; +} + void AndroidFramework::SetNativeApplication( android_app* application ) { mNativeApplication = application; @@ -119,10 +127,10 @@ Dali::Integration::AndroidFramework& AndroidFramework::Get() { DALI_ASSERT_ALWAYS( gAndroidFramework != nullptr && "AndroidFramework not instantiated" ); - return gAndroidFramework->mAndroidFramework; + return *gAndroidFramework->mAndroidFramework; } -AndroidFramework::AndroidFramework( Dali::Integration::AndroidFramework& androidFramework ) +AndroidFramework::AndroidFramework( Dali::Integration::AndroidFramework* androidFramework ) : mAndroidFramework( androidFramework ), mFramework( nullptr ), mNativeApplication( nullptr ), diff --git a/dali/internal/adaptor/android/android-framework-impl.h b/dali/internal/adaptor/android/android-framework-impl.h index d88d372..f3727b5 100644 --- a/dali/internal/adaptor/android/android-framework-impl.h +++ b/dali/internal/adaptor/android/android-framework-impl.h @@ -60,6 +60,11 @@ public: static Dali::Integration::AndroidFramework& New(); /** + * @brief Delete an Android framework. + */ + static void Delete(); + + /** * @copydoc Dali::Integration::AndroidFramework::SetNativeApplication() */ void SetNativeApplication( android_app* application ); @@ -163,8 +168,8 @@ public: AndroidFramework& operator=( AndroidFramework&& ) = delete; ///< Deleted move assignment operator private: - AndroidFramework( Dali::Integration::AndroidFramework& androidFramework ); - Dali::Integration::AndroidFramework& mAndroidFramework; + AndroidFramework( Dali::Integration::AndroidFramework* androidFramework ); + Dali::Integration::AndroidFramework* mAndroidFramework; Framework* mFramework; android_app* mNativeApplication; diff --git a/dali/internal/adaptor/androidjni/framework-androidjni.cpp b/dali/internal/adaptor/androidjni/framework-androidjni.cpp index 4eb763a..7e932c6 100644 --- a/dali/internal/adaptor/androidjni/framework-androidjni.cpp +++ b/dali/internal/adaptor/androidjni/framework-androidjni.cpp @@ -114,6 +114,7 @@ Framework::~Framework() void Framework::Run() { + AndroidFramework::GetImplementation( AndroidFramework::Get() ).SetFramework( this ); mRunning = true; } @@ -266,6 +267,8 @@ bool Framework::AppStatusHandler(int type, void* data) case APP_DESTROYED: mObserver.OnTerminate(); + mRunning = false; + mPaused = false; mInitialised = false; break;