diff --git a/prebuilts/gradle/ActionBarCompat-Basic/Application/build.gradle b/prebuilts/gradle/ActionBarCompat-Basic/Application/build.gradle
index 5942f78..26aa485 100644
--- a/prebuilts/gradle/ActionBarCompat-Basic/Application/build.gradle
+++ b/prebuilts/gradle/ActionBarCompat-Basic/Application/build.gradle
@@ -31,12 +31,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 7
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/ActionBarCompat-Basic/README.md b/prebuilts/gradle/ActionBarCompat-Basic/README.md
index 042d89a..f334af5 100644
--- a/prebuilts/gradle/ActionBarCompat-Basic/README.md
+++ b/prebuilts/gradle/ActionBarCompat-Basic/README.md
@@ -35,7 +35,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/ActionBarCompat-ListPopupMenu/Application/build.gradle b/prebuilts/gradle/ActionBarCompat-ListPopupMenu/Application/build.gradle
index 5942f78..26aa485 100644
--- a/prebuilts/gradle/ActionBarCompat-ListPopupMenu/Application/build.gradle
+++ b/prebuilts/gradle/ActionBarCompat-ListPopupMenu/Application/build.gradle
@@ -31,12 +31,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 7
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/ActionBarCompat-ListPopupMenu/README.md b/prebuilts/gradle/ActionBarCompat-ListPopupMenu/README.md
index 2fdc0d5..dcda24d 100644
--- a/prebuilts/gradle/ActionBarCompat-ListPopupMenu/README.md
+++ b/prebuilts/gradle/ActionBarCompat-ListPopupMenu/README.md
@@ -17,7 +17,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/ActionBarCompat-ShareActionProvider/Application/build.gradle b/prebuilts/gradle/ActionBarCompat-ShareActionProvider/Application/build.gradle
index 5942f78..26aa485 100644
--- a/prebuilts/gradle/ActionBarCompat-ShareActionProvider/Application/build.gradle
+++ b/prebuilts/gradle/ActionBarCompat-ShareActionProvider/Application/build.gradle
@@ -31,12 +31,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 7
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/ActionBarCompat-ShareActionProvider/README.md b/prebuilts/gradle/ActionBarCompat-ShareActionProvider/README.md
index e6c2d7f..8f2e0ce 100644
--- a/prebuilts/gradle/ActionBarCompat-ShareActionProvider/README.md
+++ b/prebuilts/gradle/ActionBarCompat-ShareActionProvider/README.md
@@ -22,7 +22,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/ActionBarCompat-Styled/Application/build.gradle b/prebuilts/gradle/ActionBarCompat-Styled/Application/build.gradle
index 0ee191a..88d0897 100644
--- a/prebuilts/gradle/ActionBarCompat-Styled/Application/build.gradle
+++ b/prebuilts/gradle/ActionBarCompat-Styled/Application/build.gradle
@@ -31,12 +31,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 7
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/ActionBarCompat-Styled/README.md b/prebuilts/gradle/ActionBarCompat-Styled/README.md
index 47382b2..cd7efae 100644
--- a/prebuilts/gradle/ActionBarCompat-Styled/README.md
+++ b/prebuilts/gradle/ActionBarCompat-Styled/README.md
@@ -23,7 +23,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/ActiveNotification/.google/packaging.yaml b/prebuilts/gradle/ActiveNotification/.google/packaging.yaml
deleted file mode 100644
index 5aed7be..0000000
--- a/prebuilts/gradle/ActiveNotification/.google/packaging.yaml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-# GOOGLE SAMPLE PACKAGING DATA
-#
-# This file is used by Google as part of our samples packaging process.
-# End users may safely ignore this file. It has no relevance to other systems.
----
-status:       DRAFT
-technologies: [Android]
-categories:   [Getting Started, Notification]
-languages:    [Java]
-solutions:    [Mobile]
-github:       android-ActiveNotification
-level:        INTERMEDIATE
-icon:         screenshots/icon-web.png
-apiRefs:
-    - android:android.app.NotificationManager
-license: apache2
diff --git a/prebuilts/gradle/ActiveNotification/Application/build.gradle b/prebuilts/gradle/ActiveNotification/Application/build.gradle
deleted file mode 100644
index cdec381..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/build.gradle
+++ /dev/null
@@ -1,73 +0,0 @@
-
-buildscript {
-    repositories {
-        jcenter()
-    }
-
-    dependencies {
-        classpath 'com.android.tools.build:gradle:1.1.0'
-    }
-}
-
-apply plugin: 'com.android.application'
-
-repositories {
-    jcenter()
-}
-
-dependencies {
-    compile "com.android.support:support-v4:21.0.2"
-    compile "com.android.support:support-v13:21.0.2"
-    compile "com.android.support:cardview-v7:21.0.2"
-}
-
-// The sample build uses multiple directories to
-// keep boilerplate and common code separate from
-// the main sample code.
-List<String> dirs = [
-    'main',     // main sample code; look here for the interesting stuff.
-    'common',   // components that are reused by multiple samples
-    'template'] // boilerplate code that is generated by the sample template process
-
-android {
-    compileSdkVersion "android-MNC"
-    buildToolsVersion "22.0.1"
-
-    defaultConfig {
-        minSdkVersion "android-MNC"
-        targetSdkVersion "android-MNC"
-    }
-
-    compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_7
-        targetCompatibility JavaVersion.VERSION_1_7
-    }
-
-    sourceSets {
-        main {
-            dirs.each { dir ->
-                java.srcDirs "src/${dir}/java"
-                res.srcDirs "src/${dir}/res"
-            }
-        }
-        androidTest.setRoot('tests')
-        androidTest.java.srcDirs = ['tests/src']
-
-    }
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/AndroidManifest.xml b/prebuilts/gradle/ActiveNotification/Application/src/main/AndroidManifest.xml
deleted file mode 100644
index a7110ea..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.activenotification"
-    android:versionCode="1"
-    android:versionName="1.0">
-
-    <application android:allowBackup="true"
-        android:label="@string/app_name"
-        android:icon="@mipmap/ic_launcher"
-        android:theme="@style/AppTheme">
-
-        <activity android:name=".ActiveNotificationActivity"
-                  android:label="@string/app_name">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-    </application>
-
-
-</manifest>
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/activenotification/ActiveNotificationActivity.java b/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/activenotification/ActiveNotificationActivity.java
deleted file mode 100644
index 7ac7c8c..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/activenotification/ActiveNotificationActivity.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.activenotification;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.os.Bundle;
-import android.os.PersistableBundle;
-
-public class ActiveNotificationActivity extends MainActivity {
-
-    private ActiveNotificationFragment mFragment;
-
-    protected static final String ACTION_NOTIFICATION_DELETE
-            = "com.example.android.activenotification.delete";
-
-    private BroadcastReceiver mDeleteReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            if (mFragment == null) {
-                findFragment();
-            }
-            mFragment.updateNumberOfNotifications();
-        }
-    };
-
-    @Override
-    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
-        super.onCreate(savedInstanceState, persistentState);
-        findFragment();
-        mFragment.updateNumberOfNotifications();
-    }
-
-    private void findFragment() {
-        mFragment = (ActiveNotificationFragment) getSupportFragmentManager()
-                .findFragmentById(R.id.sample_content_fragment);
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-        registerReceiver(mDeleteReceiver, new IntentFilter(ACTION_NOTIFICATION_DELETE));
-    }
-
-    @Override
-    protected void onPause() {
-        super.onPause();
-        unregisterReceiver(mDeleteReceiver);
-    }
-}
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/activenotification/ActiveNotificationFragment.java b/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/activenotification/ActiveNotificationFragment.java
deleted file mode 100644
index 0f4fbf1..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/activenotification/ActiveNotificationFragment.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package com.example.android.activenotification;
-/*
-* Copyright 2015 The Android Open Source Project
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.service.notification.StatusBarNotification;
-import android.support.v4.app.Fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import com.example.android.common.logger.Log;
-
-/**
- * A fragment that enables display of notifications.
- */
-public class ActiveNotificationFragment extends Fragment {
-
-    private static final String TAG = "ActiveNotificationFragment";
-
-    private NotificationManager mNotificationManager;
-    private TextView mNumberOfNotifications;
-
-    // Every notification needs a unique ID otherwise the previous one would be overwritten.
-    private int mNotificationId = 0;
-    private PendingIntent mDeletePendingIntent;
-
-    @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-            Bundle savedInstanceState) {
-        return inflater.inflate(R.layout.fragment_notification_builder, container, false);
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        updateNumberOfNotifications();
-    }
-
-    @Override
-    public void onViewCreated(View view, Bundle savedInstanceState) {
-        super.onViewCreated(view, savedInstanceState);
-        mNotificationManager = (NotificationManager) getActivity().getSystemService(
-                Context.NOTIFICATION_SERVICE);
-        mNumberOfNotifications = (TextView) view.findViewById(R.id.number_of_notifications);
-
-        // Supply actions to the button that is displayed on screen.
-        View.OnClickListener onClickListener = new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                switch (v.getId()) {
-                    case R.id.add_notification: {
-                        addNotificationAndReadNumber();
-                        break;
-                    }
-                }
-            }
-        };
-        view.findViewById(R.id.add_notification).setOnClickListener(onClickListener);
-
-        // [BEGIN create_pending_intent_for_deletion]
-        // Create a PendingIntent to be fired upon deletion of a Notification.
-        Intent deleteIntent = new Intent(ActiveNotificationActivity.ACTION_NOTIFICATION_DELETE);
-        mDeletePendingIntent = PendingIntent.getBroadcast(getActivity(),
-                2323 /* requestCode */, deleteIntent, 0);
-        // [END create_pending_intent_for_deletion]
-    }
-
-    /**
-     * Add a new {@link Notification} with sample data and send it to the system.
-     * Then read the current number of displayed notifications for this application.
-     */
-    private void addNotificationAndReadNumber() {
-        // [BEGIN create_notification]
-        // Create a Notification and notify the system.
-        final Notification.Builder builder = new Notification.Builder(getActivity())
-                .setSmallIcon(R.mipmap.ic_notification)
-                .setContentTitle(getString(R.string.app_name))
-                .setContentText(getString(R.string.sample_notification_content))
-                .setAutoCancel(true)
-                .setDeleteIntent(mDeletePendingIntent);
-
-        final Notification notification = builder.build();
-        mNotificationManager.notify(++mNotificationId, notification);
-        // [END create_notification]
-        Log.i(TAG, "Add a notification");
-        updateNumberOfNotifications();
-    }
-
-    /**
-     * Request the current number of notifications from the {@link NotificationManager} and
-     * display them to the user.
-     */
-    protected void updateNumberOfNotifications() {
-        // [BEGIN get_active_notifications]
-        // Query the currently displayed notifications.
-        final StatusBarNotification[] activeNotifications = mNotificationManager
-                .getActiveNotifications();
-        // [END get_active_notifications]
-        final int numberOfNotifications = activeNotifications.length;
-        mNumberOfNotifications.setText(getString(R.string.active_notifications,
-                numberOfNotifications));
-        Log.i(TAG, getString(R.string.active_notifications, numberOfNotifications));
-    }
-}
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/activenotification/MainActivity.java b/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/activenotification/MainActivity.java
deleted file mode 100644
index a1dacca..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/activenotification/MainActivity.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
-* Copyright 2013 The Android Open Source Project
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-
-package com.example.android.activenotification;
-
-import android.os.Bundle;
-import android.support.v4.app.FragmentTransaction;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.widget.ViewAnimator;
-
-import com.example.android.common.activities.SampleActivityBase;
-import com.example.android.common.logger.Log;
-import com.example.android.common.logger.LogFragment;
-import com.example.android.common.logger.LogWrapper;
-import com.example.android.common.logger.MessageOnlyLogFilter;
-
-/**
- * A simple launcher activity containing a summary sample description, sample log and a custom
- * {@link android.support.v4.app.Fragment} which can display a view.
- * <p>
- * For devices with displays with a width of 720dp or greater, the sample log is always visible,
- * on other devices it's visibility is controlled by an item on the Action Bar.
- */
-public class MainActivity extends SampleActivityBase {
-
-    public static final String TAG = "MainActivity";
-
-    // Whether the Log Fragment is currently shown
-    private boolean mLogShown;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_main);
-
-        if (savedInstanceState == null) {
-            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
-            ActiveNotificationFragment fragment = new ActiveNotificationFragment();
-            transaction.replace(R.id.sample_content_fragment, fragment);
-            transaction.commit();
-        }
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        getMenuInflater().inflate(R.menu.main, menu);
-        return true;
-    }
-
-    @Override
-    public boolean onPrepareOptionsMenu(Menu menu) {
-        MenuItem logToggle = menu.findItem(R.id.menu_toggle_log);
-        logToggle.setVisible(findViewById(R.id.sample_output) instanceof ViewAnimator);
-        logToggle.setTitle(mLogShown ? R.string.sample_hide_log : R.string.sample_show_log);
-
-        return super.onPrepareOptionsMenu(menu);
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        switch(item.getItemId()) {
-            case R.id.menu_toggle_log:
-                mLogShown = !mLogShown;
-                ViewAnimator output = (ViewAnimator) findViewById(R.id.sample_output);
-                if (mLogShown) {
-                    output.setDisplayedChild(1);
-                } else {
-                    output.setDisplayedChild(0);
-                }
-                supportInvalidateOptionsMenu();
-                return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    /** Create a chain of targets that will receive log data */
-    @Override
-    public void initializeLogging() {
-        // Wraps Android's native log framework.
-        LogWrapper logWrapper = new LogWrapper();
-        // Using Log, front-end to the logging chain, emulates android.util.log method signatures.
-        Log.setLogNode(logWrapper);
-
-        // Filter strips out everything except the message text.
-        MessageOnlyLogFilter msgFilter = new MessageOnlyLogFilter();
-        logWrapper.setNext(msgFilter);
-
-        // On screen logging via a fragment with a TextView.
-        LogFragment logFragment = (LogFragment) getSupportFragmentManager()
-                .findFragmentById(R.id.log_fragment);
-        msgFilter.setNext(logFragment.getLogView());
-
-        Log.i(TAG, "Ready");
-    }
-}
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/activities/SampleActivityBase.java b/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/activities/SampleActivityBase.java
deleted file mode 100644
index 3228927..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/activities/SampleActivityBase.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-* Copyright 2013 The Android Open Source Project
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package com.example.android.common.activities;
-
-import android.os.Bundle;
-import android.support.v4.app.FragmentActivity;
-
-import com.example.android.common.logger.Log;
-import com.example.android.common.logger.LogWrapper;
-
-/**
- * Base launcher activity, to handle most of the common plumbing for samples.
- */
-public class SampleActivityBase extends FragmentActivity {
-
-    public static final String TAG = "SampleActivityBase";
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-    }
-
-    @Override
-    protected  void onStart() {
-        super.onStart();
-        initializeLogging();
-    }
-
-    /** Set up targets to receive log data */
-    public void initializeLogging() {
-        // Using Log, front-end to the logging chain, emulates android.util.log method signatures.
-        // Wraps Android's native log framework
-        LogWrapper logWrapper = new LogWrapper();
-        Log.setLogNode(logWrapper);
-
-        Log.i(TAG, "Ready");
-    }
-}
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/logger/Log.java b/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/logger/Log.java
deleted file mode 100644
index 17503c5..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/logger/Log.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.example.android.common.logger;
-
-/**
- * Helper class for a list (or tree) of LoggerNodes.
- *
- * <p>When this is set as the head of the list,
- * an instance of it can function as a drop-in replacement for {@link android.util.Log}.
- * Most of the methods in this class server only to map a method call in Log to its equivalent
- * in LogNode.</p>
- */
-public class Log {
-    // Grabbing the native values from Android's native logging facilities,
-    // to make for easy migration and interop.
-    public static final int NONE = -1;
-    public static final int VERBOSE = android.util.Log.VERBOSE;
-    public static final int DEBUG = android.util.Log.DEBUG;
-    public static final int INFO = android.util.Log.INFO;
-    public static final int WARN = android.util.Log.WARN;
-    public static final int ERROR = android.util.Log.ERROR;
-    public static final int ASSERT = android.util.Log.ASSERT;
-
-    // Stores the beginning of the LogNode topology.
-    private static LogNode mLogNode;
-
-    /**
-     * Returns the next LogNode in the linked list.
-     */
-    public static LogNode getLogNode() {
-        return mLogNode;
-    }
-
-    /**
-     * Sets the LogNode data will be sent to.
-     */
-    public static void setLogNode(LogNode node) {
-        mLogNode = node;
-    }
-
-    /**
-     * Instructs the LogNode to print the log data provided. Other LogNodes can
-     * be chained to the end of the LogNode as desired.
-     *
-     * @param priority Log level of the data being logged. Verbose, Error, etc.
-     * @param tag Tag for for the log data. Can be used to organize log statements.
-     * @param msg The actual message to be logged.
-     * @param tr If an exception was thrown, this can be sent along for the logging facilities
-     *           to extract and print useful information.
-     */
-    public static void println(int priority, String tag, String msg, Throwable tr) {
-        if (mLogNode != null) {
-            mLogNode.println(priority, tag, msg, tr);
-        }
-    }
-
-    /**
-     * Instructs the LogNode to print the log data provided. Other LogNodes can
-     * be chained to the end of the LogNode as desired.
-     *
-     * @param priority Log level of the data being logged. Verbose, Error, etc.
-     * @param tag Tag for for the log data. Can be used to organize log statements.
-     * @param msg The actual message to be logged. The actual message to be logged.
-     */
-    public static void println(int priority, String tag, String msg) {
-        println(priority, tag, msg, null);
-    }
-
-   /**
-     * Prints a message at VERBOSE priority.
-     *
-     * @param tag Tag for for the log data. Can be used to organize log statements.
-     * @param msg The actual message to be logged.
-     * @param tr If an exception was thrown, this can be sent along for the logging facilities
-     *           to extract and print useful information.
-     */
-    public static void v(String tag, String msg, Throwable tr) {
-        println(VERBOSE, tag, msg, tr);
-    }
-
-    /**
-     * Prints a message at VERBOSE priority.
-     *
-     * @param tag Tag for for the log data. Can be used to organize log statements.
-     * @param msg The actual message to be logged.
-     */
-    public static void v(String tag, String msg) {
-        v(tag, msg, null);
-    }
-
-
-    /**
-     * Prints a message at DEBUG priority.
-     *
-     * @param tag Tag for for the log data. Can be used to organize log statements.
-     * @param msg The actual message to be logged.
-     * @param tr If an exception was thrown, this can be sent along for the logging facilities
-     *           to extract and print useful information.
-     */
-    public static void d(String tag, String msg, Throwable tr) {
-        println(DEBUG, tag, msg, tr);
-    }
-
-    /**
-     * Prints a message at DEBUG priority.
-     *
-     * @param tag Tag for for the log data. Can be used to organize log statements.
-     * @param msg The actual message to be logged.
-     */
-    public static void d(String tag, String msg) {
-        d(tag, msg, null);
-    }
-
-    /**
-     * Prints a message at INFO priority.
-     *
-     * @param tag Tag for for the log data. Can be used to organize log statements.
-     * @param msg The actual message to be logged.
-     * @param tr If an exception was thrown, this can be sent along for the logging facilities
-     *           to extract and print useful information.
-     */
-    public static void i(String tag, String msg, Throwable tr) {
-        println(INFO, tag, msg, tr);
-    }
-
-    /**
-     * Prints a message at INFO priority.
-     *
-     * @param tag Tag for for the log data. Can be used to organize log statements.
-     * @param msg The actual message to be logged.
-     */
-    public static void i(String tag, String msg) {
-        i(tag, msg, null);
-    }
-
-    /**
-     * Prints a message at WARN priority.
-     *
-     * @param tag Tag for for the log data. Can be used to organize log statements.
-     * @param msg The actual message to be logged.
-     * @param tr If an exception was thrown, this can be sent along for the logging facilities
-     *           to extract and print useful information.
-     */
-    public static void w(String tag, String msg, Throwable tr) {
-        println(WARN, tag, msg, tr);
-    }
-
-    /**
-     * Prints a message at WARN priority.
-     *
-     * @param tag Tag for for the log data. Can be used to organize log statements.
-     * @param msg The actual message to be logged.
-     */
-    public static void w(String tag, String msg) {
-        w(tag, msg, null);
-    }
-
-    /**
-     * Prints a message at WARN priority.
-     *
-     * @param tag Tag for for the log data. Can be used to organize log statements.
-     * @param tr If an exception was thrown, this can be sent along for the logging facilities
-     *           to extract and print useful information.
-     */
-    public static void w(String tag, Throwable tr) {
-        w(tag, null, tr);
-    }
-
-    /**
-     * Prints a message at ERROR priority.
-     *
-     * @param tag Tag for for the log data. Can be used to organize log statements.
-     * @param msg The actual message to be logged.
-     * @param tr If an exception was thrown, this can be sent along for the logging facilities
-     *           to extract and print useful information.
-     */
-    public static void e(String tag, String msg, Throwable tr) {
-        println(ERROR, tag, msg, tr);
-    }
-
-    /**
-     * Prints a message at ERROR priority.
-     *
-     * @param tag Tag for for the log data. Can be used to organize log statements.
-     * @param msg The actual message to be logged.
-     */
-    public static void e(String tag, String msg) {
-        e(tag, msg, null);
-    }
-
-    /**
-     * Prints a message at ASSERT priority.
-     *
-     * @param tag Tag for for the log data. Can be used to organize log statements.
-     * @param msg The actual message to be logged.
-     * @param tr If an exception was thrown, this can be sent along for the logging facilities
-     *           to extract and print useful information.
-     */
-    public static void wtf(String tag, String msg, Throwable tr) {
-        println(ASSERT, tag, msg, tr);
-    }
-
-    /**
-     * Prints a message at ASSERT priority.
-     *
-     * @param tag Tag for for the log data. Can be used to organize log statements.
-     * @param msg The actual message to be logged.
-     */
-    public static void wtf(String tag, String msg) {
-        wtf(tag, msg, null);
-    }
-
-    /**
-     * Prints a message at ASSERT priority.
-     *
-     * @param tag Tag for for the log data. Can be used to organize log statements.
-     * @param tr If an exception was thrown, this can be sent along for the logging facilities
-     *           to extract and print useful information.
-     */
-    public static void wtf(String tag, Throwable tr) {
-        wtf(tag, null, tr);
-    }
-}
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/logger/LogFragment.java b/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/logger/LogFragment.java
deleted file mode 100644
index b302acd..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/logger/LogFragment.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
-* Copyright 2013 The Android Open Source Project
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-/*
- * Copyright 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.common.logger;
-
-import android.graphics.Typeface;
-import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.text.Editable;
-import android.text.TextWatcher;
-import android.view.Gravity;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ScrollView;
-
-/**
- * Simple fraggment which contains a LogView and uses is to output log data it receives
- * through the LogNode interface.
- */
-public class LogFragment extends Fragment {
-
-    private LogView mLogView;
-    private ScrollView mScrollView;
-
-    public LogFragment() {}
-
-    public View inflateViews() {
-        mScrollView = new ScrollView(getActivity());
-        ViewGroup.LayoutParams scrollParams = new ViewGroup.LayoutParams(
-                ViewGroup.LayoutParams.MATCH_PARENT,
-                ViewGroup.LayoutParams.MATCH_PARENT);
-        mScrollView.setLayoutParams(scrollParams);
-
-        mLogView = new LogView(getActivity());
-        ViewGroup.LayoutParams logParams = new ViewGroup.LayoutParams(scrollParams);
-        logParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;
-        mLogView.setLayoutParams(logParams);
-        mLogView.setClickable(true);
-        mLogView.setFocusable(true);
-        mLogView.setTypeface(Typeface.MONOSPACE);
-
-        // Want to set padding as 16 dips, setPadding takes pixels.  Hooray math!
-        int paddingDips = 16;
-        double scale = getResources().getDisplayMetrics().density;
-        int paddingPixels = (int) ((paddingDips * (scale)) + .5);
-        mLogView.setPadding(paddingPixels, paddingPixels, paddingPixels, paddingPixels);
-        mLogView.setCompoundDrawablePadding(paddingPixels);
-
-        mLogView.setGravity(Gravity.BOTTOM);
-        mLogView.setTextAppearance(getActivity(), android.R.style.TextAppearance_Holo_Medium);
-
-        mScrollView.addView(mLogView);
-        return mScrollView;
-    }
-
-    @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-                             Bundle savedInstanceState) {
-
-        View result = inflateViews();
-
-        mLogView.addTextChangedListener(new TextWatcher() {
-            @Override
-            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
-
-            @Override
-            public void onTextChanged(CharSequence s, int start, int before, int count) {}
-
-            @Override
-            public void afterTextChanged(Editable s) {
-                mScrollView.fullScroll(ScrollView.FOCUS_DOWN);
-            }
-        });
-        return result;
-    }
-
-    public LogView getLogView() {
-        return mLogView;
-    }
-}
\ No newline at end of file
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/logger/LogNode.java b/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/logger/LogNode.java
deleted file mode 100644
index bc37cab..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/logger/LogNode.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.example.android.common.logger;
-
-/**
- * Basic interface for a logging system that can output to one or more targets.
- * Note that in addition to classes that will output these logs in some format,
- * one can also implement this interface over a filter and insert that in the chain,
- * such that no targets further down see certain data, or see manipulated forms of the data.
- * You could, for instance, write a "ToHtmlLoggerNode" that just converted all the log data
- * it received to HTML and sent it along to the next node in the chain, without printing it
- * anywhere.
- */
-public interface LogNode {
-
-    /**
-     * Instructs first LogNode in the list to print the log data provided.
-     * @param priority Log level of the data being logged.  Verbose, Error, etc.
-     * @param tag Tag for for the log data.  Can be used to organize log statements.
-     * @param msg The actual message to be logged. The actual message to be logged.
-     * @param tr If an exception was thrown, this can be sent along for the logging facilities
-     *           to extract and print useful information.
-     */
-    public void println(int priority, String tag, String msg, Throwable tr);
-
-}
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/logger/LogView.java b/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/logger/LogView.java
deleted file mode 100644
index c01542b..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/logger/LogView.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.example.android.common.logger;
-
-import android.app.Activity;
-import android.content.Context;
-import android.util.*;
-import android.widget.TextView;
-
-/** Simple TextView which is used to output log data received through the LogNode interface.
-*/
-public class LogView extends TextView implements LogNode {
-
-    public LogView(Context context) {
-        super(context);
-    }
-
-    public LogView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public LogView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-    }
-
-    /**
-     * Formats the log data and prints it out to the LogView.
-     * @param priority Log level of the data being logged.  Verbose, Error, etc.
-     * @param tag Tag for for the log data.  Can be used to organize log statements.
-     * @param msg The actual message to be logged. The actual message to be logged.
-     * @param tr If an exception was thrown, this can be sent along for the logging facilities
-     *           to extract and print useful information.
-     */
-    @Override
-    public void println(int priority, String tag, String msg, Throwable tr) {
-
-        
-        String priorityStr = null;
-
-        // For the purposes of this View, we want to print the priority as readable text.
-        switch(priority) {
-            case android.util.Log.VERBOSE:
-                priorityStr = "VERBOSE";
-                break;
-            case android.util.Log.DEBUG:
-                priorityStr = "DEBUG";
-                break;
-            case android.util.Log.INFO:
-                priorityStr = "INFO";
-                break;
-            case android.util.Log.WARN:
-                priorityStr = "WARN";
-                break;
-            case android.util.Log.ERROR:
-                priorityStr = "ERROR";
-                break;
-            case android.util.Log.ASSERT:
-                priorityStr = "ASSERT";
-                break;
-            default:
-                break;
-        }
-
-        // Handily, the Log class has a facility for converting a stack trace into a usable string.
-        String exceptionStr = null;
-        if (tr != null) {
-            exceptionStr = android.util.Log.getStackTraceString(tr);
-        }
-
-        // Take the priority, tag, message, and exception, and concatenate as necessary
-        // into one usable line of text.
-        final StringBuilder outputBuilder = new StringBuilder();
-
-        String delimiter = "\t";
-        appendIfNotNull(outputBuilder, priorityStr, delimiter);
-        appendIfNotNull(outputBuilder, tag, delimiter);
-        appendIfNotNull(outputBuilder, msg, delimiter);
-        appendIfNotNull(outputBuilder, exceptionStr, delimiter);
-
-        // In case this was originally called from an AsyncTask or some other off-UI thread,
-        // make sure the update occurs within the UI thread.
-        ((Activity) getContext()).runOnUiThread( (new Thread(new Runnable() {
-            @Override
-            public void run() {
-                // Display the text we just generated within the LogView.
-                appendToLog(outputBuilder.toString());
-            }
-        })));
-
-        if (mNext != null) {
-            mNext.println(priority, tag, msg, tr);
-        }
-    }
-
-    public LogNode getNext() {
-        return mNext;
-    }
-
-    public void setNext(LogNode node) {
-        mNext = node;
-    }
-
-    /** Takes a string and adds to it, with a separator, if the bit to be added isn't null. Since
-     * the logger takes so many arguments that might be null, this method helps cut out some of the
-     * agonizing tedium of writing the same 3 lines over and over.
-     * @param source StringBuilder containing the text to append to.
-     * @param addStr The String to append
-     * @param delimiter The String to separate the source and appended strings. A tab or comma,
-     *                  for instance.
-     * @return The fully concatenated String as a StringBuilder
-     */
-    private StringBuilder appendIfNotNull(StringBuilder source, String addStr, String delimiter) {
-        if (addStr != null) {
-            if (addStr.length() == 0) {
-                delimiter = "";
-            }
-
-            return source.append(addStr).append(delimiter);
-        }
-        return source;
-    }
-
-    // The next LogNode in the chain.
-    LogNode mNext;
-
-    /** Outputs the string as a new line of log data in the LogView. */
-    public void appendToLog(String s) {
-        append("\n" + s);
-    }
-
-
-}
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/logger/LogWrapper.java b/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/logger/LogWrapper.java
deleted file mode 100644
index 16a9e7b..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/logger/LogWrapper.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.example.android.common.logger;
-
-import android.util.Log;
-
-/**
- * Helper class which wraps Android's native Log utility in the Logger interface.  This way
- * normal DDMS output can be one of the many targets receiving and outputting logs simultaneously.
- */
-public class LogWrapper implements LogNode {
-
-    // For piping:  The next node to receive Log data after this one has done its work.
-    private LogNode mNext;
-
-    /**
-     * Returns the next LogNode in the linked list.
-     */
-    public LogNode getNext() {
-        return mNext;
-    }
-
-    /**
-     * Sets the LogNode data will be sent to..
-     */
-    public void setNext(LogNode node) {
-        mNext = node;
-    }
-
-    /**
-     * Prints data out to the console using Android's native log mechanism.
-     * @param priority Log level of the data being logged.  Verbose, Error, etc.
-     * @param tag Tag for for the log data.  Can be used to organize log statements.
-     * @param msg The actual message to be logged. The actual message to be logged.
-     * @param tr If an exception was thrown, this can be sent along for the logging facilities
-     *           to extract and print useful information.
-     */
-    @Override
-    public void println(int priority, String tag, String msg, Throwable tr) {
-        // There actually are log methods that don't take a msg parameter.  For now,
-        // if that's the case, just convert null to the empty string and move on.
-        String useMsg = msg;
-        if (useMsg == null) {
-            useMsg = "";
-        }
-
-        // If an exeption was provided, convert that exception to a usable string and attach
-        // it to the end of the msg method.
-        if (tr != null) {
-            msg += "\n" + Log.getStackTraceString(tr);
-        }
-
-        // This is functionally identical to Log.x(tag, useMsg);
-        // For instance, if priority were Log.VERBOSE, this would be the same as Log.v(tag, useMsg)
-        Log.println(priority, tag, useMsg);
-
-        // If this isn't the last node in the chain, move things along.
-        if (mNext != null) {
-            mNext.println(priority, tag, msg, tr);
-        }
-    }
-}
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/logger/MessageOnlyLogFilter.java b/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/logger/MessageOnlyLogFilter.java
deleted file mode 100644
index 19967dc..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/java/com/example/android/common/logger/MessageOnlyLogFilter.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.example.android.common.logger;
-
-/**
- * Simple {@link LogNode} filter, removes everything except the message.
- * Useful for situations like on-screen log output where you don't want a lot of metadata displayed,
- * just easy-to-read message updates as they're happening.
- */
-public class MessageOnlyLogFilter implements LogNode {
-
-    LogNode mNext;
-
-    /**
-     * Takes the "next" LogNode as a parameter, to simplify chaining.
-     *
-     * @param next The next LogNode in the pipeline.
-     */
-    public MessageOnlyLogFilter(LogNode next) {
-        mNext = next;
-    }
-
-    public MessageOnlyLogFilter() {
-    }
-
-    @Override
-    public void println(int priority, String tag, String msg, Throwable tr) {
-        if (mNext != null) {
-            getNext().println(Log.NONE, null, msg, null);
-        }
-    }
-
-    /**
-     * Returns the next LogNode in the chain.
-     */
-    public LogNode getNext() {
-        return mNext;
-    }
-
-    /**
-     * Sets the LogNode data will be sent to..
-     */
-    public void setNext(LogNode node) {
-        mNext = node;
-    }
-
-}
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/drawable-hdpi/tile.9.png b/prebuilts/gradle/ActiveNotification/Application/src/main/res/drawable-hdpi/tile.9.png
deleted file mode 100644
index 1358628..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/drawable-hdpi/tile.9.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/layout-w720dp/activity_main.xml b/prebuilts/gradle/ActiveNotification/Application/src/main/res/layout-w720dp/activity_main.xml
deleted file mode 100755
index c9a52f6..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/layout-w720dp/activity_main.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<!--
-  Copyright 2013 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-<LinearLayout
-      xmlns:android="http://schemas.android.com/apk/res/android"
-      android:orientation="horizontal"
-      android:layout_width="match_parent"
-      android:layout_height="match_parent"
-      android:id="@+id/sample_main_layout">
-
-    <LinearLayout
-          android:id="@+id/sample_output"
-          android:layout_width="0px"
-          android:layout_height="match_parent"
-          android:layout_weight="1"
-          android:orientation="vertical">
-
-        <FrameLayout
-              style="@style/Widget.SampleMessageTile"
-              android:layout_width="match_parent"
-              android:layout_height="wrap_content">
-
-            <TextView
-                  style="@style/Widget.SampleMessage"
-                  android:layout_width="match_parent"
-                  android:layout_height="wrap_content"
-                  android:paddingLeft="@dimen/margin_medium"
-                  android:paddingRight="@dimen/margin_medium"
-                  android:paddingTop="@dimen/margin_large"
-                  android:paddingBottom="@dimen/margin_large"
-                  android:text="@string/intro_message" />
-        </FrameLayout>
-
-        <View
-              android:layout_width="match_parent"
-              android:layout_height="1dp"
-              android:background="@android:color/darker_gray" />
-
-        <fragment
-              android:name="com.example.android.common.logger.LogFragment"
-              android:id="@+id/log_fragment"
-              android:layout_width="match_parent"
-              android:layout_height="0px"
-              android:layout_weight="1" />
-
-    </LinearLayout>
-
-    <View
-          android:layout_width="1dp"
-          android:layout_height="match_parent"
-          android:background="@android:color/darker_gray" />
-
-    <FrameLayout
-          android:id="@+id/sample_content_fragment"
-          android:layout_weight="2"
-          android:layout_width="0px"
-          android:layout_height="match_parent" />
-
-</LinearLayout>
-
-
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/layout/activity_main.xml b/prebuilts/gradle/ActiveNotification/Application/src/main/res/layout/activity_main.xml
deleted file mode 100755
index 1ae4f98..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/layout/activity_main.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<!--
-  Copyright 2013 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-<LinearLayout
-      xmlns:android="http://schemas.android.com/apk/res/android"
-      android:orientation="vertical"
-      android:layout_width="match_parent"
-      android:layout_height="match_parent"
-      android:id="@+id/sample_main_layout">
-
-    <ViewAnimator
-          android:id="@+id/sample_output"
-          android:layout_width="match_parent"
-          android:layout_height="0px"
-          android:layout_weight="1">
-
-        <ScrollView
-              style="@style/Widget.SampleMessageTile"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent">
-
-            <TextView
-                  style="@style/Widget.SampleMessage"
-                  android:layout_width="match_parent"
-                  android:layout_height="wrap_content"
-                  android:paddingLeft="@dimen/horizontal_page_margin"
-                  android:paddingRight="@dimen/horizontal_page_margin"
-                  android:paddingTop="@dimen/vertical_page_margin"
-                  android:paddingBottom="@dimen/vertical_page_margin"
-                  android:text="@string/intro_message" />
-        </ScrollView>
-
-        <fragment
-              android:name="com.example.android.common.logger.LogFragment"
-              android:id="@+id/log_fragment"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent" />
-
-    </ViewAnimator>
-
-    <View
-          android:layout_width="match_parent"
-          android:layout_height="1dp"
-          android:background="@android:color/darker_gray" />
-
-    <FrameLayout
-          android:id="@+id/sample_content_fragment"
-          android:layout_weight="2"
-          android:layout_width="match_parent"
-          android:layout_height="0px" />
-
-</LinearLayout>
-
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/layout/fragment_notification_builder.xml b/prebuilts/gradle/ActiveNotification/Application/src/main/res/layout/fragment_notification_builder.xml
deleted file mode 100644
index 379cd5e..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/layout/fragment_notification_builder.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content">
-    <Button
-        android:id="@+id/add_notification"
-        android:text="@string/add_a_notification"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content" />
-    </LinearLayout>
-
-    <TextView
-        style="@android:style/TextAppearance.Material.Large"
-        android:id="@+id/number_of_notifications"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content" />
-</LinearLayout>
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/menu/main.xml b/prebuilts/gradle/ActiveNotification/Application/src/main/res/menu/main.xml
deleted file mode 100644
index b49c2c5..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/menu/main.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<!--
-  Copyright 2013 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:id="@+id/menu_toggle_log"
-          android:showAsAction="always"
-          android:title="@string/sample_show_log" />
-</menu>
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-hdpi/ic_launcher.png b/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index b176e69..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-hdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-hdpi/ic_notification.png b/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-hdpi/ic_notification.png
deleted file mode 100644
index efb231d..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-hdpi/ic_notification.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-mdpi/ic_launcher.png b/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index 205654f..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-mdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-mdpi/ic_notification.png b/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-mdpi/ic_notification.png
deleted file mode 100644
index b5f1bc9..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-mdpi/ic_notification.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-xhdpi/ic_launcher.png b/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index 98262ee..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-xhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-xhdpi/ic_notification.png b/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-xhdpi/ic_notification.png
deleted file mode 100644
index 3361f2d..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-xhdpi/ic_notification.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png b/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 325875a..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-xxhdpi/ic_notification.png b/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-xxhdpi/ic_notification.png
deleted file mode 100644
index 7d1946a..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-xxhdpi/ic_notification.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 254c775..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-xxxhdpi/ic_notification.png b/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-xxxhdpi/ic_notification.png
deleted file mode 100644
index 47b12c9..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/mipmap-xxxhdpi/ic_notification.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values-sw600dp/template-dimens.xml b/prebuilts/gradle/ActiveNotification/Application/src/main/res/values-sw600dp/template-dimens.xml
deleted file mode 100644
index 22074a2..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values-sw600dp/template-dimens.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--
-  Copyright 2013 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Semantic definitions -->
-
-    <dimen name="horizontal_page_margin">@dimen/margin_huge</dimen>
-    <dimen name="vertical_page_margin">@dimen/margin_medium</dimen>
-
-</resources>
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values-sw600dp/template-styles.xml b/prebuilts/gradle/ActiveNotification/Application/src/main/res/values-sw600dp/template-styles.xml
deleted file mode 100644
index 03d1974..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values-sw600dp/template-styles.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<!--
-  Copyright 2013 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <style name="Widget.SampleMessage">
-        <item name="android:textAppearance">?android:textAppearanceLarge</item>
-        <item name="android:lineSpacingMultiplier">1.2</item>
-        <item name="android:shadowDy">-6.5</item>
-    </style>
-
-</resources>
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values-v21/base-colors.xml b/prebuilts/gradle/ActiveNotification/Application/src/main/res/values-v21/base-colors.xml
deleted file mode 100644
index 8b6ec3f..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values-v21/base-colors.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<resources>
-
-
-</resources>
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values-v21/base-template-styles.xml b/prebuilts/gradle/ActiveNotification/Application/src/main/res/values-v21/base-template-styles.xml
deleted file mode 100644
index c778e4f..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values-v21/base-template-styles.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light">
-    </style>
-
-</resources>
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values/base-strings.xml b/prebuilts/gradle/ActiveNotification/Application/src/main/res/values/base-strings.xml
deleted file mode 100644
index 5fc846c..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values/base-strings.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<resources>
-    <string name="app_name">ActiveNotification</string>
-    <string name="intro_message">
-        <![CDATA[
-        
-            
-The NotificationManager can tell you how many notifications your application is currently showing.
-This sample demonstrates how to use this API that has been introduced with Android M.
-To get started, press the "add a notification" button.
-When a notification is being canceled, the count gets updated via a PendingIntent.
-            
-        
-        ]]>
-    </string>
-</resources>
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values/fragmentview_strings.xml b/prebuilts/gradle/ActiveNotification/Application/src/main/res/values/fragmentview_strings.xml
deleted file mode 100755
index 7b9d9ec..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values/fragmentview_strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<!--
-  Copyright 2013 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<resources>
-    <string name="sample_show_log">Show Log</string>
-    <string name="sample_hide_log">Hide Log</string>
-</resources>
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values/strings.xml b/prebuilts/gradle/ActiveNotification/Application/src/main/res/values/strings.xml
deleted file mode 100644
index 0f2977d..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources>
- <string name="add_a_notification">Add a notification</string>
- <string name="active_notifications">Active Notifications: %1$s</string>
- <string name="update_notification_count">Update count</string>
- <string name="sample_notification_content">This is a sample notification.</string>
-</resources>
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values/template-dimens.xml b/prebuilts/gradle/ActiveNotification/Application/src/main/res/values/template-dimens.xml
deleted file mode 100644
index 39e710b..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values/template-dimens.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<!--
-  Copyright 2013 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Define standard dimensions to comply with Holo-style grids and rhythm. -->
-
-    <dimen name="margin_tiny">4dp</dimen>
-    <dimen name="margin_small">8dp</dimen>
-    <dimen name="margin_medium">16dp</dimen>
-    <dimen name="margin_large">32dp</dimen>
-    <dimen name="margin_huge">64dp</dimen>
-
-    <!-- Semantic definitions -->
-
-    <dimen name="horizontal_page_margin">@dimen/margin_medium</dimen>
-    <dimen name="vertical_page_margin">@dimen/margin_medium</dimen>
-
-</resources>
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values/template-styles.xml b/prebuilts/gradle/ActiveNotification/Application/src/main/res/values/template-styles.xml
deleted file mode 100644
index 6e7d593..0000000
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values/template-styles.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<!--
-  Copyright 2013 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-
-    <style name="Theme.Base" parent="android:Theme.Light" />
-
-    <style name="Theme.Sample" parent="Theme.Base" />
-
-    <style name="AppTheme" parent="Theme.Sample" />
-    <!-- Widget styling -->
-
-    <style name="Widget" />
-
-    <style name="Widget.SampleMessage">
-        <item name="android:textAppearance">?android:textAppearanceMedium</item>
-        <item name="android:lineSpacingMultiplier">1.1</item>
-    </style>
-
-    <style name="Widget.SampleMessageTile">
-        <item name="android:background">@drawable/tile</item>
-        <item name="android:shadowColor">#7F000000</item>
-        <item name="android:shadowDy">-3.5</item>
-        <item name="android:shadowRadius">2</item>
-    </style>
-
-</resources>
diff --git a/prebuilts/gradle/ActiveNotification/CONTRIBUTING.md b/prebuilts/gradle/ActiveNotification/CONTRIBUTING.md
deleted file mode 100644
index faa8b5c..0000000
--- a/prebuilts/gradle/ActiveNotification/CONTRIBUTING.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# How to become a contributor and submit your own code
-
-## Contributor License Agreements
-
-We'd love to accept your sample apps and patches! Before we can take them, we
-have to jump a couple of legal hurdles.
-
-Please fill out either the individual or corporate Contributor License Agreement (CLA).
-
-  * If you are an individual writing original source code and you're sure you
-    own the intellectual property, then you'll need to sign an [individual CLA]
-    (https://cla.developers.google.com).
-  * If you work for a company that wants to allow you to contribute your work,
-    then you'll need to sign a [corporate CLA]
-    (https://cla.developers.google.com).
-
-Follow either of the two links above to access the appropriate CLA and
-instructions for how to sign and return it. Once we receive it, we'll be able to
-accept your pull requests.
-
-## Contributing A Patch
-
-1. Submit an issue describing your proposed change to the repo in question.
-1. The repo owner will respond to your issue promptly.
-1. If your proposed change is accepted, and you haven't already done so, sign a
-   Contributor License Agreement (see details above).
-1. Fork the desired repo, develop and test your code changes.
-1. Ensure that your code adheres to the existing style in the sample to which
-   you are contributing. Refer to the
-   [Android Code Style Guide]
-   (https://source.android.com/source/code-style.html) for the
-   recommended coding standards for this organization.
-1. Ensure that your code has an appropriate set of unit tests which all pass.
-1. Submit a pull request.
-
diff --git a/prebuilts/gradle/ActiveNotification/LICENSE b/prebuilts/gradle/ActiveNotification/LICENSE
deleted file mode 100644
index 1af981f..0000000
--- a/prebuilts/gradle/ActiveNotification/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright 2014 The Android Open Source Project
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/prebuilts/gradle/ActiveNotification/README.md b/prebuilts/gradle/ActiveNotification/README.md
deleted file mode 100644
index af886d3..0000000
--- a/prebuilts/gradle/ActiveNotification/README.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-Android ActiveNotification Sample
-===================================
-
-The NotificationManager can tell you how many notifications your application is
-            currently showing. This sample demonstrates how to use this API that has been
-            introduced with Android M.
-
-Introduction
-------------
-
-The [NotificationManager][1] has become more powerful.
-            Starting with Android M, you can query it for the active notifications that
-            your app sent using the [notify][2] methods.
-
-            This sample demonstrates simple use of this newly added functionality by
-            allowing a user to add notifications and then querying how many notifications
-            are currently being displayed via the [getActiveNotifications()][3] method.
-
-            [1]: https://developer.android.com/reference/android/app/NotificationManager.html
-            [2]: https://developer.android.com/reference/android/app/NotificationManager.html#notify(int, android.app.Notification)
-            [2]: https://developer.android.com/reference/android/app/NotificationManager.html#getActiveNotifications()
-
-Pre-requisites
---------------
-
-- Android SDK vandroid-MNC
-- Android Build Tools v22.0.1
-- Android Support Repository
-
-Screenshots
--------------
-
-<img src="screenshots/screenshot01.png" height="400" alt="Screenshot"/> <img src="screenshots/screenshot02.png" height="400" alt="Screenshot"/> <img src="screenshots/screenshot03.png" height="400" alt="Screenshot"/> 
-
-Getting Started
----------------
-
-This sample uses the Gradle build system. To build this project, use the
-"gradlew build" command or use "Import Project" in Android Studio.
-
-Support
--------
-
-- Google+ Community: https://plus.google.com/communities/105153134372062985968
-- Stack Overflow: http://stackoverflow.com/questions/tagged/android
-
-If you've found an error in this sample, please file an issue:
-https://github.com/googlesamples/android-ActiveNotification
-
-Patches are encouraged, and may be submitted by forking this project and
-submitting a pull request through GitHub. Please see CONTRIBUTING.md for more details.
-
-License
--------
-
-Copyright 2014 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
-additional information regarding copyright ownership.  The ASF licenses this
-file to you under the Apache License, Version 2.0 (the "License"); you may not
-use this file except in compliance with the License.  You may obtain a copy of
-the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
-License for the specific language governing permissions and limitations under
-the License.
diff --git a/prebuilts/gradle/ActiveNotification/build.gradle b/prebuilts/gradle/ActiveNotification/build.gradle
deleted file mode 100644
index 1dac6de..0000000
--- a/prebuilts/gradle/ActiveNotification/build.gradle
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/prebuilts/gradle/ActiveNotification/gradle/wrapper/gradle-wrapper.jar b/prebuilts/gradle/ActiveNotification/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 8c0fb64..0000000
--- a/prebuilts/gradle/ActiveNotification/gradle/wrapper/gradle-wrapper.jar
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ActiveNotification/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ActiveNotification/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index afb3296..0000000
--- a/prebuilts/gradle/ActiveNotification/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Wed Apr 10 15:27:10 PDT 2013
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=http\://services.gradle.org/distributions/gradle-2.2.1-bin.zip
diff --git a/prebuilts/gradle/ActiveNotification/gradlew b/prebuilts/gradle/ActiveNotification/gradlew
deleted file mode 100755
index 91a7e26..0000000
--- a/prebuilts/gradle/ActiveNotification/gradlew
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/usr/bin/env bash
-
-##############################################################################
-##
-##  Gradle start up script for UN*X
-##
-##############################################################################
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn ( ) {
-    echo "$*"
-}
-
-die ( ) {
-    echo
-    echo "$*"
-    echo
-    exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-case "`uname`" in
-  CYGWIN* )
-    cygwin=true
-    ;;
-  Darwin* )
-    darwin=true
-    ;;
-  MINGW* )
-    msys=true
-    ;;
-esac
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched.
-if $cygwin ; then
-    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-fi
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-        PRG="$link"
-    else
-        PRG=`dirname "$PRG"`"/$link"
-    fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >&-
-APP_HOME="`pwd -P`"
-cd "$SAVED" >&-
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-        # IBM's JDK on AIX uses strange locations for the executables
-        JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-        JAVACMD="$JAVA_HOME/bin/java"
-    fi
-    if [ ! -x "$JAVACMD" ] ; then
-        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-    fi
-else
-    JAVACMD="java"
-    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
-    MAX_FD_LIMIT=`ulimit -H -n`
-    if [ $? -eq 0 ] ; then
-        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
-            MAX_FD="$MAX_FD_LIMIT"
-        fi
-        ulimit -n $MAX_FD
-        if [ $? -ne 0 ] ; then
-            warn "Could not set maximum file descriptor limit: $MAX_FD"
-        fi
-    else
-        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
-    fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
-    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
-    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
-    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-
-    # We build the pattern for arguments to be converted via cygpath
-    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
-    SEP=""
-    for dir in $ROOTDIRSRAW ; do
-        ROOTDIRS="$ROOTDIRS$SEP$dir"
-        SEP="|"
-    done
-    OURCYGPATTERN="(^($ROOTDIRS))"
-    # Add a user-defined pattern to the cygpath arguments
-    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
-        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
-    fi
-    # Now convert the arguments - kludge to limit ourselves to /bin/sh
-    i=0
-    for arg in "$@" ; do
-        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
-        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
-
-        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
-            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
-        else
-            eval `echo args$i`="\"$arg\""
-        fi
-        i=$((i+1))
-    done
-    case $i in
-        (0) set -- ;;
-        (1) set -- "$args0" ;;
-        (2) set -- "$args0" "$args1" ;;
-        (3) set -- "$args0" "$args1" "$args2" ;;
-        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
-        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
-        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
-        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
-        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
-        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
-    esac
-fi
-
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
-    JVM_OPTS=("$@")
-}
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
-
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/prebuilts/gradle/ActiveNotification/gradlew.bat b/prebuilts/gradle/ActiveNotification/gradlew.bat
deleted file mode 100644
index aec9973..0000000
--- a/prebuilts/gradle/ActiveNotification/gradlew.bat
+++ /dev/null
@@ -1,90 +0,0 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem  Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windowz variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/prebuilts/gradle/ActiveNotification/screenshots/icon_web.png b/prebuilts/gradle/ActiveNotification/screenshots/icon_web.png
deleted file mode 100644
index 063813b..0000000
--- a/prebuilts/gradle/ActiveNotification/screenshots/icon_web.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ActiveNotification/screenshots/screenshot01.png b/prebuilts/gradle/ActiveNotification/screenshots/screenshot01.png
deleted file mode 100644
index f37e97f..0000000
--- a/prebuilts/gradle/ActiveNotification/screenshots/screenshot01.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ActiveNotification/screenshots/screenshot02.png b/prebuilts/gradle/ActiveNotification/screenshots/screenshot02.png
deleted file mode 100644
index 46c3408..0000000
--- a/prebuilts/gradle/ActiveNotification/screenshots/screenshot02.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ActiveNotification/screenshots/screenshot03.png b/prebuilts/gradle/ActiveNotification/screenshots/screenshot03.png
deleted file mode 100644
index 702f299..0000000
--- a/prebuilts/gradle/ActiveNotification/screenshots/screenshot03.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ActiveNotification/settings.gradle b/prebuilts/gradle/ActiveNotification/settings.gradle
deleted file mode 100644
index 9464a35..0000000
--- a/prebuilts/gradle/ActiveNotification/settings.gradle
+++ /dev/null
@@ -1 +0,0 @@
-include 'Application'
diff --git a/prebuilts/gradle/ActiveNotifications/Application/build.gradle b/prebuilts/gradle/ActiveNotifications/Application/build.gradle
index c467c43..f301d92 100644
--- a/prebuilts/gradle/ActiveNotifications/Application/build.gradle
+++ b/prebuilts/gradle/ActiveNotifications/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion "android-MNC"
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
-        minSdkVersion "MNC"
-        targetSdkVersion "MNC"
+        minSdkVersion 23
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/ActiveNotifications/README.md b/prebuilts/gradle/ActiveNotifications/README.md
index af886d3..592f8ce 100644
--- a/prebuilts/gradle/ActiveNotifications/README.md
+++ b/prebuilts/gradle/ActiveNotifications/README.md
@@ -24,7 +24,7 @@
 Pre-requisites
 --------------
 
