Sample code for Android U lesson: Monetization - Ads without Compromising User Experience.
Change-Id: I6b077c24f71c00e99fe6e15da127b02707ad57f3
diff --git a/samples/training/ads-and-ux/AndroidManifest.xml b/samples/training/ads-and-ux/AndroidManifest.xml
new file mode 100644
index 0000000..30032f2
--- /dev/null
+++ b/samples/training/ads-and-ux/AndroidManifest.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2011 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.training.ads"
+ android:versionCode="1"
+ android:versionName="1.0">
+
+ <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="13" />
+
+ <application android:label="@string/app_name">
+ <activity android:name=".AdsCatalogActivity" android:label="@string/app_name">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ <!-- Ad network-specific activity packaged in the SDK. -->
+ <activity android:name="com.google.ads.AdActivity"
+ android:configChanges="keyboard|keyboardHidden|orientation"/>
+ </application>
+
+ <!-- Mobile ad networks typically require these permissions in order to fetch contents -->
+ <!-- over the network. -->
+ <uses-permission android:name="android.permission.INTERNET" />
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+
+</manifest>
diff --git a/samples/training/ads-and-ux/ReadMe.txt b/samples/training/ads-and-ux/ReadMe.txt
new file mode 100644
index 0000000..137397c
--- /dev/null
+++ b/samples/training/ads-and-ux/ReadMe.txt
@@ -0,0 +1,9 @@
+This sample demonstrates the integration of an mobile ad SDK with your application. In this case,
+AdMob is used.
+
+The application has the following external dependencies. In order to build, be sure to obtain these
+JAR files and put them under the libs directory.
+1. AdMob SDK
+ http://code.google.com/mobile/ads/download.html
+2. ViewPager depends on the Android Support Package v4 or above.
+ http://developer.android.com/sdk/compatibility-library.html
\ No newline at end of file
diff --git a/samples/training/ads-and-ux/_index.html b/samples/training/ads-and-ux/_index.html
new file mode 100644
index 0000000..a4eeb31
--- /dev/null
+++ b/samples/training/ads-and-ux/_index.html
@@ -0,0 +1,14 @@
+<p>This sample demonstrates the integration of a mobile ad SDK with your application. In this case, <a href="http://www.admob.com">AdMob</a> is used to illustrate key integration concepts.</p>
+
+<p>The application has the following external dependencies. In order to build, be sure to obtain these JAR files and put them under the <code>libs/</code> directory.
+ <ol>
+ <li>
+ <strong>AdMob SDK</strong> - <a href="http://code.google.com/mobile/ads/download.html" >http://code.google.com/mobile/ads/download.html</a>
+ </li>
+ <li>
+ <strong>Android Support Package v4 or above</strong> - <a href="http://developer.android.com/sdk/compatibility-library.html" >http://developer.android.com/sdk/compatibility-library.html</a>
+ </li>
+ </ol>
+</p>
+
+<p>Refer to the <a href="/training/monetization/ads-and-ux.html" />Advertising without Compromising User Experience</a> class for detail.
\ No newline at end of file
diff --git a/samples/training/ads-and-ux/res/drawable-hdpi/ic_home.png b/samples/training/ads-and-ux/res/drawable-hdpi/ic_home.png
new file mode 100644
index 0000000..7e52ff5
--- /dev/null
+++ b/samples/training/ads-and-ux/res/drawable-hdpi/ic_home.png
Binary files differ
diff --git a/samples/training/ads-and-ux/res/drawable-mdpi/android_logo.png b/samples/training/ads-and-ux/res/drawable-mdpi/android_logo.png
new file mode 100644
index 0000000..15f1545
--- /dev/null
+++ b/samples/training/ads-and-ux/res/drawable-mdpi/android_logo.png
Binary files differ
diff --git a/samples/training/ads-and-ux/res/layout-land/ad_bottom.xml b/samples/training/ads-and-ux/res/layout-land/ad_bottom.xml
new file mode 100644
index 0000000..0b3ac14
--- /dev/null
+++ b/samples/training/ads-and-ux/res/layout-land/ad_bottom.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 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.
+-->
+
+<!-- Top-level content view for the simple fragment sample. -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/ad_catalog_layout"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
+ <TextView android:id="@+id/title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/banner_bottom" />
+ <TextView android:id="@+id/status"
+ android:layout_width="match_parent"
+ android:layout_height="0px"
+ android:layout_weight="1"
+ android:text="" />
+ <com.google.ads.AdView xmlns:googleads="http://schemas.android.com/apk/lib/com.google.ads"
+ android:id="@+id/ad"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ googleads:adSize="BANNER"
+ googleads:adUnitId="@string/admob_id" />
+</LinearLayout>
diff --git a/samples/training/ads-and-ux/res/layout-large/ad_bottom.xml b/samples/training/ads-and-ux/res/layout-large/ad_bottom.xml
new file mode 100644
index 0000000..54de750
--- /dev/null
+++ b/samples/training/ads-and-ux/res/layout-large/ad_bottom.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 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.
+-->
+
+<!-- Top-level content view for the simple fragment sample. -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/ad_catalog_layout"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
+ <TextView android:id="@+id/title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/banner_bottom" />
+ <TextView android:id="@+id/status"
+ android:layout_width="match_parent"
+ android:layout_height="0px"
+ android:layout_weight="1"
+ android:text="" />
+ <com.google.ads.AdView xmlns:googleads="http://schemas.android.com/apk/lib/com.google.ads"
+ android:id="@+id/ad"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ googleads:adSize="IAB_BANNER"
+ googleads:adUnitId="@string/admob_id" />
+</LinearLayout>
\ No newline at end of file
diff --git a/samples/training/ads-and-ux/res/layout-large/ad_covers_content.xml b/samples/training/ads-and-ux/res/layout-large/ad_covers_content.xml
new file mode 100644
index 0000000..b3359c2
--- /dev/null
+++ b/samples/training/ads-and-ux/res/layout-large/ad_covers_content.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 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.
+-->
+
+<!-- Top-level content view for the simple fragment sample. -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
+ <LinearLayout android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+ <TextView android:id="@+id/title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/ad_covers_content" />
+ <TextView android:id="@+id/status"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+ </LinearLayout>
+ <ImageView android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@drawable/android_logo"
+ android:layout_gravity="center"/>
+ <com.google.ads.AdView xmlns:googleads="http://schemas.android.com/apk/lib/com.google.ads"
+ android:id="@+id/ad"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ googleads:adSize="IAB_LEADERBOARD"
+ googleads:adUnitId="@string/admob_id"
+ android:layout_gravity="center" />
+</FrameLayout>
diff --git a/samples/training/ads-and-ux/res/layout-large/ad_next_to_button.xml b/samples/training/ads-and-ux/res/layout-large/ad_next_to_button.xml
new file mode 100644
index 0000000..a83f4f2
--- /dev/null
+++ b/samples/training/ads-and-ux/res/layout-large/ad_next_to_button.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 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.
+-->
+
+<!-- Top-level content view for the simple fragment sample. -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/ad_catalog_layout"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
+ <com.google.ads.AdView xmlns:googleads="http://schemas.android.com/apk/lib/com.google.ads"
+ android:id="@+id/ad"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ googleads:adSize="IAB_LEADERBOARD"
+ googleads:adUnitId="@string/admob_id" />
+ <Button android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:text="@string/button_close_to_ad"/>
+ <TextView android:id="@+id/status"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="" />
+</LinearLayout>
diff --git a/samples/training/ads-and-ux/res/layout-large/ad_top.xml b/samples/training/ads-and-ux/res/layout-large/ad_top.xml
new file mode 100644
index 0000000..ea36ee7
--- /dev/null
+++ b/samples/training/ads-and-ux/res/layout-large/ad_top.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 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.
+-->
+
+<!-- Top-level content view for the simple fragment sample. -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/ad_catalog_layout"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
+ <com.google.ads.AdView xmlns:googleads="http://schemas.android.com/apk/lib/com.google.ads"
+ android:id="@+id/ad"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ googleads:adSize="IAB_LEADERBOARD"
+ googleads:adUnitId="@string/admob_id" />
+
+ <TextView android:id="@+id/title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/banner_top" />
+ <TextView android:id="@+id/status"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="" />
+</LinearLayout>
\ No newline at end of file
diff --git a/samples/training/ads-and-ux/res/layout/ad_bottom.xml b/samples/training/ads-and-ux/res/layout/ad_bottom.xml
new file mode 100644
index 0000000..677f5fd
--- /dev/null
+++ b/samples/training/ads-and-ux/res/layout/ad_bottom.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 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.
+-->
+
+<!-- Top-level content view for the simple fragment sample. -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/ad_catalog_layout"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
+ <TextView android:id="@+id/title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/banner_bottom" />
+ <TextView android:id="@+id/status"
+ android:layout_width="match_parent"
+ android:layout_height="0px"
+ android:layout_weight="1"
+ android:text="" />
+ <com.google.ads.AdView xmlns:googleads="http://schemas.android.com/apk/lib/com.google.ads"
+ android:id="@+id/ad"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ googleads:adSize="IAB_MRECT"
+ googleads:adUnitId="@string/admob_id" />
+</LinearLayout>
\ No newline at end of file
diff --git a/samples/training/ads-and-ux/res/layout/ad_covers_content.xml b/samples/training/ads-and-ux/res/layout/ad_covers_content.xml
new file mode 100644
index 0000000..71764c3
--- /dev/null
+++ b/samples/training/ads-and-ux/res/layout/ad_covers_content.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 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.
+-->
+
+<!-- Top-level content view for the simple fragment sample. -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
+ <LinearLayout android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+ <TextView android:id="@+id/title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/ad_covers_content" />
+ <TextView android:id="@+id/status"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+ </LinearLayout>
+ <ImageView android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@drawable/android_logo"
+ android:layout_gravity="center"/>
+ <com.google.ads.AdView xmlns:googleads="http://schemas.android.com/apk/lib/com.google.ads"
+ android:id="@+id/ad"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ googleads:adSize="BANNER"
+ googleads:adUnitId="@string/admob_id"
+ android:layout_gravity="center" />
+</FrameLayout>
\ No newline at end of file
diff --git a/samples/training/ads-and-ux/res/layout/ad_next_to_button.xml b/samples/training/ads-and-ux/res/layout/ad_next_to_button.xml
new file mode 100644
index 0000000..1284884
--- /dev/null
+++ b/samples/training/ads-and-ux/res/layout/ad_next_to_button.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 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.
+-->
+
+<!-- Top-level content view for the simple fragment sample. -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/ad_catalog_layout"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
+ <com.google.ads.AdView xmlns:googleads="http://schemas.android.com/apk/lib/com.google.ads"
+ android:id="@+id/ad"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ googleads:adSize="BANNER"
+ googleads:adUnitId="@string/admob_id" />
+ <Button android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:text="@string/button_close_to_ad"/>
+ <TextView android:id="@+id/status"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="" />
+</LinearLayout>
diff --git a/samples/training/ads-and-ux/res/layout/ad_top.xml b/samples/training/ads-and-ux/res/layout/ad_top.xml
new file mode 100644
index 0000000..9d92c45
--- /dev/null
+++ b/samples/training/ads-and-ux/res/layout/ad_top.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 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.
+-->
+
+<!-- Top-level content view for the simple fragment sample. -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/ad_catalog_layout"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
+ <com.google.ads.AdView xmlns:googleads="http://schemas.android.com/apk/lib/com.google.ads"
+ android:id="@+id/ad"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ googleads:adSize="BANNER"
+ googleads:adUnitId="@string/admob_id" />
+
+ <TextView android:id="@+id/title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/banner_top" />
+ <TextView android:id="@+id/status"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="" />
+</LinearLayout>
diff --git a/samples/training/ads-and-ux/res/layout/fragment_pager.xml b/samples/training/ads-and-ux/res/layout/fragment_pager.xml
new file mode 100644
index 0000000..89b2d44
--- /dev/null
+++ b/samples/training/ads-and-ux/res/layout/fragment_pager.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 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.
+-->
+
+<!-- Top-level content view for the simple fragment sample. -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <android.support.v4.view.ViewPager
+ android:id="@+id/pager"
+ android:layout_width="match_parent"
+ android:layout_height="0px"
+ android:layout_weight="1" />
+</LinearLayout>
\ No newline at end of file
diff --git a/samples/training/ads-and-ux/res/values/attrs.xml b/samples/training/ads-and-ux/res/values/attrs.xml
new file mode 100644
index 0000000..fa23866
--- /dev/null
+++ b/samples/training/ads-and-ux/res/values/attrs.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2011 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>
+
+ <declare-styleable name="AppTheme">
+ <attr name="actionbarCompatTitleStyle" format="reference" />
+ <attr name="actionbarCompatButtonStyle" format="reference" />
+ <attr name="actionbarCompatButtonHomeStyle" format="reference" />
+ <attr name="actionbarCompatProgressIndicatorStyle" format="reference" />
+ </declare-styleable>
+
+ <!-- Mostly taken from frameworks/base.git/core/res/res/values/attrs.xml -->
+ <declare-styleable name="TextAppearance">
+ <attr name="textColor" format="color" />
+ <attr name="textSize" format="dimension" />
+
+ <attr name="textStyle">
+ <flag name="normal" value="0" />
+ <flag name="bold" value="1" />
+ <flag name="italic" value="2" />
+ </attr>
+
+ <attr name="typeface">
+ <enum name="normal" value="0" />
+ <enum name="sans" value="1" />
+ <enum name="serif" value="2" />
+ <enum name="monospace" value="3" />
+ </attr>
+
+ <attr name="shadowRadius" format="float" />
+ <attr name="shadowDx" format="float" />
+ <attr name="shadowDy" format="float" />
+ <attr name="shadowColor" format="color" />
+ </declare-styleable>
+
+</resources>
diff --git a/samples/training/ads-and-ux/res/values/colors.xml b/samples/training/ads-and-ux/res/values/colors.xml
new file mode 100644
index 0000000..531c8c1
--- /dev/null
+++ b/samples/training/ads-and-ux/res/values/colors.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2011 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="accent_1">#224894</color>
+</resources>
diff --git a/samples/training/ads-and-ux/res/values/dimens.xml b/samples/training/ads-and-ux/res/values/dimens.xml
new file mode 100644
index 0000000..46bf31d
--- /dev/null
+++ b/samples/training/ads-and-ux/res/values/dimens.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2011 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>
+ <!-- UI elements -->
+ <dimen name="top_padding">10dp</dimen>
+ <dimen name="side_padding">5dp</dimen>
+
+ <!-- body content -->
+ <dimen name="text_size_small">14sp</dimen>
+ <dimen name="text_size_medium">18sp</dimen>
+ <dimen name="text_size_large">20sp</dimen>
+</resources>
diff --git a/samples/training/ads-and-ux/res/values/strings.xml b/samples/training/ads-and-ux/res/values/strings.xml
new file mode 100644
index 0000000..f143f46
--- /dev/null
+++ b/samples/training/ads-and-ux/res/values/strings.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2011 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="ad_covers_content">Ad shouldn\'t cover content!</string>
+ <string name="app_name">Ads sample</string>
+ <string name="banner_top">Top Banner Ad</string>
+ <string name="banner_bottom">Bottom Banner Ad</string>
+ <string name="button_close_to_ad">Button that\'s too close</string>
+ <string name="error_receive_ad">Unable to fetch Ad. Waiting for the next refresh.</string>
+ <string name="admob_id">a14b5f8130c17ef</string>
+</resources>
diff --git a/samples/training/ads-and-ux/src/com/example/training/ads/AdsCatalogActivity.java b/samples/training/ads-and-ux/src/com/example/training/ads/AdsCatalogActivity.java
new file mode 100644
index 0000000..4050981
--- /dev/null
+++ b/samples/training/ads-and-ux/src/com/example/training/ads/AdsCatalogActivity.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 2011 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.training.ads;
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentStatePagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.view.LayoutInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+// Ad network-specific imports (AdMob).
+import com.google.ads.Ad;
+import com.google.ads.AdListener;
+import com.google.ads.AdRequest;
+import com.google.ads.AdView;
+import com.google.ads.AdRequest.ErrorCode;
+
+public class AdsCatalogActivity extends FragmentActivity {
+ private static final int NUM_ITEMS = 4;
+
+ // Ad network-specific mechanism to enable test mode.
+ private static final String TEST_DEVICE_ID = "...";
+
+ PagerAdapter mAdapter;
+ ViewPager mPager;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.fragment_pager);
+
+ mAdapter = new PagerAdapter(getSupportFragmentManager());
+
+ mPager = (ViewPager) findViewById(R.id.pager);
+ mPager.setAdapter(mAdapter);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ mPager.setCurrentItem(0);
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ public static class PagerAdapter extends FragmentStatePagerAdapter {
+ public PagerAdapter(FragmentManager fm) {
+ super(fm);
+ }
+
+ @Override
+ public Fragment getItem(int position) {
+ return AdFragment.newInstance(position);
+ }
+
+ @Override
+ public int getCount() {
+ return NUM_ITEMS;
+ }
+ }
+
+ public static class AdFragment extends Fragment {
+ private int mNum;
+ private AdView mAdView;
+ private TextView mAdStatus;
+
+ static AdFragment newInstance(int num) {
+ AdFragment af = new AdFragment();
+
+ // Supply num input as an argument.
+ Bundle args = new Bundle();
+ args.putInt("num", num);
+ af.setArguments(args);
+
+ return af;
+ }
+
+ /**
+ * When creating, retrieve this instance's number from its arguments.
+ */
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ Bundle args = getArguments();
+ mNum = args != null ? args.getInt("num") : 1;
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Set up the various ad layouts on different flip pages.
+ final int[] layouts = {
+ R.layout.ad_top,
+ R.layout.ad_bottom,
+ R.layout.ad_next_to_button,
+ R.layout.ad_covers_content };
+ int layoutId = layouts[mNum];
+ View v = inflater.inflate(layoutId, container, false);
+ mAdStatus = (TextView) v.findViewById(R.id.status);
+ mAdView = (AdView) v.findViewById(R.id.ad);
+ mAdView.setAdListener(new MyAdListener());
+
+ AdRequest adRequest = new AdRequest();
+ // adRequest.addKeyword("ad keywords");
+
+ // Ad network-specific mechanism to enable test mode. Be sure to disable before
+ // publishing your application.
+ adRequest.addTestDevice(TEST_DEVICE_ID);
+ mAdView.loadAd(adRequest);
+ return v;
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ mAdView.destroy();
+ }
+
+ // Receives callbacks on various events related to fetching ads. In this sample,
+ // the application displays a message on the screen. A real application may,
+ // for example, fill the ad with a banner promoting a feature.
+ private class MyAdListener implements AdListener {
+
+ @Override
+ public void onDismissScreen(Ad ad) {}
+
+ @Override
+ public void onFailedToReceiveAd(Ad ad, ErrorCode errorCode) {
+ mAdStatus.setText(R.string.error_receive_ad);
+ }
+
+ @Override
+ public void onLeaveApplication(Ad ad) {}
+
+ @Override
+ public void onPresentScreen(Ad ad) {}
+
+ @Override
+ public void onReceiveAd(Ad ad) { mAdStatus.setText(""); }
+ }
+ }
+}