From abb520a30f4f0f9661e21778a27a0ee77536e4c5 Mon Sep 17 00:00:00 2001 From: Nathaniel Wesley Filardo Date: Sun, 22 Sep 2019 14:41:10 +0100 Subject: [PATCH] Handbook: overhaul Fixes https://github.com/cmukgb/ctfws-timer-android/issues/12 Fixes https://github.com/cmukgb/ctfws-timer-android/issues/17 --- mobile/src/main/AndroidManifest.xml | 7 ++ .../ctfwstimer/HandbookActivity.java | 110 ++++++++++++++---- .../src/main/res/layout/activity_handbook.xml | 3 +- mobile/src/main/res/menu/handmenu.xml | 18 +++ mobile/src/main/res/values/strings.xml | 4 +- 5 files changed, 115 insertions(+), 27 deletions(-) create mode 100644 mobile/src/main/res/menu/handmenu.xml diff --git a/mobile/src/main/AndroidManifest.xml b/mobile/src/main/AndroidManifest.xml index b6bf9f5..8e27e62 100644 --- a/mobile/src/main/AndroidManifest.xml +++ b/mobile/src/main/AndroidManifest.xml @@ -44,7 +44,14 @@ android:exported="false" /> + diff --git a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/HandbookActivity.java b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/HandbookActivity.java index de14641..d369521 100644 --- a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/HandbookActivity.java +++ b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/HandbookActivity.java @@ -4,44 +4,27 @@ import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; -import android.content.res.AssetManager; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.VectorDrawable; -import android.net.Uri; import android.os.IBinder; -import android.support.annotation.NonNull; -import android.support.v4.content.ContextCompat; +import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; -import android.support.v7.widget.DividerItemDecoration; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.util.Log; -import android.util.TypedValue; -import android.view.View; -import android.view.ViewGroup; +import android.view.Menu; +import android.view.MenuItem; import android.webkit.WebSettings; import android.webkit.WebView; -import android.widget.Button; +import android.widget.Chronometer; +import android.widget.SearchView; import android.widget.Toast; -import org.eclipse.paho.client.mqttv3.IMqttMessageListener; - -import java.io.BufferedReader; import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.ArrayList; -import java.util.List; public class HandbookActivity extends AppCompatActivity { public static final String HAND_FILE_NAME = "handbook.html"; private static final String TAG = "CtFwSHandbook"; + private CtFwSDisplayTinyChrono mTitleChronoObs; private WebView mWV; private void display() { @@ -79,11 +62,19 @@ public void onHandbookFetch(MainService.LocalBinder b, CheckedAsyncDownloader.DL }; private MainService.LocalBinder mSrvBinder; + + private void doRegisterObservers() { + mSrvBinder.registerObserver(mSrvObs); + if (mTitleChronoObs != null) { + mSrvBinder.getGameState().registerObserver(mTitleChronoObs); + } + } + private final ServiceConnection ctfwssc = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mSrvBinder = (MainService.LocalBinder) service; - mSrvBinder.registerObserver(mSrvObs); + doRegisterObservers(); mSrvBinder.connect(false); } @@ -99,14 +90,82 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_handbook); + ActionBar ab = getSupportActionBar(); + if (ab != null) { + ab.setTitle(R.string.app_name_hand_title); + } + mWV = findViewById(R.id.hand_wv); WebSettings wvs = mWV.getSettings(); wvs.setBuiltInZoomControls(true); wvs.setDisplayZoomControls(false); + + // mWV.setFindListener() + display(); } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + Log.d(TAG, "onCreateOptionsMenu"); + getMenuInflater().inflate(R.menu.handmenu, menu); + + Chronometer ch = (Chronometer) menu.findItem(R.id.hand_menu_crono).getActionView(); + mTitleChronoObs = new CtFwSDisplayTinyChrono(getResources(), ch); + + if (mSrvBinder != null) { + doRegisterObservers(); + } + + SearchView sv = (SearchView) menu.findItem(R.id.hand_menu_search).getActionView(); + sv.setQueryHint("Search handbook..."); + sv.setSubmitButtonEnabled(true); + + /* + sv.setOnSearchClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Log.d(TAG, "sv.OClickL"); + } + }); + + sv.setOnCloseListener(new SearchView.OnCloseListener() { + @Override + public boolean onClose() { + Log.d(TAG, "sv.OCloseL"); + return false; + } + }); + */ + + sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String query) { + mWV.findNext(true); + return false; + } + + @Override + public boolean onQueryTextChange(String newText) { + mWV.findAllAsync(newText); + return false; + } + }); + + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.hand_menu_search: + return true; + } + + return false; + } + @Override public void onStart() { Log.d(TAG, "onStart"); @@ -124,7 +183,7 @@ public void onResume() { super.onResume(); if (mSrvBinder != null) { - mSrvBinder.registerObserver(mSrvObs); + doRegisterObservers(); } } @@ -132,6 +191,7 @@ public void onResume() { protected void onPause() { Log.d(TAG, "onPause"); if (mSrvBinder != null) { + mSrvBinder.getGameState().unregisterObserver(mTitleChronoObs); mSrvBinder.unregisterObserver(mSrvObs); } diff --git a/mobile/src/main/res/layout/activity_handbook.xml b/mobile/src/main/res/layout/activity_handbook.xml index 2d2c049..43f9107 100644 --- a/mobile/src/main/res/layout/activity_handbook.xml +++ b/mobile/src/main/res/layout/activity_handbook.xml @@ -4,7 +4,8 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/cl" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:orientation="vertical"> + + + + + + + \ No newline at end of file diff --git a/mobile/src/main/res/values/strings.xml b/mobile/src/main/res/values/strings.xml index 8311f62..bc6eeae 100644 --- a/mobile/src/main/res/values/strings.xml +++ b/mobile/src/main/res/values/strings.xml @@ -2,7 +2,8 @@ tcp://ctfws-mqtt.cmukgb.org:1883 CMUKGB CtFwS Timer - CMUKGB CtFwS Handbook + CtFwS Handbook + Handbook Game\nEnd Game\nStart @@ -51,6 +52,7 @@ Settings Quit Reconnect + Search Server URI: Server State: