use of se.oort.diplicity.apigen.MultiContainer in project android-diplicity by zond.
the class MainActivity method appendItems.
private <T> void appendItems(Observable<MultiContainer<T>> call, final String what, final String typ, final RecycleAdapter<SingleContainer<T>, ?> adapter) {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
String msg = null;
if (typ != null) {
if (what != null) {
msg = getResources().getString(R.string.loading_x_y, what, typ);
} else {
msg = getResources().getString(R.string.loading_x_y, getResources().getString(R.string.more), typ);
}
}
handleReq(call, new Sendable<MultiContainer<T>>() {
@Override
public void send(MultiContainer<T> container) {
nextCursorContainer.set(0, "");
for (Link link : container.Links) {
if (link.Rel.equals("next")) {
Uri uri = Uri.parse(link.URL);
nextCursorContainer.set(0, uri.getQueryParameter("cursor"));
}
}
adapter.addAll(container.Properties);
if (what != null) {
if (typ != null) {
((TextView) findViewById(R.id.content_title)).setText(getResources().getString(R.string.x_y, what, typ));
} else {
((TextView) findViewById(R.id.content_title)).setText(what);
}
}
((TextView) findViewById(R.id.content_title)).setVisibility(View.VISIBLE);
if (container.Properties.isEmpty()) {
findViewById(R.id.empty_view).setVisibility(View.VISIBLE);
contentList.setVisibility(View.GONE);
} else {
findViewById(R.id.empty_view).setVisibility(View.GONE);
contentList.setVisibility(View.VISIBLE);
}
}
}, msg);
}
use of se.oort.diplicity.apigen.MultiContainer in project android-diplicity by zond.
the class GameActivity method showOrders.
public void showOrders() {
hideAllExcept(R.id.orders_view);
handleReq(JoinObservable.when(JoinObservable.from(orderService.ListOrders(game.ID, phaseMeta.PhaseOrdinal.toString())).and(phaseService.PhaseLoad(game.ID, phaseMeta.PhaseOrdinal.toString())).then(new Func2<MultiContainer<Order>, SingleContainer<Phase>, Object>() {
@Override
public Object call(MultiContainer<Order> orderMultiContainer, SingleContainer<Phase> phaseSingleContainer) {
Map<String, String> resultMap = new HashMap<String, String>();
if (phaseSingleContainer.Properties.Resolutions != null) {
for (Resolution resolution : phaseSingleContainer.Properties.Resolutions) {
resultMap.put(resolution.Province, resolution.Resolution);
}
}
List<String> orders = new ArrayList<String>();
for (SingleContainer<Order> orderContainer : orderMultiContainer.Properties) {
String resolution = resultMap.get(orderContainer.Properties.Parts.get(0));
if (resolution == null) {
orders.add(getResources().getString(R.string.nation_order, orderContainer.Properties.Nation, TextUtils.join(" ", orderContainer.Properties.Parts)));
} else {
orders.add(getResources().getString(R.string.nation_order_result, orderContainer.Properties.Nation, TextUtils.join(" ", orderContainer.Properties.Parts), resolution));
}
}
Collections.sort(orders);
final EditText ordersView = (EditText) findViewById(R.id.orders_view);
ordersView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
flickFrameLayout.onTouchEvent(motionEvent);
ordersView.onTouchEvent(motionEvent);
return true;
}
});
StringBuffer orderBuffer = new StringBuffer();
for (String order : orders) {
orderBuffer.append(order + "\n");
}
ordersView.setText(orderBuffer);
return null;
}
})).toObservable(), null, getResources().getString(R.string.loading_orders));
}
use of se.oort.diplicity.apigen.MultiContainer in project android-diplicity by zond.
the class GameActivity method showPhaseStates.
public void showPhaseStates() {
hideAllExcept(R.id.phase_state_view);
final MemberTable phaseStateView = (MemberTable) findViewById(R.id.phase_state_view);
phaseStateView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
flickFrameLayout.onTouchEvent(motionEvent);
phaseStateView.onTouchEvent(motionEvent);
return true;
}
});
handleReq(phaseStateService.ListPhaseStates(game.ID, phaseMeta.PhaseOrdinal.toString()), new Sendable<MultiContainer<PhaseState>>() {
@Override
public void send(MultiContainer<PhaseState> phaseStateMultiContainer) {
List<PhaseState> phaseStates = new ArrayList<PhaseState>();
for (SingleContainer<PhaseState> phaseStateSingleContainer : phaseStateMultiContainer.Properties) {
phaseStates.add(phaseStateSingleContainer.Properties);
}
phaseStateView.setPhaseStates(game, phaseMeta, phaseStates);
phaseStateView.setMembers(GameActivity.this, game, game.Members);
}
}, getResources().getString(R.string.loading_phase_settings));
}
use of se.oort.diplicity.apigen.MultiContainer in project android-diplicity by zond.
the class GameActivity method showPress.
public void showPress() {
hideAllExcept(R.id.press_view);
if (member != null) {
FloatingActionButton button = (FloatingActionButton) findViewById(R.id.create_channel_button);
button.setVisibility(View.VISIBLE);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final List<String> nations = new ArrayList<String>();
for (Member thisMember : game.Members) {
if (!member.Nation.equals(thisMember.Nation)) {
nations.add(thisMember.Nation);
}
}
final boolean[] checked = new boolean[nations.size()];
final AlertDialog dialog = new AlertDialog.Builder(GameActivity.this).setMultiChoiceItems(nations.toArray(new String[] {}), checked, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i, boolean b) {
checked[i] = b;
}
}).setTitle(R.string.members).setPositiveButton(R.string.create, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int j) {
List<String> channelMembers = new ArrayList<String>();
for (int i = 0; i < checked.length; i++) {
if (checked[i]) {
channelMembers.add(nations.get(i));
}
}
channelMembers.add(member.Nation);
Collections.sort(channelMembers);
ChannelService.Channel channel = new ChannelService.Channel();
channel.GameID = game.ID;
channel.Members = channelMembers;
PressActivity.startPressActivity(GameActivity.this, game, channel, member);
dialogInterface.dismiss();
}
}).show();
}
});
} else {
findViewById(R.id.create_channel_button).setVisibility(View.GONE);
}
handleReq(channelService.ListChannels(game.ID), new Sendable<MultiContainer<ChannelService.Channel>>() {
@Override
public void send(MultiContainer<ChannelService.Channel> channelMultiContainer) {
final List<ChannelService.Channel> channels = new ArrayList<>();
for (SingleContainer<ChannelService.Channel> channelSingleContainer : channelMultiContainer.Properties) {
channels.add(channelSingleContainer.Properties);
}
ChannelTable channelTable = (ChannelTable) findViewById(R.id.press_channel_table);
channelTable.setChannels(GameActivity.this, game, member, channels);
}
}, getResources().getString(R.string.loading_channels));
}
use of se.oort.diplicity.apigen.MultiContainer in project android-diplicity by zond.
the class GameActivity method showMap.
public void showMap() {
hideAllExcept(R.id.map_view);
final Sendable<String> renderer = new Sendable<String>() {
@Override
public void send(String url) {
((MapView) findViewById(R.id.map_view)).load(GameActivity.this, url);
}
};
if (game.Started) {
findViewById(R.id.rewind).setVisibility(View.VISIBLE);
FloatingActionButton firstPhaseButton = (FloatingActionButton) findViewById(R.id.rewind);
if (phaseMeta.PhaseOrdinal < 3) {
firstPhaseButton.setEnabled(false);
firstPhaseButton.setAlpha(0.3f);
} else {
firstPhaseButton.setEnabled(true);
firstPhaseButton.setAlpha(1.0f);
firstPhaseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
firstPhase();
}
});
}
findViewById(R.id.previous).setVisibility(View.VISIBLE);
FloatingActionButton previousPhaseButton = (FloatingActionButton) findViewById(R.id.previous);
if (phaseMeta.PhaseOrdinal < 2) {
previousPhaseButton.setEnabled(false);
previousPhaseButton.setAlpha(0.3f);
} else {
previousPhaseButton.setEnabled(true);
previousPhaseButton.setAlpha(1.0f);
previousPhaseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
prevPhase();
}
});
}
findViewById(R.id.next).setVisibility(View.VISIBLE);
FloatingActionButton nextPhaseButton = (FloatingActionButton) findViewById(R.id.next);
if (game.NewestPhaseMeta != null && game.NewestPhaseMeta.get(0).PhaseOrdinal <= phaseMeta.PhaseOrdinal) {
nextPhaseButton.setEnabled(false);
nextPhaseButton.setAlpha(0.3f);
} else {
nextPhaseButton.setEnabled(true);
nextPhaseButton.setAlpha(1.0f);
nextPhaseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
nextPhase();
}
});
}
FloatingActionButton lastPhaseButton = (FloatingActionButton) findViewById(R.id.fast_forward);
if (game.NewestPhaseMeta != null && game.NewestPhaseMeta.get(0).PhaseOrdinal <= phaseMeta.PhaseOrdinal + 1) {
lastPhaseButton.setEnabled(false);
lastPhaseButton.setAlpha(0.3f);
} else {
lastPhaseButton.setEnabled(true);
lastPhaseButton.setAlpha(1.0f);
findViewById(R.id.fast_forward).setVisibility(View.VISIBLE);
lastPhaseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
lastPhase();
}
});
}
String url = getBaseURL() + "Game/" + game.ID + "/Phase/" + phaseMeta.PhaseOrdinal + "/Map";
if (getLocalDevelopmentMode() && !getLocalDevelopmentModeFakeID().equals("")) {
url = url + "?fake-id=" + getLocalDevelopmentModeFakeID();
}
renderer.send(url);
if (member != null && !phaseMeta.Resolved) {
handleReq(JoinObservable.when(JoinObservable.from(optionsService.GetOptions(game.ID, phaseMeta.PhaseOrdinal.toString())).and(orderService.ListOrders(game.ID, phaseMeta.PhaseOrdinal.toString())).and(phaseService.PhaseLoad(game.ID, phaseMeta.PhaseOrdinal.toString())).then(new Func3<SingleContainer<Map<String, OptionsService.Option>>, MultiContainer<Order>, SingleContainer<Phase>, Object>() {
@Override
public Object call(SingleContainer<Map<String, OptionsService.Option>> opts, MultiContainer<Order> ords, SingleContainer<Phase> phase) {
options = opts.Properties;
orders.clear();
for (SingleContainer<Order> orderContainer : ords.Properties) {
String srcProvince = orderContainer.Properties.Parts.get(0);
if (srcProvince.indexOf('/') != -1) {
srcProvince = srcProvince.substring(0, srcProvince.indexOf('/'));
}
orders.put(srcProvince, orderContainer.Properties);
}
boolean hasBuildOpts = false;
boolean hasDisbandOpts = false;
for (OptionsService.Option opt : options.values()) {
if (opt.Next.containsKey("Build")) {
hasBuildOpts = true;
}
if (opt.Next.containsKey("Disband")) {
hasDisbandOpts = true;
}
}
int units = 0;
int scs = 0;
for (UnitWrapper unit : phase.Properties.Units) {
if (unit.Unit.Nation.equals(member.Nation)) {
units++;
}
}
for (SC sc : phase.Properties.SCs) {
if (sc.Owner.equals(member.Nation)) {
scs++;
}
}
if (hasBuildOpts && units < scs) {
Toast.makeText(GameActivity.this, getResources().getString(R.string.you_can_build_n_this_phase, getResources().getQuantityString(R.plurals.unit, scs - units, scs - units)), Toast.LENGTH_LONG).show();
} else if (hasDisbandOpts && scs < units) {
Toast.makeText(GameActivity.this, getResources().getString(R.string.you_have_to_disband_n_this_phase, getResources().getQuantityString(R.plurals.unit, units - scs, units - scs)), Toast.LENGTH_LONG).show();
}
return null;
}
})).toObservable(), new Sendable<Object>() {
@Override
public void send(Object o) {
acceptOrders();
}
}, getResources().getString(R.string.loading_state));
}
} else {
findViewById(R.id.rewind).setVisibility(View.GONE);
findViewById(R.id.previous).setVisibility(View.GONE);
findViewById(R.id.next).setVisibility(View.GONE);
findViewById(R.id.fast_forward).setVisibility(View.GONE);
handleReq(variantService.GetStartPhase(game.Variant), new Sendable<SingleContainer<VariantService.Phase>>() {
@Override
public void send(SingleContainer<VariantService.Phase> phaseSingleContainer) {
String url = null;
for (Link link : phaseSingleContainer.Links) {
if (link.Rel.equals("map")) {
url = link.URL;
break;
}
}
if (url != null) {
renderer.send(url);
} else {
App.firebaseCrashReport("No map URL found in variant " + game.Variant + "?");
Toast.makeText(getBaseContext(), R.string.unknown_error, Toast.LENGTH_SHORT).show();
}
}
}, getResources().getString(R.string.loading_start_state));
}
}
Aggregations