Merge "BorderlessButtons: Migrate build to gradle" into jb-mr2-dev
diff --git a/content/contacts/BasicContactables/BasicContactables/build.gradle b/content/contacts/BasicContactables/BasicContactables/build.gradle
new file mode 100644
index 0000000..d4023a9
--- /dev/null
+++ b/content/contacts/BasicContactables/BasicContactables/build.gradle
@@ -0,0 +1,23 @@
+buildscript {
+    repositories {
+        mavenCentral()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:0.4'
+    }
+}
+apply plugin: 'android'
+
+dependencies {
+    compile files('libs/android-support-v4.jar')
+}
+
+android {
+    compileSdkVersion 18
+    buildToolsVersion "17.0.0"
+
+    defaultConfig {
+        minSdkVersion 18
+        targetSdkVersion 18
+    }
+}
diff --git a/content/contacts/BasicContactables/BasicContactables/libs/android-support-v4.jar b/content/contacts/BasicContactables/BasicContactables/libs/android-support-v4.jar
new file mode 100644
index 0000000..428bdbc
--- /dev/null
+++ b/content/contacts/BasicContactables/BasicContactables/libs/android-support-v4.jar
Binary files differ
diff --git a/content/contacts/BasicContactables/BasicContactables/src/main/AndroidManifest.xml b/content/contacts/BasicContactables/BasicContactables/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..b008e84
--- /dev/null
+++ b/content/contacts/BasicContactables/BasicContactables/src/main/AndroidManifest.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.example.android.basiccontactables"
+    android:versionCode="1"
+    android:versionName="1.0" >
+    
+    <!-- BEGIN_INCLUDE(contacts_permission) -->
+    <uses-permission android:name="android.permission.READ_CONTACTS"/>
+    <!-- END_INCLUDE(contacts_permission) -->
+    <uses-sdk
+        android:minSdkVersion="18"
+        android:targetSdkVersion="18" />
+    <permission android:name="android"></permission>
+
+    <application
+        android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/Theme.Sample" >
+        <activity
+            android:name="com.example.android.basiccontactables.MainActivity"
+            android:label="@string/app_name"
+            android:launchMode="singleTop">
+            <meta-data 
+                android:name="android.app.searchable"
+                android:resource="@xml/searchable" />
+            <intent-filter>
+                <action android:name="android.intent.action.SEARCH" />
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+</manifest>
diff --git a/content/contacts/BasicContactables/BasicContactables/src/main/java/com/example/android/basiccontactables/ContactablesLoaderCallbacks.java b/content/contacts/BasicContactables/BasicContactables/src/main/java/com/example/android/basiccontactables/ContactablesLoaderCallbacks.java
new file mode 100644
index 0000000..e2fcf3d
--- /dev/null
+++ b/content/contacts/BasicContactables/BasicContactables/src/main/java/com/example/android/basiccontactables/ContactablesLoaderCallbacks.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.example.android.basiccontactables;
+
+import android.app.Activity;
+import android.app.LoaderManager;
+import android.content.Context;
+import android.content.CursorLoader;
+import android.content.Loader;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds;
+import android.util.Log;
+import android.widget.TextView;
+
+/**
+ * Helper class to handle all the callbacks that occur when interacting with loaders.  Most of the
+ * interesting code in this sample app will be in this file.
+ */
+public class ContactablesLoaderCallbacks implements LoaderManager.LoaderCallbacks<Cursor> {
+
+    Context mContext;
+
+    public static final String QUERY_KEY = "query";
+
+    public static final String TAG = "ContactablesLoaderCallbacks";
+
+    public ContactablesLoaderCallbacks(Context context) {
+        mContext = context;
+    }
+
+    @Override
+    public Loader<Cursor> onCreateLoader(int loaderIndex, Bundle args) {
+        // Where the Contactables table excels is matching text queries,
+        // not just data dumps from Contacts db.  One search term is used to query
+        // display name, email address and phone number.  In this case, the query was extracted
+        // from an incoming intent in the handleIntent() method, via the
+        // intent.getStringExtra() method.
+
+        // BEGIN_INCLUDE(uri_with_query)
+        String query = args.getString(QUERY_KEY);
+        Uri uri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Contactables.CONTENT_FILTER_URI, query);
+        // END_INCLUDE(uri_with_query)
+
+
+        // BEGIN_INCLUDE(cursor_loader)
+        // Easy way to limit the query to contacts with phone numbers.
+        String selection = ContactsContract.CommonDataKinds.Contactables.HAS_PHONE_NUMBER + " = " + 1;
+
+        // Sort results such that rows for the same contact stay together.
+        String sortBy = ContactsContract.CommonDataKinds.Contactables.LOOKUP_KEY;
+
+        return new CursorLoader(
+                mContext,  // Context
+                uri,       // URI representing the table/resource to be queried
+                null,      // projection - the list of columns to return.  Null means "all"
+                selection, // selection - Which rows to return (condition rows must match)
+                null,      // selection args - can be provided separately and subbed into selection.
+                sortBy);   // string specifying sort order
+        // END_INCLUDE(cursor_loader)
+    }
+
+    @Override
+    public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {
+        TextView tv  = (TextView) ((Activity)mContext).findViewById(R.id.sample_output);
+
+        // Reset text in case of a previous query
+        tv.setText(mContext.getText(R.string.intro_message) + "\n\n");
+
+        if (cursor.getCount() == 0) {
+            return;
+        }
+
+        // Pulling the relevant value from the cursor requires knowing the column index to pull
+        // it from.
+        // BEGIN_INCLUDE(get_columns)
+        int phoneColumnIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER);
+        int emailColumnIndex = cursor.getColumnIndex(CommonDataKinds.Email.ADDRESS);
+        int nameColumnIndex = cursor.getColumnIndex(CommonDataKinds.Contactables.DISPLAY_NAME);
+        int lookupColumnIndex = cursor.getColumnIndex(CommonDataKinds.Contactables.LOOKUP_KEY);
+        int typeColumnIndex = cursor.getColumnIndex(CommonDataKinds.Contactables.MIMETYPE);
+        // END_INCLUDE(get_columns)
+
+        cursor.moveToFirst();
+        // Lookup key is the easiest way to verify a row of data is for the same
+        // contact as the previous row.
+        String lookupKey = "";
+        do {
+            // BEGIN_INCLUDE(lookup_key)
+            String currentLookupKey = cursor.getString(lookupColumnIndex);
+            if (!lookupKey.equals(currentLookupKey)) {
+                String displayName = cursor.getString(nameColumnIndex);
+                tv.append(displayName + "\n");
+                lookupKey = currentLookupKey;
+            }
+            // END_INCLUDE(lookup_key)
+
+            // BEGIN_INCLUDE(retrieve_data)
+            // The data type can be determined using the mime type column.
+            String mimeType = cursor.getString(typeColumnIndex);
+            if (mimeType.equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)) {
+                tv.append("\tPhone Number: " + cursor.getString(phoneColumnIndex) + "\n");
+            } else if (mimeType.equals(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)) {
+                tv.append("\tEmail Address: " + cursor.getString(emailColumnIndex) + "\n");
+            }
+            // END_INCLUDE(retrieve_data)
+
+            // Look at DDMS to see all the columns returned by a query to Contactables.
+            // Behold, the firehose!
+            for(String column : cursor.getColumnNames()) {
+                Log.d(TAG, column + column + ": " +
+                        cursor.getString(cursor.getColumnIndex(column)) + "\n");
+            }
+        } while (cursor.moveToNext());
+    }
+
+    @Override
+    public void onLoaderReset(Loader<Cursor> cursorLoader) {
+    }
+}
diff --git a/content/contacts/BasicContactables/BasicContactables/src/main/java/com/example/android/basiccontactables/MainActivity.java b/content/contacts/BasicContactables/BasicContactables/src/main/java/com/example/android/basiccontactables/MainActivity.java
new file mode 100644
index 0000000..9448ada
--- /dev/null
+++ b/content/contacts/BasicContactables/BasicContactables/src/main/java/com/example/android/basiccontactables/MainActivity.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.example.android.basiccontactables;
+
+import android.app.Activity;
+import android.app.SearchManager;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.Menu;
+import android.widget.SearchView;
+
+/**
+ * Simple one-activity app that takes a search term via the Action Bar
+ * and uses it as a query to search the contacts database via the Contactables
+ * table.
+ */
+public class MainActivity extends Activity {
+
+    public static final int CONTACT_QUERY_LOADER = 0;
+    public static final String QUERY_KEY = "query";
+
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+
+        if (getIntent() != null) {
+            handleIntent(getIntent());
+        }
+    }
+
+    @Override
+    protected void onNewIntent(Intent intent) {
+        handleIntent(intent);
+    }
+
+    /**
+     * Assuming this activity was started with a new intent, process the incoming information and
+     * react accordingly.
+     * @param intent
+     */
+    private void handleIntent(Intent intent) {
+        // Special processing of the incoming intent only occurs if the if the action specified
+        // by the intent is ACTION_SEARCH.
+        if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
+            // SearchManager.QUERY is the key that a SearchManager will use to send a query string
+            // to an Activity.
+            String query = intent.getStringExtra(SearchManager.QUERY);
+
+            // We need to create a bundle containing the query string to send along to the
+            // LoaderManager, which will be handling querying the database and returning results.
+            Bundle bundle = new Bundle();
+            bundle.putString(QUERY_KEY, query);
+
+            ContactablesLoaderCallbacks loaderCallbacks = new ContactablesLoaderCallbacks(this);
+
+            // Start the loader with the new query, and an object that will handle all callbacks.
+            getLoaderManager().restartLoader(CONTACT_QUERY_LOADER, bundle, loaderCallbacks);
+        }
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        // Inflate the menu; this adds items to the action bar if it is present.
+        getMenuInflater().inflate(R.menu.main, menu);
+
+        // Associate searchable configuration with the SearchView
+        SearchManager searchManager =
+                (SearchManager) getSystemService(Context.SEARCH_SERVICE);
+        SearchView searchView =
+                (SearchView) menu.findItem(R.id.search).getActionView();
+        searchView.setSearchableInfo(
+                searchManager.getSearchableInfo(getComponentName()));
+
+        return true;
+    }
+}
diff --git a/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-hdpi/ic_launcher.png b/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-hdpi/ic_launcher.png
new file mode 100755
index 0000000..22ce606
--- /dev/null
+++ b/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-hdpi/ic_search_api_holo_light.png b/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-hdpi/ic_search_api_holo_light.png
new file mode 100644
index 0000000..72e207b
--- /dev/null
+++ b/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-hdpi/ic_search_api_holo_light.png
Binary files differ
diff --git a/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-mdpi/ic_launcher.png b/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-mdpi/ic_launcher.png
new file mode 100755
index 0000000..f21e17b
--- /dev/null
+++ b/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-mdpi/ic_search_api_holo_light.png b/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-mdpi/ic_search_api_holo_light.png
new file mode 100644
index 0000000..f2e26f8
--- /dev/null
+++ b/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-mdpi/ic_search_api_holo_light.png
Binary files differ
diff --git a/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-xhdpi/ic_launcher.png b/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-xhdpi/ic_launcher.png
new file mode 100755
index 0000000..64b8059
--- /dev/null
+++ b/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-xhdpi/ic_search_api_holo_light.png b/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-xhdpi/ic_search_api_holo_light.png
new file mode 100644
index 0000000..a4cdf1c
--- /dev/null
+++ b/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-xhdpi/ic_search_api_holo_light.png
Binary files differ
diff --git a/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-xxhdpi/ic_launcher.png b/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-xxhdpi/ic_launcher.png
new file mode 100755
index 0000000..6b4434a
--- /dev/null
+++ b/content/contacts/BasicContactables/BasicContactables/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/content/contacts/BasicContactables/BasicContactables/src/main/res/layout/activity_main.xml b/content/contacts/BasicContactables/BasicContactables/src/main/res/layout/activity_main.xml
new file mode 100755
index 0000000..52dc311
--- /dev/null
+++ b/content/contacts/BasicContactables/BasicContactables/src/main/res/layout/activity_main.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <TextView android:id="@+id/sample_output"
+        style="@style/Widget.SampleOutput"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/intro_message" />
+
+</ScrollView>
diff --git a/content/contacts/BasicContactables/BasicContactables/src/main/res/menu/main.xml b/content/contacts/BasicContactables/BasicContactables/src/main/res/menu/main.xml
new file mode 100644
index 0000000..4a530f1
--- /dev/null
+++ b/content/contacts/BasicContactables/BasicContactables/src/main/res/menu/main.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:id="@+id/search"
+          android:title="@string/search_title"
+          android:icon="@drawable/ic_search_api_holo_light"
+          android:showAsAction="collapseActionView|ifRoom"
+          android:actionViewClass="android.widget.SearchView" />
+</menu>
diff --git a/content/contacts/BasicContactables/BasicContactables/src/main/res/values-sw600dp/dimens.xml b/content/contacts/BasicContactables/BasicContactables/src/main/res/values-sw600dp/dimens.xml
new file mode 100644
index 0000000..886b05f
--- /dev/null
+++ b/content/contacts/BasicContactables/BasicContactables/src/main/res/values-sw600dp/dimens.xml
@@ -0,0 +1,4 @@
+<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/ui/actionbar/DoneBar/res/values-sw600dp/styles.xml b/content/contacts/BasicContactables/BasicContactables/src/main/res/values-sw600dp/styles.xml
similarity index 65%
rename from ui/actionbar/DoneBar/res/values-sw600dp/styles.xml
rename to content/contacts/BasicContactables/BasicContactables/src/main/res/values-sw600dp/styles.xml
index 8b7fa45..2bbb45f 100644
--- a/ui/actionbar/DoneBar/res/values-sw600dp/styles.xml
+++ b/content/contacts/BasicContactables/BasicContactables/src/main/res/values-sw600dp/styles.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
 <!--
   Copyright 2013 The Android Open Source Project
 
@@ -16,24 +17,13 @@
 
 <resources>
 
-    <style name="Widget.SampleContentContainer">
+    <style name="Widget.SampleOutput">
         <item name="android:paddingTop">@dimen/margin_medium</item>
         <item name="android:paddingBottom">@dimen/margin_medium</item>
         <item name="android:paddingLeft">@dimen/margin_huge</item>
         <item name="android:paddingRight">@dimen/margin_huge</item>
-    </style>
-
-    <style name="Widget.SampleMessage">
         <item name="android:textAppearance">?android:textAppearanceLarge</item>
         <item name="android:lineSpacingMultiplier">1.2</item>
     </style>
 
-    <style name="Widget.SampleButton" parent="android:Widget.Holo.Light.Button">
-        <item name="android:textAppearance">?android:textAppearanceLarge</item>
-        <item name="android:paddingTop">@dimen/margin_medium</item>
-        <item name="android:paddingBottom">@dimen/margin_medium</item>
-        <item name="android:paddingLeft">@dimen/margin_large</item>
-        <item name="android:paddingRight">@dimen/margin_large</item>
-    </style>
-
 </resources>
diff --git a/content/contacts/BasicContactables/BasicContactables/src/main/res/values-sw720dp-land/dimens.xml b/content/contacts/BasicContactables/BasicContactables/src/main/res/values-sw720dp-land/dimens.xml
new file mode 100644
index 0000000..00059fc
--- /dev/null
+++ b/content/contacts/BasicContactables/BasicContactables/src/main/res/values-sw720dp-land/dimens.xml
@@ -0,0 +1,5 @@
+<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/content/contacts/BasicContactables/BasicContactables/src/main/res/values-v11/styles.xml b/content/contacts/BasicContactables/BasicContactables/src/main/res/values-v11/styles.xml
new file mode 100644
index 0000000..2ba754c
--- /dev/null
+++ b/content/contacts/BasicContactables/BasicContactables/src/main/res/values-v11/styles.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+    <style name="Theme.Base" parent="android:Theme.Holo.Light" />
+</resources>
diff --git a/content/contacts/BasicContactables/BasicContactables/src/main/res/values/dimens.xml b/content/contacts/BasicContactables/BasicContactables/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..a83b995
--- /dev/null
+++ b/content/contacts/BasicContactables/BasicContactables/src/main/res/values/dimens.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <!-- Define standard dimensions to comply with Holo-style grids and rhythm. -->
+
+    <dimen name="margin_tiny">4dp</dimen>
+    <dimen name="margin_small">8dp</dimen>
+    <dimen name="margin_medium">16dp</dimen>
+    <dimen name="margin_large">32dp</dimen>
+    <dimen name="margin_huge">64dp</dimen>
+
+</resources>
diff --git a/content/contacts/BasicContactables/BasicContactables/src/main/res/values/strings.xml b/content/contacts/BasicContactables/BasicContactables/src/main/res/values/strings.xml
new file mode 100755
index 0000000..31ceceb
--- /dev/null
+++ b/content/contacts/BasicContactables/BasicContactables/src/main/res/values/strings.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+    <string name="app_name">Basic Contactables Query</string>
+    <string name="intro_message">Welcome to <b>Basic Contactables Query</b>!\n\n
+        Use the search box to enter a term, and find matching contacts in
+        Android\'s contact database!
+    </string>
+    <string name="sample_action">Sample action</string>
+    <string name="search_title">Search Contacts</string>
+</resources>
diff --git a/ui/actionbar/DoneBar/res/values/styles.xml b/content/contacts/BasicContactables/BasicContactables/src/main/res/values/styles.xml
similarity index 74%
copy from ui/actionbar/DoneBar/res/values/styles.xml
copy to content/contacts/BasicContactables/BasicContactables/src/main/res/values/styles.xml
index 80895ef..1c0e5aa 100644
--- a/ui/actionbar/DoneBar/res/values/styles.xml
+++ b/content/contacts/BasicContactables/BasicContactables/src/main/res/values/styles.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
 <!--
   Copyright 2013 The Android Open Source Project
 
@@ -18,7 +19,7 @@
 
     <!-- Activity themes -->
 
-    <style name="Theme.Base" parent="android:Theme.Holo.Light" />
+    <style name="Theme.Base" parent="android:Theme.Light" />
 
     <style name="Theme.Sample" parent="Theme.Base" />
 
@@ -26,17 +27,10 @@
 
     <style name="Widget" />
 
-    <style name="Widget.SampleContentContainer">
+    <style name="Widget.SampleOutput">
         <item name="android:padding">@dimen/margin_medium</item>
-    </style>
-
-    <style name="Widget.SampleMessage">
         <item name="android:textAppearance">?android:textAppearanceMedium</item>
         <item name="android:lineSpacingMultiplier">1.1</item>
     </style>
 
-    <style name="Widget.SampleButton" parent="android:Widget.Holo.Light.Button">
-        <item name="android:textAppearance">?android:textAppearanceMedium</item>
-    </style>
-
 </resources>
diff --git a/content/contacts/BasicContactables/BasicContactables/src/main/res/xml/searchable.xml b/content/contacts/BasicContactables/BasicContactables/src/main/res/xml/searchable.xml
new file mode 100644
index 0000000..32fe1cc
--- /dev/null
+++ b/content/contacts/BasicContactables/BasicContactables/src/main/res/xml/searchable.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+  
+<searchable xmlns:android="http://schemas.android.com/apk/res/android"
+        android:label="@string/app_name"
+        android:hint="@string/search_title" />
diff --git a/content/contacts/BasicContactables/build.gradle b/content/contacts/BasicContactables/build.gradle
new file mode 100644
index 0000000..495c503
--- /dev/null
+++ b/content/contacts/BasicContactables/build.gradle
@@ -0,0 +1 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
diff --git a/input/Multitouch/BasicMultitouch/BasicMultitouch/build.gradle b/input/Multitouch/BasicMultitouch/BasicMultitouch/build.gradle
new file mode 100644
index 0000000..bcc634b
--- /dev/null
+++ b/input/Multitouch/BasicMultitouch/BasicMultitouch/build.gradle
@@ -0,0 +1,19 @@
+buildscript {
+    repositories {
+        maven { url 'http://repo1.maven.org/maven2' }
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:0.5.+'
+    }
+}
+apply plugin: 'android'
+
+android {
+    compileSdkVersion 17
+    buildToolsVersion "17.0.0"
+
+    defaultConfig {
+        minSdkVersion 8
+        targetSdkVersion 17
+    }
+}
diff --git a/input/Multitouch/BasicMultitouch/AndroidManifest.xml b/input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/AndroidManifest.xml
similarity index 100%
rename from input/Multitouch/BasicMultitouch/AndroidManifest.xml
rename to input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/AndroidManifest.xml
diff --git a/input/Multitouch/BasicMultitouch/images/MultitouchSample.png b/input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/images/MultitouchSample.png
similarity index 100%
rename from input/Multitouch/BasicMultitouch/images/MultitouchSample.png
rename to input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/images/MultitouchSample.png
Binary files differ
diff --git a/input/Multitouch/BasicMultitouch/src/com/example/android/common/Pools.java b/input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/java/com/example/android/common/Pools.java
similarity index 100%
rename from input/Multitouch/BasicMultitouch/src/com/example/android/common/Pools.java
rename to input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/java/com/example/android/common/Pools.java
diff --git a/input/Multitouch/BasicMultitouch/src/com/example/android/input/multitouch/basicMultitouch/MainActivity.java b/input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/java/com/example/android/input/multitouch/basicMultitouch/MainActivity.java
similarity index 100%
rename from input/Multitouch/BasicMultitouch/src/com/example/android/input/multitouch/basicMultitouch/MainActivity.java
rename to input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/java/com/example/android/input/multitouch/basicMultitouch/MainActivity.java
diff --git a/input/Multitouch/BasicMultitouch/src/com/example/android/input/multitouch/basicMultitouch/TouchDisplayView.java b/input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/java/com/example/android/input/multitouch/basicMultitouch/TouchDisplayView.java
similarity index 100%
rename from input/Multitouch/BasicMultitouch/src/com/example/android/input/multitouch/basicMultitouch/TouchDisplayView.java
rename to input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/java/com/example/android/input/multitouch/basicMultitouch/TouchDisplayView.java
diff --git a/input/Multitouch/BasicMultitouch/res/drawable-hdpi/ic_launcher.png b/input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from input/Multitouch/BasicMultitouch/res/drawable-hdpi/ic_launcher.png
rename to input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/input/Multitouch/BasicMultitouch/res/drawable-mdpi/ic_launcher.png b/input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from input/Multitouch/BasicMultitouch/res/drawable-mdpi/ic_launcher.png
rename to input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/input/Multitouch/BasicMultitouch/res/drawable-xhdpi/ic_launcher.png b/input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from input/Multitouch/BasicMultitouch/res/drawable-xhdpi/ic_launcher.png
rename to input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/input/Multitouch/BasicMultitouch/res/drawable-xxhdpi/ic_launcher.png b/input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from input/Multitouch/BasicMultitouch/res/drawable-xxhdpi/ic_launcher.png
rename to input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/input/Multitouch/BasicMultitouch/res/layout/layout_mainactivity.xml b/input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/res/layout/layout_mainactivity.xml
similarity index 100%
rename from input/Multitouch/BasicMultitouch/res/layout/layout_mainactivity.xml
rename to input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/res/layout/layout_mainactivity.xml
diff --git a/input/Multitouch/BasicMultitouch/res/values-v11/styles.xml b/input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/res/values-v11/styles.xml
similarity index 100%
rename from input/Multitouch/BasicMultitouch/res/values-v11/styles.xml
rename to input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/res/values-v11/styles.xml
diff --git a/input/Multitouch/BasicMultitouch/res/values-v14/styles.xml b/input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/res/values-v14/styles.xml
similarity index 100%
rename from input/Multitouch/BasicMultitouch/res/values-v14/styles.xml
rename to input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/res/values-v14/styles.xml
diff --git a/input/Multitouch/BasicMultitouch/res/values/strings.xml b/input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/res/values/strings.xml
similarity index 100%
rename from input/Multitouch/BasicMultitouch/res/values/strings.xml
rename to input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/res/values/strings.xml
diff --git a/input/Multitouch/BasicMultitouch/res/values/styles.xml b/input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/res/values/styles.xml
similarity index 100%
rename from input/Multitouch/BasicMultitouch/res/values/styles.xml
rename to input/Multitouch/BasicMultitouch/BasicMultitouch/src/main/res/values/styles.xml
diff --git a/input/Multitouch/BasicMultitouch/build.gradle b/input/Multitouch/BasicMultitouch/build.gradle
new file mode 100644
index 0000000..495c503
--- /dev/null
+++ b/input/Multitouch/BasicMultitouch/build.gradle
@@ -0,0 +1 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
diff --git a/input/Multitouch/BasicMultitouch/settings.gradle b/input/Multitouch/BasicMultitouch/settings.gradle
new file mode 100644
index 0000000..5587917
--- /dev/null
+++ b/input/Multitouch/BasicMultitouch/settings.gradle
@@ -0,0 +1 @@
+include ':BasicMultitouch'
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/build.gradle b/input/gestures/BasicGestureDetect/BasicGestureDetect/build.gradle
new file mode 100644
index 0000000..15c24fc
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/build.gradle
@@ -0,0 +1,27 @@
+buildscript {
+    repositories {
+        mavenCentral()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:0.5.+'
+    }
+}
+apply plugin: 'android'
+
+repositories {
+    mavenCentral()
+}
+
+dependencies {
+    compile 'com.android.support:support-v4:13.0.+'
+}
+
+android {
+    compileSdkVersion 18
+    buildToolsVersion "17.0.0"
+
+    defaultConfig {
+        minSdkVersion 7
+        targetSdkVersion 16
+    }
+}
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/libs/android-support-v4.jar b/input/gestures/BasicGestureDetect/BasicGestureDetect/libs/android-support-v4.jar
new file mode 100644
index 0000000..428bdbc
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/libs/android-support-v4.jar
Binary files differ
diff --git a/ui/actionbar/DoneBar/AndroidManifest.xml b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/AndroidManifest.xml
similarity index 65%
copy from ui/actionbar/DoneBar/AndroidManifest.xml
copy to input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/AndroidManifest.xml
index 5536a9b..9c6ec99 100755
--- a/ui/actionbar/DoneBar/AndroidManifest.xml
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/AndroidManifest.xml
@@ -14,32 +14,29 @@
   limitations under the License.
   -->
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.donebar"
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.example.android.basicgesturedetect"
     android:versionCode="1"
     android:versionName="1.0">
 
-    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17" />
+    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />
 
-    <application android:label="@string/app_name"
+    <application
+        android:label="@string/app_name"
         android:icon="@drawable/ic_launcher"
         android:theme="@style/Theme.Sample"
         android:allowBackup="true">
 
-        <activity android:name=".MainActivity"
-            android:label="@string/app_name">
+        <activity
+            android:name=".MainActivity"
+            android:label="@string/app_name"
+            android:uiOptions="splitActionBarWhenNarrow">
+
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
-
-        <activity android:name=".DoneBarActivity"
-            android:parentActivityName=".MainActivity" />
-
-        <activity android:name=".DoneButtonActivity"
-            android:parentActivityName=".MainActivity" />
-
     </application>
