Simpler data structure

master
Max Ammann 2016-06-14 15:47:47 +02:00
parent 4c085a2b75
commit 839758f0a4
1 changed files with 46 additions and 26 deletions

View File

@ -9,52 +9,76 @@ import org.json.JSONException;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* Holds the fragments for the configuration of all {@link SynchronizeConfig}s * Holds the fragments for the configuration of all {@link SynchronizeConfig}s
*/ */
public class PagerAdapter extends FragmentStatePagerAdapter { public class PagerAdapter extends FragmentStatePagerAdapter {
private final List<String> configs = new ArrayList<>(); private final List<SynchronizeConfig> configs = new ArrayList<>();
private final Map<String, SynchronizeConfig> configData = new HashMap<>(); public PagerAdapter(Collection<SynchronizeConfig> configs , FragmentManager fm) {
public PagerAdapter(List<SynchronizeConfig> configs , FragmentManager fm) {
super(fm); super(fm);
this.configs.addAll(configs);
for (SynchronizeConfig config : configs) {
this.configs.add(config.getName());
this.configData.put(config.getName(), config);
}
} }
public void save(OutputStream os) throws JSONException, IOException { public void save(OutputStream os) throws JSONException, IOException {
SynchronizeConfig.save(configData.values(), os); SynchronizeConfig.save(configs, os);
} }
public boolean add(String name) { public void add(String name) {
configData.put(name, new SynchronizeConfig(name)); configs.add(new SynchronizeConfig(name));
return configs.add(name); notifyDataSetChanged();
} }
public void remove(String name) { public void remove(String name) {
configData.remove(name); int index = indexOf(name);
configs.remove(name);
if (index < 0) {
return;
}
configs.remove(index);
notifyDataSetChanged();
}
public void rename(String name, String newName) {
int index = indexOf(name);
if (index < 0) {
return;
}
SynchronizeConfig config = configs.get(index);
config.setName(newName);
notifyDataSetChanged();
}
public int indexOf(String name) {
for (int i = 0, size = configs.size(); i < size; i++) {
SynchronizeConfig config = configs.get(i);
if (config.getName().equals(name)) {
return i;
}
}
return -1;
} }
@Override @Override
public Fragment getItem(int i) { public Fragment getItem(int i) {
SynchronizeConfigFragment fragment = new SynchronizeConfigFragment(); SynchronizeConfigFragment fragment = new SynchronizeConfigFragment();
String name = getConfigs().get(i); SynchronizeConfig config = getConfigs().get(i);
fragment.setName(name); fragment.setName(config.getName());
fragment.setPagerAdapter(this); fragment.setPagerAdapter(this);
fragment.setConfig(configData.get(name)); fragment.setConfig(config);
return fragment; return fragment;
} }
@ -69,16 +93,12 @@ public class PagerAdapter extends FragmentStatePagerAdapter {
return PagerAdapter.POSITION_NONE; return PagerAdapter.POSITION_NONE;
} }
public List<String> getConfigs() { public List<SynchronizeConfig> getConfigs() {
return configs; return configs;
} }
public List<SynchronizeConfig> getConfigData() {
return new ArrayList<>(configData.values());
}
@Override @Override
public CharSequence getPageTitle(int position) { public CharSequence getPageTitle(int position) {
return getConfigs().get(position); return configs.get(position).getName();
} }
} }