-- Android SDK vandroid-MNC
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/ActivityInstrumentation/Application/build.gradle b/prebuilts/gradle/ActivityInstrumentation/Application/build.gradle
index 672e647..03141e9 100644
--- a/prebuilts/gradle/ActivityInstrumentation/Application/build.gradle
+++ b/prebuilts/gradle/ActivityInstrumentation/Application/build.gradle
@@ -28,12 +28,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 4
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/ActivityInstrumentation/README.md b/prebuilts/gradle/ActivityInstrumentation/README.md
index 3a6f93a..49496f7 100644
--- a/prebuilts/gradle/ActivityInstrumentation/README.md
+++ b/prebuilts/gradle/ActivityInstrumentation/README.md
@@ -8,7 +8,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/AdvancedImmersiveMode/Application/build.gradle b/prebuilts/gradle/AdvancedImmersiveMode/Application/build.gradle
index db9a58b..0fe145d 100644
--- a/prebuilts/gradle/AdvancedImmersiveMode/Application/build.gradle
+++ b/prebuilts/gradle/AdvancedImmersiveMode/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 19
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/AdvancedImmersiveMode/README.md b/prebuilts/gradle/AdvancedImmersiveMode/README.md
index 1f07373..a0b2fdd 100644
--- a/prebuilts/gradle/AdvancedImmersiveMode/README.md
+++ b/prebuilts/gradle/AdvancedImmersiveMode/README.md
@@ -26,7 +26,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/AgendaData/Application/build.gradle b/prebuilts/gradle/AgendaData/Application/build.gradle
index b51c137..9680f2b 100644
--- a/prebuilts/gradle/AgendaData/Application/build.gradle
+++ b/prebuilts/gradle/AgendaData/Application/build.gradle
@@ -33,12 +33,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/AgendaData/README.md b/prebuilts/gradle/AgendaData/README.md
index c4077a1..9f23122 100644
--- a/prebuilts/gradle/AgendaData/README.md
+++ b/prebuilts/gradle/AgendaData/README.md
@@ -22,7 +22,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/AgendaData/Wearable/build.gradle b/prebuilts/gradle/AgendaData/Wearable/build.gradle
index e686405..2bab61f 100644
--- a/prebuilts/gradle/AgendaData/Wearable/build.gradle
+++ b/prebuilts/gradle/AgendaData/Wearable/build.gradle
@@ -31,7 +31,7 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
@@ -40,13 +40,6 @@
         versionName "1.0"
     }
 
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
diff --git a/prebuilts/gradle/AlwaysOn/README.md b/prebuilts/gradle/AlwaysOn/README.md
index 1f7b6ef..1ba3a88 100644
--- a/prebuilts/gradle/AlwaysOn/README.md
+++ b/prebuilts/gradle/AlwaysOn/README.md
@@ -24,7 +24,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/AlwaysOn/Wearable/build.gradle b/prebuilts/gradle/AlwaysOn/Wearable/build.gradle
index 712537f..5f66030 100644
--- a/prebuilts/gradle/AlwaysOn/Wearable/build.gradle
+++ b/prebuilts/gradle/AlwaysOn/Wearable/build.gradle
@@ -33,7 +33,7 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
@@ -42,13 +42,6 @@
         versionName "1.0"
     }
 
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
diff --git a/prebuilts/gradle/AppRestrictions/Application/build.gradle b/prebuilts/gradle/AppRestrictions/Application/build.gradle
index 054db59..df32b0f 100644
--- a/prebuilts/gradle/AppRestrictions/Application/build.gradle
+++ b/prebuilts/gradle/AppRestrictions/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/AppRestrictions/README.md b/prebuilts/gradle/AppRestrictions/README.md
index b5af577..120299c 100644
--- a/prebuilts/gradle/AppRestrictions/README.md
+++ b/prebuilts/gradle/AppRestrictions/README.md
@@ -12,7 +12,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/AppUsageStatistics/Application/build.gradle b/prebuilts/gradle/AppUsageStatistics/Application/build.gradle
index 8c5491d..4027044 100644
--- a/prebuilts/gradle/AppUsageStatistics/Application/build.gradle
+++ b/prebuilts/gradle/AppUsageStatistics/Application/build.gradle
@@ -32,12 +32,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 21
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/AppUsageStatistics/README.md b/prebuilts/gradle/AppUsageStatistics/README.md
index f8c3519..f9aeaac 100644
--- a/prebuilts/gradle/AppUsageStatistics/README.md
+++ b/prebuilts/gradle/AppUsageStatistics/README.md
@@ -49,7 +49,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/AutoBackupForApps/Application/build.gradle b/prebuilts/gradle/AutoBackupForApps/Application/build.gradle
index 96fc041..f301d92 100644
--- a/prebuilts/gradle/AutoBackupForApps/Application/build.gradle
+++ b/prebuilts/gradle/AutoBackupForApps/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion "android-MNC"
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
-        minSdkVersion "MNC"
-        targetSdkVersion "android-MNC"
+        minSdkVersion 23
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/AutoBackupForApps/README.md b/prebuilts/gradle/AutoBackupForApps/README.md
index a3659ae..d3d98fb 100644
--- a/prebuilts/gradle/AutoBackupForApps/README.md
+++ b/prebuilts/gradle/AutoBackupForApps/README.md
@@ -26,7 +26,7 @@
 Pre-requisites
 --------------
 
