Copying (and modifying) some files from packages/experimental

Change-Id: I00ba3c5b05df4320db51cc659fd84f6b37486d6d
diff --git a/src/android/app/patterns/LoaderActivity.java b/src/android/app/patterns/LoaderActivity.java
index 664a8bc..bcb3692 100644
--- a/src/android/app/patterns/LoaderActivity.java
+++ b/src/android/app/patterns/LoaderActivity.java
@@ -30,12 +30,12 @@
         Loader.OnLoadCompleteListener<D> {
     private boolean mStarted = false;
 
-    static final class LoaderInfo {
+    static final class LoaderInfo<D> {
         public Bundle args;
-        public Loader loader;
+        public Loader<D> loader;
     }
-    private HashMap<Integer, LoaderInfo> mLoaders;
-    private HashMap<Integer, LoaderInfo> mInactiveLoaders;
+    private HashMap<Integer, LoaderInfo<D>> mLoaders;
+    private HashMap<Integer, LoaderInfo<D>> mInactiveLoaders;
 
     /**
      * Registers a loader with this activity, registers the callbacks on it, and starts it loading.
@@ -44,16 +44,16 @@
      * is destroyed.
      */
     protected void startLoading(int id, Bundle args) {
-        LoaderInfo info = mLoaders.get(id);
+        LoaderInfo<D> info = mLoaders.get(id);
         if (info != null) {
             // Keep track of the previous instance of this loader so we can destroy
             // it when the new one completes.
             mInactiveLoaders.put(id, info);
         }
-        info = new LoaderInfo();
+        info = new LoaderInfo<D>();
         info.args = args;
         mLoaders.put(id, info);
-        Loader loader = onCreateLoader(id, args);
+        Loader<D> loader = onCreateLoader(id, args);
         info.loader = loader;
         if (mStarted) {
             // The activity will start all existing loaders in it's onStart(), so only start them
@@ -63,20 +63,20 @@
         }
     }
 
-    protected abstract Loader onCreateLoader(int id, Bundle args);
+    protected abstract Loader<D> onCreateLoader(int id, Bundle args);
     protected abstract void onInitializeLoaders();
-    protected abstract void onLoadFinished(Loader loader, D data);
+    protected abstract void onLoadFinished(Loader<D> loader, D data);
 
-    public final void onLoadComplete(Loader loader, D data) {
+    public final void onLoadComplete(Loader<D> loader, D data) {
         // Notify of the new data so the app can switch out the old data before
         // we try to destroy it.
         onLoadFinished(loader, data);
 
         // Look for an inactive loader and destroy it if found
         int id = loader.getId();
-        LoaderInfo info = mInactiveLoaders.get(id);
+        LoaderInfo<D> info = mInactiveLoaders.get(id);
         if (info != null) {
-            Loader oldLoader = info.loader;
+            Loader<D> oldLoader = info.loader;
             if (oldLoader != null) {
                 oldLoader.destroy();
             }
@@ -90,14 +90,14 @@
 
         if (mLoaders == null) {
             // Look for a passed along loader and create a new one if it's not there
-            mLoaders = (HashMap<Integer, LoaderInfo>) getLastNonConfigurationInstance();
+            mLoaders = (HashMap<Integer, LoaderInfo<D>>) getLastNonConfigurationInstance();
             if (mLoaders == null) {
-                mLoaders = new HashMap<Integer, LoaderInfo>();
+                mLoaders = new HashMap<Integer, LoaderInfo<D>>();
                 onInitializeLoaders();
             }
         }
         if (mInactiveLoaders == null) {
-            mInactiveLoaders = new HashMap<Integer, LoaderInfo>();
+            mInactiveLoaders = new HashMap<Integer, LoaderInfo<D>>();
         }
     }
 
@@ -107,9 +107,9 @@
 
         // Call out to sub classes so they can start their loaders
         // Let the existing loaders know that we want to be notified when a load is complete
-        for (HashMap.Entry<Integer, LoaderInfo> entry : mLoaders.entrySet()) {
-            LoaderInfo info = entry.getValue();
-            Loader loader = info.loader;
+        for (HashMap.Entry<Integer, LoaderInfo<D>> entry : mLoaders.entrySet()) {
+            LoaderInfo<D> info = entry.getValue();
+            Loader<D> loader = info.loader;
             int id = entry.getKey();
             if (loader == null) {
                loader = onCreateLoader(id, info.args);
@@ -126,9 +126,9 @@
     public void onStop() {
         super.onStop();
 
-        for (HashMap.Entry<Integer, LoaderInfo> entry : mLoaders.entrySet()) {
-            LoaderInfo info = entry.getValue();
-            Loader loader = info.loader;
+        for (HashMap.Entry<Integer, LoaderInfo<D>> entry : mLoaders.entrySet()) {
+            LoaderInfo<D> info = entry.getValue();
+            Loader<D> loader = info.loader;
             if (loader == null) {
                 continue;
             }
@@ -158,9 +158,9 @@
         super.onDestroy();
 
         if (mLoaders != null) {
-            for (HashMap.Entry<Integer, LoaderInfo> entry : mLoaders.entrySet()) {
-                LoaderInfo info = entry.getValue();
-                Loader loader = info.loader;
+            for (HashMap.Entry<Integer, LoaderInfo<D>> entry : mLoaders.entrySet()) {
+                LoaderInfo<D> info = entry.getValue();
+                Loader<D> loader = info.loader;
                 if (loader == null) {
                     continue;
                 }