Add another purchase button that uses a key which isn\\\'t invalidated even if a new fingerprint is enrolled. am: 8b0db26f32 am: 27a0e2be8d
am: 20c18f6ec8

Change-Id: I79b362e2c99e68a84f8d96d72205afb0ef8540aa
diff --git a/admin/BasicManagedProfile/README.md b/admin/BasicManagedProfile/README.md
index cebdb8e..daa34d9 100644
--- a/admin/BasicManagedProfile/README.md
+++ b/admin/BasicManagedProfile/README.md
@@ -38,8 +38,8 @@
 Pre-requisites
 --------------
 
-- Android SDK v21
-- Android Build Tools v23.0.0
+- Android SDK 24
+- Android Build Tools v24.0.0
 - Android Support Repository
 
 Screenshots
@@ -68,7 +68,7 @@
 License
 -------
 
-Copyright 2014 The Android Open Source Project, Inc.
+Copyright 2016 The Android Open Source Project, Inc.
 
 Licensed to the Apache Software Foundation (ASF) under one or more contributor
 license agreements.  See the NOTICE file distributed with this work for
diff --git a/media/MidiScope/Application/src/main/java/com/example/android/midiscope/LoggingReceiver.java b/media/MidiScope/Application/src/main/java/com/example/android/midiscope/LoggingReceiver.java
index 23ce8f7..db7743a 100644
--- a/media/MidiScope/Application/src/main/java/com/example/android/midiscope/LoggingReceiver.java
+++ b/media/MidiScope/Application/src/main/java/com/example/android/midiscope/LoggingReceiver.java
@@ -20,6 +20,7 @@
 import android.util.Log;
 
 import java.io.IOException;