-- Android SDK vandroid-MNC
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/BasicAccessibility/Application/build.gradle b/prebuilts/gradle/BasicAccessibility/Application/build.gradle
index 36a255f..51afa0f 100644
--- a/prebuilts/gradle/BasicAccessibility/Application/build.gradle
+++ b/prebuilts/gradle/BasicAccessibility/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 11
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/BasicAccessibility/README.md b/prebuilts/gradle/BasicAccessibility/README.md
index 57a66ae..3f47ba5 100644
--- a/prebuilts/gradle/BasicAccessibility/README.md
+++ b/prebuilts/gradle/BasicAccessibility/README.md
@@ -20,7 +20,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/BasicAndroidKeyStore/Application/build.gradle b/prebuilts/gradle/BasicAndroidKeyStore/Application/build.gradle
index 054db59..df32b0f 100644
--- a/prebuilts/gradle/BasicAndroidKeyStore/Application/build.gradle
+++ b/prebuilts/gradle/BasicAndroidKeyStore/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/BasicAndroidKeyStore/README.md b/prebuilts/gradle/BasicAndroidKeyStore/README.md
index c86cd8f..44514b7 100644
--- a/prebuilts/gradle/BasicAndroidKeyStore/README.md
+++ b/prebuilts/gradle/BasicAndroidKeyStore/README.md
@@ -23,7 +23,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/BasicContactables/Application/build.gradle b/prebuilts/gradle/BasicContactables/Application/build.gradle
index 054db59..df32b0f 100644
--- a/prebuilts/gradle/BasicContactables/Application/build.gradle
+++ b/prebuilts/gradle/BasicContactables/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/BasicContactables/README.md b/prebuilts/gradle/BasicContactables/README.md
index 4e2ccbd..8dfcf47 100644
--- a/prebuilts/gradle/BasicContactables/README.md
+++ b/prebuilts/gradle/BasicContactables/README.md
@@ -25,7 +25,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/BasicGestureDetect/Application/build.gradle b/prebuilts/gradle/BasicGestureDetect/Application/build.gradle
index 054db59..df32b0f 100644
--- a/prebuilts/gradle/BasicGestureDetect/Application/build.gradle
+++ b/prebuilts/gradle/BasicGestureDetect/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/BasicGestureDetect/README.md b/prebuilts/gradle/BasicGestureDetect/README.md
index 89d2d7b..10ed465 100644
--- a/prebuilts/gradle/BasicGestureDetect/README.md
+++ b/prebuilts/gradle/BasicGestureDetect/README.md
@@ -24,7 +24,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/BasicImmersiveMode/Application/build.gradle b/prebuilts/gradle/BasicImmersiveMode/Application/build.gradle
index db9a58b..0fe145d 100644
--- a/prebuilts/gradle/BasicImmersiveMode/Application/build.gradle
+++ b/prebuilts/gradle/BasicImmersiveMode/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 19
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/BasicImmersiveMode/README.md b/prebuilts/gradle/BasicImmersiveMode/README.md
index a4cc2f8..fbdba6a 100644
--- a/prebuilts/gradle/BasicImmersiveMode/README.md
+++ b/prebuilts/gradle/BasicImmersiveMode/README.md
@@ -19,7 +19,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/BasicMediaDecoder/Application/build.gradle b/prebuilts/gradle/BasicMediaDecoder/Application/build.gradle
index 2ffcd57..f1a5d72 100644
--- a/prebuilts/gradle/BasicMediaDecoder/Application/build.gradle
+++ b/prebuilts/gradle/BasicMediaDecoder/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 17
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/BasicMediaDecoder/README.md b/prebuilts/gradle/BasicMediaDecoder/README.md
index c97ba0d..d4cd1ab 100644
--- a/prebuilts/gradle/BasicMediaDecoder/README.md
+++ b/prebuilts/gradle/BasicMediaDecoder/README.md
@@ -54,7 +54,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/BasicMediaRouter/Application/build.gradle b/prebuilts/gradle/BasicMediaRouter/Application/build.gradle
index 2ffcd57..f1a5d72 100644
--- a/prebuilts/gradle/BasicMediaRouter/Application/build.gradle
+++ b/prebuilts/gradle/BasicMediaRouter/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 17
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/BasicMediaRouter/README.md b/prebuilts/gradle/BasicMediaRouter/README.md
index 6611b81..712d456 100644
--- a/prebuilts/gradle/BasicMediaRouter/README.md
+++ b/prebuilts/gradle/BasicMediaRouter/README.md
@@ -14,7 +14,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/BasicMultitouch/Application/build.gradle b/prebuilts/gradle/BasicMultitouch/Application/build.gradle
index d7467d8..5eb1d01 100644
--- a/prebuilts/gradle/BasicMultitouch/Application/build.gradle
+++ b/prebuilts/gradle/BasicMultitouch/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 8
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/BasicMultitouch/README.md b/prebuilts/gradle/BasicMultitouch/README.md
index b8b15c2..27889e9 100644
--- a/prebuilts/gradle/BasicMultitouch/README.md
+++ b/prebuilts/gradle/BasicMultitouch/README.md
@@ -29,7 +29,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/BasicNetworking/Application/build.gradle b/prebuilts/gradle/BasicNetworking/Application/build.gradle
index 672e647..03141e9 100644
--- a/prebuilts/gradle/BasicNetworking/Application/build.gradle
+++ b/prebuilts/gradle/BasicNetworking/Application/build.gradle
@@ -28,12 +28,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 4
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/BasicNetworking/README.md b/prebuilts/gradle/BasicNetworking/README.md
index a4a1808..d95f296 100644
--- a/prebuilts/gradle/BasicNetworking/README.md
+++ b/prebuilts/gradle/BasicNetworking/README.md
@@ -22,7 +22,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/BasicNotifications/Application/build.gradle b/prebuilts/gradle/BasicNotifications/Application/build.gradle
index d7467d8..5eb1d01 100644
--- a/prebuilts/gradle/BasicNotifications/Application/build.gradle
+++ b/prebuilts/gradle/BasicNotifications/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 8
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/BasicNotifications/README.md b/prebuilts/gradle/BasicNotifications/README.md
index e6f54f5..3794a4c 100644
--- a/prebuilts/gradle/BasicNotifications/README.md
+++ b/prebuilts/gradle/BasicNotifications/README.md
@@ -53,7 +53,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/BasicRenderScript/Application/build.gradle b/prebuilts/gradle/BasicRenderScript/Application/build.gradle
index 88f626a..800d174 100644
--- a/prebuilts/gradle/BasicRenderScript/Application/build.gradle
+++ b/prebuilts/gradle/BasicRenderScript/Application/build.gradle
@@ -31,12 +31,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 16
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/BasicRenderScript/README.md b/prebuilts/gradle/BasicRenderScript/README.md
index deb9cc2..d22df03 100644
--- a/prebuilts/gradle/BasicRenderScript/README.md
+++ b/prebuilts/gradle/BasicRenderScript/README.md
@@ -28,7 +28,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/BasicSyncAdapter/Application/build.gradle b/prebuilts/gradle/BasicSyncAdapter/Application/build.gradle
index e42b20a..3ecaa88 100644
--- a/prebuilts/gradle/BasicSyncAdapter/Application/build.gradle
+++ b/prebuilts/gradle/BasicSyncAdapter/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 7
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/BasicSyncAdapter/README.md b/prebuilts/gradle/BasicSyncAdapter/README.md
index e24996d..3f76a4d 100644
--- a/prebuilts/gradle/BasicSyncAdapter/README.md
+++ b/prebuilts/gradle/BasicSyncAdapter/README.md
@@ -28,7 +28,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/BasicTransition/Application/build.gradle b/prebuilts/gradle/BasicTransition/Application/build.gradle
index db9a58b..0fe145d 100644
--- a/prebuilts/gradle/BasicTransition/Application/build.gradle
+++ b/prebuilts/gradle/BasicTransition/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 19
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/BasicTransition/README.md b/prebuilts/gradle/BasicTransition/README.md
index ee07f88..e269d9c 100644
--- a/prebuilts/gradle/BasicTransition/README.md
+++ b/prebuilts/gradle/BasicTransition/README.md
@@ -33,7 +33,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/BatchStepSensor/Application/build.gradle b/prebuilts/gradle/BatchStepSensor/Application/build.gradle
index db9a58b..0fe145d 100644
--- a/prebuilts/gradle/BatchStepSensor/Application/build.gradle
+++ b/prebuilts/gradle/BatchStepSensor/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 19
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/BatchStepSensor/README.md b/prebuilts/gradle/BatchStepSensor/README.md
index 44e5982..577a0d3 100644
--- a/prebuilts/gradle/BatchStepSensor/README.md
+++ b/prebuilts/gradle/BatchStepSensor/README.md
@@ -31,7 +31,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/BeamLargeFiles/Application/build.gradle b/prebuilts/gradle/BeamLargeFiles/Application/build.gradle
index c45e507..b926fea 100644
--- a/prebuilts/gradle/BeamLargeFiles/Application/build.gradle
+++ b/prebuilts/gradle/BeamLargeFiles/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 16
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/BeamLargeFiles/README.md b/prebuilts/gradle/BeamLargeFiles/README.md
index 1ecbbbf..06b6d4e 100644
--- a/prebuilts/gradle/BeamLargeFiles/README.md
+++ b/prebuilts/gradle/BeamLargeFiles/README.md
@@ -15,7 +15,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/BluetoothAdvertisements/Application/build.gradle b/prebuilts/gradle/BluetoothAdvertisements/Application/build.gradle
index d61ba60..dd9fedf 100644
--- a/prebuilts/gradle/BluetoothAdvertisements/Application/build.gradle
+++ b/prebuilts/gradle/BluetoothAdvertisements/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 21
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/BluetoothAdvertisements/README.md b/prebuilts/gradle/BluetoothAdvertisements/README.md
index cc9e0f8..371bb43 100644
--- a/prebuilts/gradle/BluetoothAdvertisements/README.md
+++ b/prebuilts/gradle/BluetoothAdvertisements/README.md
@@ -29,7 +29,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/BluetoothChat/Application/build.gradle b/prebuilts/gradle/BluetoothChat/Application/build.gradle
index 36a255f..51afa0f 100644
--- a/prebuilts/gradle/BluetoothChat/Application/build.gradle
+++ b/prebuilts/gradle/BluetoothChat/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 11
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/BluetoothChat/README.md b/prebuilts/gradle/BluetoothChat/README.md
index 6222732..59379fb 100644
--- a/prebuilts/gradle/BluetoothChat/README.md
+++ b/prebuilts/gradle/BluetoothChat/README.md
@@ -32,7 +32,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/BluetoothLeGatt/Application/build.gradle b/prebuilts/gradle/BluetoothLeGatt/Application/build.gradle
index 054db59..df32b0f 100644
--- a/prebuilts/gradle/BluetoothLeGatt/Application/build.gradle
+++ b/prebuilts/gradle/BluetoothLeGatt/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/BluetoothLeGatt/README.md b/prebuilts/gradle/BluetoothLeGatt/README.md
index bd422b8..47a1702 100644
--- a/prebuilts/gradle/BluetoothLeGatt/README.md
+++ b/prebuilts/gradle/BluetoothLeGatt/README.md
@@ -23,7 +23,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/BorderlessButtons/Application/build.gradle b/prebuilts/gradle/BorderlessButtons/Application/build.gradle
index c9fe712..06f262f 100644
--- a/prebuilts/gradle/BorderlessButtons/Application/build.gradle
+++ b/prebuilts/gradle/BorderlessButtons/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 14
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/BorderlessButtons/README.md b/prebuilts/gradle/BorderlessButtons/README.md
index fe1a291..281ec87 100644
--- a/prebuilts/gradle/BorderlessButtons/README.md
+++ b/prebuilts/gradle/BorderlessButtons/README.md
@@ -24,7 +24,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/CardEmulation/Application/build.gradle b/prebuilts/gradle/CardEmulation/Application/build.gradle
index db9a58b..0fe145d 100644
--- a/prebuilts/gradle/CardEmulation/Application/build.gradle
+++ b/prebuilts/gradle/CardEmulation/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 19
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/CardEmulation/README.md b/prebuilts/gradle/CardEmulation/README.md
index 0a50534..415a526 100644
--- a/prebuilts/gradle/CardEmulation/README.md
+++ b/prebuilts/gradle/CardEmulation/README.md
@@ -12,7 +12,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/CardReader/Application/build.gradle b/prebuilts/gradle/CardReader/Application/build.gradle
index db9a58b..0fe145d 100644
--- a/prebuilts/gradle/CardReader/Application/build.gradle
+++ b/prebuilts/gradle/CardReader/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 19
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/CardReader/README.md b/prebuilts/gradle/CardReader/README.md
index 40dce91..4871bdf 100644
--- a/prebuilts/gradle/CardReader/README.md
+++ b/prebuilts/gradle/CardReader/README.md
@@ -13,7 +13,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/ConfirmCredential/Application/build.gradle b/prebuilts/gradle/ConfirmCredential/Application/build.gradle
index c467c43..f301d92 100644
--- a/prebuilts/gradle/ConfirmCredential/Application/build.gradle
+++ b/prebuilts/gradle/ConfirmCredential/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion "android-MNC"
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
-        minSdkVersion "MNC"
-        targetSdkVersion "MNC"
+        minSdkVersion 23
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/ConfirmCredential/Application/src/main/java/com/example/android/confirmcredential/MainActivity.java b/prebuilts/gradle/ConfirmCredential/Application/src/main/java/com/example/android/confirmcredential/MainActivity.java
index b8cf6e1..c19875a 100644
--- a/prebuilts/gradle/ConfirmCredential/Application/src/main/java/com/example/android/confirmcredential/MainActivity.java
+++ b/prebuilts/gradle/ConfirmCredential/Application/src/main/java/com/example/android/confirmcredential/MainActivity.java
@@ -95,7 +95,7 @@
      * Tries to encrypt some data with the generated key in {@link #createKey} which is
      * only works if the user has just authenticated via device credentials.
      */
-    private void tryEncrypt() {
+    private boolean tryEncrypt() {
         try {
             KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
             keyStore.load(null);
@@ -111,15 +111,18 @@
 
             // If the user has recently authenticated, you will reach here.
             showAlreadyAuthenticated();
+            return true;
         } catch (UserNotAuthenticatedException e) {
             // User is not authenticated, let's authenticate with device credentials.
             showAuthenticationScreen();
+            return false;
         } catch (KeyPermanentlyInvalidatedException e) {
             // This happens if the lock screen has been disabled or reset after the key was
             // generated after the key was generated.
             Toast.makeText(this, "Keys are invalidated after created. Retry the purchase\n"
                             + e.getMessage(),
                     Toast.LENGTH_LONG).show();
+            return false;
         } catch (BadPaddingException | IllegalBlockSizeException | KeyStoreException |
                 CertificateException | UnrecoverableKeyException | IOException
                 | NoSuchPaddingException | NoSuchAlgorithmException | InvalidKeyException e) {
@@ -172,7 +175,9 @@
         if (requestCode == REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS) {
             // Challenge completed, proceed with using cipher
             if (resultCode == RESULT_OK) {
-                showPurchaseConfirmation();
+                if (tryEncrypt()) {
+                    showPurchaseConfirmation();
+                }
             } else {
                 // The user canceled or didn’t complete the lock screen
                 // operation. Go to error/cancellation flow.
diff --git a/prebuilts/gradle/ConfirmCredential/README.md b/prebuilts/gradle/ConfirmCredential/README.md
index 155492c..8b65b11 100644
--- a/prebuilts/gradle/ConfirmCredential/README.md
+++ b/prebuilts/gradle/ConfirmCredential/README.md
@@ -30,7 +30,7 @@
 Pre-requisites
 --------------
 
-- Android SDK vandroid-MNC
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/.google/packaging.yaml b/prebuilts/gradle/ConfirmDeviceCredentials/.google/packaging.yaml
deleted file mode 100644
index 94af7d0..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/.google/packaging.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-# GOOGLE SAMPLE PACKAGING DATA
-#
-# This file is used by Google as part of our samples packaging process.
-# End users may safely ignore this file. It has no relevance to other systems.
----
-status:       DRAFT
-technologies: [Android]
-categories:   [Security]
-languages:    [Java]
-solutions:    [Mobile]
-github:       android-Confirm Device Credentials
-level:        INTERMEDIATE
-icon:         screenshots/big-icon.png
-apiRefs:
-    - android:android.app.KeyguardManager.createConfirmDeviceCredentialIntent
-    - android:android.security.KeyGenParameterSpec
-    - android:java.security.KeyStore
-    - android:javax.crypto.Cipher
-    - android:javax.crypto.KeyGenerator
-license: apache2
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/AndroidManifest.xml b/prebuilts/gradle/ConfirmDeviceCredentials/Application/AndroidManifest.xml
deleted file mode 100644
index 75b68c1..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/AndroidManifest.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="com.example.android.confirmdevicecredentials" >
-
-    <uses-permission android:name="android.permission.VIBRATE" />
-
-    <application
-            android:allowBackup="true"
-            android:icon="@mipmap/ic_launcher"
-            android:label="@string/app_name"
-            android:theme="@style/AppTheme" >
-        <activity
-                android:name=".MainActivity"
-                android:label="@string/app_name" >
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-    </application>
-
-</manifest>
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/build.gradle b/prebuilts/gradle/ConfirmDeviceCredentials/Application/build.gradle
deleted file mode 100644
index cdec381..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/build.gradle
+++ /dev/null
@@ -1,73 +0,0 @@
-
-buildscript {
-    repositories {
-        jcenter()
-    }
-
-    dependencies {
-        classpath 'com.android.tools.build:gradle:1.1.0'
-    }
-}
-
-apply plugin: 'com.android.application'
-
-repositories {
-    jcenter()
-}
-
-dependencies {
-    compile "com.android.support:support-v4:21.0.2"
-    compile "com.android.support:support-v13:21.0.2"
-    compile "com.android.support:cardview-v7:21.0.2"
-}
-
-// The sample build uses multiple directories to
-// keep boilerplate and common code separate from
-// the main sample code.
-List<String> dirs = [
-    'main',     // main sample code; look here for the interesting stuff.
-    'common',   // components that are reused by multiple samples
-    'template'] // boilerplate code that is generated by the sample template process
-
-android {
-    compileSdkVersion "android-MNC"
-    buildToolsVersion "22.0.1"
-
-    defaultConfig {
-        minSdkVersion "android-MNC"
-        targetSdkVersion "android-MNC"
-    }
-
-    compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_7
-        targetCompatibility JavaVersion.VERSION_1_7
-    }
-
-    sourceSets {
-        main {
-            dirs.each { dir ->
-                java.srcDirs "src/${dir}/java"
-                res.srcDirs "src/${dir}/res"
-            }
-        }
-        androidTest.setRoot('tests')
-        androidTest.java.srcDirs = ['tests/src']
-
-    }
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/AndroidManifest.xml b/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/AndroidManifest.xml
deleted file mode 100644
index 6762571..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="com.example.android.confirmdevicecredentials" >
-
-    <application
-            android:allowBackup="true"
-            android:icon="@mipmap/ic_launcher"
-            android:label="@string/app_name"
-            android:theme="@style/AppTheme" >
-        <activity
-                android:name=".MainActivity"
-                android:label="@string/app_name" >
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-    </application>
-
-</manifest>
\ No newline at end of file
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/java/com/example/android/confirmdevicecredentials/MainActivity.java b/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/java/com/example/android/confirmdevicecredentials/MainActivity.java
deleted file mode 100644
index bce9aae..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/java/com/example/android/confirmdevicecredentials/MainActivity.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.example.android.confirmdevicecredentials;
-
-import android.app.Activity;
-import android.app.KeyguardManager;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.security.keystore.KeyGenParameterSpec;
-import android.security.keystore.KeyProperties;
-import android.security.keystore.UserNotAuthenticatedException;
-import android.view.View;
-import android.widget.Button;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import java.io.IOException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.UnrecoverableKeyException;
-import java.security.cert.CertificateException;
-
-import javax.crypto.BadPaddingException;
-import javax.crypto.Cipher;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.KeyGenerator;
-import javax.crypto.NoSuchPaddingException;
-import javax.crypto.SecretKey;
-
-/**
- * Main entry point for the sample, showing a backpack and "Purchase" button.
- */
-public class MainActivity extends Activity {
-
-    /** Alias for our key in the Android Key Store. */
-    private static final String KEY_NAME = "my_key";
-    private static final byte[] SECRET_BYTE_ARRAY = new byte[] {1, 2, 3, 4, 5, 6};
-
-    private static final int REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS = 1;
-
-    /**
-     * If the user has unlocked the device Within the last this number of seconds,
-     * it can be considered as an authenticator.
-     */
-    private static final int AUTHENTICATION_DURATION_SECONDS = 30;
-
-    private KeyguardManager mKeyguardManager;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_main);
-        Button purchaseButton = (Button) findViewById(R.id.purchase_button);
-        if (!createKey()) {
-            // Failed to create a key due to probably the user hasn't set up a lock screen yet.
-            purchaseButton.setEnabled(false);
-            return;
-        }
-        findViewById(R.id.purchase_button).setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                // Test to encrypt something. It might fail if the timeout expired (30s).
-                tryEncrypt();
-            }
-        });
-        mKeyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
-    }
-
-    /**
-     * Tries to encrypt some data with the generated key in {@link #createKey} which is
-     * only works if the user has just authenticated via device credentials.
-     */
-    private void tryEncrypt() {
-        try {
-            KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
-            keyStore.load(null);
-            SecretKey secretKey = (SecretKey) keyStore.getKey(KEY_NAME, null);
-            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
-
-            // Try encrypting something, it will only work if the user authenticated within
-            // the last AUTHENTICATION_DURATION_SECONDS seconds.
-            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
-            cipher.doFinal(SECRET_BYTE_ARRAY);
-
-            // If the user has recently authenticated, you will reach here.
-            showAlreadyAuthenticated();
-        } catch (UserNotAuthenticatedException e) {
-            // User is not authenticated, let's authenticate with device credentials.
-            showAuthenticationScreen();
-        } catch (BadPaddingException | IllegalBlockSizeException | KeyStoreException |
-                CertificateException | UnrecoverableKeyException | IOException
-                | NoSuchPaddingException | NoSuchAlgorithmException | InvalidKeyException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    /**
-     * Creates a symmetric key in the Android Key Store which can only be used after the user has
-     * authenticated with device credentials within the last X seconds.
-     *
-     * @return {@code true} when a key is created successfully, {@code false} otherwise.
-     */
-    private boolean createKey() {
-        // Generate a key to decrypt payment credentials, tokens, etc.
-        // This will most likely be a registration step for the user when they are setting up your app.
-        try {
-            KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
-            keyStore.load(null);
-            KeyGenerator keyGenerator = KeyGenerator.getInstance("AES", "AndroidKeyStore");
-
-            // Set the alias of the entry in Android KeyStore where the key will appear
-            // and the constrains (purposes) in the constructor of the Builder
-            keyGenerator.init(new KeyGenParameterSpec.Builder(KEY_NAME,
-                            KeyProperties.PURPOSE_ENCRYPT |
-                            KeyProperties.PURPOSE_DECRYPT)
-                    .setBlockModes("CBC")
-                    .setUserAuthenticationRequired(true)
-                            // Require that the user has unlocked in the last 30 seconds
-                    .setUserAuthenticationValidityDurationSeconds(AUTHENTICATION_DURATION_SECONDS)
-                    .setEncryptionPaddings("PKCS7Padding")
-                    .build());
-            keyGenerator.generateKey();
-            return true;
-        } catch (IllegalStateException e) {
-            // Show a message that the user hasn't set up a lock screen.
-            Toast.makeText(this,
-                    "Go to 'Settings -> Security -> Screenlock' to set up device screenlock\n" +
-                            e.getMessage(), Toast.LENGTH_LONG).show();
-            return false;
-        } catch (NoSuchAlgorithmException | NoSuchProviderException
-                | InvalidAlgorithmParameterException | KeyStoreException
-                | CertificateException | IOException e) {
-            throw new RuntimeException("Failed to create a symmetric key", e);
-        }
-    }
-
-    private void showAuthenticationScreen() {
-        // Create the Confirm Credentials screen. You can customize the title and description. Or
-        // we will provide a generic one for you if you leave it null
-        Intent intent = mKeyguardManager.createConfirmDeviceCredentialIntent(null, null);
-        if (intent != null) {
-            startActivityForResult(intent, REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS);
-        }
-    }
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (requestCode == REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS) {
-            // Challenge completed, proceed with using cipher
-            if (resultCode == RESULT_OK) {
-                showPurchaseConfirmation();
-            } else {
-                // The user canceled or didn’t complete the lock screen
-                // operation. Go to error/cancellation flow.
-            }
-        }
-    }
-
-    private void showPurchaseConfirmation() {
-        findViewById(R.id.confirmation_message).setVisibility(View.VISIBLE);
-        findViewById(R.id.purchase_button).setEnabled(false);
-    }
-
-    private void showAlreadyAuthenticated() {
-        TextView textView = (TextView) findViewById(
-                R.id.already_has_valid_device_credential_message);
-        textView.setVisibility(View.VISIBLE);
-        textView.setText(getString(
-                R.string.already_confirmed_device_credentials_within_last_x_seconds,
-                AUTHENTICATION_DURATION_SECONDS));
-        findViewById(R.id.purchase_button).setEnabled(false);
-    }
-
-}
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/drawable-hdpi/tile.9.png b/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/drawable-hdpi/tile.9.png
deleted file mode 100644
index 1358628..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/drawable-hdpi/tile.9.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/drawable-nodpi/android_robot.png b/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/drawable-nodpi/android_robot.png
deleted file mode 100644
index 40bf934..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/drawable-nodpi/android_robot.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/drawable/card.xml b/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/drawable/card.xml
deleted file mode 100644
index 691a4c5..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/drawable/card.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <solid
-        android:color="#fefefe"/>
-
-    <corners
-        android:radius="2dp" />
-</shape>
\ No newline at end of file
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/layout/activity_main.xml b/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/layout/activity_main.xml
deleted file mode 100644
index da65a00..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/layout/activity_main.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-<ScrollView
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-
-    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                  android:layout_width="match_parent"
-                  android:layout_height="wrap_content"
-                  android:orientation="vertical">
-
-        <ImageView
-                android:layout_width="150dp"
-                android:layout_height="150dp"
-                android:layout_marginTop="32dp"
-                android:layout_marginBottom="32dp"
-                android:layout_gravity="center_horizontal"
-                android:scaleType="fitCenter"
-                android:src="@drawable/android_robot"/>
-
-        <LinearLayout
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="8dp"
-                android:layout_marginStart="8dp"
-                android:layout_marginEnd="8dp"
-                android:orientation="vertical"
-                android:background="@drawable/card"
-                android:elevation="4dp"
-                android:paddingTop="16dp"
-                android:paddingBottom="16dp"
-                android:paddingStart="16dp"
-                android:paddingEnd="16dp">
-
-            <TextView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:textAppearance="@android:style/TextAppearance.Material.Headline"
-                    android:text="@string/item_title"/>
-
-            <TextView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:textAppearance="@android:style/TextAppearance.Material.Body2"
-                    android:textColor="?android:attr/colorAccent"
-                    android:text="@string/item_price"/>
-
-            <TextView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_marginTop="16dp"
-                    android:textAppearance="@android:style/TextAppearance.Material.Body1"
-                    android:textColor="?android:attr/textColorSecondary"
-                    android:text="@string/item_description"/>
-
-        </LinearLayout>
-        <Button style="@android:style/Widget.Material.Button.Colored"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="8dp"
-                android:layout_marginEnd="4dp"
-                android:layout_gravity="end"
-                android:textColor="?android:attr/textColorPrimaryInverse"
-                android:text="@string/purchase"
-                android:id="@+id/purchase_button"
-                android:layout_alignParentEnd="true"/>
-
-        <TextView
-                android:id="@+id/confirmation_message"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="16dp"
-                android:paddingStart="16dp"
-                android:paddingEnd="16dp"
-                android:textAppearance="@android:style/TextAppearance.Material.Body2"
-                android:textColor="?android:attr/colorAccent"
-                android:text="@string/purchase_done"
-                android:visibility="gone"/>
-
-        <TextView
-                android:id="@+id/already_has_valid_device_credential_message"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="16dp"
-                android:paddingStart="16dp"
-                android:paddingEnd="16dp"
-                android:textAppearance="@android:style/TextAppearance.Material.Body2"
-                android:textColor="?android:attr/colorAccent"
-                android:text="@string/already_confirmed_device_credentials_within_last_x_seconds"
-                android:visibility="gone"/>
-    </LinearLayout>
-</ScrollView>
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/mipmap-hdpi/ic_launcher.png b/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index e9cd9e3..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/mipmap-hdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/mipmap-mdpi/ic_launcher.png b/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index b6c3e31..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/mipmap-mdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/mipmap-xhdpi/ic_launcher.png b/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index 85a14a0..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/mipmap-xhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png b/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index d9d35b0..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index a764233..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values-sw600dp/template-dimens.xml b/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values-sw600dp/template-dimens.xml
deleted file mode 100644
index 22074a2..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values-sw600dp/template-dimens.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--
-  Copyright 2013 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Semantic definitions -->
-
-    <dimen name="horizontal_page_margin">@dimen/margin_huge</dimen>
-    <dimen name="vertical_page_margin">@dimen/margin_medium</dimen>
-
-</resources>
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values-sw600dp/template-styles.xml b/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values-sw600dp/template-styles.xml
deleted file mode 100644
index 03d1974..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values-sw600dp/template-styles.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<!--
-  Copyright 2013 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <style name="Widget.SampleMessage">
-        <item name="android:textAppearance">?android:textAppearanceLarge</item>
-        <item name="android:lineSpacingMultiplier">1.2</item>
-        <item name="android:shadowDy">-6.5</item>
-    </style>
-
-</resources>
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values-v11/template-styles.xml b/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values-v11/template-styles.xml
deleted file mode 100644
index 8c1ea66..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values-v11/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2013 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Holo.Light" />
-
-</resources>
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values-v21/base-colors.xml b/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values-v21/base-colors.xml
deleted file mode 100644
index 8b6ec3f..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values-v21/base-colors.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<resources>
-
-
-</resources>
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values-v21/base-template-styles.xml b/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values-v21/base-template-styles.xml
deleted file mode 100644
index c778e4f..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values-v21/base-template-styles.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light">
-    </style>
-
-</resources>
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values/base-strings.xml b/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values/base-strings.xml
deleted file mode 100644
index 6a29a87..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values/base-strings.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<resources>
-    <string name="app_name">Confirm Device Credentials</string>
-    <string name="intro_message">
-        <![CDATA[
-        
-            
-This sample demonstrates how you can use device credentials (PIN, Pattern, Password) in your app
-to authenticate the user before they are trying to complete some actions.
-            
-        
-        ]]>
-    </string>
-</resources>
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values/strings.xml b/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values/strings.xml
deleted file mode 100644
index b6ff9d3..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-<resources>
-    <string name="purchase">Purchase</string>
-    <string name="item_title">White Mesh Pluto Backpack</string>
-    <string name="item_price">$62.68</string>
-    <string name="item_description">Mesh backpack in white. Black textile trim throughout.</string>
-    <string name="purchase_done">Device credential confirmed.</string>
-    <string name="already_confirmed_device_credentials_within_last_x_seconds">
-        The device credential has been already confirmed within the last %1$s seconds.</string>
-</resources>
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values/template-dimens.xml b/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values/template-dimens.xml
deleted file mode 100644
index 39e710b..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values/template-dimens.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<!--
-  Copyright 2013 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Define standard dimensions to comply with Holo-style grids and rhythm. -->
-
-    <dimen name="margin_tiny">4dp</dimen>
-    <dimen name="margin_small">8dp</dimen>
-    <dimen name="margin_medium">16dp</dimen>
-    <dimen name="margin_large">32dp</dimen>
-    <dimen name="margin_huge">64dp</dimen>
-
-    <!-- Semantic definitions -->
-
-    <dimen name="horizontal_page_margin">@dimen/margin_medium</dimen>
-    <dimen name="vertical_page_margin">@dimen/margin_medium</dimen>
-
-</resources>
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values/template-styles.xml b/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values/template-styles.xml
deleted file mode 100644
index 6e7d593..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/Application/src/main/res/values/template-styles.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<!--
-  Copyright 2013 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-
-    <style name="Theme.Base" parent="android:Theme.Light" />
-
-    <style name="Theme.Sample" parent="Theme.Base" />
-
-    <style name="AppTheme" parent="Theme.Sample" />
-    <!-- Widget styling -->
-
-    <style name="Widget" />
-
-    <style name="Widget.SampleMessage">
-        <item name="android:textAppearance">?android:textAppearanceMedium</item>
-        <item name="android:lineSpacingMultiplier">1.1</item>
-    </style>
-
-    <style name="Widget.SampleMessageTile">
-        <item name="android:background">@drawable/tile</item>
-        <item name="android:shadowColor">#7F000000</item>
-        <item name="android:shadowDy">-3.5</item>
-        <item name="android:shadowRadius">2</item>
-    </style>
-
-</resources>
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/CONTRIBUTING.md b/prebuilts/gradle/ConfirmDeviceCredentials/CONTRIBUTING.md
deleted file mode 100644
index faa8b5c..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/CONTRIBUTING.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# How to become a contributor and submit your own code
-
-## Contributor License Agreements
-
-We'd love to accept your sample apps and patches! Before we can take them, we
-have to jump a couple of legal hurdles.
-
-Please fill out either the individual or corporate Contributor License Agreement (CLA).
-
-  * If you are an individual writing original source code and you're sure you
-    own the intellectual property, then you'll need to sign an [individual CLA]
-    (https://cla.developers.google.com).
-  * If you work for a company that wants to allow you to contribute your work,
-    then you'll need to sign a [corporate CLA]
-    (https://cla.developers.google.com).
-
-Follow either of the two links above to access the appropriate CLA and
-instructions for how to sign and return it. Once we receive it, we'll be able to
-accept your pull requests.
-
-## Contributing A Patch
-
-1. Submit an issue describing your proposed change to the repo in question.
-1. The repo owner will respond to your issue promptly.
-1. If your proposed change is accepted, and you haven't already done so, sign a
-   Contributor License Agreement (see details above).
-1. Fork the desired repo, develop and test your code changes.
-1. Ensure that your code adheres to the existing style in the sample to which
-   you are contributing. Refer to the
-   [Android Code Style Guide]
-   (https://source.android.com/source/code-style.html) for the
-   recommended coding standards for this organization.
-1. Ensure that your code has an appropriate set of unit tests which all pass.
-1. Submit a pull request.
-
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/LICENSE b/prebuilts/gradle/ConfirmDeviceCredentials/LICENSE
deleted file mode 100644
index 1af981f..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright 2014 The Android Open Source Project
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/README.md b/prebuilts/gradle/ConfirmDeviceCredentials/README.md
deleted file mode 100644
index 347ee6d..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/README.md
+++ /dev/null
@@ -1,78 +0,0 @@
-
-Android Confirm Device Credentials Sample
-===================================
-
-A sample that demonstrates how to use device credentials (PIN, Pattern, Password) in your app
-
-Introduction
-------------
-
-This sample demonstrates how you can use device credentials (PIN, Pattern, Password) in your app
-to authenticate the user before they are trying to complete some actions.
-
-First you need to create a symmetric key in the Android Key Store using [KeyGenerator][1]
-which can be only be used after the user has authenticated after the user is authenticated
-with their device credentials and pass [KeyGenParameterSpec][2].
-
-By setting an integer value to the
-[KeyGeneratorSpec.Builder.setUserAuthenticationValidityDurationSeconds][3], you can consider the
-user as authenticated if the user has been authenticated with the device credentials
-within the last x seconds.
-
-Then by calling [KeyguardManager.createConfirmDeviceCredentialIntent][4], you can show a screen
-to confirm device credentials to the user.
-
-[1]: https://developer.android.com/reference/javax/crypto/KeyGenerator.html
-[2]: https://developer.android.com/reference/android/security/KeyGenParameterSpec.html
-[3]: https://developer.android.com/reference/android/security/KeyGenParameterSpec.Builder#setUserAuthenticationValidityDurationSeconds().html
-[4]: https://developer.android.com/reference/android/app/KeyguardManager.createConfirmDeviceCredentialIntent().html
-
-Pre-requisites
---------------
-
-- Android SDK vandroid-MNC
-- Android Build Tools v22.0.1
-- Android Support Repository
-
-Screenshots
--------------
-
-<img src="screenshots/1-purchase.png" height="400" alt="Screenshot"/> <img src="screenshots/2-show-confirm-device-credential.png" height="400" alt="Screenshot"/> <img src="screenshots/3-already-authenticated.png" height="400" alt="Screenshot"/> 
-
-Getting Started
----------------
-
-This sample uses the Gradle build system. To build this project, use the
-"gradlew build" command or use "Import Project" in Android Studio.
-
-Support
--------
-
-- Google+ Community: https://plus.google.com/communities/105153134372062985968
-- Stack Overflow: http://stackoverflow.com/questions/tagged/android
-
-If you've found an error in this sample, please file an issue:
-https://github.com/googlesamples/android-Confirm Device Credentials
-
-Patches are encouraged, and may be submitted by forking this project and
-submitting a pull request through GitHub. Please see CONTRIBUTING.md for more details.
-
-License
--------
-
-Copyright 2014 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
-additional information regarding copyright ownership.  The ASF licenses this
-file to you under the Apache License, Version 2.0 (the "License"); you may not
-use this file except in compliance with the License.  You may obtain a copy of
-the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
-License for the specific language governing permissions and limitations under
-the License.
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/build.gradle b/prebuilts/gradle/ConfirmDeviceCredentials/build.gradle
deleted file mode 100644
index 1dac6de..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/build.gradle
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/gradle/wrapper/gradle-wrapper.jar b/prebuilts/gradle/ConfirmDeviceCredentials/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 8c0fb64..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/gradle/wrapper/gradle-wrapper.jar
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ConfirmDeviceCredentials/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index afb3296..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Wed Apr 10 15:27:10 PDT 2013
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=http\://services.gradle.org/distributions/gradle-2.2.1-bin.zip
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/gradlew b/prebuilts/gradle/ConfirmDeviceCredentials/gradlew
deleted file mode 100755
index 91a7e26..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/gradlew
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/usr/bin/env bash
-
-##############################################################################
-##
-##  Gradle start up script for UN*X
-##
-##############################################################################
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn ( ) {
-    echo "$*"
-}
-
-die ( ) {
-    echo
-    echo "$*"
-    echo
-    exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-case "`uname`" in
-  CYGWIN* )
-    cygwin=true
-    ;;
-  Darwin* )
-    darwin=true
-    ;;
-  MINGW* )
-    msys=true
-    ;;
-esac
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched.
-if $cygwin ; then
-    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-fi
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-        PRG="$link"
-    else
-        PRG=`dirname "$PRG"`"/$link"
-    fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >&-
-APP_HOME="`pwd -P`"
-cd "$SAVED" >&-
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-        # IBM's JDK on AIX uses strange locations for the executables
-        JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-        JAVACMD="$JAVA_HOME/bin/java"
-    fi
-    if [ ! -x "$JAVACMD" ] ; then
-        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-    fi
-else
-    JAVACMD="java"
-    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
-    MAX_FD_LIMIT=`ulimit -H -n`
-    if [ $? -eq 0 ] ; then
-        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
-            MAX_FD="$MAX_FD_LIMIT"
-        fi
-        ulimit -n $MAX_FD
-        if [ $? -ne 0 ] ; then
-            warn "Could not set maximum file descriptor limit: $MAX_FD"
-        fi
-    else
-        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
-    fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
-    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
-    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
-    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-
-    # We build the pattern for arguments to be converted via cygpath
-    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
-    SEP=""
-    for dir in $ROOTDIRSRAW ; do
-        ROOTDIRS="$ROOTDIRS$SEP$dir"
-        SEP="|"
-    done
-    OURCYGPATTERN="(^($ROOTDIRS))"
-    # Add a user-defined pattern to the cygpath arguments
-    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
-        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
-    fi
-    # Now convert the arguments - kludge to limit ourselves to /bin/sh
-    i=0
-    for arg in "$@" ; do
-        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
-        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
-
-        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
-            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
-        else
-            eval `echo args$i`="\"$arg\""
-        fi
-        i=$((i+1))
-    done
-    case $i in
-        (0) set -- ;;
-        (1) set -- "$args0" ;;
-        (2) set -- "$args0" "$args1" ;;
-        (3) set -- "$args0" "$args1" "$args2" ;;
-        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
-        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
-        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
-        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
-        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
-        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
-    esac
-fi
-
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
-    JVM_OPTS=("$@")
-}
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
-
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/gradlew.bat b/prebuilts/gradle/ConfirmDeviceCredentials/gradlew.bat
deleted file mode 100644
index aec9973..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/gradlew.bat
+++ /dev/null
@@ -1,90 +0,0 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem  Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windowz variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/screenshots/1-purchase.png b/prebuilts/gradle/ConfirmDeviceCredentials/screenshots/1-purchase.png
deleted file mode 100644
index 82a616d..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/screenshots/1-purchase.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/screenshots/2-show-confirm-device-credential.png b/prebuilts/gradle/ConfirmDeviceCredentials/screenshots/2-show-confirm-device-credential.png
deleted file mode 100644
index 869fcae..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/screenshots/2-show-confirm-device-credential.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/screenshots/3-already-authenticated.png b/prebuilts/gradle/ConfirmDeviceCredentials/screenshots/3-already-authenticated.png
deleted file mode 100644
index bd55084..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/screenshots/3-already-authenticated.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/screenshots/big-icon.png b/prebuilts/gradle/ConfirmDeviceCredentials/screenshots/big-icon.png
deleted file mode 100644
index 7449b96..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/screenshots/big-icon.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/ConfirmDeviceCredentials/settings.gradle b/prebuilts/gradle/ConfirmDeviceCredentials/settings.gradle
deleted file mode 100644
index 9464a35..0000000
--- a/prebuilts/gradle/ConfirmDeviceCredentials/settings.gradle
+++ /dev/null
@@ -1 +0,0 @@
-include 'Application'
diff --git a/prebuilts/gradle/CustomChoiceList/Application/build.gradle b/prebuilts/gradle/CustomChoiceList/Application/build.gradle
index 672e647..03141e9 100644
--- a/prebuilts/gradle/CustomChoiceList/Application/build.gradle
+++ b/prebuilts/gradle/CustomChoiceList/Application/build.gradle
@@ -28,12 +28,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 4
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/CustomChoiceList/README.md b/prebuilts/gradle/CustomChoiceList/README.md
index f968390..59b7a58 100644
--- a/prebuilts/gradle/CustomChoiceList/README.md
+++ b/prebuilts/gradle/CustomChoiceList/README.md
@@ -41,7 +41,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/CustomNotifications/Application/build.gradle b/prebuilts/gradle/CustomNotifications/Application/build.gradle
index c45e507..b926fea 100644
--- a/prebuilts/gradle/CustomNotifications/Application/build.gradle
+++ b/prebuilts/gradle/CustomNotifications/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 16
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/CustomNotifications/README.md b/prebuilts/gradle/CustomNotifications/README.md
index c136e47..b747252 100644
--- a/prebuilts/gradle/CustomNotifications/README.md
+++ b/prebuilts/gradle/CustomNotifications/README.md
@@ -25,7 +25,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/CustomTransition/Application/build.gradle b/prebuilts/gradle/CustomTransition/Application/build.gradle
index db9a58b..0fe145d 100644
--- a/prebuilts/gradle/CustomTransition/Application/build.gradle
+++ b/prebuilts/gradle/CustomTransition/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 19
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/CustomTransition/README.md b/prebuilts/gradle/CustomTransition/README.md
index d41118d..591d900 100644
--- a/prebuilts/gradle/CustomTransition/README.md
+++ b/prebuilts/gradle/CustomTransition/README.md
@@ -32,7 +32,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/DataLayer/Application/build.gradle b/prebuilts/gradle/DataLayer/Application/build.gradle
index b51c137..9680f2b 100644
--- a/prebuilts/gradle/DataLayer/Application/build.gradle
+++ b/prebuilts/gradle/DataLayer/Application/build.gradle
@@ -33,12 +33,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/DataLayer/README.md b/prebuilts/gradle/DataLayer/README.md
index 6270fdf..6ebd4f8 100644
--- a/prebuilts/gradle/DataLayer/README.md
+++ b/prebuilts/gradle/DataLayer/README.md
@@ -27,7 +27,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/DataLayer/Wearable/build.gradle b/prebuilts/gradle/DataLayer/Wearable/build.gradle
index e686405..2bab61f 100644
--- a/prebuilts/gradle/DataLayer/Wearable/build.gradle
+++ b/prebuilts/gradle/DataLayer/Wearable/build.gradle
@@ -31,7 +31,7 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
@@ -40,13 +40,6 @@
         versionName "1.0"
     }
 
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
diff --git a/prebuilts/gradle/DelayedConfirmation/Application/build.gradle b/prebuilts/gradle/DelayedConfirmation/Application/build.gradle
index b51c137..9680f2b 100644
--- a/prebuilts/gradle/DelayedConfirmation/Application/build.gradle
+++ b/prebuilts/gradle/DelayedConfirmation/Application/build.gradle
@@ -33,12 +33,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/DelayedConfirmation/README.md b/prebuilts/gradle/DelayedConfirmation/README.md
index 224190d..dbdb3d1 100644
--- a/prebuilts/gradle/DelayedConfirmation/README.md
+++ b/prebuilts/gradle/DelayedConfirmation/README.md
@@ -12,7 +12,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/DelayedConfirmation/Wearable/build.gradle b/prebuilts/gradle/DelayedConfirmation/Wearable/build.gradle
index e686405..2bab61f 100644
--- a/prebuilts/gradle/DelayedConfirmation/Wearable/build.gradle
+++ b/prebuilts/gradle/DelayedConfirmation/Wearable/build.gradle
@@ -31,7 +31,7 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
@@ -40,13 +40,6 @@
         versionName "1.0"
     }
 
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
diff --git a/prebuilts/gradle/DeviceOwner/Application/build.gradle b/prebuilts/gradle/DeviceOwner/Application/build.gradle
index d61ba60..dd9fedf 100644
--- a/prebuilts/gradle/DeviceOwner/Application/build.gradle
+++ b/prebuilts/gradle/DeviceOwner/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 21
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/DeviceOwner/README.md b/prebuilts/gradle/DeviceOwner/README.md
index a416abc..9c0a68b 100644
--- a/prebuilts/gradle/DeviceOwner/README.md
+++ b/prebuilts/gradle/DeviceOwner/README.md
@@ -30,7 +30,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/DirectorySelection/Application/build.gradle b/prebuilts/gradle/DirectorySelection/Application/build.gradle
index d980ed3..89356a9 100644
--- a/prebuilts/gradle/DirectorySelection/Application/build.gradle
+++ b/prebuilts/gradle/DirectorySelection/Application/build.gradle
@@ -31,12 +31,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 21
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/DirectorySelection/README.md b/prebuilts/gradle/DirectorySelection/README.md
index 455687f..51faf1e 100644
--- a/prebuilts/gradle/DirectorySelection/README.md
+++ b/prebuilts/gradle/DirectorySelection/README.md
@@ -107,7 +107,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/DisplayingBitmaps/Application/build.gradle b/prebuilts/gradle/DisplayingBitmaps/Application/build.gradle
index 4a47647..ab91e47 100644
--- a/prebuilts/gradle/DisplayingBitmaps/Application/build.gradle
+++ b/prebuilts/gradle/DisplayingBitmaps/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 9
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/DisplayingBitmaps/README.md b/prebuilts/gradle/DisplayingBitmaps/README.md
index e932fd7..8402f44 100644
--- a/prebuilts/gradle/DisplayingBitmaps/README.md
+++ b/prebuilts/gradle/DisplayingBitmaps/README.md
@@ -20,7 +20,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/DocumentCentricApps/Application/build.gradle b/prebuilts/gradle/DocumentCentricApps/Application/build.gradle
index d61ba60..dd9fedf 100644
--- a/prebuilts/gradle/DocumentCentricApps/Application/build.gradle
+++ b/prebuilts/gradle/DocumentCentricApps/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 21
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/DocumentCentricApps/README.md b/prebuilts/gradle/DocumentCentricApps/README.md
index c3095fd..21a6b42 100644
--- a/prebuilts/gradle/DocumentCentricApps/README.md
+++ b/prebuilts/gradle/DocumentCentricApps/README.md
@@ -25,7 +25,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/DocumentCentricRelinquishIdentity/Application/build.gradle b/prebuilts/gradle/DocumentCentricRelinquishIdentity/Application/build.gradle
index d61ba60..dd9fedf 100644
--- a/prebuilts/gradle/DocumentCentricRelinquishIdentity/Application/build.gradle
+++ b/prebuilts/gradle/DocumentCentricRelinquishIdentity/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 21
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/DocumentCentricRelinquishIdentity/README.md b/prebuilts/gradle/DocumentCentricRelinquishIdentity/README.md
index 57a2a0e..7c8d0b0 100644
--- a/prebuilts/gradle/DocumentCentricRelinquishIdentity/README.md
+++ b/prebuilts/gradle/DocumentCentricRelinquishIdentity/README.md
@@ -7,7 +7,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/DoneBar/Application/build.gradle b/prebuilts/gradle/DoneBar/Application/build.gradle
index c9fe712..06f262f 100644
--- a/prebuilts/gradle/DoneBar/Application/build.gradle
+++ b/prebuilts/gradle/DoneBar/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 14
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/DoneBar/README.md b/prebuilts/gradle/DoneBar/README.md
index 8c1fbde..ad5c734 100644
--- a/prebuilts/gradle/DoneBar/README.md
+++ b/prebuilts/gradle/DoneBar/README.md
@@ -31,7 +31,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/DrawableTinting/Application/build.gradle b/prebuilts/gradle/DrawableTinting/Application/build.gradle
index d61ba60..dd9fedf 100644
--- a/prebuilts/gradle/DrawableTinting/Application/build.gradle
+++ b/prebuilts/gradle/DrawableTinting/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 21
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/DrawableTinting/README.md b/prebuilts/gradle/DrawableTinting/README.md
index ea6d507..d51a5cc 100644
--- a/prebuilts/gradle/DrawableTinting/README.md
+++ b/prebuilts/gradle/DrawableTinting/README.md
@@ -16,7 +16,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/ElizaChat/Application/build.gradle b/prebuilts/gradle/ElizaChat/Application/build.gradle
index 054db59..df32b0f 100644
--- a/prebuilts/gradle/ElizaChat/Application/build.gradle
+++ b/prebuilts/gradle/ElizaChat/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/ElizaChat/README.md b/prebuilts/gradle/ElizaChat/README.md
index 7416df5..40b90a2 100644
--- a/prebuilts/gradle/ElizaChat/README.md
+++ b/prebuilts/gradle/ElizaChat/README.md
@@ -67,7 +67,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/FindMyPhone/Application/build.gradle b/prebuilts/gradle/FindMyPhone/Application/build.gradle
index b51c137..9680f2b 100644
--- a/prebuilts/gradle/FindMyPhone/Application/build.gradle
+++ b/prebuilts/gradle/FindMyPhone/Application/build.gradle
@@ -33,12 +33,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/FindMyPhone/README.md b/prebuilts/gradle/FindMyPhone/README.md
index 7d7162a..fb30a55 100644
--- a/prebuilts/gradle/FindMyPhone/README.md
+++ b/prebuilts/gradle/FindMyPhone/README.md
@@ -10,7 +10,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/FindMyPhone/Wearable/build.gradle b/prebuilts/gradle/FindMyPhone/Wearable/build.gradle
index e686405..2bab61f 100644
--- a/prebuilts/gradle/FindMyPhone/Wearable/build.gradle
+++ b/prebuilts/gradle/FindMyPhone/Wearable/build.gradle
@@ -31,7 +31,7 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
@@ -40,13 +40,6 @@
         versionName "1.0"
     }
 
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
diff --git a/prebuilts/gradle/FingerprintDialog/Application/build.gradle b/prebuilts/gradle/FingerprintDialog/Application/build.gradle
index 3ee9e57..80e2f4e 100644
--- a/prebuilts/gradle/FingerprintDialog/Application/build.gradle
+++ b/prebuilts/gradle/FingerprintDialog/Application/build.gradle
@@ -34,12 +34,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion "android-MNC"
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
-        minSdkVersion "MNC"
-        targetSdkVersion "MNC"
+        minSdkVersion 23
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/FingerprintDialog/Application/src/main/java/com/example/android/fingerprintdialog/MainActivity.java b/prebuilts/gradle/FingerprintDialog/Application/src/main/java/com/example/android/fingerprintdialog/MainActivity.java
index d6892eb..c954bfa 100644
--- a/prebuilts/gradle/FingerprintDialog/Application/src/main/java/com/example/android/fingerprintdialog/MainActivity.java
+++ b/prebuilts/gradle/FingerprintDialog/Application/src/main/java/com/example/android/fingerprintdialog/MainActivity.java
@@ -67,6 +67,7 @@
     private static final int FINGERPRINT_PERMISSION_REQUEST_CODE = 0;
 
     @Inject KeyguardManager mKeyguardManager;
