1/*-------------------------------------------------------------------------
2 * drawElements Quality Program Tester Core
3 * ----------------------------------------
4 *
5 * Copyright 2014 The Android Open Source Project
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 *      http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 *//*!
20 * \file
21 * \brief Android test activity.
22 *//*--------------------------------------------------------------------*/
23
24#include "tcuAndroidTestActivity.hpp"
25#include "tcuAndroidUtil.hpp"
26
27#include <android/window.h>
28
29#include <string>
30#include <stdlib.h>
31
32using std::string;
33
34namespace tcu
35{
36namespace Android
37{
38
39// TestThread
40
41TestThread::TestThread (NativeActivity& activity, const CommandLine& cmdLine)
42	: RenderThread	(activity)
43	, m_cmdLine		(cmdLine)
44	, m_platform	(activity)
45	, m_archive		(activity.getNativeActivity()->assetManager)
46	, m_log			(m_cmdLine.getLogFileName(), m_cmdLine.getLogFlags())
47	, m_app			(m_platform, m_archive, m_log, m_cmdLine)
48	, m_finished	(false)
49{
50}
51
52TestThread::~TestThread (void)
53{
54	// \note m_testApp is managed by thread.
55}
56
57void TestThread::run (void)
58{
59	RenderThread::run();
60}
61
62void TestThread::onWindowCreated (ANativeWindow* window)
63{
64	m_platform.getWindowRegistry().addWindow(window);
65}
66
67void TestThread::onWindowDestroyed (ANativeWindow* window)
68{
69	m_platform.getWindowRegistry().destroyWindow(window);
70}
71
72void TestThread::onWindowResized (ANativeWindow* window)
73{
74	DE_UNREF(window);
75	print("Warning: Native window was resized, results may be undefined");
76}
77
78bool TestThread::render (void)
79{
80	if (!m_finished)
81		m_finished = !m_app.iterate();
82	return !m_finished;
83}
84
85// TestActivity
86
87TestActivity::TestActivity (ANativeActivity* activity)
88	: RenderActivity	(activity)
89	, m_cmdLine			(getIntentStringExtra(activity, "cmdLine"))
90	, m_testThread		(*this, m_cmdLine)
91	, m_started			(false)
92{
93	// Set initial orientation.
94	setRequestedOrientation(getNativeActivity(), mapScreenRotation(m_cmdLine.getScreenRotation()));
95
96	// Set up window flags.
97	ANativeActivity_setWindowFlags(activity, AWINDOW_FLAG_KEEP_SCREEN_ON	|
98											 AWINDOW_FLAG_TURN_SCREEN_ON	|
99											 AWINDOW_FLAG_FULLSCREEN		|
100											 AWINDOW_FLAG_SHOW_WHEN_LOCKED, 0);
101}
102
103TestActivity::~TestActivity (void)
104{
105}
106
107void TestActivity::onStart (void)
108{
109	if (!m_started)
110	{
111		setThread(&m_testThread);
112		m_testThread.start();
113		m_started = true;
114	}
115
116	RenderActivity::onStart();
117}
118
119void TestActivity::onDestroy (void)
120{
121	if (m_started)
122	{
123		setThread(DE_NULL);
124		m_testThread.stop();
125		m_started = false;
126	}
127
128	RenderActivity::onDestroy();
129
130	// Kill this process.
131	print("Done, killing process");
132	exit(0);
133}
134
135void TestActivity::onConfigurationChanged (void)
136{
137	RenderActivity::onConfigurationChanged();
138
139	// Update rotation.
140	setRequestedOrientation(getNativeActivity(), mapScreenRotation(m_cmdLine.getScreenRotation()));
141}
142
143} // Android
144} // tcu
145