Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1521)

Unified Diff: samples/android_sample/jni/eventloop.cc

Issue 11434046: Android rayshader sample. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: samples/android_sample/jni/eventloop.cc
===================================================================
--- samples/android_sample/jni/eventloop.cc (revision 0)
+++ samples/android_sample/jni/eventloop.cc (revision 0)
@@ -0,0 +1,144 @@
+#include "eventloop.h"
+#include "bin/log.h"
+
+EventLoop::EventLoop(android_app* pApplication) :
+ mEnabled(false),
+ mQuit(false),
+ mApplication(pApplication),
+ mActivityHandler(NULL),
+ mInputHandler(NULL) {
+ mApplication->onAppCmd = activityCallback;
+ mApplication->onInputEvent = inputCallback;
+ mApplication->userData = this;
+}
+
+void EventLoop::run(ActivityHandler* pActivityHandler,
+ Context* pContext) {
+ int32_t lResult;
+ int32_t lEvents;
+ android_poll_source* lSource;
+
+ app_dummy();
+ mActivityHandler = pActivityHandler;
+ mInputHandler = pContext->mInputHandler;
+ Log::Print("Starting event loop");
+ while (true) {
+ // If not enabled, block on events. If enabled, don't block
+ // so we can do useful work in onStep.
+ while ((lResult = ALooper_pollAll(mEnabled ? 0 : -1,
+ NULL,
+ &lEvents,
+ (void**)&lSource)) >= 0) {
+ if (lSource != NULL) {
+ lSource->process(mApplication, lSource);
+ }
+ if (mApplication->destroyRequested) {
+ return;
+ }
+ }
+ if (mEnabled && !mQuit) {
+ Log::Print("step");
+ if (mActivityHandler->onStep() != 0) {
+ mQuit = true;
+ ANativeActivity_finish(mApplication->activity);
+ }
+ }
+ }
+}
+
+// Called when we gain focus.
+void EventLoop::activate() {
+ Log::Print("activate");
+ if (!mEnabled && mApplication->window != NULL) {
+ mQuit = false;
+ mEnabled = true;
+ if (mActivityHandler->onActivate() != 0) {
+ mQuit = true;
+ ANativeActivity_finish(mApplication->activity);
+ }
+ }
+}
+
+// Called when we lose focus.
+void EventLoop::deactivate() {
+ Log::Print("deactivate");
+ if (mEnabled) {
+ mActivityHandler->onDeactivate();
+ mEnabled = false;
+ }
+}
+
+void EventLoop::processActivityEvent(int32_t pCommand) {
+ switch (pCommand) {
+ case APP_CMD_CONFIG_CHANGED:
+ mActivityHandler->onConfigurationChanged();
+ break;
+ case APP_CMD_INIT_WINDOW:
+ mActivityHandler->onCreateWindow();
+ break;
+ case APP_CMD_DESTROY:
+ mActivityHandler->onDestroy();
+ break;
+ case APP_CMD_GAINED_FOCUS:
+ activate();
+ mActivityHandler->onGainedFocus();
+ break;
+ case APP_CMD_LOST_FOCUS:
+ mActivityHandler->onLostFocus();
+ deactivate();
+ break;
+ case APP_CMD_LOW_MEMORY:
+ mActivityHandler->onLowMemory();
+ break;
+ case APP_CMD_PAUSE:
+ mActivityHandler->onPause();
+ deactivate();
+ break;
+ case APP_CMD_RESUME:
+ mActivityHandler->onResume();
+ break;
+ case APP_CMD_SAVE_STATE:
+ mActivityHandler->onSaveState(&mApplication->savedState,
+ &mApplication->savedStateSize);
+ break;
+ case APP_CMD_START:
+ mActivityHandler->onStart();
+ break;
+ case APP_CMD_STOP:
+ mActivityHandler->onStop();
+ break;
+ case APP_CMD_TERM_WINDOW:
+ mActivityHandler->onDestroyWindow();
+ deactivate();
+ break;
+ default:
+ break;
+ }
+}
+
+void EventLoop::activityCallback(android_app* pApplication, int32_t pCommand) {
+ EventLoop* pEventLoop = (EventLoop*)pApplication->userData;
+ pEventLoop->processActivityEvent(pCommand);
+}
+
+int32_t EventLoop::processInputEvent(AInputEvent* pEvent) {
+ int32_t lEventType = AInputEvent_getType(pEvent);
+ Log::Print("Got input event type %d", lEventType);
+ switch (lEventType) {
+ case AINPUT_EVENT_TYPE_MOTION:
+ if (AInputEvent_getSource(pEvent) == AINPUT_SOURCE_TOUCHSCREEN) {
+ return mInputHandler->onTouchEvent(pEvent);
+ }
+ break;
+ case AINPUT_EVENT_TYPE_KEY:
+ return mInputHandler->onKeyEvent(pEvent);
+ }
+ return 0;
+}
+
+int32_t EventLoop::inputCallback(android_app* pApplication,
+ AInputEvent* pEvent) {
+ EventLoop& lEventLoop = *(EventLoop*) pApplication->userData;
+ return lEventLoop.processInputEvent(pEvent);
+}
+

Powered by Google App Engine
This is Rietveld 408576698