+    @Inject FingerprintManager mFingerprintManager;
     @Inject FingerprintAuthenticationDialogFragment mFragment;
     @Inject KeyStore mKeyStore;
     @Inject KeyGenerator mKeyGenerator;
@@ -95,11 +96,17 @@
                                 + "Go to 'Settings -> Security -> Fingerprint' to set up a fingerprint",
                         Toast.LENGTH_LONG).show();
                 purchaseButton.setEnabled(false);
-            }
-            if (!createKey()) {
-                purchaseButton.setEnabled(false);
                 return;
             }
+            if (!mFingerprintManager.hasEnrolledFingerprints()) {
+                purchaseButton.setEnabled(false);
+                // This happens when no fingerprints are registered.
+                Toast.makeText(this,
+                        "Go to 'Settings -> Security -> Fingerprint' and register at least one fingerprint",
+                        Toast.LENGTH_LONG).show();
+                return;
+            }
+            createKey();
             purchaseButton.setEnabled(true);
             purchaseButton.setOnClickListener(new View.OnClickListener() {
                 @Override
@@ -201,11 +208,8 @@
     /**
      * Creates a symmetric key in the Android Key Store which can only be used after the user has
      * authenticated with fingerprint.
-     *
-     * @return {@code true} if key is created successful, {@code false} otherwise such as when no
-     * fingerprints are registered.
      */
-    public boolean createKey() {
+    public void createKey() {
         // The enrolling flow for fingerprint. This is where you ask the user to set up fingerprint
         // for your flow. Use of keys is necessary if you need to know if the set of
         // enrolled fingerprints has changed.
@@ -223,13 +227,6 @@
                     .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
                     .build());
             mKeyGenerator.generateKey();
-            return true;
-        } catch (IllegalStateException e) {
-            // This happens when no fingerprints are registered.
-            Toast.makeText(this,
-                    "Go to 'Settings -> Security -> Fingerprint' and register at least one fingerprint",
-                    Toast.LENGTH_LONG).show();
-            return false;
         } catch (NoSuchAlgorithmException | InvalidAlgorithmParameterException
                 | CertificateException | IOException e) {
             throw new RuntimeException(e);
diff --git a/prebuilts/gradle/FingerprintDialog/README.md b/prebuilts/gradle/FingerprintDialog/README.md
index d2f2300..0b32032 100644
--- a/prebuilts/gradle/FingerprintDialog/README.md
+++ b/prebuilts/gradle/FingerprintDialog/README.md
@@ -35,7 +35,7 @@
 Pre-requisites
 --------------
 
-- Android SDK vandroid-MNC
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/Flashlight/README.md b/prebuilts/gradle/Flashlight/README.md
index 99b6a2d..e829f27 100644
--- a/prebuilts/gradle/Flashlight/README.md
+++ b/prebuilts/gradle/Flashlight/README.md
@@ -18,7 +18,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/Flashlight/Wearable/build.gradle b/prebuilts/gradle/Flashlight/Wearable/build.gradle
index e686405..2bab61f 100644
--- a/prebuilts/gradle/Flashlight/Wearable/build.gradle
+++ b/prebuilts/gradle/Flashlight/Wearable/build.gradle
@@ -31,7 +31,7 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
@@ -40,13 +40,6 @@
         versionName "1.0"
     }
 
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
diff --git a/prebuilts/gradle/Geofencing/Application/build.gradle b/prebuilts/gradle/Geofencing/Application/build.gradle
index 5899f63..859aabb 100644
--- a/prebuilts/gradle/Geofencing/Application/build.gradle
+++ b/prebuilts/gradle/Geofencing/Application/build.gradle
@@ -34,12 +34,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/Geofencing/README.md b/prebuilts/gradle/Geofencing/README.md
index 788b974..c57314d 100644
--- a/prebuilts/gradle/Geofencing/README.md
+++ b/prebuilts/gradle/Geofencing/README.md
@@ -36,7 +36,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/Geofencing/Wearable/build.gradle b/prebuilts/gradle/Geofencing/Wearable/build.gradle
index e686405..2bab61f 100644
--- a/prebuilts/gradle/Geofencing/Wearable/build.gradle
+++ b/prebuilts/gradle/Geofencing/Wearable/build.gradle
@@ -31,7 +31,7 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
@@ -40,13 +40,6 @@
         versionName "1.0"
     }
 
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
diff --git a/prebuilts/gradle/GridViewPager/README.md b/prebuilts/gradle/GridViewPager/README.md
index 8f708f2..f1e7568 100644
--- a/prebuilts/gradle/GridViewPager/README.md
+++ b/prebuilts/gradle/GridViewPager/README.md
@@ -7,7 +7,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/GridViewPager/Wearable/build.gradle b/prebuilts/gradle/GridViewPager/Wearable/build.gradle
index e686405..2bab61f 100644
--- a/prebuilts/gradle/GridViewPager/Wearable/build.gradle
+++ b/prebuilts/gradle/GridViewPager/Wearable/build.gradle
@@ -31,7 +31,7 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
@@ -40,13 +40,6 @@
         versionName "1.0"
     }
 
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
diff --git a/prebuilts/gradle/HdrViewfinder/Application/build.gradle b/prebuilts/gradle/HdrViewfinder/Application/build.gradle
index d61ba60..dd9fedf 100644
--- a/prebuilts/gradle/HdrViewfinder/Application/build.gradle
+++ b/prebuilts/gradle/HdrViewfinder/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 21
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/HdrViewfinder/Application/src/main/AndroidManifest.xml b/prebuilts/gradle/HdrViewfinder/Application/src/main/AndroidManifest.xml
index 772b7df..63066f6 100644
--- a/prebuilts/gradle/HdrViewfinder/Application/src/main/AndroidManifest.xml
+++ b/prebuilts/gradle/HdrViewfinder/Application/src/main/AndroidManifest.xml
@@ -20,10 +20,6 @@
     android:versionCode="1"
     android:versionName="1.0">
 
