Fix AndroidFramework::Delete() so it doesn't crash anymore and small cleanup. 83/220483/2
authorAnton Obzhirov <a.obzhirov@samsung.com>
Wed, 18 Dec 2019 15:31:56 +0000 (15:31 +0000)
committerAnton Obzhirov <a.obzhirov@samsung.com>
Thu, 19 Dec 2019 15:12:19 +0000 (15:12 +0000)
Change-Id: Ib996a66781062f425dd4dc1c9e0e5a32ee638e6c

dali/integration-api/adaptor-framework/android/android-framework.cpp
dali/internal/adaptor/android/android-framework-impl.cpp
dali/internal/adaptor/android/android-framework-impl.h
dali/internal/adaptor/androidjni/framework-androidjni.cpp

index 5034c98..859f7c6 100644 (file)
@@ -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 )
index 70afaad..025cdf3 100644 (file)
@@ -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 ),
index d88d372..f3727b5 100644 (file)
@@ -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;
index 4eb763a..7e932c6 100644 (file)
@@ -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;