reader/android: link/unlink checkbox in the options menu

Closes #42

Change-Id: Ief2e397558c5d9327942f7db91dae1bf974856cb
diff --git a/android/app/src/main/java/io/v/android/apps/reader/DeviceSetChooserActivity.java b/android/app/src/main/java/io/v/android/apps/reader/DeviceSetChooserActivity.java
index 579bc90..4addeac 100644
--- a/android/app/src/main/java/io/v/android/apps/reader/DeviceSetChooserActivity.java
+++ b/android/app/src/main/java/io/v/android/apps/reader/DeviceSetChooserActivity.java
@@ -4,12 +4,12 @@
 
 package io.v.android.apps.reader;
 
-import android.app.Activity;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.net.Uri;
 import android.os.Bundle;
 import android.support.design.widget.FloatingActionButton;
+import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.support.v7.widget.helper.ItemTouchHelper;
@@ -26,7 +26,7 @@
  * When the user clicks on one of the device sets, it starts the PdfViewerActivity with the file
  * associated with the device set.
  */
-public class DeviceSetChooserActivity extends Activity {
+public class DeviceSetChooserActivity extends AppCompatActivity {
 
     private static final String TAG = DeviceSetChooserActivity.class.getSimpleName();
 
diff --git a/android/app/src/main/java/io/v/android/apps/reader/PdfViewerActivity.java b/android/app/src/main/java/io/v/android/apps/reader/PdfViewerActivity.java
index cf28402..44b85a8 100644
--- a/android/app/src/main/java/io/v/android/apps/reader/PdfViewerActivity.java
+++ b/android/app/src/main/java/io/v/android/apps/reader/PdfViewerActivity.java
@@ -4,7 +4,6 @@
 
 package io.v.android.apps.reader;
 
-import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
@@ -12,7 +11,10 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.provider.OpenableColumns;
+import android.support.v7.app.AppCompatActivity;
 import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
 import android.view.View;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
@@ -39,7 +41,7 @@
 /**
  * Activity that shows the contents of the selected pdf file.
  */
-public class PdfViewerActivity extends Activity {
+public class PdfViewerActivity extends AppCompatActivity {
 
     private static final String TAG = PdfViewerActivity.class.getSimpleName();
 
@@ -48,6 +50,7 @@
     private PdfViewWrapper mPdfView;
     private Button mButtonPrev;
     private Button mButtonNext;
+    private MenuItem mMenuItemLinkPage;
 
     private DB mDB;
     private DBList<DeviceSet> mDeviceSets;
@@ -128,7 +131,10 @@
                 }
 
                 mCurrentDS = changed;
-                mPdfView.setPage(getDeviceMeta().getPage());
+
+                DeviceMeta dm = getDeviceMeta();
+                mPdfView.setPage(dm.getPage());
+                mMenuItemLinkPage.setChecked(dm.getLinked());
             }
 
             @Override
@@ -210,6 +216,36 @@
         leaveDeviceSet();
     }
 
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        // Inflate the menu; this adds items to the action bar if it is present.
+        getMenuInflater().inflate(R.menu.menu_pdf_viewer, menu);
+        mMenuItemLinkPage = menu.findItem(R.id.action_link_page);
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            case R.id.action_link_page:
+                toggleLinkedState(item.isChecked());
+                return true;
+
+            default:
+                return super.onOptionsItemSelected(item);
+        }
+    }
+
+    private void toggleLinkedState(boolean checked) {
+        DeviceMeta dm = getDeviceMeta();
+        if (dm == null) {
+            return;
+        }
+
+        dm.setLinked(!checked);
+        mDB.updateDeviceSet(mCurrentDS);
+    }
+
     private DeviceMeta createDeviceMeta() {
         String deviceId = DeviceInfoFactory.getDeviceId(this);
         int page = 1;
@@ -347,6 +383,7 @@
                 dm.setPage(dm.getPage() - 1);
             }
 
+            mDB.updateDeviceSet(mCurrentDS);
             return;
         }
 
@@ -380,6 +417,7 @@
                 dm.setPage(dm.getPage() + 1);
             }
 
+            mDB.updateDeviceSet(mCurrentDS);
             return;
         }
 
diff --git a/android/app/src/main/res/menu/menu_device_set_chooser.xml b/android/app/src/main/res/menu/menu_device_set_chooser.xml
index 60fca2e..0fa0b45 100644
--- a/android/app/src/main/res/menu/menu_device_set_chooser.xml
+++ b/android/app/src/main/res/menu/menu_device_set_chooser.xml
@@ -1,9 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     tools:context=".DeviceSetChooserActivity">
     <item
         android:id="@+id/action_settings"
         android:orderInCategory="100"
-        android:showAsAction="never"
+        app:showAsAction="never"
         android:title="@string/action_settings" />
 </menu>
diff --git a/android/app/src/main/res/menu/menu_pdf_viewer.xml b/android/app/src/main/res/menu/menu_pdf_viewer.xml
new file mode 100644
index 0000000..de831c4
--- /dev/null
+++ b/android/app/src/main/res/menu/menu_pdf_viewer.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    tools:context=".DeviceSetChooserActivity">
+    <item
+        android:id="@+id/action_settings"
+        android:orderInCategory="100"
+        app:showAsAction="never"
+        android:title="@string/action_settings" />
+    <item
+        android:id="@+id/action_link_page"
+        android:orderInCategory="50"
+        app:showAsAction="never"
+        android:checkable="true"
+        android:checked="true"
+        android:title="@string/action_link" />
+</menu>
diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/main/res/values/colors.xml
index 0edb971..0a142de 100644
--- a/android/app/src/main/res/values/colors.xml
+++ b/android/app/src/main/res/values/colors.xml
@@ -6,4 +6,5 @@
     <color name="windowBackground">#455A64</color>
     <color name="buttonNormal">#E0F2F1</color>
     <color name="accent">#FF9800</color>
+    <color name="itemBackground">#004D40</color>
 </resources>
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index d043fa0..1c91eba 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -1,4 +1,5 @@
 <resources>
     <string name="app_name">PDF Reader</string>
     <string name="action_settings">Settings</string>
+    <string name="action_link">Link Page</string>
 </resources>
diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml
index f0720a6..61a6039 100644
--- a/android/app/src/main/res/values/styles.xml
+++ b/android/app/src/main/res/values/styles.xml
@@ -10,6 +10,8 @@
         <item name="android:windowBackground">@color/windowBackground</item>
         <item name="android:colorButtonNormal">@color/buttonNormal</item>
         <item name="android:colorAccent">@color/accent</item>
+        <item name="android:itemTextAppearance">@style/PopupMenuTextStyle</item>
+        <item name="android:itemBackground">@color/itemBackground</item>
 
         <item name="colorPrimary">@color/primary</item>
         <item name="colorPrimaryDark">@color/primaryDark</item>
@@ -17,4 +19,8 @@
         <item name="colorAccent">@color/accent</item>
     </style>
 
+    <style name="PopupMenuTextStyle" parent="Theme.AppCompat.Light">
+        <item name="android:textColor">@color/textPrimary</item>
+    </style>
+
 </resources>