-    <uses-sdk
-        android:minSdkVersion="21"
-        android:targetSdkVersion="21"/>
-
     <uses-feature android:name="android.hardware.camera"/>
     <uses-feature
         android:name="android.hardware.camera.front"
@@ -31,8 +27,6 @@
 
     <uses-permission android:name="android.permission.CAMERA"/>
     <uses-permission android:name="android.permission.RECORD_AUDIO"/>
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
 
     <application
         android:allowBackup="true"
@@ -43,7 +37,8 @@
         <activity
             android:name=".HdrViewfinderActivity"
             android:label="@string/app_name"
-            android:screenOrientation="landscape">
+            android:screenOrientation="landscape"
+                android:theme="@style/Theme.AppCompat.Light">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN"/>
                 <category android:name="android.intent.category.LAUNCHER"/>
diff --git a/prebuilts/gradle/HdrViewfinder/Application/src/main/java/com/example/android/hdrviewfinder/CameraOps.java b/prebuilts/gradle/HdrViewfinder/Application/src/main/java/com/example/android/hdrviewfinder/CameraOps.java
index 5769760..173ef08 100644
--- a/prebuilts/gradle/HdrViewfinder/Application/src/main/java/com/example/android/hdrviewfinder/CameraOps.java
+++ b/prebuilts/gradle/HdrViewfinder/Application/src/main/java/com/example/android/hdrviewfinder/CameraOps.java
@@ -78,7 +78,7 @@
     }
 
     /**
-     * Open the first backfacing camera listed by the camera manager.
+     * Open the first back-facing camera listed by the camera manager.
      * Displays a dialog if it cannot open a camera.
      */
     public void openCamera(final String cameraId) {
diff --git a/prebuilts/gradle/HdrViewfinder/Application/src/main/java/com/example/android/hdrviewfinder/HdrViewfinderActivity.java b/prebuilts/gradle/HdrViewfinder/Application/src/main/java/com/example/android/hdrviewfinder/HdrViewfinderActivity.java
index 79f1bb6..ca49ea0 100644
--- a/prebuilts/gradle/HdrViewfinder/Application/src/main/java/com/example/android/hdrviewfinder/HdrViewfinderActivity.java
+++ b/prebuilts/gradle/HdrViewfinder/Application/src/main/java/com/example/android/hdrviewfinder/HdrViewfinderActivity.java
@@ -16,7 +16,9 @@
 
 package com.example.android.hdrviewfinder;
 
-import android.app.Activity;
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
 import android.hardware.camera2.CameraAccessException;
 import android.hardware.camera2.CameraCaptureSession;
 import android.hardware.camera2.CameraCharacteristics;
@@ -26,10 +28,16 @@
 import android.hardware.camera2.CaptureResult;
 import android.hardware.camera2.TotalCaptureResult;
 import android.hardware.camera2.params.StreamConfigurationMap;
+import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
+import android.provider.Settings;
 import android.renderscript.RenderScript;
+import android.support.annotation.NonNull;
+import android.support.design.widget.Snackbar;
+import android.support.v4.app.ActivityCompat;
+import android.support.v7.app.AppCompatActivity;
 import android.util.Log;
 import android.util.Size;
 import android.view.GestureDetector;
@@ -76,19 +84,26 @@
  * Android {@link android.view.Surface} class, which allows for zero-copy transport of large
  * buffers between processes and subsystems.</p>
  */
-public class HdrViewfinderActivity extends Activity implements
+public class HdrViewfinderActivity extends AppCompatActivity implements
         SurfaceHolder.Callback, CameraOps.ErrorDisplayer, CameraOps.CameraReadyListener {
 
     private static final String TAG = "HdrViewfinderDemo";
 
     private static final String FRAGMENT_DIALOG = "dialog";
 
+    private static final int REQUEST_PERMISSIONS_REQUEST_CODE = 34;
+
     /**
      * View for the camera preview.
      */
     private FixedAspectSurfaceView mPreviewView;
 
     /**
+     * Root view of this activity.
+     */
+    private View rootView;
+
+    /**
      * This shows the current mode of the app.
      */
     private TextView mModeText;
@@ -132,6 +147,8 @@
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
 
+        rootView = findViewById(R.id.panels);
+
         mPreviewView = (FixedAspectSurfaceView) findViewById(R.id.preview);
         mPreviewView.getHolder().addCallback(this);
         mPreviewView.setGestureListener(this, mViewListener);
@@ -146,23 +163,20 @@
 
         mUiHandler = new Handler(Looper.getMainLooper());
 
-        mCameraManager = (CameraManager) getSystemService(CAMERA_SERVICE);
-        mCameraOps = new CameraOps(mCameraManager,
-                /*errorDisplayer*/ this,
-                /*readyListener*/ this,
-                /*readyHandler*/ mUiHandler);
-
-        mHdrRequests.add(null);
-        mHdrRequests.add(null);
-
         mRS = RenderScript.create(this);
+
+        // When permissions are revoked the app is restarted so onCreate is sufficient to check for
+        // permissions core to the Activity's functionality.
+        if (!checkCameraPermissions()) {
+            requestCameraPermissions();
+        } else {
+            findAndOpenCamera();
+        }
     }
 
     @Override
     protected void onResume() {
         super.onResume();
-
-        findAndOpenCamera();
     }
 
     @Override
@@ -170,7 +184,10 @@
         super.onPause();
 
         // Wait until camera is closed to ensure the next application can open it
-        mCameraOps.closeCameraAndWait();
+        if (mCameraOps != null) {
+            mCameraOps.closeCameraAndWait();
+            mCameraOps = null;
+        }
     }
 
     @Override
