package com.germainz.activityforcenewtask; import android.app.AlertDialog; import android.app.ListActivity; import android.content.Context; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.ArrayList; public class LogActivity extends ListActivity { private SettingsHelper settingsHelper; private ArrayAdapter adapter; private Context context; final private ArrayList<String> logItems = new ArrayList<String>(); private String listType; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = getApplicationContext(); settingsHelper = new SettingsHelper(context); listType = settingsHelper.getListType(); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, logItems); setListAdapter(adapter); getLogItems(); float scale = getResources().getDisplayMetrics().density; int padding = (int) (8 * scale + 0.5f); getListView().setPadding(padding * 2, padding, padding * 2, padding); getListView().setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY); getActionBar().setDisplayHomeAsUpEnabled(true); setTitle(R.string.pref_log_title); } @Override public void onRestart() { getLogItems(); super.onRestart(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.logactivity_menu, menu); return true; } @Override public void onListItemClick(ListView listView, View view, int position, long id) { String listItem = (String) listView.getItemAtPosition(position); if (settingsHelper.addListItem(listItem, listType)) Toast.makeText(context, R.string.toast_added, Toast.LENGTH_SHORT).show(); removeLogItem(listItem); super.onListItemClick(listView, view, position, id); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_clear: deleteFile(Common.LOG_FILE); logItems.clear(); adapter.notifyDataSetChanged(); break; case R.id.action_help: AlertDialog.Builder helpBuilder = new AlertDialog.Builder(this); helpBuilder.setTitle(R.string.button_help); helpBuilder.setMessage(getString(R.string.logging_help, getString(R.string.acceptable_activity_help))); helpBuilder.setPositiveButton(R.string.button_ok, null); helpBuilder.show(); break; case android.R.id.home: onBackPressed(); break; default: break; } return true; } private void getLogItems() { BufferedReader input = null; logItems.clear(); try { input = new BufferedReader(new InputStreamReader(context.openFileInput(Common.LOG_FILE))); String line; while ((line = input.readLine()) != null) { logItems.add(line); } } catch (IOException e) { e.printStackTrace(); } finally { if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } adapter.notifyDataSetChanged(); } private void removeLogItem(String logItem) { for (int i = logItems.size() - 1; i >= 0; i--) { if (logItem.equals(logItems.get(i))) logItems.remove(i); } adapter.notifyDataSetChanged(); String eol = System.getProperty("line.separator"); BufferedWriter writer = null; try { writer = new BufferedWriter(new OutputStreamWriter(context.openFileOutput(Common.LOG_FILE, Context.MODE_PRIVATE))); for (String line : logItems) writer.write(line + eol); } catch (IOException e) { e.printStackTrace(); } finally { if (writer != null) { try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } } }