package de.thedevstack.android.logcat.tasks; import android.os.AsyncTask; import de.thedevstack.conversationsplus.utils.Logging; import android.widget.ArrayAdapter; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import de.thedevstack.conversationsplus.utils.StreamUtil; /** * Created by tzur on 20.11.2015. */ public class ReadLogCatAsyncTask extends AsyncTask { private final ArrayAdapter arrayAdapter; private static final String[] LOG_CAT_CMD = { "logcat", "-d", "-v", "time"}; private static final String[] WHITE_LIST = { "thedevstack.", "E/", "W/" }; private static final String[] BLACK_LIST = { "D/TextLayoutCache" }; public ReadLogCatAsyncTask(ArrayAdapter arrayAdapter) { this.arrayAdapter = arrayAdapter; } @Override protected String[] doInBackground(Void... params) { ArrayList logCatOutput = new ArrayList<>(); BufferedReader bufferedReader = null; try { Process process = Runtime.getRuntime().exec(ReadLogCatAsyncTask.LOG_CAT_CMD); bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line = ""; while ((line = bufferedReader.readLine()) != null) { logCatOutput.add(line); } bufferedReader.close(); } catch (IOException e) { Logging.e("ReadLogCat", "error while retrieving information from logcat: " + e.getMessage(), e); } finally { StreamUtil.close(bufferedReader); } logCatOutput.trimToSize(); return logCatOutput.toArray(new String[0]); } @Override protected void onPostExecute(String[] items) { this.arrayAdapter.clear(); if (null != items && items.length > 0) { for (String item : items) { if (!filter(item)) { this.arrayAdapter.add(item); } } } } protected boolean filter(String item) { for (String whiteListed : ReadLogCatAsyncTask.WHITE_LIST) { if (item.contains(whiteListed)) { return false; } } return true; } }