@@ -232,7 +249,9 @@
         }
     };
 
-    // Show help dialog
+    /**
+     * Show help dialogs.
+     */
     private View.OnClickListener mHelpButtonListener = new View.OnClickListener() {
         public void onClick(View v) {
             MessageDialogFragment.newInstance(R.string.help_text)
@@ -240,54 +259,176 @@
         }
     };
 
+    /**
+     * Return the current state of the camera permissions.
+     */
+    private boolean checkCameraPermissions() {
+        int permissionState = ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
+
+        // Check if the Camera permission is already available.
+        if (permissionState != PackageManager.PERMISSION_GRANTED) {
+            // Camera permission has not been granted.
+            Log.i(TAG, "CAMERA permission has NOT been granted.");
+            return false;
+        } else {
+            // Camera permissions are available.
+            Log.i(TAG, "CAMERA permission has already been granted.");
+            return true;
+        }
+    }
+
+    /**
+     * Attempt to initialize the camera.
+     */
+    private void initializeCamera() {
+        mCameraManager = (CameraManager) getSystemService(CAMERA_SERVICE);
+        if (mCameraManager != null) {
+            mCameraOps = new CameraOps(mCameraManager,
+                /*errorDisplayer*/ this,
+                /*readyListener*/ this,
+                /*readyHandler*/ mUiHandler);
+
+            mHdrRequests.add(null);
+            mHdrRequests.add(null);
+        } else {
+            Log.e(TAG, "Couldn't initialize the camera");
+        }
+    }
+
+    private void requestCameraPermissions() {
+        boolean shouldProvideRationale =
+            ActivityCompat.shouldShowRequestPermissionRationale(this,
+                    Manifest.permission.CAMERA);
+
+        // Provide an additional rationale to the user. This would happen if the user denied the
+        // request previously, but didn't check the "Don't ask again" checkbox.
+        if (shouldProvideRationale) {
+            Log.i(TAG, "Displaying camera permission rationale to provide additional context.");
+            Snackbar.make(rootView, R.string.camera_permission_rationale, Snackbar
+                    .LENGTH_INDEFINITE)
+                    .setAction(R.string.ok, new View.OnClickListener() {
+                        @Override
+                        public void onClick(View view) {
+                            // Request Camera permission
+                            ActivityCompat.requestPermissions(HdrViewfinderActivity.this,
+                                    new String[]{Manifest.permission.CAMERA},
+                                    REQUEST_PERMISSIONS_REQUEST_CODE);
+                        }
+                    })
+                    .show();
+        } else {
+            Log.i(TAG, "Requesting camera permission");
+            // Request Camera permission. It's possible this can be auto answered if device policy
+            // sets the permission in a given state or the user denied the permission
+            // previously and checked "Never ask again".
+            ActivityCompat.requestPermissions(HdrViewfinderActivity.this,
+                    new String[]{Manifest.permission.CAMERA},
+                    REQUEST_PERMISSIONS_REQUEST_CODE);
+        }
+    }
+
+    /**
+     * Callback received when a permissions request has been completed.
+     */
+    @Override
+    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
+            @NonNull int[] grantResults) {
+        Log.i(TAG, "onRequestPermissionResult");
+        if (requestCode == REQUEST_PERMISSIONS_REQUEST_CODE) {
+            if (grantResults.length <= 0) {
+                // If user interaction was interrupted, the permission request is cancelled and you
+                // receive empty arrays.
+                Log.i(TAG, "User interaction was cancelled.");
+            } else if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                // Permission was granted.
+                findAndOpenCamera();
+            } else {
+                // Permission denied.
+
+                // In this Activity we've chosen to notify the user that they
+                // have rejected a core permission for the app since it makes the Activity useless.
+                // We're communicating this message in a Snackbar since this is a sample app, but
+                // core permissions would typically be best requested during a welcome-screen flow.
+
+                // Additionally, it is important to remember that a permission might have been
+                // rejected without asking the user for permission (device policy or "Never ask
+                // again" prompts). Therefore, a user interface affordance is typically implemented
+                // when permissions are denied. Otherwise, your app could appear unresponsive to
+                // touches or interactions which have required permissions.
+                Snackbar.make(rootView, R.string.camera_permission_denied_explanation, Snackbar
+                        .LENGTH_INDEFINITE)
+                        .setAction(R.string.settings, new View.OnClickListener() {
+                            @Override
+                            public void onClick(View view) {
+                                // Build intent that displays the App settings screen.
+                                Intent intent = new Intent();
+                                intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
+                                Uri uri = Uri.fromParts("package", BuildConfig.APPLICATION_ID, null);
+                                intent.setData(uri);
+                                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                                startActivity(intent);
+                            }
+                        })
+                        .show();
+            }
+        }
+    }
+
     private void findAndOpenCamera() {
+        boolean cameraPermissions = checkCameraPermissions();
+        if (cameraPermissions) {
+            String errorMessage = "Unknown error";
+            boolean foundCamera = false;
+            initializeCamera();
+            if (cameraPermissions && mCameraOps != null) {
+                try {
+                    // Find first back-facing camera that has necessary capability.
+                    String[] cameraIds = mCameraManager.getCameraIdList();
+                    for (String id : cameraIds) {
+                        CameraCharacteristics info = mCameraManager.getCameraCharacteristics(id);
+                        int facing = info.get(CameraCharacteristics.LENS_FACING);
 
-        String errorMessage = "Unknown error";
-        boolean foundCamera = false;
-        try {
-            // Find first back-facing camera that has necessary capability
-            String[] cameraIds = mCameraManager.getCameraIdList();
-            for (String id : cameraIds) {
-                CameraCharacteristics info = mCameraManager.getCameraCharacteristics(id);
-                int facing = info.get(CameraCharacteristics.LENS_FACING);
+                        int level = info.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);
+                        boolean hasFullLevel
+                                = (level
+                                == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL);
 
-                int level = info.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);
-                boolean hasFullLevel
-                        = (level == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL);
+                        int[] capabilities = info
+                                .get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES);
+                        int syncLatency = info.get(CameraCharacteristics.SYNC_MAX_LATENCY);
+                        boolean hasManualControl = hasCapability(capabilities,
+                                CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR);
+                        boolean hasEnoughCapability = hasManualControl &&
+                                syncLatency
+                                        == CameraCharacteristics.SYNC_MAX_LATENCY_PER_FRAME_CONTROL;
 
-                int[] capabilities = info.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES);
-                int syncLatency = info.get(CameraCharacteristics.SYNC_MAX_LATENCY);
-                boolean hasManualControl = hasCapability(capabilities,
-                        CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR);
-                boolean hasEnoughCapability = hasManualControl &&
-                        syncLatency == CameraCharacteristics.SYNC_MAX_LATENCY_PER_FRAME_CONTROL;
-
-                // All these are guaranteed by
-                // CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL, but checking for only
-                // the things we care about expands range of devices we can run on
-                // We want:
-                //  - Back-facing camera
-                //  - Manual sensor control
-                //  - Per-frame synchronization (so that exposure can be changed every frame)
-                if (facing == CameraCharacteristics.LENS_FACING_BACK &&
-                        (hasFullLevel || hasEnoughCapability)) {
-                    // Found suitable camera - get info, open, and set up outputs
-                    mCameraInfo = info;
-                    mCameraOps.openCamera(id);
-                    configureSurfaces();
-                    foundCamera = true;
-                    break;
+                        // All these are guaranteed by
+                        // CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL, but checking
+                        // for only the things we care about expands range of devices we can run on.
+                        // We want:
+                        //  - Back-facing camera
+                        //  - Manual sensor control
+                        //  - Per-frame synchronization (so that exposure can be changed every frame)
+                        if (facing == CameraCharacteristics.LENS_FACING_BACK &&
+                                (hasFullLevel || hasEnoughCapability)) {
+                            // Found suitable camera - get info, open, and set up outputs
+                            mCameraInfo = info;
+                            mCameraOps.openCamera(id);
+                            configureSurfaces();
+                            foundCamera = true;
+                            break;
+                        }
+                    }
+                    if (!foundCamera) {
+                        errorMessage = getString(R.string.camera_no_good);
+                    }
+                } catch (CameraAccessException e) {
+                    errorMessage = getErrorString(e);
+                }
+                if (!foundCamera) {
+                    showErrorDialog(errorMessage);
                 }
             }
-            if (!foundCamera) {
-                errorMessage = getString(R.string.camera_no_good);
-            }
-        } catch (CameraAccessException e) {
-            errorMessage = getErrorString(e);
-        }
-
-        if (!foundCamera) {
-            showErrorDialog(errorMessage);
         }
     }
 
