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_archive		(activity.getNativeActivity()->assetManager)
45	, m_log			(m_cmdLine.getLogFileName())
46	, m_app			(m_platform, m_archive, m_log, m_cmdLine)
47	, m_finished	(false)
48{
49}
50
51TestThread::~TestThread (void)
52{
53	// \note m_testApp is managed by thread.
54}
55
56void TestThread::run (void)
57{
58	RenderThread::run();
59}
60
61void TestThread::onWindowCreated (ANativeWindow* window)
62{
63	m_platform.getWindowRegistry().addWindow(window);
64}
65
66void TestThread::onWindowDestroyed (ANativeWindow* window)
67{
68	m_platform.getWindowRegistry().destroyWindow(window);
69}
70
71void TestThread::onWindowResized (ANativeWindow* window)
72{
73	DE_UNREF(window);
74	print("Warning: Native window was resized, results may be undefined");
75}
76
77bool TestThread::render (void)
78{
79	if (!m_finished)
80		m_finished = !m_app.iterate();
81	return !m_finished;
82}
83
84// TestActivity
85
86TestActivity::TestActivity (ANativeActivity* activity)
87	: RenderActivity	(activity)
88	, m_cmdLine			(getIntentStringExtra(activity, "cmdLine"))
89	, m_testThread		(*this, m_cmdLine)
90	, m_started			(false)
91{
92	// Set initial orientation.
93	setRequestedOrientation(getNativeActivity(), mapScreenRotation(m_cmdLine.getScreenRotation()));
94
95	// Set up window flags.
96	ANativeActivity_setWindowFlags(activity, AWINDOW_FLAG_KEEP_SCREEN_ON	|
97											 AWINDOW_FLAG_TURN_SCREEN_ON	|
98											 AWINDOW_FLAG_FULLSCREEN		|
99											 AWINDOW_FLAG_SHOW_WHEN_LOCKED, 0);
100}
101
102TestActivity::~TestActivity (void)
103{
104}
105
106void TestActivity::onStart (void)
107{
108	if (!m_started)
109	{
110		setThread(&m_testThread);
111		m_testThread.start();
112		m_started = true;
113	}
114
115	RenderActivity::onStart();
116}
117
118void TestActivity::onDestroy (void)
119{
120	if (m_started)
121	{
122		setThread(DE_NULL);
123		m_testThread.stop();
124		m_started = false;
125	}
126
127	RenderActivity::onDestroy();
128
129	// Kill this process.
130	print("Done, killing process");
131	exit(0);
132}
133
134void TestActivity::onConfigurationChanged (void)
135{
136	RenderActivity::onConfigurationChanged();
137
138	// Update rotation.
139	setRequestedOrientation(getNativeActivity(), mapScreenRotation(m_cmdLine.getScreenRotation()));
140}
141
142} // Android
143} // tcu
144