Browse Source

Android: Improve complexity of ActivityLifecycleCallbacks::invoke

pull/22/head
reuk 3 years ago
parent
commit
ac396daa70
No known key found for this signature in database GPG Key ID: 9ADCD339CFC98A11
1 changed files with 45 additions and 29 deletions
  1. +45
    -29
      modules/juce_core/native/juce_android_JNIHelpers.cpp

+ 45
- 29
modules/juce_core/native/juce_android_JNIHelpers.cpp View File

@@ -414,35 +414,51 @@ jobject ActivityLifecycleCallbacks::invoke (jobject proxy, jobject method, jobje
{
auto* env = getEnv();
auto methodName = juceString ((jstring) env->CallObjectMethod (method, JavaMethod.getName));
auto activity = env->GetArrayLength (args) > 0 ? env->GetObjectArrayElement (args, 0) : (jobject) nullptr;
auto bundle = env->GetArrayLength (args) > 1 ? env->GetObjectArrayElement (args, 1) : (jobject) nullptr;
if (methodName == "onActivityPreCreated") { onActivityPreCreated (activity, bundle); return nullptr; }
else if (methodName == "onActivityPreDestroyed") { onActivityPreDestroyed (activity); return nullptr; }
else if (methodName == "onActivityPrePaused") { onActivityPrePaused (activity); return nullptr; }
else if (methodName == "onActivityPreResumed") { onActivityPreResumed (activity); return nullptr; }
else if (methodName == "onActivityPreSaveInstanceState") { onActivityPreSaveInstanceState (activity, bundle); return nullptr; }
else if (methodName == "onActivityPreStarted") { onActivityPreStarted (activity); return nullptr; }
else if (methodName == "onActivityPreStopped") { onActivityPreStopped (activity); return nullptr; }
else if (methodName == "onActivityCreated") { onActivityCreated (activity, bundle); return nullptr; }
else if (methodName == "onActivityDestroyed") { onActivityDestroyed (activity); return nullptr; }
else if (methodName == "onActivityPaused") { onActivityPaused (activity); return nullptr; }
else if (methodName == "onActivityResumed") { onActivityResumed (activity); return nullptr; }
else if (methodName == "onActivitySaveInstanceState") { onActivitySaveInstanceState (activity, bundle); return nullptr; }
else if (methodName == "onActivityStarted") { onActivityStarted (activity); return nullptr; }
else if (methodName == "onActivityStopped") { onActivityStopped (activity); return nullptr; }
else if (methodName == "onActivityPostCreated") { onActivityPostCreated (activity, bundle); return nullptr; }
else if (methodName == "onActivityPostDestroyed") { onActivityPostDestroyed (activity); return nullptr; }
else if (methodName == "onActivityPostPaused") { onActivityPostPaused (activity); return nullptr; }
else if (methodName == "onActivityPostResumed") { onActivityPostResumed (activity); return nullptr; }
else if (methodName == "onActivityPostSaveInstanceState") { onActivityPostSaveInstanceState (activity, bundle); return nullptr; }
else if (methodName == "onActivityPostStarted") { onActivityPostStarted (activity); return nullptr; }
else if (methodName == "onActivityPostStopped") { onActivityPostStopped (activity); return nullptr; }
else if (methodName == "onActivityConfigurationChanged") { onActivityConfigurationChanged (activity); return nullptr; }
return AndroidInterfaceImplementer::invoke (proxy, method, args);
struct Comparator
{
bool operator() (const char* a, const char* b) const
{
return CharPointer_ASCII { a }.compare (CharPointer_ASCII { b }) < 0;
}
};
static const std::map<const char*, void (*) (ActivityLifecycleCallbacks&, jobject, jobject), Comparator> entries
{
{ "onActivityConfigurationChanged", [] (auto& t, auto activity, auto ) { t.onActivityConfigurationChanged (activity); } },
{ "onActivityCreated", [] (auto& t, auto activity, auto bundle) { t.onActivityCreated (activity, bundle); } },
{ "onActivityDestroyed", [] (auto& t, auto activity, auto ) { t.onActivityDestroyed (activity); } },
{ "onActivityPaused", [] (auto& t, auto activity, auto ) { t.onActivityPaused (activity); } },
{ "onActivityPostCreated", [] (auto& t, auto activity, auto bundle) { t.onActivityPostCreated (activity, bundle); } },
{ "onActivityPostDestroyed", [] (auto& t, auto activity, auto ) { t.onActivityPostDestroyed (activity); } },
{ "onActivityPostPaused", [] (auto& t, auto activity, auto ) { t.onActivityPostPaused (activity); } },
{ "onActivityPostResumed", [] (auto& t, auto activity, auto ) { t.onActivityPostResumed (activity); } },
{ "onActivityPostSaveInstanceState", [] (auto& t, auto activity, auto bundle) { t.onActivityPostSaveInstanceState (activity, bundle); } },
{ "onActivityPostStarted", [] (auto& t, auto activity, auto ) { t.onActivityPostStarted (activity); } },
{ "onActivityPostStopped", [] (auto& t, auto activity, auto ) { t.onActivityPostStopped (activity); } },
{ "onActivityPreCreated", [] (auto& t, auto activity, auto bundle) { t.onActivityPreCreated (activity, bundle); } },
{ "onActivityPreDestroyed", [] (auto& t, auto activity, auto ) { t.onActivityPreDestroyed (activity); } },
{ "onActivityPrePaused", [] (auto& t, auto activity, auto ) { t.onActivityPrePaused (activity); } },
{ "onActivityPreResumed", [] (auto& t, auto activity, auto ) { t.onActivityPreResumed (activity); } },
{ "onActivityPreSaveInstanceState", [] (auto& t, auto activity, auto bundle) { t.onActivityPreSaveInstanceState (activity, bundle); } },
{ "onActivityPreStarted", [] (auto& t, auto activity, auto ) { t.onActivityPreStarted (activity); } },
{ "onActivityPreStopped", [] (auto& t, auto activity, auto ) { t.onActivityPreStopped (activity); } },
{ "onActivityResumed", [] (auto& t, auto activity, auto ) { t.onActivityResumed (activity); } },
{ "onActivitySaveInstanceState", [] (auto& t, auto activity, auto bundle) { t.onActivitySaveInstanceState (activity, bundle); } },
{ "onActivityStarted", [] (auto& t, auto activity, auto ) { t.onActivityStarted (activity); } },
{ "onActivityStopped", [] (auto& t, auto activity, auto ) { t.onActivityStopped (activity); } },
};
const auto methodName = juceString ((jstring) env->CallObjectMethod (method, JavaMethod.getName));
const auto iter = entries.find (methodName.toRawUTF8());
if (iter == entries.end())
return AndroidInterfaceImplementer::invoke (proxy, method, args);
const auto activity = env->GetArrayLength (args) > 0 ? env->GetObjectArrayElement (args, 0) : (jobject) nullptr;
const auto bundle = env->GetArrayLength (args) > 1 ? env->GetObjectArrayElement (args, 1) : (jobject) nullptr;
(iter->second) (*this, activity, bundle);
return nullptr;
}
//==============================================================================


Loading…
Cancel
Save