@@ -299,23 +440,25 @@
     }
 
     private void switchRenderMode(int direction) {
-        mRenderMode = (mRenderMode + direction) % 3;
+        if (mCameraOps != null) {
+            mRenderMode = (mRenderMode + direction) % 3;
 
-        mModeText.setText(getResources().getStringArray(R.array.mode_label_array)[mRenderMode]);
+            mModeText.setText(getResources().getStringArray(R.array.mode_label_array)[mRenderMode]);
 
-        if (mProcessor != null) {
-            mProcessor.setRenderMode(mRenderMode);
-        }
-        if (mRenderMode == ViewfinderProcessor.MODE_NORMAL) {
-            mCameraOps.setRepeatingRequest(mPreviewRequest,
-                    mCaptureCallback, mUiHandler);
-        } else {
-            setHdrBurst();
+            if (mProcessor != null) {
+                mProcessor.setRenderMode(mRenderMode);
+            }
+            if (mRenderMode == ViewfinderProcessor.MODE_NORMAL) {
+                mCameraOps.setRepeatingRequest(mPreviewRequest,
+                        mCaptureCallback, mUiHandler);
+            } else {
+                setHdrBurst();
+            }
         }
     }
 
     /**
-     * Configure the surfaceview and RS processing
+     * Configure the surfaceview and RS processing.
      */
     private void configureSurfaces() {
         // Find a good size for output - largest 16:9 aspect ratio that's less than 720p
diff --git a/prebuilts/gradle/HdrViewfinder/Application/src/main/res/layout/main.xml b/prebuilts/gradle/HdrViewfinder/Application/src/main/res/layout/main.xml
index 7507709..6fe56ef 100644
--- a/prebuilts/gradle/HdrViewfinder/Application/src/main/res/layout/main.xml
+++ b/prebuilts/gradle/HdrViewfinder/Application/src/main/res/layout/main.xml
@@ -15,13 +15,14 @@
      limitations under the License.
 -->
 <LinearLayout
-    android:id="@+id/panels"
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:custom="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/panels"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:orientation="horizontal">
+    android:orientation="horizontal"
+    tools:context="com.example.android.hdrviewfinder.HdrViewfinderActivity">
 
     <com.example.android.hdrviewfinder.FixedAspectSurfaceView
         android:id="@+id/preview"
@@ -36,7 +37,8 @@
         android:layout_width="0px"
         android:layout_height="match_parent"
         android:layout_weight="1"
-        android:orientation="vertical">
+        android:orientation="vertical"
+        android:layout_margin="5dp">
 
         <Button
             android:id="@+id/help_button"
diff --git a/prebuilts/gradle/HdrViewfinder/Application/src/main/res/values/strings.xml b/prebuilts/gradle/HdrViewfinder/Application/src/main/res/values/strings.xml
index 21838d5..d910ab1 100644
--- a/prebuilts/gradle/HdrViewfinder/Application/src/main/res/values/strings.xml
+++ b/prebuilts/gradle/HdrViewfinder/Application/src/main/res/values/strings.xml
@@ -50,10 +50,18 @@
 
     <string name="info">Info</string>
 
+    <string name="camera_permission_rationale">This sample app requires camera access in order to
+        demo the API.</string>
     <string name="camera_no_good">No back-facing sufficiently capable camera available!</string>
     <string name="camera_disabled">Camera is disabled by device policy</string>
     <string name="camera_disconnected">Camera was disconnected before it was opened</string>
     <string name="camera_error">Camera service reported an error</string>
     <string name="camera_unknown">Unknown camera error: %s</string>
+    <string name="camera_permission_denied_explanation">You\'ve denied a permission that the app
+        needs for core functionality. If you selected &quot;don\'t ask again&quot; in the past then
+        you need to use Settings to re-enable the permission.</string>
+
+    <string name="ok">OK</string>
+    <string name="settings">Settings</string>
 
 </resources>
diff --git a/prebuilts/gradle/HdrViewfinder/README.md b/prebuilts/gradle/HdrViewfinder/README.md
index b0fa1fd..73433ca 100644
--- a/prebuilts/gradle/HdrViewfinder/README.md
+++ b/prebuilts/gradle/HdrViewfinder/README.md
@@ -43,7 +43,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/HorizontalPaging/Application/build.gradle b/prebuilts/gradle/HorizontalPaging/Application/build.gradle
index 36a255f..51afa0f 100644
--- a/prebuilts/gradle/HorizontalPaging/Application/build.gradle
+++ b/prebuilts/gradle/HorizontalPaging/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 11
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/HorizontalPaging/README.md b/prebuilts/gradle/HorizontalPaging/README.md
index acb0a50..25bdabe 100644
--- a/prebuilts/gradle/HorizontalPaging/README.md
+++ b/prebuilts/gradle/HorizontalPaging/README.md
@@ -30,7 +30,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/ImmersiveMode/Application/build.gradle b/prebuilts/gradle/ImmersiveMode/Application/build.gradle
index 36a255f..51afa0f 100644
--- a/prebuilts/gradle/ImmersiveMode/Application/build.gradle
+++ b/prebuilts/gradle/ImmersiveMode/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 11
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/ImmersiveMode/README.md b/prebuilts/gradle/ImmersiveMode/README.md
index 1fa9c57..42cc02d 100644
--- a/prebuilts/gradle/ImmersiveMode/README.md
+++ b/prebuilts/gradle/ImmersiveMode/README.md
@@ -9,7 +9,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/Interpolator/Application/build.gradle b/prebuilts/gradle/Interpolator/Application/build.gradle
index d61ba60..dd9fedf 100644
--- a/prebuilts/gradle/Interpolator/Application/build.gradle
+++ b/prebuilts/gradle/Interpolator/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 21
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/Interpolator/README.md b/prebuilts/gradle/Interpolator/README.md
index 4774e9e..75bc502 100644
--- a/prebuilts/gradle/Interpolator/README.md
+++ b/prebuilts/gradle/Interpolator/README.md
@@ -23,7 +23,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/JumpingJack/README.md b/prebuilts/gradle/JumpingJack/README.md
index 52dc731..2959461 100644
--- a/prebuilts/gradle/JumpingJack/README.md
+++ b/prebuilts/gradle/JumpingJack/README.md
@@ -44,7 +44,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/JumpingJack/Wearable/build.gradle b/prebuilts/gradle/JumpingJack/Wearable/build.gradle
index e686405..2bab61f 100644
--- a/prebuilts/gradle/JumpingJack/Wearable/build.gradle
+++ b/prebuilts/gradle/JumpingJack/Wearable/build.gradle
@@ -31,7 +31,7 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
@@ -40,13 +40,6 @@
         versionName "1.0"
     }
 
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
diff --git a/prebuilts/gradle/LNotifications/Application/build.gradle b/prebuilts/gradle/LNotifications/Application/build.gradle
index d61ba60..dd9fedf 100644
--- a/prebuilts/gradle/LNotifications/Application/build.gradle
+++ b/prebuilts/gradle/LNotifications/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 21
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/LNotifications/README.md b/prebuilts/gradle/LNotifications/README.md
index f4c8a10..ff96881 100644
--- a/prebuilts/gradle/LNotifications/README.md
+++ b/prebuilts/gradle/LNotifications/README.md
@@ -26,7 +26,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/MediaBrowserService/Application/build.gradle b/prebuilts/gradle/MediaBrowserService/Application/build.gradle
index 2abb4fd..e115227 100644
--- a/prebuilts/gradle/MediaBrowserService/Application/build.gradle
+++ b/prebuilts/gradle/MediaBrowserService/Application/build.gradle
@@ -29,12 +29,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 21
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/MediaBrowserService/README.md b/prebuilts/gradle/MediaBrowserService/README.md
index 179586e..1bb1dbc 100644
--- a/prebuilts/gradle/MediaBrowserService/README.md
+++ b/prebuilts/gradle/MediaBrowserService/README.md
@@ -72,7 +72,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/MediaEffects/Application/build.gradle b/prebuilts/gradle/MediaEffects/Application/build.gradle
index c9fe712..06f262f 100644
--- a/prebuilts/gradle/MediaEffects/Application/build.gradle
+++ b/prebuilts/gradle/MediaEffects/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 14
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/MediaEffects/README.md b/prebuilts/gradle/MediaEffects/README.md
index d805003..b9dfb3f 100644
--- a/prebuilts/gradle/MediaEffects/README.md
+++ b/prebuilts/gradle/MediaEffects/README.md
@@ -21,7 +21,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/MediaRecorder/Application/build.gradle b/prebuilts/gradle/MediaRecorder/Application/build.gradle
index c45e507..b926fea 100644
--- a/prebuilts/gradle/MediaRecorder/Application/build.gradle
+++ b/prebuilts/gradle/MediaRecorder/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 16
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/MediaRecorder/README.md b/prebuilts/gradle/MediaRecorder/README.md
index 347a6a7..eccf9d0 100644
--- a/prebuilts/gradle/MediaRecorder/README.md
+++ b/prebuilts/gradle/MediaRecorder/README.md
@@ -25,7 +25,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/MediaRouter/Application/build.gradle b/prebuilts/gradle/MediaRouter/Application/build.gradle
index d3377bd..735238d 100644
--- a/prebuilts/gradle/MediaRouter/Application/build.gradle
+++ b/prebuilts/gradle/MediaRouter/Application/build.gradle
@@ -32,12 +32,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 13
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/MediaRouter/README.md b/prebuilts/gradle/MediaRouter/README.md
index 48542f4..297c88c 100644
--- a/prebuilts/gradle/MediaRouter/README.md
+++ b/prebuilts/gradle/MediaRouter/README.md
@@ -7,7 +7,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/MessagingService/Application/build.gradle b/prebuilts/gradle/MessagingService/Application/build.gradle
index 2abb4fd..e115227 100644
--- a/prebuilts/gradle/MessagingService/Application/build.gradle
+++ b/prebuilts/gradle/MessagingService/Application/build.gradle
@@ -29,12 +29,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 21
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/MessagingService/README.md b/prebuilts/gradle/MessagingService/README.md
index 16a11f7..c422155 100644
--- a/prebuilts/gradle/MessagingService/README.md
+++ b/prebuilts/gradle/MessagingService/README.md
@@ -46,7 +46,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/NetworkConnect/Application/build.gradle b/prebuilts/gradle/NetworkConnect/Application/build.gradle
index d7467d8..5eb1d01 100644
--- a/prebuilts/gradle/NetworkConnect/Application/build.gradle
+++ b/prebuilts/gradle/NetworkConnect/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 8
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/NetworkConnect/README.md b/prebuilts/gradle/NetworkConnect/README.md
index bde6e4b..65c0a6f 100644
--- a/prebuilts/gradle/NetworkConnect/README.md
+++ b/prebuilts/gradle/NetworkConnect/README.md
@@ -17,7 +17,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/NfcProvisioning/Application/build.gradle b/prebuilts/gradle/NfcProvisioning/Application/build.gradle
index d61ba60..dd9fedf 100644
--- a/prebuilts/gradle/NfcProvisioning/Application/build.gradle
+++ b/prebuilts/gradle/NfcProvisioning/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 21
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/NfcProvisioning/README.md b/prebuilts/gradle/NfcProvisioning/README.md
index c33192f..c369960 100644
--- a/prebuilts/gradle/NfcProvisioning/README.md
+++ b/prebuilts/gradle/NfcProvisioning/README.md
@@ -33,7 +33,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/Notifications/Application/build.gradle b/prebuilts/gradle/Notifications/Application/build.gradle
index b51c137..9680f2b 100644
--- a/prebuilts/gradle/Notifications/Application/build.gradle
+++ b/prebuilts/gradle/Notifications/Application/build.gradle
@@ -33,12 +33,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/Notifications/README.md b/prebuilts/gradle/Notifications/README.md
index 6a568bb..9d2f9ae 100644
--- a/prebuilts/gradle/Notifications/README.md
+++ b/prebuilts/gradle/Notifications/README.md
@@ -23,7 +23,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/Notifications/Wearable/build.gradle b/prebuilts/gradle/Notifications/Wearable/build.gradle
index e686405..2bab61f 100644
--- a/prebuilts/gradle/Notifications/Wearable/build.gradle
+++ b/prebuilts/gradle/Notifications/Wearable/build.gradle
@@ -31,7 +31,7 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
@@ -40,13 +40,6 @@
         versionName "1.0"
     }
 
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
diff --git a/prebuilts/gradle/PermissionRequest/Application/build.gradle b/prebuilts/gradle/PermissionRequest/Application/build.gradle
index d61ba60..dd9fedf 100644
--- a/prebuilts/gradle/PermissionRequest/Application/build.gradle
+++ b/prebuilts/gradle/PermissionRequest/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 21
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/PermissionRequest/README.md b/prebuilts/gradle/PermissionRequest/README.md
index 4ff11d6..2401e3c 100644
--- a/prebuilts/gradle/PermissionRequest/README.md
+++ b/prebuilts/gradle/PermissionRequest/README.md
@@ -46,7 +46,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/Quiz/Application/build.gradle b/prebuilts/gradle/Quiz/Application/build.gradle
index b51c137..9680f2b 100644
--- a/prebuilts/gradle/Quiz/Application/build.gradle
+++ b/prebuilts/gradle/Quiz/Application/build.gradle
@@ -33,12 +33,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/Quiz/README.md b/prebuilts/gradle/Quiz/README.md
index 8689db7..4b14f7a 100644
--- a/prebuilts/gradle/Quiz/README.md
+++ b/prebuilts/gradle/Quiz/README.md
@@ -13,7 +13,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/Quiz/Wearable/build.gradle b/prebuilts/gradle/Quiz/Wearable/build.gradle
index e686405..2bab61f 100644
--- a/prebuilts/gradle/Quiz/Wearable/build.gradle
+++ b/prebuilts/gradle/Quiz/Wearable/build.gradle
@@ -31,7 +31,7 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
@@ -40,13 +40,6 @@
         versionName "1.0"
     }
 
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
diff --git a/prebuilts/gradle/RecipeAssistant/Application/build.gradle b/prebuilts/gradle/RecipeAssistant/Application/build.gradle
index 054db59..df32b0f 100644
--- a/prebuilts/gradle/RecipeAssistant/Application/build.gradle
+++ b/prebuilts/gradle/RecipeAssistant/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/RecipeAssistant/README.md b/prebuilts/gradle/RecipeAssistant/README.md
index d490231..1dc3c92 100644
--- a/prebuilts/gradle/RecipeAssistant/README.md
+++ b/prebuilts/gradle/RecipeAssistant/README.md
@@ -12,7 +12,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/RecyclerView/Application/build.gradle b/prebuilts/gradle/RecyclerView/Application/build.gradle
index 8675814..b2670d3 100644
--- a/prebuilts/gradle/RecyclerView/Application/build.gradle
+++ b/prebuilts/gradle/RecyclerView/Application/build.gradle
@@ -31,12 +31,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 7
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/RecyclerView/README.md b/prebuilts/gradle/RecyclerView/README.md
index 35bff40..e323b6a 100644
--- a/prebuilts/gradle/RecyclerView/README.md
+++ b/prebuilts/gradle/RecyclerView/README.md
@@ -29,7 +29,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/RenderScriptIntrinsic/Application/build.gradle b/prebuilts/gradle/RenderScriptIntrinsic/Application/build.gradle
index 0dd5383..3ec021b 100644
--- a/prebuilts/gradle/RenderScriptIntrinsic/Application/build.gradle
+++ b/prebuilts/gradle/RenderScriptIntrinsic/Application/build.gradle
@@ -31,12 +31,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 13
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/RenderScriptIntrinsic/README.md b/prebuilts/gradle/RenderScriptIntrinsic/README.md
index c3eea7e..838c5af 100644
--- a/prebuilts/gradle/RenderScriptIntrinsic/README.md
+++ b/prebuilts/gradle/RenderScriptIntrinsic/README.md
@@ -36,7 +36,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/RepeatingAlarm/Application/build.gradle b/prebuilts/gradle/RepeatingAlarm/Application/build.gradle
index 36a255f..51afa0f 100644
--- a/prebuilts/gradle/RepeatingAlarm/Application/build.gradle
+++ b/prebuilts/gradle/RepeatingAlarm/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 11
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/RepeatingAlarm/README.md b/prebuilts/gradle/RepeatingAlarm/README.md
index 4955d0b..66d1225 100644
--- a/prebuilts/gradle/RepeatingAlarm/README.md
+++ b/prebuilts/gradle/RepeatingAlarm/README.md
@@ -8,7 +8,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/RuntimePermissions/Application/build.gradle b/prebuilts/gradle/RuntimePermissions/Application/build.gradle
index 3f1bc93..7e9cb48 100644
--- a/prebuilts/gradle/RuntimePermissions/Application/build.gradle
+++ b/prebuilts/gradle/RuntimePermissions/Application/build.gradle
@@ -31,12 +31,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion "android-MNC"
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
-        minSdkVersion "MNC"
-        targetSdkVersion "MNC"
+        minSdkVersion 23
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/RuntimePermissions/Application/src/main/java/com/example/android/system/runtimepermissions/PermissionUtil.java b/prebuilts/gradle/RuntimePermissions/Application/src/main/java/com/example/android/system/runtimepermissions/PermissionUtil.java
index f5241ef..d0742ea 100644
--- a/prebuilts/gradle/RuntimePermissions/Application/src/main/java/com/example/android/system/runtimepermissions/PermissionUtil.java
+++ b/prebuilts/gradle/RuntimePermissions/Application/src/main/java/com/example/android/system/runtimepermissions/PermissionUtil.java
@@ -79,12 +79,6 @@
     }
 
     public static boolean isMNC() {
-        /*
-         TODO: In the Android M Preview release, checking if the platform is M is done through
-         the codename, not the version code. Once the API has been finalised, the following check
-         should be used: */
-        // return Build.VERSION.SDK_INT == Build.VERSION_CODES.M
-
-        return "MNC".equals(Build.VERSION.CODENAME);
+        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
     }
 }
diff --git a/prebuilts/gradle/RuntimePermissions/README.md b/prebuilts/gradle/RuntimePermissions/README.md
index 9be94fb..94a6999 100644
--- a/prebuilts/gradle/RuntimePermissions/README.md
+++ b/prebuilts/gradle/RuntimePermissions/README.md
@@ -29,7 +29,7 @@
 Pre-requisites
 --------------
 
-- Android SDK vandroid-MNC
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/RuntimePermissions/screenshots/screenshot-1.png.png b/prebuilts/gradle/RuntimePermissions/screenshots/screenshot-1.png.png
deleted file mode 100644
index bb848d8..0000000
--- a/prebuilts/gradle/RuntimePermissions/screenshots/screenshot-1.png.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/RuntimePermissions/screenshots/screenshot-2.png.png b/prebuilts/gradle/RuntimePermissions/screenshots/screenshot-2.png.png
deleted file mode 100644
index c98c212..0000000
--- a/prebuilts/gradle/RuntimePermissions/screenshots/screenshot-2.png.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/RuntimePermissions/screenshots/web-icon.png b/prebuilts/gradle/RuntimePermissions/screenshots/web-icon.png
deleted file mode 100755
index 68af9d0..0000000
--- a/prebuilts/gradle/RuntimePermissions/screenshots/web-icon.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/RuntimePermissionsBasic/Application/build.gradle b/prebuilts/gradle/RuntimePermissionsBasic/Application/build.gradle
index 3f1bc93..7e9cb48 100644
--- a/prebuilts/gradle/RuntimePermissionsBasic/Application/build.gradle
+++ b/prebuilts/gradle/RuntimePermissionsBasic/Application/build.gradle
@@ -31,12 +31,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion "android-MNC"
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
-        minSdkVersion "MNC"
-        targetSdkVersion "MNC"
+        minSdkVersion 23
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/RuntimePermissionsBasic/Application/src/main/java/com/example/android/basicpermissions/MainActivity.java b/prebuilts/gradle/RuntimePermissionsBasic/Application/src/main/java/com/example/android/basicpermissions/MainActivity.java
index 37e8556..9fa646d 100644
--- a/prebuilts/gradle/RuntimePermissionsBasic/Application/src/main/java/com/example/android/basicpermissions/MainActivity.java
+++ b/prebuilts/gradle/RuntimePermissionsBasic/Application/src/main/java/com/example/android/basicpermissions/MainActivity.java
@@ -131,12 +131,6 @@
     }
 
     public static boolean isMNC() {
-        /*
-         TODO: In the Android M Preview release, checking if the platform is M is done through
-         the codename, not the version code. Once the API has been finalised, the following check
-         should be used: */
-        // return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
-
-        return "MNC".equals(Build.VERSION.CODENAME);
+        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
     }
 }
diff --git a/prebuilts/gradle/RuntimePermissionsBasic/README.md b/prebuilts/gradle/RuntimePermissionsBasic/README.md
index 4ba3899..37f3410 100644
--- a/prebuilts/gradle/RuntimePermissionsBasic/README.md
+++ b/prebuilts/gradle/RuntimePermissionsBasic/README.md
@@ -19,7 +19,7 @@
 Pre-requisites
 --------------
 
-- Android SDK vandroid-MNC
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/ScreenCapture/Application/build.gradle b/prebuilts/gradle/ScreenCapture/Application/build.gradle
index d61ba60..dd9fedf 100644
--- a/prebuilts/gradle/ScreenCapture/Application/build.gradle
+++ b/prebuilts/gradle/ScreenCapture/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 21
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/ScreenCapture/README.md b/prebuilts/gradle/ScreenCapture/README.md
index ea51078..98f8f1c 100644
--- a/prebuilts/gradle/ScreenCapture/README.md
+++ b/prebuilts/gradle/ScreenCapture/README.md
@@ -26,7 +26,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/SkeletonWearableApp/README.md b/prebuilts/gradle/SkeletonWearableApp/README.md
index 93689a9..42b6ff3 100644
--- a/prebuilts/gradle/SkeletonWearableApp/README.md
+++ b/prebuilts/gradle/SkeletonWearableApp/README.md
@@ -21,7 +21,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/SkeletonWearableApp/Wearable/build.gradle b/prebuilts/gradle/SkeletonWearableApp/Wearable/build.gradle
index e686405..2bab61f 100644
--- a/prebuilts/gradle/SkeletonWearableApp/Wearable/build.gradle
+++ b/prebuilts/gradle/SkeletonWearableApp/Wearable/build.gradle
@@ -31,7 +31,7 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
@@ -40,13 +40,6 @@
         versionName "1.0"
     }
 
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
diff --git a/prebuilts/gradle/SlidingTabsBasic/Application/build.gradle b/prebuilts/gradle/SlidingTabsBasic/Application/build.gradle
index c9fe712..06f262f 100644
--- a/prebuilts/gradle/SlidingTabsBasic/Application/build.gradle
+++ b/prebuilts/gradle/SlidingTabsBasic/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 14
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/SlidingTabsBasic/README.md b/prebuilts/gradle/SlidingTabsBasic/README.md
index f0c2571..e9147c2 100644
--- a/prebuilts/gradle/SlidingTabsBasic/README.md
+++ b/prebuilts/gradle/SlidingTabsBasic/README.md
@@ -8,7 +8,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/SlidingTabsColors/Application/build.gradle b/prebuilts/gradle/SlidingTabsColors/Application/build.gradle
index c9fe712..06f262f 100644
--- a/prebuilts/gradle/SlidingTabsColors/Application/build.gradle
+++ b/prebuilts/gradle/SlidingTabsColors/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 14
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/SlidingTabsColors/README.md b/prebuilts/gradle/SlidingTabsColors/README.md
index e61a11b..665f11e 100644
--- a/prebuilts/gradle/SlidingTabsColors/README.md
+++ b/prebuilts/gradle/SlidingTabsColors/README.md
@@ -25,7 +25,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/SpeedTracker/Application/build.gradle b/prebuilts/gradle/SpeedTracker/Application/build.gradle
index 544de3c..61e576e 100644
--- a/prebuilts/gradle/SpeedTracker/Application/build.gradle
+++ b/prebuilts/gradle/SpeedTracker/Application/build.gradle
@@ -33,13 +33,13 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
         versionCode 1
         versionName "1.0"
     }
diff --git a/prebuilts/gradle/SpeedTracker/README.md b/prebuilts/gradle/SpeedTracker/README.md
index 7e3797b..582b52c 100644
--- a/prebuilts/gradle/SpeedTracker/README.md
+++ b/prebuilts/gradle/SpeedTracker/README.md
@@ -16,7 +16,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/SpeedTracker/Shared/build.gradle b/prebuilts/gradle/SpeedTracker/Shared/build.gradle
index 2c7fe14..738aaab 100644
--- a/prebuilts/gradle/SpeedTracker/Shared/build.gradle
+++ b/prebuilts/gradle/SpeedTracker/Shared/build.gradle
@@ -26,13 +26,13 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/SpeedTracker/Wearable/build.gradle b/prebuilts/gradle/SpeedTracker/Wearable/build.gradle
index 534d213..81abc02 100644
--- a/prebuilts/gradle/SpeedTracker/Wearable/build.gradle
+++ b/prebuilts/gradle/SpeedTracker/Wearable/build.gradle
@@ -34,7 +34,7 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
@@ -43,13 +43,6 @@
         versionName "1.0"
     }
 
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
diff --git a/prebuilts/gradle/StorageClient/Application/build.gradle b/prebuilts/gradle/StorageClient/Application/build.gradle
index c45e507..b926fea 100644
--- a/prebuilts/gradle/StorageClient/Application/build.gradle
+++ b/prebuilts/gradle/StorageClient/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 16
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/StorageClient/README.md b/prebuilts/gradle/StorageClient/README.md
index 4ed5057..6a708db 100644
--- a/prebuilts/gradle/StorageClient/README.md
+++ b/prebuilts/gradle/StorageClient/README.md
@@ -23,7 +23,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/StorageProvider/Application/build.gradle b/prebuilts/gradle/StorageProvider/Application/build.gradle
index db9a58b..0fe145d 100644
--- a/prebuilts/gradle/StorageProvider/Application/build.gradle
+++ b/prebuilts/gradle/StorageProvider/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 19
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/StorageProvider/README.md b/prebuilts/gradle/StorageProvider/README.md
index b23cb83..6b6dea2 100644
--- a/prebuilts/gradle/StorageProvider/README.md
+++ b/prebuilts/gradle/StorageProvider/README.md
@@ -20,7 +20,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/SwipeRefreshLayoutBasic/Application/build.gradle b/prebuilts/gradle/SwipeRefreshLayoutBasic/Application/build.gradle
index c9fe712..06f262f 100644
--- a/prebuilts/gradle/SwipeRefreshLayoutBasic/Application/build.gradle
+++ b/prebuilts/gradle/SwipeRefreshLayoutBasic/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 14
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/SwipeRefreshLayoutBasic/README.md b/prebuilts/gradle/SwipeRefreshLayoutBasic/README.md
index f295b8a..ada86c3 100644
--- a/prebuilts/gradle/SwipeRefreshLayoutBasic/README.md
+++ b/prebuilts/gradle/SwipeRefreshLayoutBasic/README.md
@@ -9,7 +9,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/SwipeRefreshListFragment/Application/build.gradle b/prebuilts/gradle/SwipeRefreshListFragment/Application/build.gradle
index c9fe712..06f262f 100644
--- a/prebuilts/gradle/SwipeRefreshListFragment/Application/build.gradle
+++ b/prebuilts/gradle/SwipeRefreshListFragment/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 14
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/SwipeRefreshListFragment/README.md b/prebuilts/gradle/SwipeRefreshListFragment/README.md
index 9a4b7be..a755c87 100644
--- a/prebuilts/gradle/SwipeRefreshListFragment/README.md
+++ b/prebuilts/gradle/SwipeRefreshListFragment/README.md
@@ -23,7 +23,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/SwipeRefreshMultipleViews/Application/build.gradle b/prebuilts/gradle/SwipeRefreshMultipleViews/Application/build.gradle
index c9fe712..06f262f 100644
--- a/prebuilts/gradle/SwipeRefreshMultipleViews/Application/build.gradle
+++ b/prebuilts/gradle/SwipeRefreshMultipleViews/Application/build.gradle
@@ -30,12 +30,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 14
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/SwipeRefreshMultipleViews/README.md b/prebuilts/gradle/SwipeRefreshMultipleViews/README.md
index 9285428..da42afd 100644
--- a/prebuilts/gradle/SwipeRefreshMultipleViews/README.md
+++ b/prebuilts/gradle/SwipeRefreshMultipleViews/README.md
@@ -10,7 +10,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/SynchronizedNotifications/Application/build.gradle b/prebuilts/gradle/SynchronizedNotifications/Application/build.gradle
index 05910d2..2d02a3a 100644
--- a/prebuilts/gradle/SynchronizedNotifications/Application/build.gradle
+++ b/prebuilts/gradle/SynchronizedNotifications/Application/build.gradle
@@ -32,13 +32,13 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
         versionCode 1
         versionName "1.0"
     }
