/*
* Tencent is pleased to support the open source community by making
* Tencent GT (Version 2.4 and subsequent versions) available.
*
* Notwithstanding anything to the contrary herein, any previous version
* of Tencent GT shall not be subject to the license hereunder.
* All right, title, and interest, including all intellectual property rights,
* in and to the previous version of Tencent GT (including any and all copies thereof)
* shall be owned and retained by Tencent and subject to the license under the
* Tencent GT End User License Agreement (http://gt.qq.com/wp-content/EULA_EN.html).
*
* Copyright (C) 2015 THL A29 Limited, a Tencent company. All rights reserved.
*
* Licensed under the MIT License (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of the License at
*
* http://opensource.org/licenses/MIT
*
* Unless required by applicable law or agreed to in writing, software distributed
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package com.tencent.wstt.gt.plugin.smtools;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import com.tencent.wstt.gt.R;
import com.tencent.wstt.gt.activity.GTBaseActivity;
import com.tencent.wstt.gt.api.utils.ProcessUtils;
import com.tencent.wstt.gt.api.utils.ProcessUtils.ProcessInfo;
import com.tencent.wstt.gt.utils.ToastUtil;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
public class SMActivity extends GTBaseActivity implements SMPluginListener {
private ListView listview = null;
private ArrayList<String> data = new ArrayList<String>();
private static String selectedItem = null;
private TextView tv_switch;
private Integer pid = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pi_othersm);
Button buttonCheckStatus = (Button) findViewById(R.id.buttonCheckStatus);
buttonCheckStatus.setOnClickListener(button_check_status);
Button buttonWriteProperty = (Button) findViewById(R.id.buttonWriteProperty);
buttonWriteProperty.setOnClickListener(button_write_property);
Button buttonRecoverProperty = (Button) findViewById(R.id.buttonRecoverProperty);
buttonRecoverProperty.setOnClickListener(button_recover_property);
Button buttonRestart = (Button) findViewById(R.id.buttonRestart);
buttonRestart.setOnClickListener(button_restart);
tv_switch = (TextView) findViewById(R.id.sample_switch);
if (SMServiceHelper.getInstance().isStarted()) {
tv_switch.setBackgroundResource(R.drawable.switch_off_border);
tv_switch.setText(getString(R.string.stop));
} else {
tv_switch.setBackgroundResource(R.drawable.switch_on_border);
tv_switch.setText(getString(R.string.start));
}
tv_switch.setOnClickListener(onStartClick);
TextView tv_back = (TextView) findViewById(R.id.back_gt);
tv_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
listview = (ListView) findViewById(R.id.listViewOtherSM);
listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
ArrayList<String> datas = getData();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice,
datas);
listview.setAdapter(adapter);
if (datas != null && selectedItem != null) {
int position = datas.indexOf(selectedItem);
if (position >= 0) {
listview.setItemChecked(position, true);
}
}
listview.setOnItemClickListener(listview_listener);
SMServiceHelper.getInstance().addListener(this);
}
@Override
public void onDestroy() {
super.onDestroy();
SMServiceHelper.getInstance().removeListener(this);
}
private ArrayList<String> getData() {
List<ProcessInfo> rp = ProcessUtils.getAllRunningAppProcessInfo();
for (ProcessInfo i : rp) {
data.add(i.name);
}
return data;
}
View.OnClickListener button_check_status = new View.OnClickListener() {
@Override
public void onClick(View v) {
String cmd = "getprop debug.choreographer.skipwarning";
ProcessBuilder execBuilder = new ProcessBuilder("sh", "-c", cmd);
execBuilder.redirectErrorStream(true);
try {
TextView textview = (TextView) findViewById(R.id.textviewInformation);
Process p = execBuilder.start();
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
Boolean flag = false;
String line;
while ((line = br.readLine()) != null) {
if (line.compareTo("1") == 0) {
flag = true;
break;
}
}
if (flag) {
textview.setText("OK");
} else {
textview.setText("NOT OK");
}
} catch (IOException e) {
e.printStackTrace();
}
}
};
View.OnClickListener button_write_property = new View.OnClickListener() {
@Override
public void onClick(View v) {
String cmd = "setprop debug.choreographer.skipwarning 1";
ProcessBuilder execBuilder = new ProcessBuilder("su", "-c", cmd);
execBuilder.redirectErrorStream(true);
try {
execBuilder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
};
View.OnClickListener button_recover_property = new View.OnClickListener() {
@Override
public void onClick(View v) {
String cmd = "setprop debug.choreographer.skipwarning 30";
ProcessBuilder execBuilder = new ProcessBuilder("su", "-c", cmd);
execBuilder.redirectErrorStream(true);
try {
execBuilder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
};
View.OnClickListener button_restart = new View.OnClickListener() {
@Override
public void onClick(View v) {
String cmd = "setprop ctl.restart surfaceflinger; setprop ctl.restart zygote";
ProcessBuilder execBuilder = new ProcessBuilder("su", "-c", cmd);
execBuilder.redirectErrorStream(true);
try {
execBuilder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
};
AdapterView.OnItemClickListener listview_listener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View v, int position, long id) {
selectedItem = (String) adapter.getItemAtPosition(position);
pid = ProcessUtils.getProcessPID(selectedItem);
}
};
View.OnClickListener onStartClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (SMServiceHelper.getInstance().isStarted()) {
SMServiceHelper.getInstance().stopBackgroundServiceIfRunning(SMActivity.this);
} else {
if (null == selectedItem) {
ToastUtil.ShowLongToast(SMActivity.this, "select a app first!");
}
else
{
SMServiceHelper.getInstance().startBackgroundService(SMActivity.this, pid, selectedItem);
}
}
}
};
@Override
public void onSMStart() {
runOnUiThread(new Runnable(){
@Override
public void run() {
tv_switch.setBackgroundResource(R.drawable.switch_off_border);
tv_switch.setText(getString(R.string.stop));
}
});
}
@Override
public void onSMStop() {
runOnUiThread(new Runnable(){
@Override
public void run() {
tv_switch.setBackgroundResource(R.drawable.switch_on_border);
tv_switch.setText(getString(R.string.start));
}
});
}
}