blob: d740d8748694288b8c227a9d04525481ef700483 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_TESTING_ANDROID_NATIVE_ACTIVITY_NATIVE_ACTIVITY_H_
#define FLUTTER_TESTING_ANDROID_NATIVE_ACTIVITY_NATIVE_ACTIVITY_H_
#include <android/native_activity.h>
#include "flutter/fml/macros.h"
#include "flutter/fml/mapping.h"
namespace flutter {
//------------------------------------------------------------------------------
/// @brief An instance of a native activity. Users of the
/// `native_activity_apk` are meant to subclass this and return an
/// instance of this subclass from `flutter::NativeActivityMain`.
///
/// All methods are called on the Android Platform main-thread.
/// Subclasses will usually re-thread calls to a background thread
/// for long running tasks as these will lead to ANRs on when
/// invoked on the platform thread.
///
class NativeActivity {
public:
virtual ~NativeActivity();
//----------------------------------------------------------------------------
/// @brief Perform graceful termination of the activity. Will eventually
/// lead to the other activity lifecycle callback on the way to
/// termination.
///
/// Can be called from any thread.
///
void Terminate();
virtual void OnStart();
virtual void OnStop();
virtual void OnPause();
virtual void OnResume();
virtual std::shared_ptr<fml::Mapping> OnSaveInstanceState();
virtual void OnWindowFocusChanged(bool has_focus);
virtual void OnNativeWindowCreated(ANativeWindow* window);
virtual void OnNativeWindowResized(ANativeWindow* window);
virtual void OnNativeWindowRedrawNeeded(ANativeWindow* window);
virtual void OnNativeWindowDestroyed(ANativeWindow* window);
virtual void OnInputQueueCreated(AInputQueue* queue);
virtual void OnInputQueueDestroyed(AInputQueue* queue);
virtual void OnConfigurationChanged();
virtual void OnLowMemory();
protected:
explicit NativeActivity(ANativeActivity* activity);
private:
ANativeActivity* activity_ = nullptr;
FML_DISALLOW_COPY_AND_ASSIGN(NativeActivity);
};
std::unique_ptr<NativeActivity> NativeActivityMain(
ANativeActivity* activity,
std::unique_ptr<fml::Mapping> saved_state);
} // namespace flutter
#endif // FLUTTER_TESTING_ANDROID_NATIVE_ACTIVITY_NATIVE_ACTIVITY_H_