diff --git a/prebuilts/gradle/SynchronizedNotifications/README.md b/prebuilts/gradle/SynchronizedNotifications/README.md
index 677a88d..3ffa2a3 100644
--- a/prebuilts/gradle/SynchronizedNotifications/README.md
+++ b/prebuilts/gradle/SynchronizedNotifications/README.md
@@ -51,7 +51,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/SynchronizedNotifications/Shared/build.gradle b/prebuilts/gradle/SynchronizedNotifications/Shared/build.gradle
index 2c7fe14..738aaab 100644
--- a/prebuilts/gradle/SynchronizedNotifications/Shared/build.gradle
+++ b/prebuilts/gradle/SynchronizedNotifications/Shared/build.gradle
@@ -26,13 +26,13 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/SynchronizedNotifications/Wearable/build.gradle b/prebuilts/gradle/SynchronizedNotifications/Wearable/build.gradle
index 5cd7813..72904b1 100644
--- a/prebuilts/gradle/SynchronizedNotifications/Wearable/build.gradle
+++ b/prebuilts/gradle/SynchronizedNotifications/Wearable/build.gradle
@@ -33,7 +33,7 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
@@ -42,13 +42,6 @@
         versionName "1.0"
     }
 
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
diff --git a/prebuilts/gradle/TextLinkify/Application/build.gradle b/prebuilts/gradle/TextLinkify/Application/build.gradle
index 672e647..03141e9 100644
--- a/prebuilts/gradle/TextLinkify/Application/build.gradle
+++ b/prebuilts/gradle/TextLinkify/Application/build.gradle
@@ -28,12 +28,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 4
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/TextLinkify/README.md b/prebuilts/gradle/TextLinkify/README.md
index 46b418a..6d8ea5b 100644
--- a/prebuilts/gradle/TextLinkify/README.md
+++ b/prebuilts/gradle/TextLinkify/README.md
@@ -32,7 +32,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/TextSwitcher/Application/build.gradle b/prebuilts/gradle/TextSwitcher/Application/build.gradle
index 672e647..03141e9 100644
--- a/prebuilts/gradle/TextSwitcher/Application/build.gradle
+++ b/prebuilts/gradle/TextSwitcher/Application/build.gradle
@@ -28,12 +28,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 4
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/TextSwitcher/README.md b/prebuilts/gradle/TextSwitcher/README.md
index ec9aa9b..973e94e 100644
--- a/prebuilts/gradle/TextSwitcher/README.md
+++ b/prebuilts/gradle/TextSwitcher/README.md
@@ -22,7 +22,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/Timer/README.md b/prebuilts/gradle/Timer/README.md
index 15a0545..9a2665e 100644
--- a/prebuilts/gradle/Timer/README.md
+++ b/prebuilts/gradle/Timer/README.md
@@ -8,7 +8,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/Timer/Wearable/build.gradle b/prebuilts/gradle/Timer/Wearable/build.gradle
index e686405..2bab61f 100644
--- a/prebuilts/gradle/Timer/Wearable/build.gradle
+++ b/prebuilts/gradle/Timer/Wearable/build.gradle
@@ -31,7 +31,7 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
@@ -40,13 +40,6 @@
         versionName "1.0"
     }
 
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
diff --git a/prebuilts/gradle/WatchFace/Application/build.gradle b/prebuilts/gradle/WatchFace/Application/build.gradle
index 3e2bee7..02e0c0f 100644
--- a/prebuilts/gradle/WatchFace/Application/build.gradle
+++ b/prebuilts/gradle/WatchFace/Application/build.gradle
@@ -34,12 +34,12 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/WatchFace/README.md b/prebuilts/gradle/WatchFace/README.md
index 5b6fff5..fa38512 100644
--- a/prebuilts/gradle/WatchFace/README.md
+++ b/prebuilts/gradle/WatchFace/README.md
@@ -10,7 +10,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/WatchFace/Wearable/build.gradle b/prebuilts/gradle/WatchFace/Wearable/build.gradle
index e686405..2bab61f 100644
--- a/prebuilts/gradle/WatchFace/Wearable/build.gradle
+++ b/prebuilts/gradle/WatchFace/Wearable/build.gradle
@@ -31,7 +31,7 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
@@ -40,13 +40,6 @@
         versionName "1.0"
     }
 
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
diff --git a/prebuilts/gradle/WatchViewStub/README.md b/prebuilts/gradle/WatchViewStub/README.md
index c51f7da..af346fa 100644
--- a/prebuilts/gradle/WatchViewStub/README.md
+++ b/prebuilts/gradle/WatchViewStub/README.md
@@ -16,7 +16,7 @@
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/WatchViewStub/Wearable/build.gradle b/prebuilts/gradle/WatchViewStub/Wearable/build.gradle
index e686405..2bab61f 100644
--- a/prebuilts/gradle/WatchViewStub/Wearable/build.gradle
+++ b/prebuilts/gradle/WatchViewStub/Wearable/build.gradle
@@ -31,7 +31,7 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
@@ -40,13 +40,6 @@
         versionName "1.0"
     }
 
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
diff --git a/prebuilts/gradle/XYZTouristAttractions/.google/packaging.yaml b/prebuilts/gradle/XYZTouristAttractions/.google/packaging.yaml
index 44b92db..fafd3e0 100644
--- a/prebuilts/gradle/XYZTouristAttractions/.google/packaging.yaml
+++ b/prebuilts/gradle/XYZTouristAttractions/.google/packaging.yaml
@@ -16,6 +16,8 @@
     - android:android.support.v7.appcompat
     - android:android.support.v7.widget.RecyclerView
     - android:android.support.v7.widget.GridLayoutManager
+    - android:android.support.design.widget.FloatingActionButton
+    - android:android.support.design.widget.CoordinatorLayout
     - android:com.google.android.gms.common.api.GoogleApiClient
     - android:com.google.android.gms.wearable.Wearable
     - android:com.google.android.gms.wearable.DataApi
diff --git a/prebuilts/gradle/XYZTouristAttractions/Application/build.gradle b/prebuilts/gradle/XYZTouristAttractions/Application/build.gradle
index 59112bb..0148b90 100644
--- a/prebuilts/gradle/XYZTouristAttractions/Application/build.gradle
+++ b/prebuilts/gradle/XYZTouristAttractions/Application/build.gradle
@@ -38,13 +38,13 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
         versionCode 1
         versionName "1.0"
     }
diff --git a/prebuilts/gradle/XYZTouristAttractions/Application/src/main/java/com/example/android/xyztouristattractions/ui/ScaleTransition.java b/prebuilts/gradle/XYZTouristAttractions/Application/src/main/java/com/example/android/xyztouristattractions/ui/ScaleTransition.java
index ab4b91f..a7e4b2e 100644
--- a/prebuilts/gradle/XYZTouristAttractions/Application/src/main/java/com/example/android/xyztouristattractions/ui/ScaleTransition.java
+++ b/prebuilts/gradle/XYZTouristAttractions/Application/src/main/java/com/example/android/xyztouristattractions/ui/ScaleTransition.java
@@ -12,6 +12,11 @@
 import android.view.View;
 import android.view.ViewGroup;
 
+/**
+ * A simple scale transition class to allow an element to scale in or out.
+ * This is used by the floating action button on the attraction detail screen
+ * when it appears and disappears during the Activity transitions.
+ */
 @TargetApi(Build.VERSION_CODES.LOLLIPOP)
 public class ScaleTransition extends Visibility {
 
@@ -19,24 +24,23 @@
         super(context, attrs);
     }
 
-    public Animator createAnimation(View view, float startScale, float endScale, boolean appear) {
+    public Animator createAnimation(View view, float startScale, float endScale) {
         view.setScaleX(startScale);
         view.setScaleY(startScale);
         PropertyValuesHolder holderX = PropertyValuesHolder.ofFloat("scaleX", startScale, endScale);
         PropertyValuesHolder holderY = PropertyValuesHolder.ofFloat("scaleY", startScale, endScale);
-        ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(view, holderX, holderY);
-        return animator;
+        return ObjectAnimator.ofPropertyValuesHolder(view, holderX, holderY);
     }
 
     @Override
     public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues,
                              TransitionValues endValues) {
-        return createAnimation(view, 0, 1, true);
+        return createAnimation(view, 0, 1);
     }
 
     @Override
     public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues,
                                 TransitionValues endValues) {
-        return createAnimation(view, 1, 0, false);
+        return createAnimation(view, 1, 0);
     }
 }
\ No newline at end of file
diff --git a/prebuilts/gradle/XYZTouristAttractions/Application/src/main/res/layout/fragment_detail.xml b/prebuilts/gradle/XYZTouristAttractions/Application/src/main/res/layout/fragment_detail.xml
index 4b00e68..6e280fd 100644
--- a/prebuilts/gradle/XYZTouristAttractions/Application/src/main/res/layout/fragment_detail.xml
+++ b/prebuilts/gradle/XYZTouristAttractions/Application/src/main/res/layout/fragment_detail.xml
@@ -95,7 +95,7 @@
         app:layout_anchor="@id/textLayout"
         app:layout_anchorGravity="bottom|start"
         app:rippleColor="@color/colorFabRipple"
-        android:layout_marginStart="@dimen/small_margin"
+        android:layout_marginStart="@dimen/fab_margin"
         android:clickable="true" />
 
 </android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values-v11/template-styles.xml b/prebuilts/gradle/XYZTouristAttractions/Application/src/main/res/values-sw400dp-v21/dimens.xml
similarity index 72%
copy from prebuilts/gradle/ActiveNotification/Application/src/main/res/values-v11/template-styles.xml
copy to prebuilts/gradle/XYZTouristAttractions/Application/src/main/res/values-sw400dp-v21/dimens.xml
index 8c1ea66..ce539e4 100644
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values-v11/template-styles.xml
+++ b/prebuilts/gradle/XYZTouristAttractions/Application/src/main/res/values-sw400dp-v21/dimens.xml
@@ -1,11 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
 <!--
-  Copyright 2013 The Android Open Source Project
+  Copyright 2015 Google Inc. All rights reserved.
 
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
 
-      http://www.apache.org/licenses/LICENSE-2.0
+       http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,7 +17,6 @@
 
 <resources>
 
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Holo.Light" />
+    <dimen name="fab_margin">12dp</dimen>
 
-</resources>
+</resources>
\ No newline at end of file
diff --git a/prebuilts/gradle/XYZTouristAttractions/Application/src/main/res/values-sw400dp/dimens.xml b/prebuilts/gradle/XYZTouristAttractions/Application/src/main/res/values-sw400dp/dimens.xml
index ad90eaa..701be7d 100644
--- a/prebuilts/gradle/XYZTouristAttractions/Application/src/main/res/values-sw400dp/dimens.xml
+++ b/prebuilts/gradle/XYZTouristAttractions/Application/src/main/res/values-sw400dp/dimens.xml
@@ -20,5 +20,6 @@
     <dimen name="small_margin">12dp</dimen>
     <dimen name="tiny_margin">8dp</dimen>
     <dimen name="image_size">140dp</dimen>
+    <dimen name="fab_margin">0dp</dimen>
 
 </resources>
diff --git a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values-v11/template-styles.xml b/prebuilts/gradle/XYZTouristAttractions/Application/src/main/res/values-v21/dimens.xml
similarity index 72%
rename from prebuilts/gradle/ActiveNotification/Application/src/main/res/values-v11/template-styles.xml
rename to prebuilts/gradle/XYZTouristAttractions/Application/src/main/res/values-v21/dimens.xml
index 8c1ea66..2704c45 100644
--- a/prebuilts/gradle/ActiveNotification/Application/src/main/res/values-v11/template-styles.xml
+++ b/prebuilts/gradle/XYZTouristAttractions/Application/src/main/res/values-v21/dimens.xml
@@ -1,11 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
 <!--
-  Copyright 2013 The Android Open Source Project
+  Copyright 2015 Google Inc. All rights reserved.
 
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
 
-      http://www.apache.org/licenses/LICENSE-2.0
+       http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,7 +17,6 @@
 
 <resources>
 
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Holo.Light" />
+    <dimen name="fab_margin">8dp</dimen>
 
-</resources>
+</resources>
\ No newline at end of file
diff --git a/prebuilts/gradle/XYZTouristAttractions/Application/src/main/res/values/dimens.xml b/prebuilts/gradle/XYZTouristAttractions/Application/src/main/res/values/dimens.xml
index 03acfef..9cfc825 100644
--- a/prebuilts/gradle/XYZTouristAttractions/Application/src/main/res/values/dimens.xml
+++ b/prebuilts/gradle/XYZTouristAttractions/Application/src/main/res/values/dimens.xml
@@ -21,6 +21,7 @@
     <dimen name="small_margin">8dp</dimen>
     <dimen name="tiny_margin">4dp</dimen>
     <dimen name="image_size">120dp</dimen>
+    <dimen name="fab_margin">-8dp</dimen>
     <item type="dimen" name="keyline1">@dimen/standard_margin</item>
     <dimen name="keyline2">72dp</dimen>
     <item type="dimen" name="keyline3">@dimen/standard_margin</item>
diff --git a/prebuilts/gradle/XYZTouristAttractions/README.md b/prebuilts/gradle/XYZTouristAttractions/README.md
index 0de5ee7..43ca59b 100644
--- a/prebuilts/gradle/XYZTouristAttractions/README.md
+++ b/prebuilts/gradle/XYZTouristAttractions/README.md
@@ -58,6 +58,8 @@
 * Window content and activity transitions based on the
 [Material guidelines][11]
 * Use of the [RecyclerView][12] widget
+* CoordinatorLayout[23] and FloatingActionButton[24] from the Design Support library[25]
+* Material animations such as activity and shared element transitions
 
 The wearable app uses a number of techniques and UI widgets as well:
 * Full screen app built off [GridViewPager][13] and [DotsPageIndicator][14]
@@ -65,7 +67,7 @@
 [WatchViewStub][15] and [OnApplyWindowInsetsListener][16]
 * Use of a variety of other widgets from the [Wearable UI Library][17]
 ([DismissOverlayView][18], [ConfirmationActivity][19],
-[CardScrollView][20], [CircledImageView][21])
+[CardScrollView][20], [CircledImageView][21], [ActionPage][26])
 
 [1]: http://developer.android.com/wear/
 [2]: https://developer.android.com/google/play-services/
@@ -89,11 +91,15 @@
 [20]: http://developer.android.com/reference/android/support/wearable/view/CardScrollView.html
 [21]: http://developer.android.com/reference/android/support/wearable/view/CircledImageView.html
 [22]: https://developer.android.com/training/wearables/apps/creating.html#Install
+[23]: https://developer.android.com/reference/android/support/design/widget/CoordinatorLayout.html
+[24]: https://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html
+[25]: http://android-developers.blogspot.com/2015/05/android-design-support-library.html
+[26]: http://developer.android.com/reference/android/support/wearable/view/ActionPage.html
 
 Pre-requisites
 --------------
 
-- Android SDK v22
+- Android SDK v23
 - Android Build Tools v22.0.1
 - Android Support Repository
 
diff --git a/prebuilts/gradle/XYZTouristAttractions/Shared/build.gradle b/prebuilts/gradle/XYZTouristAttractions/Shared/build.gradle
index 9428e83..aed0534 100644
--- a/prebuilts/gradle/XYZTouristAttractions/Shared/build.gradle
+++ b/prebuilts/gradle/XYZTouristAttractions/Shared/build.gradle
@@ -30,13 +30,13 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 22
+        targetSdkVersion 23
     }
 
     compileOptions {
diff --git a/prebuilts/gradle/XYZTouristAttractions/Wearable/build.gradle b/prebuilts/gradle/XYZTouristAttractions/Wearable/build.gradle
index 534d213..81abc02 100644
--- a/prebuilts/gradle/XYZTouristAttractions/Wearable/build.gradle
+++ b/prebuilts/gradle/XYZTouristAttractions/Wearable/build.gradle
@@ -34,7 +34,7 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 22
+    compileSdkVersion 23
 
     buildToolsVersion "22.0.1"
 
@@ -43,13 +43,6 @@
         versionName "1.0"
     }
 
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_7
         targetCompatibility JavaVersion.VERSION_1_7
diff --git a/prebuilts/gradle/XYZTouristAttractions/Wearable/src/main/AndroidManifest.xml b/prebuilts/gradle/XYZTouristAttractions/Wearable/src/main/AndroidManifest.xml
index 24328b3..80d0c92 100644
--- a/prebuilts/gradle/XYZTouristAttractions/Wearable/src/main/AndroidManifest.xml
+++ b/prebuilts/gradle/XYZTouristAttractions/Wearable/src/main/AndroidManifest.xml
@@ -22,7 +22,7 @@
 
     <uses-sdk
         android:minSdkVersion="21"
-        android:targetSdkVersion="21" />
+        android:targetSdkVersion="22" />
 
     <application
         android:allowBackup="true"
@@ -32,9 +32,6 @@
 
         <activity
             android:name=".ui.AttractionsActivity"
-            android:exported="true"
-            android:allowEmbedded="true"
-            android:taskAffinity=""
             android:label="@string/app_name" />
 
         <activity
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/composite-1-hires.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/composite-1-hires.png
index 6facbfe..1f9c58d 100644
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/composite-1-hires.png
+++ b/prebuilts/gradle/XYZTouristAttractions/screenshots/composite-1-hires.png
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/composite-1.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/composite-1.png
index c66df32..46dd9b7 100644
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/composite-1.png
+++ b/prebuilts/gradle/XYZTouristAttractions/screenshots/composite-1.png
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/mobile-1-list-unframed.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/mobile-1-list-unframed.png
deleted file mode 100644
index db88dc3..0000000
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/mobile-1-list-unframed.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/mobile-1-list.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/mobile-1-list.png
index 6a2f777..b74edab 100644
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/mobile-1-list.png
+++ b/prebuilts/gradle/XYZTouristAttractions/screenshots/mobile-1-list.png
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/mobile-2-detail-unframed.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/mobile-2-detail-unframed.png
deleted file mode 100644
index 088c756..0000000
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/mobile-2-detail-unframed.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/mobile-2-detail.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/mobile-2-detail.png
index dc70ee6..45d7946 100644
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/mobile-2-detail.png
+++ b/prebuilts/gradle/XYZTouristAttractions/screenshots/mobile-2-detail.png
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-1-unframed.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-1-unframed.png
deleted file mode 100644
index 4dede5c..0000000
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-1-unframed.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-1.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-1.png
index 49bd581..a83f501 100644
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-1.png
+++ b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-1.png
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-2-unframed.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-2-unframed.png
deleted file mode 100644
index 85e8492..0000000
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-2-unframed.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-2.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-2.png
index 7c166e7..bffb84e 100644
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-2.png
+++ b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-2.png
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-3-unframed.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-3-unframed.png
deleted file mode 100644
index 4542f1f..0000000
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-3-unframed.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-3.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-3.png
index b294efe..51b39bf 100644
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-3.png
+++ b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-3.png
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-4-unframed.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-4-unframed.png
deleted file mode 100644
index b866186..0000000
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-4-unframed.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-4.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-4.png
index bcc3ff3..1383159 100644
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-4.png
+++ b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-4.png
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-5-unframed.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-5-unframed.png
deleted file mode 100644
index df82ae0..0000000
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-5-unframed.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-5.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-5.png
index d3cd76d..35407ef 100644
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-5.png
+++ b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-5.png
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-6-unframed.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-6-unframed.png
deleted file mode 100644
index 31f271c..0000000
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-6-unframed.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-6.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-6.png
index ecbaf57..fd7a7c0 100644
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-6.png
+++ b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-round-6.png
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-1-unframed.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-1-unframed.png
deleted file mode 100644
index c816f77..0000000
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-1-unframed.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-1.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-1.png
index 24e5534..f6824e8 100644
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-1.png
+++ b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-1.png
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-2-unframed.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-2-unframed.png
deleted file mode 100644
index d549151..0000000
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-2-unframed.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-2.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-2.png
index a7d72c5..4c14ffa 100644
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-2.png
+++ b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-2.png
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-3-unframed.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-3-unframed.png
deleted file mode 100644
index 2c252e6..0000000
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-3-unframed.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-3.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-3.png
index b0ead30..d312633 100644
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-3.png
+++ b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-3.png
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-4-unframed.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-4-unframed.png
deleted file mode 100644
index c4ed121..0000000
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-4-unframed.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-4.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-4.png
index d3a35aa..7d1bb8b 100644
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-4.png
+++ b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-4.png
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-5-unframed.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-5-unframed.png
deleted file mode 100644
index 1bfcd1d..0000000
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-5-unframed.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-5.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-5.png
index 56acaa4..40d6b9b 100644
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-5.png
+++ b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-5.png
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-6-unframed.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-6-unframed.png
deleted file mode 100644
index aa5127f..0000000
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-6-unframed.png
+++ /dev/null
Binary files differ
diff --git a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-6.png b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-6.png
index 3bda193..25110b8 100644
--- a/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-6.png
+++ b/prebuilts/gradle/XYZTouristAttractions/screenshots/wear-square-6.png
Binary files differ
