package net.pocketmine.server;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import net.pocketmine.server.R;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.ActionMode;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
public class WhitelistActivity extends SherlockActivity {
ActionMode actionMode = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_whitelist);
final ListView list = (ListView) findViewById(R.id.whitelist_list);
load();
// list.setSelector(android.R.color.darker_gray);
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
SparseBooleanArray arr = list.getCheckedItemPositions();
boolean checked = false;
for (int i = 0; i < arr.size() && !checked; i++) {
checked = arr.valueAt(i);
}
if (actionMode == null && checked) {
actionMode = startActionMode(new ActionMode.Callback() {
@Override
public boolean onPrepareActionMode(ActionMode mode,
Menu menu) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
list.clearChoices();
for (int i = 0; i < list.getChildCount(); i++)
list.setItemChecked(i, false);
actionMode = null;
}
@Override
public boolean onCreateActionMode(ActionMode mode,
Menu menu) {
menu.add(0, 1, 0, "Remove")
.setIcon(R.drawable.ic_action_remove)
.setShowAsAction(
MenuItem.SHOW_AS_ACTION_ALWAYS);
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode,
MenuItem item) {
if (item.getItemId() == 1) {
SparseBooleanArray arr = list
.getCheckedItemPositions();
Boolean needsSave = false;
for (int i = arr.size() - 1; i >= 0; i--) {
if (arr.valueAt(i)) {
entries.remove(arr.keyAt(i));
needsSave = true;
}
}
if (needsSave) {
save();
load();
}
actionMode.finish();
return true;
}
return false;
}
});
} else if (actionMode != null && !checked) {
actionMode.finish();
actionMode = null;
}
}
});
list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
}
ArrayList<String> entries;
ArrayAdapter<String> adapter;
public void save() {
try {
PrintWriter writer = new PrintWriter(ServerUtils.getDataDirectory()
+ "/white-list.txt");
for (String entry : entries) {
writer.println(entry);
}
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void load() {
ListView list = (ListView) findViewById(R.id.whitelist_list);
entries = new ArrayList<String>();
try {
BufferedReader reader = new BufferedReader(new FileReader(
ServerUtils.getDataDirectory() + "/white-list.txt"));
try {
String line;
while ((line = reader.readLine()) != null) {
if (line.length() > 0) {
entries.add(line);
}
}
} finally {
reader.close();
}
} catch (FileNotFoundException e) {
// File not found, it's all
} catch (Exception e) {
e.printStackTrace();
}
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_multiple_choice,
entries.toArray(new String[entries.size()]));
list.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getSupportMenuInflater().inflate(R.menu.whitelist, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.whitelist_add) {
LinearLayout ll = new LinearLayout(this);
final EditText input = new EditText(this);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(HomeActivity.dip2px(8), 0,
HomeActivity.dip2px(8), 0);
input.setLayoutParams(layoutParams);
ll.addView(input);
new AlertDialog.Builder(this)
.setTitle("Whitelist player")
.setMessage(
"Write the player name, which you want to whitelist.")
.setView(ll)
.setPositiveButton("Whitelist",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
entries.add(input.getText().toString()
.toLowerCase());
save();
load();
}
}).setNegativeButton("Cancel", null).show();
return true;
}
return false;
}
}