-
 </manifest>
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/basicgesturedetect/GestureListener.java b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/basicgesturedetect/GestureListener.java
new file mode 100644
index 0000000..2e2921d
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/basicgesturedetect/GestureListener.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.basicgesturedetect;
+
+import android.view.GestureDetector;
+import android.view.MotionEvent;
+
+import com.example.android.common.logger.Log;
+
+public class GestureListener extends GestureDetector.SimpleOnGestureListener {
+
+    public static final String TAG = "GestureListener";
+
+    // BEGIN_INCLUDE(init_gestureListener)
+    @Override
+    public boolean onSingleTapUp(MotionEvent e) {
+        // Up motion completing a single tap occurred.
+        Log.i(TAG, "Single Tap Up");
+        return false;
+    }
+
+    @Override
+    public void onLongPress(MotionEvent e) {
+        // Touch has been long enough to indicate a long press.
+        // Does not indicate motion is complete yet (no up event necessarily)
+        Log.i(TAG, "Long Press");
+    }
+
+    @Override
+    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
+    float distanceY) {
+        // User attempted to scroll
+        Log.i(TAG, "Scroll");
+        return false;
+    }
+
+    @Override
+    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
+    float velocityY) {
+        // Fling event occurred.  Notification of this one happens after an "up" event.
+        Log.i(TAG, "Fling");
+        return false;
+    }
+
+    @Override
+    public void onShowPress(MotionEvent e) {
+        // User performed a down event, and hasn't moved yet.
+        Log.i(TAG, "Show Press");
+    }
+
+    @Override
+    public boolean onDown(MotionEvent e) {
+        // "Down" event - User touched the screen.
+        Log.i(TAG, "Down");
+        return false;
+    }
+
+    @Override
+    public boolean onDoubleTap(MotionEvent e) {
+        // User tapped the screen twice.
+        Log.i(TAG, "Double tap");
+        return false;
+    }
+
+    @Override
+    public boolean onDoubleTapEvent(MotionEvent e) {
+        // Since double-tap is actually several events which are considered one aggregate
+        // gesture, there's a separate callback for an individual event within the doubletap
+        // occurring.  This occurs for down, up, and move.
+        Log.i(TAG, "Event within double tap");
+        return false;
+    }
+
+    @Override
+    public boolean onSingleTapConfirmed(MotionEvent e) {
+        // A confirmed single-tap event has occurred.  Only called when the detector has
+        // determined that the first tap stands alone, and is not part of a double tap.
+        Log.i(TAG, "Single tap confirmed");
+        return false;
+    }
+    // END_INCLUDE(init_gestureListener)
+}
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/basicgesturedetect/LogFragment.java b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/basicgesturedetect/LogFragment.java
new file mode 100644
index 0000000..849edac
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/basicgesturedetect/LogFragment.java
@@ -0,0 +1,58 @@
+// Copyright 2013 Google Inc. All Rights Reserved.
+
+package com.example.android.basicgesturedetect;
+
+import com.example.android.common.logger.LogView;
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.text.Editable;
+import android.text.TextWatcher;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ScrollView;
+
+/**
+ * Simple fraggment which contains a LogView and uses is to output log data it receives
+ * through the LogNode interface.
+ */
+public class LogFragment extends Fragment {
+
+    private LogView mLogView;
+
+    public LogFragment() {}
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+
+        View result = inflater.inflate(R.layout.log_fragment, container, false);
+
+        mLogView = (LogView) result.findViewById(R.id.sample_output);
+
+        // Wire up so when the text changes, the view scrolls down.
+        final ScrollView scrollView =
+                ((ScrollView) result.findViewById(R.id.log_scroll));
+
+        mLogView.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {}
+
+            @Override
+            public void afterTextChanged(Editable s) {
+                scrollView.fullScroll(ScrollView.FOCUS_DOWN);
+            }
+        });
+
+        return result;
+    }
+
+    public LogView getLogView() {
+        return mLogView;
+    }
+}
\ No newline at end of file
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/basicgesturedetect/MainActivity.java b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/basicgesturedetect/MainActivity.java
new file mode 100755
index 0000000..4654ac9
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/basicgesturedetect/MainActivity.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.basicgesturedetect;
+
+import android.os.Bundle;
+import android.support.v4.app.FragmentActivity;
+import android.util.TypedValue;
+import android.view.GestureDetector;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.MotionEvent;
+import android.view.View;
+
+import com.example.android.common.logger.LogWrapper;
+import com.example.android.common.logger.Log;
+import com.example.android.common.widgets.SimpleTextFragment;
+import com.example.android.common.logger.MessageOnlyLogFilter;
+
+/**
+ * Sample application demonstrating how to use GestureDetector go detect when a user performs
+ * a gesture that's recognized by the framework.  This example uses SimpleGestureDetector.  If you
+ * want to detect
+ * as well as customize that shortcut with metadata to send along to the application it activates.
+ * Code is also included for removing your shortcut from the homescreen, for situations where that
+ * is necessary (for instance, removing a shortcut to some data when that data is deleted from your
+ * app).
+ */
+public class MainActivity extends FragmentActivity {
+
+    public static final String TAG = "Basic Gesture Detector";
+
+    // Reference to the fragment showing events, so we can clear it with a button as necessary.
+    private LogFragment mLogFragment;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+
+        SimpleTextFragment actionFragment = (SimpleTextFragment)
+                    getSupportFragmentManager().findFragmentById(R.id.intro_fragment);
+        actionFragment.setText(R.string.intro_message);
+        actionFragment.getView().setClickable(true);
+        actionFragment.getView().setFocusable(true);
+        actionFragment.getTextView().setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16.0f);
+
+
+        // BEGIN_INCLUDE(init_detector)
+
+        // First create the GestureListener that will include all our callbacks.
+        // Then create the GestureDetector, which takes that listener as an argument.
+        GestureDetector.SimpleOnGestureListener gestureListener = getGestureListener();
+        final GestureDetector gd = new GestureDetector(this, gestureListener);
+
+        /* For the view where gestures will occur, create an onTouchListener that sends
+         * all motion events to the gesture detector.  When the gesture detector
+         * actually detects an event, it will use the callbacks you created in the
+         * SimpleOnGestureListener to alert your application.
+        */
+
+        actionFragment.getView().setOnTouchListener(new View.OnTouchListener() {
+            @Override
+            public boolean onTouch(View view, MotionEvent motionEvent) {
+                gd.onTouchEvent(motionEvent);
+                return false;
+            }
+        });
+        // END_INCLUDE(init_detector)
+
+        initializeLogging();
+    }
+
+    /** Create a gesture listener which will be attached to the GestureDetector.
+     *  This listener is where you can write all your callbacks for when certain events occur.
+     * @return The listener your GestureDetector will use to inform your application when
+     * the supported gestures occur.
+     */
+    public GestureDetector.SimpleOnGestureListener getGestureListener() {
+        return new GestureListener();
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        getMenuInflater().inflate(R.menu.main, menu);
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            case R.id.sample_action:
+                // Clears the log fragment when clicked.
+                mLogFragment.getLogView().setText("");
+                return true;
+        }
+        return false;
+    }
+
+    /** Create a chain of targets that will receive log data */
+    public void initializeLogging() {
+        // Wraps Android's native log framework.
+        LogWrapper logWrapper = new LogWrapper();
+        // Using Log, front-end to the logging chain, emulates android.util.log method signatures.
+        Log.setLogNode(logWrapper);
+
+        // Filter strips out everything except the message text.
+        MessageOnlyLogFilter msgFilter = new MessageOnlyLogFilter();
+        logWrapper.setNext(msgFilter);
+
+        // On screen logging via a fragment with a TextView.
+        mLogFragment =
+                (LogFragment) getSupportFragmentManager().findFragmentById(R.id.log_fragment);
+        msgFilter.setNext(mLogFragment.getLogView());
+
+        Log.i(TAG, "Ready");
+    }
+}
\ No newline at end of file
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/common/logger/Log.java b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/common/logger/Log.java
new file mode 100644
index 0000000..a87f299
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/common/logger/Log.java
@@ -0,0 +1,236 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.example.android.common.logger;
+
+/**
+ * Helper class for a list (or tree) of LoggerNodes.
+ *
+ * <p>When this is set as the head of the list,
+ * an instance of it can function as a drop-in replacement for {@link android.util.Log}.
+ * Most of the methods in this class server only to map a method call in Log to its equivalent
+ * in LogNode.</p>
+ */
+public class Log {
+    // Grab the native values from Android's native logging facilities,
+    // to make for easy migration and interop.
+    public static final int NONE = -1;
+    public static final int VERBOSE = android.util.Log.VERBOSE;
+    public static final int DEBUG = android.util.Log.DEBUG;
+    public static final int INFO = android.util.Log.INFO;
+    public static final int WARN = android.util.Log.WARN;
+    public static final int ERROR = android.util.Log.ERROR;
+    public static final int ASSERT = android.util.Log.ASSERT;
+
+    // Stores the beginning of the LogNode topology.
+    private static LogNode mLogNode;
+
+    /**
+     * Returns the next LogNode in the linked list.
+     */
+    public static LogNode getLogNode() {
+        return mLogNode;
+    }
+
+    /**
+     * Sets the LogNode data will be sent to.
+     */
+    public static void setLogNode(LogNode node) {
+        mLogNode = node;
+    }
+
+    /**
+     * Instructs the LogNode to print the log data provided. Other LogNodes can
+     * be chained to the end of the LogNode as desired.
+     *
+     * @param priority Log level of the data being logged. Verbose, Error, etc.
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void println(int priority, String tag, String msg, Throwable tr) {
+        if (mLogNode != null) {
+            mLogNode.println(priority, tag, msg, tr);
+        }
+    }
+
+    /**
+     * Instructs the LogNode to print the log data provided. Other LogNodes can
+     * be chained to the end of the LogNode as desired.
+     *
+     * @param priority Log level of the data being logged. Verbose, Error, etc.
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged. The actual message to be logged.
+     */
+    public static void println(int priority, String tag, String msg) {
+        println(priority, tag, msg, null);
+    }
+
+   /**
+     * Prints a message at VERBOSE priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void v(String tag, String msg, Throwable tr) {
+        println(VERBOSE, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at VERBOSE priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void v(String tag, String msg) {
+        v(tag, msg, null);
+    }
+
+
+    /**
+     * Prints a message at DEBUG priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void d(String tag, String msg, Throwable tr) {
+        println(DEBUG, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at DEBUG priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void d(String tag, String msg) {
+        d(tag, msg, null);
+    }
+
+    /**
+     * Prints a message at INFO priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void i(String tag, String msg, Throwable tr) {
+        println(INFO, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at INFO priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void i(String tag, String msg) {
+        i(tag, msg, null);
+    }
+
+    /**
+     * Prints a message at WARN priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void w(String tag, String msg, Throwable tr) {
+        println(WARN, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at WARN priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void w(String tag, String msg) {
+        w(tag, msg, null);
+    }
+
+    /**
+     * Prints a message at WARN priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void w(String tag, Throwable tr) {
+        w(tag, null, tr);
+    }
+
+    /**
+     * Prints a message at ERROR priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void e(String tag, String msg, Throwable tr) {
+        println(ERROR, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at ERROR priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void e(String tag, String msg) {
+        e(tag, msg, null);
+    }
+
+    /**
+     * Prints a message at ASSERT priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void wtf(String tag, String msg, Throwable tr) {
+        println(ASSERT, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at ASSERT priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void wtf(String tag, String msg) {
+        wtf(tag, msg, null);
+    }
+
+    /**
+     * Prints a message at ASSERT priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void wtf(String tag, Throwable tr) {
+        wtf(tag, null, tr);
+    }
+}
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/common/logger/LogNode.java b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/common/logger/LogNode.java
new file mode 100644
index 0000000..bc37cab
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/common/logger/LogNode.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.example.android.common.logger;
+
+/**
+ * Basic interface for a logging system that can output to one or more targets.
+ * Note that in addition to classes that will output these logs in some format,
+ * one can also implement this interface over a filter and insert that in the chain,
+ * such that no targets further down see certain data, or see manipulated forms of the data.
+ * You could, for instance, write a "ToHtmlLoggerNode" that just converted all the log data
+ * it received to HTML and sent it along to the next node in the chain, without printing it
+ * anywhere.
+ */
+public interface LogNode {
+
+    /**
+     * Instructs first LogNode in the list to print the log data provided.
+     * @param priority Log level of the data being logged.  Verbose, Error, etc.
+     * @param tag Tag for for the log data.  Can be used to organize log statements.
+     * @param msg The actual message to be logged. The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public void println(int priority, String tag, String msg, Throwable tr);
+
+}
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/common/logger/LogView.java b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/common/logger/LogView.java
new file mode 100644
index 0000000..d86a88b
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/common/logger/LogView.java
@@ -0,0 +1,121 @@
+package com.example.android.common.logger;
+
+import android.content.Context;
+import android.text.method.ScrollingMovementMethod;
+import android.util.*;
+import android.widget.TextView;
+
+/**
+ * Created by alexlucas on 6/4/13.
+ */
+
+
+public class LogView extends TextView implements LogNode {
+
+    public LogView(Context context) {
+        super(context);
+    }
+
+    public LogView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public LogView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    /**
+     * Formats the log data and prints it out to the LogView.
+     * @param priority Log level of the data being logged.  Verbose, Error, etc.
+     * @param tag Tag for for the log data.  Can be used to organize log statements.
+     * @param msg The actual message to be logged. The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    @Override
+    public void println(int priority, String tag, String msg, Throwable tr) {
+        String priorityStr = null;
+
+        // For the purposes of this View, we want to print the priority as readable text.
+        switch(priority) {
+            case android.util.Log.VERBOSE:
+                priorityStr = "VERBOSE";
+                break;
+            case android.util.Log.DEBUG:
+                priorityStr = "DEBUG";
+                break;
+            case android.util.Log.INFO:
+                priorityStr = "INFO";
+                break;
+            case android.util.Log.WARN:
+                priorityStr = "WARN";
+                break;
+            case android.util.Log.ERROR:
+                priorityStr = "ERROR";
+                break;
+            case android.util.Log.ASSERT:
+                priorityStr = "ASSERT";
+                break;
+            default:
+                break;
+        }
+
+        // Handily, the Log class has a facility for converting a stack trace into a useable string.
+        String exceptionStr = null;
+        if (tr != null) {
+            exceptionStr = android.util.Log.getStackTraceString(tr);
+        }
+
+        // Take the priority, tag, message, and exception, and concatonate as necessary
+        // into one usable line of text.
+        String outputStr =  "";
+        outputStr = appendIfNotNull(outputStr, priorityStr, "\t");
+        outputStr = appendIfNotNull(outputStr, tag, "\t");
+        outputStr = appendIfNotNull(outputStr, msg, "\t");
+        outputStr = appendIfNotNull(outputStr, exceptionStr, "\t");
+
+        // Actually display the text we just generated within the LogView.
+        appendToLog(outputStr);
+
+        if (mNext != null) {
+            mNext.println(priority, tag, msg, tr);
+        }
+    }
+
+    public LogNode getNext() {
+        return mNext;
+    }
+
+    public void setNext(LogNode node) {
+        mNext = node;
+    }
+
+    /** Takes a string and adds to it, with a seperator, if the bit to be added isn't null. Since
+     * the logger takes so many arguments that might be null, this method helps cut out some of the
+     * agonizing tedium of writing the same 3 lines over and over.
+     * @param sourceStr The String to append to.
+     * @param appendStr The String to append
+     * @param delimiter The String to seperate the source and appendee strings. A tab or comma,
+     *                  for instance.
+     * @return The fully concatonated String
+     */
+    private String appendIfNotNull(String sourceStr, String appendStr, String delimiter) {
+        if (appendStr != null) {
+            if (appendStr.length() == 0) {
+                delimiter = "";
+            }
+            sourceStr += delimiter + appendStr;
+        }
+        return sourceStr;
+    }
+
+    // The next LogNode in the chain.
+    LogNode mNext;
+
+    /** Outputs the string as a new line of log data in the LogView. */
+    public void appendToLog(String s) {
+        append("\n" + s);
+    }
+
+
+}
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/common/logger/LogWrapper.java b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/common/logger/LogWrapper.java
new file mode 100644
index 0000000..16a9e7b
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/common/logger/LogWrapper.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.example.android.common.logger;
+
+import android.util.Log;
+
+/**
+ * Helper class which wraps Android's native Log utility in the Logger interface.  This way
+ * normal DDMS output can be one of the many targets receiving and outputting logs simultaneously.
+ */
+public class LogWrapper implements LogNode {
+
+    // For piping:  The next node to receive Log data after this one has done its work.
+    private LogNode mNext;
+
+    /**
+     * Returns the next LogNode in the linked list.
+     */
+    public LogNode getNext() {
+        return mNext;
+    }
+
+    /**
+     * Sets the LogNode data will be sent to..
+     */
+    public void setNext(LogNode node) {
+        mNext = node;
+    }
+
+    /**
+     * Prints data out to the console using Android's native log mechanism.
+     * @param priority Log level of the data being logged.  Verbose, Error, etc.
+     * @param tag Tag for for the log data.  Can be used to organize log statements.
+     * @param msg The actual message to be logged. The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    @Override
+    public void println(int priority, String tag, String msg, Throwable tr) {
+        // There actually are log methods that don't take a msg parameter.  For now,
+        // if that's the case, just convert null to the empty string and move on.
+        String useMsg = msg;
+        if (useMsg == null) {
+            useMsg = "";
+        }
+
+        // If an exeption was provided, convert that exception to a usable string and attach
+        // it to the end of the msg method.
+        if (tr != null) {
+            msg += "\n" + Log.getStackTraceString(tr);
+        }
+
+        // This is functionally identical to Log.x(tag, useMsg);
+        // For instance, if priority were Log.VERBOSE, this would be the same as Log.v(tag, useMsg)
+        Log.println(priority, tag, useMsg);
+
+        // If this isn't the last node in the chain, move things along.
+        if (mNext != null) {
+            mNext.println(priority, tag, msg, tr);
+        }
+    }
+}
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/common/logger/MessageOnlyLogFilter.java b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/common/logger/MessageOnlyLogFilter.java
new file mode 100644
index 0000000..6b72771
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/common/logger/MessageOnlyLogFilter.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.example.android.common.logger;
+
+/**
+ * Simple {@link LogNode} filter, removes everything except the message.
+ * Useful for situations like on-screen log output where you don't want a lot of metadata displayed,
+ * just easy-to-read message updates as they're happening.
+ */
+public class MessageOnlyLogFilter implements LogNode {
+
+    LogNode mNext;
+
+    /**
+     * Takes the "next" LogNode as a parameter, to simplify chaining.
+     *
+     * @param next The next LogNode in the pipeline.
+     */
+    public MessageOnlyLogFilter(LogNode next) {
+        mNext = next;
+    }
+
+    public MessageOnlyLogFilter() {
+    }
+
+    @Override
+    public void println(int priority, String tag, String msg, Throwable tr) {
+        if (mNext != null) {
+            getNext().println(Log.NONE, null, msg, null);
+        }
+    }
+
+    /**
+     * Returns the next LogNode in the linked list.
+     */
+    public LogNode getNext() {
+        return mNext;
+    }
+
+    /**
+     * Sets the LogNode data will be sent to..
+     */
+    public void setNext(LogNode node) {
+        mNext = node;
+    }
+
+}
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/common/widgets/SimpleTextFragment.java b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/common/widgets/SimpleTextFragment.java
new file mode 100644
index 0000000..bd51a1c
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/java/com/example/android/common/widgets/SimpleTextFragment.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.common.widgets;
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+/**
+ * Simple fragment containing only a TextView.  Used by TextPagerAdapter to create
+ * tutorial-style pages for apps.
+ */
+public class SimpleTextFragment extends Fragment {
+
+    // Contains the text that will be displayed by this Fragment
+    String mText;
+
+    // Contains a resource ID for the text that will be displayed by this fragment.
+    int mTextId = -1;
+
+    // Keys which will be used to store/retrieve text passed in via setArguments.
+    public static final String TEXT_KEY = "text";
+    public static final String TEXT_ID_KEY = "text_id";
+
+    // For situations where the app wants to modify text at Runtime, exposing the TextView.
+    private TextView mTextView;
+
+    public SimpleTextFragment() {
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+        // Before initializing the textView, check if any arguments were provided via setArguments.
+        processArguments();
+
+        // Create a new TextView and set its text to whatever was provided.
+        mTextView = new TextView(getActivity());
+        mTextView.setGravity(Gravity.CENTER);
+
+        if (mText != null) {
+            mTextView.setText(mText);
+            Log.i("SimpleTextFragment", mText);
+        }
+        return mTextView;
+    }
+
+    public TextView getTextView() {
+        return mTextView;
+    }
+
+    /**
+     * Changes the text for this TextView, according to the resource ID provided.
+     * @param stringId A resource ID representing the text content for this Fragment's TextView.
+     */
+    public void setText(int stringId) {
+        getTextView().setText(getActivity().getString(stringId));
+    }
+
+    /**
+     * Processes the arguments passed into this Fragment via setArguments method.
+     * Currently the method only looks for text or a textID, nothing else.
+     */
+    public void processArguments() {
+        // For most objects we'd handle the multiple possibilities for initialization variables
+        // as multiple constructors.  For Fragments, however, it's customary to use
+        // setArguments / getArguments.
+        if (getArguments() != null) {
+            Bundle args = getArguments();
+            if (args.containsKey(TEXT_KEY)) {
+                mText = args.getString(TEXT_KEY);
+                Log.d("Constructor", "Added Text.");
+            } else if (args.containsKey(TEXT_ID_KEY)) {
+                mTextId = args.getInt(TEXT_ID_KEY);
+                mText = getString(mTextId);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/drawable-hdpi/ic_launcher.png b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/drawable-hdpi/ic_launcher.png
new file mode 100755
index 0000000..22ce606
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/drawable-mdpi/ic_launcher.png b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/drawable-mdpi/ic_launcher.png
new file mode 100755
index 0000000..f21e17b
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/drawable-xhdpi/ic_launcher.png b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/drawable-xhdpi/ic_launcher.png
new file mode 100755
index 0000000..64b8059
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/drawable-xxhdpi/ic_launcher.png b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/drawable-xxhdpi/ic_launcher.png
new file mode 100755
index 0000000..6b4434a
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/layout/activity_main.xml b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/layout/activity_main.xml
new file mode 100755
index 0000000..471748f
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/layout/activity_main.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent">
+    <fragment
+        android:name="com.example.android.common.SimpleTextFragment"
+        android:id="@+id/intro_fragment"
+        android:layout_weight="1"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+    <View
+        android:layout_width="fill_parent"
+        android:layout_height="1dp"
+        android:background="@android:color/darker_gray"/>
+    <fragment
+        android:name="com.example.android.basicgesturedetect.LogFragment"
+        android:id="@+id/log_fragment"
+        android:layout_weight="1"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+</LinearLayout>
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/layout/log_fragment.xml b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/layout/log_fragment.xml
new file mode 100644
index 0000000..6d79548
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/layout/log_fragment.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/log_scroll"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <com.example.android.common.logger.LogView
+        android:id="@+id/sample_output"
+        style="@style/Log"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:clickable="true"
+        android:focusable="true"
+        android:text=""
+        android:gravity="bottom" />
+</ScrollView>
\ No newline at end of file
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/menu/main.xml b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/menu/main.xml
new file mode 100644
index 0000000..d0ffa14
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/menu/main.xml
@@ -0,0 +1,21 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:id="@+id/sample_action"
+        android:showAsAction="ifRoom|withText"
+        android:title="@string/clear_text" />
+</menu>
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values-sw600dp/dimens.xml b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values-sw600dp/dimens.xml
new file mode 100644
index 0000000..886b05f
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values-sw600dp/dimens.xml
@@ -0,0 +1,4 @@
+<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/ui/actionbar/DoneBar/res/values-sw600dp/styles.xml b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values-sw600dp/styles.xml
similarity index 65%
copy from ui/actionbar/DoneBar/res/values-sw600dp/styles.xml
copy to input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values-sw600dp/styles.xml
index 8b7fa45..ffcbe8a 100644
--- a/ui/actionbar/DoneBar/res/values-sw600dp/styles.xml
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values-sw600dp/styles.xml
@@ -16,24 +16,13 @@
 
 <resources>
 
-    <style name="Widget.SampleContentContainer">
+    <style name="Widget.SampleOutput">
         <item name="android:paddingTop">@dimen/margin_medium</item>
         <item name="android:paddingBottom">@dimen/margin_medium</item>
         <item name="android:paddingLeft">@dimen/margin_huge</item>
         <item name="android:paddingRight">@dimen/margin_huge</item>
-    </style>
-
-    <style name="Widget.SampleMessage">
         <item name="android:textAppearance">?android:textAppearanceLarge</item>
         <item name="android:lineSpacingMultiplier">1.2</item>
     </style>
 
-    <style name="Widget.SampleButton" parent="android:Widget.Holo.Light.Button">
-        <item name="android:textAppearance">?android:textAppearanceLarge</item>
-        <item name="android:paddingTop">@dimen/margin_medium</item>
-        <item name="android:paddingBottom">@dimen/margin_medium</item>
-        <item name="android:paddingLeft">@dimen/margin_large</item>
-        <item name="android:paddingRight">@dimen/margin_large</item>
-    </style>
-
 </resources>
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values-sw720dp-land/dimens.xml b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values-sw720dp-land/dimens.xml
new file mode 100644
index 0000000..00059fc
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values-sw720dp-land/dimens.xml
@@ -0,0 +1,5 @@
+<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/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values-v11/styles.xml b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values-v11/styles.xml
new file mode 100644
index 0000000..c6c648b
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values-v11/styles.xml
@@ -0,0 +1,19 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+    <style name="Theme.Base" parent="android:Theme.Holo.Light" />
+</resources>
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values-v14/styles.xml b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values-v14/styles.xml
new file mode 100644
index 0000000..a91fd03
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values-v14/styles.xml
@@ -0,0 +1,12 @@
+<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/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values/dimens.xml b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..4f69897
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values/dimens.xml
@@ -0,0 +1,24 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <!-- Define standard dimensions to comply with Holo-style grids and rhythm. -->
+
+    <dimen name="margin_medium">16dp</dimen>
+    <dimen name="margin_huge">64dp</dimen>
+
+</resources>
diff --git a/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values/strings.xml b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values/strings.xml
new file mode 100755
index 0000000..ce1ad02
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values/strings.xml
@@ -0,0 +1,25 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+    <string name="app_name">Basic Gesture Detect</string>
+
+    <string name="intro_message">Welcome to Basic Gesture Detect!
+        In order to try this sample out, try dragging or tapping this text to see what happens!
+    </string>
+
+    <string name="clear_text">Clear Text</string>
+</resources>
diff --git a/ui/actionbar/DoneBar/res/values/styles.xml b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values/styles.xml
similarity index 70%
copy from ui/actionbar/DoneBar/res/values/styles.xml
copy to input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values/styles.xml
index 80895ef..4d9bb98 100644
--- a/ui/actionbar/DoneBar/res/values/styles.xml
+++ b/input/gestures/BasicGestureDetect/BasicGestureDetect/src/main/res/values/styles.xml
@@ -8,7 +8,7 @@
       http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
+  distributed under thegi License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
@@ -18,7 +18,7 @@
 
     <!-- Activity themes -->
 
-    <style name="Theme.Base" parent="android:Theme.Holo.Light" />
+    <style name="Theme.Base" parent="android:Theme.Light" />
 
     <style name="Theme.Sample" parent="Theme.Base" />
 
@@ -26,17 +26,15 @@
 
     <style name="Widget" />
 
-    <style name="Widget.SampleContentContainer">
+    <style name="Widget.SampleOutput">
         <item name="android:padding">@dimen/margin_medium</item>
-    </style>
-
-    <style name="Widget.SampleMessage">
         <item name="android:textAppearance">?android:textAppearanceMedium</item>
         <item name="android:lineSpacingMultiplier">1.1</item>
     </style>
 
-    <style name="Widget.SampleButton" parent="android:Widget.Holo.Light.Button">
-        <item name="android:textAppearance">?android:textAppearanceMedium</item>
+    <style name="Log" parent="Widget.SampleOutput">
+        <item name="android:typeface">monospace</item>
     </style>
 
+
 </resources>
diff --git a/input/gestures/BasicGestureDetect/build.gradle b/input/gestures/BasicGestureDetect/build.gradle
new file mode 100644
index 0000000..495c503
--- /dev/null
+++ b/input/gestures/BasicGestureDetect/build.gradle
@@ -0,0 +1 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
diff --git a/media/BasicMediaRouter/BasicMediaRouter/build.gradle b/media/BasicMediaRouter/BasicMediaRouter/build.gradle
new file mode 100644
index 0000000..87dbf18
--- /dev/null
+++ b/media/BasicMediaRouter/BasicMediaRouter/build.gradle
@@ -0,0 +1,19 @@
+buildscript {
+    repositories {
+        maven { url 'http://repo1.maven.org/maven2' }
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:0.5.+'
+    }
+}
+apply plugin: 'android'
+
+android {
+    compileSdkVersion 17
+    buildToolsVersion "17.0.0"
+
+    defaultConfig {
+        minSdkVersion 17
+        targetSdkVersion 17
+    }
+}
diff --git a/media/BasicMediaRouter/AndroidManifest.xml b/media/BasicMediaRouter/BasicMediaRouter/src/main/AndroidManifest.xml
similarity index 100%
rename from media/BasicMediaRouter/AndroidManifest.xml
rename to media/BasicMediaRouter/BasicMediaRouter/src/main/AndroidManifest.xml
diff --git a/media/BasicMediaRouter/src/com/example/android/media/basicmediarouter/MainActivity.java b/media/BasicMediaRouter/BasicMediaRouter/src/main/java/com/example/android/media/basicmediarouter/MainActivity.java
similarity index 100%
rename from media/BasicMediaRouter/src/com/example/android/media/basicmediarouter/MainActivity.java
rename to media/BasicMediaRouter/BasicMediaRouter/src/main/java/com/example/android/media/basicmediarouter/MainActivity.java
diff --git a/media/BasicMediaRouter/src/com/example/android/media/basicmediarouter/SamplePresentation.java b/media/BasicMediaRouter/BasicMediaRouter/src/main/java/com/example/android/media/basicmediarouter/SamplePresentation.java
similarity index 100%
rename from media/BasicMediaRouter/src/com/example/android/media/basicmediarouter/SamplePresentation.java
rename to media/BasicMediaRouter/BasicMediaRouter/src/main/java/com/example/android/media/basicmediarouter/SamplePresentation.java
diff --git a/media/BasicMediaRouter/res/drawable-hdpi/ic_launcher.png b/media/BasicMediaRouter/BasicMediaRouter/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from media/BasicMediaRouter/res/drawable-hdpi/ic_launcher.png
rename to media/BasicMediaRouter/BasicMediaRouter/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/media/BasicMediaRouter/res/drawable-mdpi/ic_launcher.png b/media/BasicMediaRouter/BasicMediaRouter/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from media/BasicMediaRouter/res/drawable-mdpi/ic_launcher.png
rename to media/BasicMediaRouter/BasicMediaRouter/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/media/BasicMediaRouter/res/drawable-xhdpi/ic_launcher.png b/media/BasicMediaRouter/BasicMediaRouter/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from media/BasicMediaRouter/res/drawable-xhdpi/ic_launcher.png
rename to media/BasicMediaRouter/BasicMediaRouter/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/media/BasicMediaRouter/res/drawable-xxhdpi/ic_launcher.png b/media/BasicMediaRouter/BasicMediaRouter/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from media/BasicMediaRouter/res/drawable-xxhdpi/ic_launcher.png
rename to media/BasicMediaRouter/BasicMediaRouter/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/media/BasicMediaRouter/res/layout/activity_main.xml b/media/BasicMediaRouter/BasicMediaRouter/src/main/res/layout/activity_main.xml
similarity index 100%
rename from media/BasicMediaRouter/res/layout/activity_main.xml
rename to media/BasicMediaRouter/BasicMediaRouter/src/main/res/layout/activity_main.xml
diff --git a/media/BasicMediaRouter/res/layout/display.xml b/media/BasicMediaRouter/BasicMediaRouter/src/main/res/layout/display.xml
similarity index 100%
rename from media/BasicMediaRouter/res/layout/display.xml
rename to media/BasicMediaRouter/BasicMediaRouter/src/main/res/layout/display.xml
diff --git a/media/BasicMediaRouter/res/menu/main.xml b/media/BasicMediaRouter/BasicMediaRouter/src/main/res/menu/main.xml
similarity index 100%
rename from media/BasicMediaRouter/res/menu/main.xml
rename to media/BasicMediaRouter/BasicMediaRouter/src/main/res/menu/main.xml
diff --git a/media/BasicMediaRouter/res/values-v11/styles.xml b/media/BasicMediaRouter/BasicMediaRouter/src/main/res/values-v11/styles.xml
similarity index 100%
rename from media/BasicMediaRouter/res/values-v11/styles.xml
rename to media/BasicMediaRouter/BasicMediaRouter/src/main/res/values-v11/styles.xml
diff --git a/media/BasicMediaRouter/res/values-v14/styles.xml b/media/BasicMediaRouter/BasicMediaRouter/src/main/res/values-v14/styles.xml
similarity index 100%
rename from media/BasicMediaRouter/res/values-v14/styles.xml
rename to media/BasicMediaRouter/BasicMediaRouter/src/main/res/values-v14/styles.xml
diff --git a/media/BasicMediaRouter/res/values/colors.xml b/media/BasicMediaRouter/BasicMediaRouter/src/main/res/values/colors.xml
similarity index 100%
rename from media/BasicMediaRouter/res/values/colors.xml
rename to media/BasicMediaRouter/BasicMediaRouter/src/main/res/values/colors.xml
diff --git a/media/BasicMediaRouter/res/values/strings.xml b/media/BasicMediaRouter/BasicMediaRouter/src/main/res/values/strings.xml
similarity index 100%
rename from media/BasicMediaRouter/res/values/strings.xml
rename to media/BasicMediaRouter/BasicMediaRouter/src/main/res/values/strings.xml
diff --git a/media/BasicMediaRouter/res/values/styles.xml b/media/BasicMediaRouter/BasicMediaRouter/src/main/res/values/styles.xml
similarity index 100%
rename from media/BasicMediaRouter/res/values/styles.xml
rename to media/BasicMediaRouter/BasicMediaRouter/src/main/res/values/styles.xml
diff --git a/media/BasicMediaRouter/build.gradle b/media/BasicMediaRouter/build.gradle
new file mode 100644
index 0000000..495c503
--- /dev/null
+++ b/media/BasicMediaRouter/build.gradle
@@ -0,0 +1 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
diff --git a/media/BasicMediaRouter/settings.gradle b/media/BasicMediaRouter/settings.gradle
new file mode 100644
index 0000000..327efd6
--- /dev/null
+++ b/media/BasicMediaRouter/settings.gradle
@@ -0,0 +1 @@
+include ':BasicMediaRouter'
\ No newline at end of file
diff --git a/networking/sync/BasicSyncAdapter/BasicSyncAdapter/build.gradle b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/build.gradle
new file mode 100644
index 0000000..2cb4273
--- /dev/null
+++ b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/build.gradle
@@ -0,0 +1,28 @@
+buildscript {
+    repositories {
+        maven { url 'http://repo1.maven.org/maven2' }
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:0.5.+'
+    }
+}
+apply plugin: 'android'
+
+repositories {
+    mavenCentral()
+}
+
+dependencies {
+    compile 'com.google.guava:guava:14.0.+'
+    compile files('libs/android-support-v4.jar')
+}
+
+android {
+    compileSdkVersion 17
+    buildToolsVersion "17.0.0"
+
+    defaultConfig {
+        minSdkVersion 7
+        targetSdkVersion 17
+    }
+}
diff --git a/networking/sync/BasicSyncAdapter/libs/android-support-v4.jar b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/libs/android-support-v4.jar
similarity index 100%
rename from networking/sync/BasicSyncAdapter/libs/android-support-v4.jar
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/libs/android-support-v4.jar
Binary files differ
diff --git a/networking/sync/BasicSyncAdapter/AndroidManifest.xml b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/AndroidManifest.xml
similarity index 100%
rename from networking/sync/BasicSyncAdapter/AndroidManifest.xml
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/AndroidManifest.xml
diff --git a/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/java/com/example/android/common b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/java/com/example/android/common
new file mode 120000
index 0000000..f98e04d
--- /dev/null
+++ b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/java/com/example/android/common
@@ -0,0 +1 @@
+../../../../../../../../../../common
\ No newline at end of file
diff --git a/networking/sync/BasicSyncAdapter/src/com/example/android/network/sync/basicsyncadapter/EntryListActivity.java b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/java/com/example/android/network/sync/basicsyncadapter/EntryListActivity.java
similarity index 100%
rename from networking/sync/BasicSyncAdapter/src/com/example/android/network/sync/basicsyncadapter/EntryListActivity.java
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/java/com/example/android/network/sync/basicsyncadapter/EntryListActivity.java
diff --git a/networking/sync/BasicSyncAdapter/src/com/example/android/network/sync/basicsyncadapter/EntryListFragment.java b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/java/com/example/android/network/sync/basicsyncadapter/EntryListFragment.java
similarity index 100%
rename from networking/sync/BasicSyncAdapter/src/com/example/android/network/sync/basicsyncadapter/EntryListFragment.java
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/java/com/example/android/network/sync/basicsyncadapter/EntryListFragment.java
diff --git a/networking/sync/BasicSyncAdapter/src/com/example/android/network/sync/basicsyncadapter/SyncAdapter.java b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/java/com/example/android/network/sync/basicsyncadapter/SyncAdapter.java
similarity index 100%
rename from networking/sync/BasicSyncAdapter/src/com/example/android/network/sync/basicsyncadapter/SyncAdapter.java
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/java/com/example/android/network/sync/basicsyncadapter/SyncAdapter.java
diff --git a/networking/sync/BasicSyncAdapter/src/com/example/android/network/sync/basicsyncadapter/SyncService.java b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/java/com/example/android/network/sync/basicsyncadapter/SyncService.java
similarity index 100%
rename from networking/sync/BasicSyncAdapter/src/com/example/android/network/sync/basicsyncadapter/SyncService.java
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/java/com/example/android/network/sync/basicsyncadapter/SyncService.java
diff --git a/networking/sync/BasicSyncAdapter/src/com/example/android/network/sync/basicsyncadapter/SyncUtils.java b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/java/com/example/android/network/sync/basicsyncadapter/SyncUtils.java
similarity index 100%
rename from networking/sync/BasicSyncAdapter/src/com/example/android/network/sync/basicsyncadapter/SyncUtils.java
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/java/com/example/android/network/sync/basicsyncadapter/SyncUtils.java
diff --git a/networking/sync/BasicSyncAdapter/src/com/example/android/network/sync/basicsyncadapter/net/FeedParser.java b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/java/com/example/android/network/sync/basicsyncadapter/net/FeedParser.java
similarity index 100%
rename from networking/sync/BasicSyncAdapter/src/com/example/android/network/sync/basicsyncadapter/net/FeedParser.java
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/java/com/example/android/network/sync/basicsyncadapter/net/FeedParser.java
diff --git a/networking/sync/BasicSyncAdapter/src/com/example/android/network/sync/basicsyncadapter/provider/FeedContract.java b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/java/com/example/android/network/sync/basicsyncadapter/provider/FeedContract.java
similarity index 100%
rename from networking/sync/BasicSyncAdapter/src/com/example/android/network/sync/basicsyncadapter/provider/FeedContract.java
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/java/com/example/android/network/sync/basicsyncadapter/provider/FeedContract.java
diff --git a/networking/sync/BasicSyncAdapter/src/com/example/android/network/sync/basicsyncadapter/provider/FeedProvider.java b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/java/com/example/android/network/sync/basicsyncadapter/provider/FeedProvider.java
similarity index 100%
rename from networking/sync/BasicSyncAdapter/src/com/example/android/network/sync/basicsyncadapter/provider/FeedProvider.java
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/java/com/example/android/network/sync/basicsyncadapter/provider/FeedProvider.java
diff --git a/networking/sync/BasicSyncAdapter/res/drawable-hdpi/ic_launcher.png b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from networking/sync/BasicSyncAdapter/res/drawable-hdpi/ic_launcher.png
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/networking/sync/BasicSyncAdapter/res/drawable-mdpi/ic_launcher.png b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from networking/sync/BasicSyncAdapter/res/drawable-mdpi/ic_launcher.png
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/networking/sync/BasicSyncAdapter/res/drawable-xhdpi/ic_action_refresh.png b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/drawable-xhdpi/ic_action_refresh.png
similarity index 100%
rename from networking/sync/BasicSyncAdapter/res/drawable-xhdpi/ic_action_refresh.png
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/drawable-xhdpi/ic_action_refresh.png
Binary files differ
diff --git a/networking/sync/BasicSyncAdapter/res/drawable-xhdpi/ic_launcher.png b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from networking/sync/BasicSyncAdapter/res/drawable-xhdpi/ic_launcher.png
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/networking/sync/BasicSyncAdapter/res/drawable-xxhdpi/ic_launcher.png b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from networking/sync/BasicSyncAdapter/res/drawable-xxhdpi/ic_launcher.png
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/networking/sync/BasicSyncAdapter/res/layout/actionbar_indeterminate_progress.xml b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/layout/actionbar_indeterminate_progress.xml
similarity index 100%
rename from networking/sync/BasicSyncAdapter/res/layout/actionbar_indeterminate_progress.xml
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/layout/actionbar_indeterminate_progress.xml
diff --git a/networking/sync/BasicSyncAdapter/res/layout/activity_entry_list.xml b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/layout/activity_entry_list.xml
similarity index 100%
rename from networking/sync/BasicSyncAdapter/res/layout/activity_entry_list.xml
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/layout/activity_entry_list.xml
diff --git a/networking/sync/BasicSyncAdapter/res/menu/main.xml b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/menu/main.xml
similarity index 100%
rename from networking/sync/BasicSyncAdapter/res/menu/main.xml
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/menu/main.xml
diff --git a/networking/sync/BasicSyncAdapter/res/values-v11/styles.xml b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/values-v11/styles.xml
similarity index 100%
rename from networking/sync/BasicSyncAdapter/res/values-v11/styles.xml
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/values-v11/styles.xml
diff --git a/networking/sync/BasicSyncAdapter/res/values-v14/styles.xml b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/values-v14/styles.xml
similarity index 100%
rename from networking/sync/BasicSyncAdapter/res/values-v14/styles.xml
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/values-v14/styles.xml
diff --git a/networking/sync/BasicSyncAdapter/res/values/attrs.xml b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/values/attrs.xml
similarity index 100%
rename from networking/sync/BasicSyncAdapter/res/values/attrs.xml
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/values/attrs.xml
diff --git a/networking/sync/BasicSyncAdapter/res/values/dimen.xml b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/values/dimen.xml
similarity index 100%
rename from networking/sync/BasicSyncAdapter/res/values/dimen.xml
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/values/dimen.xml
diff --git a/networking/sync/BasicSyncAdapter/res/values/strings.xml b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/values/strings.xml
similarity index 100%
rename from networking/sync/BasicSyncAdapter/res/values/strings.xml
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/values/strings.xml
diff --git a/networking/sync/BasicSyncAdapter/res/values/styles.xml b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/values/styles.xml
similarity index 100%
rename from networking/sync/BasicSyncAdapter/res/values/styles.xml
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/values/styles.xml
diff --git a/networking/sync/BasicSyncAdapter/res/xml/authenticator.xml b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/xml/authenticator.xml
similarity index 100%
rename from networking/sync/BasicSyncAdapter/res/xml/authenticator.xml
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/xml/authenticator.xml
diff --git a/networking/sync/BasicSyncAdapter/res/xml/syncadapter.xml b/networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/xml/syncadapter.xml
similarity index 100%
rename from networking/sync/BasicSyncAdapter/res/xml/syncadapter.xml
rename to networking/sync/BasicSyncAdapter/BasicSyncAdapter/src/main/res/xml/syncadapter.xml
diff --git a/networking/sync/BasicSyncAdapter/build.gradle b/networking/sync/BasicSyncAdapter/build.gradle
new file mode 100644
index 0000000..495c503
--- /dev/null
+++ b/networking/sync/BasicSyncAdapter/build.gradle
@@ -0,0 +1 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
diff --git a/networking/sync/BasicSyncAdapter/libs/guava-14.0.1.jar b/networking/sync/BasicSyncAdapter/libs/guava-14.0.1.jar
deleted file mode 100644
index 3a3d925..0000000
--- a/networking/sync/BasicSyncAdapter/libs/guava-14.0.1.jar
+++ /dev/null
Binary files differ
diff --git a/networking/sync/BasicSyncAdapter/proguard-project.txt b/networking/sync/BasicSyncAdapter/proguard-project.txt
deleted file mode 100644
index f2fe155..0000000
--- a/networking/sync/BasicSyncAdapter/proguard-project.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-# To enable ProGuard in your project, edit project.properties
-# to define the proguard.config property as described in that file.
-#
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in ${sdk.dir}/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the ProGuard
-# include property in project.properties.
-#
-# For more details, see
-#   http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-#   public *;
-#}
diff --git a/networking/sync/BasicSyncAdapter/settings.gradle b/networking/sync/BasicSyncAdapter/settings.gradle
new file mode 100644
index 0000000..5f2be67
--- /dev/null
+++ b/networking/sync/BasicSyncAdapter/settings.gradle
@@ -0,0 +1 @@
+include ':BasicSyncAdapter'
diff --git a/networking/sync/BasicSyncAdapter/src/com/example/android/common b/networking/sync/BasicSyncAdapter/src/com/example/android/common
deleted file mode 120000
index 943c4a2..0000000
--- a/networking/sync/BasicSyncAdapter/src/com/example/android/common
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../../../common/src/com/example/android/common
\ No newline at end of file
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/build.gradle b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/build.gradle
new file mode 100644
index 0000000..d4023a9
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/build.gradle
@@ -0,0 +1,23 @@
+buildscript {
+    repositories {
+        mavenCentral()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:0.4'
+    }
+}
+apply plugin: 'android'
+
+dependencies {
+    compile files('libs/android-support-v4.jar')
+}
+
+android {
+    compileSdkVersion 18
+    buildToolsVersion "17.0.0"
+
+    defaultConfig {
+        minSdkVersion 18
+        targetSdkVersion 18
+    }
+}
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/libs/android-support-v4.jar b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/libs/android-support-v4.jar
new file mode 100644
index 0000000..428bdbc
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/libs/android-support-v4.jar
Binary files differ
diff --git a/ui/actionbar/DoneBar/AndroidManifest.xml b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/AndroidManifest.xml
old mode 100755
new mode 100644
similarity index 70%
copy from ui/actionbar/DoneBar/AndroidManifest.xml
copy to security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/AndroidManifest.xml
index 5536a9b..7693ed1
--- a/ui/actionbar/DoneBar/AndroidManifest.xml
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/AndroidManifest.xml
@@ -15,31 +15,26 @@
   -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.donebar"
+    package="com.example.android.basicandroidkeystore"
     android:versionCode="1"
     android:versionName="1.0">
 
-    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17" />
+    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />
 
     <application android:label="@string/app_name"
         android:icon="@drawable/ic_launcher"
-        android:theme="@style/Theme.Sample"
-        android:allowBackup="true">
+        android:theme="@style/Theme.Sample">
 
         <activity android:name=".MainActivity"
-            android:label="@string/app_name">
+            android:label="@string/app_name"
+            android:uiOptions="splitActionBarWhenNarrow">
+
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
 
-        <activity android:name=".DoneBarActivity"
-            android:parentActivityName=".MainActivity" />
-
-        <activity android:name=".DoneButtonActivity"
-            android:parentActivityName=".MainActivity" />
-
     </application>
 
 </manifest>
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/basicandroidkeystore/KeyStoreHelper.java b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/basicandroidkeystore/KeyStoreHelper.java
new file mode 100644
index 0000000..7ccf733
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/basicandroidkeystore/KeyStoreHelper.java
@@ -0,0 +1,238 @@
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.basicandroidkeystore;
+
+import android.content.Context;
+import android.security.KeyPairGeneratorSpec;
+import android.util.Base64;
+
+import com.example.android.common.logger.Log;
+import com.example.android.common.SecurityConstants;
+
+import java.io.IOException;
+import java.math.BigInteger;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.Signature;
+import java.security.SignatureException;
+import java.security.UnrecoverableEntryException;
+import java.security.cert.CertificateException;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+
+import javax.security.auth.x500.X500Principal;
+
+public class KeyStoreHelper {
+
+    public static final String TAG = "KeyStoreHelper";
+
+    // You can store multiple key pairs in the Key Store.  The string used to refer to the Key you
+    // want to store, or later pull, is referred to as an "alias" in this case, because calling it
+    // a key, when you use it to retrieve a key, would just be irritating.
+    private String mAlias = null;
+
+    /**
+     * Creates a public and private key and stores it using the Android Key Store, so that only
+     * this application will be able to access the keys.
+     */
+    public void createKeys(Context context) throws NoSuchProviderException,
+            NoSuchAlgorithmException, InvalidAlgorithmParameterException {
+        // BEGIN_INCLUDE(create_valid_dates)
+        // Create a start and end time, for the validity range of the key pair that's about to be
+        // generated.
+        Calendar start = new GregorianCalendar();
+        Calendar end = new GregorianCalendar();
+        end.add(1, Calendar.YEAR);
+        //END_INCLUDE(create_valid_dates)
+
+
+        // BEGIN_INCLUDE(create_spec)
+        // The KeyPairGeneratorSpec object is how parameters for your key pair are passed
+        // to the KeyPairGenerator.  For a fun home game, count how many classes in this sample
+        // start with the phrase "KeyPair".
+        KeyPairGeneratorSpec spec =
+                new KeyPairGeneratorSpec.Builder(context)
+                        // You'll use the alias later to retrieve the key.  It's a key for the key!
+                        .setAlias(mAlias)
+                        // The subject used for the self-signed certificate of the generated pair
+                        .setSubject(new X500Principal("CN=" + mAlias))
+                        // The serial number used for the self-signed certificate of the
+                        // generated pair.
+                        .setSerialNumber(BigInteger.valueOf(1337))
+                        // Date range of validity for the generated pair.
+                        .setStartDate(start.getTime())
+                        .setEndDate(end.getTime())
+                        .build();
+        // END_INCLUDE(create_spec)
+
+
+        // BEGIN_INCLUDE(create_keypair)
+
+        // Initialize a KeyPair generator using the the intended algorithm (in this example, RSA
+        // and the KeyStore.  This example uses the AndroidKeyStore.
+        KeyPairGenerator kpGenerator = KeyPairGenerator
+                .getInstance(SecurityConstants.TYPE_RSA,
+                        SecurityConstants.KEYSTORE_PROVIDER_ANDROID_KEYSTORE);
+        kpGenerator.initialize(spec);
+        KeyPair kp = kpGenerator.generateKeyPair();
+        Log.d(TAG, "Public Key is: " + kp.getPublic().toString());
+        // END_INCLUDE(create_keypair)
+
+
+    }
+
+    /**
+     * Signs the data using the key pair stored in the Android Key Store.  This signature can be
+     * used with the data later to verify it was signed by this application.
+     * @return A string encoding of the data signature generated
+     */
+    public String signData(String inputStr) throws KeyStoreException,
+            UnrecoverableEntryException, NoSuchAlgorithmException, InvalidKeyException,
+            SignatureException, IOException, CertificateException {
+        byte[] data = inputStr.getBytes();
+
+        // BEGIN_INCLUDE(sign_load_keystore)
+        KeyStore ks = KeyStore.getInstance(SecurityConstants.KEYSTORE_PROVIDER_ANDROID_KEYSTORE);
+
+        // Weird artifact of Java API.  If you don't have an InputStream to load, you still need
+        // to call "load", or it'll crash.
+        ks.load(null);
+
+        // Load the key pair from the Android Key Store
+        KeyStore.Entry entry = ks.getEntry(mAlias, null);
+
+        /* If the entry is null, keys were never stored under this alias.
+         * Debug steps in this situation would be:
+         * -Check the list of aliases by iterating over Keystore.aliases(), be sure the alias
+         *   exists.
+         * -If that's empty, verify they were both stored and pulled from the same keystore
+         *   "AndroidKeyStore"
+         */
+        if (entry == null) {
+            Log.w(TAG, "No key found under alias: " + mAlias);
+            Log.w(TAG, "Exiting signData()...");
+            return null;
+        }
+
+        /* If entry is not a KeyStore.PrivateKeyEntry, it might have gotten stored in a previous
+         * iteration of your application that was using some other mechanism, or been overwritten
+         * by something else using the same keystore with the same alias.
+         * You can determine the type using entry.getClass() and debug from there.
+         */
+        if (!(entry instanceof KeyStore.PrivateKeyEntry)) {
+            Log.w(TAG, "Not an instance of a PrivateKeyEntry");
+            Log.w(TAG, "Exiting signData()...");
+            return null;
+        }
+        // END_INCLUDE(sign_data)
+
+        // BEGIN_INCLUDE(sign_create_signature)
+        // This class doesn't actually represent the signature,
+        // just the engine for creating/verifying signatures, using
+        // the specified algorithm.
+        Signature s = Signature.getInstance(SecurityConstants.SIGNATURE_SHA256withRSA);
+
+        // Initialize Signature using specified private key
+        s.initSign(((KeyStore.PrivateKeyEntry) entry).getPrivateKey());
+
+        // Sign the data, store the result as a Base64 encoded String.
+        s.update(data);
+        byte[] signature = s.sign();
+        String result = null;
+        result = Base64.encodeToString(signature, Base64.DEFAULT);
+        // END_INCLUDE(sign_data)
+
+        return result;
+    }
+
+    /**
+     * Given some data and a signature, uses the key pair stored in the Android Key Store to verify
+     * that the data was signed by this application, using that key pair.
+     * @param input The data to be verified.
+     * @param signatureStr The signature provided for the data.
+     * @return A boolean value telling you whether the signature is valid or not.
+     */
+    public boolean verifyData(String input, String signatureStr) throws KeyStoreException,
+            CertificateException, NoSuchAlgorithmException, IOException,
+            UnrecoverableEntryException, InvalidKeyException, SignatureException {
+        byte[] data = input.getBytes();
+        byte[] signature;
+        // BEGIN_INCLUDE(decode_signature)
+
+        // Make sure the signature string exists.  If not, bail out, nothing to do.
+
+        if (signatureStr == null) {
+            Log.w(TAG, "Invalid signature.");
+            Log.w(TAG, "Exiting verifyData()...");
+            return false;
+        }
+
+        try {
+            // The signature is going to be examined as a byte array,
+            // not as a base64 encoded string.
+            signature = Base64.decode(signatureStr, Base64.DEFAULT);
+        } catch (IllegalArgumentException e) {
+            // signatureStr wasn't null, but might not have been encoded properly.
+            // It's not a valid Base64 string.
+            return false;
+        }
+        // END_INCLUDE(decode_signature)
+
+        KeyStore ks = KeyStore.getInstance("AndroidKeyStore");
+
+        // Weird artifact of Java API.  If you don't have an InputStream to load, you still need
+        // to call "load", or it'll crash.
+        ks.load(null);
+
+        // Load the key pair from the Android Key Store
+        KeyStore.Entry entry = ks.getEntry(mAlias, null);
+
+        if (entry == null) {
+            Log.w(TAG, "No key found under alias: " + mAlias);
+            Log.w(TAG, "Exiting verifyData()...");
+            return false;
+        }
+
+        if (!(entry instanceof KeyStore.PrivateKeyEntry)) {
+            Log.w(TAG, "Not an instance of a PrivateKeyEntry");
+            return false;
+        }
+
+        // This class doesn't actually represent the signature,
+        // just the engine for creating/verifying signatures, using
+        // the specified algorithm.
+        Signature s = Signature.getInstance(SecurityConstants.SIGNATURE_SHA256withRSA);
+
+        // BEGIN_INCLUDE(verify_data)
+        // Verify the data.
+        s.initVerify(((KeyStore.PrivateKeyEntry) entry).getCertificate());
+        s.update(data);
+        boolean valid = s.verify(signature);
+        return valid;
+        // END_INCLUDE(verify_data)
+    }
+
+    public void setAlias(String alias) {
+        mAlias = alias;
+    }
+}
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/basicandroidkeystore/LogFragment.java b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/basicandroidkeystore/LogFragment.java
new file mode 100644
index 0000000..23d4da7
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/basicandroidkeystore/LogFragment.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.basicandroidkeystore;
+
+import com.example.android.common.logger.LogView;
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ScrollView;
+
+/**
+ * Simple fraggment which contains a LogView and uses is to output log data it receives
+ * through the LogNode interface.
+ */
+public class LogFragment extends Fragment {
+
+    private LogView mLogView;
+
+    public LogFragment() {}
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+
+        View result = inflater.inflate(R.layout.log_fragment, container, false);
+
+        mLogView = (LogView) result.findViewById(R.id.sample_output);
+
+        // Wire up so when the text changes, the view scrolls down.
+        final ScrollView scrollView =
+                ((ScrollView) result.findViewById(R.id.log_scroll));
+
+        mLogView.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+                scrollView.fullScroll(ScrollView.FOCUS_DOWN);
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+                scrollView.fullScroll(ScrollView.FOCUS_DOWN);
+            }
+        });
+
+        return result;
+    }
+
+    public LogView getLogView() {
+        return mLogView;
+    }
+}
\ No newline at end of file
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/basicandroidkeystore/MainActivity.java b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/basicandroidkeystore/MainActivity.java
new file mode 100644
index 0000000..33af4e5
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/basicandroidkeystore/MainActivity.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.basicandroidkeystore;
+
+import android.os.Bundle;
+import android.support.v4.app.FragmentActivity;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import com.example.android.common.SimpleTextFragment;
+import com.example.android.common.logger.LogWrapper;
+import com.example.android.common.logger.MessageOnlyLogFilter;
+import com.example.android.common.logger.Log;
+
+import java.io.IOException;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.SignatureException;
+import java.security.UnrecoverableEntryException;
+import java.security.cert.CertificateException;
+
+public class MainActivity extends FragmentActivity {
+
+    public final static String TAG = "MainActivity";
+    public LogFragment mLogFragment;
+
+    public KeyStoreHelper mKeyStoreHelper;
+
+
+    // BEGIN_INCLUDE(values)
+    // You can store multiple key pairs in the Key Store.  The string used to refer to the Key you
+    // want to store, or later pull, is referred to as an "alias" in this case, because calling it
+    // a key, when you use it to retrieve a key, would just be irritating.
+    public static final String ALIAS = "myKey";
+
+    // Some sample data to sign, and later verify using the generated signature.
+    public static final String SAMPLE_INPUT="Hello, Android!";
+
+    // Just a handy place to store the signature in between signing and verifying.
+    public String mSignatureStr = null;
+    // END_INCLUDE(values)
+
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+
+        SimpleTextFragment actionFragment =
+                (SimpleTextFragment) getSupportFragmentManager()
+                        .findFragmentById(R.id.intro_fragment);
+        actionFragment.setText(R.string.intro_message);
+
+        mKeyStoreHelper = new KeyStoreHelper();
+        mKeyStoreHelper.setAlias(ALIAS);
+        initializeLogging();
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        getMenuInflater().inflate(R.menu.main, menu);
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            case R.id.btn_create_keys:
+                try {
+                    mKeyStoreHelper.createKeys(this);
+                    Log.d(TAG, "Keys created");
+                    return true;
+                } catch (NoSuchAlgorithmException e) {
+                    Log.w(TAG, "RSA not supported", e);
+                } catch (InvalidAlgorithmParameterException e) {
+                    Log.w(TAG, "No such provider: AndroidKeyStore");
+                } catch (NoSuchProviderException e) {
+                    Log.w(TAG, "Invalid Algorithm Parameter Exception", e);
+                }
+                return true;
+            case R.id.btn_sign_data:
+                try {
+                    mSignatureStr = mKeyStoreHelper.signData(SAMPLE_INPUT);
+                } catch (KeyStoreException e) {
+                    Log.w(TAG, "KeyStore not Initialized", e);
+                } catch (UnrecoverableEntryException e) {
+                    Log.w(TAG, "KeyPair not recovered", e);
+                } catch (NoSuchAlgorithmException e) {
+                    Log.w(TAG, "RSA not supported", e);
+                } catch (InvalidKeyException e) {
+                    Log.w(TAG, "Invalid Key", e);
+                } catch (SignatureException e) {
+                    Log.w(TAG, "Invalid Signature", e);
+                } catch (IOException e) {
+                    Log.w(TAG, "IO Exception", e);
+                } catch (CertificateException e) {
+                    Log.w(TAG, "Error occurred while loading certificates", e);
+                }
+                Log.d(TAG, "Signature: " + mSignatureStr);
+                return true;
+
+            case R.id.btn_verify_data:
+                boolean verified = false;
+                try {
+                    if (mSignatureStr != null) {
+                        verified = mKeyStoreHelper.verifyData(SAMPLE_INPUT, mSignatureStr);
+                    }
+                } catch (KeyStoreException e) {
+                    Log.w(TAG, "KeyStore not Initialized", e);
+                } catch (CertificateException e) {
+                    Log.w(TAG, "Error occurred while loading certificates", e);
+                } catch (NoSuchAlgorithmException e) {
+                    Log.w(TAG, "RSA not supported", e);
+                } catch (IOException e) {
+                    Log.w(TAG, "IO Exception", e);
+                } catch (UnrecoverableEntryException e) {
+                    Log.w(TAG, "KeyPair not recovered", e);
+                } catch (InvalidKeyException e) {
+                    Log.w(TAG, "Invalid Key", e);
+                } catch (SignatureException e) {
+                    Log.w(TAG, "Invalid Signature", e);
+                }
+                if (verified) {
+                    Log.d(TAG, "Data Signature Verified");
+                } else {
+                    Log.d(TAG, "Data not verified.");
+                }
+                return true;
+        }
+        return false;
+    }
+
+    /** Create a chain of targets that will receive log data */
+    public void initializeLogging() {
+        // Using Log, front-end to the logging chain, emulates android.util.log method signatures.
+        // Wraps Android's native log framework
+        LogWrapper logWrapper = new LogWrapper();
+        Log.setLogNode(logWrapper);
+
+        // A filter that strips out everything except the message text
+        MessageOnlyLogFilter msgFilter = new MessageOnlyLogFilter();
+        logWrapper.setNext(msgFilter);
+
+        // On screen logging via a fragment with a TextView
+        mLogFragment = (LogFragment) getSupportFragmentManager().findFragmentById(R.id.log_fragment);
+        msgFilter.setNext(mLogFragment.getLogView());
+        Log.i(TAG, "Ready");
+    }
+}
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/SecurityConstants.java b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/SecurityConstants.java
new file mode 100644
index 0000000..e23110c
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/SecurityConstants.java
@@ -0,0 +1,34 @@
+package com.example.android.common;
+
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Helper class, contains several constants used when encrypting/decrypting data on Android.
+ * This class should not be considered a complete list of the algorithms, keystore types,
+ * or signature types within the Android Platform, only the more common ones.
+ */
+public class SecurityConstants {
+    public static final String KEYSTORE_PROVIDER_ANDROID_KEYSTORE = "AndroidKeyStore";
+
+    public static final String TYPE_RSA = "RSA";
+    public static final String TYPE_DSA = "DSA";
+    public static final String TYPE_BKS = "BKS";
+
+    public static final String SIGNATURE_SHA256withRSA = "SHA256withRSA";
+    public static final String SIGNATURE_SHA512withRSA = "SHA512withRSA";
+
+}
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/SimpleTextFragment.java b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/SimpleTextFragment.java
new file mode 100644
index 0000000..2895ea0
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/SimpleTextFragment.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software	
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.	
+ * See the License for the specific language governing permissions and	
+ * limitations under the License.	
+ */
+
+package com.example.android.common;
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+/**
+ * Simple fragment containing only a TextView.  Used by TextPagerAdapter to create
+ * tutorial-style pages for apps.
+ */
+public class SimpleTextFragment extends Fragment {
+
+    // Contains the text that will be displayed by this Fragment 	
+    String mText;
+
+    // Contains a resource ID for the text that will be displayed by this fragment. 	
+    int mTextId = -1;
+
+    // Keys which will be used to store/retrieve text passed in via setArguments. 	
+    public static final String TEXT_KEY = "text";
+    public static final String TEXT_ID_KEY = "text_id";
+
+    // For situations where the app wants to modify text at Runtime, exposing the TextView. 	
+    private TextView mTextView;
+
+    public SimpleTextFragment() {
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+                             Bundle savedInstanceState) {
+        // Before initializing the textView, check if any arguments were provided via setArguments. 	
+        processArguments();
+
+        // Create a new TextView and set its text to whatever was provided. 	
+        mTextView = new TextView(getActivity());
+
+        if (mText != null) {
+            mTextView.setText(mText);
+            Log.i("SimpleTextFragment", mText);
+        }
+        return mTextView;
+    }
+
+    public TextView getTextView() {
+        return mTextView;
+    }
+
+    /**
+     * Changes the text for this TextView, according to the resource ID provided.
+     *
+     * @param stringId A resource ID representing the text content for this Fragment's TextView.
+     */
+    public void setText(int stringId) {
+        getTextView().setText(getActivity().getString(stringId));
+    }
+
+    /**
+     * Processes the arguments passed into this Fragment via setArguments method.
+     * Currently the method only looks for text or a textID, nothing else.
+     */
+    public void processArguments() {
+        // For most objects we'd handle the multiple possibilities for initialization variables 	
+        // as multiple constructors.  For Fragments, however, it's customary to use 	
+        // setArguments / getArguments. 	
+        if (getArguments() != null) {
+            Bundle args = getArguments();
+            if (args.containsKey(TEXT_KEY)) {
+                mText = args.getString(TEXT_KEY);
+                Log.d("Constructor", "Added Text.");
+            } else if (args.containsKey(TEXT_ID_KEY)) {
+                mTextId = args.getInt(TEXT_ID_KEY);
+                mText = getString(mTextId);
+            }
+        }
+    }
+} 
\ No newline at end of file
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/logger/Log.java b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/logger/Log.java
new file mode 100644
index 0000000..17503c5
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/logger/Log.java
@@ -0,0 +1,236 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.example.android.common.logger;
+
+/**
+ * Helper class for a list (or tree) of LoggerNodes.
+ *
+ * <p>When this is set as the head of the list,
+ * an instance of it can function as a drop-in replacement for {@link android.util.Log}.
+ * Most of the methods in this class server only to map a method call in Log to its equivalent
+ * in LogNode.</p>
+ */
+public class Log {
+    // Grabbing the native values from Android's native logging facilities,
+    // to make for easy migration and interop.
+    public static final int NONE = -1;
+    public static final int VERBOSE = android.util.Log.VERBOSE;
+    public static final int DEBUG = android.util.Log.DEBUG;
+    public static final int INFO = android.util.Log.INFO;
+    public static final int WARN = android.util.Log.WARN;
+    public static final int ERROR = android.util.Log.ERROR;
+    public static final int ASSERT = android.util.Log.ASSERT;
+
+    // Stores the beginning of the LogNode topology.
+    private static LogNode mLogNode;
+
+    /**
+     * Returns the next LogNode in the linked list.
+     */
+    public static LogNode getLogNode() {
+        return mLogNode;
+    }
+
+    /**
+     * Sets the LogNode data will be sent to.
+     */
+    public static void setLogNode(LogNode node) {
+        mLogNode = node;
+    }
+
+    /**
+     * Instructs the LogNode to print the log data provided. Other LogNodes can
+     * be chained to the end of the LogNode as desired.
+     *
+     * @param priority Log level of the data being logged. Verbose, Error, etc.
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void println(int priority, String tag, String msg, Throwable tr) {
+        if (mLogNode != null) {
+            mLogNode.println(priority, tag, msg, tr);
+        }
+    }
+
+    /**
+     * Instructs the LogNode to print the log data provided. Other LogNodes can
+     * be chained to the end of the LogNode as desired.
+     *
+     * @param priority Log level of the data being logged. Verbose, Error, etc.
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged. The actual message to be logged.
+     */
+    public static void println(int priority, String tag, String msg) {
+        println(priority, tag, msg, null);
+    }
+
+   /**
+     * Prints a message at VERBOSE priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void v(String tag, String msg, Throwable tr) {
+        println(VERBOSE, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at VERBOSE priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void v(String tag, String msg) {
+        v(tag, msg, null);
+    }
+
+
+    /**
+     * Prints a message at DEBUG priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void d(String tag, String msg, Throwable tr) {
+        println(DEBUG, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at DEBUG priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void d(String tag, String msg) {
+        d(tag, msg, null);
+    }
+
+    /**
+     * Prints a message at INFO priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void i(String tag, String msg, Throwable tr) {
+        println(INFO, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at INFO priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void i(String tag, String msg) {
+        i(tag, msg, null);
+    }
+
+    /**
+     * Prints a message at WARN priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void w(String tag, String msg, Throwable tr) {
+        println(WARN, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at WARN priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void w(String tag, String msg) {
+        w(tag, msg, null);
+    }
+
+    /**
+     * Prints a message at WARN priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void w(String tag, Throwable tr) {
+        w(tag, null, tr);
+    }
+
+    /**
+     * Prints a message at ERROR priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void e(String tag, String msg, Throwable tr) {
+        println(ERROR, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at ERROR priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void e(String tag, String msg) {
+        e(tag, msg, null);
+    }
+
+    /**
+     * Prints a message at ASSERT priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void wtf(String tag, String msg, Throwable tr) {
+        println(ASSERT, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at ASSERT priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void wtf(String tag, String msg) {
+        wtf(tag, msg, null);
+    }
+
+    /**
+     * Prints a message at ASSERT priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void wtf(String tag, Throwable tr) {
+        wtf(tag, null, tr);
+    }
+}
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/logger/LogNode.java b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/logger/LogNode.java
new file mode 100644
index 0000000..bc37cab
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/logger/LogNode.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.example.android.common.logger;
+
+/**
+ * Basic interface for a logging system that can output to one or more targets.
+ * Note that in addition to classes that will output these logs in some format,
+ * one can also implement this interface over a filter and insert that in the chain,
+ * such that no targets further down see certain data, or see manipulated forms of the data.
+ * You could, for instance, write a "ToHtmlLoggerNode" that just converted all the log data
+ * it received to HTML and sent it along to the next node in the chain, without printing it
+ * anywhere.
+ */
+public interface LogNode {
+
+    /**
+     * Instructs first LogNode in the list to print the log data provided.
+     * @param priority Log level of the data being logged.  Verbose, Error, etc.
+     * @param tag Tag for for the log data.  Can be used to organize log statements.
+     * @param msg The actual message to be logged. The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public void println(int priority, String tag, String msg, Throwable tr);
+
+}
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/logger/LogView.java b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/logger/LogView.java
new file mode 100644
index 0000000..dfe7648
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/logger/LogView.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.example.android.common.logger;
+
+import android.content.Context;
+import android.text.method.ScrollingMovementMethod;
+import android.util.*;
+import android.widget.TextView;
+
+/**
+ * Created by alexlucas on 6/4/13.
+ */
+
+
+public class LogView extends TextView implements LogNode {
+
+    public LogView(Context context) {
+        super(context);
+    }
+
+    public LogView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public LogView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    /**
+     * Formats the log data and prints it out to the LogView.
+     * @param priority Log level of the data being logged.  Verbose, Error, etc.
+     * @param tag Tag for for the log data.  Can be used to organize log statements.
+     * @param msg The actual message to be logged. The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    @Override
+    public void println(int priority, String tag, String msg, Throwable tr) {
+        String priorityStr = null;
+
+        // For the purposes of this View, we want to print the priority as readable text.
+        switch(priority) {
+            case android.util.Log.VERBOSE:
+                priorityStr = "VERBOSE";
+                break;
+            case android.util.Log.DEBUG:
+                priorityStr = "DEBUG";
+                break;
+            case android.util.Log.INFO:
+                priorityStr = "INFO";
+                break;
+            case android.util.Log.WARN:
+                priorityStr = "WARN";
+                break;
+            case android.util.Log.ERROR:
+                priorityStr = "ERROR";
+                break;
+            case android.util.Log.ASSERT:
+                priorityStr = "ASSERT";
+                break;
+            default:
+                break;
+        }
+
+        // Handily, the Log class has a facility for converting a stack trace into a useable string.
+        String exceptionStr = null;
+        if (tr != null) {
+            exceptionStr = android.util.Log.getStackTraceString(tr);
+        }
+
+        // Take the priority, tag, message, and exception, and concatenate as necessary
+        // into one usable line of text.
+        StringBuilder outputBuilder = new StringBuilder();
+
+        String delimiter = "\t";
+
+        appendIfNotNull(outputBuilder, priorityStr, delimiter);
+        appendIfNotNull(outputBuilder, tag, delimiter);
+        appendIfNotNull(outputBuilder, msg, delimiter);
+        appendIfNotNull(outputBuilder, exceptionStr, delimiter);
+
+        // Actually display the text we just generated within the LogView.
+        appendToLog(outputBuilder.toString());
+
+        if (mNext != null) {
+            mNext.println(priority, tag, msg, tr);
+        }
+    }
+
+    public LogNode getNext() {
+        return mNext;
+    }
+
+    public void setNext(LogNode node) {
+        mNext = node;
+    }
+
+    /** Takes a string and adds to it, with a seperator, if the bit to be added isn't null. Since
+     * the logger takes so many arguments that might be null, this method helps cut out some of the
+     * agonizing tedium of writing the same 3 lines over and over.
+     * @param source Stringbuilder containing the text to append to.
+     * @param addStrStr The String to append
+     * @param delimiter The String to seperate the source and appendee strings. A tab or comma,
+     *                  for instance.
+     * @return The fully concatenated String as a StringBuilder
+     */
+    private StringBuilder appendIfNotNull(StringBuilder source, String addStr, String delimiter) {
+        if (addStr != null) {
+            if (addStr.length() == 0) {
+                delimiter = "";
+            }
+
+            return source.append(addStr).append(delimiter);
+        }
+        return source;
+    }
+
+    // The next LogNode in the chain.
+    LogNode mNext;
+
+    /** Outputs the string as a new line of log data in the LogView. */
+    public void appendToLog(String s) {
+        append(s + "\n");
+    }
+
+
+}
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/logger/LogWrapper.java b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/logger/LogWrapper.java
new file mode 100644
index 0000000..16a9e7b
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/logger/LogWrapper.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.example.android.common.logger;
+
+import android.util.Log;
+
+/**
+ * Helper class which wraps Android's native Log utility in the Logger interface.  This way
+ * normal DDMS output can be one of the many targets receiving and outputting logs simultaneously.
+ */
+public class LogWrapper implements LogNode {
+
+    // For piping:  The next node to receive Log data after this one has done its work.
+    private LogNode mNext;
+
+    /**
+     * Returns the next LogNode in the linked list.
+     */
+    public LogNode getNext() {
+        return mNext;
+    }
+
+    /**
+     * Sets the LogNode data will be sent to..
+     */
+    public void setNext(LogNode node) {
+        mNext = node;
+    }
+
+    /**
+     * Prints data out to the console using Android's native log mechanism.
+     * @param priority Log level of the data being logged.  Verbose, Error, etc.
+     * @param tag Tag for for the log data.  Can be used to organize log statements.
+     * @param msg The actual message to be logged. The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    @Override
+    public void println(int priority, String tag, String msg, Throwable tr) {
+        // There actually are log methods that don't take a msg parameter.  For now,
+        // if that's the case, just convert null to the empty string and move on.
+        String useMsg = msg;
+        if (useMsg == null) {
+            useMsg = "";
+        }
+
+        // If an exeption was provided, convert that exception to a usable string and attach
+        // it to the end of the msg method.
+        if (tr != null) {
+            msg += "\n" + Log.getStackTraceString(tr);
+        }
+
+        // This is functionally identical to Log.x(tag, useMsg);
+        // For instance, if priority were Log.VERBOSE, this would be the same as Log.v(tag, useMsg)
+        Log.println(priority, tag, useMsg);
+
+        // If this isn't the last node in the chain, move things along.
+        if (mNext != null) {
+            mNext.println(priority, tag, msg, tr);
+        }
+    }
+}
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/logger/MessageOnlyLogFilter.java b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/logger/MessageOnlyLogFilter.java
new file mode 100644
index 0000000..19967dc
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/java/com/example/android/common/logger/MessageOnlyLogFilter.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.example.android.common.logger;
+
+/**
+ * Simple {@link LogNode} filter, removes everything except the message.
+ * Useful for situations like on-screen log output where you don't want a lot of metadata displayed,
+ * just easy-to-read message updates as they're happening.
+ */
+public class MessageOnlyLogFilter implements LogNode {
+
+    LogNode mNext;
+
+    /**
+     * Takes the "next" LogNode as a parameter, to simplify chaining.
+     *
+     * @param next The next LogNode in the pipeline.
+     */
+    public MessageOnlyLogFilter(LogNode next) {
+        mNext = next;
+    }
+
+    public MessageOnlyLogFilter() {
+    }
+
+    @Override
+    public void println(int priority, String tag, String msg, Throwable tr) {
+        if (mNext != null) {
+            getNext().println(Log.NONE, null, msg, null);
+        }
+    }
+
+    /**
+     * Returns the next LogNode in the chain.
+     */
+    public LogNode getNext() {
+        return mNext;
+    }
+
+    /**
+     * Sets the LogNode data will be sent to..
+     */
+    public void setNext(LogNode node) {
+        mNext = node;
+    }
+
+}
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/drawable-hdpi/ic_launcher.png b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/drawable-hdpi/ic_launcher.png
new file mode 100755
index 0000000..22ce606
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/drawable-mdpi/ic_launcher.png b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/drawable-mdpi/ic_launcher.png
new file mode 100755
index 0000000..f21e17b
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/drawable-xhdpi/ic_launcher.png b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/drawable-xhdpi/ic_launcher.png
new file mode 100755
index 0000000..64b8059
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/drawable-xxhdpi/ic_launcher.png b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/drawable-xxhdpi/ic_launcher.png
new file mode 100755
index 0000000..6b4434a
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/layout/activity_main.xml b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/layout/activity_main.xml
new file mode 100755
index 0000000..a86e2b0
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/layout/activity_main.xml
@@ -0,0 +1,38 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<LinearLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:orientation="vertical"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent">
+<fragment
+        android:name="com.example.android.common.SimpleTextFragment"
+        android:id="@+id/intro_fragment"
+        android:layout_weight="1"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+<View
+        android:layout_width="fill_parent"
+        android:layout_height="1dp"
+        android:background="@android:color/darker_gray"/>
+<fragment
+        android:name="com.example.android.basicandroidkeystore.LogFragment"
+        android:id="@+id/log_fragment"
+        android:layout_weight="1"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+        </LinearLayout>
\ No newline at end of file
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/layout/log_fragment.xml b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/layout/log_fragment.xml
new file mode 100644
index 0000000..f2d7b75
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/layout/log_fragment.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+       
+        <!--
+          Copyright 2013 The Android Open Source Project
+       
+          Licensed under the Apache License, Version 2.0 (the "License");
+          you may not use this file except in compliance with the License.
+          You may obtain a copy of the License at
+       
+              http://www.apache.org/licenses/LICENSE-2.0	
+        
+          Unless required by applicable law or agreed to in writing, software	
+          distributed under the License is distributed on an "AS IS" BASIS,	
+          WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.	
+          See the License for the specific language governing permissions and	
+          limitations under the License.	
+          -->	
+        
+<ScrollView
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/log_scroll"	
+        android:layout_width="match_parent"	
+        android:layout_height="match_parent">	
+        
+        <com.example.android.common.logger.LogView
+                android:id="@+id/sample_output"
+                style="@style/Log"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:clickable="true"
+                android:focusable="true"
+                android:text=""
+                android:gravity="bottom" />
+</ScrollView>
\ No newline at end of file
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/menu/main.xml b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/menu/main.xml
new file mode 100644
index 0000000..74435ca
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/menu/main.xml
@@ -0,0 +1,30 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:id="@+id/btn_create_keys"
+          android:showAsAction="always"
+          android:title="@string/str_create_keys" />
+
+    <item android:id="@+id/btn_sign_data"
+          android:showAsAction="always"
+          android:title="@string/str_sign_data" />
+
+    <item android:id="@+id/btn_verify_data"
+          android:showAsAction="always"
+          android:title="@string/str_verify_data" />
+
+</menu>
diff --git a/ui/actionbar/DoneBar/res/values-sw600dp/styles.xml b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/values-sw600dp/styles.xml
similarity index 65%
copy from ui/actionbar/DoneBar/res/values-sw600dp/styles.xml
copy to security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/values-sw600dp/styles.xml
index 8b7fa45..ffcbe8a 100644
--- a/ui/actionbar/DoneBar/res/values-sw600dp/styles.xml
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/values-sw600dp/styles.xml
@@ -16,24 +16,13 @@
 
 <resources>
 
-    <style name="Widget.SampleContentContainer">
+    <style name="Widget.SampleOutput">
         <item name="android:paddingTop">@dimen/margin_medium</item>
         <item name="android:paddingBottom">@dimen/margin_medium</item>
         <item name="android:paddingLeft">@dimen/margin_huge</item>
         <item name="android:paddingRight">@dimen/margin_huge</item>
-    </style>
-
-    <style name="Widget.SampleMessage">
         <item name="android:textAppearance">?android:textAppearanceLarge</item>
         <item name="android:lineSpacingMultiplier">1.2</item>
     </style>
 
-    <style name="Widget.SampleButton" parent="android:Widget.Holo.Light.Button">
-        <item name="android:textAppearance">?android:textAppearanceLarge</item>
-        <item name="android:paddingTop">@dimen/margin_medium</item>
-        <item name="android:paddingBottom">@dimen/margin_medium</item>
-        <item name="android:paddingLeft">@dimen/margin_large</item>
-        <item name="android:paddingRight">@dimen/margin_large</item>
-    </style>
-
 </resources>
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/values-v11/styles.xml b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/values-v11/styles.xml
new file mode 100644
index 0000000..c6c648b
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/values-v11/styles.xml
@@ -0,0 +1,19 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+    <style name="Theme.Base" parent="android:Theme.Holo.Light" />
+</resources>
diff --git a/ui/actionbar/DoneBar/res/values/dimens.xml b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/values/dimens.xml
similarity index 100%
rename from ui/actionbar/DoneBar/res/values/dimens.xml
rename to security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/values/dimens.xml
diff --git a/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/values/strings.xml b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/values/strings.xml
new file mode 100755
index 0000000..e579aee
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/values/strings.xml
@@ -0,0 +1,37 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+    <string name="app_name">Androidkeystore</string>
+    <string name="sample_action">Sample action</string>
+
+    <!-- Steps -->
+    <string name="intro_message">
+        Welcome to the <b>Basic Android Key Store</b> sample!\n\n
+        This sample demonstrates how to use the Android Key Store to safely create and store
+        encryption keys that only your application can access.  You can also sign data using those
+        keys.\n\n
+        To create a new KeyPair, click \"Create\".\n\n
+        To sign some data using a KeyPair, click \"Sign\".\n\n
+        To verify the data using the signature provided, click \"Verify\".\n\n
+    </string>
+
+    <!-- Button labels -->
+    <string name="str_create_keys">Create</string>
+    <string name="str_sign_data">Sign</string>
+    <string name="str_verify_data">Verify</string>
+
+</resources>
diff --git a/ui/actionbar/DoneBar/res/values/styles.xml b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/values/styles.xml
similarity index 75%
rename from ui/actionbar/DoneBar/res/values/styles.xml
rename to security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/values/styles.xml
index 80895ef..fb75961 100644
--- a/ui/actionbar/DoneBar/res/values/styles.xml
+++ b/security/keystore/BasicAndroidKeyStore/BasicAndroidKeyStore/src/main/res/values/styles.xml
@@ -18,7 +18,7 @@
 
     <!-- Activity themes -->
 
-    <style name="Theme.Base" parent="android:Theme.Holo.Light" />
+    <style name="Theme.Base" parent="android:Theme.Light" />
 
     <style name="Theme.Sample" parent="Theme.Base" />
 
@@ -26,17 +26,14 @@
 
     <style name="Widget" />
 
-    <style name="Widget.SampleContentContainer">
+    <style name="Widget.SampleOutput">
         <item name="android:padding">@dimen/margin_medium</item>
-    </style>
-
-    <style name="Widget.SampleMessage">
         <item name="android:textAppearance">?android:textAppearanceMedium</item>
         <item name="android:lineSpacingMultiplier">1.1</item>
     </style>
 
-    <style name="Widget.SampleButton" parent="android:Widget.Holo.Light.Button">
-        <item name="android:textAppearance">?android:textAppearanceMedium</item>
+    <style name="Log" parent="Widget.SampleOutput">
+        <item name="android:typeface">monospace</item>
     </style>
 
 </resources>
diff --git a/security/keystore/BasicAndroidKeyStore/build.gradle b/security/keystore/BasicAndroidKeyStore/build.gradle
new file mode 100644
index 0000000..495c503
--- /dev/null
+++ b/security/keystore/BasicAndroidKeyStore/build.gradle
@@ -0,0 +1 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
diff --git a/ui/accessibility/BasicAccessibility/BasicAccessibility/build.gradle b/ui/accessibility/BasicAccessibility/BasicAccessibility/build.gradle
index f8f1c8a..9eaf472 100644
--- a/ui/accessibility/BasicAccessibility/BasicAccessibility/build.gradle
+++ b/ui/accessibility/BasicAccessibility/BasicAccessibility/build.gradle
@@ -3,7 +3,7 @@
         maven { url 'http://repo1.maven.org/maven2' }
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:0.4'
+        classpath 'com.android.tools.build:gradle:0.5.+'
     }
 }
 apply plugin: 'android'
diff --git a/ui/actionbar/DoneBar/DoneBar/build.gradle b/ui/actionbar/DoneBar/DoneBar/build.gradle
new file mode 100644
index 0000000..dd97c2b
--- /dev/null
+++ b/ui/actionbar/DoneBar/DoneBar/build.gradle
@@ -0,0 +1,19 @@
+buildscript {
+    repositories {
+        maven { url 'http://repo1.maven.org/maven2' }
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:0.5.+'
+    }
+}
+apply plugin: 'android'
+
+android {
+    compileSdkVersion 17
+    buildToolsVersion "17.0.0"
+
+    defaultConfig {
+        minSdkVersion 14
+        targetSdkVersion 17
+    }
+}
diff --git a/ui/actionbar/DoneBar/AndroidManifest.xml b/ui/actionbar/DoneBar/DoneBar/src/main/AndroidManifest.xml
similarity index 96%
rename from ui/actionbar/DoneBar/AndroidManifest.xml
rename to ui/actionbar/DoneBar/DoneBar/src/main/AndroidManifest.xml
index 5536a9b..cce4d5e 100755
--- a/ui/actionbar/DoneBar/AndroidManifest.xml
+++ b/ui/actionbar/DoneBar/DoneBar/src/main/AndroidManifest.xml
@@ -26,7 +26,7 @@
         android:theme="@style/Theme.Sample"
         android:allowBackup="true">
 
-        <activity android:name=".MainActivity"
+        <activity android:name=".SampleDashboardActivity"
             android:label="@string/app_name">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
diff --git a/ui/actionbar/DoneBar/big_icon.png b/ui/actionbar/DoneBar/DoneBar/src/main/big_icon.png
similarity index 100%
rename from ui/actionbar/DoneBar/big_icon.png
rename to ui/actionbar/DoneBar/DoneBar/src/main/big_icon.png
Binary files differ
diff --git a/ui/actionbar/DoneBar/src/com/example/android/donebar/DoneBarActivity.java b/ui/actionbar/DoneBar/DoneBar/src/main/java/com/example/android/donebar/DoneBarActivity.java
old mode 100644
new mode 100755
similarity index 100%
rename from ui/actionbar/DoneBar/src/com/example/android/donebar/DoneBarActivity.java
rename to ui/actionbar/DoneBar/DoneBar/src/main/java/com/example/android/donebar/DoneBarActivity.java
diff --git a/ui/actionbar/DoneBar/src/com/example/android/donebar/DoneButtonActivity.java b/ui/actionbar/DoneBar/DoneBar/src/main/java/com/example/android/donebar/DoneButtonActivity.java
old mode 100644
new mode 100755
similarity index 100%
rename from ui/actionbar/DoneBar/src/com/example/android/donebar/DoneButtonActivity.java
rename to ui/actionbar/DoneBar/DoneBar/src/main/java/com/example/android/donebar/DoneButtonActivity.java
diff --git a/ui/actionbar/DoneBar/DoneBar/src/main/java/com/example/android/donebar/SampleDashboardActivity.java b/ui/actionbar/DoneBar/DoneBar/src/main/java/com/example/android/donebar/SampleDashboardActivity.java
new file mode 100755
index 0000000..e86e6fc
--- /dev/null
+++ b/ui/actionbar/DoneBar/DoneBar/src/main/java/com/example/android/donebar/SampleDashboardActivity.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.donebar;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
+import android.widget.GridView;
+import android.widget.TextView;
+
+/**
+ * A simple launcher activity offering access to the individual samples in this project.
+ */
+public class SampleDashboardActivity extends Activity implements AdapterView.OnItemClickListener {
+    /**
+     * The collection of samples that will be used to populate the 'dashboard' grid.
+     */
+    private Sample[] mSamples;
+
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_sample_dashboard);
+
+        // Prepare list of samples in this dashboard.
+        mSamples = new Sample[]{
+                new Sample(R.string.done_bar_title, R.string.done_bar_description,
+                        DoneBarActivity.class),
+                new Sample(R.string.done_button_title, R.string.done_button_description,
+                        DoneButtonActivity.class),
+        };
+
+        // Use the custom adapter in the GridView and hook up a click listener to handle
+        // selection of individual samples.
+        GridView gridView = (GridView) findViewById(android.R.id.list);
+        gridView.setAdapter(new SampleAdapter());
+        gridView.setOnItemClickListener(this);
+    }
+
+    @Override
+    public void onItemClick(AdapterView<?> container, View view, int position, long id) {
+        // A sample was selected in the dashboard; open it.
+        startActivity(mSamples[position].intent);
+    }
+
+    /**
+     * A custom array-based adapter, designed for use with a {@link GridView}.
+     */
+    private class SampleAdapter extends BaseAdapter {
+        @Override
+        public int getCount() {
+            return mSamples.length;
+        }
+
+        @Override
+        public Sample getItem(int position) {
+            return mSamples[position];
+        }
+
+        @Override
+        public long getItemId(int position) {
+            // The title string ID should be unique per sample, so use it as an ID.
+            return mSamples[position].titleResId;
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup container) {
+            if (convertView == null) {
+                // If there was no re-usable view that can be simply repopulated, create
+                // a new root view for this grid item.
+                convertView = getLayoutInflater().inflate(
+                        R.layout.sample_dashboard_item, container, false);
+            }
+
+            // Populate the view's children with real data about this sample.
+            ((TextView) convertView.findViewById(android.R.id.text1)).setText(
+                    mSamples[position].titleResId);
+            ((TextView) convertView.findViewById(android.R.id.text2)).setText(
+                    mSamples[position].descriptionResId);
+            return convertView;
+        }
+    }
+
+    /**
+     * A simple class that stores information about a sample: a title, description, and
+     * the intent to call
+     * {@link android.content.Context#startActivity(android.content.Intent) startActivity}
+     * with in order to open the sample.
+     */
+    private class Sample {
+        int titleResId;
+        int descriptionResId;
+        Intent intent;
+
+        /**
+         * Instantiate a new sample object with a title, description, and intent.
+         */
+        private Sample(int titleResId, int descriptionResId, Intent intent) {
+            this.intent = intent;
+            this.titleResId = titleResId;
+            this.descriptionResId = descriptionResId;
+        }
+
+        /**
+         * Instantiate a new sample object with a title, description, and {@link Activity}
+         * subclass. An intent will automatically be created for the given activity.
+         */
+        private Sample(int titleResId, int descriptionResId,
+                Class<? extends Activity> activityClass) {
+            this(titleResId, descriptionResId,
+                    new Intent(SampleDashboardActivity.this, activityClass));
+        }
+    }
+}
diff --git a/ui/actionbar/DoneBar/res/drawable-hdpi/ic_action_cancel.png b/ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-hdpi/ic_action_cancel.png
similarity index 100%
rename from ui/actionbar/DoneBar/res/drawable-hdpi/ic_action_cancel.png
rename to ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-hdpi/ic_action_cancel.png
Binary files differ
diff --git a/ui/actionbar/DoneBar/res/drawable-hdpi/ic_action_done.png b/ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-hdpi/ic_action_done.png
similarity index 100%
rename from ui/actionbar/DoneBar/res/drawable-hdpi/ic_action_done.png
rename to ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-hdpi/ic_action_done.png
Binary files differ
diff --git a/ui/actionbar/DoneBar/res/drawable-hdpi/ic_launcher.png b/ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from ui/actionbar/DoneBar/res/drawable-hdpi/ic_launcher.png
rename to ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/ui/actionbar/DoneBar/res/drawable-mdpi/ic_action_cancel.png b/ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-mdpi/ic_action_cancel.png
similarity index 100%
rename from ui/actionbar/DoneBar/res/drawable-mdpi/ic_action_cancel.png
rename to ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-mdpi/ic_action_cancel.png
Binary files differ
diff --git a/ui/actionbar/DoneBar/res/drawable-mdpi/ic_action_done.png b/ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-mdpi/ic_action_done.png
similarity index 100%
rename from ui/actionbar/DoneBar/res/drawable-mdpi/ic_action_done.png
rename to ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-mdpi/ic_action_done.png
Binary files differ
diff --git a/ui/actionbar/DoneBar/res/drawable-mdpi/ic_launcher.png b/ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from ui/actionbar/DoneBar/res/drawable-mdpi/ic_launcher.png
rename to ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/ui/actionbar/DoneBar/res/drawable-xhdpi/ic_action_cancel.png b/ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-xhdpi/ic_action_cancel.png
similarity index 100%
rename from ui/actionbar/DoneBar/res/drawable-xhdpi/ic_action_cancel.png
rename to ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-xhdpi/ic_action_cancel.png
Binary files differ
diff --git a/ui/actionbar/DoneBar/res/drawable-xhdpi/ic_action_done.png b/ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-xhdpi/ic_action_done.png
similarity index 100%
rename from ui/actionbar/DoneBar/res/drawable-xhdpi/ic_action_done.png
rename to ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-xhdpi/ic_action_done.png
Binary files differ
diff --git a/ui/actionbar/DoneBar/res/drawable-xhdpi/ic_launcher.png b/ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from ui/actionbar/DoneBar/res/drawable-xhdpi/ic_launcher.png
rename to ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-xhdpi/sample_dashboard_item_background.9.png b/ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-xhdpi/sample_dashboard_item_background.9.png
new file mode 100644
index 0000000..1358628
--- /dev/null
+++ b/ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-xhdpi/sample_dashboard_item_background.9.png
Binary files differ
diff --git a/ui/actionbar/DoneBar/res/drawable-xxhdpi/ic_launcher.png b/ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from ui/actionbar/DoneBar/res/drawable-xxhdpi/ic_launcher.png
rename to ui/actionbar/DoneBar/DoneBar/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/ui/actionbar/DoneBar/res/layout/actionbar_custom_view_done.xml b/ui/actionbar/DoneBar/DoneBar/src/main/res/layout/actionbar_custom_view_done.xml
similarity index 100%
rename from ui/actionbar/DoneBar/res/layout/actionbar_custom_view_done.xml
rename to ui/actionbar/DoneBar/DoneBar/src/main/res/layout/actionbar_custom_view_done.xml
diff --git a/ui/actionbar/DoneBar/res/layout/actionbar_custom_view_done_cancel.xml b/ui/actionbar/DoneBar/DoneBar/src/main/res/layout/actionbar_custom_view_done_cancel.xml
similarity index 100%
rename from ui/actionbar/DoneBar/res/layout/actionbar_custom_view_done_cancel.xml
rename to ui/actionbar/DoneBar/DoneBar/src/main/res/layout/actionbar_custom_view_done_cancel.xml
diff --git a/ui/actionbar/DoneBar/res/layout/activity_done_bar.xml b/ui/actionbar/DoneBar/DoneBar/src/main/res/layout/activity_done_bar.xml
similarity index 100%
rename from ui/actionbar/DoneBar/res/layout/activity_done_bar.xml
rename to ui/actionbar/DoneBar/DoneBar/src/main/res/layout/activity_done_bar.xml
diff --git a/ui/actionbar/DoneBar/res/layout/activity_done_button.xml b/ui/actionbar/DoneBar/DoneBar/src/main/res/layout/activity_done_button.xml
similarity index 100%
rename from ui/actionbar/DoneBar/res/layout/activity_done_button.xml
rename to ui/actionbar/DoneBar/DoneBar/src/main/res/layout/activity_done_button.xml
diff --git a/ui/actionbar/DoneBar/DoneBar/src/main/res/layout/activity_sample_dashboard.xml b/ui/actionbar/DoneBar/DoneBar/src/main/res/layout/activity_sample_dashboard.xml
new file mode 100755
index 0000000..88cdb80
--- /dev/null
+++ b/ui/actionbar/DoneBar/DoneBar/src/main/res/layout/activity_sample_dashboard.xml
@@ -0,0 +1,41 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <TextView style="@style/Widget.SampleMessage"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="@dimen/horizontal_page_margin"
+        android:layout_marginRight="@dimen/horizontal_page_margin"
+        android:layout_marginTop="@dimen/vertical_page_margin"
+        android:layout_marginBottom="@dimen/vertical_page_margin"
+        android:text="@string/intro_message" />
+
+    <GridView android:id="@android:id/list"
+        style="@style/Widget.SampleDashboard.Grid"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1"
+        android:paddingLeft="@dimen/horizontal_page_margin"
+        android:paddingRight="@dimen/horizontal_page_margin"
+        android:paddingBottom="@dimen/vertical_page_margin"
+        android:scrollbarStyle="outsideOverlay" />
+
+</LinearLayout>
diff --git a/ui/actionbar/DoneBar/res/layout/include_cancel_button.xml b/ui/actionbar/DoneBar/DoneBar/src/main/res/layout/include_cancel_button.xml
similarity index 100%
rename from ui/actionbar/DoneBar/res/layout/include_cancel_button.xml
rename to ui/actionbar/DoneBar/DoneBar/src/main/res/layout/include_cancel_button.xml
diff --git a/ui/actionbar/DoneBar/res/layout/include_done_button.xml b/ui/actionbar/DoneBar/DoneBar/src/main/res/layout/include_done_button.xml
similarity index 100%
rename from ui/actionbar/DoneBar/res/layout/include_done_button.xml
rename to ui/actionbar/DoneBar/DoneBar/src/main/res/layout/include_done_button.xml
diff --git a/ui/actionbar/DoneBar/DoneBar/src/main/res/layout/sample_dashboard_item.xml b/ui/actionbar/DoneBar/DoneBar/src/main/res/layout/sample_dashboard_item.xml
new file mode 100644
index 0000000..38987ee
--- /dev/null
+++ b/ui/actionbar/DoneBar/DoneBar/src/main/res/layout/sample_dashboard_item.xml
@@ -0,0 +1,32 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@style/Widget.SampleDashboard.Item"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <TextView android:id="@android:id/text1"
+        style="@style/Widget.SampleDashboard.Item.Title"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content" />
+
+    <TextView android:id="@android:id/text2"
+        style="@style/Widget.SampleDashboard.Item.Description"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content" />
+</LinearLayout>
diff --git a/ui/actionbar/DoneBar/res/menu/cancel.xml b/ui/actionbar/DoneBar/DoneBar/src/main/res/menu/cancel.xml
similarity index 100%
rename from ui/actionbar/DoneBar/res/menu/cancel.xml
rename to ui/actionbar/DoneBar/DoneBar/src/main/res/menu/cancel.xml
diff --git a/ui/actionbar/DoneBar/DoneBar/src/main/res/values-sw600dp/dimens.xml b/ui/actionbar/DoneBar/DoneBar/src/main/res/values-sw600dp/dimens.xml
new file mode 100644
index 0000000..22074a2
--- /dev/null
+++ b/ui/actionbar/DoneBar/DoneBar/src/main/res/values-sw600dp/dimens.xml
@@ -0,0 +1,24 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <!-- Semantic definitions -->
+
+    <dimen name="horizontal_page_margin">@dimen/margin_huge</dimen>
+    <dimen name="vertical_page_margin">@dimen/margin_medium</dimen>
+
+</resources>
diff --git a/ui/actionbar/DoneBar/DoneBar/src/main/res/values-sw600dp/styles.xml b/ui/actionbar/DoneBar/DoneBar/src/main/res/values-sw600dp/styles.xml
new file mode 100644
index 0000000..401e7aa
--- /dev/null
+++ b/ui/actionbar/DoneBar/DoneBar/src/main/res/values-sw600dp/styles.xml
@@ -0,0 +1,24 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <style name="Widget.SampleMessage">
+        <item name="android:textAppearance">?android:textAppearanceLarge</item>
+        <item name="android:lineSpacingMultiplier">1.2</item>
+    </style>
+
+</resources>
diff --git a/ui/actionbar/DoneBar/DoneBar/src/main/res/values/dimens.xml b/ui/actionbar/DoneBar/DoneBar/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..39e710b
--- /dev/null
+++ b/ui/actionbar/DoneBar/DoneBar/src/main/res/values/dimens.xml
@@ -0,0 +1,32 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <!-- Define standard dimensions to comply with Holo-style grids and rhythm. -->
+
+    <dimen name="margin_tiny">4dp</dimen>
+    <dimen name="margin_small">8dp</dimen>
+    <dimen name="margin_medium">16dp</dimen>
+    <dimen name="margin_large">32dp</dimen>
+    <dimen name="margin_huge">64dp</dimen>
+
+    <!-- Semantic definitions -->
+
+    <dimen name="horizontal_page_margin">@dimen/margin_medium</dimen>
+    <dimen name="vertical_page_margin">@dimen/margin_medium</dimen>
+
+</resources>
diff --git a/ui/actionbar/DoneBar/res/values/strings.xml b/ui/actionbar/DoneBar/DoneBar/src/main/res/values/strings.xml
similarity index 100%
rename from ui/actionbar/DoneBar/res/values/strings.xml
rename to ui/actionbar/DoneBar/DoneBar/src/main/res/values/strings.xml
diff --git a/ui/actionbar/DoneBar/DoneBar/src/main/res/values/styles.xml b/ui/actionbar/DoneBar/DoneBar/src/main/res/values/styles.xml
new file mode 100644
index 0000000..f3841bd
--- /dev/null
+++ b/ui/actionbar/DoneBar/DoneBar/src/main/res/values/styles.xml
@@ -0,0 +1,71 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <!-- Activity themes -->
+
+    <style name="Theme.Base" parent="android:Theme.Holo.Light" />
+
+    <style name="Theme.Sample" parent="Theme.Base" />
+
+    <!-- Widget styling -->
+
+    <style name="Widget" />
+
+    <style name="Widget.SampleContentContainer">
+        <item name="android:paddingTop">@dimen/vertical_page_margin</item>
+        <item name="android:paddingBottom">@dimen/vertical_page_margin</item>
+        <item name="android:paddingLeft">@dimen/horizontal_page_margin</item>
+        <item name="android:paddingRight">@dimen/horizontal_page_margin</item>
+    </style>
+
+    <style name="Widget.SampleMessage">
+        <item name="android:textAppearance">?android:textAppearanceMedium</item>
+        <item name="android:lineSpacingMultiplier">1.1</item>
+    </style>
+
+    <style name="Widget.SampleDashboard.Grid" parent="Widget">
+        <item name="android:stretchMode">columnWidth</item>
+        <item name="android:columnWidth">200dp</item>
+        <item name="android:numColumns">auto_fit</item>
+        <item name="android:drawSelectorOnTop">true</item>
+        <item name="android:horizontalSpacing">@dimen/margin_medium</item>
+        <item name="android:verticalSpacing">@dimen/margin_medium</item>
+    </style>
+
+    <style name="Widget.SampleDashboard.Item" parent="Widget">
+        <item name="android:background">@drawable/sample_dashboard_item_background</item>
+        <item name="android:paddingTop">@dimen/margin_small</item>
+        <item name="android:paddingLeft">@dimen/margin_medium</item>
+        <item name="android:paddingRight">@dimen/margin_medium</item>
+        <item name="android:paddingBottom">@dimen/margin_medium</item>
+    </style>
+
+    <style name="Widget.SampleDashboard.Item.Title" parent="Widget">
+        <item name="android:layout_marginBottom">@dimen/margin_tiny</item>
+        <item name="android:textAppearance">?android:textAppearanceLarge</item>
+        <item name="android:textColor">#09c</item>
+        <item name="android:textStyle">bold</item>
+        <item name="android:textSize">24sp</item>
+    </style>
+
+    <style name="Widget.SampleDashboard.Item.Description" parent="Widget">
+        <item name="android:textAppearance">?android:textAppearanceSmall</item>
+        <item name="android:fontFamily">sans-serif-light</item>
+    </style>
+
+</resources>
diff --git a/ui/actionbar/DoneBar/build.gradle b/ui/actionbar/DoneBar/build.gradle
new file mode 100644
index 0000000..495c503
--- /dev/null
+++ b/ui/actionbar/DoneBar/build.gradle
@@ -0,0 +1 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
diff --git a/ui/actionbar/DoneBar/res/layout/activity_main.xml b/ui/actionbar/DoneBar/res/layout/activity_main.xml
deleted file mode 100755
index e342ca3..0000000
--- a/ui/actionbar/DoneBar/res/layout/activity_main.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<!--
-  Copyright 2013 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <LinearLayout style="@style/Widget.SampleContentContainer"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical">
-
-        <TextView style="@style/Widget.SampleMessage"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:text="@string/intro_message" />
-
-        <Button style="@style/Widget.SampleButton"
-            android:id="@+id/done_bar_link"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="@dimen/margin_large"
-            android:layout_marginBottom="@dimen/margin_small"
-            android:text="@string/done_bar_title" />
-
-        <TextView style="@style/Widget.SampleMessage"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:text="@string/done_bar_description" />
-
-        <Button style="@style/Widget.SampleButton"
-            android:id="@+id/done_button_link"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="@dimen/margin_large"
-            android:layout_marginBottom="@dimen/margin_small"
-            android:text="@string/done_button_title" />
-
-        <TextView style="@style/Widget.SampleMessage"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:text="@string/done_button_description" />
-
-    </LinearLayout>
-</ScrollView>
diff --git a/ui/actionbar/DoneBar/settings.gradle b/ui/actionbar/DoneBar/settings.gradle
new file mode 100644
index 0000000..28b5ccd
--- /dev/null
+++ b/ui/actionbar/DoneBar/settings.gradle
@@ -0,0 +1 @@
+include ':DoneBar'
diff --git a/ui/actionbar/DoneBar/src/com/example/android/donebar/MainActivity.java b/ui/actionbar/DoneBar/src/com/example/android/donebar/MainActivity.java
deleted file mode 100755
index ff188df..0000000
--- a/ui/actionbar/DoneBar/src/com/example/android/donebar/MainActivity.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.donebar;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.os.Bundle;
-import android.view.View;
-
-/**
- * A simple launcher activity describing the alternative action bar presentations and allowing the
- * user to navigate to a demo of each.
- */
-public class MainActivity extends Activity {
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_main);
-
-        findViewById(R.id.done_bar_link).setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                startActivity(new Intent(MainActivity.this, DoneBarActivity.class));
-            }
-        });
-
-        findViewById(R.id.done_button_link).setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                startActivity(new Intent(MainActivity.this, DoneButtonActivity.class));
-            }
-        });
-    }
-}
diff --git a/ui/actionbarcompat/Basic/big_icon.png b/ui/actionbarcompat/Basic/big_icon.png
new file mode 100644
index 0000000..20f585a
--- /dev/null
+++ b/ui/actionbarcompat/Basic/big_icon.png
Binary files differ
diff --git a/ui/actionbarcompat/Basic/build.gradle b/ui/actionbarcompat/Basic/build.gradle
new file mode 100644
index 0000000..b99b102
--- /dev/null
+++ b/ui/actionbarcompat/Basic/build.gradle
@@ -0,0 +1,16 @@
+apply plugin: 'android'
+
+dependencies {
+    compile "com.android.support:support-v4:18.0.+"
+    compile "com.android.support:appcompat-v7:18.0.+"
+}
+
+android {
+    compileSdkVersion 17
+    buildToolsVersion "17.0.0"
+
+    defaultConfig {
+        minSdkVersion 7
+        targetSdkVersion 16
+    }
+}
diff --git a/ui/actionbarcompat/Basic/src/main/AndroidManifest.xml b/ui/actionbarcompat/Basic/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..f0243ac
--- /dev/null
+++ b/ui/actionbarcompat/Basic/src/main/AndroidManifest.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.example.android.actionbarcompat.basic"
+    android:versionCode="1"
+    android:versionName="1.0">
+
+    <!-- ActionBarCompat provides an Action Bar from API v7 onwards -->
+    <uses-sdk
+        android:minSdkVersion="7"
+        android:targetSdkVersion="17" />
+
+    <application
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/Theme.AppCompat"
+        android:allowBackup="true">
+
+        <activity android:name=".MainActivity">
+            <!-- Launcher Intent filter -->
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest>
\ No newline at end of file
diff --git a/ui/actionbarcompat/Basic/src/main/res/drawable-hdpi/ic_action_location.png b/ui/actionbarcompat/Basic/src/main/res/drawable-hdpi/ic_action_location.png
new file mode 100644
index 0000000..a42b3ea
--- /dev/null
+++ b/ui/actionbarcompat/Basic/src/main/res/drawable-hdpi/ic_action_location.png
Binary files differ
diff --git a/ui/actionbarcompat/Basic/src/main/res/drawable-hdpi/ic_action_refresh.png b/ui/actionbarcompat/Basic/src/main/res/drawable-hdpi/ic_action_refresh.png
new file mode 100644
index 0000000..c9d295d
--- /dev/null
+++ b/ui/actionbarcompat/Basic/src/main/res/drawable-hdpi/ic_action_refresh.png
Binary files differ
diff --git a/ui/actionbarcompat/Basic/src/main/res/drawable-hdpi/ic_action_settings.png b/ui/actionbarcompat/Basic/src/main/res/drawable-hdpi/ic_action_settings.png
new file mode 100644
index 0000000..d3f981d
--- /dev/null
+++ b/ui/actionbarcompat/Basic/src/main/res/drawable-hdpi/ic_action_settings.png
Binary files differ
diff --git a/ui/actionbarcompat/Basic/src/main/res/drawable-hdpi/ic_launcher.png b/ui/actionbarcompat/Basic/src/main/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..5bb19fb
--- /dev/null
+++ b/ui/actionbarcompat/Basic/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/ui/actionbarcompat/Basic/src/main/res/drawable-mdpi/ic_action_location.png b/ui/actionbarcompat/Basic/src/main/res/drawable-mdpi/ic_action_location.png
new file mode 100644
index 0000000..eaf9774
--- /dev/null
+++ b/ui/actionbarcompat/Basic/src/main/res/drawable-mdpi/ic_action_location.png
Binary files differ
diff --git a/ui/actionbarcompat/Basic/src/main/res/drawable-mdpi/ic_action_refresh.png b/ui/actionbarcompat/Basic/src/main/res/drawable-mdpi/ic_action_refresh.png
new file mode 100644
index 0000000..eef97e9
--- /dev/null
+++ b/ui/actionbarcompat/Basic/src/main/res/drawable-mdpi/ic_action_refresh.png
Binary files differ
diff --git a/ui/actionbarcompat/Basic/src/main/res/drawable-mdpi/ic_action_settings.png b/ui/actionbarcompat/Basic/src/main/res/drawable-mdpi/ic_action_settings.png
new file mode 100644
index 0000000..fc2bf8c
--- /dev/null
+++ b/ui/actionbarcompat/Basic/src/main/res/drawable-mdpi/ic_action_settings.png
Binary files differ
diff --git a/ui/actionbarcompat/Basic/src/main/res/drawable-mdpi/ic_launcher.png b/ui/actionbarcompat/Basic/src/main/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..5737b36
--- /dev/null
+++ b/ui/actionbarcompat/Basic/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/ui/actionbarcompat/Basic/src/main/res/drawable-xhdpi/ic_action_location.png b/ui/actionbarcompat/Basic/src/main/res/drawable-xhdpi/ic_action_location.png
new file mode 100644
index 0000000..5f11cce
--- /dev/null
+++ b/ui/actionbarcompat/Basic/src/main/res/drawable-xhdpi/ic_action_location.png
Binary files differ
diff --git a/ui/actionbarcompat/Basic/src/main/res/drawable-xhdpi/ic_action_refresh.png b/ui/actionbarcompat/Basic/src/main/res/drawable-xhdpi/ic_action_refresh.png
new file mode 100644
index 0000000..1027c9a
--- /dev/null
+++ b/ui/actionbarcompat/Basic/src/main/res/drawable-xhdpi/ic_action_refresh.png
Binary files differ
diff --git a/ui/actionbarcompat/Basic/src/main/res/drawable-xhdpi/ic_action_settings.png b/ui/actionbarcompat/Basic/src/main/res/drawable-xhdpi/ic_action_settings.png
new file mode 100644
index 0000000..1b9acf2
--- /dev/null
+++ b/ui/actionbarcompat/Basic/src/main/res/drawable-xhdpi/ic_action_settings.png
Binary files differ
diff --git a/ui/actionbarcompat/Basic/src/main/res/drawable-xhdpi/ic_launcher.png b/ui/actionbarcompat/Basic/src/main/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..31df043
--- /dev/null
+++ b/ui/actionbarcompat/Basic/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/ui/actionbarcompat/Basic/src/main/res/drawable-xxhdpi/ic_launcher.png b/ui/actionbarcompat/Basic/src/main/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..5087435
--- /dev/null
+++ b/ui/actionbarcompat/Basic/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/ui/actionbarcompat/Basic/src/main/res/layout/activity_main.xml b/ui/actionbarcompat/Basic/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..47619e0
--- /dev/null
+++ b/ui/actionbarcompat/Basic/src/main/res/layout/activity_main.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:padding="16dp"
+    android:text="@string/main_description"
+    android:gravity="center" />
\ No newline at end of file
diff --git a/ui/actionbarcompat/Basic/src/main/res/menu/main.xml b/ui/actionbarcompat/Basic/src/main/res/menu/main.xml
new file mode 100644
index 0000000..a4dc5d1
--- /dev/null
+++ b/ui/actionbarcompat/Basic/src/main/res/menu/main.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!--
+    As we're using ActionBarCompat, any action item attributes come from ActionBarCompat's XML
+    namespace instead of the android namespace. Here we've added a new support namespace added to
+    the menu element allowing us to use the 'showAsAction' attribute in a backwards compatible way.
+    Any other action item attributes used should be referenced from this namespace too
+    (actionProviderClass, actionViewClass, actionLayout).
+-->
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:support="http://schemas.android.com/apk/res-auto" >
+
+    <!--
+        Here we create an item, setting support:showAsAction to display the item as an action if
+        there's room on the compatible Action Bar.
+    -->
+    <item
+        android:id="@+id/menu_refresh"
+        android:icon="@drawable/ic_action_refresh"
+        android:title="@string/menu_refresh"
+        support:showAsAction="ifRoom"/>
+
+    <!-- Location item is added in onCreateOptionsMenu() -->
+
+    <!--
+        Here we set the settings item to always be in the overflow menu, by setting
+        support:showAsAction to never, so it is never displayed as an action item on the compatible
+        Action Bar.
+    -->
+    <item
+        android:id="@+id/menu_settings"
+        android:icon="@drawable/ic_action_settings"
+        android:title="@string/menu_settings"
+        support:showAsAction="never"/>
+
+</menu>
\ No newline at end of file
diff --git a/ui/actionbarcompat/Basic/src/main/res/values/ids.xml b/ui/actionbarcompat/Basic/src/main/res/values/ids.xml
new file mode 100644
index 0000000..0269815
--- /dev/null
+++ b/ui/actionbarcompat/Basic/src/main/res/values/ids.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<resources>
+
+    <!--
+        Generate an id which can be used when the location menu item is added in MainActivity
+    -->
+    <item name="menu_location" type="id"/>
+
+</resources>
\ No newline at end of file
diff --git a/ui/actionbarcompat/Basic/src/main/res/values/strings.xml b/ui/actionbarcompat/Basic/src/main/res/values/strings.xml
new file mode 100644
index 0000000..5421e64
--- /dev/null
+++ b/ui/actionbarcompat/Basic/src/main/res/values/strings.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<resources>
+
+    <string name="app_name">ABC Basic</string>
+    <string name="menu_refresh">Refresh</string>
+    <string name="menu_location">Location</string>
+    <string name="menu_settings">Settings</string>
+    <string name="main_description">This is a basic Activity showing an
+        Action Bar. Items that are not shown as action items on the Action Bar are displayed in
+        the action bar overflow.</string>
+
+</resources>
\ No newline at end of file
diff --git a/ui/actionbarcompat/Basic/src/main/src/com/example/android/actionbarcompat/basic/MainActivity.java b/ui/actionbarcompat/Basic/src/main/src/com/example/android/actionbarcompat/basic/MainActivity.java
new file mode 100644
index 0000000..eb63827
--- /dev/null
+++ b/ui/actionbarcompat/Basic/src/main/src/com/example/android/actionbarcompat/basic/MainActivity.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.actionbarcompat.basic;
+
+import android.os.Bundle;
+import android.support.v4.view.MenuItemCompat;
+import android.support.v7.app.ActionBarActivity;
+import android.view.Menu;
+import android.view.MenuItem;
+
+/**
+ * This sample shows you how to use ActionBarCompat to create a basic Activity which displays
+ * action items. It covers inflating items from a menu resource, as well as adding an item in code.
+ *
+ * This Activity extends from {@link ActionBarActivity}, which provides all of the function
+ * necessary to display a compatible Action Bar on devices running Android v2.1+.
+ */
+public class MainActivity extends ActionBarActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+    }
+
+    // BEGIN_INCLUDE(create_menu)
+    /**
+     * Use this method to instantiate your menu, and add your items to it. You
+     * should return true if you have added items to it and want the menu to be displayed.
+     */
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        // Inflate our menu from the resources by using the menu inflater.
+        getMenuInflater().inflate(R.menu.main, menu);
+
+        // It is also possible add items here. Use a generated id from
+        // resources (ids.xml) to ensure that all menu ids are distinct.
+        MenuItem locationItem = menu.add(0, R.id.menu_location, 0, R.string.menu_location);
+        locationItem.setIcon(R.drawable.ic_action_location);
+
+        // Need to use MenuItemCompat methods to call any action item related methods
+        MenuItemCompat.setShowAsAction(locationItem, MenuItem.SHOW_AS_ACTION_IF_ROOM);
+
+        return true;
+    }
+    // END_INCLUDE(create_menu)
+
+    // BEGIN_INCLUDE(menu_item_selected)
+    /**
+     * This method is called when one of the menu items to selected. These items
+     * can be on the Action Bar, the overflow menu, or the standard options menu. You
+     * should return true if you handle the selection.
+     */
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            case R.id.menu_refresh:
+                // Here we might start a background refresh task
+                return true;
+
+            case R.id.menu_location:
+                // Here we might call LocationManager.requestLocationUpdates()
+                return true;
+
+            case R.id.menu_settings:
+                // Here we would open up our settings activity
+                return true;
+        }
+
+        return super.onOptionsItemSelected(item);
+    }
+    // END_INCLUDE(menu_item_selected)
+}
diff --git a/ui/actionbarcompat/ListPopupMenu/big_icon.png b/ui/actionbarcompat/ListPopupMenu/big_icon.png
new file mode 100644
index 0000000..6968ae8
--- /dev/null
+++ b/ui/actionbarcompat/ListPopupMenu/big_icon.png
Binary files differ
diff --git a/ui/actionbarcompat/ListPopupMenu/build.gradle b/ui/actionbarcompat/ListPopupMenu/build.gradle
new file mode 100644
index 0000000..b99b102
--- /dev/null
+++ b/ui/actionbarcompat/ListPopupMenu/build.gradle
@@ -0,0 +1,16 @@
+apply plugin: 'android'
+
+dependencies {
+    compile "com.android.support:support-v4:18.0.+"
+    compile "com.android.support:appcompat-v7:18.0.+"
+}
+
+android {
+    compileSdkVersion 17
+    buildToolsVersion "17.0.0"
+
+    defaultConfig {
+        minSdkVersion 7
+        targetSdkVersion 16
+    }
+}
diff --git a/ui/actionbarcompat/ListPopupMenu/src/main/AndroidManifest.xml b/ui/actionbarcompat/ListPopupMenu/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..7e9a861
--- /dev/null
+++ b/ui/actionbarcompat/ListPopupMenu/src/main/AndroidManifest.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.example.android.actionbarcompat.listpopupmenu"
+    android:versionCode="1"
+    android:versionName="1.0">
+
+    <!-- ActionBarCompat provides an implementation of Popup Menu from API v7 onwards -->
+    <uses-sdk
+        android:minSdkVersion="7"
+        android:targetSdkVersion="17" />
+
+    <application
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/Theme.AppCompat"
+        android:allowBackup="true">
+
+        <activity android:name=".MainActivity">
+            <!-- Launcher Intent filter -->
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest>
\ No newline at end of file
diff --git a/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-hdpi/ic_launcher.png b/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..a7365b9
--- /dev/null
+++ b/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-hdpi/ic_overflow.png b/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-hdpi/ic_overflow.png
new file mode 100644
index 0000000..2abc458
--- /dev/null
+++ b/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-hdpi/ic_overflow.png
Binary files differ
diff --git a/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-mdpi/ic_launcher.png b/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..3fd5593
--- /dev/null
+++ b/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-mdpi/ic_overflow.png b/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-mdpi/ic_overflow.png
new file mode 100644
index 0000000..ba704b6
--- /dev/null
+++ b/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-mdpi/ic_overflow.png
Binary files differ
diff --git a/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-xhdpi/ic_launcher.png b/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..204f861
--- /dev/null
+++ b/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-xhdpi/ic_overflow.png b/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-xhdpi/ic_overflow.png
new file mode 100644
index 0000000..a92fb1d
--- /dev/null
+++ b/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-xhdpi/ic_overflow.png
Binary files differ
diff --git a/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-xxhdpi/ic_launcher.png b/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..ada8266
--- /dev/null
+++ b/ui/actionbarcompat/ListPopupMenu/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/ui/actionbarcompat/ListPopupMenu/src/main/res/layout/activity_main.xml b/ui/actionbarcompat/ListPopupMenu/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..bfc7ad0
--- /dev/null
+++ b/ui/actionbarcompat/ListPopupMenu/src/main/res/layout/activity_main.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<fragment xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:name="com.example.android.actionbarcompat.listpopupmenu.PopupListFragment" />
\ No newline at end of file
diff --git a/ui/actionbarcompat/ListPopupMenu/src/main/res/layout/list_item.xml b/ui/actionbarcompat/ListPopupMenu/src/main/res/layout/list_item.xml
new file mode 100644
index 0000000..3eabda0
--- /dev/null
+++ b/ui/actionbarcompat/ListPopupMenu/src/main/res/layout/list_item.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="horizontal"
+    android:layout_width="match_parent"
+    android:layout_height="?attr/listPreferredItemHeight">
+
+    <TextView
+        android:id="@android:id/text1"
+        android:layout_height="match_parent"
+        android:layout_width="0dp"
+        android:layout_weight="1"
+        android:gravity="center_vertical"
+        android:paddingLeft="8dp"
+        android:paddingRight="8dp"
+        android:maxLines="1"
+        android:ellipsize="end"
+        android:textAppearance="?android:attr/textAppearanceMedium" />
+
+    <ImageView
+        android:id="@+id/button_popup"
+        android:layout_height="match_parent"
+        android:layout_width="56dip"
+        android:background="?attr/selectableItemBackground"
+        android:src="@drawable/ic_overflow"
+        android:contentDescription="@string/content_open_popup"/>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/ui/actionbarcompat/ListPopupMenu/src/main/res/menu/popup.xml b/ui/actionbarcompat/ListPopupMenu/src/main/res/menu/popup.xml
new file mode 100644
index 0000000..0329e9e
--- /dev/null
+++ b/ui/actionbarcompat/ListPopupMenu/src/main/res/menu/popup.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item
+        android:id="@+id/menu_remove"
+        android:title="@string/menu_remove" />
+
+</menu>
\ No newline at end of file
diff --git a/ui/actionbarcompat/ListPopupMenu/src/main/res/values/strings.xml b/ui/actionbarcompat/ListPopupMenu/src/main/res/values/strings.xml
new file mode 100644
index 0000000..36233c9
--- /dev/null
+++ b/ui/actionbarcompat/ListPopupMenu/src/main/res/values/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<resources>
+
+    <string name="app_name">ABC List Popup Menu</string>
+    <string name="menu_remove">Remove</string>
+    <string name="content_open_popup">Open Popup Menu</string>
+
+</resources>
\ No newline at end of file
diff --git a/ui/actionbarcompat/ListPopupMenu/src/main/src/com/example/android/actionbarcompat/listpopupmenu/Cheeses.java b/ui/actionbarcompat/ListPopupMenu/src/main/src/com/example/android/actionbarcompat/listpopupmenu/Cheeses.java
new file mode 100644
index 0000000..5ef1161
--- /dev/null
+++ b/ui/actionbarcompat/ListPopupMenu/src/main/src/com/example/android/actionbarcompat/listpopupmenu/Cheeses.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.actionbarcompat.listpopupmenu;
+
+/**
+ * Dummy data.
+ */
+public class Cheeses {
+    public static final String[] CHEESES = {
+            "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi",
+            "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu", "Airag", "Airedale",
+            "Aisy Cendre", "Allgauer Emmentaler", "Alverca", "Ambert", "American Cheese",
+            "Ami du Chambertin", "Anejo Enchilado", "Anneau du Vic-Bilh", "Anthoriro", "Appenzell",
+            "Aragon", "Ardi Gasna", "Ardrahan", "Armenian String", "Aromes au Gene de Marc",
+            "Asadero", "Asiago", "Aubisque Pyrenees", "Autun", "Avaxtskyr", "Baby Swiss",
+            "Babybel", "Baguette Laonnaise", "Bakers", "Baladi", "Balaton", "Bandal", "Banon",
+            "Barry's Bay Cheddar", "Basing", "Basket Cheese", "Bath Cheese", "Bavarian Bergkase",
+            "Baylough", "Beaufort", "Beauvoorde", "Beenleigh Blue", "Beer Cheese", "Bel Paese",
+            "Bergader", "Bergere Bleue", "Berkswell", "Beyaz Peynir", "Bierkase", "Bishop Kennedy",
+            "Blarney", "Bleu d'Auvergne", "Bleu de Gex", "Bleu de Laqueuille",
+            "Bleu de Septmoncel", "Bleu Des Causses", "Blue", "Blue Castello", "Blue Rathgore",
+            "Blue Vein (Australian)", "Blue Vein Cheeses", "Bocconcini", "Bocconcini (Australian)",
+            "Boeren Leidenkaas", "Bonchester", "Bosworth", "Bougon", "Boule Du Roves",
+            "Boulette d'Avesnes", "Boursault", "Boursin", "Bouyssou", "Bra", "Braudostur",
+            "Breakfast Cheese", "Brebis du Lavort", "Brebis du Lochois", "Brebis du Puyfaucon",
+            "Bresse Bleu", "Brick", "Brie", "Brie de Meaux", "Brie de Melun", "Brillat-Savarin",
+            "Brin", "Brin d' Amour", "Brin d'Amour", "Brinza (Burduf Brinza)",
+            "Briquette de Brebis", "Briquette du Forez", "Broccio", "Broccio Demi-Affine",
+            "Brousse du Rove", "Bruder Basil", "Brusselae Kaas (Fromage de Bruxelles)", "Bryndza",
+            "Buchette d'Anjou", "Buffalo", "Burgos", "Butte", "Butterkase", "Button (Innes)",
+            "Buxton Blue", "Cabecou", "Caboc", "Cabrales", "Cachaille", "Caciocavallo", "Caciotta",
+            "Caerphilly", "Cairnsmore", "Calenzana", "Cambazola", "Camembert de Normandie",
+            "Canadian Cheddar", "Canestrato", "Cantal", "Caprice des Dieux", "Capricorn Goat",
+            "Capriole Banon", "Carre de l'Est", "Casciotta di Urbino", "Cashel Blue", "Castellano",
+            "Castelleno", "Castelmagno", "Castelo Branco", "Castigliano", "Cathelain",
+            "Celtic Promise", "Cendre d'Olivet", "Cerney", "Chabichou", "Chabichou du Poitou",
+            "Chabis de Gatine", "Chaource", "Charolais", "Chaumes", "Cheddar",
+            "Cheddar Clothbound", "Cheshire", "Chevres", "Chevrotin des Aravis", "Chontaleno",
+            "Civray", "Coeur de Camembert au Calvados", "Coeur de Chevre", "Colby", "Cold Pack",
+            "Comte", "Coolea", "Cooleney", "Coquetdale", "Corleggy", "Cornish Pepper",
+            "Cotherstone", "Cotija", "Cottage Cheese", "Cottage Cheese (Australian)",
+            "Cougar Gold", "Coulommiers", "Coverdale", "Crayeux de Roncq", "Cream Cheese",
+            "Cream Havarti", "Crema Agria", "Crema Mexicana", "Creme Fraiche", "Crescenza",
+            "Croghan", "Crottin de Chavignol", "Crottin du Chavignol", "Crowdie", "Crowley",
+            "Cuajada", "Curd", "Cure Nantais", "Curworthy", "Cwmtawe Pecorino",
+            "Cypress Grove Chevre", "Danablu (Danish Blue)", "Danbo", "Danish Fontina",
+            "Daralagjazsky", "Dauphin", "Delice des Fiouves", "Denhany Dorset Drum", "Derby",
+            "Dessertnyj Belyj", "Devon Blue", "Devon Garland", "Dolcelatte", "Doolin",
+            "Doppelrhamstufel", "Dorset Blue Vinney", "Double Gloucester", "Double Worcester",
+            "Dreux a la Feuille", "Dry Jack", "Duddleswell", "Dunbarra", "Dunlop", "Dunsyre Blue",
+            "Duroblando", "Durrus", "Dutch Mimolette (Commissiekaas)", "Edam", "Edelpilz",
+            "Emental Grand Cru", "Emlett", "Emmental", "Epoisses de Bourgogne", "Esbareich",
+            "Esrom", "Etorki", "Evansdale Farmhouse Brie", "Evora De L'Alentejo", "Exmoor Blue",
+            "Explorateur", "Feta", "Feta (Australian)", "Figue", "Filetta", "Fin-de-Siecle",
+            "Finlandia Swiss", "Finn", "Fiore Sardo", "Fleur du Maquis", "Flor de Guia",
+            "Flower Marie", "Folded", "Folded cheese with mint", "Fondant de Brebis",
+            "Fontainebleau", "Fontal", "Fontina Val d'Aosta", "Formaggio di capra", "Fougerus",
+            "Four Herb Gouda", "Fourme d' Ambert", "Fourme de Haute Loire", "Fourme de Montbrison",
+            "Fresh Jack", "Fresh Mozzarella", "Fresh Ricotta", "Fresh Truffles", "Fribourgeois",
+            "Friesekaas", "Friesian", "Friesla", "Frinault", "Fromage a Raclette", "Fromage Corse",
+            "Fromage de Montagne de Savoie", "Fromage Frais", "Fruit Cream Cheese",
+            "Frying Cheese", "Fynbo", "Gabriel", "Galette du Paludier", "Galette Lyonnaise",
+            "Galloway Goat's Milk Gems", "Gammelost", "Gaperon a l'Ail", "Garrotxa", "Gastanberra",
+            "Geitost", "Gippsland Blue", "Gjetost", "Gloucester", "Golden Cross", "Gorgonzola",
+            "Gornyaltajski", "Gospel Green", "Gouda", "Goutu", "Gowrie", "Grabetto", "Graddost",
+            "Grafton Village Cheddar", "Grana", "Grana Padano", "Grand Vatel",
+            "Grataron d' Areches", "Gratte-Paille", "Graviera", "Greuilh", "Greve",
+            "Gris de Lille", "Gruyere", "Gubbeen", "Guerbigny", "Halloumi",
+            "Halloumy (Australian)", "Haloumi-Style Cheese", "Harbourne Blue", "Havarti",
+            "Heidi Gruyere", "Hereford Hop", "Herrgardsost", "Herriot Farmhouse", "Herve",
+            "Hipi Iti", "Hubbardston Blue Cow", "Hushallsost", "Iberico", "Idaho Goatster",
+            "Idiazabal", "Il Boschetto al Tartufo", "Ile d'Yeu", "Isle of Mull", "Jarlsberg",
+            "Jermi Tortes", "Jibneh Arabieh", "Jindi Brie", "Jubilee Blue", "Juustoleipa",
+            "Kadchgall", "Kaseri", "Kashta", "Kefalotyri", "Kenafa", "Kernhem", "Kervella Affine",
+            "Kikorangi", "King Island Cape Wickham Brie", "King River Gold", "Klosterkaese",
+            "Knockalara", "Kugelkase", "L'Aveyronnais", "L'Ecir de l'Aubrac", "La Taupiniere",
+            "La Vache Qui Rit", "Laguiole", "Lairobell", "Lajta", "Lanark Blue", "Lancashire",
+            "Langres", "Lappi", "Laruns", "Lavistown", "Le Brin", "Le Fium Orbo", "Le Lacandou",
+            "Le Roule", "Leafield", "Lebbene", "Leerdammer", "Leicester", "Leyden", "Limburger",
+            "Lincolnshire Poacher", "Lingot Saint Bousquet d'Orb", "Liptauer", "Little Rydings",
+            "Livarot", "Llanboidy", "Llanglofan Farmhouse", "Loch Arthur Farmhouse",
+            "Loddiswell Avondale", "Longhorn", "Lou Palou", "Lou Pevre", "Lyonnais", "Maasdam",
+            "Macconais", "Mahoe Aged Gouda", "Mahon", "Malvern", "Mamirolle", "Manchego",
+            "Manouri", "Manur", "Marble Cheddar", "Marbled Cheeses", "Maredsous", "Margotin",
+            "Maribo", "Maroilles", "Mascares", "Mascarpone", "Mascarpone (Australian)",
+            "Mascarpone Torta", "Matocq", "Maytag Blue", "Meira", "Menallack Farmhouse",
+            "Menonita", "Meredith Blue", "Mesost", "Metton (Cancoillotte)", "Meyer Vintage Gouda",
+            "Mihalic Peynir", "Milleens", "Mimolette", "Mine-Gabhar", "Mini Baby Bells", "Mixte",
+            "Molbo", "Monastery Cheeses", "Mondseer", "Mont D'or Lyonnais", "Montasio",
+            "Monterey Jack", "Monterey Jack Dry", "Morbier", "Morbier Cru de Montagne",
+            "Mothais a la Feuille", "Mozzarella", "Mozzarella (Australian)",
+            "Mozzarella di Bufala", "Mozzarella Fresh, in water", "Mozzarella Rolls", "Munster",
+            "Murol", "Mycella", "Myzithra", "Naboulsi", "Nantais", "Neufchatel",
+            "Neufchatel (Australian)", "Niolo", "Nokkelost", "Northumberland", "Oaxaca",
+            "Olde York", "Olivet au Foin", "Olivet Bleu", "Olivet Cendre",
+            "Orkney Extra Mature Cheddar", "Orla", "Oschtjepka", "Ossau Fermier", "Ossau-Iraty",
+            "Oszczypek", "Oxford Blue", "P'tit Berrichon", "Palet de Babligny", "Paneer", "Panela",
+            "Pannerone", "Pant ys Gawn", "Parmesan (Parmigiano)", "Parmigiano Reggiano",
+            "Pas de l'Escalette", "Passendale", "Pasteurized Processed", "Pate de Fromage",
+            "Patefine Fort", "Pave d'Affinois", "Pave d'Auge", "Pave de Chirac", "Pave du Berry",
+            "Pecorino", "Pecorino in Walnut Leaves", "Pecorino Romano", "Peekskill Pyramid",
+            "Pelardon des Cevennes", "Pelardon des Corbieres", "Penamellera", "Penbryn",
+            "Pencarreg", "Perail de Brebis", "Petit Morin", "Petit Pardou", "Petit-Suisse",
+            "Picodon de Chevre", "Picos de Europa", "Piora", "Pithtviers au Foin",
+            "Plateau de Herve", "Plymouth Cheese", "Podhalanski", "Poivre d'Ane", "Polkolbin",
+            "Pont l'Eveque", "Port Nicholson", "Port-Salut", "Postel", "Pouligny-Saint-Pierre",
+            "Pourly", "Prastost", "Pressato", "Prince-Jean", "Processed Cheddar", "Provolone",
+            "Provolone (Australian)", "Pyengana Cheddar", "Pyramide", "Quark",
+            "Quark (Australian)", "Quartirolo Lombardo", "Quatre-Vents", "Quercy Petit",
+            "Queso Blanco", "Queso Blanco con Frutas --Pina y Mango", "Queso de Murcia",
+            "Queso del Montsec", "Queso del Tietar", "Queso Fresco", "Queso Fresco (Adobera)",
+            "Queso Iberico", "Queso Jalapeno", "Queso Majorero", "Queso Media Luna",
+            "Queso Para Frier", "Queso Quesadilla", "Rabacal", "Raclette", "Ragusano", "Raschera",
+            "Reblochon", "Red Leicester", "Regal de la Dombes", "Reggianito", "Remedou",
+            "Requeson", "Richelieu", "Ricotta", "Ricotta (Australian)", "Ricotta Salata", "Ridder",
+            "Rigotte", "Rocamadour", "Rollot", "Romano", "Romans Part Dieu", "Roncal", "Roquefort",
+            "Roule", "Rouleau De Beaulieu", "Royalp Tilsit", "Rubens", "Rustinu", "Saaland Pfarr",
+            "Saanenkaese", "Saga", "Sage Derby", "Sainte Maure", "Saint-Marcellin",
+            "Saint-Nectaire", "Saint-Paulin", "Salers", "Samso", "San Simon", "Sancerre",
+            "Sap Sago", "Sardo", "Sardo Egyptian", "Sbrinz", "Scamorza", "Schabzieger", "Schloss",
+            "Selles sur Cher", "Selva", "Serat", "Seriously Strong Cheddar", "Serra da Estrela",
+            "Sharpam", "Shelburne Cheddar", "Shropshire Blue", "Siraz", "Sirene", "Smoked Gouda",
+            "Somerset Brie", "Sonoma Jack", "Sottocenare al Tartufo", "Soumaintrain",
+            "Sourire Lozerien", "Spenwood", "Sraffordshire Organic", "St. Agur Blue Cheese",
+            "Stilton", "Stinking Bishop", "String", "Sussex Slipcote", "Sveciaost", "Swaledale",
+            "Sweet Style Swiss", "Swiss", "Syrian (Armenian String)", "Tala", "Taleggio", "Tamie",
+            "Tasmania Highland Chevre Log", "Taupiniere", "Teifi", "Telemea", "Testouri",
+            "Tete de Moine", "Tetilla", "Texas Goat Cheese", "Tibet", "Tillamook Cheddar",
+            "Tilsit", "Timboon Brie", "Toma", "Tomme Brulee", "Tomme d'Abondance",
+            "Tomme de Chevre", "Tomme de Romans", "Tomme de Savoie", "Tomme des Chouans", "Tommes",
+            "Torta del Casar", "Toscanello", "Touree de L'Aubier", "Tourmalet",
+            "Trappe (Veritable)", "Trois Cornes De Vendee", "Tronchon", "Trou du Cru", "Truffe",
+            "Tupi", "Turunmaa", "Tymsboro", "Tyn Grug", "Tyning", "Ubriaco", "Ulloa",
+            "Vacherin-Fribourgeois", "Valencay", "Vasterbottenost", "Venaco", "Vendomois",
+            "Vieux Corse", "Vignotte", "Vulscombe", "Waimata Farmhouse Blue",
+            "Washed Rind Cheese (Australian)", "Waterloo", "Weichkaese", "Wellington",
+            "Wensleydale", "White Stilton", "Whitestone Farmhouse", "Wigmore", "Woodside Cabecou",
+            "Xanadu", "Xynotyro", "Yarg Cornish", "Yarra Valley Pyramid", "Yorkshire Blue",
+            "Zamorano", "Zanetti Grana Padano", "Zanetti Parmigiano Reggiano"
+    };
+}
\ No newline at end of file
diff --git a/ui/actionbarcompat/ListPopupMenu/src/main/src/com/example/android/actionbarcompat/listpopupmenu/MainActivity.java b/ui/actionbarcompat/ListPopupMenu/src/main/src/com/example/android/actionbarcompat/listpopupmenu/MainActivity.java
new file mode 100644
index 0000000..7fd05cc
--- /dev/null
+++ b/ui/actionbarcompat/ListPopupMenu/src/main/src/com/example/android/actionbarcompat/listpopupmenu/MainActivity.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.actionbarcompat.listpopupmenu;
+
+import android.os.Bundle;
+import android.support.v4.view.MenuItemCompat;
+import android.support.v7.app.ActionBarActivity;
+import android.view.Menu;
+import android.view.MenuItem;
+
+/**
+ * This sample shows you how to use {@link android.support.v7.widget.PopupMenu PopupMenu} from
+ * ActionBarCompat to create a list, with each item having a dropdown menu.
+ * <p>
+ * The interesting part of this sample is in {@link PopupListFragment}.
+ *
+ * This Activity extends from {@link ActionBarActivity}, which provides all of the function
+ * necessary to display a compatible Action Bar on devices running Android v2.1+.
+ */
+public class MainActivity extends ActionBarActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        // Set content view (which contains a PopupListFragment)
+        setContentView(R.layout.activity_main);
+    }
+
+}
diff --git a/ui/actionbarcompat/ListPopupMenu/src/main/src/com/example/android/actionbarcompat/listpopupmenu/PopupListFragment.java b/ui/actionbarcompat/ListPopupMenu/src/main/src/com/example/android/actionbarcompat/listpopupmenu/PopupListFragment.java
new file mode 100644
index 0000000..754bf22
--- /dev/null
+++ b/ui/actionbarcompat/ListPopupMenu/src/main/src/com/example/android/actionbarcompat/listpopupmenu/PopupListFragment.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.example.android.actionbarcompat.listpopupmenu;
+
+import android.os.Bundle;
+import android.support.v4.app.ListFragment;
+import android.support.v7.widget.PopupMenu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+import android.widget.Toast;
+
+import java.util.ArrayList;
+
+/**
+ * This ListFragment displays a list of cheeses, with a clickable view on each item whichs displays
+ * a {@link android.support.v7.widget.PopupMenu PopupMenu} when clicked, allowing the user to
+ * remove the item from the list.
+ */
+public class PopupListFragment extends ListFragment implements View.OnClickListener {
+
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
+
+        // We want to allow modifications to the list so copy the dummy data array into an ArrayList
+        ArrayList<String> items = new ArrayList<String>();
+        for (int i = 0, z = Cheeses.CHEESES.length ; i < z ; i++) {
+            items.add(Cheeses.CHEESES[i]);
+        }
+
+        // Set the ListAdapter
+        setListAdapter(new PopupAdapter(items));
+    }
+
+    @Override
+    public void onListItemClick(ListView listView, View v, int position, long id) {
+        String item = (String) listView.getItemAtPosition(position);
+
+        // Show a toast if the user clicks on an item
+        Toast.makeText(getActivity(), "Item Clicked: " + item, Toast.LENGTH_SHORT).show();
+    }
+
+    @Override
+    public void onClick(final View view) {
+        // We need to post a Runnable to show the popup to make sure that the PopupMenu is
+        // correctly positioned. The reason being that the view may change position before the
+        // PopupMenu is shown.
+        view.post(new Runnable() {
+            @Override
+            public void run() {
+                showPopupMenu(view);
+            }
+        });
+    }
+
+    // BEGIN_INCLUDE(show_popup)
+    private void showPopupMenu(View view) {
+        final PopupAdapter adapter = (PopupAdapter) getListAdapter();
+
+        // Retrieve the clicked item from view's tag
+        final String item = (String) view.getTag();
+
+        // Create a PopupMenu, giving it the clicked view for an anchor
+        PopupMenu popup = new PopupMenu(getActivity(), view);
+
+        // Inflate our menu resource into the PopupMenu's Menu
+        popup.getMenuInflater().inflate(R.menu.popup, popup.getMenu());
+
+        // Set a listener so we are notified if a menu item is clicked
+        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
+            @Override
+            public boolean onMenuItemClick(MenuItem menuItem) {
+                switch (menuItem.getItemId()) {
+                    case R.id.menu_remove:
+                        // Remove the item from the adapter
+                        adapter.remove(item);
+                        return true;
+                }
+                return false;
+            }
+        });
+
+        // Finally show the PopupMenu
+        popup.show();
+    }
+    // END_INCLUDE(show_popup)
+
+    /**
+     * A simple array adapter that creates a list of cheeses.
+     */
+    class PopupAdapter extends ArrayAdapter<String> {
+
+        PopupAdapter(ArrayList<String> items) {
+            super(getActivity(), R.layout.list_item, android.R.id.text1, items);
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup container) {
+            // Let ArrayAdapter inflate the layout and set the text
+            View view = super.getView(position, convertView, container);
+
+            // BEGIN_INCLUDE(button_popup)
+            // Retrieve the popup button from the inflated view
+            View popupButton = view.findViewById(R.id.button_popup);
+
+            // Set the item as the button's tag so it can be retrieved later
+            popupButton.setTag(getItem(position));
+
+            // Set the fragment instance as the OnClickListener
+            popupButton.setOnClickListener(PopupListFragment.this);
+            // END_INCLUDE(button_popup)
+
+            // Finally return the view to be displayed
+            return view;
+        }
+    }
+
+}
diff --git a/ui/actionbarcompat/ShareActionProvider/big_icon.png b/ui/actionbarcompat/ShareActionProvider/big_icon.png
new file mode 100644
index 0000000..7da0b23
--- /dev/null
+++ b/ui/actionbarcompat/ShareActionProvider/big_icon.png
Binary files differ
diff --git a/ui/actionbarcompat/ShareActionProvider/build.gradle b/ui/actionbarcompat/ShareActionProvider/build.gradle
new file mode 100644
index 0000000..b99b102
--- /dev/null
+++ b/ui/actionbarcompat/ShareActionProvider/build.gradle
@@ -0,0 +1,16 @@
+apply plugin: 'android'
+
+dependencies {
+    compile "com.android.support:support-v4:18.0.+"
+    compile "com.android.support:appcompat-v7:18.0.+"
+}
+
+android {
+    compileSdkVersion 17
+    buildToolsVersion "17.0.0"
+
+    defaultConfig {
+        minSdkVersion 7
+        targetSdkVersion 16
+    }
+}
diff --git a/ui/actionbarcompat/ShareActionProvider/src/main/AndroidManifest.xml b/ui/actionbarcompat/ShareActionProvider/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..8a5af4f
--- /dev/null
+++ b/ui/actionbarcompat/ShareActionProvider/src/main/AndroidManifest.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.example.android.actionbarcompat.shareactionprovider"
+    android:versionCode="1"
+    android:versionName="1.0">
+
+    <!--
+        ActionBarCompat provides an Action Bar from API v7 onwards
+    -->
+    <uses-sdk
+        android:minSdkVersion="7"
+        android:targetSdkVersion="17" />
+
+    <application
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/Theme.AppCompat"
+        android:allowBackup="true">
+
+        <activity
+            android:name=".MainActivity">
+            <!-- Launcher Intent filter -->
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+
+        <!-- ContentProvider which serves files from this application's asset folder -->
+        <provider
+            android:name=".content.AssetProvider"
+            android:authorities="com.example.android.actionbarcompat.shareactionprovider"
+            android:grantUriPermissions="true"
+            android:exported="true" />
+
+    </application>
+
+</manifest>
\ No newline at end of file
diff --git a/ui/actionbarcompat/ShareActionProvider/src/main/assets/photo_1.jpg b/ui/actionbarcompat/ShareActionProvider/src/main/assets/photo_1.jpg
new file mode 100644
index 0000000..cd365c7
--- /dev/null
+++ b/ui/actionbarcompat/ShareActionProvider/src/main/assets/photo_1.jpg
Binary files differ
diff --git a/ui/actionbarcompat/ShareActionProvider/src/main/assets/photo_2.jpg b/ui/actionbarcompat/ShareActionProvider/src/main/assets/photo_2.jpg
new file mode 100644
index 0000000..f088c11
--- /dev/null
+++ b/ui/actionbarcompat/ShareActionProvider/src/main/assets/photo_2.jpg
Binary files differ
diff --git a/ui/actionbarcompat/ShareActionProvider/src/main/assets/photo_3.jpg b/ui/actionbarcompat/ShareActionProvider/src/main/assets/photo_3.jpg
new file mode 100644
index 0000000..d4cff6a
--- /dev/null
+++ b/ui/actionbarcompat/ShareActionProvider/src/main/assets/photo_3.jpg
Binary files differ
diff --git a/ui/actionbarcompat/ShareActionProvider/src/main/res/drawable-hdpi/ic_launcher.png b/ui/actionbarcompat/ShareActionProvider/src/main/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..48db73f
--- /dev/null
+++ b/ui/actionbarcompat/ShareActionProvider/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/ui/actionbarcompat/ShareActionProvider/src/main/res/drawable-mdpi/ic_launcher.png b/ui/actionbarcompat/ShareActionProvider/src/main/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..674b1ee
--- /dev/null
+++ b/ui/actionbarcompat/ShareActionProvider/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/ui/actionbarcompat/ShareActionProvider/src/main/res/drawable-xhdpi/ic_launcher.png b/ui/actionbarcompat/ShareActionProvider/src/main/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..e76105d
--- /dev/null
+++ b/ui/actionbarcompat/ShareActionProvider/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/ui/actionbarcompat/ShareActionProvider/src/main/res/drawable-xxhdpi/ic_launcher.png b/ui/actionbarcompat/ShareActionProvider/src/main/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..67605d8
--- /dev/null
+++ b/ui/actionbarcompat/ShareActionProvider/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/ui/actionbarcompat/ShareActionProvider/src/main/res/layout/activity_main.xml b/ui/actionbarcompat/ShareActionProvider/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..902e8ab
--- /dev/null
+++ b/ui/actionbarcompat/ShareActionProvider/src/main/res/layout/activity_main.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <android.support.v4.view.ViewPager
+        android:id="@+id/viewpager"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1" />
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/intro_message"
+        android:padding="16dp"
+        android:textAppearance="?android:textAppearanceMedium"
+        android:lineSpacingMultiplier="1.1"
+        android:background="#fb3"/>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/ui/actionbarcompat/ShareActionProvider/src/main/res/layout/item_image.xml b/ui/actionbarcompat/ShareActionProvider/src/main/res/layout/item_image.xml
new file mode 100644
index 0000000..f7940e7
--- /dev/null
+++ b/ui/actionbarcompat/ShareActionProvider/src/main/res/layout/item_image.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:scaleType="fitCenter" />
diff --git a/ui/actionbarcompat/ShareActionProvider/src/main/res/layout/item_text.xml b/ui/actionbarcompat/ShareActionProvider/src/main/res/layout/item_text.xml
new file mode 100644
index 0000000..00c6a38
--- /dev/null
+++ b/ui/actionbarcompat/ShareActionProvider/src/main/res/layout/item_text.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:padding="16dp"
+    android:textAppearance="?android:textAppearanceLarge"
+    android:lineSpacingMultiplier="1.1"
+    android:gravity="center"/>
diff --git a/ui/actionbarcompat/ShareActionProvider/src/main/res/menu/main_menu.xml b/ui/actionbarcompat/ShareActionProvider/src/main/res/menu/main_menu.xml
new file mode 100644
index 0000000..acd2134
--- /dev/null
+++ b/ui/actionbarcompat/ShareActionProvider/src/main/res/menu/main_menu.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!--
+  As we're using ActionBarCompat, any action item attributes come from ActionBarCompat's XML
+  namespace instead of the android namespace. Here we've added a new support namespace added to
+  the menu element allowing us to use the 'showAsAction' attribute in a backwards compatible way.
+  Any other action item attributes used should be referenced from this namespace too
+  (actionProviderClass, actionViewClass, actionLayout).
+-->
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:support="http://schemas.android.com/apk/res-auto">
+
+    <!--
+      To use ShareActionProvider provided by ActionBarCompat, we reference the class by set the
+      support:actionProviderClass attribute with the full class name of ShareActionProvider.
+    -->
+    <item
+        android:id="@+id/menu_share"
+        android:title="@string/menu_share"
+        support:actionProviderClass="android.support.v7.widget.ShareActionProvider"
+        support:showAsAction="always" />
+
+</menu>
\ No newline at end of file
diff --git a/ui/actionbarcompat/ShareActionProvider/src/main/res/values/strings.xml b/ui/actionbarcompat/ShareActionProvider/src/main/res/values/strings.xml
new file mode 100644
index 0000000..d2b7ef8
--- /dev/null
+++ b/ui/actionbarcompat/ShareActionProvider/src/main/res/values/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<resources>
+
+    <string name="app_name">ABC ShareActionProvider</string>
+    <string name="intro_message">This sample demonstrates how to show a
+        <i>ShareActionProvider</i>, updated for the selected content.</string>
+    <string name="menu_share">Share</string>
+
+    <string name="quote_1">Expectation is the root of all heartache - William Shakespeare</string>
+    <string name="quote_2">The true sign of intelligence is not knowledge but imagination - Albert
+        Einstein</string>
+    <string name="quote_3">As for me, all I know is that I know nothing - Socrates</string>
+
+</resources>
\ No newline at end of file
diff --git a/ui/actionbarcompat/ShareActionProvider/src/main/src/com/example/android/actionbarcompat/shareactionprovider/MainActivity.java b/ui/actionbarcompat/ShareActionProvider/src/main/src/com/example/android/actionbarcompat/shareactionprovider/MainActivity.java
new file mode 100644
index 0000000..c651b39
--- /dev/null
+++ b/ui/actionbarcompat/ShareActionProvider/src/main/src/com/example/android/actionbarcompat/shareactionprovider/MainActivity.java
@@ -0,0 +1,202 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.actionbarcompat.shareactionprovider;
+
+import com.example.android.actionbarcompat.shareactionprovider.content.ContentItem;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v4.view.MenuItemCompat;
+import android.support.v4.view.PagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.support.v7.app.ActionBarActivity;
+import android.support.v7.widget.ShareActionProvider;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+
+/**
+ * This sample shows you how a provide a {@link ShareActionProvider} with ActionBarCompat,
+ * backwards compatible to API v7.
+ * <p>
+ * The sample contains a {@link ViewPager} which displays content of differing types: image and
+ * text. When a new item is selected in the ViewPager, the ShareActionProvider is updated with
+ * a share intent specific to that content.
+ * <p>
+ * This Activity extends from {@link ActionBarActivity}, which provides all of the function
+ * necessary to display a compatible Action Bar on devices running Android v2.1+.
+ */
+public class MainActivity extends ActionBarActivity {
+
+    // The items to be displayed in the ViewPager
+    private final ArrayList<ContentItem> mItems = getSampleContent();
+
+    // Keep reference to the ShareActionProvider from the menu
+    private ShareActionProvider mShareActionProvider;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        // Set content view (which contains a CheeseListFragment)
+        setContentView(R.layout.activity_main);
+
+        // Retrieve the ViewPager from the content view
+        ViewPager vp = (ViewPager) findViewById(R.id.viewpager);
+
+        // Set an OnPageChangeListener so we are notified when a new item is selected
+        vp.setOnPageChangeListener(mOnPageChangeListener);
+
+        // Finally set the adapter so the ViewPager can display items
+        vp.setAdapter(mPagerAdapter);
+    }
+
+    // BEGIN_INCLUDE(get_sap)
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        // Inflate the menu resource
+        getMenuInflater().inflate(R.menu.main_menu, menu);
+
+        // Retrieve the share menu item
+        MenuItem shareItem = menu.findItem(R.id.menu_share);
+
+        // Now get the ShareActionProvider from the item
+        mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareItem);
+
+        return super.onCreateOptionsMenu(menu);
+    }
+    // END_INCLUDE(get_sap)
+
+    /**
+     * A PagerAdapter which instantiates views based on the ContentItem's content type.
+     */
+    private final PagerAdapter mPagerAdapter = new PagerAdapter() {
+        LayoutInflater mInflater;
+
+        @Override
+        public int getCount() {
+            return mItems.size();
+        }
+
+        @Override
+        public boolean isViewFromObject(View view, Object o) {
+            return view == o;
+        }
+
+        @Override
+        public void destroyItem(ViewGroup container, int position, Object object) {
+            // Just remove the view from the ViewPager
+            container.removeView((View) object);
+        }
+
+        @Override
+        public Object instantiateItem(ViewGroup container, int position) {
+            // Ensure that the LayoutInflater is instantiated
+            if (mInflater == null) {
+                mInflater = LayoutInflater.from(MainActivity.this);
+            }
+
+            // Get the item for the requested position
+            final ContentItem item = mItems.get(position);
+
+            // The view we need to inflate changes based on the type of content
+            switch (item.contentType) {
+                case ContentItem.CONTENT_TYPE_TEXT: {
+                    // Inflate item layout for text
+                    TextView tv = (TextView) mInflater
+                            .inflate(R.layout.item_text, container, false);
+
+                    // Set text content using it's resource id
+                    tv.setText(item.contentResourceId);
+
+                    // Add the view to the ViewPager
+                    container.addView(tv);
+                    return tv;
+                }
+                case ContentItem.CONTENT_TYPE_IMAGE: {
+                    // Inflate item layout for images
+                    ImageView iv = (ImageView) mInflater
+                            .inflate(R.layout.item_image, container, false);
+
+                    // Load the image from it's content URI
+                    iv.setImageURI(item.getContentUri());
+
+                    // Add the view to the ViewPager
+                    container.addView(iv);
+                    return iv;
+                }
+            }
+
+            return null;
+        }
+    };
+
+    /**
+     * A OnPageChangeListener used to update the ShareActionProvider's share intent when a new item
+     * is selected in the ViewPager.
+     */
+    private final ViewPager.OnPageChangeListener mOnPageChangeListener
+            = new ViewPager.OnPageChangeListener() {
+
+        @Override
+        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+            // NO-OP
+        }
+
+        @Override
+        public void onPageSelected(int position) {
+            // BEGIN_INCLUDE(update_sap)
+            if (mShareActionProvider != null) {
+                // Get the currently selected item, and retrieve it's share intent
+                ContentItem item = mItems.get(position);
+                Intent shareIntent = item.getShareIntent(MainActivity.this);
+
+                // Now update the ShareActionProvider with the new share intent
+                mShareActionProvider.setShareIntent(shareIntent);
+            }
+            // END_INCLUDE(update_sap)
+        }
+
+        @Override
+        public void onPageScrollStateChanged(int state) {
+            // NO-OP
+        }
+    };
+
+    /**
+     * @return An ArrayList of ContentItem's to be displayed in this sample
+     */
+    static ArrayList<ContentItem> getSampleContent() {
+        ArrayList<ContentItem> items = new ArrayList<ContentItem>();
+
+        items.add(new ContentItem(ContentItem.CONTENT_TYPE_IMAGE, "photo_1.jpg"));
+        items.add(new ContentItem(ContentItem.CONTENT_TYPE_TEXT, R.string.quote_1));
+        items.add(new ContentItem(ContentItem.CONTENT_TYPE_TEXT, R.string.quote_2));
+        items.add(new ContentItem(ContentItem.CONTENT_TYPE_IMAGE, "photo_2.jpg"));
+        items.add(new ContentItem(ContentItem.CONTENT_TYPE_TEXT, R.string.quote_3));
+        items.add(new ContentItem(ContentItem.CONTENT_TYPE_IMAGE, "photo_3.jpg"));
+
+        return items;
+    }
+
+}
\ No newline at end of file
diff --git a/ui/actionbarcompat/ShareActionProvider/src/main/src/com/example/android/actionbarcompat/shareactionprovider/content/AssetProvider.java b/ui/actionbarcompat/ShareActionProvider/src/main/src/com/example/android/actionbarcompat/shareactionprovider/content/AssetProvider.java
new file mode 100644
index 0000000..b60f7d7
--- /dev/null
+++ b/ui/actionbarcompat/ShareActionProvider/src/main/src/com/example/android/actionbarcompat/shareactionprovider/content/AssetProvider.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.actionbarcompat.shareactionprovider.content;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.content.res.AssetFileDescriptor;
+import android.content.res.AssetManager;
+import android.database.Cursor;
+import android.net.Uri;
+import android.text.TextUtils;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+/**
+ * A simple ContentProvider which can serve files from this application's assets. The majority of
+ * functionality is in {@link #openAssetFile(android.net.Uri, String)}.
+ */
+public class AssetProvider extends ContentProvider {
+
+    public static String CONTENT_URI = "com.example.android.actionbarcompat.shareactionprovider";
+
+    @Override
+    public boolean onCreate() {
+        return true;
+    }
+
+    @Override
+    public int delete(Uri uri, String selection, String[] selectionArgs) {
+        // Do not support delete requests.
+        return 0;
+    }
+
+    @Override
+    public String getType(Uri uri) {
+        // Do not support returning the data type
+        return null;
+    }
+
+    @Override
+    public Uri insert(Uri uri, ContentValues values) {
+        // Do not support insert requests.
+        return null;
+    }
+
+    @Override
+    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+            String sortOrder) {
+        // Do not support query requests.
+        return null;
+    }
+
+    @Override
+    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
+        // Do not support update requests.
+        return 0;
+    }
+
+    @Override
+    public AssetFileDescriptor openAssetFile(Uri uri, String mode) throws FileNotFoundException {
+        // The asset file name should be the last path segment
+        final String assetName = uri.getLastPathSegment();
+
+        // If the given asset name is empty, throw an exception
+        if (TextUtils.isEmpty(assetName)) {
+            throw new FileNotFoundException();
+        }
+
+        try {
+            // Try and return a file descriptor for the given asset name
+            AssetManager am = getContext().getAssets();
+            return am.openFd(assetName);
+        } catch (IOException e) {
+            e.printStackTrace();
+            return super.openAssetFile(uri, mode);
+        }
+    }
+}
diff --git a/ui/actionbarcompat/ShareActionProvider/src/main/src/com/example/android/actionbarcompat/shareactionprovider/content/ContentItem.java b/ui/actionbarcompat/ShareActionProvider/src/main/src/com/example/android/actionbarcompat/shareactionprovider/content/ContentItem.java
new file mode 100644
index 0000000..09f8003
--- /dev/null
+++ b/ui/actionbarcompat/ShareActionProvider/src/main/src/com/example/android/actionbarcompat/shareactionprovider/content/ContentItem.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.actionbarcompat.shareactionprovider.content;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.text.TextUtils;
+
+/**
+ * This class encapsulates a content item. Referencing the content's type, and the differing way
+ * to reference the content (asset URI or resource id).
+ */
+public class ContentItem {
+    // Used to signify an image content type
+    public static final int CONTENT_TYPE_IMAGE = 0;
+    // Used to signify a text/string content type
+    public static final int CONTENT_TYPE_TEXT = 1;
+
+    public final int contentType;
+    public final int contentResourceId;
+    public final String contentAssetFilePath;
+
+    /**
+     * Creates a ContentItem with the specified type, referencing a resource id.
+     *
+     * @param type - One of {@link #CONTENT_TYPE_IMAGE} or {@link #CONTENT_TYPE_TEXT}
+     * @param resourceId - Resource ID to use for this item's content
+     */
+    public ContentItem(int type, int resourceId) {
+        contentType = type;
+        contentResourceId = resourceId;
+        contentAssetFilePath = null;
+    }
+
+    /**
+     * Creates a ContentItem with the specified type, referencing an asset file path.
+     *
+     * @param type - One of {@link #CONTENT_TYPE_IMAGE} or {@link #CONTENT_TYPE_TEXT}
+     * @param assetFilePath - File path from the application's asset for this item's content
+     */
+    public ContentItem(int type, String assetFilePath) {
+        contentType = type;
+        contentAssetFilePath = assetFilePath;
+        contentResourceId = 0;
+    }
+
+    /**
+     * @return Uri to the content
+     */
+    public Uri getContentUri() {
+        if (!TextUtils.isEmpty(contentAssetFilePath)) {
+            // If this content has an asset, then return a AssetProvider Uri
+            return Uri.parse("content://" + AssetProvider.CONTENT_URI + "/" + contentAssetFilePath);
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Returns an {@link Intent} which can be used to share this item's content with other
+     * applications.
+     *
+     * @param context - Context to be used for fetching resources if needed
+     * @return Intent to be given to a ShareActionProvider.
+     */
+    public Intent getShareIntent(Context context) {
+        Intent intent = new Intent(Intent.ACTION_SEND);
+
+        switch (contentType) {
+            case CONTENT_TYPE_IMAGE:
+                intent.setType("image/jpg");
+                // Bundle the asset content uri as the EXTRA_STREAM uri
+                intent.putExtra(Intent.EXTRA_STREAM, getContentUri());
+                break;
+
+            case CONTENT_TYPE_TEXT:
+                intent.setType("text/plain");
+                // Get the string resource and bundle it as an intent extra
+                intent.putExtra(Intent.EXTRA_TEXT, context.getString(contentResourceId));
+                break;
+        }
+
+        return intent;
+    }
+
+}
diff --git a/ui/actionbarcompat/Styled/build.gradle b/ui/actionbarcompat/Styled/build.gradle
new file mode 100644
index 0000000..b99b102
--- /dev/null
+++ b/ui/actionbarcompat/Styled/build.gradle
@@ -0,0 +1,16 @@
+apply plugin: 'android'
+
+dependencies {
+    compile "com.android.support:support-v4:18.0.+"
+    compile "com.android.support:appcompat-v7:18.0.+"
+}
+
+android {
+    compileSdkVersion 17
+    buildToolsVersion "17.0.0"
+
+    defaultConfig {
+        minSdkVersion 7
+        targetSdkVersion 16
+    }
+}
diff --git a/ui/actionbarcompat/Styled/src/main/AndroidManifest.xml b/ui/actionbarcompat/Styled/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..c51f234
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/AndroidManifest.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.example.android.actionbarcompat.styled"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk
+        android:minSdkVersion="7"
+        android:targetSdkVersion="17" />
+
+    <!--
+        Theme is set on the application so that our custom theme is used by
+        default by all Activities
+    -->
+    <application
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/Theme.Styled" >
+
+        <activity android:name=".MainActivity">
+
+            <!-- Launcher Intent filter -->
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+
+            <!--
+                In this example set the Activity to have a split action bar when the device's
+                display is narrow. In ActionBarCompat this is done by setting the
+                'android.support.UI_OPTIONS' metadata field to 'splitActionBarWhenNarrow'.
+            -->
+            <meta-data
+                android:name="android.support.UI_OPTIONS"
+                android:value="splitActionBarWhenNarrow" />
+
+        </activity>
+    </application>
+
+</manifest>
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ab_bottom_solid_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ab_bottom_solid_styled.9.png
new file mode 100644
index 0000000..f1d56b0
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ab_bottom_solid_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ab_solid_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ab_solid_styled.9.png
new file mode 100644
index 0000000..b9790a9
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ab_solid_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ab_stacked_solid_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ab_stacked_solid_styled.9.png
new file mode 100644
index 0000000..caa80ca
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ab_stacked_solid_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ic_action_location.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ic_action_location.png
new file mode 100644
index 0000000..9d75c31
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ic_action_location.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ic_action_refresh.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ic_action_refresh.png
new file mode 100644
index 0000000..0216514
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ic_action_refresh.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ic_action_settings.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ic_action_settings.png
new file mode 100644
index 0000000..8e30d96
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ic_action_settings.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ic_launcher.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..ba841fa
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/list_focused_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/list_focused_styled.9.png
new file mode 100644
index 0000000..1189239
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/list_focused_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/menu_dropdown_panel_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/menu_dropdown_panel_styled.9.png
new file mode 100644
index 0000000..a114859
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/menu_dropdown_panel_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/progress_bg_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/progress_bg_styled.9.png
new file mode 100644
index 0000000..3b183e0
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/progress_bg_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/progress_primary_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/progress_primary_styled.9.png
new file mode 100644
index 0000000..d9879bd
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/progress_primary_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/progress_secondary_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/progress_secondary_styled.9.png
new file mode 100644
index 0000000..7a6ee50
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/progress_secondary_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/spinner_ab_default_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/spinner_ab_default_styled.9.png
new file mode 100644
index 0000000..e518eb7
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/spinner_ab_default_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/spinner_ab_disabled_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/spinner_ab_disabled_styled.9.png
new file mode 100644
index 0000000..b6febf9
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/spinner_ab_disabled_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/spinner_ab_focused_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/spinner_ab_focused_styled.9.png
new file mode 100644
index 0000000..c631c2f
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/spinner_ab_focused_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/spinner_ab_pressed_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/spinner_ab_pressed_styled.9.png
new file mode 100644
index 0000000..8e71d1c
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/spinner_ab_pressed_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/tab_selected_focused_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/tab_selected_focused_styled.9.png
new file mode 100644
index 0000000..f4d6f2f
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/tab_selected_focused_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/tab_selected_pressed_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/tab_selected_pressed_styled.9.png
new file mode 100644
index 0000000..2aa7838
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/tab_selected_pressed_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/tab_selected_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/tab_selected_styled.9.png
new file mode 100644
index 0000000..e2b390a
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/tab_selected_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/tab_unselected_focused_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/tab_unselected_focused_styled.9.png
new file mode 100644
index 0000000..5b8b928
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/tab_unselected_focused_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/tab_unselected_pressed_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/tab_unselected_pressed_styled.9.png
new file mode 100644
index 0000000..18d2053
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-hdpi/tab_unselected_pressed_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ab_bottom_solid_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ab_bottom_solid_styled.9.png
new file mode 100644
index 0000000..79da2b0
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ab_bottom_solid_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ab_solid_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ab_solid_styled.9.png
new file mode 100644
index 0000000..617c08b
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ab_solid_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ab_stacked_solid_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ab_stacked_solid_styled.9.png
new file mode 100644
index 0000000..407382a
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ab_stacked_solid_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ic_action_location.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ic_action_location.png
new file mode 100644
index 0000000..b637f52
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ic_action_location.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ic_action_refresh.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ic_action_refresh.png
new file mode 100644
index 0000000..206314b
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ic_action_refresh.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ic_action_settings.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ic_action_settings.png
new file mode 100644
index 0000000..0e65c68
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ic_action_settings.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ic_launcher.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..2901fa6
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/list_focused_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/list_focused_styled.9.png
new file mode 100644
index 0000000..30095e6
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/list_focused_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/menu_dropdown_panel_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/menu_dropdown_panel_styled.9.png
new file mode 100644
index 0000000..ea341b5
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/menu_dropdown_panel_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/progress_bg_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/progress_bg_styled.9.png
new file mode 100644
index 0000000..71753a4
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/progress_bg_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/progress_primary_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/progress_primary_styled.9.png
new file mode 100644
index 0000000..375aff2
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/progress_primary_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/progress_secondary_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/progress_secondary_styled.9.png
new file mode 100644
index 0000000..d1dbb3b
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/progress_secondary_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/spinner_ab_default_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/spinner_ab_default_styled.9.png
new file mode 100644
index 0000000..5e1dd47
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/spinner_ab_default_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/spinner_ab_disabled_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/spinner_ab_disabled_styled.9.png
new file mode 100644
index 0000000..38025ad
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/spinner_ab_disabled_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/spinner_ab_focused_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/spinner_ab_focused_styled.9.png
new file mode 100644
index 0000000..37b4576
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/spinner_ab_focused_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/spinner_ab_pressed_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/spinner_ab_pressed_styled.9.png
new file mode 100644
index 0000000..8b99463
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/spinner_ab_pressed_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/tab_selected_focused_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/tab_selected_focused_styled.9.png
new file mode 100644
index 0000000..83daafb
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/tab_selected_focused_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/tab_selected_pressed_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/tab_selected_pressed_styled.9.png
new file mode 100644
index 0000000..d50ffaf
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/tab_selected_pressed_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/tab_selected_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/tab_selected_styled.9.png
new file mode 100644
index 0000000..6fdd7f4
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/tab_selected_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/tab_unselected_focused_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/tab_unselected_focused_styled.9.png
new file mode 100644
index 0000000..dc77e6d
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/tab_unselected_focused_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/tab_unselected_pressed_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/tab_unselected_pressed_styled.9.png
new file mode 100644
index 0000000..637d22d
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-mdpi/tab_unselected_pressed_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ab_bottom_solid_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ab_bottom_solid_styled.9.png
new file mode 100644
index 0000000..64f17a8
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ab_bottom_solid_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ab_solid_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ab_solid_styled.9.png
new file mode 100644
index 0000000..c557360
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ab_solid_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ab_stacked_solid_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ab_stacked_solid_styled.9.png
new file mode 100644
index 0000000..0ef2ec0
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ab_stacked_solid_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ic_action_location.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ic_action_location.png
new file mode 100644
index 0000000..e9bf9f3
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ic_action_location.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ic_action_refresh.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ic_action_refresh.png
new file mode 100644
index 0000000..ccd4b07
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ic_action_refresh.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ic_action_settings.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ic_action_settings.png
new file mode 100644
index 0000000..d0a733e
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ic_action_settings.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ic_launcher.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..866f146
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/list_focused_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/list_focused_styled.9.png
new file mode 100644
index 0000000..c02fe13
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/list_focused_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/menu_dropdown_panel_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/menu_dropdown_panel_styled.9.png
new file mode 100644
index 0000000..3d9f614
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/menu_dropdown_panel_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/progress_bg_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/progress_bg_styled.9.png
new file mode 100644
index 0000000..5ffc2ac
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/progress_bg_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/progress_primary_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/progress_primary_styled.9.png
new file mode 100644
index 0000000..8f66361
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/progress_primary_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/progress_secondary_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/progress_secondary_styled.9.png
new file mode 100644
index 0000000..f28f10b
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/progress_secondary_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/spinner_ab_default_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/spinner_ab_default_styled.9.png
new file mode 100644
index 0000000..f738a44
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/spinner_ab_default_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/spinner_ab_disabled_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/spinner_ab_disabled_styled.9.png
new file mode 100644
index 0000000..79d24c9
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/spinner_ab_disabled_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/spinner_ab_focused_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/spinner_ab_focused_styled.9.png
new file mode 100644
index 0000000..8be8d71
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/spinner_ab_focused_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/spinner_ab_pressed_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/spinner_ab_pressed_styled.9.png
new file mode 100644
index 0000000..774602c
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/spinner_ab_pressed_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/tab_selected_focused_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/tab_selected_focused_styled.9.png
new file mode 100644
index 0000000..c174424
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/tab_selected_focused_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/tab_selected_pressed_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/tab_selected_pressed_styled.9.png
new file mode 100644
index 0000000..62cbd04
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/tab_selected_pressed_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/tab_selected_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/tab_selected_styled.9.png
new file mode 100644
index 0000000..5009ce0
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/tab_selected_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/tab_unselected_focused_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/tab_unselected_focused_styled.9.png
new file mode 100644
index 0000000..2c2a567
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/tab_unselected_focused_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/tab_unselected_pressed_styled.9.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/tab_unselected_pressed_styled.9.png
new file mode 100644
index 0000000..81eba4c
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xhdpi/tab_unselected_pressed_styled.9.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable-xxhdpi/ic_launcher.png b/ui/actionbarcompat/Styled/src/main/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..cb301f2
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable/pressed_background.xml b/ui/actionbarcompat/Styled/src/main/res/drawable/pressed_background.xml
new file mode 100644
index 0000000..9de1ff7
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable/pressed_background.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!--
+  This drawable is used in our custom selected item background drawable: selectable_background.xml.
+  It is required as selector items need to be drawables, and not a raw color value as we are using.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+       android:shape="rectangle">
+
+    <solid android:color="@color/pressed_styled"/>
+
+</shape>
\ No newline at end of file
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable/progress_horizontal.xml b/ui/actionbarcompat/Styled/src/main/res/drawable/progress_horizontal.xml
new file mode 100644
index 0000000..bef8c57
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable/progress_horizontal.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!--
+  This drawable is used in our custom horizontal Progress Bar style:
+  Widget.Styled.ProgressBar.Horizontal
+-->
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item
+        android:id="@android:id/background"
+        android:drawable="@drawable/progress_bg_styled" />
+
+    <item android:id="@android:id/secondaryProgress">
+        <scale
+            android:drawable="@drawable/progress_secondary_styled"
+            android:scaleWidth="100%" />
+    </item>
+
+    <item android:id="@android:id/progress">
+        <scale
+            android:drawable="@drawable/progress_primary_styled"
+            android:scaleWidth="100%" />
+    </item>
+
+</layer-list>
\ No newline at end of file
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable/selectable_background.xml b/ui/actionbarcompat/Styled/src/main/res/drawable/selectable_background.xml
new file mode 100644
index 0000000..776dbb7
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable/selectable_background.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!--
+  This drawable is used as the main touch feedback drawable for the Action Bar. By default it is
+  used as the action item button background, amongst other things.
+
+  The different items in this drawable are displayed when their selector state matches the view's
+  state.
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item android:drawable="@drawable/list_focused_styled" android:state_focused="true"
+          android:state_pressed="false"/>
+    <item android:drawable="@drawable/pressed_background" android:state_pressed="true"/>
+    <item android:drawable="@android:color/transparent"/>
+
+</selector>
\ No newline at end of file
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable/spinner_background_ab.xml b/ui/actionbarcompat/Styled/src/main/res/drawable/spinner_background_ab.xml
new file mode 100644
index 0000000..a12db6e
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable/spinner_background_ab.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!--
+  This drawable is used to style the list navigation spinner in our custom Action Bar theme.
+
+  The different items in this drawable are displayed when their selector state matches the view's
+  state.
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item android:drawable="@drawable/spinner_ab_disabled_styled" android:state_enabled="false" />
+    <item android:drawable="@drawable/spinner_ab_pressed_styled" android:state_pressed="true" />
+    <item android:drawable="@drawable/spinner_ab_focused_styled" android:state_focused="true"
+        android:state_pressed="false" />
+    <item android:drawable="@drawable/spinner_ab_default_styled" />
+
+</selector>
\ No newline at end of file
diff --git a/ui/actionbarcompat/Styled/src/main/res/drawable/tab_indicator_ab.xml b/ui/actionbarcompat/Styled/src/main/res/drawable/tab_indicator_ab.xml
new file mode 100644
index 0000000..baa6492
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/drawable/tab_indicator_ab.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!--
+  This drawable is used as the background drawable for each tab displayed on the Action Bar.
+
+  The different items in this drawable are displayed when their selector state matches the view's
+  state.
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <!-- Non focused states -->
+    <item android:drawable="@android:color/transparent" android:state_focused="false"
+        android:state_pressed="false" android:state_selected="false" />
+    <item android:drawable="@drawable/tab_selected_styled" android:state_focused="false"
+        android:state_pressed="false" android:state_selected="true" />
+
+    <!-- Focused states -->
+    <item android:drawable="@drawable/tab_unselected_focused_styled" android:state_focused="true"
+        android:state_pressed="false" android:state_selected="false" />
+    <item android:drawable="@drawable/tab_selected_focused_styled" android:state_focused="true"
+        android:state_pressed="false" android:state_selected="true" />
+
+    <!-- Pressed & Non-focused -->
+    <item android:drawable="@drawable/tab_unselected_pressed_styled" android:state_focused="false"
+        android:state_pressed="true" android:state_selected="false" />
+    <item android:drawable="@drawable/tab_selected_pressed_styled" android:state_focused="false"
+        android:state_pressed="true" android:state_selected="true" />
+
+    <!-- Pressed & focused states -->
+    <item android:drawable="@drawable/tab_unselected_pressed_styled" android:state_focused="true"
+        android:state_pressed="true" android:state_selected="false" />
+    <item android:drawable="@drawable/tab_selected_pressed_styled" android:state_focused="true"
+        android:state_pressed="true" android:state_selected="true" />
+
+</selector>
\ No newline at end of file
diff --git a/ui/actionbarcompat/Styled/src/main/res/layout/activity_main.xml b/ui/actionbarcompat/Styled/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..a162d3f
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/layout/activity_main.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:text="@string/main_description"
+    android:padding="16dp"
+    android:gravity="center"/>
+
diff --git a/ui/actionbarcompat/Styled/src/main/res/menu/main.xml b/ui/actionbarcompat/Styled/src/main/res/menu/main.xml
new file mode 100644
index 0000000..778a443
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/menu/main.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!--
+  As we're using ActionBarCompat, any action item attributes come from ActionBarCompat's XML
+  namespace instead of the android namespace. Here we've added a new support namespace added to
+  the menu element allowing us to use the 'showAsAction' attribute in a backwards compatible way.
+  Any other action item attributes used should be referenced from this namespace too
+  (actionProviderClass, actionViewClass, actionLayout).
+-->
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:support="http://schemas.android.com/apk/res-auto" >
+
+    <!--
+       Here we create all of the items to be displayed in the menu, setting support:showAsAction to
+       define how the item should be displayed on the compatible Action Bar.
+    -->
+    <item
+        android:id="@+id/menu_refresh"
+        android:icon="@drawable/ic_action_refresh"
+        android:title="@string/menu_refresh"
+        support:showAsAction="ifRoom"/>
+
+    <item
+        android:id="@+id/menu_location"
+        android:icon="@drawable/ic_action_location"
+        android:title="@string/menu_location"
+        support:showAsAction="ifRoom"/>
+
+    <item
+        android:id="@+id/menu_settings"
+        android:icon="@drawable/ic_action_settings"
+        android:title="@string/menu_settings"
+        support:showAsAction="never"/>
+
+</menu>
\ No newline at end of file
diff --git a/ui/actionbarcompat/Styled/src/main/res/values-v14/styles.xml b/ui/actionbarcompat/Styled/src/main/res/values-v14/styles.xml
new file mode 100644
index 0000000..4bfec48
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/values-v14/styles.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<resources>
+
+    <!--
+        This is the styled theme.
+
+        It extends from Theme.AppCompat.Light, but it could extend from any of
+        the Theme.AppCompat themes depending on your color scheme. This theme can be applied to
+        your application or individual activities in the AndroidManifest.xml. In this sample it is
+        set on the application.
+
+        This differs from the version of this theme in 'res/values', as we revert back to
+        setting the attributes from the android namespace in ICS+.
+    -->
+
+    <style name="Theme.Styled" parent="@style/Theme.AppCompat.Light">
+        <item name="android:actionBarItemBackground">@drawable/selectable_background</item>
+        <item name="android:actionBarTabStyle">@style/Widget.Styled.ActionBar.TabView</item>
+        <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
+        <item name="android:actionDropDownStyle">
+            @style/Widget.Styled.Spinner.DropDown.ActionBar
+        </item>
+        <item name="android:dropDownListViewStyle">@style/Widget.Styled.ListView.DropDown</item>
+        <item name="android:popupMenuStyle">@style/Widget.Styled.PopupMenu</item>
+    </style>
+
+    <style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
+        <item name="android:background">@drawable/ab_solid_styled</item>
+        <item name="android:backgroundStacked">@drawable/ab_stacked_solid_styled</item>
+        <item name="android:backgroundSplit">@drawable/ab_bottom_solid_styled</item>
+        <item name="android:progressBarStyle">@style/Widget.Styled.ProgressBar.Horizontal</item>
+    </style>
+
+</resources>
\ No newline at end of file
diff --git a/ui/actionbarcompat/Styled/src/main/res/values/colors.xml b/ui/actionbarcompat/Styled/src/main/res/values/colors.xml
new file mode 100644
index 0000000..e111f59
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/values/colors.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<resources>
+
+    <color name="pressed_styled">#CC669900</color>
+
+</resources>
\ No newline at end of file
diff --git a/ui/actionbarcompat/Styled/src/main/res/values/strings.xml b/ui/actionbarcompat/Styled/src/main/res/values/strings.xml
new file mode 100644
index 0000000..63c7bb1
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/values/strings.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<resources>
+
+    <string name="app_name">ABC Styled</string>
+    <string name="menu_refresh">Refresh</string>
+    <string name="menu_location">Location</string>
+    <string name="menu_settings">Settings</string>
+    <string name="main_description">This is a basic Activity showing an Action Bar which has been
+        styled.
+    </string>
+
+</resources>
\ No newline at end of file
diff --git a/ui/actionbarcompat/Styled/src/main/res/values/styles.xml b/ui/actionbarcompat/Styled/src/main/res/values/styles.xml
new file mode 100644
index 0000000..75b0533
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/res/values/styles.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<resources>
+
+    <!--
+        This is the styled theme.
+
+        It extends from Theme.AppCompat.Light, but it could extend from any of
+        the Theme.AppCompat themes depending on your color scheme. This theme can be applied to
+        your application or individual activities in the AndroidManifest.xml. In this sample it is
+        set on the application.
+
+        This differs from the version of this theme in 'res/values-v14', as not all of the
+        necessary attributes are available in the android: namespace on older versions of Android.
+        This means that for certain attributes we must set the attributes provided in
+        ActionBarCompat's namespace instead.
+    -->
+
+    <style name="Theme.Styled" parent="@style/Theme.AppCompat.Light">
+        <item name="actionBarItemBackground">@drawable/selectable_background</item>
+        <item name="actionBarTabStyle">@style/Widget.Styled.ActionBar.TabView</item>
+        <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
+        <item name="actionDropDownStyle">@style/Widget.Styled.Spinner.DropDown.ActionBar</item>
+        <item name="dropDownListViewStyle">@style/Widget.Styled.ListView.DropDown</item>
+        <item name="popupMenuStyle">@style/Widget.Styled.PopupMenu</item>
+    </style>
+
+    <style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
+        <item name="background">@drawable/ab_solid_styled</item>
+        <item name="backgroundStacked">@drawable/ab_stacked_solid_styled</item>
+        <item name="backgroundSplit">@drawable/ab_bottom_solid_styled</item>
+        <item name="progressBarStyle">@style/Widget.Styled.ProgressBar.Horizontal</item>
+    </style>
+
+
+    <!--
+        For the following styles, the attributes are available in the android namespace which
+        means that we can set them here for all platforms (v7 through to the latest).
+    -->
+
+    <style name="Widget.Styled.ActionBar.TabView"
+           parent="@style/Widget.AppCompat.Light.ActionBar.TabView">
+        <item name="android:background">@drawable/tab_indicator_ab</item>
+    </style>
+
+    <style name="Widget.Styled.Spinner.DropDown.ActionBar"
+           parent="@style/Widget.AppCompat.Light.Spinner.DropDown.ActionBar">
+        <item name="android:background">@drawable/spinner_background_ab</item>
+        <item name="android:popupBackground">@drawable/menu_dropdown_panel_styled</item>
+        <item name="android:dropDownSelector">@drawable/selectable_background</item>
+    </style>
+
+    <style name="Widget.Styled.ProgressBar.Horizontal"
+           parent="@style/Widget.AppCompat.ProgressBar.Horizontal">
+        <item name="android:progressDrawable">@drawable/progress_horizontal</item>
+    </style>
+
+    <style name="Widget.Styled.PopupMenu" parent="@style/Widget.AppCompat.Light.PopupMenu">
+        <item name="android:popupBackground">@drawable/menu_dropdown_panel_styled</item>
+    </style>
+
+    <style name="Widget.Styled.ListView.DropDown"
+           parent="@style/Widget.AppCompat.Light.ListView.DropDown">
+        <item name="android:listSelector">@drawable/selectable_background</item>
+    </style>
+
+</resources>
\ No newline at end of file
diff --git a/ui/actionbarcompat/Styled/src/main/src/com/example/android/actionbarcompat/styled/MainActivity.java b/ui/actionbarcompat/Styled/src/main/src/com/example/android/actionbarcompat/styled/MainActivity.java
new file mode 100644
index 0000000..c258827
--- /dev/null
+++ b/ui/actionbarcompat/Styled/src/main/src/com/example/android/actionbarcompat/styled/MainActivity.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.actionbarcompat.styled;
+
+import android.os.Bundle;
+import android.support.v4.app.FragmentTransaction;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.ActionBarActivity;
+import android.view.Menu;
+
+/**
+ * This sample shows you how to use ActionBarCompat with a customized theme. It utilizes a split
+ * action bar when running on a device with a narrow display, and show three tabs.
+ *
+ * This Activity extends from {@link ActionBarActivity}, which provides all of the function
+ * necessary to display a compatible Action Bar on devices running Android v2.1+.
+ *
+ * The interesting bits of this sample start in the theme files
+ * ('res/values/styles.xml' and 'res/values-v14</styles.xml').
+ *
+ * Many of the drawables used in this sample were generated with the
+ * 'Android Action Bar Style Generator': http://jgilfelt.github.io/android-actionbarstylegenerator
+ */
+public class MainActivity extends ActionBarActivity implements ActionBar.TabListener {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+
+        // Set the Action Bar to use tabs for navigation
+        ActionBar ab = getSupportActionBar();
+        ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
+
+        // Add three tabs to the Action Bar for display
+        ab.addTab(ab.newTab().setText("Tab 1").setTabListener(this));
+        ab.addTab(ab.newTab().setText("Tab 2").setTabListener(this));
+        ab.addTab(ab.newTab().setText("Tab 3").setTabListener(this));
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        // Inflate menu from menu resource (res/menu/main)
+        getMenuInflater().inflate(R.menu.main, menu);
+
+        return super.onCreateOptionsMenu(menu);
+    }
+
+    // Implemented from ActionBar.TabListener
+    @Override
+    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
+        // This is called when a tab is selected.
+    }
+
+    // Implemented from ActionBar.TabListener
+    @Override
+    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
+        // This is called when a previously selected tab is unselected.
+    }
+
+    // Implemented from ActionBar.TabListener
+    @Override
+    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
+        // This is called when a previously selected tab is selected again.
+    }
+}
diff --git a/ui/lists/CustomChoiceList/CustomChoiceList/build.gradle b/ui/lists/CustomChoiceList/CustomChoiceList/build.gradle
new file mode 100644
index 0000000..0567910
--- /dev/null
+++ b/ui/lists/CustomChoiceList/CustomChoiceList/build.gradle
@@ -0,0 +1,20 @@
+buildscript {
+    repositories {
+        maven { url 'http://repo1.maven.org/maven2' }
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:0.5.+'
+    }
+}
+apply plugin: 'android'
+
+android {
+    compileSdkVersion 17
+    buildToolsVersion "17.0.0"
+
+    defaultConfig {
+        minSdkVersion 3
+        targetSdkVersion 17
+    }
+}
+
diff --git a/ui/lists/CustomChoiceList/AndroidManifest.xml b/ui/lists/CustomChoiceList/CustomChoiceList/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/lists/CustomChoiceList/AndroidManifest.xml
rename to ui/lists/CustomChoiceList/CustomChoiceList/src/main/AndroidManifest.xml
diff --git a/ui/lists/CustomChoiceList/src/com/example/android/customchoicelist/CheckableLinearLayout.java b/ui/lists/CustomChoiceList/CustomChoiceList/src/main/java/com/example/android/customchoicelist/CheckableLinearLayout.java
similarity index 100%
rename from ui/lists/CustomChoiceList/src/com/example/android/customchoicelist/CheckableLinearLayout.java
rename to ui/lists/CustomChoiceList/CustomChoiceList/src/main/java/com/example/android/customchoicelist/CheckableLinearLayout.java
diff --git a/ui/lists/CustomChoiceList/src/com/example/android/customchoicelist/Cheeses.java b/ui/lists/CustomChoiceList/CustomChoiceList/src/main/java/com/example/android/customchoicelist/Cheeses.java
similarity index 100%
rename from ui/lists/CustomChoiceList/src/com/example/android/customchoicelist/Cheeses.java
rename to ui/lists/CustomChoiceList/CustomChoiceList/src/main/java/com/example/android/customchoicelist/Cheeses.java
diff --git a/ui/lists/CustomChoiceList/src/com/example/android/customchoicelist/MainActivity.java b/ui/lists/CustomChoiceList/CustomChoiceList/src/main/java/com/example/android/customchoicelist/MainActivity.java
similarity index 100%
rename from ui/lists/CustomChoiceList/src/com/example/android/customchoicelist/MainActivity.java
rename to ui/lists/CustomChoiceList/CustomChoiceList/src/main/java/com/example/android/customchoicelist/MainActivity.java
diff --git a/ui/lists/CustomChoiceList/res/color/hideable_text_color.xml b/ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/color/hideable_text_color.xml
similarity index 100%
rename from ui/lists/CustomChoiceList/res/color/hideable_text_color.xml
rename to ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/color/hideable_text_color.xml
diff --git a/ui/lists/CustomChoiceList/res/drawable-hdpi/ic_launcher.png b/ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from ui/lists/CustomChoiceList/res/drawable-hdpi/ic_launcher.png
rename to ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/ui/lists/CustomChoiceList/res/drawable-mdpi/ic_launcher.png b/ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from ui/lists/CustomChoiceList/res/drawable-mdpi/ic_launcher.png
rename to ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/ui/lists/CustomChoiceList/res/drawable-xhdpi/ic_hideable_item_checked.png b/ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/drawable-xhdpi/ic_hideable_item_checked.png
similarity index 100%
rename from ui/lists/CustomChoiceList/res/drawable-xhdpi/ic_hideable_item_checked.png
rename to ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/drawable-xhdpi/ic_hideable_item_checked.png
Binary files differ
diff --git a/ui/lists/CustomChoiceList/res/drawable-xhdpi/ic_hideable_item_unchecked.png b/ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/drawable-xhdpi/ic_hideable_item_unchecked.png
similarity index 100%
rename from ui/lists/CustomChoiceList/res/drawable-xhdpi/ic_hideable_item_unchecked.png
rename to ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/drawable-xhdpi/ic_hideable_item_unchecked.png
Binary files differ
diff --git a/ui/lists/CustomChoiceList/res/drawable-xhdpi/ic_launcher.png b/ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from ui/lists/CustomChoiceList/res/drawable-xhdpi/ic_launcher.png
rename to ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/ui/lists/CustomChoiceList/res/drawable-xxhdpi/ic_launcher.png b/ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from ui/lists/CustomChoiceList/res/drawable-xxhdpi/ic_launcher.png
rename to ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/ui/lists/CustomChoiceList/res/drawable/ic_hideable_item.xml b/ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/drawable/ic_hideable_item.xml
similarity index 100%
rename from ui/lists/CustomChoiceList/res/drawable/ic_hideable_item.xml
rename to ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/drawable/ic_hideable_item.xml
diff --git a/ui/lists/CustomChoiceList/res/layout/activity_main.xml b/ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/layout/activity_main.xml
similarity index 100%
rename from ui/lists/CustomChoiceList/res/layout/activity_main.xml
rename to ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/layout/activity_main.xml
diff --git a/ui/lists/CustomChoiceList/res/layout/list_item.xml b/ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/layout/list_item.xml
similarity index 100%
rename from ui/lists/CustomChoiceList/res/layout/list_item.xml
rename to ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/layout/list_item.xml
diff --git a/ui/lists/CustomChoiceList/res/values-sw600dp/dimens.xml b/ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/values-sw600dp/dimens.xml
similarity index 100%
rename from ui/lists/CustomChoiceList/res/values-sw600dp/dimens.xml
rename to ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/values-sw600dp/dimens.xml
diff --git a/ui/lists/CustomChoiceList/res/values-sw600dp/styles.xml b/ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/values-sw600dp/styles.xml
similarity index 100%
rename from ui/lists/CustomChoiceList/res/values-sw600dp/styles.xml
rename to ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/values-sw600dp/styles.xml
diff --git a/ui/lists/CustomChoiceList/res/values-v11/styles.xml b/ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/values-v11/styles.xml
similarity index 100%
rename from ui/lists/CustomChoiceList/res/values-v11/styles.xml
rename to ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/values-v11/styles.xml
diff --git a/ui/lists/CustomChoiceList/res/values/dimens.xml b/ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/values/dimens.xml
similarity index 100%
rename from ui/lists/CustomChoiceList/res/values/dimens.xml
rename to ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/values/dimens.xml
diff --git a/ui/lists/CustomChoiceList/res/values/strings.xml b/ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/values/strings.xml
similarity index 100%
rename from ui/lists/CustomChoiceList/res/values/strings.xml
rename to ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/values/strings.xml
diff --git a/ui/lists/CustomChoiceList/res/values/styles.xml b/ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/values/styles.xml
similarity index 100%
rename from ui/lists/CustomChoiceList/res/values/styles.xml
rename to ui/lists/CustomChoiceList/CustomChoiceList/src/main/res/values/styles.xml
diff --git a/ui/lists/CustomChoiceList/build.gradle b/ui/lists/CustomChoiceList/build.gradle
new file mode 100644
index 0000000..f82180e
--- /dev/null
+++ b/ui/lists/CustomChoiceList/build.gradle
@@ -0,0 +1,2 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
diff --git a/ui/lists/CustomChoiceList/settings.gradle b/ui/lists/CustomChoiceList/settings.gradle
new file mode 100644
index 0000000..0c9c7b4
--- /dev/null
+++ b/ui/lists/CustomChoiceList/settings.gradle
@@ -0,0 +1 @@
+include ':CustomChoiceList'
diff --git a/ui/notifications/BasicNotifications/BasicNotifications/build.gradle b/ui/notifications/BasicNotifications/BasicNotifications/build.gradle
new file mode 100644
index 0000000..a5e56b5
--- /dev/null
+++ b/ui/notifications/BasicNotifications/BasicNotifications/build.gradle
@@ -0,0 +1,24 @@
+buildscript {
+    repositories {
+        maven { url 'http://repo1.maven.org/maven2' }
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:0.5.+'
+    }
+}
+apply plugin: 'android'
+
+dependencies {
+    compile files('libs/android-support-v4.jar')
+}
+
+android {
+    compileSdkVersion 17
+    buildToolsVersion "17.0.0"
+
+    defaultConfig {
+        minSdkVersion 8
+        targetSdkVersion 17
+    }
+}
+
diff --git a/ui/notifications/BasicNotifications/BasicNotifications/libs/android-support-v4.jar b/ui/notifications/BasicNotifications/BasicNotifications/libs/android-support-v4.jar
new file mode 100644
index 0000000..428bdbc
--- /dev/null
+++ b/ui/notifications/BasicNotifications/BasicNotifications/libs/android-support-v4.jar
Binary files differ
diff --git a/ui/notifications/BasicNotifications/AndroidManifest.xml b/ui/notifications/BasicNotifications/BasicNotifications/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/notifications/BasicNotifications/AndroidManifest.xml
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/AndroidManifest.xml
diff --git a/ui/notifications/BasicNotifications/big_icon.png b/ui/notifications/BasicNotifications/BasicNotifications/src/main/big_icon.png
similarity index 100%
rename from ui/notifications/BasicNotifications/big_icon.png
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/big_icon.png
Binary files differ
diff --git a/ui/notifications/BasicNotifications/src/com/example/android/basicnotifications/MainActivity.java b/ui/notifications/BasicNotifications/BasicNotifications/src/main/java/com/example/android/basicnotifications/MainActivity.java
similarity index 100%
rename from ui/notifications/BasicNotifications/src/com/example/android/basicnotifications/MainActivity.java
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/java/com/example/android/basicnotifications/MainActivity.java
diff --git a/ui/notifications/BasicNotifications/res/drawable-hdpi-v11/ic_stat_notification.png b/ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-hdpi-v11/ic_stat_notification.png
similarity index 100%
rename from ui/notifications/BasicNotifications/res/drawable-hdpi-v11/ic_stat_notification.png
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-hdpi-v11/ic_stat_notification.png
Binary files differ
diff --git a/ui/notifications/BasicNotifications/res/drawable-hdpi-v9/ic_stat_notification.png b/ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-hdpi-v9/ic_stat_notification.png
similarity index 100%
rename from ui/notifications/BasicNotifications/res/drawable-hdpi-v9/ic_stat_notification.png
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-hdpi-v9/ic_stat_notification.png
Binary files differ
diff --git a/ui/notifications/BasicNotifications/res/drawable-hdpi/ic_launcher.png b/ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from ui/notifications/BasicNotifications/res/drawable-hdpi/ic_launcher.png
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/ui/notifications/BasicNotifications/res/drawable-hdpi/ic_stat_notification.png b/ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-hdpi/ic_stat_notification.png
similarity index 100%
rename from ui/notifications/BasicNotifications/res/drawable-hdpi/ic_stat_notification.png
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-hdpi/ic_stat_notification.png
Binary files differ
diff --git a/ui/notifications/BasicNotifications/res/drawable-ldpi-v11/ic_stat_notification.png b/ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-ldpi-v11/ic_stat_notification.png
similarity index 100%
rename from ui/notifications/BasicNotifications/res/drawable-ldpi-v11/ic_stat_notification.png
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-ldpi-v11/ic_stat_notification.png
Binary files differ
diff --git a/ui/notifications/BasicNotifications/res/drawable-ldpi-v9/ic_stat_notification.png b/ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-ldpi-v9/ic_stat_notification.png
similarity index 100%
rename from ui/notifications/BasicNotifications/res/drawable-ldpi-v9/ic_stat_notification.png
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-ldpi-v9/ic_stat_notification.png
Binary files differ
diff --git a/ui/notifications/BasicNotifications/res/drawable-mdpi-v11/ic_stat_notification.png b/ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-mdpi-v11/ic_stat_notification.png
similarity index 100%
rename from ui/notifications/BasicNotifications/res/drawable-mdpi-v11/ic_stat_notification.png
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-mdpi-v11/ic_stat_notification.png
Binary files differ
diff --git a/ui/notifications/BasicNotifications/res/drawable-mdpi-v9/ic_stat_notification.png b/ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-mdpi-v9/ic_stat_notification.png
similarity index 100%
rename from ui/notifications/BasicNotifications/res/drawable-mdpi-v9/ic_stat_notification.png
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-mdpi-v9/ic_stat_notification.png
Binary files differ
diff --git a/ui/notifications/BasicNotifications/res/drawable-mdpi/ic_launcher.png b/ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from ui/notifications/BasicNotifications/res/drawable-mdpi/ic_launcher.png
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/ui/notifications/BasicNotifications/res/drawable-mdpi/ic_stat_notification.png b/ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-mdpi/ic_stat_notification.png
similarity index 100%
rename from ui/notifications/BasicNotifications/res/drawable-mdpi/ic_stat_notification.png
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-mdpi/ic_stat_notification.png
Binary files differ
diff --git a/ui/notifications/BasicNotifications/res/drawable-xhdpi-v11/ic_stat_notification.png b/ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-xhdpi-v11/ic_stat_notification.png
similarity index 100%
rename from ui/notifications/BasicNotifications/res/drawable-xhdpi-v11/ic_stat_notification.png
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-xhdpi-v11/ic_stat_notification.png
Binary files differ
diff --git a/ui/notifications/BasicNotifications/res/drawable-xhdpi-v9/ic_stat_notification.png b/ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-xhdpi-v9/ic_stat_notification.png
similarity index 100%
rename from ui/notifications/BasicNotifications/res/drawable-xhdpi-v9/ic_stat_notification.png
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-xhdpi-v9/ic_stat_notification.png
Binary files differ
diff --git a/ui/notifications/BasicNotifications/res/drawable-xhdpi/ic_launcher.png b/ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from ui/notifications/BasicNotifications/res/drawable-xhdpi/ic_launcher.png
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/ui/notifications/BasicNotifications/res/drawable-xhdpi/ic_stat_notification.png b/ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-xhdpi/ic_stat_notification.png
similarity index 100%
rename from ui/notifications/BasicNotifications/res/drawable-xhdpi/ic_stat_notification.png
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-xhdpi/ic_stat_notification.png
Binary files differ
diff --git a/ui/notifications/BasicNotifications/res/drawable-xxhdpi/ic_launcher.png b/ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from ui/notifications/BasicNotifications/res/drawable-xxhdpi/ic_launcher.png
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/ui/notifications/BasicNotifications/res/layout/main_layout.xml b/ui/notifications/BasicNotifications/BasicNotifications/src/main/res/layout/main_layout.xml
similarity index 100%
rename from ui/notifications/BasicNotifications/res/layout/main_layout.xml
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/res/layout/main_layout.xml
diff --git a/ui/notifications/BasicNotifications/res/values-v11/styles.xml b/ui/notifications/BasicNotifications/BasicNotifications/src/main/res/values-v11/styles.xml
similarity index 100%
rename from ui/notifications/BasicNotifications/res/values-v11/styles.xml
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/res/values-v11/styles.xml
diff --git a/ui/notifications/BasicNotifications/res/values-v14/styles.xml b/ui/notifications/BasicNotifications/BasicNotifications/src/main/res/values-v14/styles.xml
similarity index 100%
rename from ui/notifications/BasicNotifications/res/values-v14/styles.xml
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/res/values-v14/styles.xml
diff --git a/ui/notifications/BasicNotifications/res/values/strings.xml b/ui/notifications/BasicNotifications/BasicNotifications/src/main/res/values/strings.xml
similarity index 100%
rename from ui/notifications/BasicNotifications/res/values/strings.xml
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/res/values/strings.xml
diff --git a/ui/notifications/BasicNotifications/res/values/styles.xml b/ui/notifications/BasicNotifications/BasicNotifications/src/main/res/values/styles.xml
similarity index 100%
rename from ui/notifications/BasicNotifications/res/values/styles.xml
rename to ui/notifications/BasicNotifications/BasicNotifications/src/main/res/values/styles.xml
diff --git a/ui/notifications/BasicNotifications/build.gradle b/ui/notifications/BasicNotifications/build.gradle
new file mode 100644
index 0000000..f82180e
--- /dev/null
+++ b/ui/notifications/BasicNotifications/build.gradle
@@ -0,0 +1,2 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
diff --git a/ui/notifications/BasicNotifications/settings.gradle b/ui/notifications/BasicNotifications/settings.gradle
new file mode 100644
index 0000000..6f0df94
--- /dev/null
+++ b/ui/notifications/BasicNotifications/settings.gradle
@@ -0,0 +1 @@
+include ':BasicNotifications'
diff --git a/ui/views/TextSwitcher/TextSwitcher/build.gradle b/ui/views/TextSwitcher/TextSwitcher/build.gradle
new file mode 100644
index 0000000..72904c9
--- /dev/null
+++ b/ui/views/TextSwitcher/TextSwitcher/build.gradle
@@ -0,0 +1,24 @@
+buildscript {
+    repositories {
+        maven { url 'http://repo1.maven.org/maven2' }
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:0.5.+'
+    }
+}
+apply plugin: 'android'
+
+dependencies {
+    compile files('libs/android-support-v4.jar')
+}
+
+android {
+    compileSdkVersion 17
+    buildToolsVersion "17.0.0"
+
+    defaultConfig {
+        minSdkVersion 4
+        targetSdkVersion 17
+    }
+}
+
diff --git a/ui/views/TextSwitcher/AndroidManifest.xml b/ui/views/TextSwitcher/TextSwitcher/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/views/TextSwitcher/AndroidManifest.xml
rename to ui/views/TextSwitcher/TextSwitcher/src/main/AndroidManifest.xml
diff --git a/ui/views/TextSwitcher/src/com/example/android/ui/views/textswitcher/MainActivity.java b/ui/views/TextSwitcher/TextSwitcher/src/main/java/com/example/android/ui/views/textswitcher/MainActivity.java
similarity index 100%
rename from ui/views/TextSwitcher/src/com/example/android/ui/views/textswitcher/MainActivity.java
rename to ui/views/TextSwitcher/TextSwitcher/src/main/java/com/example/android/ui/views/textswitcher/MainActivity.java
diff --git a/ui/views/TextSwitcher/res/drawable-hdpi/ic_launcher.png b/ui/views/TextSwitcher/TextSwitcher/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from ui/views/TextSwitcher/res/drawable-hdpi/ic_launcher.png
rename to ui/views/TextSwitcher/TextSwitcher/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/ui/views/TextSwitcher/res/drawable-mdpi/ic_launcher.png b/ui/views/TextSwitcher/TextSwitcher/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from ui/views/TextSwitcher/res/drawable-mdpi/ic_launcher.png
rename to ui/views/TextSwitcher/TextSwitcher/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/ui/views/TextSwitcher/res/drawable-xhdpi/ic_launcher.png b/ui/views/TextSwitcher/TextSwitcher/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from ui/views/TextSwitcher/res/drawable-xhdpi/ic_launcher.png
rename to ui/views/TextSwitcher/TextSwitcher/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/ui/views/TextSwitcher/res/drawable-xxhdpi/ic_launcher.png b/ui/views/TextSwitcher/TextSwitcher/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from ui/views/TextSwitcher/res/drawable-xxhdpi/ic_launcher.png
rename to ui/views/TextSwitcher/TextSwitcher/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/ui/views/TextSwitcher/res/layout/activity_main.xml b/ui/views/TextSwitcher/TextSwitcher/src/main/res/layout/activity_main.xml
similarity index 100%
rename from ui/views/TextSwitcher/res/layout/activity_main.xml
rename to ui/views/TextSwitcher/TextSwitcher/src/main/res/layout/activity_main.xml
diff --git a/ui/views/TextSwitcher/res/values-sw600dp/dimens.xml b/ui/views/TextSwitcher/TextSwitcher/src/main/res/values-sw600dp/dimens.xml
similarity index 100%
rename from ui/views/TextSwitcher/res/values-sw600dp/dimens.xml
rename to ui/views/TextSwitcher/TextSwitcher/src/main/res/values-sw600dp/dimens.xml
diff --git a/ui/views/TextSwitcher/res/values-sw720dp-land/dimens.xml b/ui/views/TextSwitcher/TextSwitcher/src/main/res/values-sw720dp-land/dimens.xml
similarity index 100%
rename from ui/views/TextSwitcher/res/values-sw720dp-land/dimens.xml
rename to ui/views/TextSwitcher/TextSwitcher/src/main/res/values-sw720dp-land/dimens.xml
diff --git a/ui/views/TextSwitcher/res/values-v11/styles.xml b/ui/views/TextSwitcher/TextSwitcher/src/main/res/values-v11/styles.xml
similarity index 100%
rename from ui/views/TextSwitcher/res/values-v11/styles.xml
rename to ui/views/TextSwitcher/TextSwitcher/src/main/res/values-v11/styles.xml
diff --git a/ui/views/TextSwitcher/res/values-v14/styles.xml b/ui/views/TextSwitcher/TextSwitcher/src/main/res/values-v14/styles.xml
similarity index 100%
rename from ui/views/TextSwitcher/res/values-v14/styles.xml
rename to ui/views/TextSwitcher/TextSwitcher/src/main/res/values-v14/styles.xml
diff --git a/ui/views/TextSwitcher/res/values/dimens.xml b/ui/views/TextSwitcher/TextSwitcher/src/main/res/values/dimens.xml
similarity index 100%
rename from ui/views/TextSwitcher/res/values/dimens.xml
rename to ui/views/TextSwitcher/TextSwitcher/src/main/res/values/dimens.xml
diff --git a/ui/views/TextSwitcher/res/values/strings.xml b/ui/views/TextSwitcher/TextSwitcher/src/main/res/values/strings.xml
similarity index 100%
rename from ui/views/TextSwitcher/res/values/strings.xml
rename to ui/views/TextSwitcher/TextSwitcher/src/main/res/values/strings.xml
diff --git a/ui/views/TextSwitcher/res/values/styles.xml b/ui/views/TextSwitcher/TextSwitcher/src/main/res/values/styles.xml
similarity index 100%
rename from ui/views/TextSwitcher/res/values/styles.xml
rename to ui/views/TextSwitcher/TextSwitcher/src/main/res/values/styles.xml
diff --git a/ui/views/TextSwitcher/build.gradle b/ui/views/TextSwitcher/build.gradle
new file mode 100644
index 0000000..495c503
--- /dev/null
+++ b/ui/views/TextSwitcher/build.gradle
@@ -0,0 +1 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
diff --git a/ui/views/TextSwitcher/settings.gradle b/ui/views/TextSwitcher/settings.gradle
new file mode 100644
index 0000000..aefb871
--- /dev/null
+++ b/ui/views/TextSwitcher/settings.gradle
@@ -0,0 +1 @@
+include ':TextSwitcher'