1bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams/* 2bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams * Copyright (C) 2013 The Android Open Source Project 3bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams * 4bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams * you may not use this file except in compliance with the License. 6bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams * You may obtain a copy of the License at 7bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams * 8bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams * 10bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams * Unless required by applicable law or agreed to in writing, software 11bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams * See the License for the specific language governing permissions and 14bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams * limitations under the License. 15bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams */ 16bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 17bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samspackage com.android.rs.imagejb; 18bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 19721a5a24e2278f4012109865d62b98190b3185afJason Samsimport android.view.Menu; 20721a5a24e2278f4012109865d62b98190b3185afJason Samsimport android.view.MenuItem; 21721a5a24e2278f4012109865d62b98190b3185afJason Samsimport android.view.MenuInflater; 22721a5a24e2278f4012109865d62b98190b3185afJason Sams 23bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.app.Activity; 24bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.os.Bundle; 25bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.os.Handler; 26d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Samsimport android.graphics.Point; 27bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.view.SurfaceView; 28bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.widget.AdapterView; 29bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.widget.ArrayAdapter; 30bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.widget.ImageView; 31bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.widget.SeekBar; 32bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.widget.Spinner; 33bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.widget.ToggleButton; 34bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.widget.TextView; 35bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.widget.CompoundButton; 36bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.widget.ListView; 37bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.view.View; 38bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport java.util.ArrayList; 39bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport java.util.ListIterator; 40bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.util.Log; 41bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.content.Intent; 42bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 43bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport android.os.Environment; 44bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport java.io.BufferedWriter; 45bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport java.io.File; 46bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport java.io.FileWriter; 47bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samsimport java.io.IOException; 48bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 49bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Samspublic class IPControlsJB extends Activity { 50bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private final String TAG = "Img"; 51bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public final String RESULT_FILE = "image_processing_result.csv"; 52bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 53bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private Spinner mResSpinner; 54bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private ListView mTestListView; 55d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams private TextView mResultView; 56bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 57bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private ArrayAdapter<String> mTestListAdapter; 58bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private ArrayList<String> mTestList = new ArrayList<String>(); 59bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 60721a5a24e2278f4012109865d62b98190b3185afJason Sams private boolean mSettings[] = {true, true, true, false, false, false}; 61721a5a24e2278f4012109865d62b98190b3185afJason Sams private static final int SETTING_USE_IO = 0; 62721a5a24e2278f4012109865d62b98190b3185afJason Sams private static final int SETTING_ANIMATE = 1; 63721a5a24e2278f4012109865d62b98190b3185afJason Sams private static final int SETTING_DISPLAY = 2; 64721a5a24e2278f4012109865d62b98190b3185afJason Sams private static final int SETTING_USE_DVFS = 3; 65721a5a24e2278f4012109865d62b98190b3185afJason Sams private static final int SETTING_LONG_RUN = 4; 66721a5a24e2278f4012109865d62b98190b3185afJason Sams private static final int SETTING_PAUSE = 5; 67bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 68d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams private float mResults[]; 69bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 70bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public enum Resolutions { 71bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams RES_4K(3840, 2160, "4k (3840x2160)"), 72bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams RES_1080P(1920, 1080, "1080p (1920x1080)"), 73bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams RES_720P(1280, 720, "720p (1280x720)"), 74bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams RES_WVGA(800, 480, "WVGA (800x480)"); 75bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 76bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private final String name; 77bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public final int width; 78bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public final int height; 79bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 80bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private Resolutions(int w, int h, String s) { 81bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams width = w; 82bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams height = h; 83bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams name = s; 84bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 85bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 86bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams // return quoted string as displayed test name 87bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public String toString() { 88bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams return name; 89bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 90bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 917a3e3aa4948ff4b2c19a62f0b5003b902db0ce24Jason Sams private Resolutions mRes; 92bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 93721a5a24e2278f4012109865d62b98190b3185afJason Sams @Override 94721a5a24e2278f4012109865d62b98190b3185afJason Sams public boolean onCreateOptionsMenu(Menu menu) { 95721a5a24e2278f4012109865d62b98190b3185afJason Sams // Inflate the menu items for use in the action bar 96721a5a24e2278f4012109865d62b98190b3185afJason Sams MenuInflater inflater = getMenuInflater(); 97721a5a24e2278f4012109865d62b98190b3185afJason Sams inflater.inflate(R.menu.main_activity_actions, menu); 98721a5a24e2278f4012109865d62b98190b3185afJason Sams 99721a5a24e2278f4012109865d62b98190b3185afJason Sams MenuItem searchItem = menu.findItem(R.id.action_res); 100721a5a24e2278f4012109865d62b98190b3185afJason Sams mResSpinner = (Spinner) searchItem.getActionView(); 101721a5a24e2278f4012109865d62b98190b3185afJason Sams 102721a5a24e2278f4012109865d62b98190b3185afJason Sams mResSpinner.setOnItemSelectedListener(mResSpinnerListener); 103721a5a24e2278f4012109865d62b98190b3185afJason Sams mResSpinner.setAdapter(new ArrayAdapter<Resolutions>( 104721a5a24e2278f4012109865d62b98190b3185afJason Sams this, R.layout.spinner_layout, Resolutions.values())); 105721a5a24e2278f4012109865d62b98190b3185afJason Sams 106721a5a24e2278f4012109865d62b98190b3185afJason Sams // Choose one of the image sizes that close to the resolution 107721a5a24e2278f4012109865d62b98190b3185afJason Sams // of the screen. 108721a5a24e2278f4012109865d62b98190b3185afJason Sams Point size = new Point(); 109721a5a24e2278f4012109865d62b98190b3185afJason Sams getWindowManager().getDefaultDisplay().getSize(size); 110721a5a24e2278f4012109865d62b98190b3185afJason Sams int md = (size.x > size.y) ? size.x : size.y; 111721a5a24e2278f4012109865d62b98190b3185afJason Sams for (int ct=0; ct < Resolutions.values().length; ct++) { 112721a5a24e2278f4012109865d62b98190b3185afJason Sams if (Resolutions.values()[ct].width <= (int)(md * 1.2)) { 113721a5a24e2278f4012109865d62b98190b3185afJason Sams mResSpinner.setSelection(ct); 114721a5a24e2278f4012109865d62b98190b3185afJason Sams break; 115721a5a24e2278f4012109865d62b98190b3185afJason Sams } 116721a5a24e2278f4012109865d62b98190b3185afJason Sams } 117721a5a24e2278f4012109865d62b98190b3185afJason Sams 118721a5a24e2278f4012109865d62b98190b3185afJason Sams return super.onCreateOptionsMenu(menu); 119721a5a24e2278f4012109865d62b98190b3185afJason Sams } 120721a5a24e2278f4012109865d62b98190b3185afJason Sams 121bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 122bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private AdapterView.OnItemSelectedListener mResSpinnerListener = 123bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams new AdapterView.OnItemSelectedListener() { 124bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 1257a3e3aa4948ff4b2c19a62f0b5003b902db0ce24Jason Sams mRes = Resolutions.values()[pos]; 126bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 127bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 128bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void onNothingSelected(AdapterView parent) { 129bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 130bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams }; 131bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 132721a5a24e2278f4012109865d62b98190b3185afJason Sams void launchDemo(int id) { 133721a5a24e2278f4012109865d62b98190b3185afJason Sams IPTestListJB.TestName t[] = IPTestListJB.TestName.values(); 134bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 135721a5a24e2278f4012109865d62b98190b3185afJason Sams int testList[] = new int[1]; 136721a5a24e2278f4012109865d62b98190b3185afJason Sams testList[0] = id; 137721a5a24e2278f4012109865d62b98190b3185afJason Sams 138721a5a24e2278f4012109865d62b98190b3185afJason Sams Intent intent = makeBasicLaunchIntent(); 139721a5a24e2278f4012109865d62b98190b3185afJason Sams intent.putExtra("tests", testList); 140721a5a24e2278f4012109865d62b98190b3185afJason Sams intent.putExtra("demo", true); 141721a5a24e2278f4012109865d62b98190b3185afJason Sams startActivityForResult(intent, 0); 142721a5a24e2278f4012109865d62b98190b3185afJason Sams } 143721a5a24e2278f4012109865d62b98190b3185afJason Sams 144721a5a24e2278f4012109865d62b98190b3185afJason Sams void init() { 145bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 146bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams for (int i=0; i < IPTestListJB.TestName.values().length; i++) { 147bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTestList.add(IPTestListJB.TestName.values()[i].toString()); 148bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 149bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 1508467325c6d80de30bb86b7665cc41dff0c276e8dAlan Viverette mTestListView = findViewById(R.id.test_list); 151bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTestListAdapter = new ArrayAdapter(this, 152bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams android.R.layout.simple_list_item_activated_1, 153bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTestList); 154bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 155bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTestListView.setAdapter(mTestListAdapter); 156bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTestListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 157bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTestListAdapter.notifyDataSetChanged(); 158bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 1598467325c6d80de30bb86b7665cc41dff0c276e8dAlan Viverette mResultView = findViewById(R.id.results); 160bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 161721a5a24e2278f4012109865d62b98190b3185afJason Sams mTestListView.setOnItemLongClickListener(new ListView.OnItemLongClickListener() { 162721a5a24e2278f4012109865d62b98190b3185afJason Sams public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 163721a5a24e2278f4012109865d62b98190b3185afJason Sams int pos, long id) { 164721a5a24e2278f4012109865d62b98190b3185afJason Sams launchDemo(pos); 165721a5a24e2278f4012109865d62b98190b3185afJason Sams return true; 166721a5a24e2278f4012109865d62b98190b3185afJason Sams } 167721a5a24e2278f4012109865d62b98190b3185afJason Sams }); 168bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 169bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 170bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams @Override 171bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams protected void onCreate(Bundle savedInstanceState) { 172bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams super.onCreate(savedInstanceState); 173bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams setContentView(R.layout.controls); 174bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams init(); 175bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 176bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 177bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams @Override 178bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams protected void onPause() { 179bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams super.onPause(); 180bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 181bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams //cleanup(); 182bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 183bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 184bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 185bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams @Override 186bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams protected void onResume() { 187bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams super.onResume(); 188bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 189bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams // init(); 190bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 191bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 192bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams private void checkGroup(int group) { 193bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams IPTestListJB.TestName t[] = IPTestListJB.TestName.values(); 194bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams for (int i=0; i < t.length; i++) { 195bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTestListView.setItemChecked(i, group == t[i].group); 196bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 197bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 198bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 199721a5a24e2278f4012109865d62b98190b3185afJason Sams Intent makeBasicLaunchIntent() { 200721a5a24e2278f4012109865d62b98190b3185afJason Sams Intent intent = new Intent(this, ImageProcessingActivityJB.class); 201721a5a24e2278f4012109865d62b98190b3185afJason Sams intent.putExtra("enable io", mSettings[SETTING_USE_IO]); 202721a5a24e2278f4012109865d62b98190b3185afJason Sams intent.putExtra("enable dvfs", mSettings[SETTING_USE_DVFS]); 203721a5a24e2278f4012109865d62b98190b3185afJason Sams intent.putExtra("enable long", mSettings[SETTING_LONG_RUN]); 204721a5a24e2278f4012109865d62b98190b3185afJason Sams intent.putExtra("enable pause", mSettings[SETTING_PAUSE]); 205721a5a24e2278f4012109865d62b98190b3185afJason Sams intent.putExtra("enable animate", mSettings[SETTING_ANIMATE]); 206721a5a24e2278f4012109865d62b98190b3185afJason Sams intent.putExtra("enable display", mSettings[SETTING_DISPLAY]); 207721a5a24e2278f4012109865d62b98190b3185afJason Sams intent.putExtra("resolution X", mRes.width); 208721a5a24e2278f4012109865d62b98190b3185afJason Sams intent.putExtra("resolution Y", mRes.height); 209721a5a24e2278f4012109865d62b98190b3185afJason Sams return intent; 210721a5a24e2278f4012109865d62b98190b3185afJason Sams } 211721a5a24e2278f4012109865d62b98190b3185afJason Sams 212bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void btnRun(View v) { 213bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams IPTestListJB.TestName t[] = IPTestListJB.TestName.values(); 214bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 215bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams int count = 0; 216bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams for (int i = 0; i < t.length; i++) { 217bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams if (mTestListView.isItemChecked(i)) { 218bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams count++; 219bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 220bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 221bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams if (count == 0) { 222bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams return; 223bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 224bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 225bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams int testList[] = new int[count]; 226bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams count = 0; 227bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams for (int i = 0; i < t.length; i++) { 228bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams if (mTestListView.isItemChecked(i)) { 229bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams testList[count++] = i; 230bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 231bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 232bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 233721a5a24e2278f4012109865d62b98190b3185afJason Sams Intent intent = makeBasicLaunchIntent(); 234bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams intent.putExtra("tests", testList); 235bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams startActivityForResult(intent, 0); 236bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 237bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 238d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams float rebase(float v, IPTestListJB.TestName t) { 239d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams if (v > 0.001) { 240d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams v = t.baseline / v; 241d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams } 242d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams float pr = (1920.f / mRes.width) * (1080.f / mRes.height); 243d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams return v / pr; 244d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams } 245d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams 246d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams private void writeResults() { 247d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams // write result into a file 248d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams File externalStorage = Environment.getExternalStorageDirectory(); 249d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams if (!externalStorage.canWrite()) { 250d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams Log.v(TAG, "sdcard is not writable"); 251d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams return; 252d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams } 253d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams File resultFile = new File(externalStorage, RESULT_FILE); 254d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams resultFile.setWritable(true, false); 255d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams try { 256d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams BufferedWriter rsWriter = new BufferedWriter(new FileWriter(resultFile)); 257d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams Log.v(TAG, "Saved results in: " + resultFile.getAbsolutePath()); 258d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams java.text.DecimalFormat df = new java.text.DecimalFormat("######.##"); 259d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams 260d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams for (int ct=0; ct < IPTestListJB.TestName.values().length; ct++) { 261d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams IPTestListJB.TestName t = IPTestListJB.TestName.values()[ct]; 262d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams final float r = mResults[ct]; 263d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams float r2 = rebase(r, t); 264d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams String s = new String("" + t.toString() + ", " + df.format(r) + ", " + df.format(r2)); 265d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams rsWriter.write(s + "\n"); 266d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams } 267d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams rsWriter.close(); 268d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams } catch (IOException e) { 269d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams Log.v(TAG, "Unable to write result file " + e.getMessage()); 270d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams } 271d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams } 272d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams 273bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams protected void onActivityResult(int requestCode, int resultCode, Intent data) { 274bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams if (requestCode == 0) { 275bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams if (resultCode == RESULT_OK) { 276d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams java.text.DecimalFormat df = new java.text.DecimalFormat("######.#"); 277d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams mResults = new float[IPTestListJB.TestName.values().length]; 278d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams 279bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams float r[] = data.getFloatArrayExtra("results"); 280bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams int id[] = data.getIntArrayExtra("tests"); 281bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 282bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams for (int ct=0; ct < id.length; ct++) { 283bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams IPTestListJB.TestName t = IPTestListJB.TestName.values()[id[ct]]; 284bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 285d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams String s = t.toString() + " " + df.format(rebase(r[ct], t)) + 286d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams "X, " + df.format(r[ct]) + "ms"; 287bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTestList.set(id[ct], s); 288bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTestListAdapter.notifyDataSetChanged(); 289d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams mResults[id[ct]] = r[ct]; 290bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 291bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 292d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams double gm[] = {1.0, 1.0, 1.0}; 293d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams double count[] = {0, 0, 0}; 294d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams for (int ct=0; ct < IPTestListJB.TestName.values().length; ct++) { 295d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams IPTestListJB.TestName t = IPTestListJB.TestName.values()[ct]; 296d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams gm[t.group] *= rebase(mResults[ct], t); 297d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams count[t.group] += 1.0; 298d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams } 299d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams gm[0] = java.lang.Math.pow(gm[0], 1.0 / count[0]); 300d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams gm[1] = java.lang.Math.pow(gm[1], 1.0 / count[1]); 301d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams gm[2] = java.lang.Math.pow(gm[2], 1.0 / count[2]); 302d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams 303d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams String s = "Results: fp full=" + df.format(gm[0]) + 304d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams ", fp relaxed=" +df.format(gm[1]) + 305d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams ", intrinsics=" + df.format(gm[2]); 306d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams mResultView.setText(s); 307d3caba7c611de6f90bf7914ab00d425ff0ff0067Jason Sams writeResults(); 308bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 309bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 310bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 311bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 312bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void btnSelAll(View v) { 313bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams IPTestListJB.TestName t[] = IPTestListJB.TestName.values(); 314bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams for (int i=0; i < t.length; i++) { 315bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams mTestListView.setItemChecked(i, true); 316bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 317bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 318bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 319721a5a24e2278f4012109865d62b98190b3185afJason Sams public boolean onOptionsItemSelected(MenuItem item) { 320721a5a24e2278f4012109865d62b98190b3185afJason Sams // Handle presses on the action bar items 321721a5a24e2278f4012109865d62b98190b3185afJason Sams switch(item.getItemId()) { 322721a5a24e2278f4012109865d62b98190b3185afJason Sams case R.id.action_settings: 323721a5a24e2278f4012109865d62b98190b3185afJason Sams IPSettings newFragment = new IPSettings(mSettings); 324721a5a24e2278f4012109865d62b98190b3185afJason Sams newFragment.show(getFragmentManager(), "settings"); 325721a5a24e2278f4012109865d62b98190b3185afJason Sams return true; 326721a5a24e2278f4012109865d62b98190b3185afJason Sams default: 327721a5a24e2278f4012109865d62b98190b3185afJason Sams return super.onOptionsItemSelected(item); 328721a5a24e2278f4012109865d62b98190b3185afJason Sams } 329721a5a24e2278f4012109865d62b98190b3185afJason Sams } 330721a5a24e2278f4012109865d62b98190b3185afJason Sams 331bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void btnSelNone(View v) { 332bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams checkGroup(-1); 333bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 334bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 335bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void btnSelHp(View v) { 336bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams checkGroup(0); 337bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 338bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 339bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void btnSelLp(View v) { 340bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams checkGroup(1); 341bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 342bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 343721a5a24e2278f4012109865d62b98190b3185afJason Sams public void btnSettings(View v) { 344721a5a24e2278f4012109865d62b98190b3185afJason Sams IPSettings newFragment = new IPSettings(mSettings); 345721a5a24e2278f4012109865d62b98190b3185afJason Sams newFragment.show(getFragmentManager(), "settings"); 346721a5a24e2278f4012109865d62b98190b3185afJason Sams } 347721a5a24e2278f4012109865d62b98190b3185afJason Sams 348bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams public void btnSelIntrinsic(View v) { 349bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams checkGroup(2); 350bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams } 351bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 352bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 353bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams 354bde1a28e6652f25e4f74f018cb7d1dcba65a51e4Jason Sams} 355