package net.zhuoweizhang.mcpelauncher.ui;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import com.ipaulpro.afilechooser.FileChooserActivity;
import com.ipaulpro.afilechooser.utils.FileUtils;
import net.zhuoweizhang.mcpelauncher.R;
import net.zhuoweizhang.mcpelauncher.Utils;
import android.annotation.TargetApi;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.TextView;
public class ManageSkinsActivity extends ListActivity {
protected SkinsAdapter adapter;
public static final File REQUEST_ENABLE = new File("/just/enable/skins");
public static final File REQUEST_DISABLE = new File("/just/disable/skins");
protected CompoundButton master = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.manage_skins);
adapter = new SkinsAdapter(this);
setListAdapter(adapter);
getListView().setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
File f = adapter.getItem(position);
setSkin(f);
finish();
}
});
((Button) findViewById(R.id.manage_skins_select)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent target = FileUtils.createGetContentIntent();
target.setType("image/png");
target.setClass(ManageSkinsActivity.this, FileChooserActivity.class);
startActivityForResult(target, MainMenuOptionsActivity.REQUEST_MANAGE_SKINS);
}
});
((Button) findViewById(R.id.manage_skins_players))
.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder b = new AlertDialog.Builder(ManageSkinsActivity.this);
b.setTitle(R.string.pref_zz_skin_download_source);
String[] items = new String[] {
getString(R.string.skin_download_do_not_download),
getString(R.string.skin_download_download_pc) };
b.setSingleChoiceItems(items, getCurrentMode(),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
SharedPreferences.Editor prefs = Utils.getPrefs(0).edit();
switch (which) {
case 1:
prefs.putString("zz_skin_download_source", "mojang_pc");
break;
case 0:
default:
prefs.putString("zz_skin_download_source", "none");
break;
}
prefs.apply();
}
});
b.show();
}
protected int getCurrentMode() {
String mode = Utils.getPrefs(0)
.getString("zz_skin_download_source", "none");
if (mode.equals("none"))
return 0;
if (mode.equals("mojang_pc"))
return 1;
return 0;
}
});
setResult(RESULT_CANCELED);
loadHistory();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if ((requestCode == MainMenuOptionsActivity.REQUEST_MANAGE_SKINS)
&& (resultCode == RESULT_OK)) {
final Uri uri = data.getData();
File file = FileUtils.getFile(uri);
adapter.add(file);
adapter.notifyDataSetChanged();
setSkin(file);
finish();
}
}
@Override
protected void onResume() {
super.onResume();
refreshABToggle();
}
@Override
protected void onPause() {
super.onPause();
saveHistory();
refreshABToggle();
}
public void loadHistory() {
adapter.clear();
if (isEnabled()) {
SharedPreferences sh = Utils.getPrefs(1);
String data = sh.getString("skins_history", "");
for (String s : data.split(";")) {
File f = new File(s);
if (!f.exists() || !f.canRead())
continue;
adapter.add(f);
}
adapter.notifyDataSetChanged();
}
}
public void saveHistory() {
if (isEnabled()) {
String out = "";
List<String> res = new ArrayList<String>();
for (int l = 0; l < adapter.getCount(); l++) {
File f = adapter.getItem(l);
if (f.exists() && f.canRead())
res.add(f.getAbsolutePath());
}
out = Utils.join(res, ";");
SharedPreferences.Editor sh = Utils.getPrefs(1).edit();
sh.putString("skins_history", out);
sh.apply();
}
}
protected boolean isEnabled() {
SharedPreferences sh = Utils.getPrefs(0);
return sh.getBoolean("zz_skin_enable", false);
}
public static void setSkin(File f, ManageSkinsActivity activity) {
SharedPreferences.Editor p1 = Utils.getPrefs(0).edit();
SharedPreferences.Editor p2 = Utils.getPrefs(1).edit();
if (f.getAbsolutePath().equalsIgnoreCase(REQUEST_DISABLE.getAbsolutePath())) {
p1.putBoolean("zz_skin_enable", false);
} else if (f.getAbsolutePath().equalsIgnoreCase(REQUEST_ENABLE.getAbsolutePath())) {
p1.putBoolean("zz_skin_enable", true);
} else {
// Usual
p1.putBoolean("zz_skin_enable", true);
p2.putString("player_skin", f.getAbsolutePath());
}
p1.apply();
p2.apply();
if (activity != null) {
activity.refreshABToggle();
activity.setResult(RESULT_OK);
}
}
protected void setSkin(File f) {
setSkin(f, this);
}
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
getMenuInflater().inflate(R.menu.ab_master, menu);
master = (CompoundButton) menu.findItem(R.id.ab_switch_container).getActionView()
.findViewById(R.id.ab_switch);
if (master != null) {
master.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
setSkin(REQUEST_ENABLE);
} else {
setSkin(REQUEST_DISABLE);
}
loadHistory();
}
});
refreshABToggle();
} else {
System.err.println("WTF?");
}
return true;
} else {
return false;
}
}
protected void refreshABToggle() {
if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) && (master != null)) {
master.setChecked(isEnabled());
}
}
protected class SkinsAdapter extends ArrayAdapter<File> {
private LayoutInflater inflater;
public SkinsAdapter(Context context) {
super(context, android.R.layout.simple_list_item_1, new ArrayList<File>());
inflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View v, ViewGroup parent) {
if (v == null) {
v = inflater.inflate(android.R.layout.simple_list_item_1, parent, false);
}
TextView text = (TextView) v.findViewById(android.R.id.text1);
File f = getItem(position);
text.setText(f.getName());
return v;
}
}
}