project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/TeamlistAdapter.java
Hedgeroid: Frantic scrabbling toward the deadline
- Added activities for weapon/scheme editors (unfinished)
- Completed tablet version of netroom activity
- Added map preview
- Fixed default team files having the wrong names
- Restructuring
- Updated frontlib JNA bindings to respect the latest frontlib changes
package org.hedgewars.hedgeroid;
import java.util.Comparator;
import org.hedgewars.hedgeroid.R;
import org.hedgewars.hedgeroid.Datastructures.TeamInGame;
import org.hedgewars.hedgeroid.Datastructures.TeamIngameAttributes;
import org.hedgewars.hedgeroid.util.ObservableTreeMapAdapter;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.TextView;
public class TeamlistAdapter extends ObservableTreeMapAdapter<String, TeamInGame> {
private boolean colorHogcountEnabled = false;
private Listener listener;
@Override
protected Comparator<TeamInGame> getEntryOrder() {
return TeamInGame.NAME_ORDER;
}
public void setColorHogcountEnabled(boolean colorHogcountEnabled) {
this.colorHogcountEnabled = colorHogcountEnabled;
notifyDataSetChanged();
}
public void setListener(Listener listener) {
this.listener = listener;
}
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = LayoutInflater.from(parent.getContext());
v = vi.inflate(R.layout.listview_team, null);
}
TeamInGame team = getItem(position);
TextView teamNameView = (TextView) v.findViewById(android.R.id.text1);
ImageButton colorButton = (ImageButton) v.findViewById(R.id.colorButton);
ImageButton hogCountButton = (ImageButton) v.findViewById(R.id.hogCountButton);
teamNameView.setText(team.team.name);
int teamImage;
if(team.ingameAttribs.remoteDriven) {
teamImage = R.drawable.team_net_by_level;
} else {
teamImage = R.drawable.team_local_by_level;
}
Drawable d = parent.getContext().getResources().getDrawable(teamImage).mutate();
d.setLevel(team.team.hogs.get(0).level);
teamNameView.setCompoundDrawablesWithIntrinsicBounds(d, null, null, null);
hogCountButton.getDrawable().setLevel(team.ingameAttribs.hogCount);
colorButton.setImageDrawable(new ColorDrawable(TeamIngameAttributes.TEAM_COLORS[team.ingameAttribs.colorIndex]));
colorButton.setEnabled(colorHogcountEnabled);
hogCountButton.setEnabled(colorHogcountEnabled);
colorButton.setOnClickListener(new ButtonClickListener(team, Type.COLOR_BUTTON));
hogCountButton.setOnClickListener(new ButtonClickListener(team, Type.HOGCOUNT_BUTTON));
if(team.ingameAttribs.remoteDriven) {
teamNameView.setClickable(false);
} else {
teamNameView.setOnClickListener(new ButtonClickListener(team, Type.TEAM_VIEW));
}
return v;
}
private static enum Type {COLOR_BUTTON, HOGCOUNT_BUTTON, TEAM_VIEW}
private final class ButtonClickListener implements OnClickListener {
private final TeamInGame team;
private final Type type;
public ButtonClickListener(TeamInGame team, Type type) {
this.team = team;
this.type = type;
}
public void onClick(View v) {
if(listener != null) {
switch(type) {
case COLOR_BUTTON:
listener.onColorClicked(team);
break;
case HOGCOUNT_BUTTON:
listener.onHogcountClicked(team);
break;
case TEAM_VIEW:
listener.onTeamClicked(team);
break;
default:
throw new IllegalStateException();
}
}
}
}
public interface Listener {
void onTeamClicked(TeamInGame team);
void onColorClicked(TeamInGame team);
void onHogcountClicked(TeamInGame team);
}
}