+import java.util.Locale;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -45,15 +46,15 @@
             throws IOException {
         StringBuilder sb = new StringBuilder();
         if (timestamp == 0) {
-            sb.append(String.format("-----0----: "));
+            sb.append("-----0----: ");
         } else {
             long monoTime = timestamp - mStartTime;
             double seconds = (double) monoTime / NANOS_PER_SECOND;
-            sb.append(String.format("%10.3f: ", seconds));
+            sb.append(String.format(Locale.US, "%10.3f: ", seconds));
         }
         sb.append(MidiPrinter.formatBytes(data, offset, count));
         sb.append(": ");
-        sb.append(MidiPrinter.formatMessage(data, offset, count));
+        sb.append(MidiPrinter.formatMessage(data, offset));
         String text = sb.toString();
         mLogger.log(text);
         Log.i(TAG, text);
diff --git a/media/MidiScope/Application/src/main/java/com/example/android/midiscope/MainActivity.java b/media/MidiScope/Application/src/main/java/com/example/android/midiscope/MainActivity.java
index 41d74f0..2c78514 100644
--- a/media/MidiScope/Application/src/main/java/com/example/android/midiscope/MainActivity.java
+++ b/media/MidiScope/Application/src/main/java/com/example/android/midiscope/MainActivity.java
@@ -16,19 +16,19 @@
 
 package com.example.android.midiscope;
 
-import android.app.ActionBar;
-import android.app.Activity;
 import android.media.midi.MidiDeviceInfo;
 import android.media.midi.MidiManager;
 import android.media.midi.MidiReceiver;
 import android.os.Bundle;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.WindowManager;
 import android.widget.ScrollView;
 import android.widget.TextView;
-import android.widget.Toolbar;
 
 import com.example.android.common.midi.MidiFramer;
 import com.example.android.common.midi.MidiOutputPortSelector;
@@ -39,7 +39,7 @@
 /**
  * App that provides a MIDI echo service.
  */
-public class MainActivity extends Activity implements ScopeLogger {
+public class MainActivity extends AppCompatActivity implements ScopeLogger {
 
     private static final int MAX_LINES = 100;
 
@@ -53,8 +53,8 @@
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
 
-        setActionBar((Toolbar) findViewById(R.id.toolbar));
-        ActionBar actionBar = getActionBar();
+        setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
+        ActionBar actionBar = getSupportActionBar();
         if (actionBar != null) {
             actionBar.setDisplayShowTitleEnabled(false);
         }
diff --git a/media/MidiScope/Application/src/main/java/com/example/android/midiscope/MidiPrinter.java b/media/MidiScope/Application/src/main/java/com/example/android/midiscope/MidiPrinter.java
index 9e97c04..db5e9e0 100644
--- a/media/MidiScope/Application/src/main/java/com/example/android/midiscope/MidiPrinter.java
+++ b/media/MidiScope/Application/src/main/java/com/example/android/midiscope/MidiPrinter.java
@@ -67,7 +67,7 @@
         return sb.toString();
     }
 
-    public static String formatMessage(byte[] data, int offset, int count) {
+    public static String formatMessage(byte[] data, int offset) {
         StringBuilder sb = new StringBuilder();
         byte statusByte = data[offset++];
         int status = statusByte & 0xFF;
@@ -97,10 +97,11 @@
                 sb.append(key).append(" = ").append(value).append('\n');
             }
             for (PortInfo port : info.getPorts()) {
-                sb.append((port.getType() == PortInfo.TYPE_INPUT) ? "input"
-                        : "output");
-                sb.append("[").append(port.getPortNumber()).append("] = \"").append(port.getName()
-                        + "\"\n");
+                sb.append((port.getType() == PortInfo.TYPE_INPUT) ? "input" : "output")
+                        .append("[")
+                        .append(port.getPortNumber())
+                        .append("] = \"")
+                        .append(port.getName()).append("\"\n");
             }
         }
         return sb.toString();
diff --git a/media/MidiScope/Application/src/main/java/com/example/android/midiscope/MidiScope.java b/media/MidiScope/Application/src/main/java/com/example/android/midiscope/MidiScope.java
index 3965d83..5aa245a 100644
--- a/media/MidiScope/Application/src/main/java/com/example/android/midiscope/MidiScope.java
+++ b/media/MidiScope/Application/src/main/java/com/example/android/midiscope/MidiScope.java
@@ -39,10 +39,6 @@
         return new MidiReceiver[] { mInputReceiver };
     }
 
-    public static ScopeLogger getScopeLogger() {
-        return mScopeLogger;
-    }
-
     public static void setScopeLogger(ScopeLogger logger) {
         if (logger != null) {
             // Receiver that prints the messages.
diff --git a/media/MidiScope/Application/src/main/java/com/example/android/midiscope/ScopeLogger.java b/media/MidiScope/Application/src/main/java/com/example/android/midiscope/ScopeLogger.java
index dc52efd..0637465 100644
--- a/media/MidiScope/Application/src/main/java/com/example/android/midiscope/ScopeLogger.java
+++ b/media/MidiScope/Application/src/main/java/com/example/android/midiscope/ScopeLogger.java
@@ -17,9 +17,11 @@
 package com.example.android.midiscope;
 
 public interface ScopeLogger {
+
     /**
      * Write the text string somewhere that the user can see it.
-     * @param text
+     *
+     * @param text The log message.
      */
     void log(String text);
 }
diff --git a/media/MidiScope/Application/src/main/res/layout/main.xml b/media/MidiScope/Application/src/main/res/layout/main.xml
index 71c52aa..ddd5389 100644
--- a/media/MidiScope/Application/src/main/res/layout/main.xml
+++ b/media/MidiScope/Application/src/main/res/layout/main.xml
@@ -20,7 +20,7 @@
               android:layout_height="match_parent"
               android:orientation="vertical">
 
-    <Toolbar
+    <android.support.v7.widget.Toolbar
         android:id="@+id/toolbar"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
@@ -37,7 +37,7 @@
             android:entries="@array/senders"
             android:popupTheme="@android:style/ThemeOverlay.Material.Light"/>
 
-    </Toolbar>
+    </android.support.v7.widget.Toolbar>
 
     <ScrollView
         android:id="@+id/scroll"
diff --git a/media/MidiScope/Application/src/main/res/menu/main.xml b/media/MidiScope/Application/src/main/res/menu/main.xml
index abb1842..fe1cd1c 100644
--- a/media/MidiScope/Application/src/main/res/menu/main.xml
+++ b/media/MidiScope/Application/src/main/res/menu/main.xml
@@ -14,19 +14,20 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+      xmlns:app="http://schemas.android.com/apk/res-auto">
 
     <item
         android:id="@+id/action_clear_all"
         android:icon="@drawable/ic_clear_all"
-        android:showAsAction="ifRoom"
+        app:showAsAction="ifRoom"
         android:title="@string/clear_log"/>
 
     <item
         android:id="@+id/action_keep_screen_on"
         android:checkable="true"
         android:checked="true"
-        android:showAsAction="never"
+        app:showAsAction="never"
         android:title="@string/keep_screen_on"/>
 
 </menu>
diff --git a/media/MidiScope/Application/src/main/res/values/styles.xml b/media/MidiScope/Application/src/main/res/values/styles.xml
index 0036009..a6c594a 100644
--- a/media/MidiScope/Application/src/main/res/values/styles.xml
+++ b/media/MidiScope/Application/src/main/res/values/styles.xml
@@ -16,10 +16,10 @@
 -->
 <resources>
 
-    <style name="MidiScopeTheme" parent="android:Theme.Material.Light.NoActionBar">
-        <item name="android:colorPrimary">@color/primary</item>
-        <item name="android:colorPrimaryDark">@color/primary_dark</item>
-        <item name="android:colorAccent">@color/accent</item>
+    <style name="MidiScopeTheme" parent="Theme.AppCompat.Light.NoActionBar">
+        <item name="colorPrimary">@color/primary</item>
+        <item name="colorPrimaryDark">@color/primary_dark</item>
+        <item name="colorAccent">@color/accent</item>
     </style>
 
 </resources>
diff --git a/media/MidiSynth/Application/src/main/java/com/example/android/midisynth/MainActivity.java b/media/MidiSynth/Application/src/main/java/com/example/android/midisynth/MainActivity.java
index 92964b4..b90ee22 100644
--- a/media/MidiSynth/Application/src/main/java/com/example/android/midisynth/MainActivity.java
+++ b/media/MidiSynth/Application/src/main/java/com/example/android/midisynth/MainActivity.java
@@ -16,18 +16,18 @@
 
 package com.example.android.midisynth;
 
-import android.app.ActionBar;
-import android.app.Activity;
 import android.content.pm.PackageManager;
 import android.media.midi.MidiDevice.MidiConnection;
 import android.media.midi.MidiDeviceInfo;
 import android.media.midi.MidiManager;
 import android.os.Bundle;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.WindowManager;
 import android.widget.Toast;
-import android.widget.Toolbar;
 
 import com.example.android.common.midi.MidiOutputPortConnectionSelector;
 import com.example.android.common.midi.MidiPortConnector;
@@ -36,18 +36,16 @@
 /**
  * Simple synthesizer as a MIDI Device.
  */
-public class MainActivity extends Activity {
-    static final String TAG = "MidiSynthExample";
+public class MainActivity extends AppCompatActivity {
 
-    private MidiManager mMidiManager;
     private MidiOutputPortConnectionSelector mPortSelector;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
-        setActionBar((Toolbar) findViewById(R.id.toolbar));
-        ActionBar actionBar = getActionBar();
+        setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
+        ActionBar actionBar = getSupportActionBar();
         if (actionBar != null) {
             actionBar.setDisplayShowTitleEnabled(false);
         }
@@ -86,12 +84,12 @@
 
     private void setupMidi() {
         // Setup MIDI
-        mMidiManager = (MidiManager) getSystemService(MIDI_SERVICE);
+        MidiManager midiManager = (MidiManager) getSystemService(MIDI_SERVICE);
 
-        MidiDeviceInfo synthInfo = MidiTools.findDevice(mMidiManager, "AndroidTest",
+        MidiDeviceInfo synthInfo = MidiTools.findDevice(midiManager, "AndroidTest",
                 "SynthExample");
         int portIndex = 0;
-        mPortSelector = new MidiOutputPortConnectionSelector(mMidiManager, this,
+        mPortSelector = new MidiOutputPortConnectionSelector(midiManager, this,
                 R.id.spinner_synth_sender, synthInfo, portIndex);
         mPortSelector.setConnectedListener(new MyPortsConnectedListener());
     }
diff --git a/media/MidiSynth/Application/src/main/java/com/example/android/midisynth/MidiSynthDeviceService.java b/media/MidiSynth/Application/src/main/java/com/example/android/midisynth/MidiSynthDeviceService.java
index b9f25ee..806c555 100644
--- a/media/MidiSynth/Application/src/main/java/com/example/android/midisynth/MidiSynthDeviceService.java
+++ b/media/MidiSynth/Application/src/main/java/com/example/android/midisynth/MidiSynthDeviceService.java
@@ -24,7 +24,6 @@
 
 public class MidiSynthDeviceService extends MidiDeviceService {
 
-    private static final String TAG = MainActivity.TAG;
     private SynthEngine mSynthEngine = new SynthEngine();
     private boolean mSynthStarted = false;
 
diff --git a/media/MidiSynth/Application/src/main/res/layout/main.xml b/media/MidiSynth/Application/src/main/res/layout/main.xml
index 6b9e2c7..f09e92b 100644
--- a/media/MidiSynth/Application/src/main/res/layout/main.xml
+++ b/media/MidiSynth/Application/src/main/res/layout/main.xml
@@ -19,7 +19,7 @@
     android:layout_height="match_parent"
     android:orientation="vertical">
 
-    <Toolbar
+    <android.support.v7.widget.Toolbar
         android:id="@+id/toolbar"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
@@ -36,7 +36,7 @@
             android:entries="@array/senders"
             android:popupTheme="@android:style/ThemeOverlay.Material.Light" />
 
-    </Toolbar>
+    </android.support.v7.widget.Toolbar>
 
     <TextView
         android:id="@+id/message"
diff --git a/media/MidiSynth/Application/src/main/res/menu/main.xml b/media/MidiSynth/Application/src/main/res/menu/main.xml
index 33093f0..e4672e5 100644
--- a/media/MidiSynth/Application/src/main/res/menu/main.xml
+++ b/media/MidiSynth/Application/src/main/res/menu/main.xml
@@ -13,13 +13,14 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+      xmlns:app="http://schemas.android.com/apk/res-auto">
 
     <item
         android:id="@+id/action_keep_screen_on"
         android:checkable="true"
         android:checked="true"
-        android:showAsAction="never"
-        android:title="@string/keep_screen_on"/>
+        android:title="@string/keep_screen_on"
+        app:showAsAction="never"/>
 
 </menu>
diff --git a/media/MidiSynth/Application/src/main/res/values/styles.xml b/media/MidiSynth/Application/src/main/res/values/styles.xml
index 30d6455..7fdce76 100644
--- a/media/MidiSynth/Application/src/main/res/values/styles.xml
+++ b/media/MidiSynth/Application/src/main/res/values/styles.xml
@@ -16,10 +16,10 @@
 -->
 <resources>
 
-    <style name="MidiSynthTheme" parent="android:Theme.Material.Light.NoActionBar">
-        <item name="android:colorPrimary">@color/primary</item>
-        <item name="android:colorPrimaryDark">@color/primary_dark</item>
-        <item name="android:colorAccent">@color/accent</item>
+    <style name="MidiSynthTheme" parent="Theme.AppCompat.Light.NoActionBar">
+        <item name="colorPrimary">@color/primary</item>
+        <item name="colorPrimaryDark">@color/primary_dark</item>
+        <item name="colorAccent">@color/accent</item>
     </style>
 
 </resources>