package com.mehtank.androminion.ui;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
import android.content.Context;
import android.preference.PreferenceManager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import com.mehtank.androminion.R;
import com.mehtank.androminion.activities.GameActivity;
/**
* Display of game log
*
*/
public class GameScrollerView extends HorizontalScrollView {
private static final String TAG = "GameScrollerView";
private Context top;
private LinearLayout gameEventsRow;
private ScrollView latestTurnSV;
private TextView latestTurn;
private boolean onlyShowOneTurn = false;
private int numPlayers;
private ArrayList<View> views = new ArrayList<View>();
private File logfile;
public GameScrollerView(Context context) {
this(context, null);
}
public GameScrollerView(Context context, AttributeSet attrs) {
super(context, attrs);
this.top = context;
gameEventsRow = new LinearLayout(top);
gameEventsRow.setOrientation(LinearLayout.HORIZONTAL);
addView(gameEventsRow);
}
public void clear() {
gameEventsRow.removeAllViews();
String filename = "/latest.txt";
if (PreferenceManager.getDefaultSharedPreferences(top).getBoolean("enable_logging", false)) {
filename = new SimpleDateFormat("'/log_'yyyy-MM-dd_HH-mm-ss'.txt'", Locale.US).format(new Date());
}
String dir = GameActivity.BASEDIR + PreferenceManager.getDefaultSharedPreferences(top).getString("logdir", "");
new File(dir).mkdirs();
logfile = new File(dir + filename);
logfile.delete();
Log.e("Logging", dir + filename);
try {
logfile.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
Log.e(TAG, "Failed");
logfile = null;
e.printStackTrace();
}
if (logfile != null && logfile.canWrite()) {
try {
FileWriter f = new FileWriter(logfile.getCanonicalPath(), true); // append to file
f.write(new SimpleDateFormat("'New game started on 'yyyy/MM/dd' at 'HH:mm:ss'\n'", Locale.US).format(new Date()));
f.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void setNumPlayers(int numPlayers) {
this.numPlayers = numPlayers;
if (PreferenceManager.getDefaultSharedPreferences(top).getBoolean("one_turn_logs", false)) {
onlyShowOneTurn = true;
}
}
public void setGameEvent(String s, boolean b, int turnCount) {
if (b) {
latestTurnSV = (ScrollView) LayoutInflater.from(top).inflate(R.layout.view_gamescrollercolumn, gameEventsRow, false);
@SuppressWarnings("deprecation")
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT);
layoutParams.setMargins((int) getResources().getDimension(R.dimen.margin_gamelog),
(int) getResources().getDimension(R.dimen.margin_gamelog),
(int) getResources().getDimension(R.dimen.margin_gamelog),
(int) getResources().getDimension(R.dimen.margin_gamelog));
gameEventsRow.addView(latestTurnSV, layoutParams);
latestTurn = (TextView) latestTurnSV.findViewById(R.id.latestTurn);
latestTurn.setText(s + (turnCount > 0 ? (top.getString(R.string.turn_header) + turnCount) : ""));
latestTurn.setPadding(0, 0, (int) getResources().getDimension(R.dimen.margin_gamelog), 0);
if (onlyShowOneTurn) {
views.add(latestTurnSV);
while (views.size() > numPlayers + 1) {
View view = views.remove(0);
gameEventsRow.removeView(view);
}
}
} else
latestTurn.setText(latestTurn.getText() + "\n" + s);
latestTurnSV.fullScroll(FOCUS_DOWN);
fullScroll(FOCUS_RIGHT);
if (logfile != null && logfile.canWrite()) {
try {
FileWriter f = new FileWriter(logfile.getCanonicalPath(), true); // append to file
if (b)
f.write(top.getString(R.string.log_turn_separator));
f.write(s + "\n");
f.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}