From 5664d6f6590182f060089d2b292b15c033d3f2df Mon Sep 17 00:00:00 2001 From: Nathaniel Wesley Filardo Date: Sat, 18 Feb 2017 16:27:19 -0500 Subject: [PATCH] Update GameState objects to have gameIx field This is a new parameter in the "/config" message to indicate which game out of a bunch is being played. See parallel commit to IoT repo 703983bd66891a4e03c5946aa1f238ae3e685b54. Display said parameter in the game header. --- .../ctfwstimer/lib/CtFwSGameState.java | 5 ++- .../ctfwstimer/CtFwSDisplayLocal.java | 44 ++++++++++++++----- .../ctfwstimer/MainActivity.java | 8 +++- mobile/src/main/res/layout/activity_main.xml | 5 ++- mobile/src/main/res/values/strings.xml | 3 +- 5 files changed, 47 insertions(+), 18 deletions(-) diff --git a/lib/src/main/java/com/acmetensortoys/ctfwstimer/lib/CtFwSGameState.java b/lib/src/main/java/com/acmetensortoys/ctfwstimer/lib/CtFwSGameState.java index 5a086ad..cdd78f4 100644 --- a/lib/src/main/java/com/acmetensortoys/ctfwstimer/lib/CtFwSGameState.java +++ b/lib/src/main/java/com/acmetensortoys/ctfwstimer/lib/CtFwSGameState.java @@ -28,6 +28,7 @@ public class CtFwSGameState { private int setupD; private int rounds; private int roundD; + private int gameIx; private long endT = 0; // NTP seconds for game end (if >= startT) public void fromMqttConfigMessage(String st) { @@ -39,11 +40,12 @@ public class CtFwSGameState { default: try { Scanner s = new Scanner(tm); - this.startT = s.nextLong(); + this.startT = s.nextLong(); this.setupD = s.nextInt(); this.rounds = s.nextInt(); this.roundD = s.nextInt(); this.flagsTotal = s.nextInt(); + this.gameIx = s.nextInt(); this.configured = true; } catch (NoSuchElementException e) { this.configured = false; @@ -116,6 +118,7 @@ public class CtFwSGameState { public boolean isConfigured(){ return configured; } + public int getGameIx() { return gameIx; } public long getStartT() { return startT; } public long getFirstRoundStartT() { return startT + setupD; } public int getRounds() { return rounds; } diff --git a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/CtFwSDisplayLocal.java b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/CtFwSDisplayLocal.java index b19e454..975af5c 100644 --- a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/CtFwSDisplayLocal.java +++ b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/CtFwSDisplayLocal.java @@ -19,16 +19,35 @@ import static android.view.View.INVISIBLE; // TODO nwf is bad at UI design; someone who isn't him should improve this class CtFwSDisplayLocal implements CtFwSGameState.Observer { final private Activity mAct; - final private Handler mHandler; + public String gameStateLabelText; - CtFwSDisplayLocal(Activity a, Handler h) { + CtFwSDisplayLocal(Activity a) { mAct = a; - mHandler = h; + gameStateLabelText = mAct.getResources().getString(R.string.header_gamestate0); } private Runnable mProber; + @Override public void onCtFwSConfigure(final CtFwSGameState gs) { + int gameix = gs.getGameIx(); + gameStateLabelText = + (gs.isConfigured() && gameix != 0) + ? + String.format( + mAct.getResources() + .getString(R.string.header_gamestateN), + gameix) + : mAct.getResources().getString(R.string.header_gamestate0); + + + final TextView gstv = (TextView) mAct.findViewById(R.id.header_gamestate); + gstv.post(new Runnable() { + @Override + public void run() { + gstv.setText(gameStateLabelText); + } + }); } @Override @@ -58,7 +77,7 @@ class CtFwSDisplayLocal implements CtFwSGameState.Observer { } else { tv_jb.setText( String.format(mAct.getResources().getString(R.string.ctfws_jailbreak), - now.round, gs.getRounds() - 1)); + now.round, gs.getRounds() - 1)); } } }); @@ -68,7 +87,7 @@ class CtFwSDisplayLocal implements CtFwSGameState.Observer { @Override public void run() { pb_jb.setIndeterminate(false); - pb_jb.setMax((int)(now.roundEnd - now.roundStart)); + pb_jb.setMax((int) (now.roundEnd - now.roundStart)); pb_jb.setProgress(0); } }); @@ -81,14 +100,14 @@ class CtFwSDisplayLocal implements CtFwSGameState.Observer { ch_jb.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() { @Override public void onChronometerTick(Chronometer c) { - pb_jb.setProgress((int)(now.roundEnd - System.currentTimeMillis()/1000)); + pb_jb.setProgress((int) (now.roundEnd - System.currentTimeMillis() / 1000)); } }); ch_jb.start(); } }); } - if (now.round > 0){ + if (now.round > 0) { final ProgressBar pb_gp = (ProgressBar) (mAct.findViewById(R.id.pb_gameProgress)); pb_gp.post(new Runnable() { @Override @@ -107,7 +126,7 @@ class CtFwSDisplayLocal implements CtFwSGameState.Observer { ch_gp.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() { @Override public void onChronometerTick(Chronometer c) { - pb_gp.setProgress((int)(System.currentTimeMillis()/1000 + pb_gp.setProgress((int) (System.currentTimeMillis() / 1000 - gs.getFirstRoundStartT())); } }); @@ -166,7 +185,8 @@ class CtFwSDisplayLocal implements CtFwSGameState.Observer { public void run() { ch.stop(); ch.setVisibility(View.INVISIBLE); - }}); + } + }); } { final ProgressBar pb = (ProgressBar) (mAct.findViewById(R.id.pb_jailbreak)); @@ -204,7 +224,7 @@ class CtFwSDisplayLocal implements CtFwSGameState.Observer { } } - final TextView msgs = (TextView)(mAct.findViewById(R.id.tv_flags)); + final TextView msgs = (TextView) (mAct.findViewById(R.id.tv_flags)); msgs.post(new Runnable() { @Override public void run() { @@ -215,7 +235,7 @@ class CtFwSDisplayLocal implements CtFwSGameState.Observer { @Override public void onCtFwSMessage(CtFwSGameState gs, List msgs) { - final TextView msgstv = (TextView)(mAct.findViewById(R.id.msgs)); + final TextView msgstv = (TextView) (mAct.findViewById(R.id.msgs)); int s = msgs.size(); if (s == 0) { @@ -245,4 +265,4 @@ class CtFwSDisplayLocal implements CtFwSGameState.Observer { }); } } -} +} \ No newline at end of file diff --git a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/MainActivity.java b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/MainActivity.java index a713821..1b6f84b 100644 --- a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/MainActivity.java +++ b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/MainActivity.java @@ -79,7 +79,7 @@ public class MainActivity extends AppCompatActivity { mTvSU = (TextView) findViewById(R.id.tv_mqtt_server_uri); mTvSS = (TextView) findViewById(R.id.tv_mqtt_state); - mCdl = new CtFwSDisplayLocal(this, new Handler()); + mCdl = new CtFwSDisplayLocal(this); } private ServiceConnection ctfwssc = new ServiceConnection() { @@ -137,7 +137,11 @@ public class MainActivity extends AppCompatActivity { tv.setText("DO NOT TAP ON GLASS"); tv.postDelayed(new Runnable() { public void run() { - tv.setText(R.string.header_gamestate); + if (mCdl != null) { + tv.setText(mCdl.gameStateLabelText); + } else { + tv.setText(R.string.header_gamestate0); + } egg = false; } }, 3000); diff --git a/mobile/src/main/res/layout/activity_main.xml b/mobile/src/main/res/layout/activity_main.xml index f6c88f2..cd57489 100644 --- a/mobile/src/main/res/layout/activity_main.xml +++ b/mobile/src/main/res/layout/activity_main.xml @@ -60,12 +60,13 @@ --> + android:onClick="onclick_gamestate" + android:id="@+id/header_gamestate" /> Jailbreak\n%1$d of %2$d %1$d Flags: - Game State: + Game State: + Game %1$d State: Game\nTime\nElapsed Messages: -- 2.50.1