package com.andexp.skinmixer;
import java.util.ArrayList;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.widget.EditText;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.andexp.skinmixer.path.SkinLister;
import com.andexp.skinmixer.skin.SkinGroupType;
import com.andexp.skinmixer.skindata.SkinData;
import com.andexp.skinmixer.skindata.SkinDataReader;
public class ActivitySkinCreation extends SherlockFragmentActivity implements SkinReaderListener{
private String[] mSkinGroupPaths;
private SkinData[] mSkinDataFromGroups;
EditText et_skinName;
private FragmentListDesigners mFragmentDesignersList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_skincreation);
bindFragment();
mSkinGroupPaths = getIntent().getExtras().getStringArray(SkinGroupType.class.toString());
et_skinName = (EditText) findViewById(R.id.skincreation_skinname);
new Thread(new SkinNameSearcherRunner(this, et_skinName)).run();
new Thread(new SkinDataLoading(mSkinGroupPaths, this)).run();
}
private void bindFragment() {
FragmentManager fragManager = getSupportFragmentManager();
Fragment fragment = fragManager.findFragmentById(R.id.skincreation_designerList);
mFragmentDesignersList = (FragmentListDesigners) fragment;
}
class SkinNameSearcherRunner implements Runnable {
private final Context mContext;
private final EditText mEditText;
public SkinNameSearcherRunner(Context ctx, EditText editText) {
this.mContext = ctx;
this.mEditText = editText;
}
public void run() {
SharedPreferences prefs = mContext.getSharedPreferences("SkinMixer", Context.MODE_PRIVATE);
int skinNumber = prefs.getInt("lastGeneratedNumber", 0)+1;
String baseSkinName = mContext.getString(R.string.sm_base_skinname);
ArrayList<String> superClockSkinPathList = SkinLister.getInstance().getSuperClockSkinPathList();
while(isSkinNameInList(baseSkinName+skinNumber, superClockSkinPathList)){
skinNumber++;
}
mEditText.setHint(baseSkinName+skinNumber);
}
}
protected boolean isSkinNameInList(String skinName, ArrayList<String> superClockSkinPathList) {
boolean isInList = false;
for (String skinPath : superClockSkinPathList) {
if(skinPath.toLowerCase().contains(skinName.toLowerCase())){
isInList = true;
}
}
return isInList;
}
class SkinDataLoading implements Runnable{
private final SkinReaderListener mListener;
private final String[] mGroupPaths;
public SkinDataLoading(String[] paths, SkinReaderListener listener) {
this.mGroupPaths = paths;
this.mListener = listener;
}
@Override
public void run() {
ArrayList<String> mDifferentsPaths = getUniqueGroupPaths(mGroupPaths);
SkinData[] data = new SkinData[mDifferentsPaths.size()];
for (int i = 0; i < mDifferentsPaths.size(); i++) {
data[i] = new SkinDataReader(mDifferentsPaths.get(i)).getData();
}
this.mListener.skinDataLoaded(data);
}
private ArrayList<String> getUniqueGroupPaths(String[] paths) {
ArrayList<String> pathList = new ArrayList<String>();
for (String path : paths) {
boolean isInList = false;
for (int i = 0; i < pathList.size(); i++) {
if(pathList.get(i).contentEquals(path)){
isInList = true;
}
}
if(!isInList)
pathList.add(path);
}
return pathList;
}
}
@Override
public void skinDataLoaded(SkinData[] data) {
mSkinDataFromGroups = data;
if(mFragmentDesignersList!=null)
mFragmentDesignersList.setListAdapter(this, data);
}
}