NNControls.java revision 082ac6c7e0735b40e2e27f668b294b5f90b2e29b
1082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang/* 2082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang * Copyright (C) 2017 The Android Open Source Project 3082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang * 4082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang * you may not use this file except in compliance with the License. 6082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang * You may obtain a copy of the License at 7082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang * 8082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang * http://www.apache.org/licenses/LICENSE-2.0 9082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang * 10082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang * Unless required by applicable law or agreed to in writing, software 11082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang * distributed under the License is distributed on an "AS IS" BASIS, 12082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang * See the License for the specific language governing permissions and 14082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang * limitations under the License. 15082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang */ 16082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 17082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wangpackage com.example.android.nn.benchmark; 18082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 19082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wangimport android.app.Activity; 20082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wangimport android.content.Intent; 21082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wangimport android.os.Bundle; 22082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wangimport android.os.Environment; 23082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wangimport android.text.method.ScrollingMovementMethod; 24082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wangimport android.util.Log; 25082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wangimport android.view.Menu; 26082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wangimport android.view.MenuInflater; 27082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wangimport android.view.MenuItem; 28082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wangimport android.view.View; 29082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wangimport android.widget.ArrayAdapter; 30082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wangimport android.widget.ListView; 31082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wangimport android.widget.TextView; 32082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 33082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wangimport java.io.BufferedWriter; 34082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wangimport java.io.File; 35082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wangimport java.io.FileWriter; 36082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wangimport java.io.IOException; 37082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wangimport java.util.ArrayList; 38082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 39082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wangpublic class NNControls extends Activity { 40082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang public final String RESULT_FILE = "nn_benchmark_result.csv"; 41082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 42082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang private ListView mTestListView; 43082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang private TextView mResultView; 44082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 45082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang private ArrayAdapter<String> mTestListAdapter; 46082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang private ArrayList<String> mTestList = new ArrayList<String>(); 47082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 48082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang private boolean mSettings[] = {false, false}; 49082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang private static final int SETTING_LONG_RUN = 0; 50082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang private static final int SETTING_PAUSE = 1; 51082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 52082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang private float mResults[]; 53082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang private String mInfo[]; 54082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 55082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang @Override 56082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang public boolean onCreateOptionsMenu(Menu menu) { 57082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang // Inflate the menu items for use in the action bar 58082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang MenuInflater inflater = getMenuInflater(); 59082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang inflater.inflate(R.menu.main_activity_actions, menu); 60082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 61082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang return super.onCreateOptionsMenu(menu); 62082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 63082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 64082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang void init() { 65082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang for (int i=0; i < NNTestList.TestName.values().length; i++) { 66082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang mTestList.add(NNTestList.TestName.values()[i].toString()); 67082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 68082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 69082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang mTestListView = findViewById(R.id.test_list); 70082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang mTestListAdapter = new ArrayAdapter(this, 71082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang android.R.layout.simple_list_item_activated_1, 72082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang mTestList); 73082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 74082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang mTestListView.setAdapter(mTestListAdapter); 75082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang mTestListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 76082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang mTestListAdapter.notifyDataSetChanged(); 77082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 78082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang mResultView = findViewById(R.id.results); 79082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang mResultView.setMovementMethod(new ScrollingMovementMethod()); 80082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 81082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 82082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang @Override 83082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang protected void onCreate(Bundle savedInstanceState) { 84082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang super.onCreate(savedInstanceState); 85082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang setContentView(R.layout.controls); 86082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang init(); 87082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 88082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 89082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang @Override 90082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang protected void onPause() { 91082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang super.onPause(); 92082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 93082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 94082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang @Override 95082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang protected void onResume() { 96082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang super.onResume(); 97082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 98082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 99082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang Intent makeBasicLaunchIntent() { 100082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang Intent intent = new Intent(this, NNBenchmark.class); 101082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang intent.putExtra("enable long", mSettings[SETTING_LONG_RUN]); 102082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang intent.putExtra("enable pause", mSettings[SETTING_PAUSE]); 103082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang return intent; 104082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 105082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 106082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang public void btnRun(View v) { 107082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang NNTestList.TestName t[] = NNTestList.TestName.values(); 108082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang int count = 0; 109082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang for (int i = 0; i < t.length; i++) { 110082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang if (mTestListView.isItemChecked(i)) { 111082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang count++; 112082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 113082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 114082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang if (count == 0) { 115082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang return; 116082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 117082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 118082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang int testList[] = new int[count]; 119082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang count = 0; 120082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang for (int i = 0; i < t.length; i++) { 121082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang if (mTestListView.isItemChecked(i)) { 122082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang testList[count++] = i; 123082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 124082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 125082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 126082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang Intent intent = makeBasicLaunchIntent(); 127082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang intent.putExtra("tests", testList); 128082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang startActivityForResult(intent, 0); 129082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 130082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 131082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang float rebase(float v, NNTestList.TestName t) { 132082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang if (v > 0.001) { 133082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang v = t.baseline / v; 134082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 135082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang return v; 136082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 137082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 138082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 139082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang private void writeResults() { 140082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang // write result into a file 141082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang File externalStorage = Environment.getExternalStorageDirectory(); 142082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang if (!externalStorage.canWrite()) { 143082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang Log.v(NNBenchmark.TAG, "sdcard is not writable"); 144082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang return; 145082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 146082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang File resultFile = new File(externalStorage, RESULT_FILE); 147082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang resultFile.setWritable(true, false); 148082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang try { 149082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang BufferedWriter rsWriter = new BufferedWriter(new FileWriter(resultFile)); 150082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang Log.v(NNBenchmark.TAG, "Saved results in: " + resultFile.getAbsolutePath()); 151082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang java.text.DecimalFormat df = new java.text.DecimalFormat("######.##"); 152082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 153082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang for (int ct=0; ct < NNTestList.TestName.values().length; ct++) { 154082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang NNTestList.TestName t = NNTestList.TestName.values()[ct]; 155082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang final float r = mResults[ct]; 156082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang float r2 = rebase(r, t); 157082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang String s = new String("" + t.toString() + ", " + df.format(r) + ", " + 158082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang df.format(r2)); 159082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang rsWriter.write(s + "\n"); 160082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 161082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang rsWriter.close(); 162082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } catch (IOException e) { 163082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang Log.v(NNBenchmark.TAG, "Unable to write result file " + e.getMessage()); 164082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 165082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 166082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 167082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang protected void onActivityResult(int requestCode, int resultCode, Intent data) { 168082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang if (requestCode == 0) { 169082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang if (resultCode == RESULT_OK) { 170082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang java.text.DecimalFormat df = new java.text.DecimalFormat("######.##"); 171082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang mResults = new float[NNTestList.TestName.values().length]; 172082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang mInfo = new String[NNTestList.TestName.values().length]; 173082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 174082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang float r[] = data.getFloatArrayExtra("results"); 175082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang String inf[] = data.getStringArrayExtra("testinfo"); 176082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang int id[] = data.getIntArrayExtra("tests"); 177082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 178082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang String mOutResult = ""; 179082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang for (int ct=0; ct < id.length; ct++) { 180082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang NNTestList.TestName t = NNTestList.TestName.values()[id[ct]]; 181082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang String s = t.toString() + " " + df.format(rebase(r[ct], t)) + 182082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang "X, " + df.format(r[ct]) + "ms"; 183082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang mTestList.set(id[ct], s); 184082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang mTestListAdapter.notifyDataSetChanged(); 185082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang mOutResult += s + '\n'; 186082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang mResults[id[ct]] = r[ct]; 187082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 188082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 189082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang mResultView.setText(mOutResult); 190082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang writeResults(); 191082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 192082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 193082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 194082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 195082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang public void btnSelAll(View v) { 196082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang NNTestList.TestName t[] = NNTestList.TestName.values(); 197082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang for (int i=0; i < t.length; i++) { 198082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang mTestListView.setItemChecked(i, true); 199082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 200082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 201082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 202082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang public boolean onOptionsItemSelected(MenuItem item) { 203082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang // Handle presses on the action bar items 204082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang switch(item.getItemId()) { 205082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang case R.id.action_settings: 206082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang NNSettings newFragment = new NNSettings(mSettings); 207082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang newFragment.show(getFragmentManager(), "settings"); 208082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang return true; 209082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang default: 210082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang return super.onOptionsItemSelected(item); 211082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 212082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 213082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 214082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang public void btnSelNone(View v) { 215082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang NNTestList.TestName t[] = NNTestList.TestName.values(); 216082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang for (int i=0; i < t.length; i++) { 217082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang mTestListView.setItemChecked(i, false); 218082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 219082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 220082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang 221082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang public void btnSettings(View v) { 222082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang NNSettings newFragment = new NNSettings(mSettings); 223082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang newFragment.show(getFragmentManager(), "settings"); 224082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang } 225082ac6c7e0735b40e2e27f668b294b5f90b2e29bMiao Wang} 226