1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Use of this source code is governed by a BSD-style license
5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  that can be found in the LICENSE file in the root of the source
6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  tree. An additional intellectual property rights grant can be found
7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  in the file PATENTS.  All contributing project authors may
8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpackage org.webrtc.vieautotest;
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgimport org.webrtc.vieautotest.R;
14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgimport android.app.Activity;
16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgimport android.os.Bundle;
17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgimport android.util.Log;
18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgimport android.widget.Button;
19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgimport android.view.SurfaceView;
20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgimport android.view.View;
21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgimport android.view.SurfaceHolder;
22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgimport android.widget.LinearLayout;
23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgimport android.opengl.GLSurfaceView;
24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgimport android.widget.Spinner;
25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgimport android.widget.ArrayAdapter;
26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgimport android.widget.AdapterView;
27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic class ViEAutotest extends Activity
29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    implements
30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org      AdapterView.OnItemSelectedListener,
31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org      View.OnClickListener {
32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  private Thread testThread;
34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  private Spinner testSpinner;
35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  private Spinner subtestSpinner;
36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  private int testSelection;
37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  private int subTestSelection;
38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // View for remote video
40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  private LinearLayout remoteSurface = null;
41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  private GLSurfaceView glSurfaceView = null;
42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  private SurfaceView surfaceView = null;
43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  private LinearLayout localSurface = null;
45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  private GLSurfaceView glLocalSurfaceView = null;
46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  private SurfaceView localSurfaceView = null;
47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /** Called when the activity is first created. */
49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  @Override
50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  public void onCreate(Bundle savedInstanceState) {
51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    Log.d("*WEBRTC*", "onCreate called");
53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    super.onCreate(savedInstanceState);
55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    setContentView(R.layout.main);
56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // Set the Start button action
58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    final Button buttonStart = (Button) findViewById(R.id.Button01);
59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    buttonStart.setOnClickListener(this);
60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // Set test spinner
62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    testSpinner = (Spinner) findViewById(R.id.testSpinner);
63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ArrayAdapter<CharSequence> adapter =
64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        ArrayAdapter.createFromResource(this, R.array.test_array,
65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                        android.R.layout.simple_spinner_item);
66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    int resource = android.R.layout.simple_spinner_dropdown_item;
68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    adapter.setDropDownViewResource(resource);
69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    testSpinner.setAdapter(adapter);
70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    testSpinner.setOnItemSelectedListener(this);
71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // Set sub test spinner
73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    subtestSpinner = (Spinner) findViewById(R.id.subtestSpinner);
74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ArrayAdapter<CharSequence> subtestAdapter =
75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        ArrayAdapter.createFromResource(this, R.array.subtest_array,
76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                        android.R.layout.simple_spinner_item);
77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    subtestAdapter.setDropDownViewResource(resource);
79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    subtestSpinner.setAdapter(subtestAdapter);
80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    subtestSpinner.setOnItemSelectedListener(this);
81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    remoteSurface = (LinearLayout) findViewById(R.id.RemoteView);
83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    surfaceView = new SurfaceView(this);
84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    remoteSurface.addView(surfaceView);
85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    localSurface = (LinearLayout) findViewById(R.id.LocalView);
87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    localSurfaceView = new SurfaceView(this);
88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    localSurfaceView.setZOrderMediaOverlay(true);
89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    localSurface.addView(localSurfaceView);
90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // Set members
92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    testSelection = 0;
93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    subTestSelection = 0;
94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  }
95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  public void onClick(View v) {
97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    Log.d("*WEBRTC*", "Button clicked...");
98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    switch (v.getId()) {
99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org      case R.id.Button01:
100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        new Thread(new Runnable() {
101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            public void run() {
102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org              Log.d("*WEBRTC*", "Calling RunTest...");
103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org              RunTest(testSelection, subTestSelection,
104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                      localSurfaceView, surfaceView);
105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org              Log.d("*WEBRTC*", "RunTest done");
106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            }
107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org          }).start();
108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  }
110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  public void onItemSelected(AdapterView<?> parent, View v,
112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                             int position, long id) {
113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (parent == (Spinner) findViewById(R.id.testSpinner)) {
115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org      testSelection = position;
116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    } else {
117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org      subTestSelection = position;
118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  }
120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  public void onNothingSelected(AdapterView<?> parent) {
122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  }
123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  @Override
125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  protected void onStart() {
126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    super.onStart();
127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  }
128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  @Override
130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  protected void onResume() {
131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    super.onResume();
132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  }
133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  @Override
135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  protected void onPause() {
136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    super.onPause();
137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  }
138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  @Override
140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  protected void onStop() {
141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    super.onStop();
142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  }
143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  @Override
145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  protected void onDestroy() {
146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    super.onDestroy();
148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  }
149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // C++ function performing the chosen test
151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // private native int RunTest(int testSelection, int subtestSelection,
152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // GLSurfaceView window1, GLSurfaceView window2);
153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  private native int RunTest(int testSelection, int subtestSelection,
154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                             SurfaceView window1, SurfaceView window2);
155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // this is used to load the 'ViEAutotestJNIAPI' library on application
157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // startup.
158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  static {
159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    Log.d("*WEBRTC*", "Loading ViEAutotest...");
160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    System.loadLibrary("webrtc-video-autotest-jni");
161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  }
162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
163