diff --git a/build/tools.atree b/build/tools.atree
index fa98a7b..45f44c9 100644
--- a/build/tools.atree
+++ b/build/tools.atree
@@ -121,10 +121,10 @@
 prebuilts/tools/common/proguard/proguard4.7/src/proguard/ant/task.properties  tools/proguard/ant/task.properties
 
 # Templates
-sdk/templates/projects                  tools/templates/projects
-sdk/templates/activities                tools/templates/activities
-sdk/templates/gradle                    tools/templates/gradle
-sdk/templates/other                     tools/templates/other
+tools/base/templates/projects                  tools/templates/projects
+tools/base/templates/activities                tools/templates/activities
+tools/base/templates/gradle                    tools/templates/gradle
+tools/base/templates/other                     tools/templates/other
 
 # SDK Controller
 sdk/apps/SdkController                  tools/apps/SdkController
diff --git a/templates/activities/BlankActivity/globals.xml.ftl b/templates/activities/BlankActivity/globals.xml.ftl
deleted file mode 100644
index 11aabd7..0000000
--- a/templates/activities/BlankActivity/globals.xml.ftl
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<globals>
-    <global id="projectOut" value="." />
-    <global id="manifestOut" value="." />
-    <global id="srcOut" value="src/${slashedPackageName(packageName)}" />
-    <global id="resOut" value="res" />
-    <global id="menuName" value="${classToResource(activityClass)}" />
-</globals>
diff --git a/templates/activities/BlankActivity/recipe.xml.ftl b/templates/activities/BlankActivity/recipe.xml.ftl
deleted file mode 100644
index 1889cdc..0000000
--- a/templates/activities/BlankActivity/recipe.xml.ftl
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0"?>
-<recipe>
-    <merge from="AndroidManifest.xml.ftl"
-             to="${escapeXmlAttribute(manifestOut)}/AndroidManifest.xml" />
-
-    <instantiate from="res/menu/main.xml.ftl"
-            to="${escapeXmlAttribute(resOut)}/menu/${menuName}.xml" />
-
-    <merge from="res/values/strings.xml.ftl"
-             to="${escapeXmlAttribute(resOut)}/values/strings.xml" />
-
-    <merge from="res/values/dimens.xml"
-             to="${escapeXmlAttribute(resOut)}/values/dimens.xml" />
-    <merge from="res/values-sw600dp/dimens.xml"
-             to="${escapeXmlAttribute(resOut)}/values-sw600dp/dimens.xml" />
-    <merge from="res/values-sw720dp-land/dimens.xml"
-             to="${escapeXmlAttribute(resOut)}/values-sw720dp-land/dimens.xml" />
-
-    <!-- Decide what kind of layout to add (viewpager or not) -->
-    <#if navType?contains("pager")>
-        <instantiate from="res/layout/activity_pager.xml.ftl"
-                       to="${escapeXmlAttribute(resOut)}/layout/${layoutName}.xml" />
-        <instantiate from="res/layout/fragment_dummy.xml.ftl"
-                       to="${escapeXmlAttribute(resOut)}/layout/fragment_${classToResource(activityClass)}_dummy.xml" />
-
-    <#elseif navType == "tabs" || navType == "dropdown">
-        <instantiate from="res/layout/activity_fragment_container.xml"
-                       to="${escapeXmlAttribute(resOut)}/layout/${layoutName}.xml" />
-        <instantiate from="res/layout/fragment_dummy.xml.ftl"
-                       to="${escapeXmlAttribute(resOut)}/layout/fragment_${classToResource(activityClass)}_dummy.xml" />
-
-    <#else>
-        <instantiate from="res/layout/activity_simple.xml.ftl"
-                       to="${escapeXmlAttribute(resOut)}/layout/${layoutName}.xml" />
-    </#if>
-
-    <!-- Decide which activity code to add -->
-    <#if navType == "none">
-        <instantiate from="src/app_package/SimpleActivity.java.ftl"
-                       to="${escapeXmlAttribute(srcOut)}/${activityClass}.java" />
-
-    <#elseif navType == "tabs_pager" || navType == "pager_strip">
-        <instantiate from="src/app_package/TabsAndPagerActivity.java.ftl"
-                       to="${escapeXmlAttribute(srcOut)}/${activityClass}.java" />
-
-    <#elseif navType == "tabs">
-        <instantiate from="src/app_package/TabsActivity.java.ftl"
-                       to="${escapeXmlAttribute(srcOut)}/${activityClass}.java" />
-
-    <#elseif navType == "dropdown">
-        <instantiate from="src/app_package/DropdownActivity.java.ftl"
-                       to="${escapeXmlAttribute(srcOut)}/${activityClass}.java" />
-
-    </#if>
-
-    <open file="${escapeXmlAttribute(resOut)}/layout/${layoutName}.xml" />
-</recipe>
diff --git a/templates/activities/BlankActivity/root/AndroidManifest.xml.ftl b/templates/activities/BlankActivity/root/AndroidManifest.xml.ftl
deleted file mode 100644
index b8ae72e..0000000
--- a/templates/activities/BlankActivity/root/AndroidManifest.xml.ftl
+++ /dev/null
@@ -1,24 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" >
-
-    <application>
-        <activity android:name=".${activityClass}"
-            <#if isNewProject>
-            android:label="@string/app_name"
-            <#else>
-            android:label="@string/title_${activityToLayout(activityClass)}"
-            </#if>
-            <#if buildApi gte 16 && parentActivityClass != "">android:parentActivityName="${parentActivityClass}"</#if>>
-            <#if parentActivityClass != "">
-            <meta-data android:name="android.support.PARENT_ACTIVITY"
-                android:value="${parentActivityClass}" />
-            </#if>
-            <#if isLauncher>
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-            </#if>
-        </activity>
-    </application>
-
-</manifest>
diff --git a/templates/activities/BlankActivity/root/res/layout/activity_fragment_container.xml b/templates/activities/BlankActivity/root/res/layout/activity_fragment_container.xml
deleted file mode 100644
index 935d379..0000000
--- a/templates/activities/BlankActivity/root/res/layout/activity_fragment_container.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/container"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    tools:context=".${activityClass}"
-    tools:ignore="MergeRootFrame" />
diff --git a/templates/activities/BlankActivity/root/res/layout/activity_pager.xml.ftl b/templates/activities/BlankActivity/root/res/layout/activity_pager.xml.ftl
deleted file mode 100644
index ab57463..0000000
--- a/templates/activities/BlankActivity/root/res/layout/activity_pager.xml.ftl
+++ /dev/null
@@ -1,24 +0,0 @@
-<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/pager"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    tools:context=".${activityClass}"<#if navType != "pager_strip"> /><#else>>
-
-    <!--
-    This title strip will display the currently visible page title, as well as the page
-    titles for adjacent pages.
-    -->
-
-    <android.support.v4.view.PagerTitleStrip
-        android:id="@+id/pager_title_strip"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="top"
-        android:background="#33b5e5"
-        android:paddingBottom="4dp"
-        android:paddingTop="4dp"
-        android:textColor="#fff" />
-
-</android.support.v4.view.ViewPager>
-</#if>
diff --git a/templates/activities/BlankActivity/root/res/layout/activity_simple.xml.ftl b/templates/activities/BlankActivity/root/res/layout/activity_simple.xml.ftl
deleted file mode 100644
index 9ddd213..0000000
--- a/templates/activities/BlankActivity/root/res/layout/activity_simple.xml.ftl
+++ /dev/null
@@ -1,16 +0,0 @@
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width=<#if buildApi lt 8 >"fill_parent"<#else>"match_parent"</#if>
-    android:layout_height=<#if buildApi lt 8 >"fill_parent"<#else>"match_parent"</#if>
-    android:paddingLeft="@dimen/activity_horizontal_margin"
-    android:paddingRight="@dimen/activity_horizontal_margin"
-    android:paddingTop="@dimen/activity_vertical_margin"
-    android:paddingBottom="@dimen/activity_vertical_margin"
-    tools:context=".${activityClass}">
-
-    <TextView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/hello_world" />
-
-</RelativeLayout>
diff --git a/templates/activities/BlankActivity/root/res/layout/fragment_dummy.xml.ftl b/templates/activities/BlankActivity/root/res/layout/fragment_dummy.xml.ftl
deleted file mode 100644
index 1f21998..0000000
--- a/templates/activities/BlankActivity/root/res/layout/fragment_dummy.xml.ftl
+++ /dev/null
@@ -1,16 +0,0 @@
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width=<#if buildApi lt 8 >"fill_parent"<#else>"match_parent"</#if>
-    android:layout_height=<#if buildApi lt 8 >"fill_parent"<#else>"match_parent"</#if>
-    android:paddingLeft="@dimen/activity_horizontal_margin"
-    android:paddingRight="@dimen/activity_horizontal_margin"
-    android:paddingTop="@dimen/activity_vertical_margin"
-    android:paddingBottom="@dimen/activity_vertical_margin"
-    tools:context=".${activityClass}$DummySectionFragment">
-
-    <TextView
-        android:id="@+id/section_label"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content" />
-
-</RelativeLayout>
diff --git a/templates/activities/BlankActivity/root/res/menu/main.xml.ftl b/templates/activities/BlankActivity/root/res/menu/main.xml.ftl
deleted file mode 100644
index e35aa1b..0000000
--- a/templates/activities/BlankActivity/root/res/menu/main.xml.ftl
+++ /dev/null
@@ -1,6 +0,0 @@
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:id="@+id/action_settings"
-        android:title="@string/action_settings"
-        android:orderInCategory="100"<#if buildApi gte 11>
-        android:showAsAction="never"</#if> />
-</menu>
diff --git a/templates/activities/BlankActivity/root/res/values-sw600dp/dimens.xml b/templates/activities/BlankActivity/root/res/values-sw600dp/dimens.xml
deleted file mode 100644
index 886b05f..0000000
--- a/templates/activities/BlankActivity/root/res/values-sw600dp/dimens.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<resources>
-    <!-- Customize dimensions originally defined in res/values/dimens.xml (such as
-         screen margins) for sw600dp devices (e.g. 7" tablets) here. -->
-</resources>
diff --git a/templates/activities/BlankActivity/root/res/values-sw720dp-land/dimens.xml b/templates/activities/BlankActivity/root/res/values-sw720dp-land/dimens.xml
deleted file mode 100644
index 00059fc..0000000
--- a/templates/activities/BlankActivity/root/res/values-sw720dp-land/dimens.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<resources>
-    <!-- Customize dimensions originally defined in res/values/dimens.xml (such as
-         screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here. -->
-    <dimen name="activity_horizontal_margin">128dp</dimen>
-</resources>
diff --git a/templates/activities/BlankActivity/root/res/values/dimens.xml b/templates/activities/BlankActivity/root/res/values/dimens.xml
deleted file mode 100644
index 47c8224..0000000
--- a/templates/activities/BlankActivity/root/res/values/dimens.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<resources>
-    <!-- Default screen margins, per the Android Design guidelines. -->
-    <dimen name="activity_horizontal_margin">16dp</dimen>
-    <dimen name="activity_vertical_margin">16dp</dimen>
-</resources>
diff --git a/templates/activities/BlankActivity/root/res/values/strings.xml.ftl b/templates/activities/BlankActivity/root/res/values/strings.xml.ftl
deleted file mode 100644
index 1c9bc8b..0000000
--- a/templates/activities/BlankActivity/root/res/values/strings.xml.ftl
+++ /dev/null
@@ -1,15 +0,0 @@
-<resources>
-    <#if !isNewProject>
-    <string name="title_${activityToLayout(activityClass)}">${escapeXmlString(activityTitle)}</string>
-    </#if>
-
-    <string name="action_settings">Settings</string>
-
-    <#if navType != "none">
-    <string name="title_section1">Section 1</string>
-    <string name="title_section2">Section 2</string>
-    <string name="title_section3">Section 3</string>
-    <#else>
-    <string name="hello_world">Hello world!</string>
-    </#if>
-</resources>
diff --git a/templates/activities/BlankActivity/root/src/app_package/DropdownActivity.java.ftl b/templates/activities/BlankActivity/root/src/app_package/DropdownActivity.java.ftl
deleted file mode 100644
index cb0665e..0000000
--- a/templates/activities/BlankActivity/root/src/app_package/DropdownActivity.java.ftl
+++ /dev/null
@@ -1,108 +0,0 @@
-package ${packageName};
-
-<#if minApiLevel < 14>import android.annotation.TargetApi;</#if>
-import android.app.ActionBar;
-import android.os.Bundle;
-<#if minApiLevel < 14>import android.content.Context;
-import android.os.Build;</#if>
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentActivity;
-import android.support.v4.app.NavUtils;
-import android.view.Gravity;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.TextView;
-
-public class ${activityClass} extends FragmentActivity implements ActionBar.OnNavigationListener {
-
-    /**
-     * The serialization (saved instance state) Bundle key representing the
-     * current dropdown position.
-     */
-    private static final String STATE_SELECTED_NAVIGATION_ITEM = "selected_navigation_item";
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.${layoutName});
-
-        // Set up the action bar to show a dropdown list.
-        final ActionBar actionBar = getActionBar();
-        actionBar.setDisplayShowTitleEnabled(false);
-        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
-        <#if parentActivityClass != "">
-        // Show the Up button in the action bar.
-        actionBar.setDisplayHomeAsUpEnabled(true);
-        </#if>
-
-        // Set up the dropdown list navigation in the action bar.
-        actionBar.setListNavigationCallbacks(
-                // Specify a SpinnerAdapter to populate the dropdown list.
-                new ArrayAdapter<String>(
-                        <#if minApiLevel gte 14>actionBar.getThemedContext()<#else>getActionBarThemedContextCompat()</#if>,
-                        android.R.layout.simple_list_item_1,
-                        android.R.id.text1,
-                        new String[] {
-                                getString(R.string.title_section1),
-                                getString(R.string.title_section2),
-                                getString(R.string.title_section3),
-                        }),
-                this);
-    }
-
-    <#if minApiLevel < 14>
-    /**
-     * Backward-compatible version of {@link ActionBar#getThemedContext()} that
-     * simply returns the {@link android.app.Activity} if
-     * <code>getThemedContext</code> is unavailable.
-     */
-    @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
-    private Context getActionBarThemedContextCompat() {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
-            return getActionBar().getThemedContext();
-        } else {
-            return this;
-        }
-    }
-    </#if>
-
-    @Override
-    public void onRestoreInstanceState(Bundle savedInstanceState) {
-        // Restore the previously serialized current dropdown position.
-        if (savedInstanceState.containsKey(STATE_SELECTED_NAVIGATION_ITEM)) {
-            getActionBar().setSelectedNavigationItem(
-                    savedInstanceState.getInt(STATE_SELECTED_NAVIGATION_ITEM));
-        }
-    }
-
-    @Override
-    public void onSaveInstanceState(Bundle outState) {
-        // Serialize the current dropdown position.
-        outState.putInt(STATE_SELECTED_NAVIGATION_ITEM,
-                getActionBar().getSelectedNavigationIndex());
-    }
-
-    <#include "include_onCreateOptionsMenu.java.ftl">
-    <#include "include_onOptionsItemSelected.java.ftl">
-
-    @Override
-    public boolean onNavigationItemSelected(int position, long id) {
-        // When the given dropdown item is selected, show its contents in the
-        // container view.
-        Fragment fragment = new DummySectionFragment();
-        Bundle args = new Bundle();
-        args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1);
-        fragment.setArguments(args);
-        getSupportFragmentManager().beginTransaction()
-                .replace(R.id.container, fragment)
-                .commit();
-        return true;
-    }
-
-    <#include "include_DummySectionFragment.java.ftl">
-
-}
diff --git a/templates/activities/BlankActivity/root/src/app_package/SimpleActivity.java.ftl b/templates/activities/BlankActivity/root/src/app_package/SimpleActivity.java.ftl
deleted file mode 100644
index 7edd647..0000000
--- a/templates/activities/BlankActivity/root/src/app_package/SimpleActivity.java.ftl
+++ /dev/null
@@ -1,42 +0,0 @@
-package ${packageName};
-
-import android.os.Bundle;
-import android.app.Activity;
-import android.view.Menu;
-<#if parentActivityClass != "">
-import android.view.MenuItem;
-import android.support.v4.app.NavUtils;
-<#if minApiLevel < 11>
-import android.annotation.TargetApi;
-import android.os.Build;
-</#if>
-</#if>
-
-public class ${activityClass} extends Activity {
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.${layoutName});
-        <#if parentActivityClass != "">
-        // Show the Up button in the action bar.
-        setupActionBar();
-        </#if>
-    }
-
-    <#if parentActivityClass != "">
-    /**
-     * Set up the {@link android.app.ActionBar}<#if minApiLevel < 11>, if the API is available</#if>.
-     */
-    <#if minApiLevel < 11>@TargetApi(Build.VERSION_CODES.HONEYCOMB)
-    </#if>private void setupActionBar() {
-        <#if minApiLevel < 11>if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {</#if>
-        getActionBar().setDisplayHomeAsUpEnabled(true);
-        <#if minApiLevel < 11>}</#if>
-    }
-    </#if>
-
-    <#include "include_onCreateOptionsMenu.java.ftl">
-    <#include "include_onOptionsItemSelected.java.ftl">
-
-}
diff --git a/templates/activities/BlankActivity/root/src/app_package/TabsActivity.java.ftl b/templates/activities/BlankActivity/root/src/app_package/TabsActivity.java.ftl
deleted file mode 100644
index 0bf975e..0000000
--- a/templates/activities/BlankActivity/root/src/app_package/TabsActivity.java.ftl
+++ /dev/null
@@ -1,86 +0,0 @@
-package ${packageName};
-
-import android.app.ActionBar;
-import android.app.FragmentTransaction;
-import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentActivity;
-import android.support.v4.app.NavUtils;
-import android.view.Gravity;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-public class ${activityClass} extends FragmentActivity implements ActionBar.TabListener {
-
-    /**
-     * The serialization (saved instance state) Bundle key representing the
-     * current tab position.
-     */
-    private static final String STATE_SELECTED_NAVIGATION_ITEM = "selected_navigation_item";
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.${layoutName});
-
-        // Set up the action bar to show tabs.
-        final ActionBar actionBar = getActionBar();
-        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
-        <#if parentActivityClass != "">
-        // Show the Up button in the action bar.
-        actionBar.setDisplayHomeAsUpEnabled(true);
-        </#if>
-
-        // For each of the sections in the app, add a tab to the action bar.
-        actionBar.addTab(actionBar.newTab().setText(R.string.title_section1).setTabListener(this));
-        actionBar.addTab(actionBar.newTab().setText(R.string.title_section2).setTabListener(this));
-        actionBar.addTab(actionBar.newTab().setText(R.string.title_section3).setTabListener(this));
-    }
-
-    @Override
-    public void onRestoreInstanceState(Bundle savedInstanceState) {
-        // Restore the previously serialized current tab position.
-        if (savedInstanceState.containsKey(STATE_SELECTED_NAVIGATION_ITEM)) {
-            getActionBar().setSelectedNavigationItem(
-                    savedInstanceState.getInt(STATE_SELECTED_NAVIGATION_ITEM));
-        }
-    }
-
-    @Override
-    public void onSaveInstanceState(Bundle outState) {
-        // Serialize the current tab position.
-        outState.putInt(STATE_SELECTED_NAVIGATION_ITEM,
-                getActionBar().getSelectedNavigationIndex());
-    }
-
-    <#include "include_onCreateOptionsMenu.java.ftl">
-    <#include "include_onOptionsItemSelected.java.ftl">
-
-    @Override
-    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
-        // When the given tab is selected, show the tab contents in the
-        // container view.
-        Fragment fragment = new DummySectionFragment();
-        Bundle args = new Bundle();
-        args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, tab.getPosition() + 1);
-        fragment.setArguments(args);
-        getSupportFragmentManager().beginTransaction()
-                .replace(R.id.container, fragment)
-                .commit();
-    }
-
-    @Override
-    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
-    }
-
-    @Override
-    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
-    }
-
-    <#include "include_DummySectionFragment.java.ftl">
-
-}
diff --git a/templates/activities/BlankActivity/root/src/app_package/TabsAndPagerActivity.java.ftl b/templates/activities/BlankActivity/root/src/app_package/TabsAndPagerActivity.java.ftl
deleted file mode 100644
index 30c4f4a..0000000
--- a/templates/activities/BlankActivity/root/src/app_package/TabsAndPagerActivity.java.ftl
+++ /dev/null
@@ -1,153 +0,0 @@
-package ${packageName};
-
-import java.util.Locale;
-
-<#if navType?contains("tabs")>import android.app.ActionBar;
-import android.app.FragmentTransaction;</#if>
-import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentActivity;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentPagerAdapter;
-import android.support.v4.app.NavUtils;
-import android.support.v4.view.ViewPager;
-import android.view.Gravity;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-public class ${activityClass} extends FragmentActivity<#if navType?contains("tabs")> implements ActionBar.TabListener</#if> {
-
-    /**
-     * The {@link android.support.v4.view.PagerAdapter} that will provide
-     * fragments for each of the sections. We use a
-     * {@link android.support.v4.app.FragmentPagerAdapter} derivative, which
-     * will keep every loaded fragment in memory. If this becomes too memory
-     * intensive, it may be best to switch to a
-     * {@link android.support.v4.app.FragmentStatePagerAdapter}.
-     */
-    SectionsPagerAdapter mSectionsPagerAdapter;
-
-    /**
-     * The {@link ViewPager} that will host the section contents.
-     */
-    ViewPager mViewPager;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.${layoutName});
-
-        <#if navType?contains("tabs")>
-        // Set up the action bar.
-        final ActionBar actionBar = getActionBar();
-        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
-        <#if parentActivityClass != "">
-        // Show the Up button in the action bar.
-        actionBar.setDisplayHomeAsUpEnabled(true);
-        </#if>
-        <#elseif parentActivityClass != "">
-        // Show the Up button in the action bar.
-        getActionBar().setDisplayHomeAsUpEnabled(true);
-        </#if>
-
-        // Create the adapter that will return a fragment for each of the three
-        // primary sections of the app.
-        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
-
-        // Set up the ViewPager with the sections adapter.
-        mViewPager = (ViewPager) findViewById(R.id.pager);
-        mViewPager.setAdapter(mSectionsPagerAdapter);
-
-        <#if navType?contains("tabs")>
-        // When swiping between different sections, select the corresponding
-        // tab. We can also use ActionBar.Tab#select() to do this if we have
-        // a reference to the Tab.
-        mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
-            @Override
-            public void onPageSelected(int position) {
-                actionBar.setSelectedNavigationItem(position);
-            }
-        });
-
-        // For each of the sections in the app, add a tab to the action bar.
-        for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
-            // Create a tab with text corresponding to the page title defined by
-            // the adapter. Also specify this Activity object, which implements
-            // the TabListener interface, as the callback (listener) for when
-            // this tab is selected.
-            actionBar.addTab(
-                    actionBar.newTab()
-                            .setText(mSectionsPagerAdapter.getPageTitle(i))
-                            .setTabListener(this));
-        }
-        </#if>
-    }
-
-    <#include "include_onCreateOptionsMenu.java.ftl">
-    <#include "include_onOptionsItemSelected.java.ftl">
-
-    <#if navType?contains("tabs")>@Override
-    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
-        // When the given tab is selected, switch to the corresponding page in
-        // the ViewPager.
-        mViewPager.setCurrentItem(tab.getPosition());
-    }
-
-    @Override
-    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
-    }
-
-    @Override
-    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
-    }</#if>
-
-    /**
-     * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
-     * one of the sections/tabs/pages.
-     */
-    public class SectionsPagerAdapter extends FragmentPagerAdapter {
-
-        public SectionsPagerAdapter(FragmentManager fm) {
-            super(fm);
-        }
-
-        @Override
-        public Fragment getItem(int position) {
-            // getItem is called to instantiate the fragment for the given page.
-            // Return a DummySectionFragment (defined as a static inner class
-            // below) with the page number as its lone argument.
-            Fragment fragment = new DummySectionFragment();
-            Bundle args = new Bundle();
-            args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1);
-            fragment.setArguments(args);
-            return fragment;
-        }
-
-        @Override
-        public int getCount() {
-            // Show 3 total pages.
-            return 3;
-        }
-
-        @Override
-        public CharSequence getPageTitle(int position) {
-            Locale l = Locale.getDefault();
-            switch (position) {
-                case 0:
-                    return getString(R.string.title_section1).toUpperCase(l);
-                case 1:
-                    return getString(R.string.title_section2).toUpperCase(l);
-                case 2:
-                    return getString(R.string.title_section3).toUpperCase(l);
-            }
-            return null;
-        }
-    }
-
-    <#include "include_DummySectionFragment.java.ftl">
-
-}
diff --git a/templates/activities/BlankActivity/root/src/app_package/include_DummySectionFragment.java.ftl b/templates/activities/BlankActivity/root/src/app_package/include_DummySectionFragment.java.ftl
deleted file mode 100644
index 8eb1399..0000000
--- a/templates/activities/BlankActivity/root/src/app_package/include_DummySectionFragment.java.ftl
+++ /dev/null
@@ -1,23 +0,0 @@
-    /**
-     * A dummy fragment representing a section of the app, but that simply
-     * displays dummy text.
-     */
-    public static class DummySectionFragment extends Fragment {
-        /**
-         * The fragment argument representing the section number for this
-         * fragment.
-         */
-        public static final String ARG_SECTION_NUMBER = "section_number";
-
-        public DummySectionFragment() {
-        }
-
-        @Override
-        public View onCreateView(LayoutInflater inflater, ViewGroup container,
-                Bundle savedInstanceState) {
-            View rootView = inflater.inflate(R.layout.fragment_${classToResource(activityClass)}_dummy, container, false);
-            TextView dummyTextView = (TextView) rootView.findViewById(R.id.section_label);
-            dummyTextView.setText(Integer.toString(getArguments().getInt(ARG_SECTION_NUMBER)));
-            return rootView;
-        }
-    }
diff --git a/templates/activities/BlankActivity/root/src/app_package/include_onCreateOptionsMenu.java.ftl b/templates/activities/BlankActivity/root/src/app_package/include_onCreateOptionsMenu.java.ftl
deleted file mode 100644
index 005d629..0000000
--- a/templates/activities/BlankActivity/root/src/app_package/include_onCreateOptionsMenu.java.ftl
+++ /dev/null
@@ -1,6 +0,0 @@
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        // Inflate the menu; this adds items to the action bar if it is present.
-        getMenuInflater().inflate(R.menu.${menuName}, menu);
-        return true;
-    }
diff --git a/templates/activities/BlankActivity/root/src/app_package/include_onOptionsItemSelected.java.ftl b/templates/activities/BlankActivity/root/src/app_package/include_onOptionsItemSelected.java.ftl
deleted file mode 100644
index e1dc462..0000000
--- a/templates/activities/BlankActivity/root/src/app_package/include_onOptionsItemSelected.java.ftl
+++ /dev/null
@@ -1,19 +0,0 @@
-    <#if parentActivityClass != "">
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home:
-                // This ID represents the Home or Up button. In the case of this
-                // activity, the Up button is shown. Use NavUtils to allow users
-                // to navigate up one level in the application structure. For
-                // more details, see the Navigation pattern on Android Design:
-                //
-                // http://developer.android.com/design/patterns/navigation.html#up-vs-back
-                //
-                NavUtils.navigateUpFromSameTask(this);
-                return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-    </#if>
diff --git a/templates/activities/BlankActivity/template.xml b/templates/activities/BlankActivity/template.xml
deleted file mode 100644
index 8b02ba9..0000000
--- a/templates/activities/BlankActivity/template.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0"?>
-<template
-    format="3"
-    revision="3"
-    name="Blank Activity"
-    description="Creates a new blank activity, with an action bar and optional navigational elements such as tabs or horizontal swipe.">
-    <dependency name="android-support-v4" revision="8" />
-
-    <category value="Activities" />
-
-    <parameter
-        id="activityClass"
-        name="Activity Name"
-        type="string"
-        constraints="class|unique|nonempty"
-        suggest="${layoutToActivity(layoutName)}"
-        default="MainActivity"
-        help="The name of the activity class to create" />
-
-    <parameter
-        id="layoutName"
-        name="Layout Name"
-        type="string"
-        constraints="layout|unique|nonempty"
-        suggest="${activityToLayout(activityClass)}"
-        default="activity_main"
-        help="The name of the layout to create for the activity" />
-
-    <parameter
-        id="activityTitle"
-        name="Title"
-        type="string"
-        constraints="nonempty"
-        default="MainActivity"
-        suggest="${activityClass}"
-        help="The name of the activity. For launcher activities, the application title." />
-
-    <parameter
-        id="isLauncher"
-        name="Launcher Activity"
-        type="boolean"
-        default="false"
-        help="If true, this activity will have a CATEGORY_LAUNCHER intent filter, making it visible in the launcher" />
-
-    <parameter
-        id="parentActivityClass"
-        name="Hierarchical Parent"
-        type="string"
-        constraints="activity|exists|empty"
-        default=""
-        help="The hierarchical parent activity, used to provide a default implementation for the 'Up' button" />
-
-    <parameter
-        id="navType"
-        name="Navigation Type"
-        type="enum"
-        default="none"
-        help="The type of navigation to use for the activity" >
-        <option id="none" default="true">None</option>
-        <!--<option id="tabs" minApi="11">Fixed Tabs</option>-->
-        <option id="tabs_pager" minApi="11">Fixed Tabs + Swipe</option>
-        <option id="pager_strip" minApi="11">Scrollable Tabs + Swipe</option>
-        <option id="dropdown" minApi="11">Dropdown</option>
-    </parameter>
-
-    <parameter
-        id="packageName"
-        name="Package name"
-        type="string"
-        constraints="package"
-        default="com.mycompany.myapp" />
-
-    <!-- 128x128 thumbnails relative to template.xml -->
-    <thumbs>
-        <!-- default thumbnail is required -->
-        <thumb>template_blank_activity.png</thumb>
-        <!-- attributes act as selectors based on chosen parameters -->
-        <thumb navType="none">template_blank_activity.png</thumb>
-        <thumb navType="tabs">template_blank_activity_tabs.png</thumb>
-        <thumb navType="tabs_pager">template_blank_activity_tabs_pager.png</thumb>
-        <thumb navType="pager_strip">template_blank_activity_pager.png</thumb>
-        <thumb navType="dropdown">template_blank_activity_dropdown.png</thumb>
-    </thumbs>
-
-    <globals file="globals.xml.ftl" />
-    <execute file="recipe.xml.ftl" />
-
-</template>
diff --git a/templates/activities/BlankActivity/template_blank_activity.png b/templates/activities/BlankActivity/template_blank_activity.png
deleted file mode 100644
index 729dd1c..0000000
--- a/templates/activities/BlankActivity/template_blank_activity.png
+++ /dev/null
Binary files differ
diff --git a/templates/activities/BlankActivity/template_blank_activity_dropdown.png b/templates/activities/BlankActivity/template_blank_activity_dropdown.png
deleted file mode 100644
index 09fa2cf..0000000
--- a/templates/activities/BlankActivity/template_blank_activity_dropdown.png
+++ /dev/null
Binary files differ
diff --git a/templates/activities/BlankActivity/template_blank_activity_pager.png b/templates/activities/BlankActivity/template_blank_activity_pager.png
deleted file mode 100644
index 7cd8e0e..0000000
--- a/templates/activities/BlankActivity/template_blank_activity_pager.png
+++ /dev/null
Binary files differ
diff --git a/templates/activities/BlankActivity/template_blank_activity_tabs.png b/templates/activities/BlankActivity/template_blank_activity_tabs.png
deleted file mode 100644
index 86a09d6..0000000
--- a/templates/activities/BlankActivity/template_blank_activity_tabs.png
+++ /dev/null
Binary files differ
diff --git a/templates/activities/BlankActivity/template_blank_activity_tabs_pager.png b/templates/activities/BlankActivity/template_blank_activity_tabs_pager.png
deleted file mode 100644
index 0697a56..0000000
--- a/templates/activities/BlankActivity/template_blank_activity_tabs_pager.png
+++ /dev/null
Binary files differ
diff --git a/templates/activities/FullscreenActivity/globals.xml.ftl b/templates/activities/FullscreenActivity/globals.xml.ftl
deleted file mode 100644
index 6d73e17..0000000
--- a/templates/activities/FullscreenActivity/globals.xml.ftl
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<globals>
-    <global id="projectOut" value="." />
-    <global id="manifestOut" value="." />
-    <global id="srcOut" value="src/${slashedPackageName(packageName)}" />
-    <global id="resOut" value="res" />
-    <global id="simpleName" value="${activityToLayout(activityClass)}" />
-</globals>
diff --git a/templates/activities/FullscreenActivity/recipe.xml.ftl b/templates/activities/FullscreenActivity/recipe.xml.ftl
deleted file mode 100644
index 6f121a8..0000000
--- a/templates/activities/FullscreenActivity/recipe.xml.ftl
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<recipe>
-    <merge from="AndroidManifest.xml.ftl"
-             to="${escapeXmlAttribute(manifestOut)}/AndroidManifest.xml" />
-
-    <merge from="res/values/attrs.xml"
-             to="${escapeXmlAttribute(resOut)}/values/attrs.xml" />
-    <merge from="res/values/colors.xml"
-             to="${escapeXmlAttribute(resOut)}/values/colors.xml" />
-    <merge from="res/values/styles.xml"
-              to="${escapeXmlAttribute(resOut)}/values/styles.xml" />
-    <merge from="res/values-v11/styles.xml"
-             to="${escapeXmlAttribute(resOut)}/values-v11/styles.xml" />
-    <instantiate from="res/layout/activity_fullscreen.xml.ftl"
-                   to="${escapeXmlAttribute(resOut)}/layout/${layoutName}.xml" />
-
-    <merge from="res/values/strings.xml.ftl"
-             to="${escapeXmlAttribute(resOut)}/values/strings.xml" />
-
-    <instantiate from="src/app_package/FullscreenActivity.java.ftl"
-                   to="${escapeXmlAttribute(srcOut)}/${activityClass}.java" />
-    <instantiate from="src/app_package/util/SystemUiHider.java.ftl"
-                   to="${escapeXmlAttribute(srcOut)}/util/SystemUiHider.java" />
-    <instantiate from="src/app_package/util/SystemUiHiderBase.java.ftl"
-                   to="${escapeXmlAttribute(srcOut)}/util/SystemUiHiderBase.java" />
-    <instantiate from="src/app_package/util/SystemUiHiderHoneycomb.java.ftl"
-                   to="${escapeXmlAttribute(srcOut)}/util/SystemUiHiderHoneycomb.java" />
-
-    <open file="${escapeXmlAttribute(resOut)}/layout/${layoutName}.xml" />
-</recipe>
diff --git a/templates/activities/FullscreenActivity/root/AndroidManifest.xml.ftl b/templates/activities/FullscreenActivity/root/AndroidManifest.xml.ftl
deleted file mode 100644
index b909732..0000000
--- a/templates/activities/FullscreenActivity/root/AndroidManifest.xml.ftl
+++ /dev/null
@@ -1,26 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" >
-
-    <application>
-        <activity android:name=".${activityClass}"
-            <#if isNewProject>
-            android:label="@string/app_name"
-            <#else>
-            android:label="@string/title_${simpleName}"
-            </#if>
-            android:configChanges="orientation|keyboardHidden|screenSize"
-            android:theme="@style/FullscreenTheme"
-            <#if buildApi gte 16 && parentActivityClass != "">android:parentActivityName="${parentActivityClass}"</#if>>
-            <#if parentActivityClass != "">
-            <meta-data android:name="android.support.PARENT_ACTIVITY"
-                android:value="${parentActivityClass}" />
-            </#if>
-            <#if isLauncher>
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-            </#if>
-        </activity>
-    </application>
-
-</manifest>
diff --git a/templates/activities/FullscreenActivity/root/res/layout/activity_fullscreen.xml.ftl b/templates/activities/FullscreenActivity/root/res/layout/activity_fullscreen.xml.ftl
deleted file mode 100644
index 39f801a..0000000
--- a/templates/activities/FullscreenActivity/root/res/layout/activity_fullscreen.xml.ftl
+++ /dev/null
@@ -1,46 +0,0 @@
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="#0099cc"
-    tools:context=".${activityClass}">
-
-    <!-- The primary full-screen view. This can be replaced with whatever view
-         is needed to present your content, e.g. VideoView, SurfaceView,
-         TextureView, etc. -->
-    <TextView android:id="@+id/fullscreen_content"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:keepScreenOn="true"
-        android:textColor="#33b5e5"
-        android:textStyle="bold"
-        android:textSize="50sp"
-        android:gravity="center"
-        android:text="@string/dummy_content" />
-
-    <!-- This FrameLayout insets its children based on system windows using
-         android:fitsSystemWindows. -->
-    <FrameLayout android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:fitsSystemWindows="true">
-
-        <LinearLayout android:id="@+id/fullscreen_content_controls"
-            style="?buttonBarStyle"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_gravity="bottom|center_horizontal"
-            android:background="@color/black_overlay"
-            android:orientation="horizontal"
-            tools:ignore="UselessParent">
-
-            <Button android:id="@+id/dummy_button"
-                style="?buttonBarButtonStyle"
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:text="@string/dummy_button" />
-
-        </LinearLayout>
-    </FrameLayout>
-
-</FrameLayout>
diff --git a/templates/activities/FullscreenActivity/root/res/values-v11/styles.xml b/templates/activities/FullscreenActivity/root/res/values-v11/styles.xml
deleted file mode 100644
index feaeb70..0000000
--- a/templates/activities/FullscreenActivity/root/res/values-v11/styles.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<resources>
-
-    <style name="FullscreenTheme" parent="android:Theme.Holo">
-        <item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
-        <item name="android:windowActionBarOverlay">true</item>
-        <item name="android:windowBackground">@null</item>
-        <item name="buttonBarStyle">?android:attr/buttonBarStyle</item>
-        <item name="buttonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
-    </style>
-
-    <style name="FullscreenActionBarStyle" parent="android:Widget.Holo.ActionBar">
-        <item name="android:background">@color/black_overlay</item>
-    </style>
-
-</resources>
diff --git a/templates/activities/FullscreenActivity/root/res/values/attrs.xml b/templates/activities/FullscreenActivity/root/res/values/attrs.xml
deleted file mode 100644
index 2cf1a1a..0000000
--- a/templates/activities/FullscreenActivity/root/res/values/attrs.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<resources>
-
-    <!-- Declare custom theme attributes that allow changing which styles are
-         used for button bars depending on the API level.
-         ?android:attr/buttonBarStyle is new as of API 11 so this is
-         necessary to support previous API levels. -->
-    <declare-styleable name="ButtonBarContainerTheme">
-        <attr name="buttonBarStyle" format="reference" />
-        <attr name="buttonBarButtonStyle" format="reference" />
-    </declare-styleable>
-
-</resources>
diff --git a/templates/activities/FullscreenActivity/root/res/values/colors.xml b/templates/activities/FullscreenActivity/root/res/values/colors.xml
deleted file mode 100644
index 327c060..0000000
--- a/templates/activities/FullscreenActivity/root/res/values/colors.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<resources>
-
-    <color name="black_overlay">#66000000</color>
-
-</resources>
diff --git a/templates/activities/FullscreenActivity/root/res/values/strings.xml.ftl b/templates/activities/FullscreenActivity/root/res/values/strings.xml.ftl
deleted file mode 100644
index 00043bd..0000000
--- a/templates/activities/FullscreenActivity/root/res/values/strings.xml.ftl
+++ /dev/null
@@ -1,9 +0,0 @@
-<resources>
-
-    <#if !isNewProject>
-    <string name="title_${simpleName}">${escapeXmlString(activityTitle)}</string>
-    </#if>
-    <string name="dummy_button">Dummy Button</string>
-    <string name="dummy_content">DUMMY\nCONTENT</string>
-
-</resources>
diff --git a/templates/activities/FullscreenActivity/root/res/values/styles.xml b/templates/activities/FullscreenActivity/root/res/values/styles.xml
deleted file mode 100644
index 48bb968..0000000
--- a/templates/activities/FullscreenActivity/root/res/values/styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<resources>
-
-    <style name="FullscreenTheme" parent="android:Theme.NoTitleBar">
-        <item name="android:windowContentOverlay">@null</item>
-        <item name="android:windowBackground">@null</item>
-        <item name="buttonBarStyle">@style/ButtonBar</item>
-        <item name="buttonBarButtonStyle">@style/ButtonBarButton</item>
-    </style>
-
-    <!-- Backward-compatible version of ?android:attr/buttonBarStyle -->
-    <style name="ButtonBar">
-        <item name="android:paddingLeft">2dp</item>
-        <item name="android:paddingTop">5dp</item>
-        <item name="android:paddingRight">2dp</item>
-        <item name="android:paddingBottom">0dp</item>
-        <item name="android:background">@android:drawable/bottom_bar</item>
-    </style>
-
-    <!-- Backward-compatible version of ?android:attr/buttonBarButtonStyle -->
-    <style name="ButtonBarButton" />
-
-</resources>
diff --git a/templates/activities/FullscreenActivity/root/src/app_package/FullscreenActivity.java.ftl b/templates/activities/FullscreenActivity/root/src/app_package/FullscreenActivity.java.ftl
deleted file mode 100644
index 4714244..0000000
--- a/templates/activities/FullscreenActivity/root/src/app_package/FullscreenActivity.java.ftl
+++ /dev/null
@@ -1,197 +0,0 @@
-package ${packageName};
-
-import ${packageName}.util.SystemUiHider;
-
-import android.annotation.TargetApi;
-import android.app.Activity;
-import android.os.Build;
-import android.os.Bundle;
-import android.os.Handler;
-import android.view.MotionEvent;
-import android.view.View;
-<#if parentActivityClass != "">
-import android.view.MenuItem;
-import android.support.v4.app.NavUtils;
-</#if>
-
-/**
- * An example full-screen activity that shows and hides the system UI (i.e.
- * status bar and navigation/system bar) with user interaction.
- *
- * @see SystemUiHider
- */
-public class ${activityClass} extends Activity {
-    /**
-     * Whether or not the system UI should be auto-hidden after
-     * {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds.
-     */
-    private static final boolean AUTO_HIDE = true;
-
-    /**
-     * If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after
-     * user interaction before hiding the system UI.
-     */
-    private static final int AUTO_HIDE_DELAY_MILLIS = 3000;
-
-    /**
-     * If set, will toggle the system UI visibility upon interaction. Otherwise,
-     * will show the system UI visibility upon interaction.
-     */
-    private static final boolean TOGGLE_ON_CLICK = true;
-
-    /**
-     * The flags to pass to {@link SystemUiHider#getInstance}.
-     */
-    private static final int HIDER_FLAGS = SystemUiHider.FLAG_HIDE_NAVIGATION;
-
-    /**
-     * The instance of the {@link SystemUiHider} for this activity.
-     */
-    private SystemUiHider mSystemUiHider;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        setContentView(R.layout.${layoutName});
-        <#if parentActivityClass != "">
-        setupActionBar();
-        </#if>
-
-        final View controlsView = findViewById(R.id.fullscreen_content_controls);
-        final View contentView = findViewById(R.id.fullscreen_content);
-
-        // Set up an instance of SystemUiHider to control the system UI for
-        // this activity.
-        mSystemUiHider = SystemUiHider.getInstance(this, contentView, HIDER_FLAGS);
-        mSystemUiHider.setup();
-        mSystemUiHider
-                .setOnVisibilityChangeListener(new SystemUiHider.OnVisibilityChangeListener() {
-                    // Cached values.
-                    int mControlsHeight;
-                    int mShortAnimTime;
-
-                    @Override
-                    @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
-                    public void onVisibilityChange(boolean visible) {
-                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
-                            // If the ViewPropertyAnimator API is available
-                            // (Honeycomb MR2 and later), use it to animate the
-                            // in-layout UI controls at the bottom of the
-                            // screen.
-                            if (mControlsHeight == 0) {
-                                mControlsHeight = controlsView.getHeight();
-                            }
-                            if (mShortAnimTime == 0) {
-                                mShortAnimTime = getResources().getInteger(
-                                        android.R.integer.config_shortAnimTime);
-                            }
-                            controlsView.animate()
-                                    .translationY(visible ? 0 : mControlsHeight)
-                                    .setDuration(mShortAnimTime);
-                        } else {
-                            // If the ViewPropertyAnimator APIs aren't
-                            // available, simply show or hide the in-layout UI
-                            // controls.
-                            controlsView.setVisibility(visible ? View.VISIBLE : View.GONE);
-                        }
-
-                        if (visible && AUTO_HIDE) {
-                            // Schedule a hide().
-                            delayedHide(AUTO_HIDE_DELAY_MILLIS);
-                        }
-                    }
-                });
-
-        // Set up the user interaction to manually show or hide the system UI.
-        contentView.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                if (TOGGLE_ON_CLICK) {
-                    mSystemUiHider.toggle();
-                } else {
-                    mSystemUiHider.show();
-                }
-            }
-        });
-
-        // Upon interacting with UI controls, delay any scheduled hide()
-        // operations to prevent the jarring behavior of controls going away
-        // while interacting with the UI.
-        findViewById(R.id.dummy_button).setOnTouchListener(mDelayHideTouchListener);
-    }
-
-    @Override
-    protected void onPostCreate(Bundle savedInstanceState) {
-        super.onPostCreate(savedInstanceState);
-
-        // Trigger the initial hide() shortly after the activity has been
-        // created, to briefly hint to the user that UI controls
-        // are available.
-        delayedHide(100);
-    }
-
-    <#if parentActivityClass != "">
-    /**
-     * Set up the {@link android.app.ActionBar}, if the API is available.
-     */
-    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
-    private void setupActionBar() {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
-            // Show the Up button in the action bar.
-            getActionBar().setDisplayHomeAsUpEnabled(true);
-        }
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home:
-                // This ID represents the Home or Up button. In the case of this
-                // activity, the Up button is shown. Use NavUtils to allow users
-                // to navigate up one level in the application structure. For
-                // more details, see the Navigation pattern on Android Design:
-                //
-                // http://developer.android.com/design/patterns/navigation.html#up-vs-back
-                //
-                // TODO: If Settings has multiple levels, Up should navigate up
-                // that hierarchy.
-                NavUtils.navigateUpFromSameTask(this);
-                return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-    </#if>
-
-    /**
-     * Touch listener to use for in-layout UI controls to delay hiding the
-     * system UI. This is to prevent the jarring behavior of controls going away
-     * while interacting with activity UI.
-     */
-    View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() {
-        @Override
-        public boolean onTouch(View view, MotionEvent motionEvent) {
-            if (AUTO_HIDE) {
-                delayedHide(AUTO_HIDE_DELAY_MILLIS);
-            }
-            return false;
-        }
-    };
-
-    Handler mHideHandler = new Handler();
-    Runnable mHideRunnable = new Runnable() {
-        @Override
-        public void run() {
-            mSystemUiHider.hide();
-        }
-    };
-
-    /**
-     * Schedules a call to hide() in [delay] milliseconds, canceling any
-     * previously scheduled calls.
-     */
-    private void delayedHide(int delayMillis) {
-        mHideHandler.removeCallbacks(mHideRunnable);
-        mHideHandler.postDelayed(mHideRunnable, delayMillis);
-    }
-}
diff --git a/templates/activities/FullscreenActivity/root/src/app_package/util/SystemUiHider.java.ftl b/templates/activities/FullscreenActivity/root/src/app_package/util/SystemUiHider.java.ftl
deleted file mode 100644
index 28efb77..0000000
--- a/templates/activities/FullscreenActivity/root/src/app_package/util/SystemUiHider.java.ftl
+++ /dev/null
@@ -1,172 +0,0 @@
-package ${packageName}.util;
-
-import android.app.Activity;
-import android.os.Build;
-import android.view.View;
-
-/**
- * A utility class that helps with showing and hiding system UI such as the
- * status bar and navigation/system bar. This class uses backward-compatibility
- * techniques described in <a href=
- * "http://developer.android.com/training/backward-compatible-ui/index.html">
- * Creating Backward-Compatible UIs</a> to ensure that devices running any
- * version of ndroid OS are supported. More specifically, there are separate
- * implementations of this abstract class: for newer devices,
- * {@link #getInstance} will return a {@link SystemUiHiderHoneycomb} instance,
- * while on older devices {@link #getInstance} will return a
- * {@link SystemUiHiderBase} instance.
- * <p>
- * For more on system bars, see <a href=
- * "http://developer.android.com/design/get-started/ui-overview.html#system-bars"
- * > System Bars</a>.
- * 
- * @see android.view.View#setSystemUiVisibility(int)
- * @see android.view.WindowManager.LayoutParams#FLAG_FULLSCREEN
- */
-public abstract class SystemUiHider {
-    /**
-     * When this flag is set, the
-     * {@link android.view.WindowManager.LayoutParams#FLAG_LAYOUT_IN_SCREEN}
-     * flag will be set on older devices, making the status bar "float" on top
-     * of the activity layout. This is most useful when there are no controls at
-     * the top of the activity layout.
-     * <p>
-     * This flag isn't used on newer devices because the <a
-     * href="http://developer.android.com/design/patterns/actionbar.html">action
-     * bar</a>, the most important structural element of an Android app, should
-     * be visible and not obscured by the system UI.
-     */
-    public static final int FLAG_LAYOUT_IN_SCREEN_OLDER_DEVICES = 0x1;
-
-    /**
-     * When this flag is set, {@link #show()} and {@link #hide()} will toggle
-     * the visibility of the status bar. If there is a navigation bar, show and
-     * hide will toggle low profile mode.
-     */
-    public static final int FLAG_FULLSCREEN = 0x2;
-
-    /**
-     * When this flag is set, {@link #show()} and {@link #hide()} will toggle
-     * the visibility of the navigation bar, if it's present on the device and
-     * the device allows hiding it. In cases where the navigation bar is present
-     * but cannot be hidden, show and hide will toggle low profile mode.
-     */
-    public static final int FLAG_HIDE_NAVIGATION = FLAG_FULLSCREEN | 0x4;
-
-    /**
-     * The activity associated with this UI hider object.
-     */
-    protected Activity mActivity;
-
-    /**
-     * The view on which {@link View#setSystemUiVisibility(int)} will be called.
-     */
-    protected View mAnchorView;
-
-    /**
-     * The current UI hider flags.
-     * 
-     * @see #FLAG_FULLSCREEN
-     * @see #FLAG_HIDE_NAVIGATION
-     * @see #FLAG_LAYOUT_IN_SCREEN_OLDER_DEVICES
-     */
-    protected int mFlags;
-
-    /**
-     * The current visibility callback.
-     */
-    protected OnVisibilityChangeListener mOnVisibilityChangeListener = sDummyListener;
-
-    /**
-     * Creates and returns an instance of {@link SystemUiHider} that is
-     * appropriate for this device. The object will be either a
-     * {@link SystemUiHiderBase} or {@link SystemUiHiderHoneycomb} depending on
-     * the device.
-     * 
-     * @param activity The activity whose window's system UI should be
-     *            controlled by this class.
-     * @param anchorView The view on which
-     *            {@link View#setSystemUiVisibility(int)} will be called.
-     * @param flags Either 0 or any combination of {@link #FLAG_FULLSCREEN},
-     *            {@link #FLAG_HIDE_NAVIGATION}, and
-     *            {@link #FLAG_LAYOUT_IN_SCREEN_OLDER_DEVICES}.
-     */
-    public static SystemUiHider getInstance(Activity activity, View anchorView, int flags) {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
-            return new SystemUiHiderHoneycomb(activity, anchorView, flags);
-        } else {
-            return new SystemUiHiderBase(activity, anchorView, flags);
-        }
-    }
-
-    protected SystemUiHider(Activity activity, View anchorView, int flags) {
-        mActivity = activity;
-        mAnchorView = anchorView;
-        mFlags = flags;
-    }
-
-    /**
-     * Sets up the system UI hider. Should be called from
-     * {@link Activity#onCreate}.
-     */
-    public abstract void setup();
-
-    /**
-     * Returns whether or not the system UI is visible.
-     */
-    public abstract boolean isVisible();
-
-    /**
-     * Hide the system UI.
-     */
-    public abstract void hide();
-
-    /**
-     * Show the system UI.
-     */
-    public abstract void show();
-
-    /**
-     * Toggle the visibility of the system UI.
-     */
-    public void toggle() {
-        if (isVisible()) {
-            hide();
-        } else {
-            show();
-        }
-    }
-
-    /**
-     * Registers a callback, to be triggered when the system UI visibility
-     * changes.
-     */
-    public void setOnVisibilityChangeListener(OnVisibilityChangeListener listener) {
-        if (listener == null) {
-            listener = sDummyListener;
-        }
-
-        mOnVisibilityChangeListener = listener;
-    }
-
-    /**
-     * A dummy no-op callback for use when there is no other listener set.
-     */
-    private static OnVisibilityChangeListener sDummyListener = new OnVisibilityChangeListener() {
-        @Override
-        public void onVisibilityChange(boolean visible) {
-        }
-    };
-
-    /**
-     * A callback interface used to listen for system UI visibility changes.
-     */
-    public interface OnVisibilityChangeListener {
-        /**
-         * Called when the system UI visibility has changed.
-         * 
-         * @param visible True if the system UI is visible.
-         */
-        public void onVisibilityChange(boolean visible);
-    }
-}
diff --git a/templates/activities/FullscreenActivity/root/src/app_package/util/SystemUiHiderBase.java.ftl b/templates/activities/FullscreenActivity/root/src/app_package/util/SystemUiHiderBase.java.ftl
deleted file mode 100644
index da08842..0000000
--- a/templates/activities/FullscreenActivity/root/src/app_package/util/SystemUiHiderBase.java.ftl
+++ /dev/null
@@ -1,63 +0,0 @@
-package ${packageName}.util;
-
-import android.app.Activity;
-import android.view.View;
-import android.view.WindowManager;
-
-/**
- * A base implementation of {@link SystemUiHider}. Uses APIs available in all
- * API levels to show and hide the status bar.
- */
-public class SystemUiHiderBase extends SystemUiHider {
-    /**
-     * Whether or not the system UI is currently visible. This is a cached value
-     * from calls to {@link #hide()} and {@link #show()}.
-     */
-    private boolean mVisible = true;
-
-    /**
-     * Constructor not intended to be called by clients. Use
-     * {@link SystemUiHider#getInstance} to obtain an instance.
-     */
-    protected SystemUiHiderBase(Activity activity, View anchorView, int flags) {
-        super(activity, anchorView, flags);
-    }
-
-    @Override
-    public void setup() {
-        if ((mFlags & FLAG_LAYOUT_IN_SCREEN_OLDER_DEVICES) == 0) {
-            mActivity.getWindow().setFlags(
-                    WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
-                            | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
-                    WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
-                            | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
-        }
-    }
-
-    @Override
-    public boolean isVisible() {
-        return mVisible;
-    }
-
-    @Override
-    public void hide() {
-        if ((mFlags & FLAG_FULLSCREEN) != 0) {
-            mActivity.getWindow().setFlags(
-                    WindowManager.LayoutParams.FLAG_FULLSCREEN,
-                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
-        }
-        mOnVisibilityChangeListener.onVisibilityChange(false);
-        mVisible = false;
-    }
-
-    @Override
-    public void show() {
-        if ((mFlags & FLAG_FULLSCREEN) != 0) {
-            mActivity.getWindow().setFlags(
-                    0,
-                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
-        }
-        mOnVisibilityChangeListener.onVisibilityChange(true);
-        mVisible = true;
-    }
-}
diff --git a/templates/activities/FullscreenActivity/root/src/app_package/util/SystemUiHiderHoneycomb.java.ftl b/templates/activities/FullscreenActivity/root/src/app_package/util/SystemUiHiderHoneycomb.java.ftl
deleted file mode 100644
index 2e2d8a9..0000000
--- a/templates/activities/FullscreenActivity/root/src/app_package/util/SystemUiHiderHoneycomb.java.ftl
+++ /dev/null
@@ -1,133 +0,0 @@
-package ${packageName}.util;
-
-import android.annotation.TargetApi;
-import android.app.Activity;
-import android.os.Build;
-import android.view.View;
-import android.view.WindowManager;
-
-/**
- * An API 11+ implementation of {@link SystemUiHider}. Uses APIs available in
- * Honeycomb and later (specifically {@link View#setSystemUiVisibility(int)}) to
- * show and hide the system UI.
- */
-@TargetApi(Build.VERSION_CODES.HONEYCOMB)
-public class SystemUiHiderHoneycomb extends SystemUiHiderBase {
-    /**
-     * Flags for {@link View#setSystemUiVisibility(int)} to use when showing the
-     * system UI.
-     */
-    private int mShowFlags;
-
-    /**
-     * Flags for {@link View#setSystemUiVisibility(int)} to use when hiding the
-     * system UI.
-     */
-    private int mHideFlags;
-
-    /**
-     * Flags to test against the first parameter in
-     * {@link android.view.View.OnSystemUiVisibilityChangeListener#onSystemUiVisibilityChange(int)}
-     * to determine the system UI visibility state.
-     */
-    private int mTestFlags;
-
-    /**
-     * Whether or not the system UI is currently visible. This is cached from
-     * {@link android.view.View.OnSystemUiVisibilityChangeListener}.
-     */
-    private boolean mVisible = true;
-
-    /**
-     * Constructor not intended to be called by clients. Use
-     * {@link SystemUiHider#getInstance} to obtain an instance.
-     */
-    protected SystemUiHiderHoneycomb(Activity activity, View anchorView, int flags) {
-        super(activity, anchorView, flags);
-
-        mShowFlags = View.SYSTEM_UI_FLAG_VISIBLE;
-        mHideFlags = View.SYSTEM_UI_FLAG_LOW_PROFILE;
-        mTestFlags = View.SYSTEM_UI_FLAG_LOW_PROFILE;
-
-        if ((mFlags & FLAG_FULLSCREEN) != 0) {
-            // If the client requested fullscreen, add flags relevant to hiding
-            // the status bar. Note that some of these constants are new as of
-            // API 16 (Jelly Bean). It is safe to use them, as they are inlined
-            // at compile-time and do nothing on pre-Jelly Bean devices.
-            mShowFlags |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
-            mHideFlags |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
-                    | View.SYSTEM_UI_FLAG_FULLSCREEN;
-        }
-
-        if ((mFlags & FLAG_HIDE_NAVIGATION) != 0) {
-            // If the client requested hiding navigation, add relevant flags.
-            mShowFlags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
-            mHideFlags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
-                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
-            mTestFlags |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public void setup() {
-        mAnchorView.setOnSystemUiVisibilityChangeListener(mSystemUiVisibilityChangeListener);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public void hide() {
-        mAnchorView.setSystemUiVisibility(mHideFlags);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public void show() {
-        mAnchorView.setSystemUiVisibility(mShowFlags);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public boolean isVisible() {
-        return mVisible;
-    }
-
-    private View.OnSystemUiVisibilityChangeListener mSystemUiVisibilityChangeListener
-            = new View.OnSystemUiVisibilityChangeListener() {
-        @Override
-        public void onSystemUiVisibilityChange(int vis) {
-            // Test against mTestFlags to see if the system UI is visible.
-            if ((vis & mTestFlags) != 0) {
-                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
-                    // Pre-Jelly Bean, we must manually hide the action bar
-                    // and use the old window flags API.
-                    mActivity.getActionBar().hide();
-                    mActivity.getWindow().setFlags(
-                            WindowManager.LayoutParams.FLAG_FULLSCREEN,
-                            WindowManager.LayoutParams.FLAG_FULLSCREEN);
-                }
-
-                // Trigger the registered listener and cache the visibility
-                // state.
-                mOnVisibilityChangeListener.onVisibilityChange(false);
-                mVisible = false;
-
-            } else {
-                mAnchorView.setSystemUiVisibility(mShowFlags);
-                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
-                    // Pre-Jelly Bean, we must manually show the action bar
-                    // and use the old window flags API.
-                    mActivity.getActionBar().show();
-                    mActivity.getWindow().setFlags(
-                            0,
-                            WindowManager.LayoutParams.FLAG_FULLSCREEN);
-                }
-
-                // Trigger the registered listener and cache the visibility
-                // state.
-                mOnVisibilityChangeListener.onVisibilityChange(true);
-                mVisible = true;
-            }
-        }
-    };
-}
diff --git a/templates/activities/FullscreenActivity/template.xml b/templates/activities/FullscreenActivity/template.xml
deleted file mode 100644
index d2617fb..0000000
--- a/templates/activities/FullscreenActivity/template.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0"?>
-<template
-    format="3"
-    revision="3"
-    name="Fullscreen Activity"
-    description="Creates a new activity that toggles the visibility of the system UI (status and navigation bars) and action bar upon user interaction."
-    minApi="4"
-    minBuildApi="16">
-    <dependency name="android-support-v4" revision="8" />
-
-    <category value="Activities" />
-
-    <parameter
-        id="activityClass"
-        name="Activity Name"
-        type="string"
-        constraints="class|unique|nonempty"
-        default="FullscreenActivity"
-        help="The name of the activity class to create" />
-
-    <parameter
-        id="layoutName"
-        name="Layout Name"
-        type="string"
-        constraints="layout|unique|nonempty"
-        suggest="${activityToLayout(activityClass)}"
-        default="activity_fullscreen"
-        help="The name of the layout to create for the activity" />
-
-    <parameter
-        id="activityTitle"
-        name="Title"
-        type="string"
-        constraints="nonempty"
-        default="FullscreenActivity"
-        suggest="${activityClass}"
-        help="The name of the activity." />
-
-    <parameter
-        id="isLauncher"
-        name="Launcher Activity"
-        type="boolean"
-        default="false"
-        help="If true, this activity will have a CATEGORY_LAUNCHER intent filter, making it visible in the launcher" />
-
-    <parameter
-        id="parentActivityClass"
-        name="Hierarchical Parent"
-        type="string"
-        constraints="activity|exists|empty"
-        default=""
-        help="The hierarchical parent activity, used to provide a default implementation for the 'Up' button" />
-
-    <parameter
-        id="packageName"
-        name="Package name"
-        type="string"
-        constraints="package"
-        default="com.mycompany.myapp" />
-
-    <thumbs>
-        <thumb>template_fullscreen_activity.png</thumb>
-    </thumbs>
-
-    <globals file="globals.xml.ftl" />
-    <execute file="recipe.xml.ftl" />
-
-</template>
diff --git a/templates/activities/FullscreenActivity/template_fullscreen_activity.png b/templates/activities/FullscreenActivity/template_fullscreen_activity.png
deleted file mode 100644
index a8597b2..0000000
--- a/templates/activities/FullscreenActivity/template_fullscreen_activity.png
+++ /dev/null
Binary files differ
diff --git a/templates/activities/LoginActivity/globals.xml.ftl b/templates/activities/LoginActivity/globals.xml.ftl
deleted file mode 100644
index fbe8985..0000000
--- a/templates/activities/LoginActivity/globals.xml.ftl
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<globals>
-    <global id="projectOut" value="." />
-    <global id="manifestOut" value="." />
-    <global id="srcOut" value="src/${slashedPackageName(packageName)}" />
-    <global id="resOut" value="res" />
-    <global id="menuName" value="${classToResource(activityClass)}" />
-    <global id="simpleName" value="${activityToLayout(activityClass)}" />
-</globals>
diff --git a/templates/activities/LoginActivity/recipe.xml.ftl b/templates/activities/LoginActivity/recipe.xml.ftl
deleted file mode 100644
index 94f93d6..0000000
--- a/templates/activities/LoginActivity/recipe.xml.ftl
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<recipe>
-    <merge from="AndroidManifest.xml.ftl"
-             to="${escapeXmlAttribute(manifestOut)}/AndroidManifest.xml" />
-
-    <merge from="res/values/styles.xml"
-             to="${escapeXmlAttribute(resOut)}/values/styles.xml" />
-    <merge from="res/values-large/styles.xml"
-             to="${escapeXmlAttribute(resOut)}/values-large/styles.xml" />
-    <copy from="res/menu/activity_login.xml"
-            to="${escapeXmlAttribute(resOut)}/menu/${menuName}.xml" />
-    <instantiate from="res/layout/activity_login.xml.ftl"
-                   to="${escapeXmlAttribute(resOut)}/layout/${layoutName}.xml" />
-
-    <instantiate from="res/values/strings.xml.ftl"
-                   to="${escapeXmlAttribute(resOut)}/values/strings_${simpleName}.xml" />
-
-    <instantiate from="src/app_package/LoginActivity.java.ftl"
-                   to="${escapeXmlAttribute(srcOut)}/${activityClass}.java" />
-
-    <open file="${escapeXmlAttribute(resOut)}/layout/${layoutName}.xml" />
-</recipe>
diff --git a/templates/activities/LoginActivity/root/AndroidManifest.xml.ftl b/templates/activities/LoginActivity/root/AndroidManifest.xml.ftl
deleted file mode 100644
index c5f02d2..0000000
--- a/templates/activities/LoginActivity/root/AndroidManifest.xml.ftl
+++ /dev/null
@@ -1,19 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" >
-
-    <application>
-        <activity android:name=".${activityClass}"
-            <#if isNewProject>
-            android:label="@string/app_name"
-            <#else>
-            android:label="@string/title_${simpleName}"
-            </#if>
-            android:windowSoftInputMode="adjustResize|stateVisible"
-            <#if buildApi gte 16 && parentActivityClass != "">android:parentActivityName="${parentActivityClass}"</#if>>
-            <#if parentActivityClass != "">
-            <meta-data android:name="android.support.PARENT_ACTIVITY"
-                android:value="${parentActivityClass}" />
-            </#if>
-        </activity>
-    </application>
-
-</manifest>
diff --git a/templates/activities/LoginActivity/root/res/layout/activity_login.xml.ftl b/templates/activities/LoginActivity/root/res/layout/activity_login.xml.ftl
deleted file mode 100644
index 9434e5b..0000000
--- a/templates/activities/LoginActivity/root/res/layout/activity_login.xml.ftl
+++ /dev/null
@@ -1,69 +0,0 @@
-<merge xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    tools:context=".${activityClass}">
-
-    <!-- Login progress -->
-    <LinearLayout android:id="@+id/login_status"
-        android:visibility="gone"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center"
-        android:gravity="center_horizontal"
-        android:orientation="vertical">
-        <ProgressBar style="?android:attr/progressBarStyleLarge"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginBottom="8dp"/>
-        <TextView
-            android:id="@+id/login_status_message"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-            android:fontFamily="sans-serif-light"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginBottom="16dp"
-            android:text="@string/login_progress_signing_in" />
-    </LinearLayout>
-
-    <!-- Login form -->
-    <ScrollView
-        android:id="@+id/login_form"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-
-        <LinearLayout style="@style/LoginFormContainer"
-            android:orientation="vertical">
-
-            <EditText
-                android:id="@+id/email"
-                android:singleLine="true"
-                android:maxLines="1"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:inputType="textEmailAddress"
-                android:hint="@string/prompt_email" />
-
-            <EditText
-                android:id="@+id/password"
-                android:singleLine="true"
-                android:maxLines="1"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:hint="@string/prompt_password"
-                android:inputType="textPassword"
-                android:imeActionLabel="@string/action_sign_in_short"
-                android:imeActionId="@+id/login"
-                android:imeOptions="actionUnspecified" />
-
-            <Button android:id="@+id/sign_in_button"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="16dp"
-                android:text="@string/action_sign_in_register"
-                android:paddingLeft="32dp"
-                android:paddingRight="32dp"
-                android:layout_gravity="right" />
-
-        </LinearLayout>
-
-    </ScrollView>
-</merge>
diff --git a/templates/activities/LoginActivity/root/res/menu/activity_login.xml b/templates/activities/LoginActivity/root/res/menu/activity_login.xml
deleted file mode 100644
index 2965794..0000000
--- a/templates/activities/LoginActivity/root/res/menu/activity_login.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:id="@+id/action_forgot_password"
-        android:title="@string/action_forgot_password"
-        android:showAsAction="never" />
-</menu>
diff --git a/templates/activities/LoginActivity/root/res/values-large/styles.xml b/templates/activities/LoginActivity/root/res/values-large/styles.xml
deleted file mode 100644
index 7b56acd..0000000
--- a/templates/activities/LoginActivity/root/res/values-large/styles.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<resources>
-
-    <style name="LoginFormContainer">
-        <item name="android:layout_width">400dp</item>
-        <item name="android:layout_height">wrap_content</item>
-        <item name="android:layout_gravity">center</item>
-        <item name="android:padding">16dp</item>
-    </style>
-
-</resources>
diff --git a/templates/activities/LoginActivity/root/res/values/strings.xml.ftl b/templates/activities/LoginActivity/root/res/values/strings.xml.ftl
deleted file mode 100644
index def1b2f..0000000
--- a/templates/activities/LoginActivity/root/res/values/strings.xml.ftl
+++ /dev/null
@@ -1,21 +0,0 @@
-<resources>
-    <#if !isNewProject>
-    <string name="title_${simpleName}">${escapeXmlString(activityTitle)}</string>
-    </#if>
-
-    <!-- Strings related to login -->
-    <string name="prompt_email">Email</string>
-    <string name="prompt_password">Password</string>
-
-    <string name="action_sign_in_register"><b>Sign in</b> or register</string>
-    <string name="action_sign_in_short">Sign in</string>
-
-    <string name="action_forgot_password">Recover lost password</string>
-
-    <string name="login_progress_signing_in">Signing in&#8230;</string>
-
-    <string name="error_invalid_email">This email address is invalid</string>
-    <string name="error_invalid_password">This password is too short</string>
-    <string name="error_incorrect_password">This password is incorrect</string>
-    <string name="error_field_required">This field is required</string>
-</resources>
diff --git a/templates/activities/LoginActivity/root/res/values/styles.xml b/templates/activities/LoginActivity/root/res/values/styles.xml
deleted file mode 100644
index eaec28d..0000000
--- a/templates/activities/LoginActivity/root/res/values/styles.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<resources>
-
-    <style name="LoginFormContainer">
-        <item name="android:layout_width">match_parent</item>
-        <item name="android:layout_height">wrap_content</item>
-        <item name="android:padding">16dp</item>
-    </style>
-
-</resources>
diff --git a/templates/activities/LoginActivity/root/src/app_package/LoginActivity.java.ftl b/templates/activities/LoginActivity/root/src/app_package/LoginActivity.java.ftl
deleted file mode 100644
index 8defdc7..0000000
--- a/templates/activities/LoginActivity/root/src/app_package/LoginActivity.java.ftl
+++ /dev/null
@@ -1,278 +0,0 @@
-package ${packageName};
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.annotation.TargetApi;
-import android.app.Activity;
-import android.os.AsyncTask;
-import android.os.Build;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.view.KeyEvent;
-import android.view.Menu;
-import android.view.View;
-import android.view.inputmethod.EditorInfo;
-import android.widget.EditText;
-import android.widget.TextView;
-<#if parentActivityClass != "">
-import android.view.MenuItem;
-import android.support.v4.app.NavUtils;
-</#if>
-
-/**
- * Activity which displays a login screen to the user, offering registration as
- * well.
- */
-public class ${activityClass} extends Activity {
-    /**
-     * A dummy authentication store containing known user names and passwords.
-     * TODO: remove after connecting to a real authentication system.
-     */
-    private static final String[] DUMMY_CREDENTIALS = new String[]{
-            "foo@example.com:hello",
-            "bar@example.com:world"
-    };
-
-    /**
-     * The default email to populate the email field with.
-     */
-    public static final String EXTRA_EMAIL = "com.example.android.authenticatordemo.extra.EMAIL";
-
-    /**
-     * Keep track of the login task to ensure we can cancel it if requested.
-     */
-    private UserLoginTask mAuthTask = null;
-
-    // Values for email and password at the time of the login attempt.
-    private String mEmail;
-    private String mPassword;
-
-    // UI references.
-    private EditText mEmailView;
-    private EditText mPasswordView;
-    private View mLoginFormView;
-    private View mLoginStatusView;
-    private TextView mLoginStatusMessageView;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        setContentView(R.layout.${layoutName});
-        <#if parentActivityClass != "">
-        setupActionBar();
-        </#if>
-
-        // Set up the login form.
-        mEmail = getIntent().getStringExtra(EXTRA_EMAIL);
-        mEmailView = (EditText) findViewById(R.id.email);
-        mEmailView.setText(mEmail);
-
-        mPasswordView = (EditText) findViewById(R.id.password);
-        mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
-            @Override
-            public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
-                if (id == R.id.login || id == EditorInfo.IME_NULL) {
-                    attemptLogin();
-                    return true;
-                }
-                return false;
-            }
-        });
-
-        mLoginFormView = findViewById(R.id.login_form);
-        mLoginStatusView = findViewById(R.id.login_status);
-        mLoginStatusMessageView = (TextView) findViewById(R.id.login_status_message);
-
-        findViewById(R.id.sign_in_button).setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                attemptLogin();
-            }
-        });
-    }
-
-    <#if parentActivityClass != "">
-    /**
-     * Set up the {@link android.app.ActionBar}, if the API is available.
-     */
-    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
-    private void setupActionBar() {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
-            // Show the Up button in the action bar.
-            getActionBar().setDisplayHomeAsUpEnabled(true);
-        }
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home:
-                // This ID represents the Home or Up button. In the case of this
-                // activity, the Up button is shown. Use NavUtils to allow users
-                // to navigate up one level in the application structure. For
-                // more details, see the Navigation pattern on Android Design:
-                //
-                // http://developer.android.com/design/patterns/navigation.html#up-vs-back
-                //
-                // TODO: If Settings has multiple levels, Up should navigate up
-                // that hierarchy.
-                NavUtils.navigateUpFromSameTask(this);
-                return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-    </#if>
-
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        super.onCreateOptionsMenu(menu);
-        getMenuInflater().inflate(R.menu.${menuName}, menu);
-        return true;
-    }
-
-    /**
-     * Attempts to sign in or register the account specified by the login form.
-     * If there are form errors (invalid email, missing fields, etc.), the
-     * errors are presented and no actual login attempt is made.
-     */
-    public void attemptLogin() {
-        if (mAuthTask != null) {
-            return;
-        }
-
-        // Reset errors.
-        mEmailView.setError(null);
-        mPasswordView.setError(null);
-
-        // Store values at the time of the login attempt.
-        mEmail = mEmailView.getText().toString();
-        mPassword = mPasswordView.getText().toString();
-
-        boolean cancel = false;
-        View focusView = null;
-
-        // Check for a valid password.
-        if (TextUtils.isEmpty(mPassword)) {
-            mPasswordView.setError(getString(R.string.error_field_required));
-            focusView = mPasswordView;
-            cancel = true;
-        } else if (mPassword.length() < 4) {
-            mPasswordView.setError(getString(R.string.error_invalid_password));
-            focusView = mPasswordView;
-            cancel = true;
-        }
-
-        // Check for a valid email address.
-        if (TextUtils.isEmpty(mEmail)) {
-            mEmailView.setError(getString(R.string.error_field_required));
-            focusView = mEmailView;
-            cancel = true;
-        } else if (!mEmail.contains("@")) {
-            mEmailView.setError(getString(R.string.error_invalid_email));
-            focusView = mEmailView;
-            cancel = true;
-        }
-
-        if (cancel) {
-            // There was an error; don't attempt login and focus the first
-            // form field with an error.
-            focusView.requestFocus();
-        } else {
-            // Show a progress spinner, and kick off a background task to
-            // perform the user login attempt.
-            mLoginStatusMessageView.setText(R.string.login_progress_signing_in);
-            showProgress(true);
-            mAuthTask = new UserLoginTask();
-            mAuthTask.execute((Void) null);
-        }
-    }
-
-    /**
-     * Shows the progress UI and hides the login form.
-     */
-    @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
-    private void showProgress(final boolean show) {
-        // On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow
-        // for very easy animations. If available, use these APIs to fade-in
-        // the progress spinner.
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
-            int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime);
-
-            mLoginStatusView.setVisibility(View.VISIBLE);
-            mLoginStatusView.animate()
-                    .setDuration(shortAnimTime)
-                    .alpha(show ? 1 : 0)
-                    .setListener(new AnimatorListenerAdapter() {
-                        @Override
-                        public void onAnimationEnd(Animator animation) {
-                            mLoginStatusView.setVisibility(show ? View.VISIBLE : View.GONE);
-                        }
-                    });
-
-            mLoginFormView.setVisibility(View.VISIBLE);
-            mLoginFormView.animate()
-                    .setDuration(shortAnimTime)
-                    .alpha(show ? 0 : 1)
-                    .setListener(new AnimatorListenerAdapter() {
-                        @Override
-                        public void onAnimationEnd(Animator animation) {
-                            mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
-                        }
-                    });
-        } else {
-            // The ViewPropertyAnimator APIs are not available, so simply show
-            // and hide the relevant UI components.
-            mLoginStatusView.setVisibility(show ? View.VISIBLE : View.GONE);
-            mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
-        }
-    }
-
-    /**
-     * Represents an asynchronous login/registration task used to authenticate
-     * the user.
-     */
-    public class UserLoginTask extends AsyncTask<Void, Void, Boolean> {
-        @Override
-        protected Boolean doInBackground(Void... params) {
-            // TODO: attempt authentication against a network service.
-
-            try {
-                // Simulate network access.
-                Thread.sleep(2000);
-            } catch (InterruptedException e) {
-                return false;
-            }
-
-            for (String credential : DUMMY_CREDENTIALS) {
-                String[] pieces = credential.split(":");
-                if (pieces[0].equals(mEmail)) {
-                    // Account exists, return true if the password matches.
-                    return pieces[1].equals(mPassword);
-                }
-            }
-
-            // TODO: register the new account here.
-            return true;
-        }
-
-        @Override
-        protected void onPostExecute(final Boolean success) {
-            mAuthTask = null;
-            showProgress(false);
-
-            if (success) {
-                finish();
-            } else {
-                mPasswordView.setError(getString(R.string.error_incorrect_password));
-                mPasswordView.requestFocus();
-            }
-        }
-
-        @Override
-        protected void onCancelled() {
-            mAuthTask = null;
-            showProgress(false);
-        }
-    }
-}
diff --git a/templates/activities/LoginActivity/template.xml b/templates/activities/LoginActivity/template.xml
deleted file mode 100644
index ccfc7ad..0000000
--- a/templates/activities/LoginActivity/template.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0"?>
-<template
-    format="3"
-    revision="3"
-    name="Login Activity"
-    description="Creates a new login activity, allowing users to enter an email address and password to log in to or register with your application."
-    minApi="3"
-    minBuildApi="13">
-    <dependency name="android-support-v4" revision="8" />
-
-    <category value="Activities" />
-
-    <parameter
-        id="activityClass"
-        name="Activity Name"
-        type="string"
-        constraints="class|unique|nonempty"
-        default="LoginActivity"
-        help="The name of the activity class to create" />
-
-    <parameter
-        id="layoutName"
-        name="Layout Name"
-        type="string"
-        constraints="layout|unique|nonempty"
-        suggest="${activityToLayout(activityClass)}"
-        default="activity_login"
-        help="The name of the layout to create for the activity" />
-
-    <parameter
-        id="activityTitle"
-        name="Title"
-        type="string"
-        constraints="nonempty"
-        default="Sign in"
-        help="The name of the activity." />
-
-    <parameter
-        id="parentActivityClass"
-        name="Hierarchical Parent"
-        type="string"
-        constraints="activity|exists|empty"
-        default=""
-        help="The hierarchical parent activity, used to provide a default implementation for the 'Up' button" />
-
-    <parameter
-        id="packageName"
-        name="Package name"
-        type="string"
-        constraints="package"
-        default="com.mycompany.myapp" />
-
-    <thumbs>
-        <thumb>template_login_activity.png</thumb>
-    </thumbs>
-
-    <globals file="globals.xml.ftl" />
-    <execute file="recipe.xml.ftl" />
-
-</template>
diff --git a/templates/activities/LoginActivity/template_login_activity.png b/templates/activities/LoginActivity/template_login_activity.png
deleted file mode 100644
index 0f9bfc0..0000000
--- a/templates/activities/LoginActivity/template_login_activity.png
+++ /dev/null
Binary files differ
diff --git a/templates/activities/MasterDetailFlow/globals.xml.ftl b/templates/activities/MasterDetailFlow/globals.xml.ftl
deleted file mode 100644
index 415d60e..0000000
--- a/templates/activities/MasterDetailFlow/globals.xml.ftl
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-<globals>
-    <global id="projectOut" value="." />
-    <global id="manifestOut" value="." />
-    <global id="srcOut" value="src/${slashedPackageName(packageName)}" />
-    <global id="resOut" value="res" />
-    <global id="CollectionName" value="${extractLetters(objectKind)}List" />
-    <global id="collection_name" value="${extractLetters(objectKind?lower_case)}_list" />
-    <global id="DetailName" value="${extractLetters(objectKind)}Detail" />
-    <global id="detail_name" value="${extractLetters(objectKind?lower_case)}_detail" />
-</globals>
diff --git a/templates/activities/MasterDetailFlow/recipe.xml.ftl b/templates/activities/MasterDetailFlow/recipe.xml.ftl
deleted file mode 100644
index 4b39f74..0000000
--- a/templates/activities/MasterDetailFlow/recipe.xml.ftl
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<recipe>
-    <merge from="AndroidManifest.xml.ftl"
-             to="${escapeXmlAttribute(manifestOut)}/AndroidManifest.xml" />
-
-    <merge from="res/values-large/refs.xml.ftl"
-             to="${escapeXmlAttribute(resOut)}/values-large/refs.xml" />
-    <merge from="res/values-sw600dp/refs.xml.ftl"
-             to="${escapeXmlAttribute(resOut)}/values-sw600dp/refs.xml" />
-    <merge from="res/values/strings.xml.ftl"
-             to="${escapeXmlAttribute(resOut)}/values/strings.xml" />
-
-    <instantiate from="res/layout/activity_content_detail.xml.ftl"
-                   to="${escapeXmlAttribute(resOut)}/layout/activity_${detail_name}.xml" />
-    <instantiate from="res/layout/activity_content_list.xml.ftl"
-                   to="${escapeXmlAttribute(resOut)}/layout/activity_${collection_name}.xml" />
-    <instantiate from="res/layout/activity_content_twopane.xml.ftl"
-                   to="${escapeXmlAttribute(resOut)}/layout/activity_${extractLetters(objectKind?lower_case)}_twopane.xml" />
-    <instantiate from="res/layout/fragment_content_detail.xml.ftl"
-                   to="${escapeXmlAttribute(resOut)}/layout/fragment_${detail_name}.xml" />
-
-    <instantiate from="src/app_package/ContentDetailActivity.java.ftl"
-                   to="${escapeXmlAttribute(srcOut)}/${DetailName}Activity.java" />
-    <instantiate from="src/app_package/ContentDetailFragment.java.ftl"
-                   to="${escapeXmlAttribute(srcOut)}/${DetailName}Fragment.java" />
-    <instantiate from="src/app_package/ContentListActivity.java.ftl"
-                   to="${escapeXmlAttribute(srcOut)}/${CollectionName}Activity.java" />
-    <instantiate from="src/app_package/ContentListFragment.java.ftl"
-                   to="${escapeXmlAttribute(srcOut)}/${CollectionName}Fragment.java" />
-    <instantiate from="src/app_package/dummy/DummyContent.java.ftl"
-                   to="${escapeXmlAttribute(srcOut)}/dummy/DummyContent.java" />
-</recipe>
diff --git a/templates/activities/MasterDetailFlow/root/AndroidManifest.xml.ftl b/templates/activities/MasterDetailFlow/root/AndroidManifest.xml.ftl
deleted file mode 100644
index 4707bd6..0000000
--- a/templates/activities/MasterDetailFlow/root/AndroidManifest.xml.ftl
+++ /dev/null
@@ -1,31 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <application>
-        <activity android:name=".${CollectionName}Activity"
-            <#if isNewProject>
-            android:label="@string/app_name"
-            <#else>
-            android:label="@string/title_${collection_name}"
-            </#if>
-            <#if buildApi gte 16 && parentActivityClass != "">android:parentActivityName="${parentActivityClass}"</#if>>
-            <#if parentActivityClass != "">
-            <meta-data android:name="android.support.PARENT_ACTIVITY"
-                android:value="${parentActivityClass}" />
-            </#if>
-            <#if isLauncher>
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-            </#if>
-        </activity>
-
-        <activity android:name=".${DetailName}Activity"
-            android:label="@string/title_${detail_name}"
-            <#if buildApi gte 16>android:parentActivityName=".${CollectionName}Activity"</#if>>
-            <meta-data android:name="android.support.PARENT_ACTIVITY"
-                android:value=".${CollectionName}Activity" />
-        </activity>
-    </application>
-
-</manifest>
diff --git a/templates/activities/MasterDetailFlow/root/res/layout/activity_content_detail.xml.ftl b/templates/activities/MasterDetailFlow/root/res/layout/activity_content_detail.xml.ftl
deleted file mode 100644
index ddc1ecc..0000000
--- a/templates/activities/MasterDetailFlow/root/res/layout/activity_content_detail.xml.ftl
+++ /dev/null
@@ -1,7 +0,0 @@
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/${detail_name}_container"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    tools:context=".${DetailName}Activity"
-    tools:ignore="MergeRootFrame" />
diff --git a/templates/activities/MasterDetailFlow/root/res/layout/activity_content_list.xml.ftl b/templates/activities/MasterDetailFlow/root/res/layout/activity_content_list.xml.ftl
deleted file mode 100644
index 065cd42..0000000
--- a/templates/activities/MasterDetailFlow/root/res/layout/activity_content_list.xml.ftl
+++ /dev/null
@@ -1,10 +0,0 @@
-<fragment xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/${collection_name}"
-    android:name="${packageName}.${CollectionName}Fragment"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:layout_marginLeft="16dp"
-    android:layout_marginRight="16dp"
-    tools:context=".${CollectionName}Activity"
-    tools:layout="@android:layout/list_content" />
diff --git a/templates/activities/MasterDetailFlow/root/res/layout/activity_content_twopane.xml.ftl b/templates/activities/MasterDetailFlow/root/res/layout/activity_content_twopane.xml.ftl
deleted file mode 100644
index 575e9e6..0000000
--- a/templates/activities/MasterDetailFlow/root/res/layout/activity_content_twopane.xml.ftl
+++ /dev/null
@@ -1,38 +0,0 @@
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:layout_marginLeft="16dp"
-    android:layout_marginRight="16dp"
-    android:baselineAligned="false"
-    android:divider="?android:attr/dividerHorizontal"
-    android:orientation="horizontal"
-    android:showDividers="middle"
-    tools:context=".${CollectionName}Activity">
-
-    <!--
-    This layout is a two-pane layout for the ${objectKindPlural}
-    master/detail flow. See res/values-large/refs.xml and
-    res/values-sw600dp/refs.xml for an example of layout aliases
-    that replace the single-pane version of the layout with
-    this two-pane version.
-
-    For more on layout aliases, see:
-    http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters
-    -->
-
-    <fragment
-        android:id="@+id/${collection_name}"
-        android:name="${packageName}.${CollectionName}Fragment"
-        android:layout_width="0dp"
-        android:layout_height="match_parent"
-        android:layout_weight="1"
-        tools:layout="@android:layout/list_content" />
-
-    <FrameLayout
-        android:id="@+id/${detail_name}_container"
-        android:layout_width="0dp"
-        android:layout_height="match_parent"
-        android:layout_weight="3" />
-
-</LinearLayout>
diff --git a/templates/activities/MasterDetailFlow/root/res/layout/fragment_content_detail.xml.ftl b/templates/activities/MasterDetailFlow/root/res/layout/fragment_content_detail.xml.ftl
deleted file mode 100644
index 808fc31..0000000
--- a/templates/activities/MasterDetailFlow/root/res/layout/fragment_content_detail.xml.ftl
+++ /dev/null
@@ -1,9 +0,0 @@
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/${detail_name}"
-    style="?android:attr/textAppearanceLarge"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:padding="16dp"
-    android:textIsSelectable="true"
-    tools:context=".${DetailName}Fragment" />
diff --git a/templates/activities/MasterDetailFlow/root/res/values-large/refs.xml.ftl b/templates/activities/MasterDetailFlow/root/res/values-large/refs.xml.ftl
deleted file mode 100644
index 97215c3..0000000
--- a/templates/activities/MasterDetailFlow/root/res/values-large/refs.xml.ftl
+++ /dev/null
@@ -1,10 +0,0 @@
-<resources>
-    <!--
-    Layout alias to replace the single-pane version of the layout with a
-    two-pane version on Large screens.
-
-    For more on layout aliases, see:
-    http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters
-    -->
-    <item type="layout" name="activity_${collection_name}">@layout/activity_${extractLetters(objectKind?lower_case)}_twopane</item>
-</resources>
diff --git a/templates/activities/MasterDetailFlow/root/res/values-sw600dp/refs.xml.ftl b/templates/activities/MasterDetailFlow/root/res/values-sw600dp/refs.xml.ftl
deleted file mode 100644
index d592404..0000000
--- a/templates/activities/MasterDetailFlow/root/res/values-sw600dp/refs.xml.ftl
+++ /dev/null
@@ -1,11 +0,0 @@
-<resources>
-    <!--
-    Layout alias to replace the single-pane version of the layout with a
-    two-pane version on screens with a smallest width (smallest dimension)
-    of at least 600 density-independent pixels (dips).
-
-    For more on layout aliases, see:
-    http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters
-    -->
-    <item type="layout" name="activity_${collection_name}">@layout/activity_${extractLetters(objectKind?lower_case)}_twopane</item>
-</resources>
diff --git a/templates/activities/MasterDetailFlow/root/res/values/strings.xml.ftl b/templates/activities/MasterDetailFlow/root/res/values/strings.xml.ftl
deleted file mode 100644
index ea882bc..0000000
--- a/templates/activities/MasterDetailFlow/root/res/values/strings.xml.ftl
+++ /dev/null
@@ -1,6 +0,0 @@
-<resources>
-    <#if !isNewProject>
-    <string name="title_${collection_name}">${escapeXmlString(objectKindPlural)}</string>
-    </#if>
-    <string name="title_${detail_name}">${escapeXmlString(objectKind)} Detail</string>
-</resources>
diff --git a/templates/activities/MasterDetailFlow/root/src/app_package/ContentDetailActivity.java.ftl b/templates/activities/MasterDetailFlow/root/src/app_package/ContentDetailActivity.java.ftl
deleted file mode 100644
index 2cc6054..0000000
--- a/templates/activities/MasterDetailFlow/root/src/app_package/ContentDetailActivity.java.ftl
+++ /dev/null
@@ -1,67 +0,0 @@
-package ${packageName};
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.support.v4.app.FragmentActivity;
-import android.support.v4.app.NavUtils;
-import android.view.MenuItem;
-
-/**
- * An activity representing a single ${objectKind} detail screen. This
- * activity is only used on handset devices. On tablet-size devices,
- * item details are presented side-by-side with a list of items
- * in a {@link ${CollectionName}Activity}.
- * <p>
- * This activity is mostly just a 'shell' activity containing nothing
- * more than a {@link ${DetailName}Fragment}.
- */
-public class ${DetailName}Activity extends FragmentActivity {
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_${detail_name});
-
-        // Show the Up button in the action bar.
-        getActionBar().setDisplayHomeAsUpEnabled(true);
-
-        // savedInstanceState is non-null when there is fragment state
-        // saved from previous configurations of this activity
-        // (e.g. when rotating the screen from portrait to landscape).
-        // In this case, the fragment will automatically be re-added
-        // to its container so we don't need to manually add it.
-        // For more information, see the Fragments API guide at:
-        //
-        // http://developer.android.com/guide/components/fragments.html
-        //
-        if (savedInstanceState == null) {
-            // Create the detail fragment and add it to the activity
-            // using a fragment transaction.
-            Bundle arguments = new Bundle();
-            arguments.putString(${DetailName}Fragment.ARG_ITEM_ID,
-                    getIntent().getStringExtra(${DetailName}Fragment.ARG_ITEM_ID));
-            ${DetailName}Fragment fragment = new ${DetailName}Fragment();
-            fragment.setArguments(arguments);
-            getSupportFragmentManager().beginTransaction()
-                    .add(R.id.${detail_name}_container, fragment)
-                    .commit();
-        }
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home:
-                // This ID represents the Home or Up button. In the case of this
-                // activity, the Up button is shown. Use NavUtils to allow users
-                // to navigate up one level in the application structure. For
-                // more details, see the Navigation pattern on Android Design:
-                //
-                // http://developer.android.com/design/patterns/navigation.html#up-vs-back
-                //
-                NavUtils.navigateUpTo(this, new Intent(this, ${CollectionName}Activity.class));
-                return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-}
diff --git a/templates/activities/MasterDetailFlow/root/src/app_package/ContentDetailFragment.java.ftl b/templates/activities/MasterDetailFlow/root/src/app_package/ContentDetailFragment.java.ftl
deleted file mode 100644
index 2cecaec..0000000
--- a/templates/activities/MasterDetailFlow/root/src/app_package/ContentDetailFragment.java.ftl
+++ /dev/null
@@ -1,61 +0,0 @@
-package ${packageName};
-
-import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import ${packageName}.dummy.DummyContent;
-
-/**
- * A fragment representing a single ${objectKind} detail screen.
- * This fragment is either contained in a {@link ${CollectionName}Activity}
- * in two-pane mode (on tablets) or a {@link ${DetailName}Activity}
- * on handsets.
- */
-public class ${DetailName}Fragment extends Fragment {
-    /**
-     * The fragment argument representing the item ID that this fragment
-     * represents.
-     */
-    public static final String ARG_ITEM_ID = "item_id";
-
-    /**
-     * The dummy content this fragment is presenting.
-     */
-    private DummyContent.DummyItem mItem;
-
-    /**
-     * Mandatory empty constructor for the fragment manager to instantiate the
-     * fragment (e.g. upon screen orientation changes).
-     */
-    public ${DetailName}Fragment() {
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        if (getArguments().containsKey(ARG_ITEM_ID)) {
-            // Load the dummy content specified by the fragment
-            // arguments. In a real-world scenario, use a Loader
-            // to load content from a content provider.
-            mItem = DummyContent.ITEM_MAP.get(getArguments().getString(ARG_ITEM_ID));
-        }
-    }
-
-    @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-            Bundle savedInstanceState) {
-        View rootView = inflater.inflate(R.layout.fragment_${detail_name}, container, false);
-
-        // Show the dummy content as text in a TextView.
-        if (mItem != null) {
-            ((TextView) rootView.findViewById(R.id.${detail_name})).setText(mItem.content);
-        }
-
-        return rootView;
-    }
-}
diff --git a/templates/activities/MasterDetailFlow/root/src/app_package/ContentListActivity.java.ftl b/templates/activities/MasterDetailFlow/root/src/app_package/ContentListActivity.java.ftl
deleted file mode 100644
index ae73f7d..0000000
--- a/templates/activities/MasterDetailFlow/root/src/app_package/ContentListActivity.java.ftl
+++ /dev/null
@@ -1,105 +0,0 @@
-package ${packageName};
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.support.v4.app.FragmentActivity;
-<#if parentActivityClass != "">import android.support.v4.app.NavUtils;
-import android.view.MenuItem;</#if>
-
-/**
- * An activity representing a list of ${objectKindPlural}. This activity
- * has different presentations for handset and tablet-size devices. On
- * handsets, the activity presents a list of items, which when touched,
- * lead to a {@link ${DetailName}Activity} representing
- * item details. On tablets, the activity presents the list of items and
- * item details side-by-side using two vertical panes.
- * <p>
- * The activity makes heavy use of fragments. The list of items is a
- * {@link ${CollectionName}Fragment} and the item details
- * (if present) is a {@link ${DetailName}Fragment}.
- * <p>
- * This activity also implements the required
- * {@link ${CollectionName}Fragment.Callbacks} interface
- * to listen for item selections.
- */
-public class ${CollectionName}Activity extends FragmentActivity
-        implements ${CollectionName}Fragment.Callbacks {
-
-    /**
-     * Whether or not the activity is in two-pane mode, i.e. running on a tablet
-     * device.
-     */
-    private boolean mTwoPane;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_${collection_name});
-        <#if parentActivityClass != "">
-        // Show the Up button in the action bar.
-        getActionBar().setDisplayHomeAsUpEnabled(true);
-        </#if>
-
-        if (findViewById(R.id.${detail_name}_container) != null) {
-            // The detail container view will be present only in the
-            // large-screen layouts (res/values-large and
-            // res/values-sw600dp). If this view is present, then the
-            // activity should be in two-pane mode.
-            mTwoPane = true;
-
-            // In two-pane mode, list items should be given the
-            // 'activated' state when touched.
-            ((${CollectionName}Fragment) getSupportFragmentManager()
-                    .findFragmentById(R.id.${collection_name}))
-                    .setActivateOnItemClick(true);
-        }
-
-        // TODO: If exposing deep links into your app, handle intents here.
-    }
-    <#if parentActivityClass != "">
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home:
-                // This ID represents the Home or Up button. In the case of this
-                // activity, the Up button is shown. Use NavUtils to allow users
-                // to navigate up one level in the application structure. For
-                // more details, see the Navigation pattern on Android Design:
-                //
-                // http://developer.android.com/design/patterns/navigation.html#up-vs-back
-                //
-                NavUtils.navigateUpFromSameTask(this);
-                return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-    </#if>
-
-    /**
-     * Callback method from {@link ${CollectionName}Fragment.Callbacks}
-     * indicating that the item with the given ID was selected.
-     */
-    @Override
-    public void onItemSelected(String id) {
-        if (mTwoPane) {
-            // In two-pane mode, show the detail view in this activity by
-            // adding or replacing the detail fragment using a
-            // fragment transaction.
-            Bundle arguments = new Bundle();
-            arguments.putString(${DetailName}Fragment.ARG_ITEM_ID, id);
-            ${DetailName}Fragment fragment = new ${DetailName}Fragment();
-            fragment.setArguments(arguments);
-            getSupportFragmentManager().beginTransaction()
-                    .replace(R.id.${detail_name}_container, fragment)
-                    .commit();
-
-        } else {
-            // In single-pane mode, simply start the detail activity
-            // for the selected item ID.
-            Intent detailIntent = new Intent(this, ${DetailName}Activity.class);
-            detailIntent.putExtra(${DetailName}Fragment.ARG_ITEM_ID, id);
-            startActivity(detailIntent);
-        }
-    }
-}
diff --git a/templates/activities/MasterDetailFlow/root/src/app_package/ContentListFragment.java.ftl b/templates/activities/MasterDetailFlow/root/src/app_package/ContentListFragment.java.ftl
deleted file mode 100644
index e9a2e74..0000000
--- a/templates/activities/MasterDetailFlow/root/src/app_package/ContentListFragment.java.ftl
+++ /dev/null
@@ -1,151 +0,0 @@
-package ${packageName};
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.support.v4.app.ListFragment;
-import android.view.View;
-import android.widget.ArrayAdapter;
-import android.widget.ListView;
-
-import ${packageName}.dummy.DummyContent;
-
-/**
- * A list fragment representing a list of ${objectKindPlural}. This fragment
- * also supports tablet devices by allowing list items to be given an
- * 'activated' state upon selection. This helps indicate which item is
- * currently being viewed in a {@link ${DetailName}Fragment}.
- * <p>
- * Activities containing this fragment MUST implement the {@link Callbacks}
- * interface.
- */
-public class ${CollectionName}Fragment extends ListFragment {
-
-    /**
-     * The serialization (saved instance state) Bundle key representing the
-     * activated item position. Only used on tablets.
-     */
-    private static final String STATE_ACTIVATED_POSITION = "activated_position";
-
-    /**
-     * The fragment's current callback object, which is notified of list item
-     * clicks.
-     */
-    private Callbacks mCallbacks = sDummyCallbacks;
-
-    /**
-     * The current activated item position. Only used on tablets.
-     */
-    private int mActivatedPosition = ListView.INVALID_POSITION;
-
-    /**
-     * A callback interface that all activities containing this fragment must
-     * implement. This mechanism allows activities to be notified of item
-     * selections.
-     */
-    public interface Callbacks {
-        /**
-         * Callback for when an item has been selected.
-         */
-        public void onItemSelected(String id);
-    }
-
-    /**
-     * A dummy implementation of the {@link Callbacks} interface that does
-     * nothing. Used only when this fragment is not attached to an activity.
-     */
-    private static Callbacks sDummyCallbacks = new Callbacks() {
-        @Override
-        public void onItemSelected(String id) {
-        }
-    };
-
-    /**
-     * Mandatory empty constructor for the fragment manager to instantiate the
-     * fragment (e.g. upon screen orientation changes).
-     */
-    public ${CollectionName}Fragment() {
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        // TODO: replace with a real list adapter.
-        setListAdapter(new ArrayAdapter<DummyContent.DummyItem>(
-                getActivity(),
-                android.R.layout.simple_list_item_activated_1,
-                android.R.id.text1,
-                DummyContent.ITEMS));
-    }
-
-    @Override
-    public void onViewCreated(View view, Bundle savedInstanceState) {
-        super.onViewCreated(view, savedInstanceState);
-
-        // Restore the previously serialized activated item position.
-        if (savedInstanceState != null
-                && savedInstanceState.containsKey(STATE_ACTIVATED_POSITION)) {
-            setActivatedPosition(savedInstanceState.getInt(STATE_ACTIVATED_POSITION));
-        }
-    }
-
-    @Override
-    public void onAttach(Activity activity) {
-        super.onAttach(activity);
-
-        // Activities containing this fragment must implement its callbacks.
-        if (!(activity instanceof Callbacks)) {
-            throw new IllegalStateException("Activity must implement fragment's callbacks.");
-        }
-
-        mCallbacks = (Callbacks) activity;
-    }
-
-    @Override
-    public void onDetach() {
-        super.onDetach();
-
-        // Reset the active callbacks interface to the dummy implementation.
-        mCallbacks = sDummyCallbacks;
-    }
-
-    @Override
-    public void onListItemClick(ListView listView, View view, int position, long id) {
-        super.onListItemClick(listView, view, position, id);
-
-        // Notify the active callbacks interface (the activity, if the
-        // fragment is attached to one) that an item has been selected.
-        mCallbacks.onItemSelected(DummyContent.ITEMS.get(position).id);
-    }
-
-    @Override
-    public void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        if (mActivatedPosition != ListView.INVALID_POSITION) {
-            // Serialize and persist the activated item position.
-            outState.putInt(STATE_ACTIVATED_POSITION, mActivatedPosition);
-        }
-    }
-
-    /**
-     * Turns on activate-on-click mode. When this mode is on, list items will be
-     * given the 'activated' state when touched.
-     */
-    public void setActivateOnItemClick(boolean activateOnItemClick) {
-        // When setting CHOICE_MODE_SINGLE, ListView will automatically
-        // give items the 'activated' state when touched.
-        getListView().setChoiceMode(activateOnItemClick
-                ? ListView.CHOICE_MODE_SINGLE
-                : ListView.CHOICE_MODE_NONE);
-    }
-
-    private void setActivatedPosition(int position) {
-        if (position == ListView.INVALID_POSITION) {
-            getListView().setItemChecked(mActivatedPosition, false);
-        } else {
-            getListView().setItemChecked(position, true);
-        }
-
-        mActivatedPosition = position;
-    }
-}
diff --git a/templates/activities/MasterDetailFlow/root/src/app_package/dummy/DummyContent.java.ftl b/templates/activities/MasterDetailFlow/root/src/app_package/dummy/DummyContent.java.ftl
deleted file mode 100644
index 3545ba3..0000000
--- a/templates/activities/MasterDetailFlow/root/src/app_package/dummy/DummyContent.java.ftl
+++ /dev/null
@@ -1,55 +0,0 @@
-package ${packageName}.dummy;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Helper class for providing sample content for user interfaces created by
- * Android template wizards.
- * <p>
- * TODO: Replace all uses of this class before publishing your app.
- */
-public class DummyContent {
-
-    /**
-     * An array of sample (dummy) items.
-     */
-    public static List<DummyItem> ITEMS = new ArrayList<DummyItem>();
-
-    /**
-     * A map of sample (dummy) items, by ID.
-     */
-    public static Map<String, DummyItem> ITEM_MAP = new HashMap<String, DummyItem>();
-
-    static {
-        // Add 3 sample items.
-        addItem(new DummyItem("1", "Item 1"));
-        addItem(new DummyItem("2", "Item 2"));
-        addItem(new DummyItem("3", "Item 3"));
-    }
-
-    private static void addItem(DummyItem item) {
-        ITEMS.add(item);
-        ITEM_MAP.put(item.id, item);
-    }
-
-    /**
-     * A dummy item representing a piece of content.
-     */
-    public static class DummyItem {
-        public String id;
-        public String content;
-
-        public DummyItem(String id, String content) {
-            this.id = id;
-            this.content = content;
-        }
-
-        @Override
-        public String toString() {
-            return content;
-        }
-    }
-}
diff --git a/templates/activities/MasterDetailFlow/template.xml b/templates/activities/MasterDetailFlow/template.xml
deleted file mode 100644
index 47de074..0000000
--- a/templates/activities/MasterDetailFlow/template.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0"?>
-<template
-    format="3"
-    revision="3"
-    name="Master/Detail Flow"
-    minApi="11"
-    description="Creates a new master/detail flow, allowing users to view a collection of objects as well as details for each object. This flow is presented using two columns on tablet-size screens and one column on handsets and smaller screens. This template creates two activities, a master fragment, and a detail fragment.">
-    <dependency name="android-support-v4" revision="8" />
-
-    <thumbs>
-        <thumb>template_master_detail.png</thumb>
-    </thumbs>
-
-    <category value="Flows" />
-
-    <parameter
-        id="objectKind"
-        name="Object Kind"
-        type="string"
-        constraints="nonempty"
-        default="Item"
-        help="Other examples are 'Person', 'Book', etc." />
-
-    <parameter
-        id="objectKindPlural"
-        name="Object Kind Plural"
-        type="string"
-        constraints="nonempty"
-        default="Items"
-        help="Other examples are 'People', 'Books', etc." />
-
-    <parameter
-        id="activityTitle"
-        name="Title"
-        type="string"
-        constraints="nonempty"
-        suggest="${objectKindPlural}"
-        default="Items" />
-
-    <parameter
-        id="isLauncher"
-        name="Launcher Activity"
-        type="boolean"
-        default="false"
-        help="If true, the primary activity in the flow will have a CATEGORY_LAUNCHER intent filter, making it visible in the launcher" />
-
-    <parameter
-        id="parentActivityClass"
-        name="Hierarchical Parent"
-        type="string"
-        constraints="activity|exists|empty"
-        default=""
-        help="The hierarchical parent activity, used to provide a default implementation for the 'Up' button" />
-
-    <parameter
-        id="packageName"
-        name="Package name"
-        type="string"
-        constraints="package"
-        default="com.mycompany.myapp" />
-
-    <globals file="globals.xml.ftl" />
-    <execute file="recipe.xml.ftl" />
-
-</template>
diff --git a/templates/activities/MasterDetailFlow/template_master_detail.png b/templates/activities/MasterDetailFlow/template_master_detail.png
deleted file mode 100644
index f9d3f23..0000000
--- a/templates/activities/MasterDetailFlow/template_master_detail.png
+++ /dev/null
Binary files differ
diff --git a/templates/activities/SettingsActivity/globals.xml.ftl b/templates/activities/SettingsActivity/globals.xml.ftl
deleted file mode 100644
index 6d73e17..0000000
--- a/templates/activities/SettingsActivity/globals.xml.ftl
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<globals>
-    <global id="projectOut" value="." />
-    <global id="manifestOut" value="." />
-    <global id="srcOut" value="src/${slashedPackageName(packageName)}" />
-    <global id="resOut" value="res" />
-    <global id="simpleName" value="${activityToLayout(activityClass)}" />
-</globals>
diff --git a/templates/activities/SettingsActivity/recipe.xml.ftl b/templates/activities/SettingsActivity/recipe.xml.ftl
deleted file mode 100644
index b6d46ce..0000000
--- a/templates/activities/SettingsActivity/recipe.xml.ftl
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<recipe>
-    <merge from="AndroidManifest.xml.ftl"
-             to="${escapeXmlAttribute(manifestOut)}/AndroidManifest.xml" />
-
-    <copy from="res/xml/pref_data_sync.xml"
-            to="${escapeXmlAttribute(resOut)}/xml/pref_data_sync.xml" />
-    <copy from="res/xml/pref_general.xml"
-            to="${escapeXmlAttribute(resOut)}/xml/pref_general.xml" />
-    <merge from="res/xml/pref_headers.xml.ftl"
-             to="${escapeXmlAttribute(resOut)}/xml/pref_headers.xml" />
-    <copy from="res/xml/pref_notification.xml"
-            to="${escapeXmlAttribute(resOut)}/xml/pref_notification.xml" />
-
-    <instantiate from="res/values/strings.xml.ftl"
-                   to="${escapeXmlAttribute(resOut)}/values/strings_${simpleName}.xml" />
-
-    <instantiate from="src/app_package/SettingsActivity.java.ftl"
-                   to="${escapeXmlAttribute(srcOut)}/${activityClass}.java" />
-
-    <open file="${escapeXmlAttribute(srcOut)}/${activityClass}.java" />
-</recipe>
diff --git a/templates/activities/SettingsActivity/root/AndroidManifest.xml.ftl b/templates/activities/SettingsActivity/root/AndroidManifest.xml.ftl
deleted file mode 100644
index 9f78fcf..0000000
--- a/templates/activities/SettingsActivity/root/AndroidManifest.xml.ftl
+++ /dev/null
@@ -1,18 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" >
-
-    <application>
-        <activity android:name=".${activityClass}"
-            <#if isNewProject>
-            android:label="@string/app_name"
-            <#else>
-            android:label="@string/title_${simpleName}"
-            </#if>
-            <#if buildApi gte 16 && parentActivityClass != "">android:parentActivityName="${parentActivityClass}"</#if>>
-            <#if parentActivityClass != "">
-            <meta-data android:name="android.support.PARENT_ACTIVITY"
-                android:value="${parentActivityClass}" />
-            </#if>
-        </activity>
-    </application>
-
-</manifest>
diff --git a/templates/activities/SettingsActivity/root/res/values/strings.xml.ftl b/templates/activities/SettingsActivity/root/res/values/strings.xml.ftl
deleted file mode 100644
index 8dc52ac..0000000
--- a/templates/activities/SettingsActivity/root/res/values/strings.xml.ftl
+++ /dev/null
@@ -1,61 +0,0 @@
-<resources>
-    <#if !isNewProject>
-    <string name="title_${simpleName}">${escapeXmlString(activityTitle)}</string>
-    </#if>
-
-    <!-- Strings related to Settings -->
-
-    <!-- Example General settings -->
-    <string name="pref_header_general">General</string>
-
-    <string name="pref_title_social_recommendations">Enable social recommendations</string>
-    <string name="pref_description_social_recommendations">Recommendations for people to contact based on your message history</string>
-
-    <string name="pref_title_display_name">Display name</string>
-    <string name="pref_default_display_name">John Smith</string>
-
-    <string name="pref_title_add_friends_to_messages">Add friends to messages</string>
-    <string-array name="pref_example_list_titles">
-        <item>Always</item>
-        <item>When possible</item>
-        <item>Never</item>
-    </string-array>
-    <string-array name="pref_example_list_values">
-        <item>1</item>
-        <item>0</item>
-        <item>-1</item>
-    </string-array>
-
-    <!-- Example settings for Data & Sync -->
-    <string name="pref_header_data_sync">Data &amp; sync</string>
-
-    <string name="pref_title_sync_frequency">Sync frequency</string>
-    <string-array name="pref_sync_frequency_titles">
-        <item>15 minutes</item>
-        <item>30 minutes</item>
-        <item>1 hour</item>
-        <item>3 hours</item>
-        <item>6 hours</item>
-        <item>Never</item>
-    </string-array>
-    <string-array name="pref_sync_frequency_values">
-        <item>15</item>
-        <item>30</item>
-        <item>60</item>
-        <item>180</item>
-        <item>360</item>
-        <item>-1</item>
-    </string-array>
-
-    <string name="pref_title_system_sync_settings">System sync settings</string>
-
-    <!-- Example settings for Notifications -->
-    <string name="pref_header_notifications">Notifications</string>
-
-    <string name="pref_title_new_message_notifications">New message notifications</string>
-
-    <string name="pref_title_ringtone">Ringtone</string>
-    <string name="pref_ringtone_silent">Silent</string>
-
-    <string name="pref_title_vibrate">Vibrate</string>
-</resources>
diff --git a/templates/activities/SettingsActivity/root/res/xml/pref_data_sync.xml b/templates/activities/SettingsActivity/root/res/xml/pref_data_sync.xml
deleted file mode 100644
index ffda831..0000000
--- a/templates/activities/SettingsActivity/root/res/xml/pref_data_sync.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <!-- NOTE: Hide buttons to simplify the UI. Users can touch outside the dialog to
-         dismiss it. -->
-    <!-- NOTE: ListPreference's summary should be set to its value by the activity code. -->
-    <ListPreference
-        android:key="sync_frequency"
-        android:title="@string/pref_title_sync_frequency"
-        android:entries="@array/pref_sync_frequency_titles"
-        android:entryValues="@array/pref_sync_frequency_values"
-        android:defaultValue="180"
-        android:negativeButtonText="@null"
-        android:positiveButtonText="@null" />
-
-    <!-- This preference simply launches an intent when selected. Use this UI sparingly, per
-         design guidelines. -->
-    <Preference android:title="@string/pref_title_system_sync_settings">
-        <intent android:action="android.settings.SYNC_SETTINGS" />
-    </Preference>
-
-</PreferenceScreen>
diff --git a/templates/activities/SettingsActivity/root/res/xml/pref_general.xml b/templates/activities/SettingsActivity/root/res/xml/pref_general.xml
deleted file mode 100644
index c49cbed..0000000
--- a/templates/activities/SettingsActivity/root/res/xml/pref_general.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <CheckBoxPreference
-        android:key="example_checkbox"
-        android:title="@string/pref_title_social_recommendations"
-        android:summary="@string/pref_description_social_recommendations"
-        android:defaultValue="true" />
-
-    <!-- NOTE: EditTextPreference accepts EditText attributes. -->
-    <!-- NOTE: EditTextPreference's summary should be set to its value by the activity code. -->
-    <EditTextPreference
-        android:key="example_text"
-        android:title="@string/pref_title_display_name"
-        android:defaultValue="@string/pref_default_display_name"
-        android:selectAllOnFocus="true"
-        android:inputType="textCapWords"
-        android:capitalize="words"
-        android:singleLine="true"
-        android:maxLines="1" />
-
-    <!-- NOTE: Hide buttons to simplify the UI. Users can touch outside the dialog to
-         dismiss it. -->
-    <!-- NOTE: ListPreference's summary should be set to its value by the activity code. -->
-    <ListPreference
-        android:key="example_list"
-        android:title="@string/pref_title_add_friends_to_messages"
-        android:defaultValue="-1"
-        android:entries="@array/pref_example_list_titles"
-        android:entryValues="@array/pref_example_list_values"
-        android:negativeButtonText="@null"
-        android:positiveButtonText="@null" />
-
-</PreferenceScreen>
diff --git a/templates/activities/SettingsActivity/root/res/xml/pref_headers.xml.ftl b/templates/activities/SettingsActivity/root/res/xml/pref_headers.xml.ftl
deleted file mode 100644
index a3da325..0000000
--- a/templates/activities/SettingsActivity/root/res/xml/pref_headers.xml.ftl
+++ /dev/null
@@ -1,17 +0,0 @@
-<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <!-- These settings headers are only used on tablets. -->
-
-    <header
-        android:fragment="${packageName}.${activityClass}$GeneralPreferenceFragment"
-        android:title="@string/pref_header_general" />
-
-    <header
-        android:fragment="${packageName}.${activityClass}$NotificationPreferenceFragment"
-        android:title="@string/pref_header_notifications" />
-
-    <header
-        android:fragment="${packageName}.${activityClass}$DataSyncPreferenceFragment"
-        android:title="@string/pref_header_data_sync" />
-
-</preference-headers>
diff --git a/templates/activities/SettingsActivity/root/res/xml/pref_notification.xml b/templates/activities/SettingsActivity/root/res/xml/pref_notification.xml
deleted file mode 100644
index b4b8cae..0000000
--- a/templates/activities/SettingsActivity/root/res/xml/pref_notification.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <!-- A 'parent' preference, which enables/disables child preferences (below)
-         when checked/unchecked. -->
-    <CheckBoxPreference
-        android:key="notifications_new_message"
-        android:title="@string/pref_title_new_message_notifications"
-        android:defaultValue="true" />
-
-    <!-- Allows the user to choose a ringtone in the 'notification' category. -->
-    <!-- NOTE: This preference will be enabled only when the checkbox above is checked. -->
-    <!-- NOTE: RingtonePreference's summary should be set to its value by the activity code. -->
-    <RingtonePreference
-        android:dependency="notifications_new_message"
-        android:key="notifications_new_message_ringtone"
-        android:title="@string/pref_title_ringtone"
-        android:ringtoneType="notification"
-        android:defaultValue="content://settings/system/notification_sound" />
-
-    <!-- NOTE: This preference will be enabled only when the checkbox above is checked. -->
-    <CheckBoxPreference
-        android:dependency="notifications_new_message"
-        android:key="notifications_new_message_vibrate"
-        android:title="@string/pref_title_vibrate"
-        android:defaultValue="true" />
-
-</PreferenceScreen>
diff --git a/templates/activities/SettingsActivity/root/src/app_package/SettingsActivity.java.ftl b/templates/activities/SettingsActivity/root/src/app_package/SettingsActivity.java.ftl
deleted file mode 100644
index bf67aca..0000000
--- a/templates/activities/SettingsActivity/root/src/app_package/SettingsActivity.java.ftl
+++ /dev/null
@@ -1,295 +0,0 @@
-package ${packageName};
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.media.Ringtone;
-import android.media.RingtoneManager;
-import android.net.Uri;
-import android.os.Build;
-import android.os.Bundle;
-import android.preference.ListPreference;
-import android.preference.Preference;
-import android.preference.PreferenceActivity;
-import android.preference.PreferenceCategory;
-import android.preference.PreferenceFragment;
-import android.preference.PreferenceManager;
-import android.preference.RingtonePreference;
-import android.text.TextUtils;
-<#if parentActivityClass != "">
-import android.view.MenuItem;
-import android.support.v4.app.NavUtils;
-</#if>
-
-import java.util.List;
-
-/**
- * A {@link PreferenceActivity} that presents a set of application settings. On
- * handset devices, settings are presented as a single list. On tablets,
- * settings are split by category, with category headers shown to the left of
- * the list of settings.
- * <p>
- * See <a href="http://developer.android.com/design/patterns/settings.html">
- * Android Design: Settings</a> for design guidelines and the <a
- * href="http://developer.android.com/guide/topics/ui/settings.html">Settings
- * API Guide</a> for more information on developing a Settings UI.
- */
-public class ${activityClass} extends PreferenceActivity {
-    /**
-     * Determines whether to always show the simplified settings UI, where
-     * settings are presented in a single list. When false, settings are shown
-     * as a master/detail two-pane view on tablets. When true, a single pane is
-     * shown on tablets.
-     */
-    private static final boolean ALWAYS_SIMPLE_PREFS = false;
-
-    <#if parentActivityClass != "">
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setupActionBar();
-    }
-
-    /**
-     * Set up the {@link android.app.ActionBar}, if the API is available.
-     */
-    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
-    private void setupActionBar() {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
-            // Show the Up button in the action bar.
-            getActionBar().setDisplayHomeAsUpEnabled(true);
-        }
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home:
-                // This ID represents the Home or Up button. In the case of this
-                // activity, the Up button is shown. Use NavUtils to allow users
-                // to navigate up one level in the application structure. For
-                // more details, see the Navigation pattern on Android Design:
-                //
-                // http://developer.android.com/design/patterns/navigation.html#up-vs-back
-                //
-                // TODO: If Settings has multiple levels, Up should navigate up
-                // that hierarchy.
-                NavUtils.navigateUpFromSameTask(this);
-                return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-    </#if>
-
-    @Override
-    protected void onPostCreate(Bundle savedInstanceState) {
-        super.onPostCreate(savedInstanceState);
-
-        setupSimplePreferencesScreen();
-    }
-
-    /**
-     * Shows the simplified settings UI if the device configuration if the
-     * device configuration dictates that a simplified, single-pane UI should be
-     * shown.
-     */
-    private void setupSimplePreferencesScreen() {
-        if (!isSimplePreferences(this)) {
-            return;
-        }
-
-        // In the simplified UI, fragments are not used at all and we instead
-        // use the older PreferenceActivity APIs.
-
-        // Add 'general' preferences.
-        addPreferencesFromResource(R.xml.pref_general);
-
-        // Add 'notifications' preferences, and a corresponding header.
-        PreferenceCategory fakeHeader = new PreferenceCategory(this);
-        fakeHeader.setTitle(R.string.pref_header_notifications);
-        getPreferenceScreen().addPreference(fakeHeader);
-        addPreferencesFromResource(R.xml.pref_notification);
-
-        // Add 'data and sync' preferences, and a corresponding header.
-        fakeHeader = new PreferenceCategory(this);
-        fakeHeader.setTitle(R.string.pref_header_data_sync);
-        getPreferenceScreen().addPreference(fakeHeader);
-        addPreferencesFromResource(R.xml.pref_data_sync);
-
-        // Bind the summaries of EditText/List/Dialog/Ringtone preferences to
-        // their values. When their values change, their summaries are updated
-        // to reflect the new value, per the Android Design guidelines.
-        bindPreferenceSummaryToValue(findPreference("example_text"));
-        bindPreferenceSummaryToValue(findPreference("example_list"));
-        bindPreferenceSummaryToValue(findPreference("notifications_new_message_ringtone"));
-        bindPreferenceSummaryToValue(findPreference("sync_frequency"));
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public boolean onIsMultiPane() {
-        return isXLargeTablet(this) && !isSimplePreferences(this);
-    }
-
-    /**
-     * Helper method to determine if the device has an extra-large screen. For
-     * example, 10" tablets are extra-large.
-     */
-    private static boolean isXLargeTablet(Context context) {
-        return (context.getResources().getConfiguration().screenLayout
-        & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE;
-    }
-
-    /**
-     * Determines whether the simplified settings UI should be shown. This is
-     * true if this is forced via {@link #ALWAYS_SIMPLE_PREFS}, or the device
-     * doesn't have newer APIs like {@link PreferenceFragment}, or the device
-     * doesn't have an extra-large screen. In these cases, a single-pane
-     * "simplified" settings UI should be shown.
-     */
-    private static boolean isSimplePreferences(Context context) {
-        return ALWAYS_SIMPLE_PREFS
-                || Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB
-                || !isXLargeTablet(context);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
-    public void onBuildHeaders(List<Header> target) {
-        if (!isSimplePreferences(this)) {
-            loadHeadersFromResource(R.xml.pref_headers, target);
-        }
-    }
-
-    /**
-     * A preference value change listener that updates the preference's summary
-     * to reflect its new value.
-     */
-    private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() {
-        @Override
-        public boolean onPreferenceChange(Preference preference, Object value) {
-            String stringValue = value.toString();
-
-            if (preference instanceof ListPreference) {
-                // For list preferences, look up the correct display value in
-                // the preference's 'entries' list.
-                ListPreference listPreference = (ListPreference) preference;
-                int index = listPreference.findIndexOfValue(stringValue);
-
-                // Set the summary to reflect the new value.
-                preference.setSummary(
-                        index >= 0
-                                ? listPreference.getEntries()[index]
-                                : null);
-
-            } else if (preference instanceof RingtonePreference) {
-                // For ringtone preferences, look up the correct display value
-                // using RingtoneManager.
-                if (TextUtils.isEmpty(stringValue)) {
-                    // Empty values correspond to 'silent' (no ringtone).
-                    preference.setSummary(R.string.pref_ringtone_silent);
-
-                } else {
-                    Ringtone ringtone = RingtoneManager.getRingtone(
-                            preference.getContext(), Uri.parse(stringValue));
-
-                    if (ringtone == null) {
-                        // Clear the summary if there was a lookup error.
-                        preference.setSummary(null);
-                    } else {
-                        // Set the summary to reflect the new ringtone display
-                        // name.
-                        String name = ringtone.getTitle(preference.getContext());
-                        preference.setSummary(name);
-                    }
-                }
-
-            } else {
-                // For all other preferences, set the summary to the value's
-                // simple string representation.
-                preference.setSummary(stringValue);
-            }
-            return true;
-        }
-    };
-
-    /**
-     * Binds a preference's summary to its value. More specifically, when the
-     * preference's value is changed, its summary (line of text below the
-     * preference title) is updated to reflect the value. The summary is also
-     * immediately updated upon calling this method. The exact display format is
-     * dependent on the type of preference.
-     *
-     * @see #sBindPreferenceSummaryToValueListener
-     */
-    private static void bindPreferenceSummaryToValue(Preference preference) {
-        // Set the listener to watch for value changes.
-        preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener);
-
-        // Trigger the listener immediately with the preference's
-        // current value.
-        sBindPreferenceSummaryToValueListener.onPreferenceChange(preference,
-                PreferenceManager
-                        .getDefaultSharedPreferences(preference.getContext())
-                        .getString(preference.getKey(), ""));
-    }
-
-    /**
-     * This fragment shows general preferences only. It is used when the
-     * activity is showing a two-pane settings UI.
-     */
-    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
-    public static class GeneralPreferenceFragment extends PreferenceFragment {
-        @Override
-        public void onCreate(Bundle savedInstanceState) {
-            super.onCreate(savedInstanceState);
-            addPreferencesFromResource(R.xml.pref_general);
-
-            // Bind the summaries of EditText/List/Dialog/Ringtone preferences
-            // to their values. When their values change, their summaries are
-            // updated to reflect the new value, per the Android Design
-            // guidelines.
-            bindPreferenceSummaryToValue(findPreference("example_text"));
-            bindPreferenceSummaryToValue(findPreference("example_list"));
-        }
-    }
-
-    /**
-     * This fragment shows notification preferences only. It is used when the
-     * activity is showing a two-pane settings UI.
-     */
-    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
-    public static class NotificationPreferenceFragment extends PreferenceFragment {
-        @Override
-        public void onCreate(Bundle savedInstanceState) {
-            super.onCreate(savedInstanceState);
-            addPreferencesFromResource(R.xml.pref_notification);
-
-            // Bind the summaries of EditText/List/Dialog/Ringtone preferences
-            // to their values. When their values change, their summaries are
-            // updated to reflect the new value, per the Android Design
-            // guidelines.
-            bindPreferenceSummaryToValue(findPreference("notifications_new_message_ringtone"));
-        }
-    }
-
-    /**
-     * This fragment shows data and sync preferences only. It is used when the
-     * activity is showing a two-pane settings UI.
-     */
-    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
-    public static class DataSyncPreferenceFragment extends PreferenceFragment {
-        @Override
-        public void onCreate(Bundle savedInstanceState) {
-            super.onCreate(savedInstanceState);
-            addPreferencesFromResource(R.xml.pref_data_sync);
-
-            // Bind the summaries of EditText/List/Dialog/Ringtone preferences
-            // to their values. When their values change, their summaries are
-            // updated to reflect the new value, per the Android Design
-            // guidelines.
-            bindPreferenceSummaryToValue(findPreference("sync_frequency"));
-        }
-    }
-}
diff --git a/templates/activities/SettingsActivity/template.xml b/templates/activities/SettingsActivity/template.xml
deleted file mode 100644
index 21956d1..0000000
--- a/templates/activities/SettingsActivity/template.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0"?>
-<template
-    format="3"
-    revision="3"
-    name="Settings Activity"
-    description="Creates a new application settings activity that presents alternative layouts on handset and tablet-size screens."
-    minApi="4"
-    minBuildApi="11">
-    <dependency name="android-support-v4" revision="8" />
-
-    <category value="Activities" />
-
-    <parameter
-        id="activityClass"
-        name="Activity Name"
-        type="string"
-        constraints="class|unique|nonempty"
-        default="SettingsActivity"
-        help="The name of the activity class to create" />
-
-    <parameter
-        id="activityTitle"
-        name="Title"
-        type="string"
-        constraints="nonempty"
-        default="Settings"
-        help="The name of the activity." />
-
-    <parameter
-        id="parentActivityClass"
-        name="Hierarchical Parent"
-        type="string"
-        constraints="activity|exists|empty"
-        default=""
-        help="The hierarchical parent activity, used to provide a default implementation for the 'Up' button" />
-
-    <parameter
-        id="packageName"
-        name="Package name"
-        type="string"
-        constraints="package"
-        default="com.mycompany.myapp" />
-
-    <!-- 128x128 thumbnails relative to template.xml -->
-    <thumbs>
-        <!-- default thumbnail is required -->
-        <thumb>template_settings_activity.png</thumb>
-    </thumbs>
-
-    <globals file="globals.xml.ftl" />
-    <execute file="recipe.xml.ftl" />
-
-</template>
diff --git a/templates/activities/SettingsActivity/template_settings_activity.png b/templates/activities/SettingsActivity/template_settings_activity.png
deleted file mode 100644
index c1a65cb..0000000
--- a/templates/activities/SettingsActivity/template_settings_activity.png
+++ /dev/null
Binary files differ
diff --git a/templates/gradle/wrapper/gradle/wrapper/gradle-wrapper.jar b/templates/gradle/wrapper/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 8c0fb64..0000000
--- a/templates/gradle/wrapper/gradle/wrapper/gradle-wrapper.jar
+++ /dev/null
Binary files differ
diff --git a/templates/gradle/wrapper/gradle/wrapper/gradle-wrapper.properties b/templates/gradle/wrapper/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 5c22dec..0000000
--- a/templates/gradle/wrapper/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-1.6-bin.zip
diff --git a/templates/gradle/wrapper/gradlew b/templates/gradle/wrapper/gradlew
deleted file mode 100755
index 91a7e26..0000000
--- a/templates/gradle/wrapper/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/templates/gradle/wrapper/gradlew.bat b/templates/gradle/wrapper/gradlew.bat
deleted file mode 100644
index aec9973..0000000
--- a/templates/gradle/wrapper/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/templates/other/AppWidget/globals.xml.ftl b/templates/other/AppWidget/globals.xml.ftl
deleted file mode 100644
index ac85374..0000000
--- a/templates/other/AppWidget/globals.xml.ftl
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0"?>
-<globals>
-    <global id="srcOut" value="src/${slashedPackageName(packageName)}" />
-    <global id="class_name" value="${camelCaseToUnderscore(className)}" />
-</globals>
diff --git a/templates/other/AppWidget/recipe.xml.ftl b/templates/other/AppWidget/recipe.xml.ftl
deleted file mode 100644
index 876b7b0..0000000
--- a/templates/other/AppWidget/recipe.xml.ftl
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-<recipe>
-
-    <merge from="AndroidManifest.xml.ftl" />
-
-    <copy from="res/drawable-nodpi/example_appwidget_preview.png" />
-    <instantiate from="res/layout/appwidget.xml"
-                   to="res/layout/${class_name}.xml" />
-
-
-    <#if configurable>
-    <instantiate from="res/layout/appwidget_configure.xml"
-                   to="res/layout/${class_name}_configure.xml" />
-    </#if>
-
-    <instantiate from="res/xml/appwidget_info.xml.ftl"
-                   to="res/xml/${class_name}_info.xml" />
-    <merge from="res/values/strings.xml.ftl" />
-    <merge from="res/values-v14/dimens.xml" />
-    <merge from="res/values/dimens.xml" />
-
-    <instantiate from="src/app_package/AppWidget.java.ftl"
-                   to="${srcOut}/${className}.java" />
-
-    <#if configurable>
-    <instantiate from="src/app_package/AppWidgetConfigureActivity.java.ftl"
-                   to="${srcOut}/${className}ConfigureActivity.java" />
-    </#if>
-
-    <open file="${srcOut}/${className}.java" />
-</recipe>
diff --git a/templates/other/AppWidget/root/AndroidManifest.xml.ftl b/templates/other/AppWidget/root/AndroidManifest.xml.ftl
deleted file mode 100644
index 8b96d56..0000000
--- a/templates/other/AppWidget/root/AndroidManifest.xml.ftl
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <application>
-
-        <receiver android:name=".${className}" >
-            <intent-filter>
-                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
-            </intent-filter>
-
-            <meta-data
-                android:name="android.appwidget.provider"
-                android:resource="@xml/${class_name}_info" />
-        </receiver>
-
-    <#if configurable>
-        <activity android:name=".${className}ConfigureActivity" >
-            <intent-filter>
-                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
-            </intent-filter>
-        </activity>
-    </#if>
-    </application>
-
-</manifest>
\ No newline at end of file
diff --git a/templates/other/AppWidget/root/res/drawable-nodpi/example_appwidget_preview.png b/templates/other/AppWidget/root/res/drawable-nodpi/example_appwidget_preview.png
deleted file mode 100644
index 894b069..0000000
--- a/templates/other/AppWidget/root/res/drawable-nodpi/example_appwidget_preview.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/root/res/layout/appwidget.xml b/templates/other/AppWidget/root/res/layout/appwidget.xml
deleted file mode 100644
index 3a00464..0000000
--- a/templates/other/AppWidget/root/res/layout/appwidget.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:padding="@dimen/widget_margin"
-    android:background="#09C" >
-
-    <TextView
-        android:id="@+id/appwidget_text"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_centerHorizontal="true"
-        android:layout_centerVertical="true"
-        android:text="@string/appwidget_text"
-        android:textColor="#ffffff"
-        android:textSize="24sp"
-        android:textStyle="bold|italic"
-        android:layout_margin="8dp"
-        android:contentDescription="@string/appwidget_text"
-        android:background="#09C"/>
-
-</RelativeLayout>
\ No newline at end of file
diff --git a/templates/other/AppWidget/root/res/layout/appwidget_configure.xml b/templates/other/AppWidget/root/res/layout/appwidget_configure.xml
deleted file mode 100644
index 8ddc335..0000000
--- a/templates/other/AppWidget/root/res/layout/appwidget_configure.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:orientation="vertical"
-    android:padding="16dp">
-
-    <TextView
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/configure"
-        android:layout_marginBottom="8dp" />
-
-    <EditText
-        android:id="@+id/appwidget_text"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:inputType="text" />
-
-    <Button
-        android:id="@+id/add_button"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/add_widget"
-        android:layout_marginTop="8dp" />
-
-</LinearLayout>
\ No newline at end of file
diff --git a/templates/other/AppWidget/root/res/values-v14/dimens.xml b/templates/other/AppWidget/root/res/values-v14/dimens.xml
deleted file mode 100644
index 4db8c59..0000000
--- a/templates/other/AppWidget/root/res/values-v14/dimens.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
-    <!--
-Refer to App Widget Documentation for margin information
-http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout
-    -->
-    <dimen name="widget_margin">0dp</dimen>
-
-</resources>
\ No newline at end of file
diff --git a/templates/other/AppWidget/root/res/values/dimens.xml b/templates/other/AppWidget/root/res/values/dimens.xml
deleted file mode 100644
index fdececf..0000000
--- a/templates/other/AppWidget/root/res/values/dimens.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
-    <!--
-Refer to App Widget Documentation for margin information
-http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout
-    -->
-    <dimen name="widget_margin">8dp</dimen>
-
-</resources>
\ No newline at end of file
diff --git a/templates/other/AppWidget/root/res/values/strings.xml.ftl b/templates/other/AppWidget/root/res/values/strings.xml.ftl
deleted file mode 100644
index 66c06bc..0000000
--- a/templates/other/AppWidget/root/res/values/strings.xml.ftl
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="appwidget_text">EXAMPLE</string>
-    <#if configurable>
-    <string name="configure">Configure</string>
-    </#if>
-    <string name="add_widget">Add widget</string>
-</resources>
\ No newline at end of file
diff --git a/templates/other/AppWidget/root/res/xml/appwidget_info.xml.ftl b/templates/other/AppWidget/root/res/xml/appwidget_info.xml.ftl
deleted file mode 100644
index 75791be..0000000
--- a/templates/other/AppWidget/root/res/xml/appwidget_info.xml.ftl
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
-    android:minWidth="${-30 + 70 * minWidth?number}dp"
-    android:minHeight="${-30 + 70 * minHeight?number}dp"
-    android:updatePeriodMillis="86400000"
-    android:previewImage="@drawable/example_appwidget_preview"
-    android:initialLayout="@layout/${class_name}"
-<#if configurable>
-    android:configure="${packageName}.${className}ConfigureActivity"
-</#if>
-<#if resizable='both'>
-    android:resizeMode="horizontal|vertical"
-<#elseif resizable='horizontal'>
-    android:resizeMode="horizontal"
-<#elseif resizable='vertical'>
-    android:resizeMode="vertical"
-<#elseif resizable='none'>
-</#if>
-<#if placement='both'>
-    android:widgetCategory="home_screen|keyguard"
-<#elseif placement='homescreen'>
-    android:widgetCategory="home_screen"
-<#elseif placement='keyguard'>
-    android:widgetCategory="keyguard"
-</#if>
-    android:initialKeyguardLayout="@layout/${class_name}">
-</appwidget-provider>
\ No newline at end of file
diff --git a/templates/other/AppWidget/root/src/app_package/AppWidget.java.ftl b/templates/other/AppWidget/root/src/app_package/AppWidget.java.ftl
deleted file mode 100644
index d86b0b5..0000000
--- a/templates/other/AppWidget/root/src/app_package/AppWidget.java.ftl
+++ /dev/null
@@ -1,63 +0,0 @@
-package ${packageName};
-
-import android.appwidget.AppWidgetManager;
-import android.appwidget.AppWidgetProvider;
-import android.content.Context;
-import android.widget.RemoteViews;
-
-/**
- * Implementation of App Widget functionality.
-<#if configurable>
- * App Widget Configuration implemented in {@link ${className}ConfigureActivity ${className}ConfigureActivity}
-</#if>
- */
-public class ${className} extends AppWidgetProvider {
-
-    @Override
-    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
-        // There may be multiple widgets active, so update all of them
-        final int N = appWidgetIds.length;
-        for (int i=0; i<N; i++) {
-            updateAppWidget(context, appWidgetManager, appWidgetIds[i]);
-        }
-    }
-
-<#if configurable>
-    @Override
-    public void onDeleted(Context context, int[] appWidgetIds) {
-        // When the user deletes the widget, delete the preference associated with it.
-        final int N = appWidgetIds.length;
-        for (int i=0; i<N; i++) {
-            ${className}ConfigureActivity.deleteTitlePref(context, appWidgetIds[i]);
-        }
-    }
-</#if>
-
-    @Override
-    public void onEnabled(Context context) {
-        // Enter relevant functionality for when the first widget is created
-    }
-
-    @Override
-    public void onDisabled(Context context) {
-        // Enter relevant functionality for when the last widget is disabled
-    }
-
-    static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
-            int appWidgetId) {
-
-<#if configurable>
-        CharSequence widgetText = ${className}ConfigureActivity.loadTitlePref(context, appWidgetId);
-<#else>
-        CharSequence widgetText = context.getString(R.string.appwidget_text);
-</#if>
-        // Construct the RemoteViews object
-        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.${class_name});
-        views.setTextViewText(R.id.appwidget_text, widgetText);
-
-        // Instruct the widget manager to update the widget
-        appWidgetManager.updateAppWidget(appWidgetId, views);
-    }
-}
-
-
diff --git a/templates/other/AppWidget/root/src/app_package/AppWidgetConfigureActivity.java.ftl b/templates/other/AppWidget/root/src/app_package/AppWidgetConfigureActivity.java.ftl
deleted file mode 100644
index 3c2be67..0000000
--- a/templates/other/AppWidget/root/src/app_package/AppWidgetConfigureActivity.java.ftl
+++ /dev/null
@@ -1,102 +0,0 @@
-package ${packageName};
-
-import android.app.Activity;
-import android.appwidget.AppWidgetManager;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.os.Bundle;
-import android.view.View;
-import android.widget.EditText;
-
-/**
- * The configuration screen for the {@link ${className} ${className}} AppWidget.
- */
-public class ${className}ConfigureActivity extends Activity {
-
-    int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
-    EditText mAppWidgetText;
-    private static final String PREFS_NAME = "${packageName}.${className}";
-    private static final String PREF_PREFIX_KEY = "appwidget_";
-
-    public ${className}ConfigureActivity() {
-        super();
-    }
-
-    @Override
-    public void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-
-        // Set the result to CANCELED.  This will cause the widget host to cancel
-        // out of the widget placement if the user presses the back button.
-        setResult(RESULT_CANCELED);
-
-        setContentView(R.layout.${class_name}_configure);
-        mAppWidgetText = (EditText)findViewById(R.id.appwidget_text);
-        findViewById(R.id.add_button).setOnClickListener(mOnClickListener);
-
-        // Find the widget id from the intent.
-        Intent intent = getIntent();
-        Bundle extras = intent.getExtras();
-        if (extras != null) {
-            mAppWidgetId = extras.getInt(
-                    AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
-        }
-
-        // If this activity was started with an intent without an app widget ID, finish with an error.
-        if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
-            finish();
-            return;
-        }
-
-        mAppWidgetText.setText(loadTitlePref(${className}ConfigureActivity.this, mAppWidgetId));
-    }
-
-    View.OnClickListener mOnClickListener = new View.OnClickListener() {
-        public void onClick(View v) {
-            final Context context = ${className}ConfigureActivity.this;
-
-            // When the button is clicked, store the string locally
-            String widgetText = mAppWidgetText.getText().toString();
-            saveTitlePref(context,mAppWidgetId,widgetText);
-
-            // It is the responsibility of the configuration activity to update the app widget
-            AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
-            ${className}.updateAppWidget(context, appWidgetManager, mAppWidgetId);
-
-            // Make sure we pass back the original appWidgetId
-            Intent resultValue = new Intent();
-            resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
-            setResult(RESULT_OK, resultValue);
-            finish();
-        }
-    };
-
-    // Write the prefix to the SharedPreferences object for this widget
-    static void saveTitlePref(Context context, int appWidgetId, String text) {
-        SharedPreferences.Editor prefs = context.getSharedPreferences(PREFS_NAME, 0).edit();
-        prefs.putString(PREF_PREFIX_KEY + appWidgetId, text);
-        prefs.commit();
-    }
-
-    // Read the prefix from the SharedPreferences object for this widget.
-    // If there is no preference saved, get the default from a resource
-    static String loadTitlePref(Context context, int appWidgetId) {
-        SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, 0);
-        String titleValue = prefs.getString(PREF_PREFIX_KEY + appWidgetId, null);
-        if (titleValue != null) {
-            return titleValue;
-        } else {
-            return context.getString(R.string.appwidget_text);
-        }
-    }
-
-    static void deleteTitlePref(Context context, int appWidgetId) {
-        SharedPreferences.Editor prefs = context.getSharedPreferences(PREFS_NAME, 0).edit();
-        prefs.remove(PREF_PREFIX_KEY + appWidgetId);
-        prefs.commit();
-    }
-}
-
-
-
diff --git a/templates/other/AppWidget/template.xml b/templates/other/AppWidget/template.xml
deleted file mode 100644
index f071363..0000000
--- a/templates/other/AppWidget/template.xml
+++ /dev/null
@@ -1,148 +0,0 @@
-<?xml version="1.0"?>
-<template
-    format="3"
-    revision="1"
-    name="New App Widget"
-    description="Creates a new App Widget"
-    minApi="4"
-    minBuildApi="16">
-
-    <category value="Other" />
-
-    <parameter
-        id="className"
-        name="Class Name"
-        type="string"
-        constraints="class|unique|nonempty"
-        default="NewAppWidget"
-        help="The name of the App Widget to create" />
-
-        <parameter
-            id="placement"
-            name="Placement"
-            type="enum"
-            default="homescreen"
-            help="Make the widget available on the Home-screen and/or on the Keyguard. Keyguard placement is only supported in Android 4.2 and above; this setting is ignored on earlier versions and defaults to Home-screen.">
-            <option id="both">Home-screen and Keyguard</option>
-            <option id="homescreen" default="true" >Home-screen only</option>
-            <option id="keyguard" >Keyguard only (API 17+)</option>
-        </parameter>
-
-        <parameter
-            id="resizable"
-            name="Resizable (API 12+)"
-            type="enum"
-            default="both"
-            help="Allow the user to resize the widget. Feature only available on Android 3.1 and above.">
-            <option id="both" default="true">Horizontally and vertically</option>
-            <option id="horizontal">Only horizontally</option>
-            <option id="vertical" >Only vertically</option>
-            <option id="none">Not resizable</option>
-        </parameter>
-
-    <parameter
-        id="minWidth"
-        name="Minimum Width (cells)"
-        type="enum"
-        default="1">
-        <option id="1" default="true">1</option>
-        <option id="2" >2</option>
-        <option id="3" >3</option>
-        <option id="4" >4</option>
-    </parameter>
-
-    <parameter
-        id="minHeight"
-        name="Minimum Height (cells)"
-        type="enum"
-        default="1">
-        <option id="1" default="true">1</option>
-        <option id="2" >2</option>
-        <option id="3" >3</option>
-        <option id="4" >4</option>
-    </parameter>
-
-    <parameter
-        id="configurable"
-        name="Configuration Screen"
-        type="boolean"
-        default="false"
-        help="Generates a widget configuration activity" />
-
-    <globals file="globals.xml.ftl" />
-    <execute file="recipe.xml.ftl" />
-
-
-    <thumbs>
-        <thumb>thumbs/template_widget_3x3_vh.png</thumb>
-
-        <thumb minWidth="1" minHeight="1" resizable="none"      >thumbs/template_widget_1x1.png</thumb>
-        <thumb minWidth="2" minHeight="1" resizable="none"      >thumbs/template_widget_2x1.png</thumb>
-        <thumb minWidth="3" minHeight="1" resizable="none"      >thumbs/template_widget_3x1.png</thumb>
-        <thumb minWidth="4" minHeight="1" resizable="none"      >thumbs/template_widget_4x1.png</thumb>
-        <thumb minWidth="1" minHeight="2" resizable="none"      >thumbs/template_widget_1x2.png</thumb>
-        <thumb minWidth="2" minHeight="2" resizable="none"      >thumbs/template_widget_2x2.png</thumb>
-        <thumb minWidth="3" minHeight="2" resizable="none"      >thumbs/template_widget_3x2.png</thumb>
-        <thumb minWidth="4" minHeight="2" resizable="none"      >thumbs/template_widget_4x2.png</thumb>
-        <thumb minWidth="1" minHeight="3" resizable="none"      >thumbs/template_widget_1x3.png</thumb>
-        <thumb minWidth="2" minHeight="3" resizable="none"      >thumbs/template_widget_2x3.png</thumb>
-        <thumb minWidth="3" minHeight="3" resizable="none"      >thumbs/template_widget_3x3.png</thumb>
-        <thumb minWidth="4" minHeight="3" resizable="none"      >thumbs/template_widget_4x3.png</thumb>
-        <thumb minWidth="1" minHeight="4" resizable="none"      >thumbs/template_widget_1x4.png</thumb>
-        <thumb minWidth="2" minHeight="4" resizable="none"      >thumbs/template_widget_2x4.png</thumb>
-        <thumb minWidth="3" minHeight="4" resizable="none"      >thumbs/template_widget_3x4.png</thumb>
-        <thumb minWidth="4" minHeight="4" resizable="none"      >thumbs/template_widget_4x4.png</thumb>
-
-        <thumb minWidth="1" minHeight="1" resizable="horizontal">thumbs/template_widget_1x1_h.png</thumb>
-        <thumb minWidth="2" minHeight="1" resizable="horizontal">thumbs/template_widget_2x1_h.png</thumb>
-        <thumb minWidth="3" minHeight="1" resizable="horizontal">thumbs/template_widget_3x1_h.png</thumb>
-        <thumb minWidth="4" minHeight="1" resizable="horizontal">thumbs/template_widget_4x1_h.png</thumb>
-        <thumb minWidth="1" minHeight="2" resizable="horizontal">thumbs/template_widget_1x2_h.png</thumb>
-        <thumb minWidth="2" minHeight="2" resizable="horizontal">thumbs/template_widget_2x2_h.png</thumb>
-        <thumb minWidth="3" minHeight="2" resizable="horizontal">thumbs/template_widget_3x2_h.png</thumb>
-        <thumb minWidth="4" minHeight="2" resizable="horizontal">thumbs/template_widget_4x2_h.png</thumb>
-        <thumb minWidth="1" minHeight="3" resizable="horizontal">thumbs/template_widget_1x3_h.png</thumb>
-        <thumb minWidth="2" minHeight="3" resizable="horizontal">thumbs/template_widget_2x3_h.png</thumb>
-        <thumb minWidth="3" minHeight="3" resizable="horizontal">thumbs/template_widget_3x3_h.png</thumb>
-        <thumb minWidth="4" minHeight="3" resizable="horizontal">thumbs/template_widget_4x3_h.png</thumb>
-        <thumb minWidth="1" minHeight="4" resizable="horizontal">thumbs/template_widget_1x4_h.png</thumb>
-        <thumb minWidth="2" minHeight="4" resizable="horizontal">thumbs/template_widget_2x4_h.png</thumb>
-        <thumb minWidth="3" minHeight="4" resizable="horizontal">thumbs/template_widget_3x4_h.png</thumb>
-        <thumb minWidth="4" minHeight="4" resizable="horizontal">thumbs/template_widget_4x4_h.png</thumb>
-
-        <thumb minWidth="1" minHeight="1" resizable="vertical"  >thumbs/template_widget_1x1_v.png</thumb>
-        <thumb minWidth="2" minHeight="1" resizable="vertical"  >thumbs/template_widget_2x1_v.png</thumb>
-        <thumb minWidth="3" minHeight="1" resizable="vertical"  >thumbs/template_widget_3x1_v.png</thumb>
-        <thumb minWidth="4" minHeight="1" resizable="vertical"  >thumbs/template_widget_4x1_v.png</thumb>
-        <thumb minWidth="1" minHeight="2" resizable="vertical"  >thumbs/template_widget_1x2_v.png</thumb>
-        <thumb minWidth="2" minHeight="2" resizable="vertical"  >thumbs/template_widget_2x2_v.png</thumb>
-        <thumb minWidth="3" minHeight="2" resizable="vertical"  >thumbs/template_widget_3x2_v.png</thumb>
-        <thumb minWidth="4" minHeight="2" resizable="vertical"  >thumbs/template_widget_4x2_v.png</thumb>
-        <thumb minWidth="1" minHeight="3" resizable="vertical"  >thumbs/template_widget_1x3_v.png</thumb>
-        <thumb minWidth="2" minHeight="3" resizable="vertical"  >thumbs/template_widget_2x3_v.png</thumb>
-        <thumb minWidth="3" minHeight="3" resizable="vertical"  >thumbs/template_widget_3x3_v.png</thumb>
-        <thumb minWidth="4" minHeight="3" resizable="vertical"  >thumbs/template_widget_4x3_v.png</thumb>
-        <thumb minWidth="1" minHeight="4" resizable="vertical"  >thumbs/template_widget_1x4_v.png</thumb>
-        <thumb minWidth="2" minHeight="4" resizable="vertical"  >thumbs/template_widget_2x4_v.png</thumb>
-        <thumb minWidth="3" minHeight="4" resizable="vertical"  >thumbs/template_widget_3x4_v.png</thumb>
-        <thumb minWidth="4" minHeight="4" resizable="vertical"  >thumbs/template_widget_4x4_v.png</thumb>
-
-        <thumb minWidth="1" minHeight="1" resizable="both"      >thumbs/template_widget_1x1_vh.png</thumb>
-        <thumb minWidth="2" minHeight="1" resizable="both"      >thumbs/template_widget_2x1_vh.png</thumb>
-        <thumb minWidth="3" minHeight="1" resizable="both"      >thumbs/template_widget_3x1_vh.png</thumb>
-        <thumb minWidth="4" minHeight="1" resizable="both"      >thumbs/template_widget_4x1_vh.png</thumb>
-        <thumb minWidth="1" minHeight="2" resizable="both"      >thumbs/template_widget_1x2_vh.png</thumb>
-        <thumb minWidth="2" minHeight="2" resizable="both"      >thumbs/template_widget_2x2_vh.png</thumb>
-        <thumb minWidth="3" minHeight="2" resizable="both"      >thumbs/template_widget_3x2_vh.png</thumb>
-        <thumb minWidth="4" minHeight="2" resizable="both"      >thumbs/template_widget_4x2_vh.png</thumb>
-        <thumb minWidth="1" minHeight="3" resizable="both"      >thumbs/template_widget_1x3_vh.png</thumb>
-        <thumb minWidth="2" minHeight="3" resizable="both"      >thumbs/template_widget_2x3_vh.png</thumb>
-        <thumb minWidth="3" minHeight="3" resizable="both"      >thumbs/template_widget_3x3_vh.png</thumb>
-        <thumb minWidth="4" minHeight="3" resizable="both"      >thumbs/template_widget_4x3_vh.png</thumb>
-        <thumb minWidth="1" minHeight="4" resizable="both"      >thumbs/template_widget_1x4_vh.png</thumb>
-        <thumb minWidth="2" minHeight="4" resizable="both"      >thumbs/template_widget_2x4_vh.png</thumb>
-        <thumb minWidth="3" minHeight="4" resizable="both"      >thumbs/template_widget_3x4_vh.png</thumb>
-        <thumb minWidth="4" minHeight="4" resizable="both"      >thumbs/template_widget_4x4_vh.png</thumb>
-    </thumbs>
-
-</template>
diff --git a/templates/other/AppWidget/thumbs/template_widget_1x1.png b/templates/other/AppWidget/thumbs/template_widget_1x1.png
deleted file mode 100644
index 8b34a24..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_1x1.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_1x1_h.png b/templates/other/AppWidget/thumbs/template_widget_1x1_h.png
deleted file mode 100644
index 38ce687..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_1x1_h.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_1x1_v.png b/templates/other/AppWidget/thumbs/template_widget_1x1_v.png
deleted file mode 100644
index 0aedac7..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_1x1_v.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_1x1_vh.png b/templates/other/AppWidget/thumbs/template_widget_1x1_vh.png
deleted file mode 100644
index 301ee0f..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_1x1_vh.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_1x2.png b/templates/other/AppWidget/thumbs/template_widget_1x2.png
deleted file mode 100644
index 0e4181d..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_1x2.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_1x2_h.png b/templates/other/AppWidget/thumbs/template_widget_1x2_h.png
deleted file mode 100644
index 37f3b94..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_1x2_h.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_1x2_v.png b/templates/other/AppWidget/thumbs/template_widget_1x2_v.png
deleted file mode 100644
index 2d13903..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_1x2_v.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_1x2_vh.png b/templates/other/AppWidget/thumbs/template_widget_1x2_vh.png
deleted file mode 100644
index 431f929..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_1x2_vh.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_1x3.png b/templates/other/AppWidget/thumbs/template_widget_1x3.png
deleted file mode 100644
index b0fb55a..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_1x3.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_1x3_h.png b/templates/other/AppWidget/thumbs/template_widget_1x3_h.png
deleted file mode 100644
index 14fdc46..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_1x3_h.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_1x3_v.png b/templates/other/AppWidget/thumbs/template_widget_1x3_v.png
deleted file mode 100644
index 136b8de..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_1x3_v.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_1x3_vh.png b/templates/other/AppWidget/thumbs/template_widget_1x3_vh.png
deleted file mode 100644
index 5e18856..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_1x3_vh.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_1x4.png b/templates/other/AppWidget/thumbs/template_widget_1x4.png
deleted file mode 100644
index 2922d34..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_1x4.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_1x4_h.png b/templates/other/AppWidget/thumbs/template_widget_1x4_h.png
deleted file mode 100644
index 462c802..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_1x4_h.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_1x4_v.png b/templates/other/AppWidget/thumbs/template_widget_1x4_v.png
deleted file mode 100644
index f239e73..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_1x4_v.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_1x4_vh.png b/templates/other/AppWidget/thumbs/template_widget_1x4_vh.png
deleted file mode 100644
index b05e168..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_1x4_vh.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_2x1.png b/templates/other/AppWidget/thumbs/template_widget_2x1.png
deleted file mode 100644
index 9e14ef8..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_2x1.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_2x1_h.png b/templates/other/AppWidget/thumbs/template_widget_2x1_h.png
deleted file mode 100644
index 3a8019e..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_2x1_h.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_2x1_v.png b/templates/other/AppWidget/thumbs/template_widget_2x1_v.png
deleted file mode 100644
index d09ff28..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_2x1_v.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_2x1_vh.png b/templates/other/AppWidget/thumbs/template_widget_2x1_vh.png
deleted file mode 100644
index b6093e1..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_2x1_vh.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_2x2.png b/templates/other/AppWidget/thumbs/template_widget_2x2.png
deleted file mode 100644
index 2894704..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_2x2.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_2x2_h.png b/templates/other/AppWidget/thumbs/template_widget_2x2_h.png
deleted file mode 100644
index a2ab77c..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_2x2_h.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_2x2_v.png b/templates/other/AppWidget/thumbs/template_widget_2x2_v.png
deleted file mode 100644
index c09f1f7..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_2x2_v.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_2x2_vh.png b/templates/other/AppWidget/thumbs/template_widget_2x2_vh.png
deleted file mode 100644
index 21becb2..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_2x2_vh.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_2x3.png b/templates/other/AppWidget/thumbs/template_widget_2x3.png
deleted file mode 100644
index 3226127..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_2x3.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_2x3_h.png b/templates/other/AppWidget/thumbs/template_widget_2x3_h.png
deleted file mode 100644
index db2037a..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_2x3_h.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_2x3_v.png b/templates/other/AppWidget/thumbs/template_widget_2x3_v.png
deleted file mode 100644
index af21176..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_2x3_v.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_2x3_vh.png b/templates/other/AppWidget/thumbs/template_widget_2x3_vh.png
deleted file mode 100644
index e0edfb4..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_2x3_vh.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_2x4.png b/templates/other/AppWidget/thumbs/template_widget_2x4.png
deleted file mode 100644
index dfcda22..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_2x4.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_2x4_h.png b/templates/other/AppWidget/thumbs/template_widget_2x4_h.png
deleted file mode 100644
index dc21139..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_2x4_h.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_2x4_v.png b/templates/other/AppWidget/thumbs/template_widget_2x4_v.png
deleted file mode 100644
index 6bfc884..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_2x4_v.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_2x4_vh.png b/templates/other/AppWidget/thumbs/template_widget_2x4_vh.png
deleted file mode 100644
index 922aeee..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_2x4_vh.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_3x1.png b/templates/other/AppWidget/thumbs/template_widget_3x1.png
deleted file mode 100644
index bb394b9..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_3x1.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_3x1_h.png b/templates/other/AppWidget/thumbs/template_widget_3x1_h.png
deleted file mode 100644
index 47b19c3..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_3x1_h.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_3x1_v.png b/templates/other/AppWidget/thumbs/template_widget_3x1_v.png
deleted file mode 100644
index 5575850..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_3x1_v.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_3x1_vh.png b/templates/other/AppWidget/thumbs/template_widget_3x1_vh.png
deleted file mode 100644
index c4a5f3f..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_3x1_vh.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_3x2.png b/templates/other/AppWidget/thumbs/template_widget_3x2.png
deleted file mode 100644
index 200fba4..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_3x2.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_3x2_h.png b/templates/other/AppWidget/thumbs/template_widget_3x2_h.png
deleted file mode 100644
index b027430..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_3x2_h.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_3x2_v.png b/templates/other/AppWidget/thumbs/template_widget_3x2_v.png
deleted file mode 100644
index b350ae8..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_3x2_v.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_3x2_vh.png b/templates/other/AppWidget/thumbs/template_widget_3x2_vh.png
deleted file mode 100644
index 129b706..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_3x2_vh.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_3x3.png b/templates/other/AppWidget/thumbs/template_widget_3x3.png
deleted file mode 100644
index 30dfb4b..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_3x3.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_3x3_h.png b/templates/other/AppWidget/thumbs/template_widget_3x3_h.png
deleted file mode 100644
index 9b062e9..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_3x3_h.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_3x3_v.png b/templates/other/AppWidget/thumbs/template_widget_3x3_v.png
deleted file mode 100644
index af8b494..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_3x3_v.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_3x3_vh.png b/templates/other/AppWidget/thumbs/template_widget_3x3_vh.png
deleted file mode 100644
index bc92413..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_3x3_vh.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_3x4.png b/templates/other/AppWidget/thumbs/template_widget_3x4.png
deleted file mode 100644
index 1759b62..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_3x4.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_3x4_h.png b/templates/other/AppWidget/thumbs/template_widget_3x4_h.png
deleted file mode 100644
index e09fa7e..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_3x4_h.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_3x4_v.png b/templates/other/AppWidget/thumbs/template_widget_3x4_v.png
deleted file mode 100644
index e6451fe..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_3x4_v.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_3x4_vh.png b/templates/other/AppWidget/thumbs/template_widget_3x4_vh.png
deleted file mode 100644
index 376611f..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_3x4_vh.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_4x1.png b/templates/other/AppWidget/thumbs/template_widget_4x1.png
deleted file mode 100644
index 75031c8..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_4x1.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_4x1_h.png b/templates/other/AppWidget/thumbs/template_widget_4x1_h.png
deleted file mode 100644
index 7a4b81f..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_4x1_h.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_4x1_v.png b/templates/other/AppWidget/thumbs/template_widget_4x1_v.png
deleted file mode 100644
index 2c8c604..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_4x1_v.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_4x1_vh.png b/templates/other/AppWidget/thumbs/template_widget_4x1_vh.png
deleted file mode 100644
index 0b43cd7..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_4x1_vh.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_4x2.png b/templates/other/AppWidget/thumbs/template_widget_4x2.png
deleted file mode 100644
index 8328141..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_4x2.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_4x2_h.png b/templates/other/AppWidget/thumbs/template_widget_4x2_h.png
deleted file mode 100644
index d83062c..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_4x2_h.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_4x2_v.png b/templates/other/AppWidget/thumbs/template_widget_4x2_v.png
deleted file mode 100644
index 561f47a..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_4x2_v.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_4x2_vh.png b/templates/other/AppWidget/thumbs/template_widget_4x2_vh.png
deleted file mode 100644
index 132ccd1..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_4x2_vh.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_4x3.png b/templates/other/AppWidget/thumbs/template_widget_4x3.png
deleted file mode 100644
index c3ea452..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_4x3.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_4x3_h.png b/templates/other/AppWidget/thumbs/template_widget_4x3_h.png
deleted file mode 100644
index 57d84ce..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_4x3_h.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_4x3_v.png b/templates/other/AppWidget/thumbs/template_widget_4x3_v.png
deleted file mode 100644
index e8d93fc..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_4x3_v.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_4x3_vh.png b/templates/other/AppWidget/thumbs/template_widget_4x3_vh.png
deleted file mode 100644
index 71dfbb3..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_4x3_vh.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_4x4.png b/templates/other/AppWidget/thumbs/template_widget_4x4.png
deleted file mode 100644
index 340244f..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_4x4.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_4x4_h.png b/templates/other/AppWidget/thumbs/template_widget_4x4_h.png
deleted file mode 100644
index f20c14e..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_4x4_h.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_4x4_v.png b/templates/other/AppWidget/thumbs/template_widget_4x4_v.png
deleted file mode 100644
index d490c79..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_4x4_v.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/AppWidget/thumbs/template_widget_4x4_vh.png b/templates/other/AppWidget/thumbs/template_widget_4x4_vh.png
deleted file mode 100644
index 52e1b4d..0000000
--- a/templates/other/AppWidget/thumbs/template_widget_4x4_vh.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/BlankFragment/globals.xml.ftl b/templates/other/BlankFragment/globals.xml.ftl
deleted file mode 100644
index bfc27eb..0000000
--- a/templates/other/BlankFragment/globals.xml.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0"?>
-<globals>
-    <global id="srcOut" value="src/${slashedPackageName(packageName)}" />
-</globals>
diff --git a/templates/other/BlankFragment/recipe.xml.ftl b/templates/other/BlankFragment/recipe.xml.ftl
deleted file mode 100644
index add6d27..0000000
--- a/templates/other/BlankFragment/recipe.xml.ftl
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<recipe>
-
-    <merge from="res/values/strings.xml" />
-
-    <#if includeLayout>
-        <instantiate from="res/layout/fragment_blank.xml.ftl"
-                       to="res/layout/fragment_${classToResource(className)}.xml" />
-
-        <open file="res/layout/fragment_${classToResource(className)}.xml" />
-    </#if>
-
-    <open file="${srcOut}/${className}.java" />
-
-    <instantiate from="src/app_package/BlankFragment.java.ftl"
-                   to="${srcOut}/${className}.java" />
-
-</recipe>
diff --git a/templates/other/BlankFragment/root/res/layout/fragment_blank.xml.ftl b/templates/other/BlankFragment/root/res/layout/fragment_blank.xml.ftl
deleted file mode 100644
index 3e04f05..0000000
--- a/templates/other/BlankFragment/root/res/layout/fragment_blank.xml.ftl
+++ /dev/null
@@ -1,13 +0,0 @@
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    tools:context=".${className}">
-
-    <!-- TODO: Update blank fragment layout -->
-    <TextView
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:text="@string/hello_blank_fragment" />
-
-</FrameLayout>
diff --git a/templates/other/BlankFragment/root/res/values/strings.xml b/templates/other/BlankFragment/root/res/values/strings.xml
deleted file mode 100644
index c8d8b1a..0000000
--- a/templates/other/BlankFragment/root/res/values/strings.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<resources>
-
-<!-- TODO: Remove or change this placeholder text -->
-    <string name="hello_blank_fragment">Hello blank fragment</string>
-
-</resources>
diff --git a/templates/other/BlankFragment/root/src/app_package/BlankFragment.java.ftl b/templates/other/BlankFragment/root/src/app_package/BlankFragment.java.ftl
deleted file mode 100644
index 6b3fb1e..0000000
--- a/templates/other/BlankFragment/root/src/app_package/BlankFragment.java.ftl
+++ /dev/null
@@ -1,129 +0,0 @@
-package ${packageName};
-
-<#if includeCallbacks>import android.app.Activity;</#if>
-<#if includeCallbacks>import android.net.Uri;</#if>
-import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-<#if !includeLayout>import android.widget.TextView;</#if>
-
-/**
- * A simple {@link android.support.v4.app.Fragment} subclass.
-<#if includeCallbacks>
- * Activities that contain this fragment must implement the
- * {@link ${className}.OnFragmentInteractionListener} interface
- * to handle interaction events.
-</#if>
-<#if includeFactory>
- * Use the {@link ${className}#newInstance} factory method to
- * create an instance of this fragment.
-</#if>
- *
- */
-public class ${className} extends Fragment {
-<#if includeFactory>
-    // TODO: Rename parameter arguments, choose names that match
-    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
-    private static final String ARG_PARAM1 = "param1";
-    private static final String ARG_PARAM2 = "param2";
-
-    // TODO: Rename and change types of parameters
-    private String mParam1;
-    private String mParam2;
-</#if>
-
-<#if includeCallbacks>
-    private OnFragmentInteractionListener mListener;
-</#if>
-
-<#if includeFactory>
-    /**
-     * Use this factory method to create a new instance of
-     * this fragment using the provided parameters.
-     *
-     * @param param1 Parameter 1.
-     * @param param2 Parameter 2.
-     * @return A new instance of fragment ${className}.
-     */
-    // TODO: Rename and change types and number of parameters
-    public static ${className} newInstance(String param1, String param2) {
-        ${className} fragment = new ${className}();
-        Bundle args = new Bundle();
-        args.putString(ARG_PARAM1, param1);
-        args.putString(ARG_PARAM2, param2);
-        fragment.setArguments(args);
-        return fragment;
-    }
-</#if>
-    public ${className}() {
-        // Required empty public constructor
-    }
-
-<#if includeFactory>
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        if (getArguments() != null) {
-            mParam1 = getArguments().getString(ARG_PARAM1);
-            mParam2 = getArguments().getString(ARG_PARAM2);
-        }
-    }
-</#if>
-
-    @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-                             Bundle savedInstanceState) {
-<#if includeLayout>
-        // Inflate the layout for this fragment
-        return inflater.inflate(R.layout.fragment_${classToResource(className)}, container, false);
-<#else>
-        TextView textView = new TextView(getActivity());
-        textView.setText(R.string.hello_blank_fragment);
-        return textView;
-</#if>
-    }
-
-<#if includeCallbacks>
-    // TODO: Rename method, update argument and hook method into UI event
-    public void onButtonPressed(Uri uri) {
-        if (mListener != null) {
-            mListener.onFragmentInteraction(uri);
-        }
-    }
-
-    @Override
-    public void onAttach(Activity activity) {
-        super.onAttach(activity);
-        try {
-            mListener = (OnFragmentInteractionListener) activity;
-        } catch (ClassCastException e) {
-            throw new ClassCastException(activity.toString()
-                    + " must implement OnFragmentInteractionListener");
-        }
-    }
-
-    @Override
-    public void onDetach() {
-        super.onDetach();
-        mListener = null;
-    }
-
-    /**
-     * This interface must be implemented by activities that contain this
-     * fragment to allow an interaction in this fragment to be communicated
-     * to the activity and potentially other fragments contained in that
-     * activity.
-     * <p>
-     * See the Android Training lesson <a href=
-     * "http://developer.android.com/training/basics/fragments/communicating.html"
-     * >Communicating with Other Fragments</a> for more information.
-     */
-    public interface OnFragmentInteractionListener {
-        // TODO: Update argument type and name
-        public void onFragmentInteraction(Uri uri);
-    }
-</#if>
-
-}
diff --git a/templates/other/BlankFragment/template.xml b/templates/other/BlankFragment/template.xml
deleted file mode 100644
index 9434c18..0000000
--- a/templates/other/BlankFragment/template.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0"?>
-<template
-    format="3"
-    revision="1"
-    name="New Blank Fragment"
-    description="Creates a blank fragment that is compatible back to API level 4."
-    minApi="7"
-    minBuildApi="8">
-
-    <dependency name="android-support-v4" revision="8" />
-
-    <category value="Other" />
-
-    <parameter
-        id="className"
-        name="Fragment Name"
-        type="string"
-        constraints="class|nonempty|unique"
-        default="BlankFragment"
-        help="The name of the fragment class to create" />
-
-    <parameter
-        id="includeLayout"
-        name="Create layout XML?"
-        type="boolean"
-        default="true"
-        help="Generate a layout XML for the fragment" />
-
-    <parameter
-        id="includeFactory"
-        name="Include fragment factory methods?"
-        type="boolean"
-        default="true"
-        help="Generate static fragment factory methods for easy instantiation" />
-
-    <parameter
-        id="includeCallbacks"
-        name="Include interface callbacks?"
-        type="boolean"
-        default="true"
-        help="Generate event callbacks for communication with an Activity or other fragments" />
-
-    <thumbs>
-        <thumb>template_blank_fragment.png</thumb>
-    </thumbs>
-
-    <globals file="globals.xml.ftl" />
-    <execute file="recipe.xml.ftl" />
-
-</template>
diff --git a/templates/other/BlankFragment/template_blank_fragment.png b/templates/other/BlankFragment/template_blank_fragment.png
deleted file mode 100644
index e0e71ce..0000000
--- a/templates/other/BlankFragment/template_blank_fragment.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/BroadcastReceiver/globals.xml.ftl b/templates/other/BroadcastReceiver/globals.xml.ftl
deleted file mode 100644
index bfc27eb..0000000
--- a/templates/other/BroadcastReceiver/globals.xml.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0"?>
-<globals>
-    <global id="srcOut" value="src/${slashedPackageName(packageName)}" />
-</globals>
diff --git a/templates/other/BroadcastReceiver/recipe.xml.ftl b/templates/other/BroadcastReceiver/recipe.xml.ftl
deleted file mode 100644
index a9d2623..0000000
--- a/templates/other/BroadcastReceiver/recipe.xml.ftl
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<recipe>
-    <merge from="AndroidManifest.xml.ftl" />
-    <instantiate from="src/app_package/BroadcastReceiver.java.ftl"
-                   to="${srcOut}/${className}.java" />
-    <open file="${srcOut}/${className}.java" />
-</recipe>
diff --git a/templates/other/BroadcastReceiver/root/AndroidManifest.xml.ftl b/templates/other/BroadcastReceiver/root/AndroidManifest.xml.ftl
deleted file mode 100644
index 27b60b0..0000000
--- a/templates/other/BroadcastReceiver/root/AndroidManifest.xml.ftl
+++ /dev/null
@@ -1,10 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" >
-
-    <application>
-        <receiver android:name=".${className}"
-            android:exported="${isExported?string}"
-            android:enabled="${isEnabled?string}" >
-        </receiver>
-    </application>
-
-</manifest>
diff --git a/templates/other/BroadcastReceiver/root/src/app_package/BroadcastReceiver.java.ftl b/templates/other/BroadcastReceiver/root/src/app_package/BroadcastReceiver.java.ftl
deleted file mode 100644
index 560c132..0000000
--- a/templates/other/BroadcastReceiver/root/src/app_package/BroadcastReceiver.java.ftl
+++ /dev/null
@@ -1,17 +0,0 @@
-package ${packageName};
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-public class ${className} extends BroadcastReceiver {
-    public ${className}() {
-    }
-
-    @Override
-    public void onReceive(Context context, Intent intent) {
-        // TODO: This method is called when the BroadcastReceiver is receiving
-        // an Intent broadcast.
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-}
diff --git a/templates/other/BroadcastReceiver/template.xml b/templates/other/BroadcastReceiver/template.xml
deleted file mode 100644
index b17851e..0000000
--- a/templates/other/BroadcastReceiver/template.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<template
-    format="1"
-    revision="1"
-    name="Broadcast Receiver"
-    description="Creates a new broadcast receiver component and adds it to your Android manifest.">
-
-    <parameter
-        id="className"
-        name="Class Name"
-        type="string"
-        constraints="class|unique|nonempty"
-        default="MyReceiver" />
-
-    <parameter
-        id="isExported"
-        name="Exported"
-        type="boolean"
-        default="true"
-        help="Whether or not the broadcast receiver can receive messages from sources outside its application" />
-
-    <parameter
-        id="isEnabled"
-        name="Enabled"
-        type="boolean"
-        default="true"
-        help="Whether or not the broadcast receiver can be instantiated by the system" />
-
-    <globals file="globals.xml.ftl" />
-    <execute file="recipe.xml.ftl" />
-
-</template>
diff --git a/templates/other/ContentProvider/globals.xml.ftl b/templates/other/ContentProvider/globals.xml.ftl
deleted file mode 100644
index bfc27eb..0000000
--- a/templates/other/ContentProvider/globals.xml.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0"?>
-<globals>
-    <global id="srcOut" value="src/${slashedPackageName(packageName)}" />
-</globals>
diff --git a/templates/other/ContentProvider/recipe.xml.ftl b/templates/other/ContentProvider/recipe.xml.ftl
deleted file mode 100644
index 6cdad82..0000000
--- a/templates/other/ContentProvider/recipe.xml.ftl
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<recipe>
-    <merge from="AndroidManifest.xml.ftl" />
-    <instantiate from="src/app_package/ContentProvider.java.ftl"
-                   to="${srcOut}/${className}.java" />
-    <open file="${srcOut}/${className}.java" />
-</recipe>
diff --git a/templates/other/ContentProvider/root/AndroidManifest.xml.ftl b/templates/other/ContentProvider/root/AndroidManifest.xml.ftl
deleted file mode 100644
index 6fa4afc..0000000
--- a/templates/other/ContentProvider/root/AndroidManifest.xml.ftl
+++ /dev/null
@@ -1,11 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" >
-
-    <application>
-        <provider android:name=".${className}"
-            android:authorities="${authorities}"
-            android:exported="${isExported?string}"
-            android:enabled="${isEnabled?string}" >
-        </provider>
-    </application>
-
-</manifest>
diff --git a/templates/other/ContentProvider/root/src/app_package/ContentProvider.java.ftl b/templates/other/ContentProvider/root/src/app_package/ContentProvider.java.ftl
deleted file mode 100644
index e5b43b5..0000000
--- a/templates/other/ContentProvider/root/src/app_package/ContentProvider.java.ftl
+++ /dev/null
@@ -1,50 +0,0 @@
-package ${packageName};
-
-import android.content.ContentProvider;
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.net.Uri;
-
-public class ${className} extends ContentProvider {
-    public ${className}() {
-    }
-
-    @Override
-    public int delete(Uri uri, String selection, String[] selectionArgs) {
-        // Implement this to handle requests to delete one or more rows.
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    @Override
-    public String getType(Uri uri) {
-        // TODO: Implement this to handle requests for the MIME type of the data
-        // at the given URI.
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    @Override
-    public Uri insert(Uri uri, ContentValues values) {
-        // TODO: Implement this to handle requests to insert a new row.
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    @Override
-    public boolean onCreate() {
-        // TODO: Implement this to initialize your content provider on startup.
-        return false;
-    }
-
-    @Override
-    public Cursor query(Uri uri, String[] projection, String selection,
-            String[] selectionArgs, String sortOrder) {
-        // TODO: Implement this to handle query requests from clients.
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    @Override
-    public int update(Uri uri, ContentValues values, String selection,
-            String[] selectionArgs) {
-        // TODO: Implement this to handle requests to update one or more rows.
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-}
diff --git a/templates/other/ContentProvider/template.xml b/templates/other/ContentProvider/template.xml
deleted file mode 100644
index 21ed1be..0000000
--- a/templates/other/ContentProvider/template.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0"?>
-<template
-    format="1"
-    revision="1"
-    name="Content Provider"
-    description="Creates a new content provider component and adds it to your Android manifest.">
-
-    <parameter
-        id="className"
-        name="Class Name"
-        type="string"
-        constraints="class|unique|nonempty"
-        default="MyContentProvider" />
-
-    <parameter
-        id="authorities"
-        name="URI Authorities"
-        type="string"
-        constraints="nonempty"
-        default=""
-        help="A list of one or more URI authorities that identify data under the purview of the content provider. " />
-
-    <parameter
-        id="isExported"
-        name="Exported"
-        type="boolean"
-        default="true"
-        help="Whether or not the content provider can be used by components of other applications " />
-
-    <parameter
-        id="isEnabled"
-        name="Enabled"
-        type="boolean"
-        default="true"
-        help="Whether or not the content provider can be instantiated by the system " />
-
-    <globals file="globals.xml.ftl" />
-    <execute file="recipe.xml.ftl" />
-
-</template>
diff --git a/templates/other/CustomView/globals.xml.ftl b/templates/other/CustomView/globals.xml.ftl
deleted file mode 100644
index d2eeb40..0000000
--- a/templates/other/CustomView/globals.xml.ftl
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0"?>
-<globals>
-    <global id="srcOut" value="src/${slashedPackageName(packageName)}" />
-    <global id="view_class" value="${camelCaseToUnderscore(viewClass)}" />
-</globals>
diff --git a/templates/other/CustomView/recipe.xml.ftl b/templates/other/CustomView/recipe.xml.ftl
deleted file mode 100644
index d152df0..0000000
--- a/templates/other/CustomView/recipe.xml.ftl
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<recipe>
-    <merge from="res/values/attrs.xml.ftl"
-                   to="res/values/attrs_${view_class}.xml" />
-    <instantiate from="res/layout/sample.xml.ftl"
-                   to="res/layout/sample_${view_class}.xml" />
-
-    <instantiate from="src/app_package/CustomView.java.ftl"
-                   to="${srcOut}/${viewClass}.java" />
-
-    <open file="${srcOut}/${viewClass}.java" />
-    <open file="res/layout/sample_${view_class}.xml" />
-</recipe>
diff --git a/templates/other/CustomView/root/res/layout/sample.xml.ftl b/templates/other/CustomView/root/res/layout/sample.xml.ftl
deleted file mode 100755
index 03125b2..0000000
--- a/templates/other/CustomView/root/res/layout/sample.xml.ftl
+++ /dev/null
@@ -1,22 +0,0 @@
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-<#if !isLibraryProject>
-    xmlns:app="http://schemas.android.com/apk/res/${packageName}"
-<#else>
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-</#if>
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <${packageName}.${viewClass}
-        android:background="#ccc"
-        android:layout_width="300dp"
-        android:layout_height="300dp"
-        android:paddingLeft="20dp"
-        android:paddingBottom="40dp"
-        app:exampleDimension="24sp"
-        app:exampleColor="#33b5e5"
-        app:exampleString="Hello, ${viewClass}"
-        app:exampleDrawable="@android:drawable/ic_menu_add" />
-
-</FrameLayout>
diff --git a/templates/other/CustomView/root/res/values/attrs.xml.ftl b/templates/other/CustomView/root/res/values/attrs.xml.ftl
deleted file mode 100755
index 89059d2..0000000
--- a/templates/other/CustomView/root/res/values/attrs.xml.ftl
+++ /dev/null
@@ -1,8 +0,0 @@
-<resources>
-    <declare-styleable name="${viewClass}">
-        <attr name="exampleString" format="string" />
-        <attr name="exampleDimension" format="dimension" />
-        <attr name="exampleColor" format="color" />
-        <attr name="exampleDrawable" format="color|reference" />
-    </declare-styleable>
-</resources>
diff --git a/templates/other/CustomView/root/src/app_package/CustomView.java.ftl b/templates/other/CustomView/root/src/app_package/CustomView.java.ftl
deleted file mode 100644
index e1c7e13..0000000
--- a/templates/other/CustomView/root/src/app_package/CustomView.java.ftl
+++ /dev/null
@@ -1,181 +0,0 @@
-package ${packageName};
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.drawable.Drawable;
-import android.text.TextPaint;
-import android.util.AttributeSet;
-import android.view.View;
-
-/**
- * TODO: document your custom view class.
- */
-public class ${viewClass} extends View {
-    private String mExampleString; // TODO: use a default from R.string...
-    private int mExampleColor = Color.RED; // TODO: use a default from R.color...
-    private float mExampleDimension = 0; // TODO: use a default from R.dimen...
-    private Drawable mExampleDrawable;
-
-    private TextPaint mTextPaint;
-    private float mTextWidth;
-    private float mTextHeight;
-
-    public ${viewClass}(Context context) {
-        super(context);
-        init(null, 0);
-    }
-
-    public ${viewClass}(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        init(attrs, 0);
-    }
-
-    public ${viewClass}(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        init(attrs, defStyle);
-    }
-
-    private void init(AttributeSet attrs, int defStyle) {
-        // Load attributes
-        final TypedArray a = getContext().obtainStyledAttributes(
-                attrs, R.styleable.${viewClass}, defStyle, 0);
-
-        mExampleString = a.getString(
-                R.styleable.${viewClass}_exampleString);
-        mExampleColor = a.getColor(
-                R.styleable.${viewClass}_exampleColor,
-                mExampleColor);
-        // Use getDimensionPixelSize or getDimensionPixelOffset when dealing with
-        // values that should fall on pixel boundaries.
-        mExampleDimension = a.getDimension(
-                R.styleable.${viewClass}_exampleDimension,
-                mExampleDimension);
-
-        if (a.hasValue(R.styleable.${viewClass}_exampleDrawable)) {
-            mExampleDrawable = a.getDrawable(
-                    R.styleable.${viewClass}_exampleDrawable);
-            mExampleDrawable.setCallback(this);
-        }
-
-        a.recycle();
-
-        // Set up a default TextPaint object
-        mTextPaint = new TextPaint();
-        mTextPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
-        mTextPaint.setTextAlign(Paint.Align.LEFT);
-
-        // Update TextPaint and text measurements from attributes
-        invalidateTextPaintAndMeasurements();
-    }
-
-    private void invalidateTextPaintAndMeasurements() {
-        mTextPaint.setTextSize(mExampleDimension);
-        mTextPaint.setColor(mExampleColor);
-        mTextWidth = mTextPaint.measureText(mExampleString);
-
-        Paint.FontMetrics fontMetrics = mTextPaint.getFontMetrics();
-        mTextHeight = fontMetrics.bottom;
-    }
-
-    @Override
-    protected void onDraw(Canvas canvas) {
-        super.onDraw(canvas);
-
-        // TODO: consider storing these as member variables to reduce
-        // allocations per draw cycle.
-        int paddingLeft = getPaddingLeft();
-        int paddingTop = getPaddingTop();
-        int paddingRight = getPaddingRight();
-        int paddingBottom = getPaddingBottom();
-
-        int contentWidth = getWidth() - paddingLeft - paddingRight;
-        int contentHeight = getHeight() - paddingTop - paddingBottom;
-
-        // Draw the text.
-        canvas.drawText(mExampleString,
-                paddingLeft + (contentWidth - mTextWidth) / 2,
-                paddingTop + (contentHeight + mTextHeight) / 2,
-                mTextPaint);
-
-        // Draw the example drawable on top of the text.
-        if (mExampleDrawable != null) {
-            mExampleDrawable.setBounds(paddingLeft, paddingTop,
-                    paddingLeft + contentWidth, paddingTop + contentHeight);
-            mExampleDrawable.draw(canvas);
-        }
-    }
-
-    /**
-     * Gets the example string attribute value.
-     * @return The example string attribute value.
-     */
-    public String getExampleString() {
-        return mExampleString;
-    }
-
-    /**
-     * Sets the view's example string attribute value. In the example view, this string
-     * is the text to draw.
-     * @param exampleString The example string attribute value to use.
-     */
-    public void setExampleString(String exampleString) {
-        mExampleString = exampleString;
-        invalidateTextPaintAndMeasurements();
-    }
-
-    /**
-     * Gets the example color attribute value.
-     * @return The example color attribute value.
-     */
-    public int getExampleColor() {
-        return mExampleColor;
-    }
-
-    /**
-     * Sets the view's example color attribute value. In the example view, this color
-     * is the font color.
-     * @param exampleColor The example color attribute value to use.
-     */
-    public void setExampleColor(int exampleColor) {
-        mExampleColor = exampleColor;
-        invalidateTextPaintAndMeasurements();
-    }
-
-    /**
-     * Gets the example dimension attribute value.
-     * @return The example dimension attribute value.
-     */
-    public float getExampleDimension() {
-        return mExampleDimension;
-    }
-
-    /**
-     * Sets the view's example dimension attribute value. In the example view, this dimension
-     * is the font size.
-     * @param exampleDimension The example dimension attribute value to use.
-     */
-    public void setExampleDimension(float exampleDimension) {
-        mExampleDimension = exampleDimension;
-        invalidateTextPaintAndMeasurements();
-    }
-
-    /**
-     * Gets the example drawable attribute value.
-     * @return The example drawable attribute value.
-     */
-    public Drawable getExampleDrawable() {
-        return mExampleDrawable;
-    }
-
-    /**
-     * Sets the view's example drawable attribute value. In the example view, this drawable is
-     * drawn above the text.
-     * @param exampleDrawable The example drawable attribute value to use.
-     */
-    public void setExampleDrawable(Drawable exampleDrawable) {
-        mExampleDrawable = exampleDrawable;
-    }
-}
diff --git a/templates/other/CustomView/template.xml b/templates/other/CustomView/template.xml
deleted file mode 100644
index 55f6f3d..0000000
--- a/templates/other/CustomView/template.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<template
-    format="1"
-    revision="1"
-    name="Custom View"
-    description="Creates a new custom view that extends android.view.View and exposes custom attributes.">
-
-    <category value="UI Components" />
-
-    <parameter
-        id="packageName"
-        name="Package name"
-        type="string"
-        constraints="package"
-        default="com.mycompany.myapp" />
-
-    <parameter
-        id="viewClass"
-        name="View Class"
-        type="string"
-        constraints="class|unique|nonempty"
-        default="MyView"
-        help="By convention, should end in 'View'" />
-
-    <globals file="globals.xml.ftl" />
-    <execute file="recipe.xml.ftl" />
-
-</template>
diff --git a/templates/other/Daydream/globals.xml.ftl b/templates/other/Daydream/globals.xml.ftl
deleted file mode 100644
index 04537f9..0000000
--- a/templates/other/Daydream/globals.xml.ftl
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<globals>
-    <global id="srcOut" value="src/${slashedPackageName(packageName)}" />
-    <global id="class_name" value="${classToResource(className)}" />
-    <global id="info_name" value="${classToResource(className)}_info" />
-    <global id="settingsClassName"  value="${className}SettingsActivity" />
-    <global id="prefs_name" value="${classToResource(className)}_prefs" />
-</globals>
diff --git a/templates/other/Daydream/recipe.xml.ftl b/templates/other/Daydream/recipe.xml.ftl
deleted file mode 100644
index 8db9811..0000000
--- a/templates/other/Daydream/recipe.xml.ftl
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<recipe>
-
-    <merge from="AndroidManifest.xml.ftl" />
-    <merge from="res/values/strings.xml.ftl" />
-
-    <copy from="res/layout-v17/dream.xml"
-          to="res/layout-v17/${class_name}.xml" />
-
-    <instantiate from="src/app_package/DreamService.java.ftl"
-                 to="${srcOut}/${className}.java" />
-
-<#if configurable>
-    <copy from="res/xml/dream_prefs.xml"
-          to="res/xml/${prefs_name}.xml" />
-
-    <instantiate from="src/app_package/SettingsActivity.java.ftl"
-                 to="${srcOut}/${settingsClassName}.java" />
-
-    <instantiate from="res/xml/xml_dream.xml.ftl"
-                 to="res/xml/${info_name}.xml" />
-</#if>
-
-    <open file="${srcOut}/${className}.java" />
-
-</recipe>
diff --git a/templates/other/Daydream/root/AndroidManifest.xml.ftl b/templates/other/Daydream/root/AndroidManifest.xml.ftl
deleted file mode 100644
index c23bc6e..0000000
--- a/templates/other/Daydream/root/AndroidManifest.xml.ftl
+++ /dev/null
@@ -1,28 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <application>
-
-<#if configurable>
-        <activity
-            android:name=".${settingsClassName}" />
-</#if>
-
-        <!-- This service is only used on devices with API v17+ -->
-        <service
-            android:name=".${className}"
-            android:exported="true" >
-            <intent-filter>
-                <action android:name="android.service.dreams.DreamService" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-<#if configurable>
-
-            <!-- Point to additional information for this dream -->
-            <meta-data
-                android:name="android.service.dream"
-                android:resource="@xml/${info_name}" />
-</#if>
-        </service>
-    </application>
-
-</manifest>
diff --git a/templates/other/Daydream/root/res/layout-v17/dream.xml b/templates/other/Daydream/root/res/layout-v17/dream.xml
deleted file mode 100644
index 25593f3..0000000
--- a/templates/other/Daydream/root/res/layout-v17/dream.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent" >
-
-    <TextView
-        android:id="@+id/dream_text"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:fontFamily="sans-serif-light"
-        android:textSize="50sp" />
-
-</FrameLayout>
diff --git a/templates/other/Daydream/root/res/values/strings.xml.ftl b/templates/other/Daydream/root/res/values/strings.xml.ftl
deleted file mode 100644
index b3d208f..0000000
--- a/templates/other/Daydream/root/res/values/strings.xml.ftl
+++ /dev/null
@@ -1,7 +0,0 @@
-<resources>
-    <string name="pref_dream_text_key">pref_dream_text</string>
-    <string name="pref_dream_text_default">zzzZZZzzz</string>
-<#if configurable>
-    <string name="pref_dream_text_title">Ticker text</string>
-</#if>
-</resources>
diff --git a/templates/other/Daydream/root/res/xml/dream_prefs.xml b/templates/other/Daydream/root/res/xml/dream_prefs.xml
deleted file mode 100644
index 997e5b2..0000000
--- a/templates/other/Daydream/root/res/xml/dream_prefs.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
-
-    <EditTextPreference
-        android:key="@string/pref_dream_text_key"
-        android:title="@string/pref_dream_text_title"
-        android:defaultValue="@string/pref_dream_text_default" />
-
-</PreferenceScreen>
diff --git a/templates/other/Daydream/root/res/xml/xml_dream.xml.ftl b/templates/other/Daydream/root/res/xml/xml_dream.xml.ftl
deleted file mode 100644
index 5367ae1..0000000
--- a/templates/other/Daydream/root/res/xml/xml_dream.xml.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<dream xmlns:android="http://schemas.android.com/apk/res/android"
-    android:settingsActivity="${packageName}/.${settingsClassName}" />
diff --git a/templates/other/Daydream/root/src/app_package/DreamService.java.ftl b/templates/other/Daydream/root/src/app_package/DreamService.java.ftl
deleted file mode 100644
index 30f080f..0000000
--- a/templates/other/Daydream/root/src/app_package/DreamService.java.ftl
+++ /dev/null
@@ -1,140 +0,0 @@
-package ${packageName};
-
-import java.util.Random;
-
-import android.animation.Animator;
-import android.animation.Animator.AnimatorListener;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.TimeInterpolator;
-import android.annotation.TargetApi;
-import android.content.SharedPreferences;
-import android.graphics.Point;
-import android.os.Build;
-import android.preference.PreferenceManager;
-import android.service.dreams.DreamService;
-import android.view.ViewPropertyAnimator;
-import android.view.animation.LinearInterpolator;
-import android.widget.TextView;
-
-/**
- * This class is a sample implementation of a DreamService. When activated, a
- * TextView will repeatedly, move from the left to the right of screen, at a
- * random y-value.
-<#if configurable>
- * The generated {@link BlahDreamServiceSettingsActivity} allows
- * the user to change the text which is displayed.
-</#if>
- * <p />
- * Daydreams are only available on devices running API v17+.
- */
-@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
-public class ${className} extends DreamService {
-
-    private static final TimeInterpolator sInterpolator = new LinearInterpolator();
-
-    private final AnimatorListener mAnimListener = new AnimatorListenerAdapter() {
-
-        @Override
-        public void onAnimationEnd(Animator animation) {
-            // Start animation again
-            startTextViewScrollAnimation();
-        }
-
-    };
-
-    private final Random mRandom = new Random();
-    private final Point mPointSize = new Point();
-
-    private TextView mDreamTextView;
-    private ViewPropertyAnimator mAnimator;
-
-    @Override
-    public void onAttachedToWindow() {
-        super.onAttachedToWindow();
-
-        // Exit dream upon user touch?
-<#if isInteractive>
-        setInteractive(true);
-<#else>
-        setInteractive(false);
-</#if>
-
-        // Hide system UI?
-<#if isFullscreen>
-        setFullscreen(true);
-<#else>
-        setFullscreen(false);
-</#if>
-
-        // Keep screen at full brightness?
-<#if isScreenBright>
-        setScreenBright(true);
-<#else>
-        setScreenBright(false);
-</#if>
-
-        // Set the content view, just like you would with an Activity.
-        setContentView(R.layout.${class_name});
-
-        mDreamTextView = (TextView) findViewById(R.id.dream_text);
-        mDreamTextView.setText(getTextFromPreferences());
-    }
-
-    @Override
-    public void onDreamingStarted() {
-        super.onDreamingStarted();
-
-        // TODO: Begin animations or other behaviors here.
-
-        startTextViewScrollAnimation();
-    }
-
-    @Override
-    public void onDreamingStopped() {
-        super.onDreamingStopped();
-
-        // TODO: Stop anything that was started in onDreamingStarted()
-
-        mAnimator.cancel();
-    }
-
-    @Override
-    public void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-
-        // TODO: Dismantle resources
-        // (for example, detach from handlers and listeners).
-    }
-
-    private String getTextFromPreferences() {
-        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-        return prefs.getString(getString(R.string.pref_dream_text_key),
-                getString(R.string.pref_dream_text_default));
-    }
-
-    private void startTextViewScrollAnimation() {
-        // Refresh Size of Window
-        getWindowManager().getDefaultDisplay().getSize(mPointSize);
-
-        final int windowWidth = mPointSize.x;
-        final int windowHeight = mPointSize.y;
-
-        // Move TextView so it's moved all the way to the left
-        mDreamTextView.setTranslationX(-mDreamTextView.getWidth());
-
-        // Move TextView to random y value
-        final int yRange = windowHeight - mDreamTextView.getHeight();
-        mDreamTextView.setTranslationY(mRandom.nextInt(yRange));
-
-        // Create an Animator and keep a reference to it
-        mAnimator = mDreamTextView.animate().translationX(windowWidth)
-            .setDuration(3000)
-            .setStartDelay(500)
-            .setListener(mAnimListener)
-            .setInterpolator(sInterpolator);
-
-        // Start the animation
-        mAnimator.start();
-    }
-
-}
diff --git a/templates/other/Daydream/root/src/app_package/SettingsActivity.java.ftl b/templates/other/Daydream/root/src/app_package/SettingsActivity.java.ftl
deleted file mode 100644
index 62d5887..0000000
--- a/templates/other/Daydream/root/src/app_package/SettingsActivity.java.ftl
+++ /dev/null
@@ -1,36 +0,0 @@
-package ${packageName};
-
-import android.annotation.TargetApi;
-import android.os.Build;
-import android.os.Bundle;
-import android.preference.PreferenceActivity;
-import android.preference.PreferenceFragment;
-
-/**
- * A settings Activity for {@link ${className}}.
- * <p />
- * A DreamService can only be used on devices with API v17+, so it is safe
- * for us to use a {@link PreferenceFragment} here.
- */
-@TargetApi(Build.VERSION_CODES.HONEYCOMB)
-public class ${settingsClassName} extends PreferenceActivity {
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        getFragmentManager().beginTransaction()
-                .replace(android.R.id.content, new DreamPreferenceFragment()).commit();
-    }
-
-    public static class DreamPreferenceFragment extends PreferenceFragment {
-
-        @Override
-        public void onCreate(Bundle savedInstanceState) {
-            super.onCreate(savedInstanceState);
-            addPreferencesFromResource(R.xml.${prefs_name});
-        }
-
-    }
-
-}
diff --git a/templates/other/Daydream/template.xml b/templates/other/Daydream/template.xml
deleted file mode 100644
index 2014eee..0000000
--- a/templates/other/Daydream/template.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0"?>
-<template
-    format="3"
-    revision="1"
-    name="New Daydream"
-    description="Creates a new Daydream service component, for use on devices running Android 4.2 and later."
-    minBuildApi="17">
-
-    <category value="Other" />
-
-    <parameter
-        id="className"
-        name="Class Name"
-        type="string"
-        constraints="class|unique|nonempty"
-        default="MyDaydreamService" />
-
-    <parameter
-        id="isInteractive"
-        name="Interactive?"
-        type="boolean"
-        default="false"
-        help="Whether or not the Daydream is interactive. Touching anywhere on a non-interactive Daydreams dismisses it." />
-
-    <parameter
-        id="isFullscreen"
-        name="Fullscreen?"
-        type="boolean"
-        default="true"
-        help="Whether or not the Daydream should be in fullscreen mode (in which case system UI will be hidden)." />
-
-    <parameter
-        id="isScreenBright"
-        name="Bright Screen?"
-        type="boolean"
-        default="true"
-        help="Whether or not the screen should be bright when this Daydream is running. The screen will be dim otherwise." />
-
-    <parameter
-        id="configurable"
-        name="Configuration Activity"
-        type="boolean"
-        default="false"
-        help="Whether or not to generate an associated settings Activity." />
-
-    <globals file="globals.xml.ftl" />
-    <execute file="recipe.xml.ftl" />
-
-</template>
diff --git a/templates/other/IntentService/globals.xml.ftl b/templates/other/IntentService/globals.xml.ftl
deleted file mode 100644
index bfc27eb..0000000
--- a/templates/other/IntentService/globals.xml.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0"?>
-<globals>
-    <global id="srcOut" value="src/${slashedPackageName(packageName)}" />
-</globals>
diff --git a/templates/other/IntentService/recipe.xml.ftl b/templates/other/IntentService/recipe.xml.ftl
deleted file mode 100644
index 958f6fd..0000000
--- a/templates/other/IntentService/recipe.xml.ftl
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<recipe>
-    <merge from="AndroidManifest.xml.ftl" />
-    <instantiate from="src/app_package/IntentService.java.ftl"
-                   to="${srcOut}/${className}.java" />
-    <open file="${srcOut}/${className}.java" />
-</recipe>
diff --git a/templates/other/IntentService/root/AndroidManifest.xml.ftl b/templates/other/IntentService/root/AndroidManifest.xml.ftl
deleted file mode 100644
index fcc0b66..0000000
--- a/templates/other/IntentService/root/AndroidManifest.xml.ftl
+++ /dev/null
@@ -1,9 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" >
-
-    <application>
-        <service android:name=".${className}"
-            android:exported="false" >
-        </service>
-    </application>
-
-</manifest>
diff --git a/templates/other/IntentService/root/src/app_package/IntentService.java.ftl b/templates/other/IntentService/root/src/app_package/IntentService.java.ftl
deleted file mode 100644
index c6848ef..0000000
--- a/templates/other/IntentService/root/src/app_package/IntentService.java.ftl
+++ /dev/null
@@ -1,106 +0,0 @@
-package ${packageName};
-
-import android.app.IntentService;
-import android.content.Intent;
-<#if includeHelper>import android.content.Context;</#if>
-
-/**
- * An {@link IntentService} subclass for handling asynchronous task requests in
- * a service on a separate handler thread.
- * <p>
-<#if includeHelper>
- * TODO: Customize class - update intent actions, extra parameters and static
- * helper methods.
-<#else>
- * TODO: Customize class - update intent actions and extra parameters.
-</#if>
- */
-public class ${className} extends IntentService {
-<#if !includeHelper>
-    // TODO: Rename actions, choose action names that describe tasks that this
-    // IntentService can perform, e.g. ACTION_FETCH_NEW_ITEMS
-    public static final String ACTION_FOO = "${packageName}.action.FOO";
-    public static final String ACTION_BAZ = "${packageName}.action.BAZ";
-
-    // TODO: Rename parameters
-    public static final String EXTRA_PARAM1 = "${packageName}.extra.PARAM1";
-    public static final String EXTRA_PARAM2 = "${packageName}.extra.PARAM2";
-<#else>
-    // TODO: Rename actions, choose action names that describe tasks that this
-    // IntentService can perform, e.g. ACTION_FETCH_NEW_ITEMS
-    private static final String ACTION_FOO = "${packageName}.action.FOO";
-    private static final String ACTION_BAZ = "${packageName}.action.BAZ";
-
-    // TODO: Rename parameters
-    private static final String EXTRA_PARAM1 = "${packageName}.extra.PARAM1";
-    private static final String EXTRA_PARAM2 = "${packageName}.extra.PARAM2";
-
-    /**
-     * Starts this service to perform action Foo with the given parameters. If
-     * the service is already performing a task this action will be queued.
-     *
-     * @see IntentService
-     */
-    // TODO: Customize helper method
-    public static void startActionFoo(Context context, String param1, String param2) {
-        Intent intent = new Intent(context, ${className}.class);
-        intent.setAction(ACTION_FOO);
-        intent.putExtra(EXTRA_PARAM1, param1);
-        intent.putExtra(EXTRA_PARAM2, param2);
-        context.startService(intent);
-    }
-
-    /**
-     * Starts this service to perform action Baz with the given parameters. If
-     * the service is already performing a task this action will be queued.
-     *
-     * @see IntentService
-     */
-    // TODO: Customize helper method
-    public static void startActionBaz(Context context, String param1, String param2) {
-        Intent intent = new Intent(context, ${className}.class);
-        intent.setAction(ACTION_BAZ);
-        intent.putExtra(EXTRA_PARAM1, param1);
-        intent.putExtra(EXTRA_PARAM2, param2);
-        context.startService(intent);
-    }
-</#if>
-
-    public ${className}() {
-        super("${className}");
-    }
-
-    @Override
-    protected void onHandleIntent(Intent intent) {
-        if (intent != null) {
-            final String action = intent.getAction();
-            if (ACTION_FOO.equals(action)) {
-                final String param1 = intent.getStringExtra(EXTRA_PARAM1);
-                final String param2 = intent.getStringExtra(EXTRA_PARAM2);
-                handleActionFoo(param1, param2);
-            } else if (ACTION_BAZ.equals(action)) {
-                final String param1 = intent.getStringExtra(EXTRA_PARAM1);
-                final String param2 = intent.getStringExtra(EXTRA_PARAM2);
-                handleActionBaz(param1, param2);
-            }
-        }
-    }
-
-    /**
-     * Handle action Foo in the provided background thread with the provided
-     * parameters.
-     */
-    private void handleActionFoo(String param1, String param2) {
-        // TODO: Handle action Foo
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    /**
-     * Handle action Baz in the provided background thread with the provided
-     * parameters.
-     */
-    private void handleActionBaz(String param1, String param2) {
-        // TODO: Handle action Baz
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-}
diff --git a/templates/other/IntentService/template.xml b/templates/other/IntentService/template.xml
deleted file mode 100644
index ffe6cd5..0000000
--- a/templates/other/IntentService/template.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<template
-    format="3"
-    revision="1"
-    name="New IntentService"
-    description="Creates a new intent service class."
-    minApi="3"
-    minBuildApi="3">
-
-    <category value="Other" />
-
-    <parameter
-        id="className"
-        name="Class Name"
-        type="string"
-        constraints="class|unique|nonempty"
-        default="MyIntentService" />
-
-    <parameter
-        id="includeHelper"
-        name="Include helper start methods?"
-        type="boolean"
-        default="true"
-        help="Generate static helper methods to start the service e.g. MyIntentService.startAction()" />
-
-    <globals file="globals.xml.ftl" />
-    <execute file="recipe.xml.ftl" />
-
-</template>
diff --git a/templates/other/ListFragment/globals.xml.ftl b/templates/other/ListFragment/globals.xml.ftl
deleted file mode 100644
index 577250d..0000000
--- a/templates/other/ListFragment/globals.xml.ftl
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<globals>
-    <global id="srcOut" value="src/${slashedPackageName(packageName)}" />
-    <global id="collection_name" value="${extractLetters(objectKind?lower_case)}" />
-    <global id="className" value="${extractLetters(objectKind)}Fragment" />
-    <global id="fragment_layout" value="fragment_${extractLetters(objectKind?lower_case)}" />
-</globals>
diff --git a/templates/other/ListFragment/recipe.xml.ftl b/templates/other/ListFragment/recipe.xml.ftl
deleted file mode 100644
index 5db4fdb..0000000
--- a/templates/other/ListFragment/recipe.xml.ftl
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<recipe>
-
-<#if switchGrid == true>
-    <merge from="res/values/refs.xml.ftl" />
-    <merge from="res/values/refs_lrg.xml.ftl"
-           to="res/values-large/refs.xml" />
-    <merge from="res/values/refs_lrg.xml.ftl"
-           to="res/values-sw600dp/refs.xml" />
-
-    <instantiate from="res/layout/fragment_grid.xml"
-                 to="res/layout/${fragment_layout}_grid.xml" />
-
-    <instantiate from="res/layout/fragment_list.xml"
-                 to="res/layout/${fragment_layout}_list.xml" />
-</#if>
-
-    <instantiate from="src/app_package/ListFragment.java.ftl"
-                 to="${srcOut}/${className}.java" />
-
-    <instantiate from="src/app_package/dummy/DummyContent.java.ftl"
-                 to="${srcOut}/dummy/DummyContent.java" />
-
-    <open file="${srcOut}/${className}.java" />
-
-</recipe>
diff --git a/templates/other/ListFragment/root/res/layout/fragment_grid.xml b/templates/other/ListFragment/root/res/layout/fragment_grid.xml
deleted file mode 100644
index 87ae969..0000000
--- a/templates/other/ListFragment/root/res/layout/fragment_grid.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    tools:context=".${className}">
-
-    <GridView
-        android:id="@android:id/list"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:numColumns="2" />
-
-    <TextView
-        android:id="@android:id/empty"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:gravity="center" />
-
-</FrameLayout>
\ No newline at end of file
diff --git a/templates/other/ListFragment/root/res/layout/fragment_list.xml b/templates/other/ListFragment/root/res/layout/fragment_list.xml
deleted file mode 100644
index 5b0e178..0000000
--- a/templates/other/ListFragment/root/res/layout/fragment_list.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    tools:context=".${className}">
-
-    <ListView
-        android:id="@android:id/list"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent" />
-
-    <TextView
-        android:id="@android:id/empty"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:gravity="center" />
-
-</FrameLayout>
\ No newline at end of file
diff --git a/templates/other/ListFragment/root/res/values-large/refs_lrg.xml.ftl b/templates/other/ListFragment/root/res/values-large/refs_lrg.xml.ftl
deleted file mode 100644
index fb20a27..0000000
--- a/templates/other/ListFragment/root/res/values-large/refs_lrg.xml.ftl
+++ /dev/null
@@ -1,12 +0,0 @@
-<resources>
-
-    <!--
-    Layout alias to replace the single-pane version of the layout with a
-    two-pane version on Large screens.
-
-    For more on layout aliases, see:
-    http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters
-    -->
-    <item name="${fragment_layout}" type="layout">@layout/${fragment_layout}_grid</item>
-
-</resources>
\ No newline at end of file
diff --git a/templates/other/ListFragment/root/res/values-sw600dp/refs_lrg.xml.ftl b/templates/other/ListFragment/root/res/values-sw600dp/refs_lrg.xml.ftl
deleted file mode 100644
index fb20a27..0000000
--- a/templates/other/ListFragment/root/res/values-sw600dp/refs_lrg.xml.ftl
+++ /dev/null
@@ -1,12 +0,0 @@
-<resources>
-
-    <!--
-    Layout alias to replace the single-pane version of the layout with a
-    two-pane version on Large screens.
-
-    For more on layout aliases, see:
-    http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters
-    -->
-    <item name="${fragment_layout}" type="layout">@layout/${fragment_layout}_grid</item>
-
-</resources>
\ No newline at end of file
diff --git a/templates/other/ListFragment/root/res/values/refs.xml.ftl b/templates/other/ListFragment/root/res/values/refs.xml.ftl
deleted file mode 100644
index 59ca92c..0000000
--- a/templates/other/ListFragment/root/res/values/refs.xml.ftl
+++ /dev/null
@@ -1,12 +0,0 @@
-<resources>
-
-    <!--
-    Layout alias to replace the single-pane version of the layout with a
-    two-pane version on Large screens.
-
-    For more on layout aliases, see:
-    http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters
-    -->
-    <item name="${fragment_layout}" type="layout">@layout/${fragment_layout}_list</item>
-
-</resources>
\ No newline at end of file
diff --git a/templates/other/ListFragment/root/res/values/refs_lrg.xml.ftl b/templates/other/ListFragment/root/res/values/refs_lrg.xml.ftl
deleted file mode 100644
index fb20a27..0000000
--- a/templates/other/ListFragment/root/res/values/refs_lrg.xml.ftl
+++ /dev/null
@@ -1,12 +0,0 @@
-<resources>
-
-    <!--
-    Layout alias to replace the single-pane version of the layout with a
-    two-pane version on Large screens.
-
-    For more on layout aliases, see:
-    http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters
-    -->
-    <item name="${fragment_layout}" type="layout">@layout/${fragment_layout}_grid</item>
-
-</resources>
\ No newline at end of file
diff --git a/templates/other/ListFragment/root/src/app_package/ListFragment.java.ftl b/templates/other/ListFragment/root/src/app_package/ListFragment.java.ftl
deleted file mode 100644
index 6100448..0000000
--- a/templates/other/ListFragment/root/src/app_package/ListFragment.java.ftl
+++ /dev/null
@@ -1,195 +0,0 @@
-package ${packageName};
-
-import android.app.Activity;
-import android.os.Bundle;
-<#if switchGrid == true>
-import android.support.v4.app.Fragment;
-import android.view.LayoutInflater;
-<#else>
-import android.support.v4.app.ListFragment;
-</#if>
-import android.view.View;
-<#if switchGrid == true>
-import android.view.ViewGroup;
-import android.widget.AbsListView;
-import android.widget.AdapterView;
-</#if>
-import android.widget.ArrayAdapter;
-<#if switchGrid == true>
-import android.widget.ListAdapter;
-import android.widget.TextView;
-<#else>
-import android.widget.ListView;
-</#if>
-
-import ${packageName}.dummy.DummyContent;
-
-/**
- * A fragment representing a list of Items.
- * <p />
-<#if switchGrid == true>
- * Large screen devices (such as tablets) are supported by replacing the ListView
- * with a GridView.
-</#if>
- * <p />
- * Activities containing this fragment MUST implement the {@link Callbacks}
- * interface.
- */
-<#if switchGrid == true>
-public class ${className} extends Fragment implements AbsListView.OnItemClickListener {
-<#else>
-public class ${className} extends ListFragment {
-</#if>
-
-<#if includeFactory>
-    // TODO: Rename parameter arguments, choose names that match
-    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
-    private static final String ARG_PARAM1 = "param1";
-    private static final String ARG_PARAM2 = "param2";
-
-    // TODO: Rename and change types of parameters
-    private String mParam1;
-    private String mParam2;
-
-</#if>
-    private OnFragmentInteractionListener mListener;
-
-<#if switchGrid == true>
-    /**
-     * The fragment's ListView/GridView.
-     */
-    private AbsListView mListView;
-
-    /**
-     * The Adapter which will be used to populate the ListView/GridView with
-     * Views.
-     */
-    private ListAdapter mAdapter;
-
-</#if>
-<#if includeFactory>
-    // TODO: Rename and change types of parameters
-    public static ${className} newInstance(String param1, String param2) {
-        ${className} fragment = new ${className}();
-        Bundle args = new Bundle();
-        args.putString(ARG_PARAM1, param1);
-        args.putString(ARG_PARAM2, param2);
-        fragment.setArguments(args);
-        return fragment;
-    }
-
-</#if>
-    /**
-     * Mandatory empty constructor for the fragment manager to instantiate the
-     * fragment (e.g. upon screen orientation changes).
-     */
-    public ${className}() {
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-<#if includeFactory>
-        if (getArguments() != null) {
-            mParam1 = getArguments().getString(ARG_PARAM1);
-            mParam2 = getArguments().getString(ARG_PARAM2);
-        }
-</#if>
-
-        // TODO: Change Adapter to display your content
-<#if switchGrid == true>
-        mAdapter = new ArrayAdapter<DummyContent.DummyItem>(getActivity(),
-                android.R.layout.simple_list_item_1, android.R.id.text1, DummyContent.ITEMS);
-<#else>
-        setListAdapter(new ArrayAdapter<DummyContent.DummyItem>(getActivity(),
-                android.R.layout.simple_list_item_1, android.R.id.text1, DummyContent.ITEMS));
-</#if>
-    }
-
-<#if switchGrid == true>
-    @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-                             Bundle savedInstanceState) {
-        View view = inflater.inflate(R.layout.${fragment_layout}, container, false);
-
-        // Set the adapter
-        mListView = (AbsListView) view.findViewById(android.R.id.list);
-        ((AdapterView<ListAdapter>) mListView).setAdapter(mAdapter);
-
-        // Set OnItemClickListener so we can be notified on item clicks
-        mListView.setOnItemClickListener(this);
-
-        return view;
-    }
-</#if>
-
-    @Override
-    public void onAttach(Activity activity) {
-        super.onAttach(activity);
-        try {
-            mListener = (OnFragmentInteractionListener) activity;
-        } catch (ClassCastException e) {
-            throw new ClassCastException(activity.toString()
-                + " must implement OnFragmentInteractionListener");
-        }
-    }
-
-    @Override
-    public void onDetach() {
-        super.onDetach();
-        mListener = null;
-    }
-
-
-<#if switchGrid == true>
-    @Override
-    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-        if (null != mListener) {
-            // Notify the active callbacks interface (the activity, if the
-            // fragment is attached to one) that an item has been selected.
-            mListener.onFragmentInteraction(DummyContent.ITEMS.get(position).id);
-        }
-    }
-
-    /**
-     * The default content for this Fragment has a TextView that is shown when
-     * the list is empty. If you would like to change the text, call this method
-     * to supply the text it should use.
-     */
-    public void setEmptyText(CharSequence emptyText) {
-        View emptyView = mListView.getEmptyView();
-
-        if (emptyText instanceof TextView) {
-            ((TextView) emptyView).setText(emptyText);
-        }
-    }
-<#else>
-    @Override
-    public void onListItemClick(ListView l, View v, int position, long id) {
-        super.onListItemClick(l, v, position, id);
-
-        if (null != mListener) {
-            // Notify the active callbacks interface (the activity, if the
-            // fragment is attached to one) that an item has been selected.
-            mListener.onFragmentInteraction(DummyContent.ITEMS.get(position).id);
-        }
-    }
-</#if>
-
-    /**
-    * This interface must be implemented by activities that contain this
-    * fragment to allow an interaction in this fragment to be communicated
-    * to the activity and potentially other fragments contained in that
-    * activity.
-    * <p>
-    * See the Android Training lesson <a href=
-    * "http://developer.android.com/training/basics/fragments/communicating.html"
-    * >Communicating with Other Fragments</a> for more information.
-    */
-    public interface OnFragmentInteractionListener {
-        // TODO: Update argument type and name
-        public void onFragmentInteraction(String id);
-    }
-
-}
diff --git a/templates/other/ListFragment/root/src/app_package/dummy/DummyContent.java.ftl b/templates/other/ListFragment/root/src/app_package/dummy/DummyContent.java.ftl
deleted file mode 100644
index 3545ba3..0000000
--- a/templates/other/ListFragment/root/src/app_package/dummy/DummyContent.java.ftl
+++ /dev/null
@@ -1,55 +0,0 @@
-package ${packageName}.dummy;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Helper class for providing sample content for user interfaces created by
- * Android template wizards.
- * <p>
- * TODO: Replace all uses of this class before publishing your app.
- */
-public class DummyContent {
-
-    /**
-     * An array of sample (dummy) items.
-     */
-    public static List<DummyItem> ITEMS = new ArrayList<DummyItem>();
-
-    /**
-     * A map of sample (dummy) items, by ID.
-     */
-    public static Map<String, DummyItem> ITEM_MAP = new HashMap<String, DummyItem>();
-
-    static {
-        // Add 3 sample items.
-        addItem(new DummyItem("1", "Item 1"));
-        addItem(new DummyItem("2", "Item 2"));
-        addItem(new DummyItem("3", "Item 3"));
-    }
-
-    private static void addItem(DummyItem item) {
-        ITEMS.add(item);
-        ITEM_MAP.put(item.id, item);
-    }
-
-    /**
-     * A dummy item representing a piece of content.
-     */
-    public static class DummyItem {
-        public String id;
-        public String content;
-
-        public DummyItem(String id, String content) {
-            this.id = id;
-            this.content = content;
-        }
-
-        @Override
-        public String toString() {
-            return content;
-        }
-    }
-}
diff --git a/templates/other/ListFragment/template.xml b/templates/other/ListFragment/template.xml
deleted file mode 100644
index e00257c..0000000
--- a/templates/other/ListFragment/template.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0"?>
-<template
-    format="3"
-    revision="1"
-    name="New List Fragment"
-    description="Creates a new empty fragment containing a list that can optionally change to a grid when on large screens. Compatible back to API level 4."
-    minApi="7"
-    minBuildApi="8">
-
-    <dependency name="android-support-v4" revision="8" />
-
-    <category value="UI Components" />
-
-    <parameter
-        id="packageName"
-        name="Package name"
-        type="string"
-        constraints="package"
-        default="com.mycompany.myapp" />
-
-    <parameter
-        id="objectKind"
-        name="Object Kind"
-        type="string"
-        constraints="nonempty"
-        default="Item"
-        help="Other examples are 'Person', 'Book', etc." />
-
-    <parameter
-        id="includeFactory"
-        name="Include fragment factory methods?"
-        type="boolean"
-        default="true"
-        help="Generate static fragment factory methods for easy instantiation" />
-
-    <parameter
-        id="switchGrid"
-        name="Switch to grid view on large screens?"
-        type="boolean"
-        default="true" />
-
-    <!-- 128x128 thumbnails relative to template.xml -->
-    <thumbs>
-        <!-- default thumbnail is required -->
-        <thumb>templates_list_fragment.png</thumb>
-    </thumbs>
-
-
-    <globals file="globals.xml.ftl" />
-    <execute file="recipe.xml.ftl" />
-
-</template>
diff --git a/templates/other/ListFragment/templates_list_fragment.png b/templates/other/ListFragment/templates_list_fragment.png
deleted file mode 100644
index 92ac799..0000000
--- a/templates/other/ListFragment/templates_list_fragment.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/Notification/globals.xml.ftl b/templates/other/Notification/globals.xml.ftl
deleted file mode 100644
index b302aa9..0000000
--- a/templates/other/Notification/globals.xml.ftl
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<globals>
-    <global id="srcOut" value="src/${slashedPackageName(packageName)}" />
-    <global id="notificationName" value="${className?replace('notification','','i')}" />
-    <global id="notification_name" value="${camelCaseToUnderscore(className?replace('notification','','i'))}" />
-    <global id="display_title" value="${camelCaseToUnderscore(className?replace('notification','','i'))?replace('_',' ')?cap_first}" />
-
-    <global id="icon_resource" value="ic_stat_${camelCaseToUnderscore(className?replace('notification','','i'))}" />
-</globals>
diff --git a/templates/other/Notification/recipe.xml.ftl b/templates/other/Notification/recipe.xml.ftl
deleted file mode 100644
index bd1c265..0000000
--- a/templates/other/Notification/recipe.xml.ftl
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<recipe>
-
-    <merge from="AndroidManifest.xml.ftl" />
-
-    <#if expandedStyle == "picture">
-    <copy from="res/drawable-nodpi/example_picture_large.png"
-            to="res/drawable-nodpi/example_picture.png" />
-    <#else>
-    <copy from="res/drawable-nodpi/example_picture_small.png"
-            to="res/drawable-nodpi/example_picture.png" />
-    </#if>
-
-    <#if moreActions>
-    <copy from="res/drawable-hdpi" />
-    <copy from="res/drawable-mdpi" />
-    <copy from="res/drawable-xhdpi" />
-    </#if>
-
-    <merge from="res/values/strings.xml.ftl" />
-
-    <instantiate from="src/app_package/NotificationHelper.java.ftl"
-                   to="${srcOut}/${className}.java" />
-    <open file="${srcOut}/${className}.java" />
-</recipe>
diff --git a/templates/other/Notification/root/AndroidManifest.xml.ftl b/templates/other/Notification/root/AndroidManifest.xml.ftl
deleted file mode 100644
index fb564cc..0000000
--- a/templates/other/Notification/root/AndroidManifest.xml.ftl
+++ /dev/null
@@ -1,5 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" >
-
-    <uses-permission android:name="android.permission.VIBRATE" />
-
-</manifest>
diff --git a/templates/other/Notification/root/res/drawable-hdpi/ic_action_stat_reply.png b/templates/other/Notification/root/res/drawable-hdpi/ic_action_stat_reply.png
deleted file mode 100644
index 835d96f..0000000
--- a/templates/other/Notification/root/res/drawable-hdpi/ic_action_stat_reply.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/Notification/root/res/drawable-hdpi/ic_action_stat_share.png b/templates/other/Notification/root/res/drawable-hdpi/ic_action_stat_share.png
deleted file mode 100644
index c329f58..0000000
--- a/templates/other/Notification/root/res/drawable-hdpi/ic_action_stat_share.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/Notification/root/res/drawable-mdpi/ic_action_stat_reply.png b/templates/other/Notification/root/res/drawable-mdpi/ic_action_stat_reply.png
deleted file mode 100644
index 9e34465..0000000
--- a/templates/other/Notification/root/res/drawable-mdpi/ic_action_stat_reply.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/Notification/root/res/drawable-mdpi/ic_action_stat_share.png b/templates/other/Notification/root/res/drawable-mdpi/ic_action_stat_share.png
deleted file mode 100644
index 056deb5..0000000
--- a/templates/other/Notification/root/res/drawable-mdpi/ic_action_stat_share.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/Notification/root/res/drawable-nodpi/example_picture_large.png b/templates/other/Notification/root/res/drawable-nodpi/example_picture_large.png
deleted file mode 100644
index 1e69424..0000000
--- a/templates/other/Notification/root/res/drawable-nodpi/example_picture_large.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/Notification/root/res/drawable-nodpi/example_picture_small.png b/templates/other/Notification/root/res/drawable-nodpi/example_picture_small.png
deleted file mode 100644
index e0627f5..0000000
--- a/templates/other/Notification/root/res/drawable-nodpi/example_picture_small.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/Notification/root/res/drawable-xhdpi/ic_action_stat_reply.png b/templates/other/Notification/root/res/drawable-xhdpi/ic_action_stat_reply.png
deleted file mode 100644
index 4cc854a..0000000
--- a/templates/other/Notification/root/res/drawable-xhdpi/ic_action_stat_reply.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/Notification/root/res/drawable-xhdpi/ic_action_stat_share.png b/templates/other/Notification/root/res/drawable-xhdpi/ic_action_stat_share.png
deleted file mode 100644
index 15549b0..0000000
--- a/templates/other/Notification/root/res/drawable-xhdpi/ic_action_stat_share.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/Notification/root/res/values/strings.xml.ftl b/templates/other/Notification/root/res/values/strings.xml.ftl
deleted file mode 100644
index 5f3da57..0000000
--- a/templates/other/Notification/root/res/values/strings.xml.ftl
+++ /dev/null
@@ -1,13 +0,0 @@
-<resources>
-
-    <string name="${notification_name}_notification_title_template">${escapeXmlString(display_title)}: %1$s</string>
-
-    <!-- TODO: remove this placeholder text -->
-    <string name="${notification_name}_notification_placeholder_text_template">You said %1$s and lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam non enim magna. Morbi dictum, velit vel semper venenatis, magna odio volutpat velit, at ullamcorper nulla lacus sed turpis. Pellentesque vitae metus elit, nec tincidunt tellus. Integer sed nisl sem, ullamcorper ornare lacus. Duis ac mauris sed massa congue volutpat. Donec sed erat sit amet turpis viverra rhoncus sit amet nec magna. Donec lacinia ligula at libero volutpat volutpat nec nec tortor.</string>
-
-    <#if moreActions>
-    <string name="action_share">Share</string>
-    <string name="action_reply">Reply</string>
-    </#if>
-
-</resources>
diff --git a/templates/other/Notification/root/src/app_package/NotificationHelper.java.ftl b/templates/other/Notification/root/src/app_package/NotificationHelper.java.ftl
deleted file mode 100644
index af69d5a..0000000
--- a/templates/other/Notification/root/src/app_package/NotificationHelper.java.ftl
+++ /dev/null
@@ -1,205 +0,0 @@
-package ${packageName};
-
-import android.annotation.TargetApi;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.net.Uri;
-import android.os.Build;
-import android.support.v4.app.NotificationCompat;
-<#if expandedStyle == 'list'>
-import android.graphics.Color;
-import android.text.SpannableStringBuilder;
-import android.text.style.ForegroundColorSpan;
-</#if>
-
-/**
- * Helper class for showing and canceling ${display_title?lower_case}
- * notifications.
- * <p>
- * This class makes heavy use of the {@link NotificationCompat.Builder} helper
- * class to create notifications in a backward-compatible way.
- */
-public class ${className} {
-    /**
-     * The unique identifier for this type of notification.
-     */
-    private static final String NOTIFICATION_TAG = "${notificationName}";
-
-    /**
-     * Shows the notification, or updates a previously shown notification of
-     * this type, with the given parameters.
-     * <p>
-     * TODO: Customize this method's arguments to present relevant content in
-     * the notification.
-     * <p>
-     * TODO: Customize the contents of this method to tweak the behavior and
-     * presentation of ${display_title?lower_case} notifications. Make
-     * sure to follow the
-     * <a href="https://developer.android.com/design/patterns/notifications.html">
-     * Notification design guidelines</a> when doing so.
-     *
-     * @see #cancel(Context)
-     */
-    public static void notify(final Context context,
-            final String exampleString, final int number) {
-        final Resources res = context.getResources();
-
-        <#if expandedStyle == "picture">
-        // This image is used as the notification's large icon (thumbnail) when
-        // the notification is collapsed, and as the big picture to show when
-        // the notification is expanded.
-        <#else>
-        // This image is used as the notification's large icon (thumbnail).
-        // TODO: Remove this if your notification has no relevant thumbnail.
-        </#if>
-        final Bitmap picture = BitmapFactory.decodeResource(res, R.drawable.example_picture);
-
-        <#if expandedStyle == 'list'>
-        final SpannableStringBuilder exampleItem = new SpannableStringBuilder();
-        exampleItem.append("Dummy");
-        exampleItem.setSpan(new ForegroundColorSpan(Color.WHITE), 0, exampleItem.length(), 0);
-        exampleItem.append("   Example content");
-        </#if>
-
-        final String ticker = exampleString;
-        final String title = res.getString(
-                R.string.${notification_name}_notification_title_template, exampleString);
-        final String text = res.getString(
-                R.string.${notification_name}_notification_placeholder_text_template, exampleString);
-
-        final NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
-
-                // Set appropriate defaults for the notification light, sound,
-                // and vibration.
-                .setDefaults(Notification.DEFAULT_ALL)
-
-                // Set required fields, including the small icon, the
-                // notification title, and text.
-                .setSmallIcon(R.drawable.${icon_resource})
-                .setContentTitle(title)
-                .setContentText(text)
-
-                // All fields below this line are optional.
-
-                // Use a default priority (recognized on devices running Android
-                // 4.1 or later)
-                .setPriority(NotificationCompat.PRIORITY_DEFAULT)
-
-                // Provide a large icon, shown with the notification in the
-                // notification drawer on devices running Android 3.0 or later.
-                .setLargeIcon(picture)
-
-                // Set ticker text (preview) information for this notification.
-                .setTicker(ticker)
-
-                // Show a number. This is useful when stacking notifications of
-                // a single type.
-                .setNumber(number)
-
-                // If this notification relates to a past or upcoming event, you
-                // should set the relevant time information using the setWhen
-                // method below. If this call is omitted, the notification's
-                // timestamp will by set to the time at which it was shown.
-                // TODO: Call setWhen if this notification relates to a past or
-                // upcoming event. The sole argument to this method should be
-                // the notification timestamp in milliseconds.
-                //.setWhen(...)
-
-                // Set the pending intent to be initiated when the user touches
-                // the notification.
-                .setContentIntent(
-                        PendingIntent.getActivity(
-                                context,
-                                0,
-                                new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")),
-                                PendingIntent.FLAG_UPDATE_CURRENT))
-                <#if expandedStyle == 'picture'>
-
-                // Show an expanded photo on devices running Android 4.1 or
-                // later.
-                .setStyle(new NotificationCompat.BigPictureStyle()<#--
-                        TODO: .bigLargeIcon(null) when the support library supports it -->
-                        .bigPicture(picture)
-                        .setBigContentTitle(title)
-                        .setSummaryText("Dummy summary text"))
-                <#elseif expandedStyle == 'list'>
-
-                // Show an expanded list of items on devices running Android 4.1
-                // or later.
-                .setStyle(new NotificationCompat.InboxStyle()
-                        .addLine(exampleItem)
-                        .addLine(exampleItem)
-                        .addLine(exampleItem)
-                        .addLine(exampleItem)
-                        .setBigContentTitle(title)
-                        .setSummaryText("Dummy summary text"))
-                <#elseif expandedStyle == 'text'>
-
-                // Show expanded text content on devices running Android 4.1 or
-                // later.
-                .setStyle(new NotificationCompat.BigTextStyle()
-                        .bigText(text)
-                        .setBigContentTitle(title)
-                        .setSummaryText("Dummy summary text"))
-                </#if>
-                <#if moreActions>
-
-                // Example additional actions for this notification. These will
-                // only show on devices running Android 4.1 or later, so you
-                // should ensure that the activity in this notification's
-                // content intent provides access to the same actions in
-                // another way.
-                .addAction(
-                        R.drawable.ic_action_stat_share,
-                        res.getString(R.string.action_share),
-                        PendingIntent.getActivity(
-                                context,
-                                0,
-                                Intent.createChooser(new Intent(Intent.ACTION_SEND)
-                                        .setType("text/plain")
-                                        .putExtra(Intent.EXTRA_TEXT, "Dummy text"), "Dummy title"),
-                                PendingIntent.FLAG_UPDATE_CURRENT))
-                .addAction(
-                        R.drawable.ic_action_stat_reply,
-                        res.getString(R.string.action_reply),
-                        null)
-                </#if>
-
-                // Automatically dismiss the notification when it is touched.
-                .setAutoCancel(true);
-
-        notify(context, builder.build());
-    }
-
-    @TargetApi(Build.VERSION_CODES.ECLAIR)
-    private static void notify(final Context context, final Notification notification) {
-        final NotificationManager nm = (NotificationManager) context
-                .getSystemService(Context.NOTIFICATION_SERVICE);
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) {
-            nm.notify(NOTIFICATION_TAG, 0, notification);
-        } else {
-            nm.notify(NOTIFICATION_TAG.hashCode(), notification);
-        }
-    }
-
-    /**
-     * Cancels any notifications of this type previously shown using
-     * {@link #notify(Context, String, int)}.
-     */
-    @TargetApi(Build.VERSION_CODES.ECLAIR)
-    public static void cancel(final Context context) {
-        final NotificationManager nm = (NotificationManager) context
-                .getSystemService(Context.NOTIFICATION_SERVICE);
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) {
-            nm.cancel(NOTIFICATION_TAG, 0);
-        } else {
-            nm.cancel(NOTIFICATION_TAG.hashCode());
-        }
-    }
-}
\ No newline at end of file
diff --git a/templates/other/Notification/template.xml b/templates/other/Notification/template.xml
deleted file mode 100644
index 61fbc59..0000000
--- a/templates/other/Notification/template.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0"?>
-<template
-    format="3"
-    revision="1"
-    name="New Notification"
-    description="Creates a new helper class that can show or cancel a status bar notification."
-    minApi="4">
-
-    <dependency name="android-support-v4" revision="10" />
-
-    <category value="Other" />
-
-    <parameter
-        id="className"
-        name="Class Name"
-        type="string"
-        constraints="class|unique|nonempty"
-        default="NewMessageNotification"
-        help="The name of the notification helper class to create, e.g. 'NewMessageNotification'." />
-
-    <parameter
-        id="expandedStyle"
-        name="Style when Expanded"
-        type="enum"
-        default="text"
-        help="The expanded notification style to use for devices running Android 4.1 or later." >
-        <option id="none">None</option>
-        <option id="text" default="true">More text</option>
-        <option id="picture">Picture</option>
-        <option id="list">List</option>
-    </parameter>
-
-    <parameter
-        id="moreActions"
-        name="Show Additional Actions"
-        type="boolean"
-        default="true"
-        help="If true, this notification will contain additional actions when expanded on devices running Android 4.1 or later." />
-
-    <globals file="globals.xml.ftl" />
-    <execute file="recipe.xml.ftl" />
-
-    <thumbs>
-        <thumb>template_notification_text_actions.png</thumb>
-        <thumb expandedStyle="none">template_notification_none.png</thumb>
-        <thumb expandedStyle="none" moreActions="true">template_notification_none_actions.png</thumb>
-        <thumb expandedStyle="text">template_notification_text.png</thumb>
-        <thumb expandedStyle="text" moreActions="true">template_notification_text_actions.png</thumb>
-        <thumb expandedStyle="list">template_notification_list.png</thumb>
-        <thumb expandedStyle="list" moreActions="true">template_notification_list_actions.png</thumb>
-        <thumb expandedStyle="picture">template_notification_picture.png</thumb>
-        <thumb expandedStyle="picture" moreActions="true">template_notification_picture_actions.png</thumb>
-    </thumbs>
-
-    <icons
-        type="notification"
-        name="ic_stat_${camelCaseToUnderscore(className?replace('notification','','i'))}" />
-</template>
diff --git a/templates/other/Notification/template_notification_list.png b/templates/other/Notification/template_notification_list.png
deleted file mode 100644
index f858daa..0000000
--- a/templates/other/Notification/template_notification_list.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/Notification/template_notification_list_actions.png b/templates/other/Notification/template_notification_list_actions.png
deleted file mode 100644
index a095525..0000000
--- a/templates/other/Notification/template_notification_list_actions.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/Notification/template_notification_none.png b/templates/other/Notification/template_notification_none.png
deleted file mode 100644
index abbee9d..0000000
--- a/templates/other/Notification/template_notification_none.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/Notification/template_notification_none_actions.png b/templates/other/Notification/template_notification_none_actions.png
deleted file mode 100644
index 69a4a50..0000000
--- a/templates/other/Notification/template_notification_none_actions.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/Notification/template_notification_picture.png b/templates/other/Notification/template_notification_picture.png
deleted file mode 100644
index d535661..0000000
--- a/templates/other/Notification/template_notification_picture.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/Notification/template_notification_picture_actions.png b/templates/other/Notification/template_notification_picture_actions.png
deleted file mode 100644
index 300431f..0000000
--- a/templates/other/Notification/template_notification_picture_actions.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/Notification/template_notification_text.png b/templates/other/Notification/template_notification_text.png
deleted file mode 100644
index 790ecc0..0000000
--- a/templates/other/Notification/template_notification_text.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/Notification/template_notification_text_actions.png b/templates/other/Notification/template_notification_text_actions.png
deleted file mode 100644
index 6514069..0000000
--- a/templates/other/Notification/template_notification_text_actions.png
+++ /dev/null
Binary files differ
diff --git a/templates/other/Service/globals.xml.ftl b/templates/other/Service/globals.xml.ftl
deleted file mode 100644
index bfc27eb..0000000
--- a/templates/other/Service/globals.xml.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0"?>
-<globals>
-    <global id="srcOut" value="src/${slashedPackageName(packageName)}" />
-</globals>
diff --git a/templates/other/Service/recipe.xml.ftl b/templates/other/Service/recipe.xml.ftl
deleted file mode 100644
index 6e4bd57..0000000
--- a/templates/other/Service/recipe.xml.ftl
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<recipe>
-    <merge from="AndroidManifest.xml.ftl" />
-    <instantiate from="src/app_package/Service.java.ftl"
-                   to="${srcOut}/${className}.java" />
-    <open file="${srcOut}/${className}.java" />
-</recipe>
diff --git a/templates/other/Service/root/AndroidManifest.xml.ftl b/templates/other/Service/root/AndroidManifest.xml.ftl
deleted file mode 100644
index 14b0bce..0000000
--- a/templates/other/Service/root/AndroidManifest.xml.ftl
+++ /dev/null
@@ -1,10 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" >
-
-    <application>
-        <service android:name=".${className}"
-            android:exported="${isExported?string}"
-            android:enabled="${isEnabled?string}" >
-        </service>
-    </application>
-
-</manifest>
diff --git a/templates/other/Service/root/src/app_package/Service.java.ftl b/templates/other/Service/root/src/app_package/Service.java.ftl
deleted file mode 100644
index 571d2b8..0000000
--- a/templates/other/Service/root/src/app_package/Service.java.ftl
+++ /dev/null
@@ -1,16 +0,0 @@
-package ${packageName};
-
-import android.app.Service;
-import android.content.Intent;
-import android.os.IBinder;
-
-public class ${className} extends Service {
-    public ${className}() {
-    }
-
-    @Override
-    public IBinder onBind(Intent intent) {
-        // TODO: Return the communication channel to the service.
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-}
diff --git a/templates/other/Service/template.xml b/templates/other/Service/template.xml
deleted file mode 100644
index 481fe74..0000000
--- a/templates/other/Service/template.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<template
-    format="1"
-    revision="1"
-    name="Service"
-    description="Creates a new service component and adds it to your Android manifest.">
-
-    <parameter
-        id="className"
-        name="Class Name"
-        type="string"
-        constraints="class|unique|nonempty"
-        default="MyService" />
-
-    <parameter
-        id="isExported"
-        name="Exported"
-        type="boolean"
-        default="true"
-        help="Whether or not components of other applications can invoke the service or interact with it" />
-
-    <parameter
-        id="isEnabled"
-        name="Enabled"
-        type="boolean"
-        default="true"
-        help="Whether or not the service can be instantiated by the system" />
-
-    <globals file="globals.xml.ftl" />
-    <execute file="recipe.xml.ftl" />
-
-</template>
diff --git a/templates/projects/NewAndroidApplication/globals.xml.ftl b/templates/projects/NewAndroidApplication/globals.xml.ftl
deleted file mode 100644
index d196321..0000000
--- a/templates/projects/NewAndroidApplication/globals.xml.ftl
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<globals>
-    <global id="isGradle" value="false" />
-    <global id="topOut" value="." />
-    <global id="projectOut" value="." />
-    <global id="manifestOut" value="." />
-    <global id="srcOut" value="src/${slashedPackageName(packageName)}" />
-    <global id="resOut" value="res" />
-    <global id="mavenUrl" value="mavenCentral" />
-    <global id="buildToolsVersion" value="${buildApi}" />
-    <global id="gradlePluginVersion" value="1.0.+" />
-    <global id="v4SupportLibraryVersion" value="13.0.+" />
-</globals>
diff --git a/templates/projects/NewAndroidApplication/recipe.xml.ftl b/templates/projects/NewAndroidApplication/recipe.xml.ftl
deleted file mode 100644
index 2734b32..0000000
--- a/templates/projects/NewAndroidApplication/recipe.xml.ftl
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-<recipe>
-<#if isGradle == "true">
-    <merge from="settings.gradle.ftl"
-             to="${escapeXmlAttribute(topOut)}/settings.gradle" />
-    <instantiate from="build.gradle.ftl"
-                   to="${escapeXmlAttribute(projectOut)}/build.gradle" />
-</#if>
-    <instantiate from="AndroidManifest.xml.ftl"
-                   to="${escapeXmlAttribute(manifestOut)}/AndroidManifest.xml" />
-
-<#if copyIcons>
-    <copy from="res/drawable-hdpi"
-            to="${escapeXmlAttribute(resOut)}/drawable-hdpi" />
-    <copy from="res/drawable-mdpi"
-            to="${escapeXmlAttribute(resOut)}/drawable-mdpi" />
-    <copy from="res/drawable-xhdpi"
-            to="${escapeXmlAttribute(resOut)}/drawable-xhdpi" />
-</#if>
-    <instantiate from="res/values/styles.xml.ftl"
-                   to="${escapeXmlAttribute(resOut)}/values/styles.xml" />
-<#if buildApi gte 11 && baseTheme != "none">
-    <instantiate from="res/values-v11/styles_hc.xml.ftl"
-                   to="${escapeXmlAttribute(resOut)}/values-v11/styles.xml" />
-</#if>
-<#if buildApi gte 14 && baseTheme?contains("darkactionbar")>
-    <copy from="res/values-v14/styles_ics.xml"
-            to="${escapeXmlAttribute(resOut)}/values-v14/styles.xml" />
-</#if>
-
-    <instantiate from="res/values/strings.xml.ftl"
-                   to="${escapeXmlAttribute(resOut)}/values/strings.xml" />
-</recipe>
diff --git a/templates/projects/NewAndroidApplication/root/AndroidManifest.xml.ftl b/templates/projects/NewAndroidApplication/root/AndroidManifest.xml.ftl
deleted file mode 100644
index 390a9da..0000000
--- a/templates/projects/NewAndroidApplication/root/AndroidManifest.xml.ftl
+++ /dev/null
@@ -1,15 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="${packageName}"
-    android:versionCode="1"
-    android:versionName="1.0">
-
-    <uses-sdk android:minSdkVersion="${minApi}" <#if buildApi gte 4>android:targetSdkVersion="${targetApi}" </#if>/>
-
-    <application <#if minApiLevel gte 4 && buildApi gte 4>android:allowBackup="true"</#if>
-        android:label="@string/app_name"
-        android:icon="@drawable/ic_launcher"<#if baseTheme != "none">
-        android:theme="@style/AppTheme"</#if>>
-
-    </application>
-
-</manifest>
diff --git a/templates/projects/NewAndroidApplication/root/build.gradle.ftl b/templates/projects/NewAndroidApplication/root/build.gradle.ftl
deleted file mode 100644
index 83b4368..0000000
--- a/templates/projects/NewAndroidApplication/root/build.gradle.ftl
+++ /dev/null
@@ -1,35 +0,0 @@
-buildscript {
-    repositories {
-<#if mavenUrl == "mavenCentral">
-        mavenCentral()
-<#else>
-        maven { url '${mavenUrl}' }
-</#if>
-    }
-    dependencies {
-        classpath 'com.android.tools.build:gradle:${gradlePluginVersion}'
-    }
-}
-apply plugin: 'android'
-
-repositories {
-<#if mavenUrl == "mavenCentral">
-    mavenCentral()
-<#else>
-    maven { url '${mavenUrl}' }
-</#if>
-}
-
-dependencies {
-    compile 'com.android.support:support-v4:${v4SupportLibraryVersion}'
-}
-
-android {
-    compileSdkVersion ${buildApi}
-    buildToolsVersion "${buildToolsVersion}"
-
-    defaultConfig {
-        minSdkVersion ${minApi}
-        targetSdkVersion ${targetApi}
-    }
-}
diff --git a/templates/projects/NewAndroidApplication/root/res/drawable-hdpi/ic_launcher.png b/templates/projects/NewAndroidApplication/root/res/drawable-hdpi/ic_launcher.png
deleted file mode 100755
index 96a442e..0000000
--- a/templates/projects/NewAndroidApplication/root/res/drawable-hdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/templates/projects/NewAndroidApplication/root/res/drawable-mdpi/ic_launcher.png b/templates/projects/NewAndroidApplication/root/res/drawable-mdpi/ic_launcher.png
deleted file mode 100755
index 359047d..0000000
--- a/templates/projects/NewAndroidApplication/root/res/drawable-mdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/templates/projects/NewAndroidApplication/root/res/drawable-xhdpi/ic_launcher.png b/templates/projects/NewAndroidApplication/root/res/drawable-xhdpi/ic_launcher.png
deleted file mode 100755
index 71c6d76..0000000
--- a/templates/projects/NewAndroidApplication/root/res/drawable-xhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/templates/projects/NewAndroidApplication/root/res/values-v11/styles_hc.xml.ftl b/templates/projects/NewAndroidApplication/root/res/values-v11/styles_hc.xml.ftl
deleted file mode 100644
index f8993c3..0000000
--- a/templates/projects/NewAndroidApplication/root/res/values-v11/styles_hc.xml.ftl
+++ /dev/null
@@ -1,11 +0,0 @@
-<resources>
-
-    <!--
-        Base application theme for API 11+. This theme completely replaces
-        AppBaseTheme from res/values/styles.xml on API 11+ devices.
-    -->
-    <style name="AppBaseTheme" parent="android:Theme.Holo<#if baseTheme?contains("light")>.Light</#if>">
-        <!-- API 11 theme customizations can go here. -->
-    </style>
-
-</resources>
diff --git a/templates/projects/NewAndroidApplication/root/res/values-v14/styles_ics.xml b/templates/projects/NewAndroidApplication/root/res/values-v14/styles_ics.xml
deleted file mode 100644
index a91fd03..0000000
--- a/templates/projects/NewAndroidApplication/root/res/values-v14/styles_ics.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<resources>
-
-    <!--
-        Base application theme for API 14+. This theme completely replaces
-        AppBaseTheme from BOTH res/values/styles.xml and
-        res/values-v11/styles.xml on API 14+ devices.
-    -->
-    <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
-        <!-- API 14 theme customizations can go here. -->
-    </style>
-
-</resources>
diff --git a/templates/projects/NewAndroidApplication/root/res/values/strings.xml.ftl b/templates/projects/NewAndroidApplication/root/res/values/strings.xml.ftl
deleted file mode 100644
index ee03444..0000000
--- a/templates/projects/NewAndroidApplication/root/res/values/strings.xml.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-<resources>
-    <string name="app_name">${escapeXmlString(appTitle)}</string>
-</resources>
diff --git a/templates/projects/NewAndroidApplication/root/res/values/styles.xml.ftl b/templates/projects/NewAndroidApplication/root/res/values/styles.xml.ftl
deleted file mode 100644
index 30fe5b5..0000000
--- a/templates/projects/NewAndroidApplication/root/res/values/styles.xml.ftl
+++ /dev/null
@@ -1,20 +0,0 @@
-<resources>
-
-    <!--
-        Base application theme, dependent on API level. This theme is replaced
-        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-    -->
-    <style name="AppBaseTheme" parent="android:Theme<#if baseTheme?contains("light")>.Light</#if>">
-        <!--
-            Theme customizations available in newer API levels can go in
-            res/values-vXX/styles.xml, while customizations related to
-            backward-compatibility can go here.
-        -->
-    </style>
-
-    <!-- Application theme. -->
-    <style name="AppTheme" parent="AppBaseTheme">
-        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
-    </style>
-
-</resources>
diff --git a/templates/projects/NewAndroidApplication/root/settings.gradle.ftl b/templates/projects/NewAndroidApplication/root/settings.gradle.ftl
deleted file mode 100644
index b12004b..0000000
--- a/templates/projects/NewAndroidApplication/root/settings.gradle.ftl
+++ /dev/null
@@ -1 +0,0 @@
-include ':${projectName}'
diff --git a/templates/projects/NewAndroidApplication/template.xml b/templates/projects/NewAndroidApplication/template.xml
deleted file mode 100644
index 0d9b234..0000000
--- a/templates/projects/NewAndroidApplication/template.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0"?>
-<template
-    format="1"
-    revision="2"
-    name="Android Application"
-    description="Creates a new Android application.">
-    <dependency name="android-support-v4" revision="8" />
-
-    <thumbs>
-        <thumb>template_new_project.png</thumb>
-    </thumbs>
-
-    <category value="Applications" />
-
-    <parameter
-        id="packageName"
-        name="Package name"
-        type="string"
-        constraints="package|nonempty"
-        default="com.mycompany.myapp" />
-
-    <parameter
-        id="appTitle"
-        name="Application title"
-        type="string"
-        constraints="nonempty"
-        default="My Application" />
-
-    <parameter
-        id="baseTheme"
-        name="Base Theme"
-        type="enum"
-        default="holo_light_darkactionbar"
-        help="The base user interface theme for the application">
-        <option id="none">None</option>
-        <option id="holo_dark" minBuildApi="11">Holo Dark</option>
-        <option id="holo_light" minBuildApi="11">Holo Light</option>
-        <option id="holo_light_darkactionbar" minBuildApi="14" default="true">Holo Light with Dark Action Bar</option>
-    </parameter>
-
-    <parameter
-        id="minApi"
-        name="Minimum API level"
-        type="string"
-        constraints="apilevel"
-        default="7" />
-
-    <!--
-      Usually the same as minApi, but when minApi is a code name this will be the corresponding
-      API level
-    -->
-    <parameter
-        id="minApiLevel"
-        name="Minimum API level"
-        type="string"
-        constraints="apilevel"
-        default="7" />
-
-    <parameter
-        id="targetApi"
-        name="Target API level"
-        type="string"
-        constraints="apilevel"
-        default="16" />
-
-    <parameter
-        id="buildApi"
-        name="Build API level"
-        type="string"
-        constraints="apilevel"
-        default="16" />
-
-    <parameter
-        id="copyIcons"
-        name="Include launcher icons"
-        type="boolean"
-        default="true" />
-
-    <globals file="globals.xml.ftl" />
-    <execute file="recipe.xml.ftl" />
-
-</template>
diff --git a/templates/projects/NewAndroidApplication/template_new_project.png b/templates/projects/NewAndroidApplication/template_new_project.png
deleted file mode 100644
index 92e8556..0000000
--- a/templates/projects/NewAndroidApplication/template_new_project.png
+++ /dev/null
Binary files differ
diff --git a/templates/projects/NewAndroidLibrary/globals.xml.ftl b/templates/projects/NewAndroidLibrary/globals.xml.ftl
deleted file mode 100644
index d196321..0000000
--- a/templates/projects/NewAndroidLibrary/globals.xml.ftl
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<globals>
-    <global id="isGradle" value="false" />
-    <global id="topOut" value="." />
-    <global id="projectOut" value="." />
-    <global id="manifestOut" value="." />
-    <global id="srcOut" value="src/${slashedPackageName(packageName)}" />
-    <global id="resOut" value="res" />
-    <global id="mavenUrl" value="mavenCentral" />
-    <global id="buildToolsVersion" value="${buildApi}" />
-    <global id="gradlePluginVersion" value="1.0.+" />
-    <global id="v4SupportLibraryVersion" value="13.0.+" />
-</globals>
diff --git a/templates/projects/NewAndroidLibrary/recipe.xml.ftl b/templates/projects/NewAndroidLibrary/recipe.xml.ftl
deleted file mode 100644
index 2734b32..0000000
--- a/templates/projects/NewAndroidLibrary/recipe.xml.ftl
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-<recipe>
-<#if isGradle == "true">
-    <merge from="settings.gradle.ftl"
-             to="${escapeXmlAttribute(topOut)}/settings.gradle" />
-    <instantiate from="build.gradle.ftl"
-                   to="${escapeXmlAttribute(projectOut)}/build.gradle" />
-</#if>
-    <instantiate from="AndroidManifest.xml.ftl"
-                   to="${escapeXmlAttribute(manifestOut)}/AndroidManifest.xml" />
-
-<#if copyIcons>
-    <copy from="res/drawable-hdpi"
-            to="${escapeXmlAttribute(resOut)}/drawable-hdpi" />
-    <copy from="res/drawable-mdpi"
-            to="${escapeXmlAttribute(resOut)}/drawable-mdpi" />
-    <copy from="res/drawable-xhdpi"
-            to="${escapeXmlAttribute(resOut)}/drawable-xhdpi" />
-</#if>
-    <instantiate from="res/values/styles.xml.ftl"
-                   to="${escapeXmlAttribute(resOut)}/values/styles.xml" />
-<#if buildApi gte 11 && baseTheme != "none">
-    <instantiate from="res/values-v11/styles_hc.xml.ftl"
-                   to="${escapeXmlAttribute(resOut)}/values-v11/styles.xml" />
-</#if>
-<#if buildApi gte 14 && baseTheme?contains("darkactionbar")>
-    <copy from="res/values-v14/styles_ics.xml"
-            to="${escapeXmlAttribute(resOut)}/values-v14/styles.xml" />
-</#if>
-
-    <instantiate from="res/values/strings.xml.ftl"
-                   to="${escapeXmlAttribute(resOut)}/values/strings.xml" />
-</recipe>
diff --git a/templates/projects/NewAndroidLibrary/root/AndroidManifest.xml.ftl b/templates/projects/NewAndroidLibrary/root/AndroidManifest.xml.ftl
deleted file mode 100644
index 390a9da..0000000
--- a/templates/projects/NewAndroidLibrary/root/AndroidManifest.xml.ftl
+++ /dev/null
@@ -1,15 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="${packageName}"
-    android:versionCode="1"
-    android:versionName="1.0">
-
-    <uses-sdk android:minSdkVersion="${minApi}" <#if buildApi gte 4>android:targetSdkVersion="${targetApi}" </#if>/>
-
-    <application <#if minApiLevel gte 4 && buildApi gte 4>android:allowBackup="true"</#if>
-        android:label="@string/app_name"
-        android:icon="@drawable/ic_launcher"<#if baseTheme != "none">
-        android:theme="@style/AppTheme"</#if>>
-
-    </application>
-
-</manifest>
diff --git a/templates/projects/NewAndroidLibrary/root/build.gradle.ftl b/templates/projects/NewAndroidLibrary/root/build.gradle.ftl
deleted file mode 100644
index 1b7e780..0000000
--- a/templates/projects/NewAndroidLibrary/root/build.gradle.ftl
+++ /dev/null
@@ -1,35 +0,0 @@
-buildscript {
-    repositories {
-<#if mavenUrl == "mavenCentral">
-        mavenCentral()
-<#else>
-        maven { url '${mavenUrl}' }
-</#if>
-    }
-    dependencies {
-        classpath 'com.android.tools.build:gradle:${gradlePluginVersion}'
-    }
-}
-apply plugin: 'android-library'
-
-repositories {
-<#if mavenUrl == "mavenCentral">
-    mavenCentral()
-<#else>
-    maven { url '${mavenUrl}' }
-</#if>
-}
-
-dependencies {
-    compile 'com.android.support:support-v4:${v4SupportLibraryVersion}'
-}
-
-android {
-    compileSdkVersion ${buildApi}
-    buildToolsVersion "${buildToolsVersion}"
-
-    defaultConfig {
-        minSdkVersion ${minApi}
-        targetSdkVersion ${targetApi}
-    }
-}
diff --git a/templates/projects/NewAndroidLibrary/root/res/drawable-hdpi/ic_launcher.png b/templates/projects/NewAndroidLibrary/root/res/drawable-hdpi/ic_launcher.png
deleted file mode 100755
index 96a442e..0000000
--- a/templates/projects/NewAndroidLibrary/root/res/drawable-hdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/templates/projects/NewAndroidLibrary/root/res/drawable-mdpi/ic_launcher.png b/templates/projects/NewAndroidLibrary/root/res/drawable-mdpi/ic_launcher.png
deleted file mode 100755
index 359047d..0000000
--- a/templates/projects/NewAndroidLibrary/root/res/drawable-mdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/templates/projects/NewAndroidLibrary/root/res/drawable-xhdpi/ic_launcher.png b/templates/projects/NewAndroidLibrary/root/res/drawable-xhdpi/ic_launcher.png
deleted file mode 100755
index 71c6d76..0000000
--- a/templates/projects/NewAndroidLibrary/root/res/drawable-xhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/templates/projects/NewAndroidLibrary/root/res/values-v11/styles_hc.xml.ftl b/templates/projects/NewAndroidLibrary/root/res/values-v11/styles_hc.xml.ftl
deleted file mode 100644
index f8993c3..0000000
--- a/templates/projects/NewAndroidLibrary/root/res/values-v11/styles_hc.xml.ftl
+++ /dev/null
@@ -1,11 +0,0 @@
-<resources>
-
-    <!--
-        Base application theme for API 11+. This theme completely replaces
-        AppBaseTheme from res/values/styles.xml on API 11+ devices.
-    -->
-    <style name="AppBaseTheme" parent="android:Theme.Holo<#if baseTheme?contains("light")>.Light</#if>">
-        <!-- API 11 theme customizations can go here. -->
-    </style>
-
-</resources>
diff --git a/templates/projects/NewAndroidLibrary/root/res/values-v14/styles_ics.xml b/templates/projects/NewAndroidLibrary/root/res/values-v14/styles_ics.xml
deleted file mode 100644
index a91fd03..0000000
--- a/templates/projects/NewAndroidLibrary/root/res/values-v14/styles_ics.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<resources>
-
-    <!--
-        Base application theme for API 14+. This theme completely replaces
-        AppBaseTheme from BOTH res/values/styles.xml and
-        res/values-v11/styles.xml on API 14+ devices.
-    -->
-    <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
-        <!-- API 14 theme customizations can go here. -->
-    </style>
-
-</resources>
diff --git a/templates/projects/NewAndroidLibrary/root/res/values/strings.xml.ftl b/templates/projects/NewAndroidLibrary/root/res/values/strings.xml.ftl
deleted file mode 100644
index ee03444..0000000
--- a/templates/projects/NewAndroidLibrary/root/res/values/strings.xml.ftl
+++ /dev/null
@@ -1,3 +0,0 @@
-<resources>
-    <string name="app_name">${escapeXmlString(appTitle)}</string>
-</resources>
diff --git a/templates/projects/NewAndroidLibrary/root/res/values/styles.xml.ftl b/templates/projects/NewAndroidLibrary/root/res/values/styles.xml.ftl
deleted file mode 100644
index 30fe5b5..0000000
--- a/templates/projects/NewAndroidLibrary/root/res/values/styles.xml.ftl
+++ /dev/null
@@ -1,20 +0,0 @@
-<resources>
-
-    <!--
-        Base application theme, dependent on API level. This theme is replaced
-        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-    -->
-    <style name="AppBaseTheme" parent="android:Theme<#if baseTheme?contains("light")>.Light</#if>">
-        <!--
-            Theme customizations available in newer API levels can go in
-            res/values-vXX/styles.xml, while customizations related to
-            backward-compatibility can go here.
-        -->
-    </style>
-
-    <!-- Application theme. -->
-    <style name="AppTheme" parent="AppBaseTheme">
-        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
-    </style>
-
-</resources>
diff --git a/templates/projects/NewAndroidLibrary/root/settings.gradle.ftl b/templates/projects/NewAndroidLibrary/root/settings.gradle.ftl
deleted file mode 100644
index b12004b..0000000
--- a/templates/projects/NewAndroidLibrary/root/settings.gradle.ftl
+++ /dev/null
@@ -1 +0,0 @@
-include ':${projectName}'
diff --git a/templates/projects/NewAndroidLibrary/template.xml b/templates/projects/NewAndroidLibrary/template.xml
deleted file mode 100644
index 9d13db5..0000000
--- a/templates/projects/NewAndroidLibrary/template.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0"?>
-<template
-    format="1"
-    revision="2"
-    name="Android Library"
-    description="Creates a new Android library.">
-    <dependency name="android-support-v4" revision="8" />
-
-    <thumbs>
-        <thumb>template_new_project.png</thumb>
-    </thumbs>
-
-    <category value="Applications" />
-
-    <parameter
-        id="packageName"
-        name="Package name"
-        type="string"
-        constraints="package|nonempty"
-        default="com.mycompany.myapp" />
-
-    <parameter
-        id="appTitle"
-        name="Library title"
-        type="string"
-        constraints="nonempty"
-        default="My Library"/>
-
-    <parameter
-        id="baseTheme"
-        name="Base Theme"
-        type="enum"
-        default="holo_light_darkactionbar"
-        help="The base user interface theme for the library">
-        <option id="none">None</option>
-        <option id="holo_dark" minBuildApi="11">Holo Dark</option>
-        <option id="holo_light" minBuildApi="11">Holo Light</option>
-        <option id="holo_light_darkactionbar" minBuildApi="14" default="true">Holo Light with Dark Action Bar</option>
-    </parameter>
-
-    <parameter
-        id="minApi"
-        name="Minimum API level"
-        type="string"
-        constraints="apilevel"
-        default="7" />
-
-    <!--
-      Usually the same as minApi, but when minApi is a code name this will be the corresponding
-      API level
-    -->
-    <parameter
-        id="minApiLevel"
-        name="Minimum API level"
-        type="string"
-        constraints="apilevel"
-        default="7" />
-
-    <parameter
-        id="targetApi"
-        name="Target API level"
-        type="string"
-        constraints="apilevel"
-        default="16" />
-
-    <parameter
-        id="buildApi"
-        name="Build API level"
-        type="string"
-        constraints="apilevel"
-        default="16" />
-
-    <parameter
-        id="copyIcons"
-        name="Include launcher icons"
-        type="boolean"
-        default="true" />
-
-    <globals file="globals.xml.ftl" />
-    <execute file="recipe.xml.ftl" />
-
-</template>
diff --git a/templates/projects/NewAndroidLibrary/template_new_project.png b/templates/projects/NewAndroidLibrary/template_new_project.png
deleted file mode 100644
index 92e8556..0000000
--- a/templates/projects/NewAndroidLibrary/template_new_project.png
+++ /dev/null
Binary files differ
diff --git a/templates/projects/NewJavaLibrary/globals.xml.ftl b/templates/projects/NewJavaLibrary/globals.xml.ftl
deleted file mode 100644
index 5b9b620..0000000
--- a/templates/projects/NewJavaLibrary/globals.xml.ftl
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<globals>
-    <global id="isGradle" value="false" />
-    <global id="topOut" value="." />
-    <global id="projectOut" value="." />
-    <global id="srcOut" value="src/${slashedPackageName(packageName)}" />
-</globals>
diff --git a/templates/projects/NewJavaLibrary/recipe.xml.ftl b/templates/projects/NewJavaLibrary/recipe.xml.ftl
deleted file mode 100644
index b9dd28d..0000000
--- a/templates/projects/NewJavaLibrary/recipe.xml.ftl
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-<recipe>
-<#if isGradle == "true">
-    <merge from="settings.gradle.ftl"
-             to="${escapeXmlAttribute(topOut)}/settings.gradle" />
-    <instantiate from="build.gradle.ftl"
-                   to="${escapeXmlAttribute(projectOut)}/build.gradle" />
-</#if>
-    <instantiate from="/src/library_package/Placeholder.java.ftl"
-                   to="${escapeXmlAttribute(srcOut)}/${className}.java" />
-</recipe>
diff --git a/templates/projects/NewJavaLibrary/root/build.gradle.ftl b/templates/projects/NewJavaLibrary/root/build.gradle.ftl
deleted file mode 100644
index bbfeb03..0000000
--- a/templates/projects/NewJavaLibrary/root/build.gradle.ftl
+++ /dev/null
@@ -1 +0,0 @@
-apply plugin: 'java'
diff --git a/templates/projects/NewJavaLibrary/root/settings.gradle.ftl b/templates/projects/NewJavaLibrary/root/settings.gradle.ftl
deleted file mode 100644
index b12004b..0000000
--- a/templates/projects/NewJavaLibrary/root/settings.gradle.ftl
+++ /dev/null
@@ -1 +0,0 @@
-include ':${projectName}'
diff --git a/templates/projects/NewJavaLibrary/root/src/library_package/Placeholder.java.ftl b/templates/projects/NewJavaLibrary/root/src/library_package/Placeholder.java.ftl
deleted file mode 100644
index 2af8c0d..0000000
--- a/templates/projects/NewJavaLibrary/root/src/library_package/Placeholder.java.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-package ${packageName};
-
-public class ${className} {
-}
diff --git a/templates/projects/NewJavaLibrary/template.xml b/templates/projects/NewJavaLibrary/template.xml
deleted file mode 100644
index cb117a5..0000000
--- a/templates/projects/NewJavaLibrary/template.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-<template
-    format="1"
-    revision="2"
-    name="Java Library"
-    description="Creates a new Java library.">
-
-    <thumbs>
-        <thumb>template_new_project.png</thumb>
-    </thumbs>
-
-    <category value="Applications" />
-
-    <parameter
-        id="projectName"
-        name="Library name"
-        type="string"
-        constraints="nonempty"
-        default="MyLibrary"/>
-
-    <parameter
-        id="packageName"
-        name="Java package name"
-        type="string"
-        constraints="nonempty"
-        default="com.example"/>
-
-    <parameter
-        id="className"
-        name="Java class name"
-        type="string"
-        constraints="nonempty"
-        default="MyClass"/>
-
-    <globals file="globals.xml.ftl" />
-    <execute file="recipe.xml.ftl" />
-
-</template>
diff --git a/templates/projects/NewJavaLibrary/template_new_project.png b/templates/projects/NewJavaLibrary/template_new_project.png
deleted file mode 100644
index 92e8556..0000000
--- a/templates/projects/NewJavaLibrary/template_new_project.png
+++ /dev/null
Binary files differ
