Delete the new Galley3D in Gingerbread because we are doing all our rewrites in Master (Honeycomb).

Change-Id: I73ba357fb0a8de620225718d3c5e638e15909c90
diff --git a/new3d/Android.mk b/new3d/Android.mk
deleted file mode 100644
index 4c07c94..0000000
--- a/new3d/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := GalleryNew3D
-LOCAL_CERTIFICATE := media
-
-LOCAL_OVERRIDES_PACKAGES := Gallery
-
-# We mark this out until LargeBitmap is unhidden.
-#LOCAL_SDK_VERSION := current
-
-include $(BUILD_PACKAGE)
-
-# Use the following include to make our test apk.
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/new3d/AndroidManifest.xml b/new3d/AndroidManifest.xml
deleted file mode 100644
index 2821ba9..0000000
--- a/new3d/AndroidManifest.xml
+++ /dev/null
@@ -1,155 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<manifest android:versionCode="30682"
-    android:versionName="1.1.30682"
-    xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.gallery3d">
-
-    <original-package android:name="com.android.gallery3d" />
-
-    <uses-permission android:name="android.permission.SET_WALLPAPER" />
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
-    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
-    <uses-permission android:name="android.permission.INTERNET" />
-    <uses-permission android:name="android.permission.VIBRATE" />
-    <uses-permission android:name="android.permission.WAKE_LOCK" />
-    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
-    <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
-    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
-    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
-    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
-
-    <supports-screens android:smallScreens="false"
-        android:normalScreens="true" android:largeScreens="true"
-        android:anyDensity="true" />
-
-    <application android:icon="@drawable/icon" android:label="@string/app_name"
-            android:debuggable="true">
-        <activity android:name="com.android.gallery3d.app.MovieView"
-                android:label="@string/movie_view_label"
-                android:screenOrientation="landscape"
-                android:configChanges="orientation|keyboardHidden"
-                android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
-            <intent-filter>
-                <action android:name="android.intent.action.VIEW" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.BROWSABLE" />
-                <data android:scheme="rtsp" />
-             </intent-filter>
-             <intent-filter>
-                <action android:name="android.intent.action.VIEW" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="video/*" />
-                <data android:mimeType="application/sdp" />
-             </intent-filter>
-             <intent-filter>
-                <action android:name="android.intent.action.VIEW" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.BROWSABLE" />
-                <data android:scheme="http" />
-                <data android:mimeType="video/mpeg4" />
-                <data android:mimeType="video/mp4" />
-                <data android:mimeType="video/3gp" />
-                <data android:mimeType="video/3gpp" />
-                <data android:mimeType="video/3gpp2" />
-             </intent-filter>
-        </activity>
-        <activity android:name="com.android.gallery3d.app.Gallery" android:label="@string/app_name"
-                android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
-                android:configChanges="keyboardHidden|orientation"
-                android:clearTaskOnLaunch="true" android:noHistory="false"
-                android:stateNotNeeded="true">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.intent.action.GET_CONTENT" />
-                <category android:name="android.intent.category.OPENABLE" />
-                <data android:mimeType="vnd.android.cursor.dir/image" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.intent.action.GET_CONTENT" />
-                <category android:name="android.intent.category.OPENABLE" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="image/*" />
-                <data android:mimeType="video/*" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.intent.action.PICK" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="image/*" />
-                <data android:mimeType="video/*" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.intent.action.PICK" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="vnd.android.cursor.dir/image" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.intent.action.VIEW" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="vnd.android.cursor.dir/image" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.intent.action.VIEW" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="image/*" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="com.android.gallery3d.action.REVIEW" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="vnd.android.cursor.dir/image" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="com.android.gallery3d.action.REVIEW" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="image/*" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="com.android.gallery3d.action.REVIEW" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="video/*" />
-             </intent-filter>
-        </activity>
-        <activity android:name="com.android.gallery3d.app.SetWallpaper" android:icon="@drawable/icon">
-            <intent-filter android:label="@string/camera_setas_wallpaper">
-                <action android:name="android.intent.action.ATTACH_DATA" />
-                <data android:mimeType="image/*" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <intent-filter android:label="@string/app_name">
-                <action android:name="android.intent.action.SET_WALLPAPER" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-        </activity>
-        <provider android:label="Picasa Web Albums2"
-                android:name="com.android.gallery3d.picasa.PicasaContentProvider"
-                android:grantUriPermissions="true"
-                android:syncable="true"
-                android:authorities="com.android.gallery3d.picasa.contentprovider">
-        </provider>
-        <service android:label="Picasa Sync Service"
-                android:name="com.android.gallery3d.picasa.PicasaService">
-            <intent-filter>
-                <action android:name="android.content.SyncAdapter" />
-            </intent-filter>
-            <meta-data android:name="android.content.SyncAdapter" android:resource="@xml/syncadapter" />
-        </service>
-
-        <receiver android:name="com.android.gallery3d.gadget.PhotoAppWidgetProvider"
-                android:label="@string/gadget_title">
-            <intent-filter>
-                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
-            </intent-filter>
-            <meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_info" />
-        </receiver>
-
-        <!-- We configure a widget by asking to pick a photo, then crop it, and store the config internally-->
-        <activity android:name="com.android.gallery3d.gadget.PhotoAppWidgetConfigure">
-            <intent-filter>
-                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
-            </intent-filter>
-        </activity>
-    </application>
-</manifest>
diff --git a/new3d/res/drawable-hdpi/appwidget_bg.9.png b/new3d/res/drawable-hdpi/appwidget_bg.9.png
deleted file mode 100755
index 3b29eae..0000000
--- a/new3d/res/drawable-hdpi/appwidget_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/btn_camera.png b/new3d/res/drawable-hdpi/btn_camera.png
deleted file mode 100644
index dccc850..0000000
--- a/new3d/res/drawable-hdpi/btn_camera.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/btn_camera_pressed.png b/new3d/res/drawable-hdpi/btn_camera_pressed.png
deleted file mode 100644
index 977468a..0000000
--- a/new3d/res/drawable-hdpi/btn_camera_pressed.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/btn_hud_zoom_in_normal.png b/new3d/res/drawable-hdpi/btn_hud_zoom_in_normal.png
deleted file mode 100644
index 622b416..0000000
--- a/new3d/res/drawable-hdpi/btn_hud_zoom_in_normal.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/btn_hud_zoom_in_pressed.png b/new3d/res/drawable-hdpi/btn_hud_zoom_in_pressed.png
deleted file mode 100644
index 9c14235..0000000
--- a/new3d/res/drawable-hdpi/btn_hud_zoom_in_pressed.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/btn_hud_zoom_out_normal.png b/new3d/res/drawable-hdpi/btn_hud_zoom_out_normal.png
deleted file mode 100644
index e25b5bd..0000000
--- a/new3d/res/drawable-hdpi/btn_hud_zoom_out_normal.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/btn_hud_zoom_out_pressed.png b/new3d/res/drawable-hdpi/btn_hud_zoom_out_pressed.png
deleted file mode 100644
index 5173d40..0000000
--- a/new3d/res/drawable-hdpi/btn_hud_zoom_out_pressed.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/grid_frame.9.png b/new3d/res/drawable-hdpi/grid_frame.9.png
deleted file mode 100644
index a0dd289..0000000
--- a/new3d/res/drawable-hdpi/grid_frame.9.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/ic_fs_details.png b/new3d/res/drawable-hdpi/ic_fs_details.png
deleted file mode 100644
index 8f3ee26..0000000
--- a/new3d/res/drawable-hdpi/ic_fs_details.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/ic_spinner.png b/new3d/res/drawable-hdpi/ic_spinner.png
deleted file mode 100644
index 6318b7a..0000000
--- a/new3d/res/drawable-hdpi/ic_spinner.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/ic_spinner2.png b/new3d/res/drawable-hdpi/ic_spinner2.png
deleted file mode 100644
index af786c3..0000000
--- a/new3d/res/drawable-hdpi/ic_spinner2.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/ic_spinner3.png b/new3d/res/drawable-hdpi/ic_spinner3.png
deleted file mode 100644
index 07c0981..0000000
--- a/new3d/res/drawable-hdpi/ic_spinner3.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/ic_spinner4.png b/new3d/res/drawable-hdpi/ic_spinner4.png
deleted file mode 100644
index a5ab782..0000000
--- a/new3d/res/drawable-hdpi/ic_spinner4.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/ic_spinner5.png b/new3d/res/drawable-hdpi/ic_spinner5.png
deleted file mode 100644
index 2a1471d..0000000
--- a/new3d/res/drawable-hdpi/ic_spinner5.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/ic_spinner6.png b/new3d/res/drawable-hdpi/ic_spinner6.png
deleted file mode 100644
index 9e1f5d3..0000000
--- a/new3d/res/drawable-hdpi/ic_spinner6.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/ic_spinner7.png b/new3d/res/drawable-hdpi/ic_spinner7.png
deleted file mode 100644
index dbfa735..0000000
--- a/new3d/res/drawable-hdpi/ic_spinner7.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/ic_spinner8.png b/new3d/res/drawable-hdpi/ic_spinner8.png
deleted file mode 100644
index 534a8cf..0000000
--- a/new3d/res/drawable-hdpi/ic_spinner8.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/icon.png b/new3d/res/drawable-hdpi/icon.png
deleted file mode 100644
index a116219..0000000
--- a/new3d/res/drawable-hdpi/icon.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/icon_camera_small.png b/new3d/res/drawable-hdpi/icon_camera_small.png
deleted file mode 100644
index 084c4ec..0000000
--- a/new3d/res/drawable-hdpi/icon_camera_small.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/icon_cancel.png b/new3d/res/drawable-hdpi/icon_cancel.png
deleted file mode 100644
index 8165efd..0000000
--- a/new3d/res/drawable-hdpi/icon_cancel.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/icon_delete.png b/new3d/res/drawable-hdpi/icon_delete.png
deleted file mode 100644
index f2e6bbd..0000000
--- a/new3d/res/drawable-hdpi/icon_delete.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/icon_details.png b/new3d/res/drawable-hdpi/icon_details.png
deleted file mode 100644
index 4a5c276..0000000
--- a/new3d/res/drawable-hdpi/icon_details.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/icon_folder_small.png b/new3d/res/drawable-hdpi/icon_folder_small.png
deleted file mode 100644
index 33ef42b..0000000
--- a/new3d/res/drawable-hdpi/icon_folder_small.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/icon_home_small.png b/new3d/res/drawable-hdpi/icon_home_small.png
deleted file mode 100644
index 479b5d1..0000000
--- a/new3d/res/drawable-hdpi/icon_home_small.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/icon_more.png b/new3d/res/drawable-hdpi/icon_more.png
deleted file mode 100644
index b2502a1..0000000
--- a/new3d/res/drawable-hdpi/icon_more.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/icon_picasa_small.png b/new3d/res/drawable-hdpi/icon_picasa_small.png
deleted file mode 100644
index 2e1a771..0000000
--- a/new3d/res/drawable-hdpi/icon_picasa_small.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/icon_play.png b/new3d/res/drawable-hdpi/icon_play.png
deleted file mode 100644
index 0c61f32..0000000
--- a/new3d/res/drawable-hdpi/icon_play.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/icon_share.png b/new3d/res/drawable-hdpi/icon_share.png
deleted file mode 100644
index 83ff864..0000000
--- a/new3d/res/drawable-hdpi/icon_share.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/landscape.jpg b/new3d/res/drawable-hdpi/landscape.jpg
deleted file mode 100644
index a07208b..0000000
--- a/new3d/res/drawable-hdpi/landscape.jpg
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/menu_bar_bg.9.png b/new3d/res/drawable-hdpi/menu_bar_bg.9.png
deleted file mode 100644
index d352d44..0000000
--- a/new3d/res/drawable-hdpi/menu_bar_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/menu_highlight.9.png b/new3d/res/drawable-hdpi/menu_highlight.9.png
deleted file mode 100644
index 3876e70..0000000
--- a/new3d/res/drawable-hdpi/menu_highlight.9.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/mode_grid.png b/new3d/res/drawable-hdpi/mode_grid.png
deleted file mode 100644
index 3748833..0000000
--- a/new3d/res/drawable-hdpi/mode_grid.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/mode_stack.png b/new3d/res/drawable-hdpi/mode_stack.png
deleted file mode 100644
index b3b0f41..0000000
--- a/new3d/res/drawable-hdpi/mode_stack.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/pathbar.9.png b/new3d/res/drawable-hdpi/pathbar.9.png
deleted file mode 100644
index 9fc640b..0000000
--- a/new3d/res/drawable-hdpi/pathbar.9.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/pathbar_pressed.9.png b/new3d/res/drawable-hdpi/pathbar_pressed.9.png
deleted file mode 100644
index bcb185a..0000000
--- a/new3d/res/drawable-hdpi/pathbar_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/pathcap.9.png b/new3d/res/drawable-hdpi/pathcap.9.png
deleted file mode 100644
index 376e89e..0000000
--- a/new3d/res/drawable-hdpi/pathcap.9.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/pathcap_pressed.9.png b/new3d/res/drawable-hdpi/pathcap_pressed.9.png
deleted file mode 100644
index db4a61b..0000000
--- a/new3d/res/drawable-hdpi/pathcap_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/photo_inner.9.png b/new3d/res/drawable-hdpi/photo_inner.9.png
deleted file mode 100644
index dcd2d22..0000000
--- a/new3d/res/drawable-hdpi/photo_inner.9.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/popup.9.png b/new3d/res/drawable-hdpi/popup.9.png
deleted file mode 100644
index 154ec9a..0000000
--- a/new3d/res/drawable-hdpi/popup.9.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/popup_triangle_bottom.png b/new3d/res/drawable-hdpi/popup_triangle_bottom.png
deleted file mode 100644
index a637fdb..0000000
--- a/new3d/res/drawable-hdpi/popup_triangle_bottom.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/potrait.jpg b/new3d/res/drawable-hdpi/potrait.jpg
deleted file mode 100644
index 581c8a5..0000000
--- a/new3d/res/drawable-hdpi/potrait.jpg
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/scroller_new.png b/new3d/res/drawable-hdpi/scroller_new.png
deleted file mode 100644
index ed5fb26..0000000
--- a/new3d/res/drawable-hdpi/scroller_new.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/scroller_pressed_new.png b/new3d/res/drawable-hdpi/scroller_pressed_new.png
deleted file mode 100644
index 5e176ac..0000000
--- a/new3d/res/drawable-hdpi/scroller_pressed_new.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/square.jpg b/new3d/res/drawable-hdpi/square.jpg
deleted file mode 100644
index efb5d4f..0000000
--- a/new3d/res/drawable-hdpi/square.jpg
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/stack_frame.9.png b/new3d/res/drawable-hdpi/stack_frame.9.png
deleted file mode 100644
index 73d56ee..0000000
--- a/new3d/res/drawable-hdpi/stack_frame.9.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/stack_frame_focus.9.png b/new3d/res/drawable-hdpi/stack_frame_focus.9.png
deleted file mode 100644
index a5028b1..0000000
--- a/new3d/res/drawable-hdpi/stack_frame_focus.9.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/stack_frame_gold.9.png b/new3d/res/drawable-hdpi/stack_frame_gold.9.png
deleted file mode 100644
index 3137578..0000000
--- a/new3d/res/drawable-hdpi/stack_frame_gold.9.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/top_menu_bar_bg.9.png b/new3d/res/drawable-hdpi/top_menu_bar_bg.9.png
deleted file mode 100644
index fa38967..0000000
--- a/new3d/res/drawable-hdpi/top_menu_bar_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-hdpi/videooverlay.png b/new3d/res/drawable-hdpi/videooverlay.png
deleted file mode 100644
index 1718832..0000000
--- a/new3d/res/drawable-hdpi/videooverlay.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-mdpi/appwidget_bg.9.png b/new3d/res/drawable-mdpi/appwidget_bg.9.png
deleted file mode 100755
index afe41b6..0000000
--- a/new3d/res/drawable-mdpi/appwidget_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-mdpi/ic_spinner1.png b/new3d/res/drawable-mdpi/ic_spinner1.png
deleted file mode 100644
index 8cd254a..0000000
--- a/new3d/res/drawable-mdpi/ic_spinner1.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-mdpi/ic_spinner2.png b/new3d/res/drawable-mdpi/ic_spinner2.png
deleted file mode 100644
index 951edc3..0000000
--- a/new3d/res/drawable-mdpi/ic_spinner2.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-mdpi/ic_spinner3.png b/new3d/res/drawable-mdpi/ic_spinner3.png
deleted file mode 100644
index b1f9ef5..0000000
--- a/new3d/res/drawable-mdpi/ic_spinner3.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-mdpi/ic_spinner4.png b/new3d/res/drawable-mdpi/ic_spinner4.png
deleted file mode 100644
index b1d09fb..0000000
--- a/new3d/res/drawable-mdpi/ic_spinner4.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-mdpi/ic_spinner5.png b/new3d/res/drawable-mdpi/ic_spinner5.png
deleted file mode 100644
index aa4c21d..0000000
--- a/new3d/res/drawable-mdpi/ic_spinner5.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-mdpi/ic_spinner6.png b/new3d/res/drawable-mdpi/ic_spinner6.png
deleted file mode 100644
index 35d03a7..0000000
--- a/new3d/res/drawable-mdpi/ic_spinner6.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-mdpi/ic_spinner7.png b/new3d/res/drawable-mdpi/ic_spinner7.png
deleted file mode 100644
index 8c422c5..0000000
--- a/new3d/res/drawable-mdpi/ic_spinner7.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-mdpi/ic_spinner8.png b/new3d/res/drawable-mdpi/ic_spinner8.png
deleted file mode 100644
index 3414e2d..0000000
--- a/new3d/res/drawable-mdpi/ic_spinner8.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-mdpi/icon_cancel.png b/new3d/res/drawable-mdpi/icon_cancel.png
deleted file mode 100644
index e9f56aa..0000000
--- a/new3d/res/drawable-mdpi/icon_cancel.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable-mdpi/photo_inner.9.png b/new3d/res/drawable-mdpi/photo_inner.9.png
deleted file mode 100755
index f51eb35..0000000
--- a/new3d/res/drawable-mdpi/photo_inner.9.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/appwidget_bg.9.png b/new3d/res/drawable/appwidget_bg.9.png
deleted file mode 100755
index afe41b6..0000000
--- a/new3d/res/drawable/appwidget_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/btn_camera.png b/new3d/res/drawable/btn_camera.png
deleted file mode 100644
index 8369d48..0000000
--- a/new3d/res/drawable/btn_camera.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/btn_camera_pressed.png b/new3d/res/drawable/btn_camera_pressed.png
deleted file mode 100644
index e4ce9e0..0000000
--- a/new3d/res/drawable/btn_camera_pressed.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/btn_hud_zoom_in_normal.png b/new3d/res/drawable/btn_hud_zoom_in_normal.png
deleted file mode 100644
index d6b4f4b..0000000
--- a/new3d/res/drawable/btn_hud_zoom_in_normal.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/btn_hud_zoom_in_pressed.png b/new3d/res/drawable/btn_hud_zoom_in_pressed.png
deleted file mode 100644
index 5470383..0000000
--- a/new3d/res/drawable/btn_hud_zoom_in_pressed.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/btn_hud_zoom_out_normal.png b/new3d/res/drawable/btn_hud_zoom_out_normal.png
deleted file mode 100644
index 8293e1e..0000000
--- a/new3d/res/drawable/btn_hud_zoom_out_normal.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/btn_hud_zoom_out_pressed.png b/new3d/res/drawable/btn_hud_zoom_out_pressed.png
deleted file mode 100644
index d24e67d..0000000
--- a/new3d/res/drawable/btn_hud_zoom_out_pressed.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/btn_location_filter_unscaled.png b/new3d/res/drawable/btn_location_filter_unscaled.png
deleted file mode 100644
index 383efd2..0000000
--- a/new3d/res/drawable/btn_location_filter_unscaled.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/camera_crop_height.png b/new3d/res/drawable/camera_crop_height.png
deleted file mode 100644
index b089aec..0000000
--- a/new3d/res/drawable/camera_crop_height.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/camera_crop_width.png b/new3d/res/drawable/camera_crop_width.png
deleted file mode 100644
index 65216af..0000000
--- a/new3d/res/drawable/camera_crop_width.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/default_background.png b/new3d/res/drawable/default_background.png
deleted file mode 100644
index 9ce5190..0000000
--- a/new3d/res/drawable/default_background.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/gallery_zoom_in.png b/new3d/res/drawable/gallery_zoom_in.png
deleted file mode 100755
index f8634da..0000000
--- a/new3d/res/drawable/gallery_zoom_in.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/gallery_zoom_in_touch.png b/new3d/res/drawable/gallery_zoom_in_touch.png
deleted file mode 100755
index 095c7a5..0000000
--- a/new3d/res/drawable/gallery_zoom_in_touch.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/gallery_zoom_out.png b/new3d/res/drawable/gallery_zoom_out.png
deleted file mode 100755
index 72d5d38..0000000
--- a/new3d/res/drawable/gallery_zoom_out.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/gallery_zoom_out_touch.png b/new3d/res/drawable/gallery_zoom_out_touch.png
deleted file mode 100755
index 48c8d93..0000000
--- a/new3d/res/drawable/gallery_zoom_out_touch.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/grid_check_off.png b/new3d/res/drawable/grid_check_off.png
deleted file mode 100644
index 3313d18..0000000
--- a/new3d/res/drawable/grid_check_off.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/grid_check_on.png b/new3d/res/drawable/grid_check_on.png
deleted file mode 100644
index 09cf22d..0000000
--- a/new3d/res/drawable/grid_check_on.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/grid_frame.png b/new3d/res/drawable/grid_frame.png
deleted file mode 100644
index d1a320b..0000000
--- a/new3d/res/drawable/grid_frame.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/grid_placeholder.png b/new3d/res/drawable/grid_placeholder.png
deleted file mode 100644
index 5151730..0000000
--- a/new3d/res/drawable/grid_placeholder.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/ic_fs_details.png b/new3d/res/drawable/ic_fs_details.png
deleted file mode 100644
index 95dabe7..0000000
--- a/new3d/res/drawable/ic_fs_details.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/ic_menu_crop.png b/new3d/res/drawable/ic_menu_crop.png
deleted file mode 100644
index e26fe9b..0000000
--- a/new3d/res/drawable/ic_menu_crop.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/ic_menu_mapmode.png b/new3d/res/drawable/ic_menu_mapmode.png
deleted file mode 100644
index c1a136a..0000000
--- a/new3d/res/drawable/ic_menu_mapmode.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/ic_menu_rotate_left.png b/new3d/res/drawable/ic_menu_rotate_left.png
deleted file mode 100644
index 90cc657..0000000
--- a/new3d/res/drawable/ic_menu_rotate_left.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/ic_menu_rotate_right.png b/new3d/res/drawable/ic_menu_rotate_right.png
deleted file mode 100644
index 75f7f5d..0000000
--- a/new3d/res/drawable/ic_menu_rotate_right.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/ic_menu_set_as.png b/new3d/res/drawable/ic_menu_set_as.png
deleted file mode 100644
index 2c3d893..0000000
--- a/new3d/res/drawable/ic_menu_set_as.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/ic_menu_view_details.png b/new3d/res/drawable/ic_menu_view_details.png
deleted file mode 100644
index aef2db0..0000000
--- a/new3d/res/drawable/ic_menu_view_details.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/icon.png b/new3d/res/drawable/icon.png
deleted file mode 100644
index 7ea0b8c..0000000
--- a/new3d/res/drawable/icon.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/icon_camera_small.png b/new3d/res/drawable/icon_camera_small.png
deleted file mode 100644
index 5132b81..0000000
--- a/new3d/res/drawable/icon_camera_small.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/icon_camera_small_unscaled.png b/new3d/res/drawable/icon_camera_small_unscaled.png
deleted file mode 100644
index 29436ff..0000000
--- a/new3d/res/drawable/icon_camera_small_unscaled.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/icon_delete.png b/new3d/res/drawable/icon_delete.png
deleted file mode 100644
index 90dea86..0000000
--- a/new3d/res/drawable/icon_delete.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/icon_folder_small.png b/new3d/res/drawable/icon_folder_small.png
deleted file mode 100644
index 18ac991..0000000
--- a/new3d/res/drawable/icon_folder_small.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/icon_folder_small_unscaled.png b/new3d/res/drawable/icon_folder_small_unscaled.png
deleted file mode 100644
index 9e18010..0000000
--- a/new3d/res/drawable/icon_folder_small_unscaled.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/icon_home_small.png b/new3d/res/drawable/icon_home_small.png
deleted file mode 100644
index f8ff493..0000000
--- a/new3d/res/drawable/icon_home_small.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/icon_location_small.png b/new3d/res/drawable/icon_location_small.png
deleted file mode 100644
index 6b29e49..0000000
--- a/new3d/res/drawable/icon_location_small.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/icon_more.png b/new3d/res/drawable/icon_more.png
deleted file mode 100644
index 44d5213..0000000
--- a/new3d/res/drawable/icon_more.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/icon_picasa_small.png b/new3d/res/drawable/icon_picasa_small.png
deleted file mode 100644
index f35b386..0000000
--- a/new3d/res/drawable/icon_picasa_small.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/icon_picasa_small_unscaled.png b/new3d/res/drawable/icon_picasa_small_unscaled.png
deleted file mode 100644
index 166b803..0000000
--- a/new3d/res/drawable/icon_picasa_small_unscaled.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/icon_play.png b/new3d/res/drawable/icon_play.png
deleted file mode 100644
index 2ea9510..0000000
--- a/new3d/res/drawable/icon_play.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/icon_share.png b/new3d/res/drawable/icon_share.png
deleted file mode 100644
index f6b286a..0000000
--- a/new3d/res/drawable/icon_share.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/indicator_autocrop.png b/new3d/res/drawable/indicator_autocrop.png
deleted file mode 100644
index d960b1f..0000000
--- a/new3d/res/drawable/indicator_autocrop.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/mode_grid.png b/new3d/res/drawable/mode_grid.png
deleted file mode 100644
index be42f12..0000000
--- a/new3d/res/drawable/mode_grid.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/mode_stack.png b/new3d/res/drawable/mode_stack.png
deleted file mode 100644
index 362a89f..0000000
--- a/new3d/res/drawable/mode_stack.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/pathbar_bg.png b/new3d/res/drawable/pathbar_bg.png
deleted file mode 100644
index 357f1d7..0000000
--- a/new3d/res/drawable/pathbar_bg.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/pathbar_cap.png b/new3d/res/drawable/pathbar_cap.png
deleted file mode 100644
index a2d5c27..0000000
--- a/new3d/res/drawable/pathbar_cap.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/pathbar_join.png b/new3d/res/drawable/pathbar_join.png
deleted file mode 100644
index 97c4200..0000000
--- a/new3d/res/drawable/pathbar_join.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/photo_inner.9.png b/new3d/res/drawable/photo_inner.9.png
deleted file mode 100755
index f51eb35..0000000
--- a/new3d/res/drawable/photo_inner.9.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/popup.9.png b/new3d/res/drawable/popup.9.png
deleted file mode 100644
index b9380ba..0000000
--- a/new3d/res/drawable/popup.9.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/popup_option_selected.9.png b/new3d/res/drawable/popup_option_selected.9.png
deleted file mode 100644
index de41f40..0000000
--- a/new3d/res/drawable/popup_option_selected.9.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/popup_triangle_bottom.png b/new3d/res/drawable/popup_triangle_bottom.png
deleted file mode 100644
index bcf34c3..0000000
--- a/new3d/res/drawable/popup_triangle_bottom.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/scroller_new.png b/new3d/res/drawable/scroller_new.png
deleted file mode 100644
index 40f9e1a..0000000
--- a/new3d/res/drawable/scroller_new.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/scroller_pressed_new.png b/new3d/res/drawable/scroller_pressed_new.png
deleted file mode 100644
index 14cc0b2..0000000
--- a/new3d/res/drawable/scroller_pressed_new.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/selection_lower_bg.png b/new3d/res/drawable/selection_lower_bg.png
deleted file mode 100644
index 859d7eb..0000000
--- a/new3d/res/drawable/selection_lower_bg.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/selection_menu_bg.png b/new3d/res/drawable/selection_menu_bg.png
deleted file mode 100644
index 2dec3b6..0000000
--- a/new3d/res/drawable/selection_menu_bg.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/selection_menu_bg_pressed.png b/new3d/res/drawable/selection_menu_bg_pressed.png
deleted file mode 100644
index a84458a..0000000
--- a/new3d/res/drawable/selection_menu_bg_pressed.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/selection_menu_bg_pressed_left.png b/new3d/res/drawable/selection_menu_bg_pressed_left.png
deleted file mode 100644
index 7565c3d..0000000
--- a/new3d/res/drawable/selection_menu_bg_pressed_left.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/selection_menu_bg_pressed_right.png b/new3d/res/drawable/selection_menu_bg_pressed_right.png
deleted file mode 100644
index efe62f3..0000000
--- a/new3d/res/drawable/selection_menu_bg_pressed_right.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/selection_menu_divider.png b/new3d/res/drawable/selection_menu_divider.png
deleted file mode 100644
index b2658e2..0000000
--- a/new3d/res/drawable/selection_menu_divider.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/stack_frame.png b/new3d/res/drawable/stack_frame.png
deleted file mode 100644
index bde0540..0000000
--- a/new3d/res/drawable/stack_frame.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/stack_frame_focus.png b/new3d/res/drawable/stack_frame_focus.png
deleted file mode 100644
index 192527b..0000000
--- a/new3d/res/drawable/stack_frame_focus.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/stack_frame_gold.png b/new3d/res/drawable/stack_frame_gold.png
deleted file mode 100644
index ffbede6..0000000
--- a/new3d/res/drawable/stack_frame_gold.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/transparent.png b/new3d/res/drawable/transparent.png
deleted file mode 100644
index 95007b9..0000000
--- a/new3d/res/drawable/transparent.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/drawable/videooverlay.png b/new3d/res/drawable/videooverlay.png
deleted file mode 100644
index 8b39eed..0000000
--- a/new3d/res/drawable/videooverlay.png
+++ /dev/null
Binary files differ
diff --git a/new3d/res/layout/cropimage.xml b/new3d/res/layout/cropimage.xml
deleted file mode 100644
index 39effb0..0000000
--- a/new3d/res/layout/cropimage.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 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.
--->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-
-    <RelativeLayout
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:orientation="horizontal">
-        <view class="com.cooliris.media.CropImageView" android:id="@+id/image"
-                android:background="#55000000"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:layout_x="0dip"
-                android:layout_y="0dip"
-        />
-        <RelativeLayout android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:orientation="horizontal"
-                android:paddingLeft="10dip"
-                android:paddingRight="10dip"
-                android:layout_alignParentBottom="true"
-                android:layout_centerHorizontal="true">
-            <Button
-                    android:id="@+id/save"
-                    android:layout_width="100dip"
-                    android:layout_height="wrap_content"
-                    android:layout_alignParentLeft="true"
-                    android:text="@string/crop_save_text"
-            />
-            <Button
-                    android:id="@+id/discard"
-                    android:layout_width="100dip"
-                    android:layout_height="wrap_content"
-                    android:layout_alignParentRight="true"
-                    android:text="@string/crop_discard_text"
-            />
-        </RelativeLayout>
-    </RelativeLayout>
-</FrameLayout>
diff --git a/new3d/res/layout/main.xml b/new3d/res/layout/main.xml
deleted file mode 100644
index d518833..0000000
--- a/new3d/res/layout/main.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:orientation="vertical"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-    <com.android.gallery3d.ui.GLRootView
-        android:id="@+id/gl_root_view"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"/>
-</LinearLayout>
diff --git a/new3d/res/layout/movie_view.xml b/new3d/res/layout/movie_view.xml
deleted file mode 100644
index a10228b..0000000
--- a/new3d/res/layout/movie_view.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 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.
--->
-
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/root"
-    android:layout_width="match_parent" 
-    android:layout_height="match_parent">
-
-    <VideoView android:id="@+id/surface_view" 
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:layout_centerInParent="true" />
-
-    <LinearLayout android:id="@+id/progress_indicator"
-            android:orientation="vertical"
-            android:layout_centerInParent="true"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content">
-
-        <ProgressBar android:id="@android:id/progress"
-                style="?android:attr/progressBarStyleLarge"
-                android:layout_gravity="center"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content" />
-
-        <TextView android:paddingTop="5dip"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:text="@string/loading_video" android:textSize="14sp"
-                android:textColor="#ffffffff" />
-    </LinearLayout>
-
-</RelativeLayout>
diff --git a/new3d/res/layout/photo_frame.xml b/new3d/res/layout/photo_frame.xml
deleted file mode 100755
index 9740354..0000000
--- a/new3d/res/layout/photo_frame.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@drawable/appwidget_bg">
-
-    <FrameLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:padding="3dip">
-       
-		<FrameLayout
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:padding="1px"
-            android:foreground="@drawable/photo_inner">
-     
-		    <ImageView
-		        android:id="@+id/photo"
-		        android:layout_width="match_parent"
-		        android:layout_height="match_parent"
-		        android:scaleType="centerCrop"
-		        android:cropToPadding="true" />
-		        
-        </FrameLayout>		        
-	        
-    </FrameLayout>        
-
-</FrameLayout>
diff --git a/new3d/res/values-cs/strings.xml b/new3d/res/values-cs/strings.xml
deleted file mode 100644
index bd546b4..0000000
--- a/new3d/res/values-cs/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="1928079047368929634">"Galerie"</string>
-  <string-array name="months_abbreviated">
-    <item msgid="9066537518640988368">"leden"</item>
-    <item msgid="4680813504147866612">"únor"</item>
-    <item msgid="1934595560893153574">"březen"</item>
-    <item msgid="9020107212348500338">"duben"</item>
-    <item msgid="5734859077892484949">"květen"</item>
-    <item msgid="8546985030184126468">"červen"</item>
-    <item msgid="3639654472839533748">"červenec"</item>
-    <item msgid="8434242278630875235">"srpen"</item>
-    <item msgid="8493511009771049442">"září"</item>
-    <item msgid="685181459001441496">"říjen"</item>
-    <item msgid="6662413035764778250">"listopad"</item>
-    <item msgid="3784870986696899313">"prosinec"</item>
-  </string-array>
-    <string name="gadget_title" msgid="259405922673466798">"Rámeček fotografie"</string>
-    <string name="details_ms" msgid="940634969189855292">"%1$02d:%2$02d"</string>
-    <string name="details_hms" msgid="3215779248094151255">"%1$d:%2$02d:%3$02d"</string>
-    <string name="movie_view_label" msgid="3697303290960009886">"Filmy"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Načítání videa..."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Pokračovat v přehrávání videa"</string>
-    <string name="resume_playing_message" msgid="5184414518126703481">"Pokračovat v přehrávání od %s?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Pokračovat v přehrávání"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Začít znovu"</string>
-    <string name="camera" msgid="2730811566218090802">"Fotoaparát"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Uložit"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Zahodit"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Začněte klepnutím na obličej."</string>
-    <string name="saving_image" msgid="7270334453636349407">"Ukládání fotografie..."</string>
-    <string name="crop_label" msgid="521114301871349328">"Oříznout fotografii"</string>
-    <string name="running_face_detection" msgid="4094707964259463039">"Čekejte prosím..."</string>
-    <string name="set_image" msgid="2331476809308010401">"Fotografie bude použita jako"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Nastavování tapety, čekejte prosím..."</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Tapeta"</string>
-    <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="loading_new" msgid="7893793767294787579">"Načítání nových alb a fotografií"</string>
-    <string name="initializing" msgid="2374228157398540466">"Načítání"</string>
-    <string name="pick_prompt" msgid="576608096149718121">"Vyberte položku ze své sbírky"</string>
-    <string name="no_items" msgid="3117870234034732172">"Váš výběr neobsahuje žádné položky"</string>
-    <string name="pick" msgid="7248789132035843128">"Vybrat"</string>
-    <string name="delete" msgid="2839695998251824487">"Smazat"</string>
-    <string name="confirm_delete" msgid="5731757674837098707">"Potvrdit smazání"</string>
-    <string name="cancel" msgid="3637516880917356226">"Zrušit"</string>
-    <string name="share" msgid="3619042788254195341">"Sdílet"</string>
-    <string name="no_sd_card" msgid="2666880203366429182">"Karta SD byla odpojena, nebo není k dispozici"</string>
-    <string name="more" msgid="1526449516720792387">"Další"</string>
-    <string name="select_all" msgid="8623593677101437957">"Vybrat vše"</string>
-    <string name="deselect_all" msgid="7397531298370285581">"Zrušit výběr všech"</string>
-    <string name="slideshow" msgid="4355906903247112975">"Prezentace"</string>
-    <string name="menu" msgid="1819649153380636719">"Menu"</string>
-    <string name="details" msgid="8415120088556445230">"Podrobnosti"</string>
-    <string name="album_selected" msgid="3441280740465738452">"vybrané album"</string>
-    <string name="item_selected" msgid="6137767503817908841">"vybraná položka"</string>
-    <string name="albums_selected" msgid="1815225920157190983">"vybraná alba"</string>
-    <string name="items_selected" msgid="8548754404879264861">"vybrané položky"</string>
-    <string name="album" msgid="5198388817734336004">"Album"</string>
-    <string name="start" msgid="4316892252528232165">"Spustit"</string>
-    <string name="end" msgid="3645506196012005500">"Ukončit"</string>
-    <string name="location" msgid="3432705876921618314">"Místo"</string>
-    <string name="location_unknown" msgid="6310139243003315255">"Neznámé místo"</string>
-    <string name="title" msgid="7622928349908052569">"Název"</string>
-    <string name="type" msgid="4329478642546287192">"Typ"</string>
-    <string name="taken_on" msgid="3269486910757192479">"Pořízeno dne"</string>
-    <string name="added_on" msgid="5194321063173381814">"Přidáno dne"</string>
-    <string name="show_on_map" msgid="6157544221201750980">"Zobrazit na mapě"</string>
-    <string name="rotate_left" msgid="7412075232752726934">"Otočit doleva"</string>
-    <string name="rotate_right" msgid="7340681085011826618">"Otočit doprava"</string>
-    <string name="crop" msgid="7970750655414797277">"Oříznout"</string>
-    <string name="set_as" msgid="3636764710790507868">"Nastavit jako"</string>
-    <string name="set_as_wallpaper" msgid="5704970402417438945">"Nastavit jako tapetu"</string>
-    <string name="item" msgid="636303673288563698">"položka"</string>
-    <string name="items" msgid="6403254716052150916">"položky"</string>
-    <string name="around" msgid="2223906282110417412">"Poblíž místa"</string>
-    <string name="date_unknown" msgid="4277113471036917386">"Neznámé datum"</string>
-    <string name="video_err" msgid="7917736494827857757">"Video nelze přehrát"</string>
-</resources>
diff --git a/new3d/res/values-da/strings.xml b/new3d/res/values-da/strings.xml
deleted file mode 100644
index 66963d8..0000000
--- a/new3d/res/values-da/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="1928079047368929634">"Galleri"</string>
-  <string-array name="months_abbreviated">
-    <item msgid="9066537518640988368">"jan."</item>
-    <item msgid="4680813504147866612">"feb."</item>
-    <item msgid="1934595560893153574">"mar."</item>
-    <item msgid="9020107212348500338">"apr."</item>
-    <item msgid="5734859077892484949">"maj"</item>
-    <item msgid="8546985030184126468">"jun."</item>
-    <item msgid="3639654472839533748">"jul."</item>
-    <item msgid="8434242278630875235">"aug."</item>
-    <item msgid="8493511009771049442">"sep."</item>
-    <item msgid="685181459001441496">"okt."</item>
-    <item msgid="6662413035764778250">"nov."</item>
-    <item msgid="3784870986696899313">"dec."</item>
-  </string-array>
-    <string name="gadget_title" msgid="259405922673466798">"Billedramme"</string>
-    <string name="details_ms" msgid="940634969189855292">"%1$02d:%2$02d"</string>
-    <string name="details_hms" msgid="3215779248094151255">"%1$d:%2$02d:%3$02d"</string>
-    <string name="movie_view_label" msgid="3697303290960009886">"Film"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Indlæser video ..."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Genoptag video"</string>
-    <string name="resume_playing_message" msgid="5184414518126703481">"Genoptag afspilning fra %s ?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Genoptag afspilning"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Start igen"</string>
-    <string name="camera" msgid="2730811566218090802">"Kamera"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Gem"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Kassér"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Tryk på et ansigt for at begynde."</string>
-    <string name="saving_image" msgid="7270334453636349407">"Gemmer billede ..."</string>
-    <string name="crop_label" msgid="521114301871349328">"Beskær billede"</string>
-    <string name="running_face_detection" msgid="4094707964259463039">"Vent ..."</string>
-    <string name="set_image" msgid="2331476809308010401">"Angiv billedet som"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Angiver tapet. Vent et øjeblik ..."</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Tapet"</string>
-    <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="loading_new" msgid="7893793767294787579">"Indlæser nye albummer og fotos"</string>
-    <string name="initializing" msgid="2374228157398540466">"Indlæser"</string>
-    <string name="pick_prompt" msgid="576608096149718121">"Vælg et element fra din samling"</string>
-    <string name="no_items" msgid="3117870234034732172">"Der er ingen elementer i din samling"</string>
-    <string name="pick" msgid="7248789132035843128">"Vælg"</string>
-    <string name="delete" msgid="2839695998251824487">"Slet"</string>
-    <string name="confirm_delete" msgid="5731757674837098707">"Bekræft sletning"</string>
-    <string name="cancel" msgid="3637516880917356226">"Annuller"</string>
-    <string name="share" msgid="3619042788254195341">"Del"</string>
-    <string name="no_sd_card" msgid="2666880203366429182">"SD-kort ikke monteret, eller kortet findes ikke"</string>
-    <string name="more" msgid="1526449516720792387">"Flere"</string>
-    <string name="select_all" msgid="8623593677101437957">"Vælg alle"</string>
-    <string name="deselect_all" msgid="7397531298370285581">"Fravælg alle"</string>
-    <string name="slideshow" msgid="4355906903247112975">"Diasshow"</string>
-    <string name="menu" msgid="1819649153380636719">"Menu"</string>
-    <string name="details" msgid="8415120088556445230">"Detaljer"</string>
-    <string name="album_selected" msgid="3441280740465738452">"valgt album"</string>
-    <string name="item_selected" msgid="6137767503817908841">"valgt element"</string>
-    <string name="albums_selected" msgid="1815225920157190983">"valgte albummer"</string>
-    <string name="items_selected" msgid="8548754404879264861">"valgte elementer"</string>
-    <string name="album" msgid="5198388817734336004">"Album"</string>
-    <string name="start" msgid="4316892252528232165">"Start"</string>
-    <string name="end" msgid="3645506196012005500">"Afslut"</string>
-    <string name="location" msgid="3432705876921618314">"Placering"</string>
-    <string name="location_unknown" msgid="6310139243003315255">"Ukendt placering"</string>
-    <string name="title" msgid="7622928349908052569">"Titel"</string>
-    <string name="type" msgid="4329478642546287192">"Type"</string>
-    <string name="taken_on" msgid="3269486910757192479">"Optaget den"</string>
-    <string name="added_on" msgid="5194321063173381814">"Tilføjet den"</string>
-    <string name="show_on_map" msgid="6157544221201750980">"Vis på kort"</string>
-    <string name="rotate_left" msgid="7412075232752726934">"Roter til venstre"</string>
-    <string name="rotate_right" msgid="7340681085011826618">"Roter til højre"</string>
-    <string name="crop" msgid="7970750655414797277">"Beskær"</string>
-    <string name="set_as" msgid="3636764710790507868">"Indstil som"</string>
-    <string name="set_as_wallpaper" msgid="5704970402417438945">"Anvend som baggrund"</string>
-    <string name="item" msgid="636303673288563698">"element"</string>
-    <string name="items" msgid="6403254716052150916">"elementer"</string>
-    <string name="around" msgid="2223906282110417412">"Ca."</string>
-    <string name="date_unknown" msgid="4277113471036917386">"Dato ukendt"</string>
-    <string name="video_err" msgid="7917736494827857757">"Kan ikke afspille video"</string>
-</resources>
diff --git a/new3d/res/values-de/strings.xml b/new3d/res/values-de/strings.xml
deleted file mode 100644
index 1634882..0000000
--- a/new3d/res/values-de/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="1928079047368929634">"Galerie"</string>
-  <string-array name="months_abbreviated">
-    <item msgid="9066537518640988368">"Jan."</item>
-    <item msgid="4680813504147866612">"Feb."</item>
-    <item msgid="1934595560893153574">"März"</item>
-    <item msgid="9020107212348500338">"Apr."</item>
-    <item msgid="5734859077892484949">"Mai"</item>
-    <item msgid="8546985030184126468">"Juni"</item>
-    <item msgid="3639654472839533748">"Juli"</item>
-    <item msgid="8434242278630875235">"Aug."</item>
-    <item msgid="8493511009771049442">"Sep."</item>
-    <item msgid="685181459001441496">"Okt."</item>
-    <item msgid="6662413035764778250">"Nov."</item>
-    <item msgid="3784870986696899313">"Dez."</item>
-  </string-array>
-    <string name="gadget_title" msgid="259405922673466798">"Bildrahmen"</string>
-    <string name="details_ms" msgid="940634969189855292">"%1$02d:%2$02d"</string>
-    <string name="details_hms" msgid="3215779248094151255">"%1$d:%2$02d:%3$02d"</string>
-    <string name="movie_view_label" msgid="3697303290960009886">"Filme"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Video wird geladen..."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Mit Video fortfahren"</string>
-    <string name="resume_playing_message" msgid="5184414518126703481">"Mit Wiedergabe fortfahren ab %s ?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Mit Wiedergabe fortfahren"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Starten"</string>
-    <string name="camera" msgid="2730811566218090802">"Kamera"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Speichern"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Verwerfen"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Tippen Sie zum Beginnen auf ein Gesicht."</string>
-    <string name="saving_image" msgid="7270334453636349407">"Bild wird gespeichert..."</string>
-    <string name="crop_label" msgid="521114301871349328">"Bild zuschneiden"</string>
-    <string name="running_face_detection" msgid="4094707964259463039">"Bitte warten..."</string>
-    <string name="set_image" msgid="2331476809308010401">"Bild festlegen als"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Hintergrund wird eingestellt, bitte warten..."</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Hintergrund"</string>
-    <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="loading_new" msgid="7893793767294787579">"Neue Alben und Fotos werden geladen"</string>
-    <string name="initializing" msgid="2374228157398540466">"Wird geladen"</string>
-    <string name="pick_prompt" msgid="576608096149718121">"Ein Element aus Ihrer Sammlung auswählen"</string>
-    <string name="no_items" msgid="3117870234034732172">"Ihre Galerie ist leer."</string>
-    <string name="pick" msgid="7248789132035843128">"Auswählen"</string>
-    <string name="delete" msgid="2839695998251824487">"Löschen"</string>
-    <string name="confirm_delete" msgid="5731757674837098707">"Löschen bestätigen"</string>
-    <string name="cancel" msgid="3637516880917356226">"Abbrechen"</string>
-    <string name="share" msgid="3619042788254195341">"Weitergeben"</string>
-    <string name="no_sd_card" msgid="2666880203366429182">"SD-Karte wurde entfernt oder ist nicht vorhanden."</string>
-    <string name="more" msgid="1526449516720792387">"Mehr"</string>
-    <string name="select_all" msgid="8623593677101437957">"Alles auswählen"</string>
-    <string name="deselect_all" msgid="7397531298370285581">"Auswahl für alle aufheben"</string>
-    <string name="slideshow" msgid="4355906903247112975">"Diashow"</string>
-    <string name="menu" msgid="1819649153380636719">"Menü"</string>
-    <string name="details" msgid="8415120088556445230">"Details"</string>
-    <string name="album_selected" msgid="3441280740465738452">"Album ausgewählt"</string>
-    <string name="item_selected" msgid="6137767503817908841">"Element ausgewählt"</string>
-    <string name="albums_selected" msgid="1815225920157190983">"Alben ausgewählt"</string>
-    <string name="items_selected" msgid="8548754404879264861">"Elemente ausgewählt"</string>
-    <string name="album" msgid="5198388817734336004">"Album"</string>
-    <string name="start" msgid="4316892252528232165">"Starten"</string>
-    <string name="end" msgid="3645506196012005500">"Ende"</string>
-    <string name="location" msgid="3432705876921618314">"Ort"</string>
-    <string name="location_unknown" msgid="6310139243003315255">"Unbekannter Standort"</string>
-    <string name="title" msgid="7622928349908052569">"Titel"</string>
-    <string name="type" msgid="4329478642546287192">"Typ"</string>
-    <string name="taken_on" msgid="3269486910757192479">"Aufgenommen am"</string>
-    <string name="added_on" msgid="5194321063173381814">"Hinzugefügt am"</string>
-    <string name="show_on_map" msgid="6157544221201750980">"Auf Karte anzeigen"</string>
-    <string name="rotate_left" msgid="7412075232752726934">"Nach links drehen"</string>
-    <string name="rotate_right" msgid="7340681085011826618">"Nach rechts drehen"</string>
-    <string name="crop" msgid="7970750655414797277">"Zuschneiden"</string>
-    <string name="set_as" msgid="3636764710790507868">"Festlegen als"</string>
-    <string name="set_as_wallpaper" msgid="5704970402417438945">"Als Hintergrund festlegen"</string>
-    <string name="item" msgid="636303673288563698">"Element"</string>
-    <string name="items" msgid="6403254716052150916">"Elemente"</string>
-    <string name="around" msgid="2223906282110417412">"Ungefähr an folgender Adresse:"</string>
-    <string name="date_unknown" msgid="4277113471036917386">"Datum unbekannt"</string>
-    <string name="video_err" msgid="7917736494827857757">"Video kann nicht wiedergegeben werden."</string>
-</resources>
diff --git a/new3d/res/values-el/strings.xml b/new3d/res/values-el/strings.xml
deleted file mode 100644
index 6ccb016..0000000
--- a/new3d/res/values-el/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="1928079047368929634">"Συλλογή"</string>
-  <string-array name="months_abbreviated">
-    <item msgid="9066537518640988368">"Ιαν"</item>
-    <item msgid="4680813504147866612">"Φεβ"</item>
-    <item msgid="1934595560893153574">"Μαρ"</item>
-    <item msgid="9020107212348500338">"Απρ"</item>
-    <item msgid="5734859077892484949">"Μάι"</item>
-    <item msgid="8546985030184126468">"Ιουν"</item>
-    <item msgid="3639654472839533748">"Ιουλ"</item>
-    <item msgid="8434242278630875235">"Αυγ"</item>
-    <item msgid="8493511009771049442">"Σεπ"</item>
-    <item msgid="685181459001441496">"Οκτ"</item>
-    <item msgid="6662413035764778250">"Νοε"</item>
-    <item msgid="3784870986696899313">"Δεκ"</item>
-  </string-array>
-    <string name="gadget_title" msgid="259405922673466798">"Πλαίσιο εικόνας"</string>
-    <string name="details_ms" msgid="940634969189855292">"%1$02d:%2$02d"</string>
-    <string name="details_hms" msgid="3215779248094151255">"%1$d:%2$02d:%3$02d"</string>
-    <string name="movie_view_label" msgid="3697303290960009886">"Ταινίες"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Φόρτωση βίντεο..."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Συνέχιση βίντεο"</string>
-    <string name="resume_playing_message" msgid="5184414518126703481">"Συνέχιση αναπαραγωγής από το %s;"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Συνέχιση αναπαραγωγής"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Έναρξη από την αρχή"</string>
-    <string name="camera" msgid="2730811566218090802">"Φωτογραφική μηχανή"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Αποθήκευση"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Απόρριψη"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Πατήστε σε ένα πρόσωπο για να ξεκινήσετε."</string>
-    <string name="saving_image" msgid="7270334453636349407">"Αποθήκευση εικόνας..."</string>
-    <string name="crop_label" msgid="521114301871349328">"Περικοπή εικόνας"</string>
-    <string name="running_face_detection" msgid="4094707964259463039">"Περιμένετε..."</string>
-    <string name="set_image" msgid="2331476809308010401">"Ορισμός εικόνας ως"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Ρύθμιση ταπετσαρίας, περιμένετε..."</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Ταπετσαρία"</string>
-    <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="loading_new" msgid="7893793767294787579">"Φόρτωση νέων λευκωμάτων και φωτογραφιών"</string>
-    <string name="initializing" msgid="2374228157398540466">"Φόρτωση"</string>
-    <string name="pick_prompt" msgid="576608096149718121">"Επιλέξτε ένα αντικείμενο από τη συλλογή σας"</string>
-    <string name="no_items" msgid="3117870234034732172">"Δεν υπάρχουν στοιχεία στη συλλογή σας"</string>
-    <string name="pick" msgid="7248789132035843128">"Επιλογή"</string>
-    <string name="delete" msgid="2839695998251824487">"Διαγραφή"</string>
-    <string name="confirm_delete" msgid="5731757674837098707">"Επιβεβαίωση διαγραφής"</string>
-    <string name="cancel" msgid="3637516880917356226">"Ακύρωση"</string>
-    <string name="share" msgid="3619042788254195341">"Κοινή χρήση"</string>
-    <string name="no_sd_card" msgid="2666880203366429182">"Λείπει ή δεν έχει εισαχθεί η κάρτα SD"</string>
-    <string name="more" msgid="1526449516720792387">"Περισσότερα"</string>
-    <string name="select_all" msgid="8623593677101437957">"Επιλογή όλων"</string>
-    <string name="deselect_all" msgid="7397531298370285581">"Κατάργηση επιλογής όλων"</string>
-    <string name="slideshow" msgid="4355906903247112975">"Προβολή διαφανειών"</string>
-    <string name="menu" msgid="1819649153380636719">"Μενού"</string>
-    <string name="details" msgid="8415120088556445230">"Λεπτομέρειες"</string>
-    <string name="album_selected" msgid="3441280740465738452">"λεύκωμα επιλέχθηκε"</string>
-    <string name="item_selected" msgid="6137767503817908841">"αντικείμενο επιλέχθηκε"</string>
-    <string name="albums_selected" msgid="1815225920157190983">"λευκώματα επιλέχθηκαν"</string>
-    <string name="items_selected" msgid="8548754404879264861">"αντικείμενα επιλέχθηκαν"</string>
-    <string name="album" msgid="5198388817734336004">"Λεύκωμα"</string>
-    <string name="start" msgid="4316892252528232165">"Εκκίνηση"</string>
-    <string name="end" msgid="3645506196012005500">"Τέλος"</string>
-    <string name="location" msgid="3432705876921618314">"Τοποθεσία"</string>
-    <string name="location_unknown" msgid="6310139243003315255">"Άγνωστη τοποθεσία"</string>
-    <string name="title" msgid="7622928349908052569">"Τίτλος"</string>
-    <string name="type" msgid="4329478642546287192">"Τύπος"</string>
-    <string name="taken_on" msgid="3269486910757192479">"Ελήφθη την"</string>
-    <string name="added_on" msgid="5194321063173381814">"Προστέθηκε στις"</string>
-    <string name="show_on_map" msgid="6157544221201750980">"Εμφάνιση στον χάρτη"</string>
-    <string name="rotate_left" msgid="7412075232752726934">"Αριστερή περιστροφή"</string>
-    <string name="rotate_right" msgid="7340681085011826618">"Δεξιά περιστροφή"</string>
-    <string name="crop" msgid="7970750655414797277">"Περικοπή"</string>
-    <string name="set_as" msgid="3636764710790507868">"Ορισμός ως"</string>
-    <string name="set_as_wallpaper" msgid="5704970402417438945">"Ορισμός ως ταπετσαρία"</string>
-    <string name="item" msgid="636303673288563698">"αντικείμενο"</string>
-    <string name="items" msgid="6403254716052150916">"αντικείμενα"</string>
-    <string name="around" msgid="2223906282110417412">"Κάπου στην/στο"</string>
-    <string name="date_unknown" msgid="4277113471036917386">"Άγνωστη ημερομηνία"</string>
-    <string name="video_err" msgid="7917736494827857757">"Δεν είναι δυνατή η αναπαραγωγή του βίντεο"</string>
-</resources>
diff --git a/new3d/res/values-es-rUS/strings.xml b/new3d/res/values-es-rUS/strings.xml
deleted file mode 100644
index 447ca57..0000000
--- a/new3d/res/values-es-rUS/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="1928079047368929634">"Galería"</string>
-  <string-array name="months_abbreviated">
-    <item msgid="9066537518640988368">"Ene."</item>
-    <item msgid="4680813504147866612">"Feb."</item>
-    <item msgid="1934595560893153574">"Mar."</item>
-    <item msgid="9020107212348500338">"Abr."</item>
-    <item msgid="5734859077892484949">"Mayo"</item>
-    <item msgid="8546985030184126468">"Jun."</item>
-    <item msgid="3639654472839533748">"Jul."</item>
-    <item msgid="8434242278630875235">"Ago."</item>
-    <item msgid="8493511009771049442">"Sep."</item>
-    <item msgid="685181459001441496">"Oct."</item>
-    <item msgid="6662413035764778250">"Nov."</item>
-    <item msgid="3784870986696899313">"Dic."</item>
-  </string-array>
-    <string name="gadget_title" msgid="259405922673466798">"Marco de imagen"</string>
-    <string name="details_ms" msgid="940634969189855292">"%1$02d:%2$02d"</string>
-    <string name="details_hms" msgid="3215779248094151255">"%1$d:%2$02d:%3$02d"</string>
-    <string name="movie_view_label" msgid="3697303290960009886">"Películas"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Cargando el video..."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Retomar video"</string>
-    <string name="resume_playing_message" msgid="5184414518126703481">"¿Deseas retomar la reproducción desde %s?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Retomar la reproducción"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Empezar de nuevo"</string>
-    <string name="camera" msgid="2730811566218090802">"Cámara"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Guardar"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Eliminar"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Golpea una cara para comenzar."</string>
-    <string name="saving_image" msgid="7270334453636349407">"Guardando imagen..."</string>
-    <string name="crop_label" msgid="521114301871349328">"Cortar la imagen"</string>
-    <string name="running_face_detection" msgid="4094707964259463039">"Por favor, espera..."</string>
-    <string name="set_image" msgid="2331476809308010401">"Definir imagen como"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Configurando papel tapiz. Espera, por favor..."</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Papel tapiz"</string>
-    <string name="details_ok" msgid="6848594369924424312">"Aceptar"</string>
-    <string name="loading_new" msgid="7893793767294787579">"Cargando nuevos álbumes y fotos"</string>
-    <string name="initializing" msgid="2374228157398540466">"Cargando"</string>
-    <string name="pick_prompt" msgid="576608096149718121">"Seleccionar un elemento de tu colección"</string>
-    <string name="no_items" msgid="3117870234034732172">"No hay artículos en tu colección."</string>
-    <string name="pick" msgid="7248789132035843128">"Seleccionar"</string>
-    <string name="delete" msgid="2839695998251824487">"Eliminar"</string>
-    <string name="confirm_delete" msgid="5731757674837098707">"Confirmar supresión"</string>
-    <string name="cancel" msgid="3637516880917356226">"Cancelar"</string>
-    <string name="share" msgid="3619042788254195341">"Compartir"</string>
-    <string name="no_sd_card" msgid="2666880203366429182">"No se encuentra la tarjeta SD o está desactivada"</string>
-    <string name="more" msgid="1526449516720792387">"Más"</string>
-    <string name="select_all" msgid="8623593677101437957">"Seleccionar todo"</string>
-    <string name="deselect_all" msgid="7397531298370285581">"Desmarcar todos"</string>
-    <string name="slideshow" msgid="4355906903247112975">"Presentación de diapositivas"</string>
-    <string name="menu" msgid="1819649153380636719">"Menú"</string>
-    <string name="details" msgid="8415120088556445230">"Detalles"</string>
-    <string name="album_selected" msgid="3441280740465738452">"álbum seleccionado"</string>
-    <string name="item_selected" msgid="6137767503817908841">"elemento seleccionado"</string>
-    <string name="albums_selected" msgid="1815225920157190983">"álbumes seleccionados"</string>
-    <string name="items_selected" msgid="8548754404879264861">"elementos seleccionados"</string>
-    <string name="album" msgid="5198388817734336004">"Álbum"</string>
-    <string name="start" msgid="4316892252528232165">"Inicio"</string>
-    <string name="end" msgid="3645506196012005500">"Finalizar"</string>
-    <string name="location" msgid="3432705876921618314">"Ubicación"</string>
-    <string name="location_unknown" msgid="6310139243003315255">"Ubicación desconocida"</string>
-    <string name="title" msgid="7622928349908052569">"Título"</string>
-    <string name="type" msgid="4329478642546287192">"Tipo"</string>
-    <string name="taken_on" msgid="3269486910757192479">"Aceptar"</string>
-    <string name="added_on" msgid="5194321063173381814">"Agregado el día"</string>
-    <string name="show_on_map" msgid="6157544221201750980">"Mostrar mapa"</string>
-    <string name="rotate_left" msgid="7412075232752726934">"Rotar hacia la izquierda"</string>
-    <string name="rotate_right" msgid="7340681085011826618">"Rotar hacia la derecha"</string>
-    <string name="crop" msgid="7970750655414797277">"Cortar"</string>
-    <string name="set_as" msgid="3636764710790507868">"Definir como"</string>
-    <string name="set_as_wallpaper" msgid="5704970402417438945">"Establecer como fondo de pantalla"</string>
-    <string name="item" msgid="636303673288563698">"elemento"</string>
-    <string name="items" msgid="6403254716052150916">"elementos"</string>
-    <string name="around" msgid="2223906282110417412">"Alrededor"</string>
-    <string name="date_unknown" msgid="4277113471036917386">"Fecha desconocida"</string>
-    <string name="video_err" msgid="7917736494827857757">"No se puede reproducir el video."</string>
-</resources>
diff --git a/new3d/res/values-es/strings.xml b/new3d/res/values-es/strings.xml
deleted file mode 100644
index b98f295..0000000
--- a/new3d/res/values-es/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="1928079047368929634">"Galería"</string>
-  <string-array name="months_abbreviated">
-    <item msgid="9066537518640988368">"Ene."</item>
-    <item msgid="4680813504147866612">"Feb."</item>
-    <item msgid="1934595560893153574">"Mar."</item>
-    <item msgid="9020107212348500338">"Abr."</item>
-    <item msgid="5734859077892484949">"May."</item>
-    <item msgid="8546985030184126468">"Jun."</item>
-    <item msgid="3639654472839533748">"Jul."</item>
-    <item msgid="8434242278630875235">"Ago."</item>
-    <item msgid="8493511009771049442">"Set."</item>
-    <item msgid="685181459001441496">"Oct."</item>
-    <item msgid="6662413035764778250">"Nov."</item>
-    <item msgid="3784870986696899313">"Dic."</item>
-  </string-array>
-    <string name="gadget_title" msgid="259405922673466798">"Picture frame"</string>
-    <string name="details_ms" msgid="940634969189855292">"%1$02d:%2$02d"</string>
-    <string name="details_hms" msgid="3215779248094151255">"%1$d:%2$02d:%3$02d"</string>
-    <string name="movie_view_label" msgid="3697303290960009886">"Películas"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Cargando vídeo…"</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Reanudar vídeo"</string>
-    <string name="resume_playing_message" msgid="5184414518126703481">"Reanudar reproducción a partir de %s ?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Reanudar reproducción"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Volver a reproducir"</string>
-    <string name="camera" msgid="2730811566218090802">"Cámara"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Guardar"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Descartar"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Toca una cara para empezar."</string>
-    <string name="saving_image" msgid="7270334453636349407">"Guardando imagen..."</string>
-    <string name="crop_label" msgid="521114301871349328">"Recortar imagen"</string>
-    <string name="running_face_detection" msgid="4094707964259463039">"Por favor, espera..."</string>
-    <string name="set_image" msgid="2331476809308010401">"Establecer imagen como"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Estableciendo fondo de pantalla..."</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Fondo de pantalla"</string>
-    <string name="details_ok" msgid="6848594369924424312">"Aceptar"</string>
-    <string name="loading_new" msgid="7893793767294787579">"Cargando nuevos álbumes y fotos"</string>
-    <string name="initializing" msgid="2374228157398540466">"Cargando"</string>
-    <string name="pick_prompt" msgid="576608096149718121">"Selecciona un elemento de tu colección."</string>
-    <string name="no_items" msgid="3117870234034732172">"No hay ningún elemento en tu colección."</string>
-    <string name="pick" msgid="7248789132035843128">"Seleccionar"</string>
-    <string name="delete" msgid="2839695998251824487">"Borrar"</string>
-    <string name="confirm_delete" msgid="5731757674837098707">"Confirmar eliminación"</string>
-    <string name="cancel" msgid="3637516880917356226">"Cancelar"</string>
-    <string name="share" msgid="3619042788254195341">"Compartir"</string>
-    <string name="no_sd_card" msgid="2666880203366429182">"Tarjeta SD desinstalada o no incluida"</string>
-    <string name="more" msgid="1526449516720792387">"Más"</string>
-    <string name="select_all" msgid="8623593677101437957">"Seleccionar todo"</string>
-    <string name="deselect_all" msgid="7397531298370285581">"Desmarcar todo"</string>
-    <string name="slideshow" msgid="4355906903247112975">"Presentación"</string>
-    <string name="menu" msgid="1819649153380636719">"Menú"</string>
-    <string name="details" msgid="8415120088556445230">"Detalles"</string>
-    <string name="album_selected" msgid="3441280740465738452">"álbum seleccionado"</string>
-    <string name="item_selected" msgid="6137767503817908841">"elemento seleccionado"</string>
-    <string name="albums_selected" msgid="1815225920157190983">"álbumes seleccionados"</string>
-    <string name="items_selected" msgid="8548754404879264861">"elementos seleccionados"</string>
-    <string name="album" msgid="5198388817734336004">"Álbum"</string>
-    <string name="start" msgid="4316892252528232165">"Iniciar"</string>
-    <string name="end" msgid="3645506196012005500">"Finalizar"</string>
-    <string name="location" msgid="3432705876921618314">"Ubicación"</string>
-    <string name="location_unknown" msgid="6310139243003315255">"Ubicación desconocida"</string>
-    <string name="title" msgid="7622928349908052569">"Título"</string>
-    <string name="type" msgid="4329478642546287192">"Tipo"</string>
-    <string name="taken_on" msgid="3269486910757192479">"Realizado/a el"</string>
-    <string name="added_on" msgid="5194321063173381814">"Añadida el"</string>
-    <string name="show_on_map" msgid="6157544221201750980">"Mostrar en el mapa"</string>
-    <string name="rotate_left" msgid="7412075232752726934">"Girar a la izquierda"</string>
-    <string name="rotate_right" msgid="7340681085011826618">"Girar a la derecha"</string>
-    <string name="crop" msgid="7970750655414797277">"Recortar"</string>
-    <string name="set_as" msgid="3636764710790507868">"Establecer como"</string>
-    <string name="set_as_wallpaper" msgid="5704970402417438945">"Establecer como fondo de pantalla"</string>
-    <string name="item" msgid="636303673288563698">"elemento"</string>
-    <string name="items" msgid="6403254716052150916">"elementos"</string>
-    <string name="around" msgid="2223906282110417412">"Alrededor de"</string>
-    <string name="date_unknown" msgid="4277113471036917386">"Fecha desconocida"</string>
-    <string name="video_err" msgid="7917736494827857757">"No se puede reproducir ningún vídeo."</string>
-</resources>
diff --git a/new3d/res/values-fr/strings.xml b/new3d/res/values-fr/strings.xml
deleted file mode 100644
index ce849da..0000000
--- a/new3d/res/values-fr/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="1928079047368929634">"Galerie"</string>
-  <string-array name="months_abbreviated">
-    <item msgid="9066537518640988368">"Janv."</item>
-    <item msgid="4680813504147866612">"Févr."</item>
-    <item msgid="1934595560893153574">"Mars"</item>
-    <item msgid="9020107212348500338">"Avr."</item>
-    <item msgid="5734859077892484949">"Mai"</item>
-    <item msgid="8546985030184126468">"Juin"</item>
-    <item msgid="3639654472839533748">"Juil."</item>
-    <item msgid="8434242278630875235">"Août"</item>
-    <item msgid="8493511009771049442">"Sept."</item>
-    <item msgid="685181459001441496">"Oct."</item>
-    <item msgid="6662413035764778250">"Nov."</item>
-    <item msgid="3784870986696899313">"Déc."</item>
-  </string-array>
-    <string name="gadget_title" msgid="259405922673466798">"Cadre d\'image"</string>
-    <string name="details_ms" msgid="940634969189855292">"%1$02d:%2$02d"</string>
-    <string name="details_hms" msgid="3215779248094151255">"%1$d:%2$02d:%3$02d"</string>
-    <string name="movie_view_label" msgid="3697303290960009886">"Films"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Chargement de la vidéo..."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Reprendre la vidéo"</string>
-    <string name="resume_playing_message" msgid="5184414518126703481">"Reprendre la lecture à partir de %s ?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Reprendre la lecture"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Démarrer"</string>
-    <string name="camera" msgid="2730811566218090802">"Appareil photo"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Enregistrer"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Annuler"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Appuyez sur un visage pour commencer."</string>
-    <string name="saving_image" msgid="7270334453636349407">"Enregistrement de l\'image"</string>
-    <string name="crop_label" msgid="521114301871349328">"Rogner l\'image"</string>
-    <string name="running_face_detection" msgid="4094707964259463039">"Veuillez patienter..."</string>
-    <string name="set_image" msgid="2331476809308010401">"Utiliser l\'image comme"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Configuration du fond d\'écran en cours. Veuillez patienter..."</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Fond d\'écran"</string>
-    <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="loading_new" msgid="7893793767294787579">"Chargement des nouveaux éléments (albums et photos)"</string>
-    <string name="initializing" msgid="2374228157398540466">"Chargement"</string>
-    <string name="pick_prompt" msgid="576608096149718121">"Choisissez un élément dans votre collection."</string>
-    <string name="no_items" msgid="3117870234034732172">"Aucun élément dans votre collection."</string>
-    <string name="pick" msgid="7248789132035843128">"Choisir"</string>
-    <string name="delete" msgid="2839695998251824487">"Supprimer"</string>
-    <string name="confirm_delete" msgid="5731757674837098707">"Confirmer la suppression"</string>
-    <string name="cancel" msgid="3637516880917356226">"Annuler"</string>
-    <string name="share" msgid="3619042788254195341">"Partager"</string>
-    <string name="no_sd_card" msgid="2666880203366429182">"Carte SD désactivée ou non connectée"</string>
-    <string name="more" msgid="1526449516720792387">"Plus"</string>
-    <string name="select_all" msgid="8623593677101437957">"Tout sélectionner"</string>
-    <string name="deselect_all" msgid="7397531298370285581">"Tout désélectionner"</string>
-    <string name="slideshow" msgid="4355906903247112975">"Diaporama"</string>
-    <string name="menu" msgid="1819649153380636719">"Menu"</string>
-    <string name="details" msgid="8415120088556445230">"Détails"</string>
-    <string name="album_selected" msgid="3441280740465738452">"album sélectionné"</string>
-    <string name="item_selected" msgid="6137767503817908841">"élément sélectionné"</string>
-    <string name="albums_selected" msgid="1815225920157190983">"albums sélectionnés"</string>
-    <string name="items_selected" msgid="8548754404879264861">"éléments sélectionnés"</string>
-    <string name="album" msgid="5198388817734336004">"Album"</string>
-    <string name="start" msgid="4316892252528232165">"Démarrer"</string>
-    <string name="end" msgid="3645506196012005500">"Fin"</string>
-    <string name="location" msgid="3432705876921618314">"Lieu"</string>
-    <string name="location_unknown" msgid="6310139243003315255">"Lieu inconnu"</string>
-    <string name="title" msgid="7622928349908052569">"Titre"</string>
-    <string name="type" msgid="4329478642546287192">"Type"</string>
-    <string name="taken_on" msgid="3269486910757192479">"Prise"</string>
-    <string name="added_on" msgid="5194321063173381814">"Ajoutée le"</string>
-    <string name="show_on_map" msgid="6157544221201750980">"Afficher sur la carte"</string>
-    <string name="rotate_left" msgid="7412075232752726934">"Rotation à gauche"</string>
-    <string name="rotate_right" msgid="7340681085011826618">"Rotation à droite"</string>
-    <string name="crop" msgid="7970750655414797277">"Rogner"</string>
-    <string name="set_as" msgid="3636764710790507868">"Définir comme"</string>
-    <string name="set_as_wallpaper" msgid="5704970402417438945">"Définir comme fond d\'écran"</string>
-    <string name="item" msgid="636303673288563698">"élément"</string>
-    <string name="items" msgid="6403254716052150916">"éléments"</string>
-    <string name="around" msgid="2223906282110417412">"À proximité de"</string>
-    <string name="date_unknown" msgid="4277113471036917386">"Date inconnue"</string>
-    <string name="video_err" msgid="7917736494827857757">"Impossible de lire la vidéo."</string>
-</resources>
diff --git a/new3d/res/values-it/strings.xml b/new3d/res/values-it/strings.xml
deleted file mode 100644
index e31dbc3..0000000
--- a/new3d/res/values-it/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="1928079047368929634">"Galleria"</string>
-  <string-array name="months_abbreviated">
-    <item msgid="9066537518640988368">"Gen"</item>
-    <item msgid="4680813504147866612">"Feb"</item>
-    <item msgid="1934595560893153574">"Mar"</item>
-    <item msgid="9020107212348500338">"Apr"</item>
-    <item msgid="5734859077892484949">"Mag"</item>
-    <item msgid="8546985030184126468">"Giu"</item>
-    <item msgid="3639654472839533748">"Lug"</item>
-    <item msgid="8434242278630875235">"Ago"</item>
-    <item msgid="8493511009771049442">"Set"</item>
-    <item msgid="685181459001441496">"Ott"</item>
-    <item msgid="6662413035764778250">"Nov"</item>
-    <item msgid="3784870986696899313">"Dic"</item>
-  </string-array>
-    <string name="gadget_title" msgid="259405922673466798">"Cornice immagine"</string>
-    <string name="details_ms" msgid="940634969189855292">"%1$02d:%2$02d"</string>
-    <string name="details_hms" msgid="3215779248094151255">"%1$d:%2$02d:%3$02d"</string>
-    <string name="movie_view_label" msgid="3697303290960009886">"Film"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Caricamento video..."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Riprendi video"</string>
-    <string name="resume_playing_message" msgid="5184414518126703481">"Riprendi riproduzione da %s ?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Riprendi riproduzione"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Ricomincia"</string>
-    <string name="camera" msgid="2730811566218090802">"Fotocamera"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Salva"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Annulla"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Tocca un viso per iniziare."</string>
-    <string name="saving_image" msgid="7270334453636349407">"Salvataggio foto in corso..."</string>
-    <string name="crop_label" msgid="521114301871349328">"Ritaglia foto"</string>
-    <string name="running_face_detection" msgid="4094707964259463039">"Attendi..."</string>
-    <string name="set_image" msgid="2331476809308010401">"Imposta foto come"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Impostazione sfondo, attendi..."</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Sfondo"</string>
-    <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="loading_new" msgid="7893793767294787579">"Caricamento di nuovi album e foto in corso"</string>
-    <string name="initializing" msgid="2374228157398540466">"Caricamento in corso"</string>
-    <string name="pick_prompt" msgid="576608096149718121">"Scegli un elemento dalla raccolta"</string>
-    <string name="no_items" msgid="3117870234034732172">"Non sono presenti elementi nella tua raccolta"</string>
-    <string name="pick" msgid="7248789132035843128">"Scegli"</string>
-    <string name="delete" msgid="2839695998251824487">"Elimina"</string>
-    <string name="confirm_delete" msgid="5731757674837098707">"Conferma eliminazione"</string>
-    <string name="cancel" msgid="3637516880917356226">"Annulla"</string>
-    <string name="share" msgid="3619042788254195341">"Condividi"</string>
-    <string name="no_sd_card" msgid="2666880203366429182">"Scheda SD non montata o non presente"</string>
-    <string name="more" msgid="1526449516720792387">"Altro"</string>
-    <string name="select_all" msgid="8623593677101437957">"Seleziona tutto"</string>
-    <string name="deselect_all" msgid="7397531298370285581">"Deseleziona tutto"</string>
-    <string name="slideshow" msgid="4355906903247112975">"Presentazione"</string>
-    <string name="menu" msgid="1819649153380636719">"Menu"</string>
-    <string name="details" msgid="8415120088556445230">"Dettagli"</string>
-    <string name="album_selected" msgid="3441280740465738452">"album selezionato"</string>
-    <string name="item_selected" msgid="6137767503817908841">"elemento selezionato"</string>
-    <string name="albums_selected" msgid="1815225920157190983">"album selezionati"</string>
-    <string name="items_selected" msgid="8548754404879264861">"elementi selezionati"</string>
-    <string name="album" msgid="5198388817734336004">"Album"</string>
-    <string name="start" msgid="4316892252528232165">"Inizia"</string>
-    <string name="end" msgid="3645506196012005500">"Fine"</string>
-    <string name="location" msgid="3432705876921618314">"Luogo"</string>
-    <string name="location_unknown" msgid="6310139243003315255">"Luogo sconosciuto"</string>
-    <string name="title" msgid="7622928349908052569">"Titolo"</string>
-    <string name="type" msgid="4329478642546287192">"Tipo"</string>
-    <string name="taken_on" msgid="3269486910757192479">"Foto scattata/Video girato in data"</string>
-    <string name="added_on" msgid="5194321063173381814">"Data di aggiunta:"</string>
-    <string name="show_on_map" msgid="6157544221201750980">"Mostra sulla mappa"</string>
-    <string name="rotate_left" msgid="7412075232752726934">"Ruota a sinistra"</string>
-    <string name="rotate_right" msgid="7340681085011826618">"Ruota a destra"</string>
-    <string name="crop" msgid="7970750655414797277">"Ritaglia"</string>
-    <string name="set_as" msgid="3636764710790507868">"Imposta come"</string>
-    <string name="set_as_wallpaper" msgid="5704970402417438945">"Imposta come sfondo"</string>
-    <string name="item" msgid="636303673288563698">"elemento"</string>
-    <string name="items" msgid="6403254716052150916">"elementi"</string>
-    <string name="around" msgid="2223906282110417412">"Nei pressi di"</string>
-    <string name="date_unknown" msgid="4277113471036917386">"Data sconosciuta"</string>
-    <string name="video_err" msgid="7917736494827857757">"Impossibile riprodurre il video"</string>
-</resources>
diff --git a/new3d/res/values-ja/strings.xml b/new3d/res/values-ja/strings.xml
deleted file mode 100644
index ad7fa95..0000000
--- a/new3d/res/values-ja/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="1928079047368929634">"ギャラリー"</string>
-  <string-array name="months_abbreviated">
-    <item msgid="9066537518640988368">"1月"</item>
-    <item msgid="4680813504147866612">"2月"</item>
-    <item msgid="1934595560893153574">"3月"</item>
-    <item msgid="9020107212348500338">"4月"</item>
-    <item msgid="5734859077892484949">"5月"</item>
-    <item msgid="8546985030184126468">"6月"</item>
-    <item msgid="3639654472839533748">"7月"</item>
-    <item msgid="8434242278630875235">"8月"</item>
-    <item msgid="8493511009771049442">"9月"</item>
-    <item msgid="685181459001441496">"10月"</item>
-    <item msgid="6662413035764778250">"11月"</item>
-    <item msgid="3784870986696899313">"12月"</item>
-  </string-array>
-    <string name="gadget_title" msgid="259405922673466798">"写真フレーム"</string>
-    <string name="details_ms" msgid="940634969189855292">"%1$02d:%2$02d"</string>
-    <string name="details_hms" msgid="3215779248094151255">"%1$d:%2$02d:%3$02d"</string>
-    <string name="movie_view_label" msgid="3697303290960009886">"動画"</string>
-    <string name="loading_video" msgid="4013492720121891585">"動画を読み込み中..."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"動画の再開"</string>
-    <string name="resume_playing_message" msgid="5184414518126703481">"再生を%sから再開しますか?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"再生を再開"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"最初から再生"</string>
-    <string name="camera" msgid="2730811566218090802">"カメラ"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"保存"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"キャンセル"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"顔をタップして開始します。"</string>
-    <string name="saving_image" msgid="7270334453636349407">"写真を保存中…"</string>
-    <string name="crop_label" msgid="521114301871349328">"トリミング"</string>
-    <string name="running_face_detection" msgid="4094707964259463039">"お待ちください..."</string>
-    <string name="set_image" msgid="2331476809308010401">"写真を設定:"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"壁紙を設定しています。しばらくお待ちください..."</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"壁紙"</string>
-    <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="loading_new" msgid="7893793767294787579">"新しいアルバムと写真を読み込み中"</string>
-    <string name="initializing" msgid="2374228157398540466">"読み込み中"</string>
-    <string name="pick_prompt" msgid="576608096149718121">"コレクションからアイテムを選択してください"</string>
-    <string name="no_items" msgid="3117870234034732172">"コレクションにアイテムがありません"</string>
-    <string name="pick" msgid="7248789132035843128">"選択"</string>
-    <string name="delete" msgid="2839695998251824487">"削除"</string>
-    <string name="confirm_delete" msgid="5731757674837098707">"削除の確認"</string>
-    <string name="cancel" msgid="3637516880917356226">"キャンセル"</string>
-    <string name="share" msgid="3619042788254195341">"共有"</string>
-    <string name="no_sd_card" msgid="2666880203366429182">"SDカードがマウントされていないか挿入されていません"</string>
-    <string name="more" msgid="1526449516720792387">"その他"</string>
-    <string name="select_all" msgid="8623593677101437957">"すべて選択"</string>
-    <string name="deselect_all" msgid="7397531298370285581">"選択をすべて解除"</string>
-    <string name="slideshow" msgid="4355906903247112975">"スライドショー"</string>
-    <string name="menu" msgid="1819649153380636719">"メニュー"</string>
-    <string name="details" msgid="8415120088556445230">"詳細情報"</string>
-    <string name="album_selected" msgid="3441280740465738452">"冊のアルバムを選択済み"</string>
-    <string name="item_selected" msgid="6137767503817908841">"件のアイテムを選択済み"</string>
-    <string name="albums_selected" msgid="1815225920157190983">"冊のアルバムを選択済み"</string>
-    <string name="items_selected" msgid="8548754404879264861">"件のアイテムを選択済み"</string>
-    <string name="album" msgid="5198388817734336004">"アルバム"</string>
-    <string name="start" msgid="4316892252528232165">"開始"</string>
-    <string name="end" msgid="3645506196012005500">"終了"</string>
-    <string name="location" msgid="3432705876921618314">"場所"</string>
-    <string name="location_unknown" msgid="6310139243003315255">"不明な場所"</string>
-    <string name="title" msgid="7622928349908052569">"タイトル"</string>
-    <string name="type" msgid="4329478642546287192">"種類"</string>
-    <string name="taken_on" msgid="3269486910757192479">"撮影"</string>
-    <string name="added_on" msgid="5194321063173381814">"追加日:"</string>
-    <string name="show_on_map" msgid="6157544221201750980">"地図に表示"</string>
-    <string name="rotate_left" msgid="7412075232752726934">"左に回転"</string>
-    <string name="rotate_right" msgid="7340681085011826618">"右に回転"</string>
-    <string name="crop" msgid="7970750655414797277">"トリミング"</string>
-    <string name="set_as" msgid="3636764710790507868">"登録"</string>
-    <string name="set_as_wallpaper" msgid="5704970402417438945">"壁紙として設定"</string>
-    <string name="item" msgid="636303673288563698">"アイテム"</string>
-    <string name="items" msgid="6403254716052150916">"アイテム"</string>
-    <string name="around" msgid="2223906282110417412">"エリア:"</string>
-    <string name="date_unknown" msgid="4277113471036917386">"日付が不明"</string>
-    <string name="video_err" msgid="7917736494827857757">"動画を再生できません"</string>
-</resources>
diff --git a/new3d/res/values-ko/strings.xml b/new3d/res/values-ko/strings.xml
deleted file mode 100644
index 2fbde56..0000000
--- a/new3d/res/values-ko/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="1928079047368929634">"갤러리"</string>
-  <string-array name="months_abbreviated">
-    <item msgid="9066537518640988368">"1월"</item>
-    <item msgid="4680813504147866612">"2월"</item>
-    <item msgid="1934595560893153574">"3월"</item>
-    <item msgid="9020107212348500338">"4월"</item>
-    <item msgid="5734859077892484949">"5월"</item>
-    <item msgid="8546985030184126468">"6월"</item>
-    <item msgid="3639654472839533748">"7월"</item>
-    <item msgid="8434242278630875235">"8월"</item>
-    <item msgid="8493511009771049442">"9월"</item>
-    <item msgid="685181459001441496">"10월"</item>
-    <item msgid="6662413035764778250">"11월"</item>
-    <item msgid="3784870986696899313">"12월"</item>
-  </string-array>
-    <string name="gadget_title" msgid="259405922673466798">"사진 액자"</string>
-    <string name="details_ms" msgid="940634969189855292">"%1$02d:%2$02d"</string>
-    <string name="details_hms" msgid="3215779248094151255">"%1$d:%2$02d:%3$02d"</string>
-    <string name="movie_view_label" msgid="3697303290960009886">"영화"</string>
-    <string name="loading_video" msgid="4013492720121891585">"동영상 로드 중..."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"동영상 다시 시작"</string>
-    <string name="resume_playing_message" msgid="5184414518126703481">"%s에서 재생을 다시 시작하시겠습니까?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"재생 다시 시작"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"시작"</string>
-    <string name="camera" msgid="2730811566218090802">"카메라"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"저장"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"취소"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"시작하려면 얼굴을 탭하세요."</string>
-    <string name="saving_image" msgid="7270334453636349407">"사진 저장 중..."</string>
-    <string name="crop_label" msgid="521114301871349328">"사진 자르기"</string>
-    <string name="running_face_detection" msgid="4094707964259463039">"잠시 기다려 주세요..."</string>
-    <string name="set_image" msgid="2331476809308010401">"사진을 다음으로 설정"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"배경화면을 설정하는 중입니다. 잠시 기다려 주세요..."</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"배경화면"</string>
-    <string name="details_ok" msgid="6848594369924424312">"확인"</string>
-    <string name="loading_new" msgid="7893793767294787579">"새 앨범 및 사진 로드 중"</string>
-    <string name="initializing" msgid="2374228157398540466">"로드 중"</string>
-    <string name="pick_prompt" msgid="576608096149718121">"컬렉션에서 항목 선택"</string>
-    <string name="no_items" msgid="3117870234034732172">"컬렉션에 항목이 없습니다."</string>
-    <string name="pick" msgid="7248789132035843128">"선택"</string>
-    <string name="delete" msgid="2839695998251824487">"삭제"</string>
-    <string name="confirm_delete" msgid="5731757674837098707">"삭제 확인"</string>
-    <string name="cancel" msgid="3637516880917356226">"취소"</string>
-    <string name="share" msgid="3619042788254195341">"공유"</string>
-    <string name="no_sd_card" msgid="2666880203366429182">"SD 카드가 마운트 해제되지 않았거나 없습니다."</string>
-    <string name="more" msgid="1526449516720792387">"추가 작업"</string>
-    <string name="select_all" msgid="8623593677101437957">"모두 선택"</string>
-    <string name="deselect_all" msgid="7397531298370285581">"모두 선택취소"</string>
-    <string name="slideshow" msgid="4355906903247112975">"슬라이드쇼"</string>
-    <string name="menu" msgid="1819649153380636719">"메뉴"</string>
-    <string name="details" msgid="8415120088556445230">"세부정보"</string>
-    <string name="album_selected" msgid="3441280740465738452">"앨범이 선택됨"</string>
-    <string name="item_selected" msgid="6137767503817908841">"항목이 선택됨"</string>
-    <string name="albums_selected" msgid="1815225920157190983">"앨범이 선택됨"</string>
-    <string name="items_selected" msgid="8548754404879264861">"항목이 선택됨"</string>
-    <string name="album" msgid="5198388817734336004">"앨범"</string>
-    <string name="start" msgid="4316892252528232165">"시작"</string>
-    <string name="end" msgid="3645506196012005500">"종료"</string>
-    <string name="location" msgid="3432705876921618314">"위치"</string>
-    <string name="location_unknown" msgid="6310139243003315255">"알 수 없는 위치"</string>
-    <string name="title" msgid="7622928349908052569">"제목"</string>
-    <string name="type" msgid="4329478642546287192">"유형"</string>
-    <string name="taken_on" msgid="3269486910757192479">"촬영 날짜"</string>
-    <string name="added_on" msgid="5194321063173381814">"추가 날짜"</string>
-    <string name="show_on_map" msgid="6157544221201750980">"지도에 표시"</string>
-    <string name="rotate_left" msgid="7412075232752726934">"왼쪽으로 회전"</string>
-    <string name="rotate_right" msgid="7340681085011826618">"오른쪽으로 회전"</string>
-    <string name="crop" msgid="7970750655414797277">"자르기"</string>
-    <string name="set_as" msgid="3636764710790507868">"다음으로 설정"</string>
-    <string name="set_as_wallpaper" msgid="5704970402417438945">"배경화면으로 설정"</string>
-    <string name="item" msgid="636303673288563698">"항목"</string>
-    <string name="items" msgid="6403254716052150916">"항목"</string>
-    <string name="around" msgid="2223906282110417412">"근처:"</string>
-    <string name="date_unknown" msgid="4277113471036917386">"날짜를 알 수 없음"</string>
-    <string name="video_err" msgid="7917736494827857757">"동영상을 재생할 수 없음"</string>
-</resources>
diff --git a/new3d/res/values-nb/strings.xml b/new3d/res/values-nb/strings.xml
deleted file mode 100644
index 6fcf29b..0000000
--- a/new3d/res/values-nb/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="1928079047368929634">"Galleri"</string>
-  <string-array name="months_abbreviated">
-    <item msgid="9066537518640988368">"Jan"</item>
-    <item msgid="4680813504147866612">"Feb"</item>
-    <item msgid="1934595560893153574">"Mar"</item>
-    <item msgid="9020107212348500338">"Apr"</item>
-    <item msgid="5734859077892484949">"Mai"</item>
-    <item msgid="8546985030184126468">"Jun"</item>
-    <item msgid="3639654472839533748">"Jul"</item>
-    <item msgid="8434242278630875235">"Aug"</item>
-    <item msgid="8493511009771049442">"Sep"</item>
-    <item msgid="685181459001441496">"Okt"</item>
-    <item msgid="6662413035764778250">"Nov"</item>
-    <item msgid="3784870986696899313">"Des"</item>
-  </string-array>
-    <string name="gadget_title" msgid="259405922673466798">"Bilderamme"</string>
-    <string name="details_ms" msgid="940634969189855292">"%1$02d:%2$02d"</string>
-    <string name="details_hms" msgid="3215779248094151255">"%1$d:%2$02d:%3$02d"</string>
-    <string name="movie_view_label" msgid="3697303290960009886">"Filmer"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Laster video…"</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Fortsett avspilling"</string>
-    <string name="resume_playing_message" msgid="5184414518126703481">"Fortsett avspilling fra %s?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Fortsett avspilling"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Begynn på nytt"</string>
-    <string name="camera" msgid="2730811566218090802">"Kamera"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Lagre"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Forkast"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Trykk på et ansikt for å begynne."</string>
-    <string name="saving_image" msgid="7270334453636349407">"Lagrer bilde ..."</string>
-    <string name="crop_label" msgid="521114301871349328">"Beskjær bilde"</string>
-    <string name="running_face_detection" msgid="4094707964259463039">"Vent litt ..."</string>
-    <string name="set_image" msgid="2331476809308010401">"Angi bilde som"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Setter bakgrunnsbilde, vent litt…"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Bakgrunnsbilde"</string>
-    <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="loading_new" msgid="7893793767294787579">"Laster inn nye albumer og bilder"</string>
-    <string name="initializing" msgid="2374228157398540466">"Henter"</string>
-    <string name="pick_prompt" msgid="576608096149718121">"Velg et element fra samlingen"</string>
-    <string name="no_items" msgid="3117870234034732172">"Det er ingen elementer i samlingen"</string>
-    <string name="pick" msgid="7248789132035843128">"Velg"</string>
-    <string name="delete" msgid="2839695998251824487">"Slett"</string>
-    <string name="confirm_delete" msgid="5731757674837098707">"Bekreft sletting"</string>
-    <string name="cancel" msgid="3637516880917356226">"Avbryt"</string>
-    <string name="share" msgid="3619042788254195341">"Del"</string>
-    <string name="no_sd_card" msgid="2666880203366429182">"Minnekortet er koblet fra eller ikke satt inn"</string>
-    <string name="more" msgid="1526449516720792387">"Mer"</string>
-    <string name="select_all" msgid="8623593677101437957">"Marker alle"</string>
-    <string name="deselect_all" msgid="7397531298370285581">"Fjern alle markeringer"</string>
-    <string name="slideshow" msgid="4355906903247112975">"Lysbildevisning"</string>
-    <string name="menu" msgid="1819649153380636719">"Meny"</string>
-    <string name="details" msgid="8415120088556445230">"Detaljer"</string>
-    <string name="album_selected" msgid="3441280740465738452">"album valgt"</string>
-    <string name="item_selected" msgid="6137767503817908841">"element valgt"</string>
-    <string name="albums_selected" msgid="1815225920157190983">"albumer valgt"</string>
-    <string name="items_selected" msgid="8548754404879264861">"elementer valgt"</string>
-    <string name="album" msgid="5198388817734336004">"Album"</string>
-    <string name="start" msgid="4316892252528232165">"Start"</string>
-    <string name="end" msgid="3645506196012005500">"Avslutt"</string>
-    <string name="location" msgid="3432705876921618314">"Sted"</string>
-    <string name="location_unknown" msgid="6310139243003315255">"Ukjent sted"</string>
-    <string name="title" msgid="7622928349908052569">"Tittel"</string>
-    <string name="type" msgid="4329478642546287192">"Type"</string>
-    <string name="taken_on" msgid="3269486910757192479">"Fra"</string>
-    <string name="added_on" msgid="5194321063173381814">"Lagt til den"</string>
-    <string name="show_on_map" msgid="6157544221201750980">"Vis på kartet"</string>
-    <string name="rotate_left" msgid="7412075232752726934">"Roter til venstre"</string>
-    <string name="rotate_right" msgid="7340681085011826618">"Roter til høyre"</string>
-    <string name="crop" msgid="7970750655414797277">"Beskjær"</string>
-    <string name="set_as" msgid="3636764710790507868">"Angi som"</string>
-    <string name="set_as_wallpaper" msgid="5704970402417438945">"Bruk som bakgrunn"</string>
-    <string name="item" msgid="636303673288563698">"element"</string>
-    <string name="items" msgid="6403254716052150916">"elementer"</string>
-    <string name="around" msgid="2223906282110417412">"Rundt"</string>
-    <string name="date_unknown" msgid="4277113471036917386">"Dato ukjent"</string>
-    <string name="video_err" msgid="7917736494827857757">"Kunne ikke spille av videoen"</string>
-</resources>
diff --git a/new3d/res/values-nl/strings.xml b/new3d/res/values-nl/strings.xml
deleted file mode 100644
index defa754..0000000
--- a/new3d/res/values-nl/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="1928079047368929634">"Galerij"</string>
-  <string-array name="months_abbreviated">
-    <item msgid="9066537518640988368">"jan"</item>
-    <item msgid="4680813504147866612">"feb"</item>
-    <item msgid="1934595560893153574">"mrt"</item>
-    <item msgid="9020107212348500338">"apr"</item>
-    <item msgid="5734859077892484949">"mei"</item>
-    <item msgid="8546985030184126468">"jun"</item>
-    <item msgid="3639654472839533748">"jul"</item>
-    <item msgid="8434242278630875235">"aug"</item>
-    <item msgid="8493511009771049442">"sep"</item>
-    <item msgid="685181459001441496">"okt"</item>
-    <item msgid="6662413035764778250">"nov"</item>
-    <item msgid="3784870986696899313">"dec"</item>
-  </string-array>
-    <string name="gadget_title" msgid="259405922673466798">"Fotolijstje"</string>
-    <string name="details_ms" msgid="940634969189855292">"%1$02d:%2$02d"</string>
-    <string name="details_hms" msgid="3215779248094151255">"%1$d:%2$02d:%3$02d"</string>
-    <string name="movie_view_label" msgid="3697303290960009886">"Films"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Video laden..."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Video hervatten"</string>
-    <string name="resume_playing_message" msgid="5184414518126703481">"Afspelen hervatten vanaf %s ?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Afspelen hervatten"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Opnieuw starten"</string>
-    <string name="camera" msgid="2730811566218090802">"Camera"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Opslaan"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Ongedaan maken"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Tik op een gezicht om te beginnen."</string>
-    <string name="saving_image" msgid="7270334453636349407">"Foto opslaan..."</string>
-    <string name="crop_label" msgid="521114301871349328">"Foto bijsnijden"</string>
-    <string name="running_face_detection" msgid="4094707964259463039">"Een ogenblik geduld..."</string>
-    <string name="set_image" msgid="2331476809308010401">"Foto instellen als"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Achtergrond wordt ingesteld. Een ogenblik geduld..."</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Achtergrond"</string>
-    <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="loading_new" msgid="7893793767294787579">"Nieuwe albums en foto\'s laden"</string>
-    <string name="initializing" msgid="2374228157398540466">"Laden"</string>
-    <string name="pick_prompt" msgid="576608096149718121">"Kies een item uit uw verzameling"</string>
-    <string name="no_items" msgid="3117870234034732172">"Uw verzameling bevat geen items"</string>
-    <string name="pick" msgid="7248789132035843128">"Kiezen"</string>
-    <string name="delete" msgid="2839695998251824487">"Verwijderen"</string>
-    <string name="confirm_delete" msgid="5731757674837098707">"Verwijderen bevestigen"</string>
-    <string name="cancel" msgid="3637516880917356226">"Annuleren"</string>
-    <string name="share" msgid="3619042788254195341">"Delen"</string>
-    <string name="no_sd_card" msgid="2666880203366429182">"De SD-kaart is ontkoppeld of niet aanwezig"</string>
-    <string name="more" msgid="1526449516720792387">"Meer"</string>
-    <string name="select_all" msgid="8623593677101437957">"Alles selecteren"</string>
-    <string name="deselect_all" msgid="7397531298370285581">"Selectie van alle items ongedaan maken"</string>
-    <string name="slideshow" msgid="4355906903247112975">"Diavoorstelling"</string>
-    <string name="menu" msgid="1819649153380636719">"Menu"</string>
-    <string name="details" msgid="8415120088556445230">"Details"</string>
-    <string name="album_selected" msgid="3441280740465738452">"album geselecteerd"</string>
-    <string name="item_selected" msgid="6137767503817908841">"item geselecteerd"</string>
-    <string name="albums_selected" msgid="1815225920157190983">"albums geselecteerd"</string>
-    <string name="items_selected" msgid="8548754404879264861">"items geselecteerd"</string>
-    <string name="album" msgid="5198388817734336004">"Album"</string>
-    <string name="start" msgid="4316892252528232165">"Start"</string>
-    <string name="end" msgid="3645506196012005500">"Beëindigen"</string>
-    <string name="location" msgid="3432705876921618314">"Locatie"</string>
-    <string name="location_unknown" msgid="6310139243003315255">"Onbekende locatie"</string>
-    <string name="title" msgid="7622928349908052569">"Titel"</string>
-    <string name="type" msgid="4329478642546287192">"Type"</string>
-    <string name="taken_on" msgid="3269486910757192479">"Genomen op"</string>
-    <string name="added_on" msgid="5194321063173381814">"Toegevoegd op"</string>
-    <string name="show_on_map" msgid="6157544221201750980">"Op kaart weergeven"</string>
-    <string name="rotate_left" msgid="7412075232752726934">"Linksom draaien"</string>
-    <string name="rotate_right" msgid="7340681085011826618">"Rechtsom draaien"</string>
-    <string name="crop" msgid="7970750655414797277">"Bijsnijden"</string>
-    <string name="set_as" msgid="3636764710790507868">"Instellen als"</string>
-    <string name="set_as_wallpaper" msgid="5704970402417438945">"Instellen als achtergrond"</string>
-    <string name="item" msgid="636303673288563698">"item"</string>
-    <string name="items" msgid="6403254716052150916">"items"</string>
-    <string name="around" msgid="2223906282110417412">"In de buurt van"</string>
-    <string name="date_unknown" msgid="4277113471036917386">"Datum onbekend"</string>
-    <string name="video_err" msgid="7917736494827857757">"Kan video niet afspelen"</string>
-</resources>
diff --git a/new3d/res/values-pl/strings.xml b/new3d/res/values-pl/strings.xml
deleted file mode 100644
index 28c7af7..0000000
--- a/new3d/res/values-pl/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="1928079047368929634">"Galeria"</string>
-  <string-array name="months_abbreviated">
-    <item msgid="9066537518640988368">"Sty"</item>
-    <item msgid="4680813504147866612">"Lut"</item>
-    <item msgid="1934595560893153574">"Mar"</item>
-    <item msgid="9020107212348500338">"Kwi"</item>
-    <item msgid="5734859077892484949">"Maj"</item>
-    <item msgid="8546985030184126468">"Cze"</item>
-    <item msgid="3639654472839533748">"Lip"</item>
-    <item msgid="8434242278630875235">"Sie"</item>
-    <item msgid="8493511009771049442">"Wrz"</item>
-    <item msgid="685181459001441496">"Paź"</item>
-    <item msgid="6662413035764778250">"Lis"</item>
-    <item msgid="3784870986696899313">"Gru"</item>
-  </string-array>
-    <string name="gadget_title" msgid="259405922673466798">"Ramka ze zdjęciem"</string>
-    <string name="details_ms" msgid="940634969189855292">"%1$02d:%2$02d"</string>
-    <string name="details_hms" msgid="3215779248094151255">"%1$d:%2$02d:%3$02d"</string>
-    <string name="movie_view_label" msgid="3697303290960009886">"Filmy"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Ładowanie filmu..."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Wznów film"</string>
-    <string name="resume_playing_message" msgid="5184414518126703481">"Wznowić odtwarzanie od %s?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Wznów odtwarzanie"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Rozpocznij"</string>
-    <string name="camera" msgid="2730811566218090802">"Aparat"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Zapisz"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Odrzuć"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Dotknij twarzy, aby rozpocząć"</string>
-    <string name="saving_image" msgid="7270334453636349407">"Zapisywanie zdjęcia…"</string>
-    <string name="crop_label" msgid="521114301871349328">"Przytnij zdjęcie"</string>
-    <string name="running_face_detection" msgid="4094707964259463039">"Czekaj…"</string>
-    <string name="set_image" msgid="2331476809308010401">"Ustaw zdjęcie jako"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Ustawianie tapety, proszę czekać…"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Tapeta"</string>
-    <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="loading_new" msgid="7893793767294787579">"Wczytywanie nowych albumów i zdjęć"</string>
-    <string name="initializing" msgid="2374228157398540466">"Wczytywanie"</string>
-    <string name="pick_prompt" msgid="576608096149718121">"Wybierz element z kolekcji"</string>
-    <string name="no_items" msgid="3117870234034732172">"Brak elementów"</string>
-    <string name="pick" msgid="7248789132035843128">"Wybierz"</string>
-    <string name="delete" msgid="2839695998251824487">"Usuń"</string>
-    <string name="confirm_delete" msgid="5731757674837098707">"Potwierdź usunięcie"</string>
-    <string name="cancel" msgid="3637516880917356226">"Anuluj"</string>
-    <string name="share" msgid="3619042788254195341">"Udostępnij"</string>
-    <string name="no_sd_card" msgid="2666880203366429182">"Brak karty SD lub jest ona odłączona"</string>
-    <string name="more" msgid="1526449516720792387">"Więcej"</string>
-    <string name="select_all" msgid="8623593677101437957">"Zaznacz wszystko"</string>
-    <string name="deselect_all" msgid="7397531298370285581">"Usuń zaznaczenie wszystkich"</string>
-    <string name="slideshow" msgid="4355906903247112975">"Pokaz slajdów"</string>
-    <string name="menu" msgid="1819649153380636719">"Menu"</string>
-    <string name="details" msgid="8415120088556445230">"Szczegóły"</string>
-    <string name="album_selected" msgid="3441280740465738452">"wybrany album"</string>
-    <string name="item_selected" msgid="6137767503817908841">"wybrany element"</string>
-    <string name="albums_selected" msgid="1815225920157190983">"wybranych albumów"</string>
-    <string name="items_selected" msgid="8548754404879264861">"wybranych elementów"</string>
-    <string name="album" msgid="5198388817734336004">"Album"</string>
-    <string name="start" msgid="4316892252528232165">"Start"</string>
-    <string name="end" msgid="3645506196012005500">"Zakończ"</string>
-    <string name="location" msgid="3432705876921618314">"Lokalizacja"</string>
-    <string name="location_unknown" msgid="6310139243003315255">"Nieznana lokalizacja"</string>
-    <string name="title" msgid="7622928349908052569">"Tytuł"</string>
-    <string name="type" msgid="4329478642546287192">"Typ"</string>
-    <string name="taken_on" msgid="3269486910757192479">"Zapisano:"</string>
-    <string name="added_on" msgid="5194321063173381814">"Dodano"</string>
-    <string name="show_on_map" msgid="6157544221201750980">"Pokaż na mapie"</string>
-    <string name="rotate_left" msgid="7412075232752726934">"Obróć w lewo"</string>
-    <string name="rotate_right" msgid="7340681085011826618">"Obróć w prawo"</string>
-    <string name="crop" msgid="7970750655414797277">"Przytnij"</string>
-    <string name="set_as" msgid="3636764710790507868">"Ustaw jako"</string>
-    <string name="set_as_wallpaper" msgid="5704970402417438945">"Ustaw jako tapetę"</string>
-    <string name="item" msgid="636303673288563698">"element"</string>
-    <string name="items" msgid="6403254716052150916">"elementy"</string>
-    <string name="around" msgid="2223906282110417412">"W pobliżu"</string>
-    <string name="date_unknown" msgid="4277113471036917386">"Data nieznana"</string>
-    <string name="video_err" msgid="7917736494827857757">"Nie można odtworzyć filmu wideo"</string>
-</resources>
diff --git a/new3d/res/values-pt-rPT/strings.xml b/new3d/res/values-pt-rPT/strings.xml
deleted file mode 100644
index 912e78b..0000000
--- a/new3d/res/values-pt-rPT/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="1928079047368929634">"Galeria"</string>
-  <string-array name="months_abbreviated">
-    <item msgid="9066537518640988368">"Jan"</item>
-    <item msgid="4680813504147866612">"Fev"</item>
-    <item msgid="1934595560893153574">"Mar"</item>
-    <item msgid="9020107212348500338">"Abr"</item>
-    <item msgid="5734859077892484949">"Mai"</item>
-    <item msgid="8546985030184126468">"Jun"</item>
-    <item msgid="3639654472839533748">"Jul"</item>
-    <item msgid="8434242278630875235">"Ago"</item>
-    <item msgid="8493511009771049442">"Set"</item>
-    <item msgid="685181459001441496">"Out"</item>
-    <item msgid="6662413035764778250">"Nov"</item>
-    <item msgid="3784870986696899313">"Dez"</item>
-  </string-array>
-    <string name="gadget_title" msgid="259405922673466798">"Moldura da imagem"</string>
-    <string name="details_ms" msgid="940634969189855292">"%1$02d:%2$02d"</string>
-    <string name="details_hms" msgid="3215779248094151255">"%1$d:%2$02d:%3$02d"</string>
-    <string name="movie_view_label" msgid="3697303290960009886">"Filmes"</string>
-    <string name="loading_video" msgid="4013492720121891585">"A carregar vídeo..."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Retomar o vídeo"</string>
-    <string name="resume_playing_message" msgid="5184414518126703481">"Retomar reprodução a partir de %s?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Retomar a reprodução"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Recomeçar"</string>
-    <string name="camera" msgid="2730811566218090802">"Câmara"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Guardar"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Rejeitar"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Toque num rosto para começar."</string>
-    <string name="saving_image" msgid="7270334453636349407">"A guardar imagem..."</string>
-    <string name="crop_label" msgid="521114301871349328">"Recortar imagem"</string>
-    <string name="running_face_detection" msgid="4094707964259463039">"Aguarde..."</string>
-    <string name="set_image" msgid="2331476809308010401">"Definir imagem como"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"A definir a imagem de fundo, aguarde..."</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Imagem de fundo"</string>
-    <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="loading_new" msgid="7893793767294787579">"A carregar novos álbuns e fotografias"</string>
-    <string name="initializing" msgid="2374228157398540466">"A carregar"</string>
-    <string name="pick_prompt" msgid="576608096149718121">"Escolha um item a partir da colecção"</string>
-    <string name="no_items" msgid="3117870234034732172">"Não existem itens na sua colecção"</string>
-    <string name="pick" msgid="7248789132035843128">"Escolher"</string>
-    <string name="delete" msgid="2839695998251824487">"Eliminar"</string>
-    <string name="confirm_delete" msgid="5731757674837098707">"Confirmar eliminação"</string>
-    <string name="cancel" msgid="3637516880917356226">"Cancelar"</string>
-    <string name="share" msgid="3619042788254195341">"Partilhar"</string>
-    <string name="no_sd_card" msgid="2666880203366429182">"Cartão SD desmontado ou ausente"</string>
-    <string name="more" msgid="1526449516720792387">"Mais"</string>
-    <string name="select_all" msgid="8623593677101437957">"Seleccionar tudo"</string>
-    <string name="deselect_all" msgid="7397531298370285581">"Desmarcar tudo"</string>
-    <string name="slideshow" msgid="4355906903247112975">"Apresentação de diapositivos"</string>
-    <string name="menu" msgid="1819649153380636719">"Menu"</string>
-    <string name="details" msgid="8415120088556445230">"Detalhes"</string>
-    <string name="album_selected" msgid="3441280740465738452">"álbum seleccionado"</string>
-    <string name="item_selected" msgid="6137767503817908841">"item seleccionado"</string>
-    <string name="albums_selected" msgid="1815225920157190983">"álbuns seleccionados"</string>
-    <string name="items_selected" msgid="8548754404879264861">"itens seleccionados"</string>
-    <string name="album" msgid="5198388817734336004">"Álbum"</string>
-    <string name="start" msgid="4316892252528232165">"Iniciar"</string>
-    <string name="end" msgid="3645506196012005500">"Terminar"</string>
-    <string name="location" msgid="3432705876921618314">"Localização"</string>
-    <string name="location_unknown" msgid="6310139243003315255">"Localização desconhecida"</string>
-    <string name="title" msgid="7622928349908052569">"Título"</string>
-    <string name="type" msgid="4329478642546287192">"Tipo"</string>
-    <string name="taken_on" msgid="3269486910757192479">"Criado(a) em"</string>
-    <string name="added_on" msgid="5194321063173381814">"Adicionada em"</string>
-    <string name="show_on_map" msgid="6157544221201750980">"Mostrar no mapa"</string>
-    <string name="rotate_left" msgid="7412075232752726934">"Rodar para a esquerda"</string>
-    <string name="rotate_right" msgid="7340681085011826618">"Rodar para a direita"</string>
-    <string name="crop" msgid="7970750655414797277">"Recortar"</string>
-    <string name="set_as" msgid="3636764710790507868">"Definir como"</string>
-    <string name="set_as_wallpaper" msgid="5704970402417438945">"Definir como imagem de fundo"</string>
-    <string name="item" msgid="636303673288563698">"item"</string>
-    <string name="items" msgid="6403254716052150916">"itens"</string>
-    <string name="around" msgid="2223906282110417412">"Perto de"</string>
-    <string name="date_unknown" msgid="4277113471036917386">"Data desconhecida"</string>
-    <string name="video_err" msgid="7917736494827857757">"Não é possível reproduzir vídeo"</string>
-</resources>
diff --git a/new3d/res/values-pt/strings.xml b/new3d/res/values-pt/strings.xml
deleted file mode 100644
index 5f6f51b..0000000
--- a/new3d/res/values-pt/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="1928079047368929634">"Galeria"</string>
-  <string-array name="months_abbreviated">
-    <item msgid="9066537518640988368">"Jan"</item>
-    <item msgid="4680813504147866612">"Fev"</item>
-    <item msgid="1934595560893153574">"Mar"</item>
-    <item msgid="9020107212348500338">"Abr"</item>
-    <item msgid="5734859077892484949">"Mai"</item>
-    <item msgid="8546985030184126468">"Jun"</item>
-    <item msgid="3639654472839533748">"Jul"</item>
-    <item msgid="8434242278630875235">"Ago"</item>
-    <item msgid="8493511009771049442">"Set"</item>
-    <item msgid="685181459001441496">"Out"</item>
-    <item msgid="6662413035764778250">"Nov"</item>
-    <item msgid="3784870986696899313">"Dez"</item>
-  </string-array>
-    <string name="gadget_title" msgid="259405922673466798">"Moldura de uma imagem"</string>
-    <string name="details_ms" msgid="940634969189855292">"%1$02d:%2$02d"</string>
-    <string name="details_hms" msgid="3215779248094151255">"%1$d:%2$02d:%3$02d"</string>
-    <string name="movie_view_label" msgid="3697303290960009886">"Filmes\n"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Carregando vídeo..."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Retomar vídeo"</string>
-    <string name="resume_playing_message" msgid="5184414518126703481">"Retomar reprodução de %s ?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Retomar a reprodução"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Reiniciar"</string>
-    <string name="camera" msgid="2730811566218090802">"Câmera"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Salvar"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Descartar"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Toque em uma face para começar."</string>
-    <string name="saving_image" msgid="7270334453636349407">"Salvando imagem…"</string>
-    <string name="crop_label" msgid="521114301871349328">"Cortar imagem"</string>
-    <string name="running_face_detection" msgid="4094707964259463039">"Aguarde..."</string>
-    <string name="set_image" msgid="2331476809308010401">"Definir imagem como\n"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Configurando o plano de fundo, aguarde…"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Plano de fundo"</string>
-    <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="loading_new" msgid="7893793767294787579">"Carregando novos álbuns e fotos"</string>
-    <string name="initializing" msgid="2374228157398540466">"Carregando"</string>
-    <string name="pick_prompt" msgid="576608096149718121">"Escolha um item da sua coleção"</string>
-    <string name="no_items" msgid="3117870234034732172">"Não há itens na sua coleção"</string>
-    <string name="pick" msgid="7248789132035843128">"Escolher"</string>
-    <string name="delete" msgid="2839695998251824487">"Excluir"</string>
-    <string name="confirm_delete" msgid="5731757674837098707">"Confirmar exclusão"</string>
-    <string name="cancel" msgid="3637516880917356226">"Cancelar"</string>
-    <string name="share" msgid="3619042788254195341">"Compartilhar"</string>
-    <string name="no_sd_card" msgid="2666880203366429182">"Cartão SD desmontado ou ausente"</string>
-    <string name="more" msgid="1526449516720792387">"Mais"</string>
-    <string name="select_all" msgid="8623593677101437957">"Selecionar todos"</string>
-    <string name="deselect_all" msgid="7397531298370285581">"Desmarcar tudo"</string>
-    <string name="slideshow" msgid="4355906903247112975">"Apresentação de slides"</string>
-    <string name="menu" msgid="1819649153380636719">"Menu"</string>
-    <string name="details" msgid="8415120088556445230">"Detalhes"</string>
-    <string name="album_selected" msgid="3441280740465738452">"álbum selecionado"</string>
-    <string name="item_selected" msgid="6137767503817908841">"item selecionado"</string>
-    <string name="albums_selected" msgid="1815225920157190983">"álbuns selecionados"</string>
-    <string name="items_selected" msgid="8548754404879264861">"itens selecionados"</string>
-    <string name="album" msgid="5198388817734336004">"Álbum"</string>
-    <string name="start" msgid="4316892252528232165">"Iniciar"</string>
-    <string name="end" msgid="3645506196012005500">"Finalizar"</string>
-    <string name="location" msgid="3432705876921618314">"Local"</string>
-    <string name="location_unknown" msgid="6310139243003315255">"Local desconhecido\n"</string>
-    <string name="title" msgid="7622928349908052569">"Título"</string>
-    <string name="type" msgid="4329478642546287192">"Tipo"</string>
-    <string name="taken_on" msgid="3269486910757192479">"Feito(a) em"</string>
-    <string name="added_on" msgid="5194321063173381814">"Adicionado em"</string>
-    <string name="show_on_map" msgid="6157544221201750980">"Mostrar no mapa"</string>
-    <string name="rotate_left" msgid="7412075232752726934">"Girar para a esquerda"</string>
-    <string name="rotate_right" msgid="7340681085011826618">"Girar para a direita"</string>
-    <string name="crop" msgid="7970750655414797277">"Cortar"</string>
-    <string name="set_as" msgid="3636764710790507868">"Definir como"</string>
-    <string name="set_as_wallpaper" msgid="5704970402417438945">"Definir como plano de fundo"</string>
-    <string name="item" msgid="636303673288563698">"item"</string>
-    <string name="items" msgid="6403254716052150916">"itens"</string>
-    <string name="around" msgid="2223906282110417412">"Perto de"</string>
-    <string name="date_unknown" msgid="4277113471036917386">"Data desconhecida"</string>
-    <string name="video_err" msgid="7917736494827857757">"Não é possível reproduzir o vídeo"</string>
-</resources>
diff --git a/new3d/res/values-ru/strings.xml b/new3d/res/values-ru/strings.xml
deleted file mode 100644
index b62f8ed..0000000
--- a/new3d/res/values-ru/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="1928079047368929634">"Галерея"</string>
-  <string-array name="months_abbreviated">
-    <item msgid="9066537518640988368">"янв"</item>
-    <item msgid="4680813504147866612">"фев"</item>
-    <item msgid="1934595560893153574">"мар"</item>
-    <item msgid="9020107212348500338">"апр"</item>
-    <item msgid="5734859077892484949">"май"</item>
-    <item msgid="8546985030184126468">"июн"</item>
-    <item msgid="3639654472839533748">"июл"</item>
-    <item msgid="8434242278630875235">"авг"</item>
-    <item msgid="8493511009771049442">"сен"</item>
-    <item msgid="685181459001441496">"окт"</item>
-    <item msgid="6662413035764778250">"ноя"</item>
-    <item msgid="3784870986696899313">"дек"</item>
-  </string-array>
-    <string name="gadget_title" msgid="259405922673466798">"Рамка фотографии"</string>
-    <string name="details_ms" msgid="940634969189855292">"%1$02d:%2$02d"</string>
-    <string name="details_hms" msgid="3215779248094151255">"%1$d:%2$02d:%3$02d"</string>
-    <string name="movie_view_label" msgid="3697303290960009886">"Фильмы"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Загрузка видео…"</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Продолжение просмотра видео"</string>
-    <string name="resume_playing_message" msgid="5184414518126703481">"Продолжить воспроизведение с %s?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Продолжить воспроизведение"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Начать с начала"</string>
-    <string name="camera" msgid="2730811566218090802">"Камера"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Сохранить"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Отменить"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Нажмите лицо, чтобы начать."</string>
-    <string name="saving_image" msgid="7270334453636349407">"Сохранение картинки..."</string>
-    <string name="crop_label" msgid="521114301871349328">"Обрезать фотографию"</string>
-    <string name="running_face_detection" msgid="4094707964259463039">"Подождите..."</string>
-    <string name="set_image" msgid="2331476809308010401">"Установить картинку как"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Установка обоев, подождите..."</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Обои"</string>
-    <string name="details_ok" msgid="6848594369924424312">"ОК"</string>
-    <string name="loading_new" msgid="7893793767294787579">"Загрузка новых альбомов и фотографий"</string>
-    <string name="initializing" msgid="2374228157398540466">"Загрузка"</string>
-    <string name="pick_prompt" msgid="576608096149718121">"Выбрать элемент из коллекции"</string>
-    <string name="no_items" msgid="3117870234034732172">"В вашей коллекции ничего нет."</string>
-    <string name="pick" msgid="7248789132035843128">"Выбрать"</string>
-    <string name="delete" msgid="2839695998251824487">"Удалить"</string>
-    <string name="confirm_delete" msgid="5731757674837098707">"Подтвердить удаление"</string>
-    <string name="cancel" msgid="3637516880917356226">"Отмена"</string>
-    <string name="share" msgid="3619042788254195341">"Отправить"</string>
-    <string name="no_sd_card" msgid="2666880203366429182">"SD-карта извлечена или не вставлена"</string>
-    <string name="more" msgid="1526449516720792387">"Ещё"</string>
-    <string name="select_all" msgid="8623593677101437957">"Выбрать все"</string>
-    <string name="deselect_all" msgid="7397531298370285581">"Снять все выделения"</string>
-    <string name="slideshow" msgid="4355906903247112975">"Слайд-шоу"</string>
-    <string name="menu" msgid="1819649153380636719">"Меню"</string>
-    <string name="details" msgid="8415120088556445230">"Сведения"</string>
-    <string name="album_selected" msgid="3441280740465738452">"альбом выбран"</string>
-    <string name="item_selected" msgid="6137767503817908841">"элемент выбран"</string>
-    <string name="albums_selected" msgid="1815225920157190983">"альб. выбрано"</string>
-    <string name="items_selected" msgid="8548754404879264861">"элем. выбрано"</string>
-    <string name="album" msgid="5198388817734336004">"Альбом"</string>
-    <string name="start" msgid="4316892252528232165">"Начать"</string>
-    <string name="end" msgid="3645506196012005500">"Завершить"</string>
-    <string name="location" msgid="3432705876921618314">"Местоположение"</string>
-    <string name="location_unknown" msgid="6310139243003315255">"Неизвестное местоположение"</string>
-    <string name="title" msgid="7622928349908052569">"Название"</string>
-    <string name="type" msgid="4329478642546287192">"Тип"</string>
-    <string name="taken_on" msgid="3269486910757192479">"Дата создания:"</string>
-    <string name="added_on" msgid="5194321063173381814">"Дата добавления:"</string>
-    <string name="show_on_map" msgid="6157544221201750980">"Показать на карте"</string>
-    <string name="rotate_left" msgid="7412075232752726934">"Повернуть влево"</string>
-    <string name="rotate_right" msgid="7340681085011826618">"Повернуть вправо"</string>
-    <string name="crop" msgid="7970750655414797277">"Обрезать"</string>
-    <string name="set_as" msgid="3636764710790507868">"Установить как"</string>
-    <string name="set_as_wallpaper" msgid="5704970402417438945">"Установить как фоновый рисунок"</string>
-    <string name="item" msgid="636303673288563698">"элемент"</string>
-    <string name="items" msgid="6403254716052150916">"элем."</string>
-    <string name="around" msgid="2223906282110417412">"Возле"</string>
-    <string name="date_unknown" msgid="4277113471036917386">"Дата неизвестна"</string>
-    <string name="video_err" msgid="7917736494827857757">"Не удается воспроизвести видео"</string>
-</resources>
diff --git a/new3d/res/values-sv/strings.xml b/new3d/res/values-sv/strings.xml
deleted file mode 100644
index 34703d2..0000000
--- a/new3d/res/values-sv/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="1928079047368929634">"Galleri"</string>
-  <string-array name="months_abbreviated">
-    <item msgid="9066537518640988368">"jan"</item>
-    <item msgid="4680813504147866612">"feb"</item>
-    <item msgid="1934595560893153574">"mar"</item>
-    <item msgid="9020107212348500338">"apr"</item>
-    <item msgid="5734859077892484949">"maj"</item>
-    <item msgid="8546985030184126468">"jun"</item>
-    <item msgid="3639654472839533748">"jul"</item>
-    <item msgid="8434242278630875235">"aug"</item>
-    <item msgid="8493511009771049442">"sep"</item>
-    <item msgid="685181459001441496">"okt"</item>
-    <item msgid="6662413035764778250">"nov"</item>
-    <item msgid="3784870986696899313">"dec"</item>
-  </string-array>
-    <string name="gadget_title" msgid="259405922673466798">"Bildram"</string>
-    <string name="details_ms" msgid="940634969189855292">"%1$02d:%2$02d"</string>
-    <string name="details_hms" msgid="3215779248094151255">"%1$d:%2$02d:%3$02d"</string>
-    <string name="movie_view_label" msgid="3697303290960009886">"Filmer"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Läser in video…"</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Fortsätt spela videon"</string>
-    <string name="resume_playing_message" msgid="5184414518126703481">"Fortsätt spela upp från %s?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Fortsätt spela upp"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Börja om"</string>
-    <string name="camera" msgid="2730811566218090802">"Kamera"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Spara"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Ignorera"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Peka på ett ansikte när du vill börja."</string>
-    <string name="saving_image" msgid="7270334453636349407">"Sparar bild…"</string>
-    <string name="crop_label" msgid="521114301871349328">"Beskär bild"</string>
-    <string name="running_face_detection" msgid="4094707964259463039">"Vänta…"</string>
-    <string name="set_image" msgid="2331476809308010401">"Använd bild som"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Anger bakgrund, vänta…"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Bakgrund"</string>
-    <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="loading_new" msgid="7893793767294787579">"Läser in nya album och foton"</string>
-    <string name="initializing" msgid="2374228157398540466">"Läser in"</string>
-    <string name="pick_prompt" msgid="576608096149718121">"Välj ett objekt i din samling"</string>
-    <string name="no_items" msgid="3117870234034732172">"Det finns inga objekt i din samling"</string>
-    <string name="pick" msgid="7248789132035843128">"Välj"</string>
-    <string name="delete" msgid="2839695998251824487">"Ta bort"</string>
-    <string name="confirm_delete" msgid="5731757674837098707">"Bekräfta borttagning"</string>
-    <string name="cancel" msgid="3637516880917356226">"Avbryt"</string>
-    <string name="share" msgid="3619042788254195341">"Dela"</string>
-    <string name="no_sd_card" msgid="2666880203366429182">"SD-kortet är inte initierat eller saknas"</string>
-    <string name="more" msgid="1526449516720792387">"Mer"</string>
-    <string name="select_all" msgid="8623593677101437957">"Markera alla"</string>
-    <string name="deselect_all" msgid="7397531298370285581">"Avmarkera alla"</string>
-    <string name="slideshow" msgid="4355906903247112975">"Bildspel"</string>
-    <string name="menu" msgid="1819649153380636719">"Meny"</string>
-    <string name="details" msgid="8415120088556445230">"Information"</string>
-    <string name="album_selected" msgid="3441280740465738452">"album har markerats"</string>
-    <string name="item_selected" msgid="6137767503817908841">"objekt har markerats"</string>
-    <string name="albums_selected" msgid="1815225920157190983">"album har markerats"</string>
-    <string name="items_selected" msgid="8548754404879264861">"objekt har markerats"</string>
-    <string name="album" msgid="5198388817734336004">"Album"</string>
-    <string name="start" msgid="4316892252528232165">"Start"</string>
-    <string name="end" msgid="3645506196012005500">"Avsluta"</string>
-    <string name="location" msgid="3432705876921618314">"Plats"</string>
-    <string name="location_unknown" msgid="6310139243003315255">"Okänd plats"</string>
-    <string name="title" msgid="7622928349908052569">"Titel"</string>
-    <string name="type" msgid="4329478642546287192">"Typ"</string>
-    <string name="taken_on" msgid="3269486910757192479">"Skapat den"</string>
-    <string name="added_on" msgid="5194321063173381814">"Tillagt den"</string>
-    <string name="show_on_map" msgid="6157544221201750980">"Visa på karta"</string>
-    <string name="rotate_left" msgid="7412075232752726934">"Rotera åt vänster"</string>
-    <string name="rotate_right" msgid="7340681085011826618">"Rotera åt höger"</string>
-    <string name="crop" msgid="7970750655414797277">"Beskär"</string>
-    <string name="set_as" msgid="3636764710790507868">"Använd som"</string>
-    <string name="set_as_wallpaper" msgid="5704970402417438945">"Använd som bakgrund"</string>
-    <string name="item" msgid="636303673288563698">"objekt"</string>
-    <string name="items" msgid="6403254716052150916">"objekt"</string>
-    <string name="around" msgid="2223906282110417412">"Vid"</string>
-    <string name="date_unknown" msgid="4277113471036917386">"Datum okänt"</string>
-    <string name="video_err" msgid="7917736494827857757">"Det gick inte att spela videon"</string>
-</resources>
diff --git a/new3d/res/values-tr/strings.xml b/new3d/res/values-tr/strings.xml
deleted file mode 100644
index 6ec9690..0000000
--- a/new3d/res/values-tr/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="1928079047368929634">"Galeri"</string>
-  <string-array name="months_abbreviated">
-    <item msgid="9066537518640988368">"Oca"</item>
-    <item msgid="4680813504147866612">"Şub"</item>
-    <item msgid="1934595560893153574">"Mar"</item>
-    <item msgid="9020107212348500338">"Nis"</item>
-    <item msgid="5734859077892484949">"May"</item>
-    <item msgid="8546985030184126468">"Haz"</item>
-    <item msgid="3639654472839533748">"Tem"</item>
-    <item msgid="8434242278630875235">"Ağu"</item>
-    <item msgid="8493511009771049442">"Eyl"</item>
-    <item msgid="685181459001441496">"Eki"</item>
-    <item msgid="6662413035764778250">"Kas"</item>
-    <item msgid="3784870986696899313">"Ara"</item>
-  </string-array>
-    <string name="gadget_title" msgid="259405922673466798">"Resim çerçevesi"</string>
-    <string name="details_ms" msgid="940634969189855292">"%1$02d:%2$02d"</string>
-    <string name="details_hms" msgid="3215779248094151255">"%1$d:%2$02d:%3$02d"</string>
-    <string name="movie_view_label" msgid="3697303290960009886">"Filmler"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Video yükleniyor..."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Videoyu sürdür"</string>
-    <string name="resume_playing_message" msgid="5184414518126703481">"Yürütme şuradan devam ettirilsin mi: %s ?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Yürütmeyi sürdür"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Başlat"</string>
-    <string name="camera" msgid="2730811566218090802">"Kamera"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Kaydet"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Sil"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Başlamak için bir yüze hafifçe dokunun"</string>
-    <string name="saving_image" msgid="7270334453636349407">"Resim kaydediliyor..."</string>
-    <string name="crop_label" msgid="521114301871349328">"Resmi kırp"</string>
-    <string name="running_face_detection" msgid="4094707964259463039">"Lütfen bekleyin..."</string>
-    <string name="set_image" msgid="2331476809308010401">"Resmi şu şekilde ayarla:"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Duvar kağıdı ayarlanıyor, lütfen bekleyin..."</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Duvar Kağıdı"</string>
-    <string name="details_ok" msgid="6848594369924424312">"Tamam"</string>
-    <string name="loading_new" msgid="7893793767294787579">"Yeni albümler ve fotoğraflar yükleniyor"</string>
-    <string name="initializing" msgid="2374228157398540466">"Yükleniyor"</string>
-    <string name="pick_prompt" msgid="576608096149718121">"Koleksiyonunuzdan bir öğe seçin"</string>
-    <string name="no_items" msgid="3117870234034732172">"Koleksiyonunuzda hiçbir öğe bulunmuyor"</string>
-    <string name="pick" msgid="7248789132035843128">"Seç"</string>
-    <string name="delete" msgid="2839695998251824487">"Sil"</string>
-    <string name="confirm_delete" msgid="5731757674837098707">"Silme İşlemini Onayla"</string>
-    <string name="cancel" msgid="3637516880917356226">"İptal"</string>
-    <string name="share" msgid="3619042788254195341">"Paylaş"</string>
-    <string name="no_sd_card" msgid="2666880203366429182">"SD Kart çıkarılmış veya mevcut değil"</string>
-    <string name="more" msgid="1526449516720792387">"Diğer"</string>
-    <string name="select_all" msgid="8623593677101437957">"Tümünü Seç"</string>
-    <string name="deselect_all" msgid="7397531298370285581">"Tüm Seçimleri Kaldır"</string>
-    <string name="slideshow" msgid="4355906903247112975">"Slayt Gösterisi"</string>
-    <string name="menu" msgid="1819649153380636719">"Menü"</string>
-    <string name="details" msgid="8415120088556445230">"Ayrıntılar"</string>
-    <string name="album_selected" msgid="3441280740465738452">"albüm seçildi"</string>
-    <string name="item_selected" msgid="6137767503817908841">"öğe seçildi"</string>
-    <string name="albums_selected" msgid="1815225920157190983">"albüm seçildi"</string>
-    <string name="items_selected" msgid="8548754404879264861">"öğe seçildi"</string>
-    <string name="album" msgid="5198388817734336004">"Albüm"</string>
-    <string name="start" msgid="4316892252528232165">"Başlat"</string>
-    <string name="end" msgid="3645506196012005500">"Sonlandır"</string>
-    <string name="location" msgid="3432705876921618314">"Konum"</string>
-    <string name="location_unknown" msgid="6310139243003315255">"Bilinmeyen konum"</string>
-    <string name="title" msgid="7622928349908052569">"Başlık"</string>
-    <string name="type" msgid="4329478642546287192">"Tür"</string>
-    <string name="taken_on" msgid="3269486910757192479">"Çekim zamanı:"</string>
-    <string name="added_on" msgid="5194321063173381814">"Şu tarihte eklendi:"</string>
-    <string name="show_on_map" msgid="6157544221201750980">"Haritada göster"</string>
-    <string name="rotate_left" msgid="7412075232752726934">"Sola Döndür"</string>
-    <string name="rotate_right" msgid="7340681085011826618">"Sağa Döndür"</string>
-    <string name="crop" msgid="7970750655414797277">"Kırp"</string>
-    <string name="set_as" msgid="3636764710790507868">"Şu şekilde ayarla:"</string>
-    <string name="set_as_wallpaper" msgid="5704970402417438945">"Duvar kağıdı olarak ayarla"</string>
-    <string name="item" msgid="636303673288563698">"öğe"</string>
-    <string name="items" msgid="6403254716052150916">"öğe"</string>
-    <string name="around" msgid="2223906282110417412">"Şu civarda:"</string>
-    <string name="date_unknown" msgid="4277113471036917386">"Tarih bilinmiyor"</string>
-    <string name="video_err" msgid="7917736494827857757">"Video oynatılamıyor"</string>
-</resources>
diff --git a/new3d/res/values-zh-rCN/strings.xml b/new3d/res/values-zh-rCN/strings.xml
deleted file mode 100644
index 37d0dab..0000000
--- a/new3d/res/values-zh-rCN/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="1928079047368929634">"图库"</string>
-  <string-array name="months_abbreviated">
-    <item msgid="9066537518640988368">"1 月"</item>
-    <item msgid="4680813504147866612">"2 月"</item>
-    <item msgid="1934595560893153574">"3 月"</item>
-    <item msgid="9020107212348500338">"4 月"</item>
-    <item msgid="5734859077892484949">"5 月"</item>
-    <item msgid="8546985030184126468">"6 月"</item>
-    <item msgid="3639654472839533748">"7 月"</item>
-    <item msgid="8434242278630875235">"8 月"</item>
-    <item msgid="8493511009771049442">"9 月"</item>
-    <item msgid="685181459001441496">"10 月"</item>
-    <item msgid="6662413035764778250">"11 月"</item>
-    <item msgid="3784870986696899313">"12 月"</item>
-  </string-array>
-    <string name="gadget_title" msgid="259405922673466798">"相框"</string>
-    <string name="details_ms" msgid="940634969189855292">"%1$02d:%2$02d"</string>
-    <string name="details_hms" msgid="3215779248094151255">"%1$d:%2$02d:%3$02d"</string>
-    <string name="movie_view_label" msgid="3697303290960009886">"电影"</string>
-    <string name="loading_video" msgid="4013492720121891585">"正在载入视频..."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"继续播放视频"</string>
-    <string name="resume_playing_message" msgid="5184414518126703481">"从 %s 开始继续播放?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"继续播放"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"重新开始"</string>
-    <string name="camera" msgid="2730811566218090802">"相机"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"保存"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"舍弃"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"轻点一张脸开始裁剪。"</string>
-    <string name="saving_image" msgid="7270334453636349407">"正在保存照片..."</string>
-    <string name="crop_label" msgid="521114301871349328">"修剪照片"</string>
-    <string name="running_face_detection" msgid="4094707964259463039">"请稍候..."</string>
-    <string name="set_image" msgid="2331476809308010401">"将照片设置为"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"正在设置壁纸,请稍候..."</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"壁纸"</string>
-    <string name="details_ok" msgid="6848594369924424312">"确定"</string>
-    <string name="loading_new" msgid="7893793767294787579">"正在载入新相册和新照片"</string>
-    <string name="initializing" msgid="2374228157398540466">"正在载入"</string>
-    <string name="pick_prompt" msgid="576608096149718121">"从您的收藏中挑选一个"</string>
-    <string name="no_items" msgid="3117870234034732172">"您还没有照片或视频。"</string>
-    <string name="pick" msgid="7248789132035843128">"精选"</string>
-    <string name="delete" msgid="2839695998251824487">"删除"</string>
-    <string name="confirm_delete" msgid="5731757674837098707">"确认删除"</string>
-    <string name="cancel" msgid="3637516880917356226">"取消"</string>
-    <string name="share" msgid="3619042788254195341">"分享"</string>
-    <string name="no_sd_card" msgid="2666880203366429182">"SD 卡已卸载或不存在"</string>
-    <string name="more" msgid="1526449516720792387">"更多"</string>
-    <string name="select_all" msgid="8623593677101437957">"全选"</string>
-    <string name="deselect_all" msgid="7397531298370285581">"取消全选"</string>
-    <string name="slideshow" msgid="4355906903247112975">"播放幻灯片"</string>
-    <string name="menu" msgid="1819649153380636719">"菜单"</string>
-    <string name="details" msgid="8415120088556445230">"详细信息"</string>
-    <string name="album_selected" msgid="3441280740465738452">"本相册已选定"</string>
-    <string name="item_selected" msgid="6137767503817908841">"项已选定"</string>
-    <string name="albums_selected" msgid="1815225920157190983">"本相册已选定"</string>
-    <string name="items_selected" msgid="8548754404879264861">"项已选定"</string>
-    <string name="album" msgid="5198388817734336004">"相册"</string>
-    <string name="start" msgid="4316892252528232165">"启动"</string>
-    <string name="end" msgid="3645506196012005500">"结束"</string>
-    <string name="location" msgid="3432705876921618314">"地点"</string>
-    <string name="location_unknown" msgid="6310139243003315255">"未知地点"</string>
-    <string name="title" msgid="7622928349908052569">"标题"</string>
-    <string name="type" msgid="4329478642546287192">"类型"</string>
-    <string name="taken_on" msgid="3269486910757192479">"拍摄日期"</string>
-    <string name="added_on" msgid="5194321063173381814">"添加日期:"</string>
-    <string name="show_on_map" msgid="6157544221201750980">"显示在地图上"</string>
-    <string name="rotate_left" msgid="7412075232752726934">"向左旋转"</string>
-    <string name="rotate_right" msgid="7340681085011826618">"向右旋转"</string>
-    <string name="crop" msgid="7970750655414797277">"修剪"</string>
-    <string name="set_as" msgid="3636764710790507868">"设置为"</string>
-    <string name="set_as_wallpaper" msgid="5704970402417438945">"设置为壁纸"</string>
-    <string name="item" msgid="636303673288563698">"项"</string>
-    <string name="items" msgid="6403254716052150916">"项"</string>
-    <string name="around" msgid="2223906282110417412">"大概位置:"</string>
-    <string name="date_unknown" msgid="4277113471036917386">"日期未知"</string>
-    <string name="video_err" msgid="7917736494827857757">"无法播放视频"</string>
-</resources>
diff --git a/new3d/res/values-zh-rTW/strings.xml b/new3d/res/values-zh-rTW/strings.xml
deleted file mode 100644
index 299e8e0..0000000
--- a/new3d/res/values-zh-rTW/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="1928079047368929634">"圖片庫"</string>
-  <string-array name="months_abbreviated">
-    <item msgid="9066537518640988368">"1 月"</item>
-    <item msgid="4680813504147866612">"2 月"</item>
-    <item msgid="1934595560893153574">"3 月"</item>
-    <item msgid="9020107212348500338">"4 月"</item>
-    <item msgid="5734859077892484949">"5 月"</item>
-    <item msgid="8546985030184126468">"6 月"</item>
-    <item msgid="3639654472839533748">"7 月"</item>
-    <item msgid="8434242278630875235">"8 月"</item>
-    <item msgid="8493511009771049442">"9 月"</item>
-    <item msgid="685181459001441496">"10 月"</item>
-    <item msgid="6662413035764778250">"11 月"</item>
-    <item msgid="3784870986696899313">"12 月"</item>
-  </string-array>
-    <string name="gadget_title" msgid="259405922673466798">"相框"</string>
-    <string name="details_ms" msgid="940634969189855292">"%1$02d:%2$02d"</string>
-    <string name="details_hms" msgid="3215779248094151255">"%1$d:%2$02d:%3$02d"</string>
-    <string name="movie_view_label" msgid="3697303290960009886">"電影"</string>
-    <string name="loading_video" msgid="4013492720121891585">"正在載入影片…"</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"繼續播放影片"</string>
-    <string name="resume_playing_message" msgid="5184414518126703481">"要從 %s 繼續播放嗎?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"繼續播放"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"重新開始"</string>
-    <string name="camera" msgid="2730811566218090802">"相機"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"儲存"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"捨棄"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"輕觸所需的臉孔開始裁剪。"</string>
-    <string name="saving_image" msgid="7270334453636349407">"正在儲存相片..."</string>
-    <string name="crop_label" msgid="521114301871349328">"裁剪相片"</string>
-    <string name="running_face_detection" msgid="4094707964259463039">"請稍候..."</string>
-    <string name="set_image" msgid="2331476809308010401">"將相片設為"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"設定桌布中,請稍候…"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"桌布"</string>
-    <string name="details_ok" msgid="6848594369924424312">"確定"</string>
-    <string name="loading_new" msgid="7893793767294787579">"正在載入新相簿和相片"</string>
-    <string name="initializing" msgid="2374228157398540466">"載入中"</string>
-    <string name="pick_prompt" msgid="576608096149718121">"從圖片集中挑選一個項目"</string>
-    <string name="no_items" msgid="3117870234034732172">"您的圖片集裡並沒有任何項目"</string>
-    <string name="pick" msgid="7248789132035843128">"挑選"</string>
-    <string name="delete" msgid="2839695998251824487">"刪除"</string>
-    <string name="confirm_delete" msgid="5731757674837098707">"確認刪除"</string>
-    <string name="cancel" msgid="3637516880917356226">"取消"</string>
-    <string name="share" msgid="3619042788254195341">"分享"</string>
-    <string name="no_sd_card" msgid="2666880203366429182">"已取出或未插入 SD 卡"</string>
-    <string name="more" msgid="1526449516720792387">"更多"</string>
-    <string name="select_all" msgid="8623593677101437957">"全選"</string>
-    <string name="deselect_all" msgid="7397531298370285581">"取消選取全部"</string>
-    <string name="slideshow" msgid="4355906903247112975">"投影播放"</string>
-    <string name="menu" msgid="1819649153380636719">"選單"</string>
-    <string name="details" msgid="8415120088556445230">"詳細資料"</string>
-    <string name="album_selected" msgid="3441280740465738452">"本相簿已選取"</string>
-    <string name="item_selected" msgid="6137767503817908841">"個項目已選取"</string>
-    <string name="albums_selected" msgid="1815225920157190983">"本相簿已選取"</string>
-    <string name="items_selected" msgid="8548754404879264861">"個項目已選取"</string>
-    <string name="album" msgid="5198388817734336004">"相簿"</string>
-    <string name="start" msgid="4316892252528232165">"開始"</string>
-    <string name="end" msgid="3645506196012005500">"結束"</string>
-    <string name="location" msgid="3432705876921618314">"地點"</string>
-    <string name="location_unknown" msgid="6310139243003315255">"未知地點"</string>
-    <string name="title" msgid="7622928349908052569">"標題"</string>
-    <string name="type" msgid="4329478642546287192">"類型"</string>
-    <string name="taken_on" msgid="3269486910757192479">"拍攝時間"</string>
-    <string name="added_on" msgid="5194321063173381814">"新增日期:"</string>
-    <string name="show_on_map" msgid="6157544221201750980">"在地圖上顯示"</string>
-    <string name="rotate_left" msgid="7412075232752726934">"向左旋轉"</string>
-    <string name="rotate_right" msgid="7340681085011826618">"向右旋轉"</string>
-    <string name="crop" msgid="7970750655414797277">"裁剪"</string>
-    <string name="set_as" msgid="3636764710790507868">"設為"</string>
-    <string name="set_as_wallpaper" msgid="5704970402417438945">"設為桌布"</string>
-    <string name="item" msgid="636303673288563698">"個項目"</string>
-    <string name="items" msgid="6403254716052150916">"個項目"</string>
-    <string name="around" msgid="2223906282110417412">"靠近"</string>
-    <string name="date_unknown" msgid="4277113471036917386">"未知日期"</string>
-    <string name="video_err" msgid="7917736494827857757">"無法播放影片"</string>
-</resources>
diff --git a/new3d/res/values/strings.xml b/new3d/res/values/strings.xml
deleted file mode 100644
index e6169bc..0000000
--- a/new3d/res/values/strings.xml
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 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">Gallery</string>
-	<string-array name="months_abbreviated">
-		<item>Jan</item>
-		<item>Feb</item>
-		<item>Mar</item>
-		<item>Apr</item>
-		<item>May</item>
-		<item>Jun</item>
-		<item>Jul</item>
-		<item>Aug</item>
-		<item>Sep</item>
-		<item>Oct</item>
-		<item>Nov</item>
-		<item>Dec</item>
-	</string-array>
-	<!-- Title for picture frame gadget to show in list of all available gadgets -->
-    <string name="gadget_title">Picture frame</string>
-
-	<!-- Used to format short video duration in Details dialog. minutes:seconds e.g. 00:30 -->
-    <string name="details_ms">%1$02d:%2$02d</string>
-    <!-- Used to format video duration in Details dialog. hours:minutes:seconds e.g. 0:21:30 -->
-    <string name="details_hms">%1$d:%2$02d:%3$02d</string>
-    <!-- Activity label. This might show up in the activity-picker -->
-    <string name="movie_view_label">Movies</string>
-    <!-- shown in the video player view while the video is being loaded, before it starts playing -->
-    <string name="loading_video">Loading video\u2026</string>
-    <!-- Movie View Resume Playing dialog title -->
-    <string name="resume_playing_title">Resume video</string>
-
-    <!-- Movie View Start Playing dialog title -->
-    <string name="resume_playing_message">Resume playing from %s ?</string>
-    <!-- Movie View Start Playing button "Resume from bookmark" -->
-    <string name="resume_playing_resume">Resume playing</string>
-
-    <!-- Movie View Start Playing button "Beginning" -->
-    <string name="resume_playing_restart">Start over</string>
-	<string name="camera">Camera</string>
-
-	<!-- Button indicating that the cropped image should be saved -->
-	<string name="crop_save_text">Save</string>
-	<!-- Button indicating that the cropped image should be reverted back to the original -->
-	<string name="crop_discard_text">Discard</string>
-	<!-- Hint that appears when cropping an image with more than one face -->
-	<string name="multiface_crop_help">Tap a face to begin.</string>
-	<!-- Toast/alert that the image is being saved to the SD card -->
-	<string name="saving_image">Saving picture\u2026</string>
-	<!-- menu pick: crop the currently selected image -->
-	<string name="crop_label">Crop picture</string>
-	<!-- Toast/alert that the face detection is being run -->
-	<string name="running_face_detection">Please wait\u2026</string>
-
-	<!-- Displayed in the title of the dialog for things to do with a picture
-		 that is to be "set as" (e.g. set as contact photo or set as wallpaper) -->
-	<string name="set_image">Set picture as</string>
-	<!-- Toast/alert after saving wallpaper -->
-	<string name="wallpaper">Setting wallpaper, please wait\u2026</string>
-    <string name="camera_setas_wallpaper">Wallpaper</string>
-
-    <!-- Details dialog "OK" button. Dismisses dialog. -->
-    <string name="details_ok">OK</string>
-    <string name="loading_new">Loading new albums and photos</string>
-    <string name="initializing">Loading</string>
-    <string name="pick_prompt">Pick an item from your collection</string>
-    <string name="no_items">There are no items in your collection</string>
-    <string name="pick">Pick</string>
-    <string name="delete">Delete</string>
-    <string name="confirm_delete">Confirm Delete</string>
-    <string name="cancel">Cancel</string>
-    <string name="share">Share</string>
-    <string name="no_sd_card">SD Card unmounted or not present</string>
-
-	<!-- String indicating more actions are available -->
-    <string name="more">More</string>
-    <string name="select_all">Select All</string>
-    <string name="deselect_all">Deselect All</string>
-    <string name="slideshow">Slideshow</string>
-
-    <string name="menu">Menu</string>
-    <string name="details">Details</string>
-
-    <!-- String appended at the end depending upon what is selected eg. 1 album selected -->
-    <string name="album_selected">album selected</string>
-    <string name="item_selected">item selected</string>
-    <string name="albums_selected">albums selected</string>
-    <string name="items_selected">items selected</string>
-
-    <string name="album">Album</string>
-    <string name="start">Start</string>
-    <string name="end">End</string>
-    <string name="location">Location</string>
-    <string name="location_unknown">Unknown location</string>
-    <string name="title">Title</string>
-    <string name="type">Type</string>
-
-    <!-- String indicating timestamp of photo or video -->
-    <string name="taken_on">Taken on</string>
-    <string name="added_on">Added on</string>
-    <string name="show_on_map">Show on map</string>
-    <string name="rotate_left">Rotate Left</string>
-    <string name="rotate_right">Rotate Right</string>
-    <string name="crop">Crop</string>
-    <string name="set_as">Set as</string>
-    <string name="set_as_wallpaper">Set as wallpaper</string>
-    <string name="item">item</string>
-    <string name="items">items</string>
-
-    <!-- String indicating an approximate location eg. Around Palo Alto, CA -->
-    <string name="around">Around</string>
-    <string name="date_unknown">Date unknown</string>
-    <string name="video_err">Unable to play video</string>
-</resources>
diff --git a/new3d/res/xml/appwidget_info.xml b/new3d/res/xml/appwidget_info.xml
deleted file mode 100644
index 60c3586..0000000
--- a/new3d/res/xml/appwidget_info.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
-    android:minWidth="146dip"
-    android:minHeight="146dip"
-    android:updatePeriodMillis="0"
-    android:initialLayout="@layout/photo_frame"
-    android:configure="com.android.gallery3d.gadget.PhotoAppWidgetConfigure"/>
diff --git a/new3d/res/xml/syncadapter.xml b/new3d/res/xml/syncadapter.xml
deleted file mode 100644
index d60bd5a..0000000
--- a/new3d/res/xml/syncadapter.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/**
- * Copyright (c) 2009, 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.
- */
--->
-
-<!-- The attributes in this XML file provide configuration information -->
-<!-- for the SyncAdapter. -->
-
-<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
-    android:contentAuthority="com.android.gallery3d.picasa.contentprovider"
-    android:accountType="com.google"
-/>
diff --git a/new3d/src/com/android/gallery3d/anim/AlphaAnimation.java b/new3d/src/com/android/gallery3d/anim/AlphaAnimation.java
deleted file mode 100644
index f88b8bb..0000000
--- a/new3d/src/com/android/gallery3d/anim/AlphaAnimation.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-
-package com.android.gallery3d.anim;
-
-import com.android.gallery3d.ui.GLCanvas;
-import com.android.gallery3d.util.Utils;
-
-public class AlphaAnimation extends CanvasAnimation {
-    private final float mStartAlpha;
-    private final float mEndAlpha;
-    private float mCurrentAlpha;
-
-    public AlphaAnimation(float from, float to) {
-        mStartAlpha = from;
-        mEndAlpha = to;
-        mCurrentAlpha = from;
-    }
-
-    @Override
-    public void apply(GLCanvas canvas) {
-        canvas.multiplyAlpha(mCurrentAlpha);
-    }
-
-    @Override
-    public int getCanvasSaveFlags() {
-        return GLCanvas.SAVE_FLAG_ALPHA;
-    }
-
-    @Override
-    protected void onCalculate(float progress) {
-        mCurrentAlpha = Utils.clamp(mStartAlpha
-                + (mEndAlpha - mStartAlpha) * progress, 0f, 1f);
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/anim/Animation.java b/new3d/src/com/android/gallery3d/anim/Animation.java
deleted file mode 100644
index a614971..0000000
--- a/new3d/src/com/android/gallery3d/anim/Animation.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.android.gallery3d.anim;
-
-import android.view.animation.Interpolator;
-
-import com.android.gallery3d.util.Utils;
-
-// Animation calculates a value according to the current input time.
-//
-// 1. First we need to use setDuration(int) to set the duration of the
-//    animation. The duration is in milliseconds.
-// 2. Then we should call start(). The actual start time is the first value
-//    passed to calculate(long).
-// 3. Each time we want to get an animation value, we call
-//    calculate(long currentTimeMillis) to ask the Animation to calculate it.
-//    The parameter passed to calculate(long) should be nonnegative.
-// 4. Use get() to get that value.
-//
-// In step 3, onCalculate(float progress) is called so subclasses can calculate
-// the value according to progress (progress is a value in [0,1]).
-//
-// Before onCalculate(float) is called, There is an optional interpolator which
-// can change the progress value. The interpolator can be set by
-// setInterpolator(Interpolator). If the interpolator is used, the value passed
-// to onCalculate may be (for example, the overshoot effect).
-//
-// The isActive() method returns true after the animation start() is called and
-// before calculate is passed a value which reaches the duration of the
-// animation.
-//
-// The start() method can be called again to restart the Animation.
-//
-abstract public class Animation {
-    private static final long ANIMATION_START = -1;
-    private static final long NO_ANIMATION = -2;
-
-    private long mStartTime = NO_ANIMATION;
-    private int mDuration;
-    private Interpolator mInterpolator;
-
-    public void setInterpolator(Interpolator interpolator) {
-        mInterpolator = interpolator;
-    }
-
-    public void setDuration(int duration) {
-        mDuration = duration;
-    }
-
-    public void start() {
-        mStartTime = ANIMATION_START;
-    }
-
-    public void setStartTime(long time) {
-        mStartTime = time;
-    }
-
-    public boolean isActive() {
-        return mStartTime != NO_ANIMATION;
-    }
-
-    public boolean calculate(long currentTimeMillis) {
-        if (mStartTime == NO_ANIMATION) return false;
-        if (mStartTime == ANIMATION_START) mStartTime = currentTimeMillis;
-        int elapse = (int) (currentTimeMillis - mStartTime);
-        float x = Utils.clamp((float) elapse / mDuration, 0f, 1f);
-        onCalculate(mInterpolator != null
-                ? mInterpolator.getInterpolation(x)
-                : x);
-        if (elapse >= mDuration) {
-            mStartTime = NO_ANIMATION;
-            return false;
-        } else {
-            return true;
-        }
-    }
-
-    abstract protected void onCalculate(float progress);
-}
diff --git a/new3d/src/com/android/gallery3d/anim/AnimationSet.java b/new3d/src/com/android/gallery3d/anim/AnimationSet.java
deleted file mode 100644
index c83efaa..0000000
--- a/new3d/src/com/android/gallery3d/anim/AnimationSet.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-
-package com.android.gallery3d.anim;
-
-import com.android.gallery3d.ui.GLCanvas;
-
-import java.util.ArrayList;
-
-public class AnimationSet extends CanvasAnimation {
-
-    private final ArrayList<CanvasAnimation> mAnimations =
-            new ArrayList<CanvasAnimation>();
-    private int mSaveFlags = 0;
-
-
-    public void addAnimation(CanvasAnimation anim) {
-        mAnimations.add(anim);
-        mSaveFlags |= anim.getCanvasSaveFlags();
-    }
-
-    @Override
-    public void apply(GLCanvas canvas) {
-        for (int i = 0, n = mAnimations.size(); i < n; i++) {
-            mAnimations.get(i).apply(canvas);
-        }
-    }
-
-    @Override
-    public int getCanvasSaveFlags() {
-        return mSaveFlags;
-    }
-
-    @Override
-    protected void onCalculate(float progress) {
-        // DO NOTHING
-    }
-
-    @Override
-    public boolean calculate(long currentTimeMillis) {
-        boolean more = false;
-        for (CanvasAnimation anim : mAnimations) {
-            more |= anim.calculate(currentTimeMillis);
-        }
-        return more;
-    }
-
-    @Override
-    public void start() {
-        for (CanvasAnimation anim : mAnimations) {
-            anim.start();
-        }
-    }
-
-    @Override
-    public boolean isActive() {
-        for (CanvasAnimation anim : mAnimations) {
-            if (anim.isActive()) return true;
-        }
-        return false;
-    }
-
-}
diff --git a/new3d/src/com/android/gallery3d/anim/CanvasAnimation.java b/new3d/src/com/android/gallery3d/anim/CanvasAnimation.java
deleted file mode 100644
index de24ae4..0000000
--- a/new3d/src/com/android/gallery3d/anim/CanvasAnimation.java
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-
-package com.android.gallery3d.anim;
-
-import com.android.gallery3d.ui.GLCanvas;
-
-public abstract class CanvasAnimation extends Animation {
-
-    public abstract int getCanvasSaveFlags();
-    public abstract void apply(GLCanvas canvas);
-}
diff --git a/new3d/src/com/android/gallery3d/anim/FloatAnimation.java b/new3d/src/com/android/gallery3d/anim/FloatAnimation.java
deleted file mode 100644
index ef177c9..0000000
--- a/new3d/src/com/android/gallery3d/anim/FloatAnimation.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.android.gallery3d.anim;
-
-public class FloatAnimation extends Animation {
-
-    private final float mFrom;
-    private final float mTo;
-    private float mCurrent;
-
-    public FloatAnimation(float from, float to, int duration) {
-        mFrom = from;
-        mTo = to;
-        mCurrent = from;
-        setDuration(duration);
-    }
-
-    @Override
-    protected void onCalculate(float progress) {
-        mCurrent = mFrom + (mTo - mFrom) * progress;
-    }
-
-    public float get() {
-        return mCurrent;
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/anim/IntAnimation.java b/new3d/src/com/android/gallery3d/anim/IntAnimation.java
deleted file mode 100644
index 9bdd5fe..0000000
--- a/new3d/src/com/android/gallery3d/anim/IntAnimation.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.android.gallery3d.anim;
-
-public class IntAnimation extends Animation {
-
-    private final int mFrom;
-    private final int mTo;
-    private int mCurrent;
-
-    public IntAnimation(int from, int to, int duration) {
-        mFrom = from;
-        mTo = to;
-        setDuration(duration);
-    }
-
-    @Override
-    protected void onCalculate(float progress) {
-        mCurrent = mFrom + (int)((mTo - mFrom) * progress + .5f);
-    }
-
-    public int get() {
-        return mCurrent;
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/anim/ScaleAnimation.java b/new3d/src/com/android/gallery3d/anim/ScaleAnimation.java
deleted file mode 100644
index f065cf7..0000000
--- a/new3d/src/com/android/gallery3d/anim/ScaleAnimation.java
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-
-package com.android.gallery3d.anim;
-
-import com.android.gallery3d.ui.GLCanvas;
-
-public class ScaleAnimation extends CanvasAnimation {
-    private final float mFromX;
-    private final float mFromY;
-    private final float mFromZ;
-    private final float mToX;
-    private final float mToY;
-    private final float mToZ;
-
-    private float mCurrentX;
-    private float mCurrentY;
-    private float mCurrentZ;
-
-    private final float mPivotX;
-    private final float mPivotY;
-    private final float mPivotZ;
-
-    public ScaleAnimation(float fromX, float toX,
-            float fromY, float toY, float pivotX, float pivotY) {
-        this(fromX, toX, fromY, toY, 0, 0, pivotX, pivotY, 0);
-    }
-
-    public ScaleAnimation(float fromX, float toX, float fromY, float toY,
-            float fromZ, float toZ, float px, float py, float pz) {
-        mFromX = fromX;
-        mFromY = fromY;
-        mFromZ = fromZ;
-        mToX = toX;
-        mToY = toY;
-        mToZ = toZ;
-        mPivotX = px;
-        mPivotY = py;
-        mPivotZ = pz;
-    }
-
-    @Override
-    public void apply(GLCanvas canvas) {
-        if (mPivotX != 0 || mPivotY != 0 || mPivotZ != 0)  {
-            canvas.translate(mPivotX, mPivotY, mPivotZ);
-            canvas.scale(mCurrentX, mCurrentY, mCurrentZ);
-            canvas.translate(-mPivotX, -mPivotY, -mPivotZ);
-        } else {
-            canvas.scale(mCurrentX, mCurrentY, mCurrentZ);
-        }
-    }
-
-    @Override
-    public int getCanvasSaveFlags() {
-        return GLCanvas.SAVE_FLAG_MATRIX;
-    }
-
-    @Override
-    protected void onCalculate(float progress) {
-        mCurrentX = mFromX + (mToX - mFromX) * progress;
-        mCurrentY = mFromY + (mToY - mFromY) * progress;
-        mCurrentZ = mFromZ + (mToZ - mFromZ) * progress;
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/app/ActivityState.java b/new3d/src/com/android/gallery3d/app/ActivityState.java
deleted file mode 100644
index b35d637..0000000
--- a/new3d/src/com/android/gallery3d/app/ActivityState.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.app;
-
-import android.os.Bundle;
-
-import com.android.gallery3d.ui.GLView;
-
-abstract public class ActivityState {
-    protected GalleryContext mContext;
-
-    protected ActivityState() {
-    }
-
-    protected void setContentPane(GLView content) {
-        mContext.getGLRoot().setContentPane(content);
-    }
-
-    void setContext(GalleryContext context) {
-        mContext = context;
-    }
-
-    protected void onBackPressed() {
-        mContext.getStateManager().finishState(this);
-    }
-
-    protected void onSaveState(Bundle outState) {
-    }
-
-    protected void onCreate(Bundle data, Bundle storedState){}
-
-    protected void onPause() {}
-
-    protected void onResume() {}
-
-    protected void onDestroy() {}
-}
diff --git a/new3d/src/com/android/gallery3d/app/AlbumDataAdapter.java b/new3d/src/com/android/gallery3d/app/AlbumDataAdapter.java
deleted file mode 100644
index 9417c08..0000000
--- a/new3d/src/com/android/gallery3d/app/AlbumDataAdapter.java
+++ /dev/null
@@ -1,243 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-
-package com.android.gallery3d.app;
-
-import android.os.Handler;
-import android.os.Message;
-
-import com.android.gallery3d.data.MediaItem;
-import com.android.gallery3d.data.MediaSet;
-import com.android.gallery3d.ui.AlbumView;
-import com.android.gallery3d.ui.SynchronizedHandler;
-import com.android.gallery3d.util.Utils;
-
-import java.util.ArrayList;
-
-public class AlbumDataAdapter implements AlbumView.Model {
-    private static final String TAG = "AlbumDataAdapter";
-
-    private static final long RELOAD_DELAY = 100; // 100ms
-
-    private static final int MSG_UPDATE_DATA = 1;
-    private static final int MSG_LOAD_DATA = 2;
-
-    private static final int MIN_LOAD_COUNT = 32;
-    private static final int MAX_LOAD_COUNT = 64;
-
-    // Load the data because the source has been changed
-    private static final int LOAD_SOURCE = 1;
-    // Load the size for initial content
-    private static final int LOAD_SIZE = 2;
-    // Load the data for new content range
-    private static final int LOAD_RANGE = 4;
-
-    private final MediaItem[] mData;
-
-    private int mActiveStart;
-    private int mActiveEnd;
-
-    private int mContentStart;
-    private int mContentEnd;
-
-    private final MediaSet mSource;
-    private final Handler mMainHandler;
-    private final Handler mDataHandler;
-    private int mSize = 0;
-
-    private AlbumView.ModelListener mListener;
-
-    public AlbumDataAdapter(GalleryContext context, MediaSet albumSet, int cacheSize) {
-        albumSet.setContentListener(new MySourceListener());
-
-        mSource = albumSet;
-        mData = new MediaItem[cacheSize];
-
-        mDataHandler = new Handler(context.getDataManager().getDataLooper()) {
-            @Override
-            public void handleMessage(Message message) {
-                Utils.Assert(message.what == MSG_LOAD_DATA);
-                ((ReloadTask) message.obj).loadFromDatabase();
-            }
-        };
-
-        mMainHandler = new SynchronizedHandler(context.getGLRoot()) {
-            @Override
-            public void handleMessage(Message message) {
-                Utils.Assert(message.what == MSG_UPDATE_DATA);
-                ((ReloadTask) message.obj).updateContent();
-            }
-        };
-
-        reloadData(LOAD_SIZE, 0, 0, 0);
-    }
-
-    public MediaItem get(int index) {
-        if (!isActive(index)) {
-            throw new IllegalArgumentException(String.format(
-                    "%s not in (%s, %s)", index, mActiveStart, mActiveEnd));
-        }
-        return mData[index % mData.length];
-    }
-
-    public boolean isActive(int index) {
-        return index >= mActiveStart && index < mActiveEnd;
-    }
-
-    public int size() {
-        return mSize;
-    }
-
-    private void setContentWindow(int contentStart, int contentEnd) {
-        if (contentStart == mContentStart && contentEnd == mContentEnd) return;
-        MediaItem[] data = mData;
-        int length = data.length;
-        if (contentStart >= mContentEnd || mContentStart >= contentEnd) {
-            for (int i = mContentStart, n = mContentEnd; i < n; ++i) {
-                data[i % length] = null;
-            }
-            reloadData(LOAD_RANGE, contentStart, contentEnd, 0);
-        } else {
-            for (int i = mContentStart; i < contentStart; ++i) {
-                data[i % length] = null;
-            }
-            for (int i = contentEnd, n = mContentEnd; i < n; ++i) {
-                data[i % length] = null;
-            }
-            reloadData(LOAD_RANGE, contentStart, mContentStart, 0);
-            reloadData(LOAD_RANGE, mContentEnd, contentEnd, 0);
-        }
-        synchronized (this) {
-            mContentStart = contentStart;
-            mContentEnd = contentEnd;
-        }
-    }
-
-    public void setActiveWindow(int start, int end) {
-        if (start == mActiveStart && end == mActiveEnd) return;
-
-        mActiveStart = start;
-        mActiveEnd = end;
-
-        Utils.Assert(start <= end
-                && end - start <= mData.length && end <= mSize);
-
-        int length = mData.length;
-        mActiveStart = start;
-        mActiveEnd = end;
-
-        // If no data is visible, keep the cache content
-        if (start == end) return;
-
-        int contentStart = Utils.clamp((start + end) / 2 - length / 2,
-                0, Math.max(0, mSize - length));
-        int contentEnd = Math.min(contentStart + length, mSize);
-        if (mContentStart > start || mContentEnd < end
-                || Math.abs(contentStart - mContentStart) > MIN_LOAD_COUNT) {
-            setContentWindow(contentStart, contentEnd);
-        }
-    }
-
-    private void reloadData(int loadBits, int start, int end, long delay) {
-        if (start >= end) loadBits &= ~LOAD_RANGE;
-        if (loadBits != 0) {
-            new ReloadTask(loadBits, start, end).execute(delay);
-        }
-    }
-
-    private class MySourceListener implements MediaSet.MediaSetListener {
-        public void onContentDirty() {
-            reloadData(LOAD_SOURCE, mContentStart, mContentEnd, RELOAD_DELAY);
-        }
-    }
-
-    public void setListener(AlbumView.ModelListener listener) {
-        mListener = listener;
-    }
-
-    // TODO: use only one ReloadTask to update content
-    private class ReloadTask {
-        private int mStart;
-        private int mEnd;
-        private int mLoadBits;
-        private int mUpdateSize = -1;
-        private ArrayList<MediaItem> mUpdateItems;
-
-        public ReloadTask(int loadBits, int start, int end) {
-            mStart = start;
-            mEnd = end;
-            mLoadBits = loadBits;
-        }
-
-        public void execute(long delayed) {
-            mDataHandler.sendMessageDelayed(
-                    mDataHandler.obtainMessage(MSG_LOAD_DATA, this), delayed);
-        }
-
-        public void loadFromDatabase() {
-            int loadBits = mLoadBits;
-
-            if ((loadBits & LOAD_SOURCE) != 0) {
-                if (!mSource.reload()) loadBits &= ~LOAD_SOURCE;
-            }
-
-            if ((loadBits & (LOAD_SOURCE | LOAD_SIZE)) != 0) {
-                mUpdateSize = mSource.getMediaItemCount();
-            }
-
-            if ((loadBits & LOAD_RANGE) != 0) {
-                synchronized (AlbumDataAdapter.this) {
-                    mStart = Math.max(mContentStart, mStart);
-                    mEnd = Math.min(mContentEnd, mEnd);
-                }
-
-                int count = Math.min(MAX_LOAD_COUNT, mEnd - mStart);
-                if (count > 0) {
-                    mUpdateItems = mSource.getMediaItem(mStart, count);
-                } else {
-                    loadBits &= ~LOAD_RANGE;
-                    mUpdateItems = null;
-                }
-            }
-
-            if (loadBits != 0) {
-                mMainHandler.sendMessage(
-                        mMainHandler.obtainMessage(MSG_UPDATE_DATA, this));
-            }
-        }
-
-        public void updateContent() {
-            if (mUpdateSize >= 0 && mSize != mUpdateSize) {
-                mSize = mUpdateSize;
-                if (mListener != null) mListener.onSizeChanged(mSize);
-            }
-            if (mUpdateItems == null) return;
-
-            int start = Math.max(mStart, mContentStart);
-            int end = Math.min(mStart + mUpdateItems.size(), mContentEnd);
-            MediaItem data[] = mData;
-            int size = data.length;
-            int dataIndex = start % size;
-            for (int i = start; i < end; ++i) {
-                MediaItem updateItem = mUpdateItems.get(i - mStart);
-                MediaItem original = data[dataIndex];
-                // TODO: we should implement equals() for MediaItem
-                //       to see if the item has been changed.
-                if (original != updateItem) {
-                    data[dataIndex] = updateItem;
-                    if (mListener != null && i >= mActiveStart && i < mActiveEnd) {
-                        mListener.onWindowContentChanged(i, original, updateItem);
-                    }
-                }
-                if (++dataIndex == size) dataIndex = 0;
-            }
-
-            mStart = Math.max(mContentStart, mStart + mUpdateItems.size());
-            mEnd = Math.min(mEnd, mContentEnd);
-            if (mStart < mEnd && mUpdateItems.size() == MAX_LOAD_COUNT) {
-                mLoadBits &= ~(LOAD_SOURCE | LOAD_SIZE);
-                mDataHandler.sendMessage(
-                        mDataHandler.obtainMessage(MSG_LOAD_DATA, this));
-            }
-        }
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/app/AlbumPage.java b/new3d/src/com/android/gallery3d/app/AlbumPage.java
deleted file mode 100644
index 7285cdc..0000000
--- a/new3d/src/com/android/gallery3d/app/AlbumPage.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.app;
-
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.os.Bundle;
-import android.os.Message;
-
-import com.android.gallery3d.R;
-import com.android.gallery3d.data.MediaSet;
-import com.android.gallery3d.ui.AdaptiveBackground;
-import com.android.gallery3d.ui.AlbumView;
-import com.android.gallery3d.ui.GLView;
-import com.android.gallery3d.ui.HeadUpDisplay;
-import com.android.gallery3d.ui.HudMenu;
-import com.android.gallery3d.ui.SelectionManager;
-import com.android.gallery3d.ui.SlotView;
-import com.android.gallery3d.ui.SynchronizedHandler;
-
-public class AlbumPage extends ActivityState implements SlotView.SlotTapListener {
-    public static final String KEY_BUCKET_INDEX = "keyBucketIndex";
-
-    private static final int CHANGE_BACKGROUND = 1;
-    private static final int MARGIN_HUD_SLOTVIEW = 5;
-    private static final int DATA_CACHE_SIZE = 256;
-
-    private AdaptiveBackground mBackground;
-    private AlbumView mAlbumView;
-    private HudMenu mHudMenu;
-    private HeadUpDisplay mHud;
-    private SynchronizedHandler mHandler;
-    private Bitmap mBgImages[];
-    private int mBgIndex = 0;
-    private int mBucketIndex;
-    private AlbumDataAdapter mAlbumDataAdapter;
-
-    protected SelectionManager mSelectionManager;
-
-    private GLView mRootPane = new GLView() {
-        @Override
-        protected void onLayout(
-                boolean changed, int left, int top, int right, int bottom) {
-            mBackground.layout(0, 0, right - left, bottom - top);
-            mHud.layout(0, 0, right - left, bottom - top);
-
-            int slotViewTop = mHud.getTopBarBottomPosition() + MARGIN_HUD_SLOTVIEW;
-            int slotViewBottom = mHud.getBottomBarTopPosition()
-                    - MARGIN_HUD_SLOTVIEW;
-            mAlbumView.layout(0, slotViewTop, right - left, slotViewBottom);
-        }
-    };
-
-    @Override
-    public void onBackPressed() {
-        if (mSelectionManager.inSelectionMode()) {
-            mSelectionManager.leaveSelectionMode();
-        } else {
-            super.onBackPressed();
-        }
-    }
-
-    public void onSingleTapUp(int slotIndex) {
-        if (!mSelectionManager.inSelectionMode()) {
-            Bundle data = new Bundle();
-            data.putInt(PhotoPage.KEY_SET_INDEX, mBucketIndex);
-            data.putInt(PhotoPage.KEY_PHOTO_INDEX, slotIndex);
-
-            mContext.getStateManager().startState(PhotoPage.class, data);
-        } else {
-            long id = mAlbumDataAdapter.get(slotIndex).getUniqueId();
-            mSelectionManager.toggle(id);
-            mAlbumView.invalidate();
-        }
-    }
-
-    public void onLongTap(int slotIndex) {
-        long id = mAlbumDataAdapter.get(slotIndex).getUniqueId();
-        mSelectionManager.toggle(id);
-        mAlbumView.invalidate();
-    }
-
-    @Override
-    public void onCreate(Bundle data, Bundle restoreState) {
-        initializeViews();
-        intializeData(data);
-
-        mHandler = new SynchronizedHandler(mContext.getGLRoot()) {
-            @Override
-            public void handleMessage(Message message) {
-                switch (message.what) {
-                    case CHANGE_BACKGROUND:
-                        changeBackground();
-                        mHandler.sendEmptyMessageDelayed(
-                                CHANGE_BACKGROUND, 3000);
-                        break;
-                }
-            }
-        };
-    }
-
-    @Override
-    public void onPause() {
-        mHandler.removeMessages(CHANGE_BACKGROUND);
-        mHudMenu.onPause();
-    }
-
-    private void initializeViews() {
-        mBackground = new AdaptiveBackground();
-        mRootPane.addComponent(mBackground);
-
-        mSelectionManager = new SelectionManager(mContext, false);
-        mAlbumView = new AlbumView(mContext, mSelectionManager);
-        mRootPane.addComponent(mAlbumView);
-        mHud = new HeadUpDisplay(mContext.getAndroidContext());
-        mHudMenu = new HudMenu(mContext, mSelectionManager);
-        mHud.setMenu(mHudMenu);
-        mRootPane.addComponent(mHud);
-        mAlbumView.setSlotTapListener(this);
-
-        loadBackgroundBitmap(R.drawable.square,
-                R.drawable.potrait, R.drawable.landscape);
-        mBackground.setImage(mBgImages[mBgIndex]);
-    }
-
-    private void intializeData(Bundle data) {
-        mBucketIndex = data.getInt(KEY_BUCKET_INDEX);
-        MediaSet mediaSet = mContext.getDataManager()
-                .getRootSet().getSubMediaSet(mBucketIndex);
-        mSelectionManager.setSourceMediaSet(mediaSet);
-        mAlbumDataAdapter =
-                new AlbumDataAdapter(mContext, mediaSet, DATA_CACHE_SIZE);
-        mAlbumView.setModel(mAlbumDataAdapter);
-    }
-
-    private void changeBackground() {
-        mBackground.setImage(mBgImages[mBgIndex]);
-        if (++mBgIndex == mBgImages.length) mBgIndex = 0;
-    }
-
-    private void loadBackgroundBitmap(int ... ids) {
-        BitmapFactory.Options options = new BitmapFactory.Options();
-        options.inPreferredConfig = Bitmap.Config.RGB_565;
-        mBgImages = new Bitmap[ids.length];
-        Resources res = mContext.getResources();
-        for (int i = 0, n = ids.length; i < n; ++i) {
-            Bitmap bitmap = BitmapFactory.decodeResource(res, ids[i], options);
-            mBgImages[i] = mBackground.getAdaptiveBitmap(bitmap);
-            bitmap.recycle();
-        }
-    }
-
-    @Override
-    public void onResume() {
-        mHandler.sendEmptyMessage(CHANGE_BACKGROUND);
-        setContentPane(mRootPane);
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/app/AlbumSetDataAdapter.java b/new3d/src/com/android/gallery3d/app/AlbumSetDataAdapter.java
deleted file mode 100644
index 9493469..0000000
--- a/new3d/src/com/android/gallery3d/app/AlbumSetDataAdapter.java
+++ /dev/null
@@ -1,236 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-
-package com.android.gallery3d.app;
-
-import android.os.Handler;
-import android.os.Message;
-
-import com.android.gallery3d.data.MediaItem;
-import com.android.gallery3d.data.MediaSet;
-import com.android.gallery3d.ui.AlbumSetView;
-import com.android.gallery3d.ui.SynchronizedHandler;
-import com.android.gallery3d.util.Utils;
-
-import java.util.ArrayList;
-
-public class AlbumSetDataAdapter implements AlbumSetView.Model {
-    private static final String TAG = "AlbumSetDataAdapter";
-
-    private static final long RELOAD_DELAY = 100; // 100ms
-
-    private static final int MIN_LOAD_COUNT = 4;
-    private static final int MAX_COVER_COUNT = 4;
-
-    // Load the data because the source has been changed
-    private static final int LOAD_SOURCE = 1;
-    // Load the initial content
-    private static final int LOAD_SIZE = 2;
-    // Load the data for new content range
-    private static final int LOAD_RANGE = 4;
-
-    private static final int MSG_UPDATE_CONTENT = 1;
-    private static final int MSG_LOAD_CONTENT = 2;
-
-    private static final MediaItem[] EMPTY_MEDIA_ITEMS = new MediaItem[0];
-
-    private final MediaItem[][] mData;
-
-    private int mActiveStart;
-    private int mActiveEnd;
-
-    private int mContentStart;
-    private int mContentEnd;
-
-    private final MediaSet mSource;
-    private int mSize;
-
-    private AlbumSetView.ModelListener mListener;
-
-    private Handler mMainHandler;
-    private Handler mDataHandler;
-
-    public AlbumSetDataAdapter(GalleryContext context, MediaSet albumSet, int cacheSize) {
-        albumSet.setContentListener(new MySourceListener());
-
-        mSource = albumSet;
-        mData = new MediaItem[cacheSize][];
-
-        mMainHandler = new SynchronizedHandler(context.getGLRoot()) {
-            @Override
-            public void handleMessage(Message message) {
-                Utils.Assert(message.what == MSG_UPDATE_CONTENT);
-                ((ReloadTask) message.obj).updateContent();
-            }
-        };
-
-        mDataHandler = new Handler(context.getDataManager().getDataLooper()) {
-            @Override
-            public void handleMessage(Message message) {
-                Utils.Assert(message.what == MSG_LOAD_CONTENT);
-                ((ReloadTask) message.obj).loadFromDatabase();
-            }
-        };
-
-        reloadData(LOAD_SIZE, 0, 0, 0);
-    }
-
-    public MediaSet getMediaSet(int index) {
-        return mSource.getSubMediaSet(index);
-    }
-
-    public MediaItem[] getMediaItems(int index) {
-        if (index < mActiveStart && index >= mActiveEnd) {
-            throw new IllegalArgumentException(String.format(
-                    "%s not in (%s, %s)", index, mActiveStart, mActiveEnd));
-        }
-        MediaItem[] result = mData[index % mData.length];
-
-        // If the result is not ready yet, return an empty array
-        return result == null ? EMPTY_MEDIA_ITEMS : result;
-    }
-
-    public int size() {
-        return mSize;
-    }
-
-    private void setContentWindow(int contentStart, int contentEnd) {
-        if (contentStart == mContentStart && contentEnd == mContentEnd) return;
-        MediaItem[][] data = mData;
-        int length = data.length;
-        if (contentStart >= mContentEnd || mContentStart >= contentEnd) {
-            for (int i = mContentStart, n = mContentEnd; i < n; ++i) {
-                mData[i % length] = null;
-            }
-            reloadData(LOAD_RANGE, contentStart, contentEnd, 0);
-        } else {
-            for (int i = mContentStart; i < contentStart; ++i) {
-                mData[i % length] = null;
-            }
-            for (int i = contentEnd, n = mContentEnd; i < n; ++i) {
-                mData[i % length] = null;
-            }
-            reloadData(LOAD_RANGE, contentStart, mContentStart, 0);
-            reloadData(LOAD_RANGE, mContentEnd, contentEnd, 0);
-        }
-        mContentStart = contentStart;
-        mContentEnd = contentEnd;
-    }
-
-    private void reloadData(int loadBits, int start, int end, long delay) {
-        if (start >= end) loadBits &= ~LOAD_RANGE;
-        if (loadBits != 0) {
-            new ReloadTask(loadBits, start, end).execute(delay);
-        }
-    }
-
-    public void setActiveWindow(int start, int end) {
-        if (start == mActiveStart && end == mActiveEnd) return;
-
-        mActiveStart = start;
-        mActiveEnd = end;
-
-        Utils.Assert(start <= end
-                && end - start <= mData.length && end <= mSize);
-
-        int length = mData.length;
-        mActiveStart = start;
-        mActiveEnd = end;
-
-        // If no data is visible, keep the cache content
-        if (start == end) return;
-
-        int contentStart = Utils.clamp((start + end) / 2 - length / 2,
-                0, Math.max(0, mSize - length));
-        int contentEnd = Math.min(contentStart + length, mSize);
-        if (mContentStart > start || mContentEnd < end
-                || Math.abs(contentStart - mContentStart) > MIN_LOAD_COUNT) {
-            setContentWindow(contentStart, contentEnd);
-        }
-    }
-
-    private class MySourceListener implements MediaSet.MediaSetListener {
-        public void onContentDirty() {
-            reloadData(LOAD_SOURCE, mContentStart, mContentEnd, RELOAD_DELAY);
-        }
-    }
-
-    public void setListener(AlbumSetView.ModelListener listener) {
-        mListener = listener;
-    }
-
-    // TODO: using only one task to update the content
-    private class ReloadTask {
-        private int mStart;
-        private int mEnd;
-        private final int mLoadBits;
-
-        private MediaItem[] mLoadData = null;
-        private int mUpdateSize = -1;
-
-        public ReloadTask(int loadBits, int start, int end) {
-            mStart = start;
-            mEnd = end;
-            mLoadBits = loadBits;
-        }
-
-        public void execute(long delay) {
-            mDataHandler.sendMessageDelayed(
-                    mDataHandler.obtainMessage(MSG_LOAD_CONTENT, this), delay);
-        }
-
-        public void loadFromDatabase() {
-            int loadBits = mLoadBits;
-            mLoadData = null;
-
-            if ((loadBits & LOAD_SOURCE) != 0) {
-                if (!mSource.reload()) loadBits &= ~LOAD_SOURCE;
-            }
-
-            if ((loadBits & (LOAD_SOURCE | LOAD_SIZE)) != 0) {
-                mUpdateSize = mSource.getSubMediaSetCount();
-            }
-
-            if ((loadBits & LOAD_RANGE) != 0) {
-                int size = mSource.getSubMediaSetCount();
-                MediaSet subset = mSource.getSubMediaSet(mStart);
-                if (subset != null) {
-                    ArrayList<MediaItem> items =
-                            subset.getMediaItem(0, MAX_COVER_COUNT);
-                    mLoadData = items.toArray(new MediaItem[items.size()]);
-                }
-            }
-            if (loadBits != 0) {
-                mMainHandler.sendMessage(
-                        mMainHandler.obtainMessage(MSG_UPDATE_CONTENT, this));
-            }
-        }
-
-        public void updateContent() {
-            if (mUpdateSize >= 0 && mUpdateSize != mSize) {
-                mSize = mUpdateSize;
-                if (mListener != null) mListener.onSizeChanged(mSize);
-            }
-            int index = mStart;
-            if (mLoadData != null
-                    && index >= mContentStart && index < mContentEnd) {
-                MediaItem[] update = mLoadData;
-                MediaItem[] original = mData[index];
-                // TODO: Fix it. Find a way to judge if we need to update content
-                if (!update.equals(original)) {
-                    mData[index] = update;
-                    if (mListener != null
-                            && index >= mActiveStart && index < mActiveEnd) {
-                        mListener.onWindowContentChanged(index, original, update);
-                    }
-                }
-            }
-            mStart = index + 1;
-            mStart = Math.max(mContentStart, mStart);
-            mEnd = Math.min(mContentEnd, mEnd);
-            if (mStart < mEnd) {
-                mDataHandler.sendMessage(
-                        mDataHandler.obtainMessage(MSG_LOAD_CONTENT, this));
-            }
-        }
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/app/AlbumSetPage.java b/new3d/src/com/android/gallery3d/app/AlbumSetPage.java
deleted file mode 100644
index a1ce4ef..0000000
--- a/new3d/src/com/android/gallery3d/app/AlbumSetPage.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.app;
-
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.os.Bundle;
-import android.os.Message;
-
-import com.android.gallery3d.R;
-import com.android.gallery3d.data.MediaSet;
-import com.android.gallery3d.ui.AdaptiveBackground;
-import com.android.gallery3d.ui.AlbumSetView;
-import com.android.gallery3d.ui.GLView;
-import com.android.gallery3d.ui.HudMenu;
-import com.android.gallery3d.ui.HeadUpDisplay;
-import com.android.gallery3d.ui.SelectionManager;
-import com.android.gallery3d.ui.SlotView;
-import com.android.gallery3d.ui.SynchronizedHandler;
-
-public class AlbumSetPage extends ActivityState implements SlotView.SlotTapListener {
-    private static final int CHANGE_BACKGROUND = 1;
-
-    private static final int MARGIN_HUD_SLOTVIEW = 5;
-    private static final int DATA_CACHE_SIZE = 256;
-
-    private AdaptiveBackground mBackground;
-    private AlbumSetView mAlbumSetView;
-    private HudMenu mHudMenu;
-    private HeadUpDisplay mHud;
-    private SynchronizedHandler mHandler;
-
-    private Bitmap mBgImages[];
-    private int mBgIndex = 0;
-
-    protected SelectionManager mSelectionManager;
-    private AlbumSetDataAdapter mAlbumSetDataAdapter;
-
-    private GLView mRootPane = new GLView() {
-        @Override
-        protected void onLayout(
-                boolean changed, int left, int top, int right, int bottom) {
-            mBackground.layout(0, 0, right - left, bottom - top);
-            mHud.layout(0, 0, right - left, bottom - top);
-
-            int slotViewTop = mHud.getTopBarBottomPosition() + MARGIN_HUD_SLOTVIEW;
-            int slotViewBottom = mHud.getBottomBarTopPosition()
-                    - MARGIN_HUD_SLOTVIEW;
-
-            mAlbumSetView.layout(0, slotViewTop, right - left, slotViewBottom);
-        }
-    };
-
-    @Override
-    public void onBackPressed() {
-        if (mSelectionManager.inSelectionMode()) {
-            mSelectionManager.leaveSelectionMode();
-        } else {
-            super.onBackPressed();
-        }
-    }
-
-    public void onSingleTapUp(int slotIndex) {
-        if (!mSelectionManager.inSelectionMode()) {
-            Bundle data = new Bundle();
-            data.putInt(AlbumPage.KEY_BUCKET_INDEX, slotIndex);
-            // uncomment the following line to test slideshow mode
-            // mContext.getStateManager().startState(SlideshowPage.class, data);
-            mContext.getStateManager().startState(AlbumPage.class, data);
-        } else {
-            long id = mAlbumSetDataAdapter.getMediaSet(slotIndex).getUniqueId();
-            mSelectionManager.toggle(id);
-            mAlbumSetView.invalidate();
-        }
-    }
-
-    public void onLongTap(int slotIndex) {
-        long id = mAlbumSetDataAdapter.getMediaSet(slotIndex).getUniqueId();
-        mSelectionManager.toggle(id);
-        mAlbumSetView.invalidate();
-    }
-
-    public AlbumSetPage() {}
-
-    @Override
-    public void onCreate(Bundle data, Bundle restoreState) {
-        initializeViews();
-        intializeData();
-        mHandler = new SynchronizedHandler(mContext.getGLRoot()) {
-            @Override
-            public void handleMessage(Message message) {
-                switch (message.what) {
-                    case CHANGE_BACKGROUND:
-                        changeBackground();
-                        mHandler.sendEmptyMessageDelayed(
-                                CHANGE_BACKGROUND, 3000);
-                        break;
-                }
-            }
-        };
-    }
-
-    @Override
-    public void onPause() {
-        mHandler.removeMessages(CHANGE_BACKGROUND);
-        mHudMenu.onPause();
-    }
-
-    @Override
-    public void onResume() {
-        setContentPane(mRootPane);
-        mHandler.sendEmptyMessage(CHANGE_BACKGROUND);
-    }
-
-    private void intializeData() {
-        MediaSet mediaSet = mContext.getDataManager().getRootSet();
-        mSelectionManager.setSourceMediaSet(mediaSet);
-        mAlbumSetDataAdapter = new AlbumSetDataAdapter(mContext, mediaSet, DATA_CACHE_SIZE);
-        mAlbumSetView.setModel(mAlbumSetDataAdapter);
-    }
-
-    private void initializeViews() {
-        mSelectionManager = new SelectionManager(mContext, true);
-
-        mBackground = new AdaptiveBackground();
-        mRootPane.addComponent(mBackground);
-        mAlbumSetView = new AlbumSetView(mContext, mSelectionManager);
-        mAlbumSetView.setSlotTapListener(this);
-
-        mRootPane.addComponent(mAlbumSetView);
-        mHud = new HeadUpDisplay(mContext.getAndroidContext());
-        mHudMenu = new HudMenu(mContext, mSelectionManager);
-        mHud.setMenu(mHudMenu);
-        mRootPane.addComponent(mHud);
-        loadBackgroundBitmap(R.drawable.square,
-                R.drawable.potrait, R.drawable.landscape);
-        mBackground.setImage(mBgImages[mBgIndex]);
-    }
-
-    public void changeBackground() {
-        mBackground.setImage(mBgImages[mBgIndex]);
-        if (++mBgIndex == mBgImages.length) mBgIndex = 0;
-    }
-
-    private void loadBackgroundBitmap(int ... ids) {
-        BitmapFactory.Options options = new BitmapFactory.Options();
-        options.inPreferredConfig = Bitmap.Config.RGB_565;
-        mBgImages = new Bitmap[ids.length];
-        Resources res = mContext.getResources();
-        for (int i = 0, n = ids.length; i < n; ++i) {
-            Bitmap bitmap = BitmapFactory.decodeResource(res, ids[i], options);
-            mBgImages[i] = mBackground.getAdaptiveBitmap(bitmap);
-            bitmap.recycle();
-        }
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/app/Gallery.java b/new3d/src/com/android/gallery3d/app/Gallery.java
deleted file mode 100644
index 4ba3f49..0000000
--- a/new3d/src/com/android/gallery3d/app/Gallery.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (C) 2009 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.android.gallery3d.app;
-
-import android.app.Activity;
-import android.content.Context;
-import android.os.Bundle;
-import android.util.Log;
-
-import com.android.gallery3d.R;
-import com.android.gallery3d.data.DataManager;
-import com.android.gallery3d.data.DecodeService;
-import com.android.gallery3d.data.DownloadService;
-import com.android.gallery3d.data.ImageService;
-import com.android.gallery3d.ui.GLRoot;
-import com.android.gallery3d.ui.GLRootView;
-import com.android.gallery3d.ui.PositionRepository;
-
-public final class Gallery extends Activity implements GalleryContext {
-    public static final String REVIEW_ACTION = "com.android.gallery3d.app.REVIEW";
-
-    private static final String TAG = "Gallery";
-    private GLRootView mGLRootView;
-
-    private StateManager mStateManager;
-    private ImageService mImageService;
-    private DataManager mDataManager;
-    private PositionRepository mPositionRepository = new PositionRepository();
-    private DownloadService mDownloadService;
-    private DecodeService mDecodeService;
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        Log.e(TAG, "Picasa Cache Path: " + this.getExternalCacheDir());
-        setContentView(R.layout.main);
-        mGLRootView = (GLRootView) findViewById(R.id.gl_root_view);
-
-        if (savedInstanceState != null) {
-            getStateManager().restoreFromState(savedInstanceState);
-        } else {
-            getStateManager().startState(AlbumSetPage.class, new Bundle());
-        }
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        mGLRootView.onResume();
-        getStateManager().resume();
-    }
-
-    @Override
-    public void onPause() {
-        super.onPause();
-        mGLRootView.onPause();
-        getStateManager().pause();
-    }
-
-    @Override
-    public void onStop() {
-        super.onStop();
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-        Log.i(TAG, "onDestroy");
-    }
-
-    @Override
-    public void onBackPressed() {
-        // send the back event to the top sub-state
-        getStateManager().getTopState().onBackPressed();
-    }
-
-    @Override
-    protected void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        getStateManager().saveState(outState);
-    }
-
-    public Context getAndroidContext() {
-        return this;
-    }
-
-    public synchronized ImageService getImageService() {
-        if (mImageService == null) {
-            mImageService = new ImageService(getContentResolver());
-        }
-        return mImageService;
-    }
-
-    public synchronized DataManager getDataManager() {
-        if (mDataManager == null) {
-            mDataManager = new DataManager(this);
-        }
-        return mDataManager;
-    }
-
-    public synchronized StateManager getStateManager() {
-        if (mStateManager == null) {
-            mStateManager = new StateManager(this);
-        }
-        return mStateManager;
-    }
-
-    public GLRoot getGLRoot() {
-        return mGLRootView;
-    }
-
-    public PositionRepository getPositionRepository() {
-        return mPositionRepository;
-    }
-
-    public synchronized DownloadService getDownloadService() {
-        if (mDownloadService == null) {
-            mDownloadService = new DownloadService();
-        }
-        return mDownloadService;
-    }
-
-    public synchronized DecodeService getDecodeService() {
-        if (mDecodeService == null) {
-            mDecodeService = new DecodeService();
-        }
-        return mDecodeService;
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/app/GalleryContext.java b/new3d/src/com/android/gallery3d/app/GalleryContext.java
deleted file mode 100644
index 69695ed..0000000
--- a/new3d/src/com/android/gallery3d/app/GalleryContext.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-
-package com.android.gallery3d.app;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.res.Resources;
-import android.os.Looper;
-
-import com.android.gallery3d.data.DataManager;
-import com.android.gallery3d.data.DecodeService;
-import com.android.gallery3d.data.DownloadService;
-import com.android.gallery3d.data.ImageService;
-import com.android.gallery3d.ui.GLRoot;
-import com.android.gallery3d.ui.PositionRepository;
-
-public interface GalleryContext {
-    public ImageService getImageService();
-    public StateManager getStateManager();
-    public DataManager getDataManager();
-    public DownloadService getDownloadService();
-    public DecodeService getDecodeService();
-
-    public GLRoot getGLRoot();
-    public PositionRepository getPositionRepository();
-
-    public Context getAndroidContext();
-
-    public Looper getMainLooper();
-    public Resources getResources();
-    public ContentResolver getContentResolver();
-
-}
diff --git a/new3d/src/com/android/gallery3d/app/MovieView.java b/new3d/src/com/android/gallery3d/app/MovieView.java
deleted file mode 100644
index dbbd02c..0000000
--- a/new3d/src/com/android/gallery3d/app/MovieView.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2007 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.android.gallery3d.app;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.content.pm.ActivityInfo;
-import android.os.Bundle;
-import android.provider.MediaStore;
-import android.view.View;
-import android.view.Window;
-import android.view.WindowManager;
-
-import com.android.gallery3d.R;
-
-
-/**
- * This activity plays a video from a specified URI.
- */
-public class MovieView extends Activity {
-    @SuppressWarnings("unused")
-    private static final String TAG = "MovieView";
-
-    private MovieViewControl mControl;
-    private boolean mFinishOnCompletion;
-
-    @Override
-    public void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-        setContentView(R.layout.movie_view);
-        View rootView = findViewById(R.id.root);
-        Intent intent = getIntent();
-        mControl = new MovieViewControl(rootView, this, intent.getData()) {
-            @Override
-            public void onCompletion() {
-                if (mFinishOnCompletion) {
-                    finish();
-                }
-            }
-        };
-        if (intent.hasExtra(MediaStore.EXTRA_SCREEN_ORIENTATION)) {
-            int orientation = intent.getIntExtra(
-                    MediaStore.EXTRA_SCREEN_ORIENTATION,
-                    ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
-            if (orientation != getRequestedOrientation()) {
-                setRequestedOrientation(orientation);
-            }
-        }
-        mFinishOnCompletion = intent.getBooleanExtra(MediaStore.EXTRA_FINISH_ON_COMPLETION, true);
-        Window win = getWindow();
-        WindowManager.LayoutParams winParams = win.getAttributes();
-        winParams.buttonBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_OFF;
-        win.setAttributes(winParams);
-    }
-
-    @Override
-    public void onPause() {
-        mControl.onPause();
-        super.onPause();
-    }
-
-    @Override
-    public void onResume() {
-        mControl.onResume();
-        super.onResume();
-    }
-
-    @Override
-    public void onDestroy() {
-        mControl.onDestroy();
-        super.onDestroy();
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/app/MovieViewControl.java b/new3d/src/com/android/gallery3d/app/MovieViewControl.java
deleted file mode 100644
index 199f8eb..0000000
--- a/new3d/src/com/android/gallery3d/app/MovieViewControl.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright (C) 2009 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.android.gallery3d.app;
-
-import android.app.AlertDialog;
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.DialogInterface.OnCancelListener;
-import android.content.DialogInterface.OnClickListener;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteException;
-import android.media.MediaPlayer;
-import android.net.Uri;
-import android.os.Handler;
-import android.provider.MediaStore;
-import android.provider.MediaStore.Video;
-import android.util.Log;
-import android.view.View;
-import android.widget.MediaController;
-import android.widget.VideoView;
-
-import com.android.gallery3d.R;
-
-public class MovieViewControl implements
-        MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener {
-
-    @SuppressWarnings("unused")
-    private static final String TAG = "MovieViewControl";
-
-    private static final int HALF_MINUTE = 30 * 1000;
-    private static final int TWO_MINUTES = 4 * HALF_MINUTE;
-
-    // Copied from MediaPlaybackService in the Music Player app.
-    private static final String SERVICECMD = "com.android.music.musicservicecommand";
-    private static final String CMDNAME = "command";
-    private static final String CMDPAUSE = "pause";
-
-    private final VideoView mVideoView;
-    private final View mProgressView;
-    private final Uri mUri;
-    private final ContentResolver mContentResolver;
-
-    Handler mHandler = new Handler();
-
-    Runnable mPlayingChecker = new Runnable() {
-        public void run() {
-            if (mVideoView.isPlaying()) {
-                mProgressView.setVisibility(View.GONE);
-            } else {
-                mHandler.postDelayed(mPlayingChecker, 250);
-            }
-        }
-    };
-
-    public static String formatDuration(final Context context, int durationMs) {
-        int duration = durationMs / 1000;
-        int h = duration / 3600;
-        int m = (duration - h * 3600) / 60;
-        int s = duration - (h * 3600 + m * 60);
-        String durationValue;
-        if (h == 0) {
-            durationValue = String.format(context.getString(R.string.details_ms), m, s);
-        } else {
-            durationValue = String.format(context.getString(R.string.details_hms), h, m, s);
-        }
-        return durationValue;
-    }
-
-    public MovieViewControl(View rootView, Context context, Uri videoUri) {
-        mContentResolver = context.getContentResolver();
-        mVideoView = (VideoView) rootView.findViewById(R.id.surface_view);
-        mProgressView = rootView.findViewById(R.id.progress_indicator);
-
-        mUri = videoUri;
-
-        // For streams that we expect to be slow to start up, show a
-        // progress spinner until playback starts.
-        String scheme = mUri.getScheme();
-        if ("http".equalsIgnoreCase(scheme) || "rtsp".equalsIgnoreCase(scheme)) {
-            mHandler.postDelayed(mPlayingChecker, 250);
-        } else {
-            mProgressView.setVisibility(View.GONE);
-        }
-
-        mVideoView.setOnErrorListener(this);
-        mVideoView.setOnCompletionListener(this);
-        mVideoView.setVideoURI(mUri);
-        mVideoView.setMediaController(new MediaController(context));
-
-        // make the video view handle keys for seeking and pausing
-        mVideoView.requestFocus();
-
-        Intent i = new Intent(SERVICECMD);
-        i.putExtra(CMDNAME, CMDPAUSE);
-        context.sendBroadcast(i);
-
-        final Integer bookmark = getBookmark();
-        if (bookmark != null) {
-            AlertDialog.Builder builder = new AlertDialog.Builder(context);
-            builder.setTitle(R.string.resume_playing_title);
-            builder.setMessage(String.format(
-                    context.getString(R.string.resume_playing_message),
-                    formatDuration(context, bookmark)));
-            builder.setOnCancelListener(new OnCancelListener() {
-                public void onCancel(DialogInterface dialog) {
-                    onCompletion();
-                }
-            });
-            builder.setPositiveButton(
-                    R.string.resume_playing_resume, new OnClickListener() {
-                public void onClick(DialogInterface dialog, int which) {
-                    mVideoView.seekTo(bookmark);
-                    mVideoView.start();
-                }
-            });
-            builder.setNegativeButton(
-                    R.string.resume_playing_restart, new OnClickListener() {
-                public void onClick(DialogInterface dialog, int which) {
-                    mVideoView.start();
-                }
-            });
-            builder.show();
-        } else {
-            mVideoView.start();
-        }
-    }
-
-    private static boolean uriSupportsBookmarks(Uri uri) {
-        String scheme = uri.getScheme();
-        String authority = uri.getAuthority();
-        return ("content".equalsIgnoreCase(scheme)
-                && MediaStore.AUTHORITY.equalsIgnoreCase(authority));
-    }
-
-    private Integer getBookmark() {
-        if (!uriSupportsBookmarks(mUri)) {
-            return null;
-        }
-
-        String[] projection = new String[] {
-                Video.VideoColumns.DURATION, Video.VideoColumns.BOOKMARK};
-
-        try {
-            Cursor cursor = mContentResolver.query(mUri, projection, null, null, null);
-            if (cursor != null) {
-                try {
-                    if (cursor.moveToFirst()) {
-                        int duration = getCursorInteger(cursor, 0);
-                        int bookmark = getCursorInteger(cursor, 1);
-                        if ((bookmark < HALF_MINUTE) || (duration < TWO_MINUTES)
-                                || (bookmark > (duration - HALF_MINUTE))) {
-                            return null;
-                        }
-                        return Integer.valueOf(bookmark);
-                    }
-                } finally {
-                    cursor.close();
-                }
-            }
-        } catch (SQLiteException e) {
-            // ignore
-        }
-
-        return null;
-    }
-
-    private static int getCursorInteger(Cursor cursor, int index) {
-        try {
-            return cursor.getInt(index);
-        } catch (SQLiteException e) {
-            return 0;
-        } catch (NumberFormatException e) {
-            return 0;
-        }
-
-    }
-
-    private void setBookmark(int bookmark, int duration) {
-        if (!uriSupportsBookmarks(mUri)) {
-            return;
-        }
-
-        ContentValues values = new ContentValues();
-        values.put(Video.VideoColumns.BOOKMARK, Integer.toString(bookmark));
-        values.put(Video.VideoColumns.DURATION, Integer.toString(duration));
-        try {
-            mContentResolver.update(mUri, values, null, null);
-        } catch (SecurityException e) {
-            Log.w(TAG, "set bookmark fail", e);
-            // Ignore, can happen if we try to set the bookmark on a read-only
-            // resource such as a video attached to GMail.
-        } catch (SQLiteException e) {
-            Log.w(TAG, "set bookmark fail", e);
-            // ignore. can happen if the content doesn't support a bookmark
-            // column.
-        } catch (UnsupportedOperationException e) {
-            Log.w(TAG, "set bookmark fail", e);
-            // ignore. can happen if the external volume is already detached.
-        }
-    }
-
-    public void onPause() {
-        mHandler.removeCallbacksAndMessages(null);
-        setBookmark(mVideoView.getCurrentPosition(), mVideoView.getDuration());
-
-        mVideoView.suspend();
-    }
-
-    public void onResume() {
-        mVideoView.resume();
-    }
-
-    public void onDestroy() {
-        mVideoView.stopPlayback();
-    }
-
-    public boolean onError(MediaPlayer player, int arg1, int arg2) {
-        mHandler.removeCallbacksAndMessages(null);
-        mProgressView.setVisibility(View.GONE);
-        return false;
-    }
-
-    public void onCompletion(MediaPlayer mp) {
-        onCompletion();
-    }
-
-    public void onCompletion() {
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/app/PhotoPage.java b/new3d/src/com/android/gallery3d/app/PhotoPage.java
deleted file mode 100644
index d2bc96d..0000000
--- a/new3d/src/com/android/gallery3d/app/PhotoPage.java
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.app;
-
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.LargeBitmap;
-import android.graphics.Bitmap.Config;
-import android.os.Bundle;
-import android.os.Message;
-import android.util.Log;
-
-import com.android.gallery3d.data.MediaItem;
-import com.android.gallery3d.data.MediaSet;
-import com.android.gallery3d.ui.GLCanvas;
-import com.android.gallery3d.ui.GLRoot;
-import com.android.gallery3d.ui.GLView;
-import com.android.gallery3d.ui.ImageViewer;
-import com.android.gallery3d.ui.SynchronizedHandler;
-import com.android.gallery3d.ui.ImageViewer.ImageData;
-import com.android.gallery3d.util.Future;
-import com.android.gallery3d.util.FutureListener;
-
-import java.util.ArrayList;
-
-public class PhotoPage extends ActivityState {
-    private static final String TAG = PhotoPage.class.getSimpleName();
-
-    public static final String KEY_SET_INDEX = "keySetIndex";
-    public static final String KEY_PHOTO_INDEX = "keyPhotoIndex";
-
-    private static final int MSG_UPDATE_SCREENNAIL = 1;
-    private static final int MSG_UPDATE_FULLIMAGE = 2;
-
-    private static final int TARGET_LENGTH = 1600;
-
-    private SynchronizedHandler mHandler;
-
-    private ImageViewer mImageViewer;
-    private final MyImageViewerModel mModel = new MyImageViewerModel();
-    private int mSetIndex;
-    private int mPhotoIndex;
-
-    private MediaSet mMediaSet;
-
-    private GLView mRootPane = new GLView() {
-
-        @Override
-        protected void renderBackground(GLCanvas view) {
-            view.clearBuffer();
-        }
-
-        @Override
-        protected void onLayout(
-                boolean changed, int left, int top, int right, int bottom) {
-            if (mImageViewer != null) {
-                mImageViewer.layout(0, 0, right - left, bottom - top);
-            }
-        }
-    };
-
-    @Override
-    public void onCreate(Bundle data, Bundle restoreState) {
-        mHandler = new SynchronizedHandler(mContext.getGLRoot()) {
-            @Override
-            public void handleMessage(Message message) {
-                switch (message.what) {
-                    case MSG_UPDATE_SCREENNAIL: {
-                        mModel.updateScreenNail(message.arg1, (Bitmap) message.obj);
-                        break;
-                    }
-                    case MSG_UPDATE_FULLIMAGE: {
-                        mModel.updateLargeImage(message.arg1, (LargeBitmap) message.obj);
-                        break;
-                    }
-                    default: throw new AssertionError();
-                }
-            }
-        };
-
-        mSetIndex = data.getInt(KEY_SET_INDEX);
-        mPhotoIndex = data.getInt(KEY_PHOTO_INDEX);
-
-        mMediaSet = mContext.getDataManager()
-                .getRootSet().getSubMediaSet(mSetIndex);
-
-        mImageViewer = new ImageViewer(mContext);
-        mImageViewer.setModel(mModel);
-        mRootPane.addComponent(mImageViewer);
-        mModel.requestNextImage();
-    }
-
-    @Override
-    public void onPause() {
-        GLRoot root = mContext.getGLRoot();
-        root.lockRenderThread();
-        try {
-            mImageViewer.freeTextures();
-        } finally {
-            root.unlockRenderThread();
-        }
-    }
-
-    @Override
-    protected void onResume() {
-        setContentPane(mRootPane);
-        mImageViewer.prepareTextures();
-    }
-
-    private class MyImageViewerModel implements ImageViewer.Model {
-
-        private LargeBitmap mLargeBitmap;
-
-        private Bitmap mScreenNails[] = new Bitmap[3]; // prev, curr, next
-
-        public LargeBitmap getLargeBitmap() {
-            return mLargeBitmap;
-        }
-
-        public ImageData getImageData(int which) {
-            Bitmap screennail = mScreenNails[which];
-            if (screennail == null) return null;
-
-            int width = 0;
-            int height = 0;
-
-            if (which == INDEX_CURRENT && mLargeBitmap != null) {
-                width = mLargeBitmap.getWidth();
-                height = mLargeBitmap.getHeight();
-            } else {
-                // We cannot get the size of image before getting the
-                // full-size image. In the future, we should add the data to
-                // database or get it from the header in runtime. Now, we
-                // just use the thumb-nail image to estimate the size
-                float scale = (float) TARGET_LENGTH / Math.max(
-                        screennail.getWidth(), screennail.getHeight());
-                width = Math.round(screennail.getWidth() * scale);
-                height = Math.round(screennail.getHeight() * scale);
-            }
-            return new ImageData(width, height, screennail);
-        }
-
-        public void next() {
-            ++mPhotoIndex;
-            Bitmap[] screenNails = mScreenNails;
-
-            if (screenNails[INDEX_PREVIOUS] != null) {
-                screenNails[INDEX_PREVIOUS].recycle();
-            }
-            screenNails[INDEX_PREVIOUS] = screenNails[INDEX_CURRENT];
-            screenNails[INDEX_CURRENT] = screenNails[INDEX_NEXT];
-            screenNails[INDEX_NEXT] = null;
-
-            if (mLargeBitmap != null) {
-                mLargeBitmap.recycle();
-                mLargeBitmap = null;
-            }
-
-            requestNextImage();
-        }
-
-        public void previous() {
-            --mPhotoIndex;
-            Bitmap[] screenNails = mScreenNails;
-
-            if (screenNails[INDEX_NEXT] != null) {
-                screenNails[INDEX_NEXT].recycle();
-            }
-            screenNails[INDEX_NEXT] = screenNails[INDEX_CURRENT];
-            screenNails[INDEX_CURRENT] = screenNails[INDEX_PREVIOUS];
-            screenNails[INDEX_PREVIOUS] = null;
-
-            if (mLargeBitmap != null) {
-                mLargeBitmap.recycle();
-                mLargeBitmap = null;
-            }
-
-            requestNextImage();
-        }
-
-        public void updateScreenNail(int index, Bitmap screenNail) {
-            int offset = (index - mPhotoIndex) + 1;
-            if (offset < 0 || offset > 2) {
-                screenNail.recycle();
-                return;
-            }
-
-            if (screenNail != null) {
-                mScreenNails[offset] = screenNail;
-                mImageViewer.notifyScreenNailInvalidated(offset);
-            }
-            requestNextImage();
-        }
-
-        public void updateLargeImage(int index, LargeBitmap largeBitmap) {
-            int offset = (index - mPhotoIndex) + 1;
-            if (offset != INDEX_CURRENT) {
-                largeBitmap.recycle();
-                return;
-            }
-
-            if (largeBitmap != null) {
-                mLargeBitmap = largeBitmap;
-                mImageViewer.notifyLargeBitmapInvalidated();
-                // We need to update the estimated width and height
-                mImageViewer.notifyScreenNailInvalidated(INDEX_CURRENT);
-            }
-            requestNextImage();
-        }
-
-        private MediaItem getMediaItem(
-                ArrayList<MediaItem> items, int start, int index) {
-            index = index - start;
-            if (index < 0 || index >= items.size()) return null;
-            return items.get(index);
-        }
-
-        public void requestNextImage() {
-
-            int start = Math.max(0, mPhotoIndex - 1);
-
-            ArrayList<MediaItem> items = mMediaSet.getMediaItem(start, 3);
-            if (items.size() == 0) return;
-
-            // First request the current screen nail
-            if (mScreenNails[INDEX_CURRENT] == null) {
-                MediaItem current = getMediaItem(items, start, mPhotoIndex);
-                if (current != null) {
-                    current.requestImage(MediaItem.TYPE_THUMBNAIL,
-                            new ScreenNailListener(mPhotoIndex));
-                    return;
-                }
-            }
-
-            // Next, the next screen nail
-            if (mScreenNails[INDEX_NEXT] == null) {
-                MediaItem next = getMediaItem(items, start, mPhotoIndex + 1);
-                if (next != null) {
-                    next.requestImage(MediaItem.TYPE_THUMBNAIL,
-                            new ScreenNailListener(mPhotoIndex + 1));
-                    return;
-                }
-            }
-
-            // Next, the previous screen nail
-            if (mScreenNails[INDEX_PREVIOUS] == null) {
-                MediaItem previous = getMediaItem(items, start, mPhotoIndex - 1);
-                if (previous != null) {
-                    previous.requestImage(MediaItem.TYPE_THUMBNAIL,
-                            new ScreenNailListener(mPhotoIndex - 1));
-                    return;
-                }
-            }
-
-            // Next, the full size image
-            if (mLargeBitmap == null) {
-                MediaItem current = getMediaItem(items, start, mPhotoIndex);
-                if (current != null) {
-                    current.requestLargeImage(MediaItem.TYPE_FULL_IMAGE,
-                            new LargeImageListener(mPhotoIndex));
-                    return;
-                }
-            }
-        }
-    }
-
-    private static Bitmap[] getScaledBitmaps(Bitmap bitmap, int minLength) {
-        Config config = bitmap.hasAlpha()
-                ? Config.ARGB_8888 : Config.RGB_565;
-
-        int width = bitmap.getWidth() / 2;
-        int height = bitmap.getHeight() / 2;
-
-        ArrayList<Bitmap> list = new ArrayList<Bitmap>();
-        list.add(bitmap);
-        while (width > minLength || height > minLength) {
-            Bitmap half = Bitmap.createBitmap(width, height, config);
-            Canvas canvas = new Canvas(half);
-            canvas.scale(0.5f, 0.5f);
-            canvas.drawBitmap(bitmap, 0, 0, null);
-            width /= 2;
-            height /= 2;
-            bitmap = half;
-            list.add(bitmap);
-        }
-        return list.toArray(new Bitmap[list.size()]);
-    }
-
-    private class ScreenNailListener implements FutureListener<Bitmap> {
-
-        private final int mIndex;
-
-        public ScreenNailListener(int index) {
-            mIndex = index;
-        }
-
-        public void onFutureDone(Future<? extends Bitmap> future) {
-            Bitmap bitmap = null;
-            try {
-                bitmap = future.get();
-            } catch (Exception e) {
-                Log.v(TAG, "fail to get image", e);
-            }
-            mHandler.sendMessage(mHandler.obtainMessage(
-                    MSG_UPDATE_SCREENNAIL, mIndex, 0, bitmap));
-        }
-    }
-
-    private class LargeImageListener implements FutureListener<LargeBitmap> {
-
-        private final int mIndex;
-
-        public LargeImageListener(int index) {
-            mIndex = index;
-        }
-
-        public void onFutureDone(Future<? extends LargeBitmap> future) {
-            LargeBitmap largeBitmap = null;
-            try {
-                largeBitmap = future.get();
-            } catch (Exception e) {
-                Log.v(TAG, "fail to get image", e);
-            }
-            mHandler.sendMessage(mHandler.obtainMessage(
-                    MSG_UPDATE_FULLIMAGE, mIndex, 0, largeBitmap));
-        }
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/app/SlideshowDataAdapter.java b/new3d/src/com/android/gallery3d/app/SlideshowDataAdapter.java
deleted file mode 100644
index 04b7695..0000000
--- a/new3d/src/com/android/gallery3d/app/SlideshowDataAdapter.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.app;
-
-import android.graphics.Bitmap;
-import android.os.Handler;
-import android.os.Message;
-import android.util.Log;
-
-import com.android.gallery3d.app.SlideshowPage.ModelListener;
-import com.android.gallery3d.data.MediaItem;
-import com.android.gallery3d.data.MediaSet;
-import com.android.gallery3d.data.MediaSet.MediaSetListener;
-import com.android.gallery3d.ui.SynchronizedHandler;
-import com.android.gallery3d.util.Future;
-import com.android.gallery3d.util.FutureListener;
-import com.android.gallery3d.util.Utils;
-
-import java.util.ArrayList;
-import java.util.LinkedList;
-
-public class SlideshowDataAdapter implements SlideshowPage.Model {
-    private static final String TAG = "SlideshowDataAdapter";
-
-    private static final int IMAGE_QUEUE_CAPACITY = 3;
-
-    private static final int MSG_LOAD_MEDIA_ITEM = 0;
-    private static final int MSG_FILL_BITMAP = 1;
-
-    private static final int MSG_LOAD_DATA = 2;
-    private static final int MSG_UPDATE_DATA = 3;
-
-    private final MediaSet mSource;
-
-    private int mIndex = 0;
-    private int mSize = 0;
-
-    private LinkedList<Bitmap> mImageQueue = new LinkedList<Bitmap>();
-    private int mImageRequestCount = IMAGE_QUEUE_CAPACITY;
-
-    private Handler mMainHandler;
-    private Handler mDataHandler;
-
-    private SlideshowPage.ModelListener mListener;
-
-    public SlideshowDataAdapter(GalleryContext context, MediaSet source) {
-        mSource = source;
-        mSource.setContentListener(new SourceListener());
-
-        mMainHandler = new SynchronizedHandler(context.getGLRoot()) {
-            @Override
-            public void handleMessage(Message message) {
-                switch (message.what) {
-                    case MSG_UPDATE_DATA:
-                        ((ReloadTask) message.obj).updateContent();
-                        break;
-                    case MSG_FILL_BITMAP:
-                        ((LoadNextImageTask) message.obj).fillBitmap();
-                        break;
-                    default: throw new AssertionError(message.what);
-                }
-            }
-        };
-
-        mDataHandler = new Handler(context.getDataManager().getDataLooper()) {
-            @Override
-            public void handleMessage(Message message) {
-                switch (message.what) {
-                    case MSG_LOAD_DATA:
-                        ((ReloadTask) message.obj).reloadData();
-                        break;
-                    case MSG_LOAD_MEDIA_ITEM:
-                        ((LoadNextImageTask) message.obj).loadMediaItem();
-                        break;
-                    default:
-                        throw new AssertionError(message.what);
-                }
-            }
-        };
-
-        new ReloadTask().execute();
-    }
-
-    public boolean hasNext() {
-        return !mImageQueue.isEmpty();
-    }
-
-    public Bitmap nextSlideBitmap() {
-        new LoadNextImageTask(mIndex++).execute();
-        return mImageQueue.removeFirst();
-    }
-
-    private class ReloadTask {
-        private int mUpdateSize = -1;
-
-        public void execute() {
-            mDataHandler.sendMessage(
-                    mDataHandler.obtainMessage(MSG_LOAD_DATA, this));
-        }
-
-        public void reloadData() {
-            mSource.reload();
-            mUpdateSize = mSource.getMediaItemCount();
-            mMainHandler.sendMessage(
-                    mMainHandler.obtainMessage(MSG_UPDATE_DATA, this));
-        }
-
-        public void updateContent() {
-            int size = mSize;
-            mSize = mUpdateSize;
-            if (size == mIndex && size < mUpdateSize && mImageRequestCount > 0) {
-                --mImageRequestCount;
-                new LoadNextImageTask(mIndex++).execute();
-            }
-        }
-    }
-
-    private class LoadNextImageTask implements FutureListener<Bitmap>{
-        private int mItemIndex;
-        private MediaItem mItem;
-        private Bitmap mBitmap;
-
-        public LoadNextImageTask(int index) {
-            mItemIndex = index;
-        }
-
-        public void execute() {
-            mDataHandler.sendMessage(
-                    mDataHandler.obtainMessage(MSG_LOAD_MEDIA_ITEM, this));
-        }
-
-        public void loadMediaItem() {
-            ArrayList<MediaItem> list = mSource.getMediaItem(mItemIndex, 1);
-            // If list is empty, assume it is the end of the list
-            if (!list.isEmpty()) {
-                mItem = list.get(0);
-                mItem.requestImage(MediaItem.TYPE_FULL_IMAGE, this);
-            }
-        }
-
-        public void onFutureDone(Future<? extends Bitmap> future) {
-            try {
-                mBitmap = future.get();
-                if (mBitmap != null) {
-                    mBitmap = Utils.resizeBitmap(mBitmap, 640);
-                }
-            } catch (Throwable e) {
-                Log.w(TAG, "fail to get bitmap", e);
-            }
-            mMainHandler.sendMessage(
-                    mMainHandler.obtainMessage(MSG_FILL_BITMAP, this));
-        }
-
-        public void fillBitmap() {
-            if (mBitmap != null) {
-                mImageQueue.addLast(mBitmap);
-                if (mImageQueue.size() == 1 && mListener != null) {
-                    mListener.onContentChanged();
-                }
-            }
-            if (mImageRequestCount > 0 && mIndex < mSize) {
-                --mImageRequestCount;
-                new LoadNextImageTask(mIndex++).execute();
-            }
-        }
-    }
-
-    private class SourceListener implements MediaSetListener {
-        public void onContentDirty() {
-            new ReloadTask().execute();
-        }
-    }
-
-    public void setListener(ModelListener listener) {
-        mListener = listener;
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/app/SlideshowPage.java b/new3d/src/com/android/gallery3d/app/SlideshowPage.java
deleted file mode 100644
index 7e7053f..0000000
--- a/new3d/src/com/android/gallery3d/app/SlideshowPage.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.app;
-
-import android.graphics.Bitmap;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-
-import com.android.gallery3d.data.MediaSet;
-import com.android.gallery3d.ui.GLCanvas;
-import com.android.gallery3d.ui.GLView;
-import com.android.gallery3d.ui.SlideshowView;
-import com.android.gallery3d.ui.SynchronizedHandler;
-import com.android.gallery3d.util.Utils;
-
-public class SlideshowPage extends ActivityState {
-    private static final String TAG = "SlideshowPage";
-
-    public static final String KEY_BUCKET_INDEX = "keyBucketIndex";
-
-    private static final long SLIDESHOW_DELAY = 3000; // 2 seconds
-    private static final int MSG_SHOW_NEXT_SLIDE = 1;
-
-    public static interface Model {
-        public boolean hasNext();
-        public Bitmap nextSlideBitmap();
-        public void setListener(ModelListener listener);
-    }
-
-    public static interface ModelListener {
-        public void onContentChanged();
-    }
-
-    private Handler mHandler;
-    private Model mModel;
-    private SlideshowView mSlideshowView;
-    private boolean mSlideshowActive = false;
-
-    private GLView mRootPane = new GLView() {
-        @Override
-        protected void onLayout(
-                boolean changed, int left, int top, int right, int bottom) {
-            mSlideshowView.layout(0, 0, right - left, bottom - top);
-        }
-
-        @Override
-        protected void renderBackground(GLCanvas canvas) {
-            canvas.clearBuffer();
-        }
-    };
-
-    @Override
-    public void onCreate(Bundle data, Bundle restoreState) {
-        mHandler = new SynchronizedHandler(mContext.getGLRoot()) {
-            @Override
-            public void handleMessage(Message message) {
-                Utils.Assert(message.what == MSG_SHOW_NEXT_SLIDE);
-                showNextSlide();
-            }
-        };
-        initializeViews();
-        intializeData(data);
-    }
-
-    private void showNextSlide() {
-        if (!mModel.hasNext()) {
-            mSlideshowActive = false;
-            return;
-        }
-        mSlideshowActive = true;
-        mSlideshowView.next(mModel.nextSlideBitmap());
-        mHandler.sendEmptyMessageDelayed(MSG_SHOW_NEXT_SLIDE, SLIDESHOW_DELAY);
-    }
-
-    @Override
-    public void onPause() {
-        mHandler.removeMessages(MSG_SHOW_NEXT_SLIDE);
-    }
-
-    @Override
-    public void onResume() {
-        mHandler.sendEmptyMessage(MSG_SHOW_NEXT_SLIDE);
-    }
-
-    private void initializeViews() {
-        mSlideshowView = new SlideshowView();
-        mRootPane.addComponent(mSlideshowView);
-        setContentPane(mRootPane);
-    }
-
-    private void intializeData(Bundle data) {
-        int bucketIndex = data.getInt(KEY_BUCKET_INDEX);
-        MediaSet mediaSet = mContext.getDataManager()
-                .getRootSet().getSubMediaSet(bucketIndex);
-        SlideshowDataAdapter adapter =
-                new SlideshowDataAdapter(mContext, mediaSet);
-        setModel(adapter);
-    }
-
-    public void setModel(Model source) {
-        mHandler.removeMessages(MSG_SHOW_NEXT_SLIDE);
-        mModel = source;
-        mModel.setListener(new MyModelListener());
-        showNextSlide();
-    }
-
-    private class MyModelListener implements ModelListener {
-        public void onContentChanged() {
-            if (!mSlideshowActive) showNextSlide();
-        }
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/app/StateManager.java b/new3d/src/com/android/gallery3d/app/StateManager.java
deleted file mode 100644
index 18f216f..0000000
--- a/new3d/src/com/android/gallery3d/app/StateManager.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.app;
-
-import android.os.Bundle;
-import android.os.Parcelable;
-
-import com.android.gallery3d.util.Utils;
-
-import java.util.Stack;
-
-public class StateManager {
-    private static final String TAG = "StateManager";
-    private boolean mIsResumed = false;
-
-    private static final String MAIN_KEY = "activity-state";
-    private static final String DATA_KEY = "data";
-    private static final String STATE_KEY = "bundle";
-    private static final String CLASS_KEY = "class";
-
-    private GalleryContext mContext;
-    private Stack<StateEntry> mStack = new Stack<StateEntry>();
-
-    public StateManager(GalleryContext context) {
-        mContext = context;
-    }
-
-    public void startState(Class<? extends ActivityState> stateClass,
-            Bundle data) {
-        ActivityState stateView = null;
-        try {
-            stateView = stateClass.newInstance();
-        } catch (Exception e) {
-            throw new AssertionError(e);
-        }
-        stateView.setContext(mContext);
-
-        if (!mStack.isEmpty()) {
-            mStack.peek().activityState.onPause();
-        }
-
-        mStack.push(new StateEntry(data, stateView));
-        stateView.onCreate(data, null);
-        if (mIsResumed) stateView.onResume();
-    }
-
-    public void resume() {
-        if (mIsResumed) return;
-        mIsResumed = true;
-        if (!mStack.isEmpty()) getTopState().onResume();
-    }
-
-    public void pause() {
-        if (!mIsResumed) return;
-        mIsResumed = false;
-        if (!mStack.isEmpty()) getTopState().onPause();
-    }
-
-    void finishState(ActivityState stateView) {
-        if (stateView != mStack.peek().activityState) {
-            throw new IllegalArgumentException("The stateview to be finished"
-                    + " is not at the top of the stack!");
-        }
-        // Remove the top stateview.
-        mStack.pop();
-        stateView.onPause();
-        stateView.onDestroy();
-
-        if (mStack.isEmpty()) {
-            ((Gallery) mContext).finish();
-        } else {
-            // Restore the immediately previous stateview
-            mStack.peek().activityState.onResume();
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    public void restoreFromState(Bundle inState) {
-        Parcelable list[] = inState.getParcelableArray(MAIN_KEY);
-
-        for (Parcelable parcelable : list) {
-            Bundle bundle = (Bundle) parcelable;
-            Class<? extends ActivityState> klass =
-                    (Class<? extends ActivityState>) bundle.getSerializable(CLASS_KEY);
-
-            Bundle data = bundle.getBundle(DATA_KEY);
-            Bundle state = bundle.getBundle(STATE_KEY);
-
-            ActivityState activityState;
-            try {
-                activityState = klass.newInstance();
-            } catch (Exception e) {
-                throw new AssertionError(e);
-            }
-            activityState.setContext(mContext);
-            activityState.onCreate(data, state);
-            mStack.push(new StateEntry(data, activityState));
-        }
-    }
-
-    public void saveState(Bundle outState) {
-        Parcelable list[] = new Parcelable[mStack.size()];
-
-        int i = 0;
-        for (StateEntry entry : mStack) {
-            Bundle bundle = new Bundle();
-            bundle.putSerializable(CLASS_KEY, entry.activityState.getClass());
-            bundle.putBundle(DATA_KEY, entry.data);
-            Bundle state = new Bundle();
-            entry.activityState.onSaveState(state);
-            bundle.putBundle(STATE_KEY, state);
-            list[i++] = bundle;
-        }
-        outState.putParcelableArray(MAIN_KEY, list);
-    }
-
-    public ActivityState getTopState() {
-        Utils.Assert(!mStack.isEmpty());
-        return mStack.peek().activityState;
-    }
-
-    private static class StateEntry {
-        public Bundle data;
-        public ActivityState activityState;
-
-        public StateEntry(Bundle data, ActivityState state) {
-            this.data = data;
-            this.activityState = state;
-        }
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/app/Wallpaper.java b/new3d/src/com/android/gallery3d/app/Wallpaper.java
deleted file mode 100644
index 6fe12ec..0000000
--- a/new3d/src/com/android/gallery3d/app/Wallpaper.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright (C) 2007 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.android.gallery3d.app;
-
-import android.app.Activity;
-import android.app.ProgressDialog;
-import android.app.WallpaperManager;
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.provider.MediaStore;
-import android.util.Log;
-
-import com.android.gallery3d.R;
-import com.android.gallery3d.util.Utils;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Wallpaper picker for the gallery application. This just redirects to the
- * standard pick action.
- */
-public class Wallpaper extends Activity {
-    private static final String TAG = "SetWallpaper";
-
-    // TODO: move this action to CropImage activity
-    private static final String CROP_ACTION = "com.android.camera.action.CROP";
-
-    static final int PHOTO_PICKED = 1;
-    static final int CROP_DONE = 2;
-
-    static final int MSG_SHOW_PROGRESS = 0;
-    static final int MSG_FINISH = 1;
-
-    static final String DO_LAUNCH_ICICLE = "do_launch";
-    static final String TEMP_FILE_PATH_ICICLE = "temp_file_path";
-
-    private ProgressDialog mProgressDialog = null;
-    private boolean mDoLaunch = true;
-    private File mTempFile;
-
-    private final Handler mHandler = new Handler() {
-        @Override
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case MSG_SHOW_PROGRESS: {
-                    CharSequence c = getText(R.string.wallpaper);
-                    mProgressDialog = ProgressDialog.show(
-                            Wallpaper.this, "", c, true, false);
-                    break;
-                }
-                case MSG_FINISH: {
-                    closeProgressDialog();
-                    setResult(RESULT_OK);
-                    finish();
-                    break;
-                }
-            }
-        }
-    };
-
-    static class SetWallpaperThread extends Thread {
-        private final Bitmap mBitmap;
-        private final Handler mHandler;
-        private final Context mContext;
-        private final File mFile;
-
-        public SetWallpaperThread(Bitmap bitmap,
-                Handler handler, Context context, File file) {
-            mBitmap = bitmap;
-            mHandler = handler;
-            mContext = context;
-            mFile = file;
-        }
-
-        @Override
-        public void run() {
-            try {
-                WallpaperManager.getInstance(mContext).setBitmap(mBitmap);
-            } catch (IOException e) {
-                Log.e(TAG, "Failed to set wallpaper.", e);
-            } finally {
-                mHandler.sendEmptyMessage(MSG_FINISH);
-                mFile.delete();
-            }
-        }
-    }
-
-    private void closeProgressDialog() {
-        if (mProgressDialog != null) {
-            mProgressDialog.dismiss();
-            mProgressDialog = null;
-        }
-    }
-
-    @Override
-    protected void onCreate(Bundle bundle) {
-        super.onCreate(bundle);
-        if (bundle != null) {
-            mDoLaunch = bundle.getBoolean(DO_LAUNCH_ICICLE);
-            mTempFile = new File(bundle.getString(TEMP_FILE_PATH_ICICLE));
-        }
-    }
-
-    @Override
-    protected void onSaveInstanceState(Bundle saveState) {
-        saveState.putBoolean(DO_LAUNCH_ICICLE, mDoLaunch);
-        saveState.putString(TEMP_FILE_PATH_ICICLE, mTempFile.getAbsolutePath());
-    }
-
-    @Override
-    protected void onPause() {
-        closeProgressDialog();
-        super.onPause();
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-        if (!mDoLaunch) return;
-        Uri imageToUse = getIntent().getData();
-        if (imageToUse != null) {
-            Intent intent = new Intent();
-            intent.setAction(CROP_ACTION);
-            intent.setData(imageToUse);
-            formatIntent(intent);
-            startActivityForResult(intent, CROP_DONE);
-        } else {
-            Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
-            intent.setType("image/*");
-            intent.putExtra("crop", "true");
-            formatIntent(intent);
-            startActivityForResult(intent, PHOTO_PICKED);
-        }
-    }
-
-    protected void formatIntent(Intent intent) {
-        // TODO: A temporary file is NOT necessary
-        // The CropImage intent should be able to set the wallpaper directly
-        // without writing to a file, which we then need to read here to write
-        // it again as the final wallpaper, this is silly
-        mTempFile = getFileStreamPath("temp-wallpaper");
-        mTempFile.getParentFile().mkdirs();
-
-        int width = getWallpaperDesiredMinimumWidth();
-        int height = getWallpaperDesiredMinimumHeight();
-        intent.putExtra("outputX", width);
-        intent.putExtra("outputY", height);
-        intent.putExtra("aspectX", width);
-        intent.putExtra("aspectY", height);
-        intent.putExtra("scale", true);
-        intent.putExtra("noFaceDetection", true);
-        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTempFile));
-        intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.name());
-        // TODO: we should have an extra called "setWallpaper" to ask CropImage
-        // to set the cropped image as a wallpaper directly. This means the
-        // SetWallpaperThread should be moved out of this class to CropImage
-    }
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if ((requestCode == PHOTO_PICKED || requestCode == CROP_DONE)
-                && (resultCode == RESULT_OK) && (data != null)) {
-            try {
-                InputStream s = new FileInputStream(mTempFile);
-                try {
-                    Bitmap bitmap = BitmapFactory.decodeStream(s);
-                    if (bitmap == null) {
-                        Log.e(TAG, "Failed to set wallpaper. "
-                                + "Couldn't get bitmap for path " + mTempFile);
-                    } else {
-                        mHandler.sendEmptyMessage(MSG_SHOW_PROGRESS);
-                        new SetWallpaperThread(bitmap, mHandler, this, mTempFile).start();
-                    }
-                    mDoLaunch = false;
-                } finally {
-                    Utils.closeSilently(s);
-                }
-            } catch (FileNotFoundException ex) {
-                Log.e(TAG, "file not found: " + mTempFile, ex);
-            }
-        } else {
-            setResult(RESULT_CANCELED);
-            finish();
-        }
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/data/BlobCache.java b/new3d/src/com/android/gallery3d/data/BlobCache.java
deleted file mode 100644
index 7f900f4..0000000
--- a/new3d/src/com/android/gallery3d/data/BlobCache.java
+++ /dev/null
@@ -1,615 +0,0 @@
-/*
- * 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.
- */
-
-// This is an on-disk cache which maps a 64-bits key to a byte array.
-//
-// It consists of three files: one index file and two data files. One of the
-// data files is "active", and the other is "inactive". New entries are
-// appended into the active region until it reaches the size limit. At that
-// point the active file and the inactive file are swapped, and the new active
-// file is truncated to empty (and the index for that file is also cleared).
-// The index is a hash table with linear probing. When the load factor reaches
-// 0.5, it does the same thing like when the size limit is reached.
-//
-// The index file format: (all numbers are stored in little-endian)
-// [0]  Magic number: 0xB3273030
-// [4]  MaxEntries: Max number of hash entries per region.
-// [8]  MaxBytes: Max number of data bytes per region (including header).
-// [12] ActiveRegion: The active growing region: 0 or 1.
-// [16] ActiveEntries: The number of hash entries used in the active region.
-// [20] ActiveBytes: The number of data bytes used in the active region.
-// [24] Reserved (should be 0).
-// [28] Checksum of [0..28).
-// [32] Hash entries for region 0. The size is X = (12 * MaxEntries bytes).
-// [32 + X] Hash entries for region 1. The size is also X.
-//
-// Each hash entry is 12 bytes: 8 bytes key and 4 bytes offset into the data
-// file. The offset is 0 when the slot is free. Note that 0 is a valid value
-// for key. The keys are used directly as index into a hash table, so they
-// should be suitably distributed.
-//
-// Each data file stores data for one region. The data file is concatenated
-// blobs followed by the magic number 0xBD248510.
-//
-// The blob format:
-// [0]  Key of this blob
-// [8]  Checksum of this blob
-// [12] Offset of this blob
-// [16] Length of this blob (not including header)
-// [20] Blob
-//
-// Below are the interface for BlobCache. The instance of this class does not
-// support concurrent use by multiple threads.
-//
-// public BlobCache(String path, int maxEntries, int maxBytes, boolean reset) throws IOException;
-// public void insert(long key, byte[] data) throws IOException;
-// public byte[] lookup(long key) throws IOException;
-// public void lookup(LookupRequest req) throws IOException;
-// public void close();
-// public void syncIndex();
-// public void syncAll();
-//
-package com.android.gallery3d.data;
-
-import android.util.Log;
-
-import java.io.Closeable;
-import java.io.File;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.nio.ByteOrder;
-import java.nio.MappedByteBuffer;
-import java.nio.channels.FileChannel;
-import java.util.zip.Adler32;
-
-public class BlobCache {
-    private static final String TAG = "BlobCache";
-
-    private static final int MAGIC_INDEX_FILE = 0xB3273030;
-    private static final int MAGIC_DATA_FILE = 0xBD248510;
-
-    // index header offset
-    private static final int IH_MAGIC = 0;
-    private static final int IH_MAX_ENTRIES = 4;
-    private static final int IH_MAX_BYTES = 8;
-    private static final int IH_ACTIVE_REGION = 12;
-    private static final int IH_ACTIVE_ENTRIES = 16;
-    private static final int IH_ACTIVE_BYTES = 20;
-    private static final int IH_CHECKSUM = 28;
-    private static final int INDEX_HEADER_SIZE = 32;
-
-    private static final int DATA_HEADER_SIZE = 4;
-
-    // blob header offset
-    private static final int BH_KEY = 0;
-    private static final int BH_CHECKSUM = 8;
-    private static final int BH_OFFSET = 12;
-    private static final int BH_LENGTH = 16;
-    private static final int BLOB_HEADER_SIZE = 20;
-
-    private RandomAccessFile mIndexFile;
-    private RandomAccessFile mDataFile0;
-    private RandomAccessFile mDataFile1;
-    private FileChannel mIndexChannel;
-    private MappedByteBuffer mIndexBuffer;
-
-    private int mMaxEntries;
-    private int mMaxBytes;
-    private int mActiveRegion;
-    private int mActiveEntries;
-    private int mActiveBytes;
-
-    private RandomAccessFile mActiveDataFile;
-    private RandomAccessFile mInactiveDataFile;
-    private int mActiveHashStart;
-    private int mInactiveHashStart;
-    private byte[] mIndexHeader = new byte[INDEX_HEADER_SIZE];
-    private byte[] mBlobHeader = new byte[BLOB_HEADER_SIZE];
-    private Adler32 mAdler32 = new Adler32();
-
-    // Creates the cache. Three files will be created:
-    // path + ".idx", path + ".0", and path + ".1"
-    // The ".0" file and the ".1" file each stores data for a region. Each of
-    // them can grow to the size specified by maxBytes. The maxEntries parameter
-    // specifies the maximum number of entries each region can have. If the
-    // "reset" parameter is true, the cache will be cleared before use.
-    public BlobCache(String path, int maxEntries, int maxBytes, boolean reset)
-            throws IOException {
-        mIndexFile = new RandomAccessFile(path + ".idx", "rw");
-        mDataFile0 = new RandomAccessFile(path + ".0", "rw");
-        mDataFile1 = new RandomAccessFile(path + ".1", "rw");
-
-        if (!reset && loadIndex()) {
-            return;
-        }
-
-        resetCache(maxEntries, maxBytes);
-
-        if (!loadIndex()) {
-            closeAll();
-            throw new IOException("unable to load index");
-        }
-    }
-
-    // Close the cache. All resources are released. No other method should be
-    // called after this is called.
-    public void close() {
-        syncAll();
-        closeAll();
-    }
-
-    private void closeAll() {
-        closeSilently(mIndexChannel);
-        closeSilently(mIndexFile);
-        closeSilently(mDataFile0);
-        closeSilently(mDataFile1);
-    }
-
-    // Returns true if loading index is successful. After this method is called,
-    // mIndexHeader and index header in file should be kept sync.
-    private boolean loadIndex() {
-        try {
-            mIndexFile.seek(0);
-            mDataFile0.seek(0);
-            mDataFile1.seek(0);
-
-            byte[] buf = mIndexHeader;
-            if (mIndexFile.read(buf) != INDEX_HEADER_SIZE) {
-                Log.w(TAG, "cannot read header");
-                return false;
-            }
-
-            if (readInt(buf, IH_MAGIC) != MAGIC_INDEX_FILE) {
-                Log.w(TAG, "cannot read header magic");
-                return false;
-            }
-
-            mMaxEntries = readInt(buf, IH_MAX_ENTRIES);
-            mMaxBytes = readInt(buf, IH_MAX_BYTES);
-            mActiveRegion = readInt(buf, IH_ACTIVE_REGION);
-            mActiveEntries = readInt(buf, IH_ACTIVE_ENTRIES);
-            mActiveBytes = readInt(buf, IH_ACTIVE_BYTES);
-
-            int sum = readInt(buf, IH_CHECKSUM);
-            if (checkSum(buf, 0, IH_CHECKSUM) != sum) {
-                Log.w(TAG, "header checksum does not match");
-                return false;
-            }
-
-            // Sanity check
-            if (mMaxEntries <= 0) {
-                Log.w(TAG, "invalid max entries");
-                return false;
-            }
-            if (mMaxBytes <= 0) {
-                Log.w(TAG, "invalid max bytes");
-                return false;
-            }
-            if (mActiveRegion != 0 && mActiveRegion != 1) {
-                Log.w(TAG, "invalid active region");
-                return false;
-            }
-            if (mActiveEntries < 0 || mActiveEntries > mMaxEntries) {
-                Log.w(TAG, "invalid active entries");
-                return false;
-            }
-            if (mActiveBytes < DATA_HEADER_SIZE || mActiveBytes > mMaxBytes) {
-                Log.w(TAG, "invalid active bytes");
-                return false;
-            }
-
-            // Make sure data file has magic
-            byte[] magic = new byte[4];
-            if (mDataFile0.read(magic) != 4) {
-                Log.w(TAG, "cannot read data file magic");
-                return false;
-            }
-            if (readInt(magic, 0) != MAGIC_DATA_FILE) {
-                Log.w(TAG, "invalid data file magic");
-                return false;
-            }
-            if (mDataFile1.read(magic) != 4) {
-                Log.w(TAG, "cannot read data file magic");
-                return false;
-            }
-            if (readInt(magic, 0) != MAGIC_DATA_FILE) {
-                Log.w(TAG, "invalid data file magic");
-                return false;
-            }
-
-            // Map index file to memory
-            mIndexChannel = mIndexFile.getChannel();
-            mIndexBuffer = mIndexChannel.map(FileChannel.MapMode.READ_WRITE,
-                    0, mIndexFile.length());
-            mIndexBuffer.order(ByteOrder.LITTLE_ENDIAN);
-
-            setActiveVariables();
-            return true;
-        } catch (IOException ex) {
-            Log.e(TAG, "loadIndex failed.", ex);
-            return false;
-        }
-    }
-
-    private void setActiveVariables() throws IOException {
-        mActiveDataFile = (mActiveRegion == 0) ? mDataFile0 : mDataFile1;
-        mInactiveDataFile = (mActiveRegion == 1) ? mDataFile0 : mDataFile1;
-        mActiveDataFile.setLength(mActiveBytes);
-        mActiveDataFile.seek(mActiveBytes);
-
-        mActiveHashStart = INDEX_HEADER_SIZE;
-        mInactiveHashStart = INDEX_HEADER_SIZE;
-
-        if (mActiveRegion == 0) {
-            mInactiveHashStart += mMaxEntries * 12;
-        } else {
-            mActiveHashStart += mMaxEntries * 12;
-        }
-    }
-
-    private void resetCache(int maxEntries, int maxBytes) throws IOException {
-        mIndexFile.setLength(0);  // truncate to zero the index
-        mIndexFile.setLength(INDEX_HEADER_SIZE + maxEntries * 12 * 2);
-        mIndexFile.seek(0);
-        byte[] buf = mIndexHeader;
-        writeInt(buf, IH_MAGIC, MAGIC_INDEX_FILE);
-        writeInt(buf, IH_MAX_ENTRIES, maxEntries);
-        writeInt(buf, IH_MAX_BYTES, maxBytes);
-        writeInt(buf, IH_ACTIVE_REGION, 0);
-        writeInt(buf, IH_ACTIVE_ENTRIES, 0);
-        writeInt(buf, IH_ACTIVE_BYTES, DATA_HEADER_SIZE);
-        writeInt(buf, IH_CHECKSUM, checkSum(buf, 0, IH_CHECKSUM));
-        mIndexFile.write(buf);
-
-        mDataFile0.setLength(0);
-        mDataFile1.setLength(0);
-        mDataFile0.seek(0);
-        mDataFile1.seek(0);
-        writeInt(buf, 0, MAGIC_DATA_FILE);
-        mDataFile0.write(buf, 0, 4);
-        mDataFile1.write(buf, 0, 4);
-    }
-
-    // Flip the active region and the inactive region.
-    private void flipRegion() throws IOException {
-        mActiveRegion = 1 - mActiveRegion;
-        mActiveEntries = 0;
-        mActiveBytes = DATA_HEADER_SIZE;
-
-        writeInt(mIndexHeader, IH_ACTIVE_REGION, mActiveRegion);
-        writeInt(mIndexHeader, IH_ACTIVE_ENTRIES, mActiveEntries);
-        writeInt(mIndexHeader, IH_ACTIVE_BYTES, mActiveBytes);
-        updateIndexHeader();
-
-        setActiveVariables();
-        clearHash(mActiveHashStart);
-        syncIndex();
-    }
-
-    // Sync mIndexHeader to the index file.
-    private void updateIndexHeader() {
-        writeInt(mIndexHeader, IH_CHECKSUM,
-                checkSum(mIndexHeader, 0, IH_CHECKSUM));
-        mIndexBuffer.position(0);
-        mIndexBuffer.put(mIndexHeader);
-    }
-
-    // Clear the hash table starting from the specified offset.
-    private void clearHash(int hashStart) {
-        byte[] zero = new byte[1024];
-        mIndexBuffer.position(hashStart);
-        for (int count = mMaxEntries * 12; count > 0;) {
-            int todo = Math.min(count, 1024);
-            mIndexBuffer.put(zero, 0, todo);
-            count -= todo;
-        }
-    }
-
-    // Inserts a (key, data) pair into the cache.
-    public void insert(long key, byte[] data) throws IOException {
-        if (DATA_HEADER_SIZE + BLOB_HEADER_SIZE + data.length > mMaxBytes) {
-            throw new RuntimeException("blob is too large!");
-        }
-
-        if (mActiveBytes + BLOB_HEADER_SIZE + data.length > mMaxBytes
-                || mActiveEntries * 2 >= mMaxEntries) {
-            flipRegion();
-        }
-
-        if (!lookupInternal(key, mActiveHashStart)) {
-            // If we don't have an existing entry with the same key, increase
-            // the entry count.
-            mActiveEntries++;
-            writeInt(mIndexHeader, IH_ACTIVE_ENTRIES, mActiveEntries);
-        }
-
-        insertInternal(key, data, data.length);
-        updateIndexHeader();
-    }
-
-    // Appends the data to the active file. It also updates the hash entry.
-    // The proper hash entry (suitable for insertion or replacement) must be
-    // pointed by mSlotOffset.
-    private void insertInternal(long key, byte[] data, int length)
-            throws IOException {
-        byte[] header = mBlobHeader;
-        int sum = checkSum(data);
-        writeLong(header, BH_KEY, key);
-        writeInt(header, BH_CHECKSUM, sum);
-        writeInt(header, BH_OFFSET, mActiveBytes);
-        writeInt(header, BH_LENGTH, length);
-        mActiveDataFile.write(header);
-        mActiveDataFile.write(data, 0, length);
-
-        mIndexBuffer.putLong(mSlotOffset, key);
-        mIndexBuffer.putInt(mSlotOffset + 8, mActiveBytes);
-        mActiveBytes += BLOB_HEADER_SIZE + length;
-        writeInt(mIndexHeader, IH_ACTIVE_BYTES, mActiveBytes);
-    }
-
-    public static class LookupRequest {
-        public long key;        // input: the key to find
-        public byte[] buffer;   // input/output: the buffer to store the blob
-        public int length;      // output: the length of the blob
-    }
-
-    // This method is for one-off lookup. For repeated lookup, use the version
-    // accepting LookupRequest to avoid repeated memory allocation.
-    private LookupRequest mLookupRequest = new LookupRequest();
-    public byte[] lookup(long key) throws IOException {
-        mLookupRequest.key = key;
-        mLookupRequest.buffer = null;
-        if (lookup(mLookupRequest)) {
-            return mLookupRequest.buffer;
-        } else {
-            return null;
-        }
-    }
-
-    // Returns true if the associated blob for the given key is available.
-    // The blob is stored in the buffer pointed by req.buffer, and the length
-    // is in stored in the req.length variable.
-    //
-    // The user can input a non-null value in req.buffer, and this method will
-    // try to use that buffer. If that buffer is not large enough, this method
-    // will allocate a new buffer and assign it to req.buffer.
-    //
-    // This method tries not to throw IOException even if the data file is
-    // corrupted, but it can still throw IOException if things get strange.
-    public boolean lookup(LookupRequest req) throws IOException {
-        // Look up in the active region first.
-        if (lookupInternal(req.key, mActiveHashStart)) {
-            if (getBlob(mActiveDataFile, mFileOffset, req)) {
-                return true;
-            }
-        }
-
-        // We want to copy the data from the inactive file to the active file
-        // if it's available. So we keep the offset of the hash entry so we can
-        // avoid looking it up again.
-        int insertOffset = mSlotOffset;
-
-        // Look up in the inactive region.
-        if (lookupInternal(req.key, mInactiveHashStart)) {
-            if (getBlob(mInactiveDataFile, mFileOffset, req)) {
-                // If we don't have enough space to insert this blob into
-                // the active file, just return it.
-                if (mActiveBytes + BLOB_HEADER_SIZE + req.length > mMaxBytes
-                    || mActiveEntries * 2 >= mMaxEntries) {
-                    return true;
-                }
-                // Otherwise copy it over.
-                mSlotOffset = insertOffset;
-                try {
-                    insertInternal(req.key, req.buffer, req.length);
-                    mActiveEntries++;
-                    writeInt(mIndexHeader, IH_ACTIVE_ENTRIES, mActiveEntries);
-                    updateIndexHeader();
-                } catch (Throwable t) {
-                    Log.e(TAG, "cannot copy over");
-                }
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-
-    // Copies the blob for the specified offset in the specified file to
-    // req.buffer. If req.buffer is null or too small, allocate a buffer and
-    // assign it to req.buffer.
-    // Returns false if the blob is not available (either the index file is
-    // not sync with the data file, or one of them is corrupted). The length
-    // of the blob is stored in the req.length variable.
-    private boolean getBlob(RandomAccessFile file, int offset,
-            LookupRequest req) throws IOException {
-        byte[] header = mBlobHeader;
-        long oldPosition = file.getFilePointer();
-        try {
-            file.seek(offset);
-            if (file.read(header) != BLOB_HEADER_SIZE) {
-                Log.w(TAG, "cannot read blob header");
-                return false;
-            }
-            long blobKey = readLong(header, BH_KEY);
-            if (blobKey != req.key) {
-                Log.w(TAG, "blob key does not match: " + blobKey);
-                return false;
-            }
-            int sum = readInt(header, BH_CHECKSUM);
-            int blobOffset = readInt(header, BH_OFFSET);
-            if (blobOffset != offset) {
-                Log.w(TAG, "blob offset does not match: " + blobOffset);
-                return false;
-            }
-            int length = readInt(header, BH_LENGTH);
-            if (length < 0 || length > mMaxBytes - offset - BLOB_HEADER_SIZE) {
-                Log.w(TAG, "invalid blob length: " + length);
-                return false;
-            }
-            if (req.buffer == null || req.buffer.length < length) {
-                req.buffer = new byte[length];
-            }
-
-            byte[] blob = req.buffer;
-            req.length = length;
-
-            if (file.read(blob, 0, length) != length) {
-                Log.w(TAG, "cannot read blob data");
-                return false;
-            }
-            if (checkSum(blob, 0, length) != sum) {
-                Log.w(TAG, "blob checksum does not match: " + sum);
-                return false;
-            }
-            return true;
-        } catch (Throwable t)  {
-            Log.e(TAG, "getBlob failed.", t);
-            return false;
-        } finally {
-            file.seek(oldPosition);
-        }
-    }
-
-    // Tries to look up a key in the specified hash region.
-    // Returns true if the lookup is successful.
-    // The slot offset in the index file is saved in mSlotOffset. If the lookup
-    // is successful, it's the slot found. Otherwise it's the slot suitable for
-    // insertion.
-    // If the lookup is successful, the file offset is also saved in
-    // mFileOffset.
-    private int mSlotOffset;
-    private int mFileOffset;
-    private boolean lookupInternal(long key, int hashStart) throws IOException {
-        int slot = (int) (key % mMaxEntries);
-        if (slot < 0) slot += mMaxEntries;
-        int slotBegin = slot;
-        while (true) {
-            int offset = hashStart + slot * 12;
-            long candidateKey = mIndexBuffer.getLong(offset);
-            int candidateOffset = mIndexBuffer.getInt(offset + 8);
-            if (candidateOffset == 0) {
-                mSlotOffset = offset;
-                return false;
-            } else if (candidateKey == key) {
-                mSlotOffset = offset;
-                mFileOffset = candidateOffset;
-                return true;
-            } else {
-                if (++slot >= mMaxEntries) {
-                    slot = 0;
-                }
-                if (slot == slotBegin) {
-                    Log.w(TAG, "corrupted index: clear the slot.");
-                    mIndexBuffer.putInt(hashStart + slot * 12 + 8, 0);
-                }
-            }
-        }
-    }
-
-    public void syncIndex() {
-        try {
-            mIndexBuffer.force();
-        } catch (Throwable t) {
-            Log.w(TAG, "sync index failed", t);
-        }
-    }
-
-    public void syncAll() {
-        syncIndex();
-        try {
-            mDataFile0.getFD().sync();
-        } catch (Throwable t) {
-            Log.w(TAG, "sync data file 0 failed", t);
-        }
-        try {
-            mDataFile1.getFD().sync();
-        } catch (Throwable t) {
-            Log.w(TAG, "sync data file 1 failed", t);
-        }
-    }
-
-    // This is for testing only.
-    //
-    // Returns the active count (mActiveEntries). This also verifies that
-    // the active count matches matches what's inside the hash region.
-    int getActiveCount() {
-        int count = 0;
-        for (int i = 0; i < mMaxEntries; i++) {
-            int offset = mActiveHashStart + i * 12;
-            long candidateKey = mIndexBuffer.getLong(offset);
-            int candidateOffset = mIndexBuffer.getInt(offset + 8);
-            if (candidateOffset != 0) ++count;
-        }
-        if (count == mActiveEntries) {
-            return count;
-        } else {
-            Log.e(TAG, "wrong active count: " + mActiveEntries + " vs " + count);
-            return -1;  // signal failure.
-        }
-    }
-
-    int checkSum(byte[] data) {
-        mAdler32.reset();
-        mAdler32.update(data);
-        return (int) mAdler32.getValue();
-    }
-
-    int checkSum(byte[] data, int offset, int nbytes) {
-        mAdler32.reset();
-        mAdler32.update(data, offset, nbytes);
-        return (int) mAdler32.getValue();
-    }
-
-    static void closeSilently(Closeable c) {
-        if (c == null) return;
-        try {
-            c.close();
-        } catch (Throwable t) {
-            // do nothing
-        }
-    }
-
-    static int readInt(byte[] buf, int offset) {
-        return (buf[offset] & 0xff)
-                | ((buf[offset + 1] & 0xff) << 8)
-                | ((buf[offset + 2] & 0xff) << 16)
-                | ((buf[offset + 3] & 0xff) << 24);
-    }
-
-    static long readLong(byte[] buf, int offset) {
-        long result = buf[offset + 7] & 0xff;
-        for (int i = 6; i >= 0; i--) {
-            result = (result << 8) | (buf[offset + i] & 0xff);
-        }
-        return result;
-    }
-
-    static void writeInt(byte[] buf, int offset, int value) {
-        for (int i = 0; i < 4; i++) {
-            buf[offset + i] = (byte) (value & 0xff);
-            value >>= 8;
-        }
-    }
-
-    static void writeLong(byte[] buf, int offset, long value) {
-        for (int i = 0; i < 8; i++) {
-            buf[offset + i] = (byte) (value & 0xff);
-            value >>= 8;
-        }
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/data/ComboAlbumSet.java b/new3d/src/com/android/gallery3d/data/ComboAlbumSet.java
deleted file mode 100644
index ec255ac..0000000
--- a/new3d/src/com/android/gallery3d/data/ComboAlbumSet.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.data;
-
-// ComboAlbumSet combines multiple media sets into one. It lists all sub
-// media sets from the input album sets.
-// This only handles SubMediaSets, not MediaItems. (That's all we need now)
-public class ComboAlbumSet extends MediaSet implements MediaSet.MediaSetListener {
-    private static final String TAG = "ComboAlbumSet";
-    private final MediaSet[] mSets;
-    private long mUniqueId;
-
-    public ComboAlbumSet(DataManager dataManager, int parentId, int childKey,
-            MediaSet ... mediaSets) {
-        mUniqueId = dataManager.obtainSetId(parentId, childKey, this);
-        mSets = mediaSets;
-        for (MediaSet set : mSets) {
-            set.setContentListener(this);
-        }
-    }
-
-    @Override
-    public long getUniqueId() {
-        return mUniqueId;
-    }
-
-    @Override
-    public MediaSet getSubMediaSet(int index) {
-        for (MediaSet set : mSets) {
-            int size = set.getSubMediaSetCount();
-            if (index < size) {
-                return set.getSubMediaSet(index);
-            }
-            index -= size;
-        }
-        throw new IndexOutOfBoundsException();
-    }
-
-    @Override
-    public int getSubMediaSetCount() {
-        int count = 0;
-        for (MediaSet set : mSets) {
-            count += set.getSubMediaSetCount();
-        }
-        return count;
-    }
-
-    @Override
-    public String getName() {
-        return TAG;
-    }
-
-    @Override
-    public int getTotalMediaItemCount() {
-        int count = 0;
-        for (MediaSet set : mSets) {
-            count += set.getTotalMediaItemCount();
-        }
-        return count;
-    }
-
-    @Override
-    public boolean reload() {
-        boolean changed = false;
-        for (MediaSet set : mSets) {
-            changed |= set.reload();
-        }
-        return changed;
-    }
-
-    public void onContentDirty() {
-        if (mListener != null) {
-            mListener.onContentDirty();
-        }
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/data/DataManager.java b/new3d/src/com/android/gallery3d/data/DataManager.java
deleted file mode 100644
index 95f01e7..0000000
--- a/new3d/src/com/android/gallery3d/data/DataManager.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.data;
-
-import android.net.Uri;
-import android.os.HandlerThread;
-import android.os.Looper;
-import android.os.Process;
-import android.util.Log;
-
-import com.android.gallery3d.app.GalleryContext;
-import com.android.gallery3d.util.IdentityCache;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-// DataManager manages all media sets and media items in the system.
-//
-// Current organization:
-// ComboMediaSet
-//   -- MergeAlbumSet
-//       -- LocalAlbumSet(isImage=true) .. LocalAlbum(isImage=true) .. LocalImage
-//       -- LocalAlbumSet(isImage=false) .. LocalAlbum(isImage=false) .. LocalVideo
-//   -- PicasaAlbumSet .. PicasaAlbum .. PicasaImage
-//
-// Each MediaSet and MediaItem has a unique 64 bits id. The most significant
-// 32 bits represents its parent, and the least significant 32 bits represents
-// the self id. For MediaSet the self id is is globally unique, but for
-// MediaItem it's unique only relative to its parent.
-//
-// To make sure the id is the same when the MediaSet is re-created, a key
-// is provided to obtainSetId() to make sure the same self id will be used as
-// when the parent and key are the same.
-
-public class DataManager {
-    private static final String TAG = "DataManager";
-    private static int PICASA_CACHE_MAX_ENTRIES = 5000;
-    private static int PICASA_CACHE_MAX_BYTES = 200 * 1024 * 1024;
-    private static String PICASA_CACHE_FILE = "/picasaweb";
-
-    // This is a predefined parent id for sets created directly by DataManager.
-    public static final int ID_ROOT = 0;
-
-    // This is predefined child key for sets.
-    public static final int KEY_COMBO = 0;
-    public static final int KEY_MERGE = 1;
-    public static final int KEY_LOCAL_IMAGE = 2;
-    public static final int KEY_LOCAL_VIDEO = 3;
-    public static final int KEY_PICASA = 4;
-
-    private GalleryContext mContext;
-    private MediaSet mRootSet;
-    private HandlerThread mDataThread;
-    private IdentityCache<Integer, MediaSet> mMediaSetCache;
-    private HashMap<Long, Integer> mKeyToSelfId;
-    private BlobCache mPicasaCache = null;
-
-    public DataManager(GalleryContext context) {
-        mContext = context;
-        mMediaSetCache = new IdentityCache<Integer, MediaSet>();
-        mKeyToSelfId = new HashMap<Long, Integer>();
-    }
-
-    public static long makeId(int parent, int self) {
-        long result = parent;
-        return (result << 32) | (self & 0xffffffffL);
-    }
-
-    public static int extractSelfId(long id) {
-        return (int) id;
-    }
-
-    public static int extractParentId(long id) {
-        return (int) (id >> 32);
-    }
-
-    private int mNextSelfId = 1;
-    public long obtainSetId(int parentId, int childKey, MediaSet self) {
-        long key = parentId;
-        key = (key << 32) | (childKey & 0xffffffffL);
-
-        int selfId;
-        Integer value = mKeyToSelfId.get(key);
-
-        if (value != null) {
-            selfId = value;
-        } else {
-            while (mMediaSetCache.get(mNextSelfId) != null
-                    || mNextSelfId == ID_ROOT) {
-                ++mNextSelfId;
-            }
-            selfId = mNextSelfId++;
-            mKeyToSelfId.put(key, selfId);
-        }
-
-        mMediaSetCache.put(selfId, self);
-        return makeId(parentId, selfId);
-    }
-
-    // Return null when we cannot instantiate a BlobCache, e.g.:
-    // there is no SD card found.
-    public BlobCache getPicasaCache() {
-        if (mPicasaCache == null) {
-            String path = getPicasaCachePath();
-            if (path == null) {
-                return null;
-            } else {
-                try {
-                    mPicasaCache = new BlobCache(path, PICASA_CACHE_MAX_ENTRIES,
-                            PICASA_CACHE_MAX_BYTES, false);
-                } catch (IOException e) {
-                    Log.e(TAG, "Cannot instantiate Picasaweb Cache!", e);
-                }
-            }
-        }
-        return mPicasaCache;
-    }
-
-    private String getPicasaCachePath() {
-        File cacheDir = mContext.getAndroidContext().getExternalCacheDir();
-        return cacheDir == null
-                ? null
-                : cacheDir.getAbsolutePath() + PICASA_CACHE_FILE;
-    }
-
-    public MediaSet getRootSet() {
-        if (mRootSet == null) {
-            PicasaAlbumSet picasaSet = new PicasaAlbumSet(
-                    ID_ROOT, KEY_PICASA, mContext);
-            LocalAlbumSet localImageSet = new LocalAlbumSet(
-                    ID_ROOT, KEY_LOCAL_IMAGE, mContext, true);
-            LocalAlbumSet localVideoSet = new LocalAlbumSet(
-                    ID_ROOT, KEY_LOCAL_VIDEO, mContext, false);
-
-            MediaSet localSet = new MergeAlbumSet(
-                    this, ID_ROOT, KEY_MERGE,
-                    LocalAlbum.sDateTakenComparator,
-                    localImageSet, localVideoSet);
-
-            mRootSet = new ComboAlbumSet(
-                    this, ID_ROOT, KEY_COMBO,
-                    localSet, picasaSet);
-            mRootSet.reload();
-        }
-        return mRootSet;
-    }
-
-    public synchronized Looper getDataLooper() {
-        if (mDataThread == null ) {
-            mDataThread = new HandlerThread(
-                    "DataThread", Process.THREAD_PRIORITY_BACKGROUND);
-            mDataThread.start();
-        }
-        return mDataThread.getLooper();
-    }
-
-    public MediaSet getMediaSet(int id) {
-        return mMediaSetCache.get(id);
-    }
-
-    public MediaSet getMediaSet(int parentId, int childKey) {
-        long key = parentId;
-        key = (key << 32) | (childKey & 0xffffffffL);
-
-        Integer selfId = mKeyToSelfId.get(key);
-        if (selfId == null) return null;
-
-        return getMediaSet(selfId);
-    }
-
-    public int getSupportedOperations(long uniqueId) {
-        int parentId = DataManager.extractParentId(uniqueId);
-        MediaSet parent = getMediaSet(parentId);
-        return parent.getSupportedOperations(uniqueId);
-    }
-
-    public void delete(long uniqueId) {
-        int parentId = DataManager.extractParentId(uniqueId);
-        MediaSet parent = getMediaSet(parentId);
-        parent.delete(uniqueId);
-    }
-
-    public void rotate(long uniqueId, int degrees) {
-        int parentId = DataManager.extractParentId(uniqueId);
-        MediaSet parent = getMediaSet(parentId);
-        parent.rotate(uniqueId, degrees);
-    }
-
-    public Uri getMediaItemUri(long uniqueId) {
-        int parentId = DataManager.extractParentId(uniqueId);
-        MediaSet parent = getMediaSet(parentId);
-        return parent.getMediaItemUri(uniqueId);
-    }
-
-    public int getMediaType(long uniqueId) {
-        int parentId = DataManager.extractParentId(uniqueId);
-        MediaSet parent = getMediaSet(parentId);
-        return parent.getMediaType(uniqueId);
-    }
-
-    public Map<Integer, String> getDetails(long uniqueId) {
-        // TODO: implement get details
-        return null;
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/data/DecodeService.java b/new3d/src/com/android/gallery3d/data/DecodeService.java
deleted file mode 100644
index 7213698..0000000
--- a/new3d/src/com/android/gallery3d/data/DecodeService.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.data;
-
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.LargeBitmap;
-import android.graphics.BitmapFactory.Options;
-import android.util.Log;
-
-import com.android.gallery3d.util.Future;
-import com.android.gallery3d.util.FutureListener;
-import com.android.gallery3d.util.FutureTask;
-import com.android.gallery3d.util.Utils;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.concurrent.Callable;
-import java.util.concurrent.Executor;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-public class DecodeService {
-    private static final String TAG = "DecodeService";
-
-    private static final int CORE_POOL_SIZE = 1;
-    private static final int MAX_POOL_SIZE = 1;
-    private static final int KEEP_ALIVE_TIME = 10000; // 10 seconds
-    private static final int JPEG_MARK_POSITION = 60 * 1024;
-
-    private final Executor mExecutor = new ThreadPoolExecutor(
-            CORE_POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_TIME,
-            TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
-
-    public Future<Bitmap> requestDecode(
-            File file, Options options, FutureListener<? super Bitmap> listener) {
-        if (options == null) options = new Options();
-        FutureTask<Bitmap> task = new DecodeFutureTask(
-                new DecodeFile(file, options), options, listener);
-        mExecutor.execute(task);
-        return task;
-    }
-
-    public FutureTask<Bitmap> requestDecode(
-            byte[] bytes, Options options, FutureListener<? super Bitmap> listener) {
-        return requestDecode(bytes, 0, bytes.length, options, listener);
-    }
-
-    public FutureTask<Bitmap> requestDecode(
-            byte[] bytes, int offset, int length,
-            Options options, FutureListener<? super Bitmap> listener) {
-        if (options == null) options = new Options();
-        if (offset < 0 || length <= 0 || offset + length > bytes.length) {
-            throw new IllegalArgumentException(String.format(
-                    "offset = %s, length = %s, bytes = %s",
-                    offset, length, bytes.length));
-        }
-        FutureTask<Bitmap> task = new DecodeFutureTask(
-                new DecodeByteArray(bytes, offset, length, options),
-                options, listener);
-        mExecutor.execute(task);
-        return task;
-    }
-
-    public FutureTask<Bitmap> requestDecode(
-            File file, Options options, int targetLength, int maxPixelCount,
-            FutureListener<? super Bitmap> listener) {
-        if (options == null) options = new Options();
-        FutureTask<Bitmap> task = new DecodeFutureTask(
-                new DecodeAndSampleFile(file, options, targetLength, maxPixelCount),
-                options, listener);
-        mExecutor.execute(task);
-        return task;
-    }
-
-    public FutureTask<LargeBitmap> requestCreateLargeBitmap(
-            byte[] bytes, int offset, int length,
-            FutureListener<? super LargeBitmap> listener) {
-        if (offset < 0 || length <= 0 || offset + length > bytes.length) {
-            throw new IllegalArgumentException(String.format(
-                    "offset = %s, length = %s, bytes = %s",
-                    offset, length, bytes.length));
-        }
-        FutureTask<LargeBitmap> task = new FutureTask<LargeBitmap>(
-                new CreateLargeBitampFromByteArray(
-                        bytes, offset, length, false), listener);
-        mExecutor.execute(task);
-        return task;
-    }
-
-    public FutureTask<LargeBitmap> requestCreateLargeBitmap(
-            String filePath, FutureListener<? super LargeBitmap> listener) {
-        FutureTask<LargeBitmap> task = new FutureTask<LargeBitmap>(
-                new CreateLargeBitampFromFilePath(filePath, false), listener);
-        mExecutor.execute(task);
-        return task;
-    }
-
-    private static class DecodeFutureTask extends FutureTask<Bitmap> {
-
-        private final Options mOptions;
-
-        public DecodeFutureTask(Callable<Bitmap> callable,
-                Options options, FutureListener<? super Bitmap> listener) {
-            super(callable, listener);
-            mOptions = options;
-        }
-
-        @Override
-        public void cancelTask() {
-            mOptions.requestCancelDecode();
-        }
-    }
-
-    private static class DecodeFile implements Callable<Bitmap> {
-
-        private final File mFile;
-        private final Options mOptions;
-
-        public DecodeFile(File file, Options options) {
-            mFile = file;
-            mOptions = options;
-        }
-
-        public Bitmap call() throws Exception {
-            return BitmapFactory.decodeFile(mFile.getAbsolutePath(), mOptions);
-        }
-    }
-
-    private static class DecodeByteArray implements Callable<Bitmap> {
-        private final byte[] mBytes;
-        private final Options mOptions;
-        private final int mOffset;
-        private final int mLength;
-
-        public DecodeByteArray(
-                byte bytes[], int offset, int length, Options options) {
-            mBytes = bytes;
-            mOffset = offset;
-            mLength = length;
-            mOptions = options;
-        }
-
-        public Bitmap call() throws Exception {
-            return BitmapFactory.decodeByteArray(mBytes, mOffset, mLength, mOptions);
-        }
-    }
-
-    private static class CreateLargeBitampFromByteArray implements
-            Callable<LargeBitmap> {
-        private final byte[] mBytes;
-        private final int mOffset;
-        private final int mLength;
-        private final boolean mIsShareable;
-
-        public CreateLargeBitampFromByteArray(
-                byte bytes[], int offset, int length, boolean isShareable) {
-            mBytes = bytes;
-            mOffset = offset;
-            mLength = length;
-            mIsShareable = isShareable;
-        }
-
-        public LargeBitmap call() throws Exception {
-            return BitmapFactory.createLargeBitmap(mBytes, mOffset, mLength,
-                    mIsShareable);
-        }
-    }
-
-    private static class CreateLargeBitampFromFilePath implements
-            Callable<LargeBitmap> {
-        private final String mFilePath;
-        private final boolean mIsShareable;
-
-        public CreateLargeBitampFromFilePath(
-                String filePath, boolean isShareable) {
-            mFilePath = filePath;
-            mIsShareable = isShareable;
-        }
-
-        public LargeBitmap call() throws Exception {
-            return BitmapFactory.createLargeBitmap(mFilePath, mIsShareable);
-        }
-    }
-
-    private static class DecodeAndSampleFile implements Callable<Bitmap> {
-
-        private final int mTargetLength;
-        private final int mMaxPixelCount;
-        private final File mFile;
-        private final Options mOptions;
-
-        public DecodeAndSampleFile(
-                File file, Options options, int targetLength, int maxPixelCount) {
-            mFile = file;
-            mOptions = options;
-            mTargetLength = targetLength;
-            mMaxPixelCount = maxPixelCount;
-        }
-
-        public Bitmap call() throws IOException {
-            BufferedInputStream bis = new BufferedInputStream(
-                    new FileInputStream(mFile), JPEG_MARK_POSITION);
-            try {
-                // Decode bufferedInput for calculating a sample size.
-                final BitmapFactory.Options options = mOptions;
-                options.inJustDecodeBounds = true;
-                bis.mark(JPEG_MARK_POSITION);
-                BitmapFactory.decodeStream(bis, null, options);
-                if (options.mCancel) return null;
-
-                try {
-                    bis.reset();
-                } catch (IOException e) {
-                    Log.w(TAG, "failed in resetting the buffer after reading the jpeg header", e);
-                    bis.close();
-                    bis = new BufferedInputStream(new FileInputStream(mFile));
-                }
-
-                options.inSampleSize =  Utils.computeSampleSize(
-                        options, mTargetLength, mMaxPixelCount);
-                options.inJustDecodeBounds = false;
-                return BitmapFactory.decodeStream(bis, null, options);
-            } finally {
-                bis.close();
-            }
-        }
-
-    }
-
-}
diff --git a/new3d/src/com/android/gallery3d/data/DownloadService.java b/new3d/src/com/android/gallery3d/data/DownloadService.java
deleted file mode 100644
index 47246e5..0000000
--- a/new3d/src/com/android/gallery3d/data/DownloadService.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.data;
-
-import com.android.gallery3d.util.FutureListener;
-import com.android.gallery3d.util.FutureTask;
-
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.concurrent.Callable;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-public class DownloadService {
-    private static final int CORE_POOL_SIZE = 2;
-    private static final int MAX_POOL_SIZE = 4;
-    private static final int KEEP_ALIVE_TIME = 10000;
-
-    private final ThreadPoolExecutor mExecutor = new ThreadPoolExecutor(
-            CORE_POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_TIME,
-            TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
-
-    public FutureTask<Void> requestDownload(
-            URL url, File file, FutureListener<Void> listener) {
-        FutureTask<Void> task = new FutureTask<Void>(
-                new DownloadToFile(url, file), listener);
-        mExecutor.execute(task);
-        return task;
-    }
-
-    public FutureTask<byte[]> requestDownload(
-            URL url, FutureListener<? super byte[]> listener) {
-        FutureTask<byte[]> task = new FutureTask<byte[]>(
-                new DownloadToByteArray(url), listener);
-        mExecutor.execute(task);
-        return task;
-    }
-
-    private static void download(URL url, OutputStream output) throws IOException {
-        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
-        try {
-            if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
-                throw new RuntimeException(String.format("connection error: %s - %s",
-                        conn.getResponseCode(), conn.getResponseMessage()));
-            }
-            InputStream input = conn.getInputStream();
-            byte buffer[] = new byte[4096];
-            int rc = input.read(buffer, 0, buffer.length);
-            while (rc > 0) {
-                output.write(buffer, 0, rc);
-                rc = input.read(buffer, 0, buffer.length);
-            }
-        } finally {
-            conn.disconnect();
-        }
-    }
-
-    private static class DownloadToFile implements Callable<Void> {
-
-        private final URL mUrl;
-        private final File mFile;
-
-        public DownloadToFile(URL url, File file) {
-            mUrl = url;
-            mFile = file;
-        }
-
-        public Void call() throws Exception {
-            BufferedOutputStream bos =
-                    new BufferedOutputStream(new FileOutputStream(mFile));
-            try {
-                download(mUrl, bos);
-                return null;
-            } finally {
-                bos.close();
-            }
-        }
-    }
-
-    private static class DownloadToByteArray implements Callable<byte[]> {
-        private final URL mUrl;
-
-        public DownloadToByteArray(URL url) {
-            mUrl = url;
-        }
-
-        public byte[] call() throws Exception {
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            try {
-                download(mUrl, baos);
-                return baos.toByteArray();
-            } finally {
-                baos.close();
-            }
-        }
-    }
-
-}
diff --git a/new3d/src/com/android/gallery3d/data/ImageService.java b/new3d/src/com/android/gallery3d/data/ImageService.java
deleted file mode 100644
index 485db0d..0000000
--- a/new3d/src/com/android/gallery3d/data/ImageService.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.data;
-
-import android.content.ContentResolver;
-import android.graphics.Bitmap;
-import android.os.Process;
-import android.provider.MediaStore.Images;
-import android.provider.MediaStore.Video;
-
-import com.android.gallery3d.util.Future;
-import com.android.gallery3d.util.FutureHelper;
-import com.android.gallery3d.util.FutureListener;
-import com.android.gallery3d.util.Utils;
-
-import java.util.concurrent.Executor;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicInteger;
-
-public class ImageService {
-    private static final String TAG = "ImageService";
-
-    private static final int MICRO_TARGET_PIXELS = 128 * 128;
-    private static final int CORE_POOL_SIZE = 1;
-    private static final int MAX_POOL_SIZE = 1;
-    private static final int KEEP_ALIVE_TIME = 10000; // 10 seconds
-
-    private final Executor mExecutor = new ThreadPoolExecutor(
-            CORE_POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_TIME,
-            TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(),
-            new MyThreadFactory());
-
-    private final ContentResolver mContentResolver;
-
-    public ImageService(ContentResolver contentResolver) {
-        mContentResolver = contentResolver;
-    }
-
-    public Future<Bitmap> requestImageThumbnail(
-            int id, int type, FutureListener<? super Bitmap> listener) {
-        if (type != MediaItem.TYPE_MICROTHUMBNAIL
-                && type != MediaItem.TYPE_THUMBNAIL) {
-            throw new IllegalArgumentException(String.format("type = %s", type));
-        }
-        GetImageThumbnail task =
-                new GetImageThumbnail(id, type, mContentResolver, listener);
-        mExecutor.execute(task);
-        return task;
-    }
-
-    public Future<Bitmap> requestVideoThumbnail(
-            int id, int type, FutureListener<? super Bitmap> listener) {
-        if (type != MediaItem.TYPE_MICROTHUMBNAIL
-                && type != MediaItem.TYPE_THUMBNAIL
-                && type != MediaItem.TYPE_FULL_IMAGE) {
-            throw new IllegalArgumentException(String.format("type = %s", type));
-        }
-        GetVideoThumbnail task =
-            new GetVideoThumbnail(id, type, mContentResolver, listener);
-        mExecutor.execute(task);
-        return task;
-    }
-
-    private static class GetImageThumbnail extends FutureHelper<Bitmap> implements Runnable {
-        private final int STATE_READY = 0;
-        private final int STATE_RUNNING = 1;
-        private final int STATE_CANCELED = 2;
-        private final int STATE_RAN = 4;
-
-        // mState tries to guard that onCancel() is called only when
-        // getThumbnail() is being executed.
-        private AtomicInteger mState = new AtomicInteger(STATE_READY);
-        private final int mId;
-        private final int mType;
-        private final ContentResolver mResolver;
-
-        public GetImageThumbnail(int id, int type, ContentResolver resolver,
-                FutureListener<? super Bitmap> listener) {
-            super(listener);
-            mId = id;
-            mType = type;
-            mResolver= resolver;
-        }
-
-        public void run() {
-            Bitmap bitmap = null;
-            try {
-                bitmap = getThumbnail();
-            } catch (Throwable throwable) {
-                setException(throwable);
-                return;
-            }
-            if (!isCancelled()) {
-                if (bitmap == null && isCancelling()) {
-                    cancelled();
-                } else {
-                    setResult(bitmap);
-                }
-            }
-        }
-
-        @Override
-        protected void onCancel() {
-            if (mState.compareAndSet(STATE_READY, STATE_CANCELED)) {
-                cancelled();
-            } else if (mState.compareAndSet(STATE_RUNNING, STATE_CANCELED)) {
-                switch (mType) {
-                    case MediaItem.TYPE_THUMBNAIL:
-                    case MediaItem.TYPE_MICROTHUMBNAIL:
-                        // TODO: MediaProvider doesn't provide a way to specify
-                        //       which kind of thumbnail to be canceled. We should
-                        //       try to fix the issue in MediaProvider or here.
-                        Images.Thumbnails.cancelThumbnailRequest(mResolver, mId);
-                        break;
-                    default:
-                        throw new IllegalArgumentException();
-                }
-            }
-        }
-
-        private Bitmap getThumbnail() {
-            Bitmap result = null;
-            int kind;
-
-            switch (mType) {
-                case MediaItem.TYPE_THUMBNAIL:
-                    kind = Images.Thumbnails.MINI_KIND;
-                    break;
-                case MediaItem.TYPE_MICROTHUMBNAIL:
-                    kind = Images.Thumbnails.MICRO_KIND;
-                    break;
-                default:
-                    throw new IllegalArgumentException();
-            }
-
-            if (mState.compareAndSet(STATE_READY, STATE_RUNNING)) {
-                result = Images.Thumbnails.getThumbnail(
-                        mResolver, mId, kind, null);
-                mState.compareAndSet(STATE_RUNNING, STATE_RAN);
-            }
-
-            return result;
-        }
-    }
-
-    private static class GetVideoThumbnail extends FutureHelper<Bitmap> implements Runnable {
-        private final int STATE_READY = 0;
-        private final int STATE_RUNNING = 1;
-        private final int STATE_CANCELED = 2;
-        private final int STATE_RAN = 4;
-
-        private AtomicInteger mState = new AtomicInteger(STATE_READY);
-        private final int mId;
-        private final int mType;
-        private final ContentResolver mResolver;
-
-        public GetVideoThumbnail(int id, int type, ContentResolver resolver,
-                FutureListener<? super Bitmap> listener) {
-            super(listener);
-            mId = id;
-            mType = type;
-            mResolver= resolver;
-        }
-
-        public void run() {
-            Bitmap bitmap = null;
-            try {
-                bitmap = getThumbnail();
-            } catch (Throwable throwable) {
-                setException(throwable);
-                return;
-            }
-            if (!isCancelled()) {
-                if (bitmap == null && isCancelling()) {
-                    cancelled();
-                } else {
-                    setResult(bitmap);
-                }
-            }
-        }
-
-        @Override
-        protected void onCancel() {
-            if (mState.compareAndSet(STATE_READY, STATE_CANCELED)) {
-                cancelled();
-            } else if (mState.compareAndSet(STATE_RUNNING, STATE_CANCELED)) {
-                // TODO: fix the issue that we cannot cancel only one request
-                Video.Thumbnails.cancelThumbnailRequest(mResolver, mId);
-            }
-        }
-
-        private Bitmap getThumbnail() {
-            Bitmap result = null;
-            int kind;
-
-            switch (mType) {
-                case MediaItem.TYPE_FULL_IMAGE:
-                case MediaItem.TYPE_THUMBNAIL:
-                    kind = Video.Thumbnails.MINI_KIND;
-                    break;
-                case MediaItem.TYPE_MICROTHUMBNAIL:
-                    kind = Video.Thumbnails.MICRO_KIND;
-                    break;
-                default:
-                    throw new IllegalArgumentException();
-            }
-
-            if (mState.compareAndSet(STATE_READY, STATE_RUNNING)) {
-                result = Video.Thumbnails.getThumbnail(
-                        mResolver, mId, kind, null);
-                mState.compareAndSet(STATE_RUNNING, STATE_RAN);
-            }
-
-            return result;
-        }
-    }
-
-    class MyThreadFactory implements ThreadFactory {
-        public Thread newThread(final Runnable r) {
-            return new Thread() {
-                public void run() {
-                    Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
-                    r.run();
-                }
-            };
-        }
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/data/LocalAlbum.java b/new3d/src/com/android/gallery3d/data/LocalAlbum.java
deleted file mode 100644
index 9572255..0000000
--- a/new3d/src/com/android/gallery3d/data/LocalAlbum.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.data;
-
-import android.content.ContentResolver;
-import android.database.ContentObserver;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Handler;
-import android.provider.MediaStore.Images;
-import android.provider.MediaStore.Video;
-import android.provider.MediaStore.Images.ImageColumns;
-import android.provider.MediaStore.Video.VideoColumns;
-
-import com.android.gallery3d.app.GalleryContext;
-import com.android.gallery3d.util.Utils;
-
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-// LocalAlbumSet lists all media items in one bucket on local storage.
-// The media items need to be all images or all videos, but not both.
-public class LocalAlbum extends MediaSet {
-    private static final String TAG = "LocalAlbum";
-    private static final String[] COUNT_PROJECTION = { "count(*)" };
-    private static final String DELETE_ITEM_WHERE_CLAUSE = "_id=?";
-    private final String mWhereClause;
-    private final String mOrderClause;
-    private final Uri mBaseUri;
-    private final String[] mProjection;
-    public static final Comparator<LocalAlbum> sBucketNameComparator =
-            new BucketNameComparator();
-    public static final Comparator<MediaItem> sDateTakenComparator =
-            new DateTakenComparator();
-
-    private final GalleryContext mContext;
-    private final ContentResolver mResolver;
-    private final int mBucketId;
-    private final String mBucketName;
-    private boolean mIsImage;
-    private long mUniqueId;
-    private AtomicBoolean mContentDirty = new AtomicBoolean(true);
-
-    public LocalAlbum(int parentId, GalleryContext context, int bucketId,
-            String name, boolean isImage) {
-        mContext = context;
-        mResolver = context.getContentResolver();
-        mBucketId = bucketId;
-        mBucketName = name;
-        mIsImage = isImage;
-
-        if (isImage) {
-            mWhereClause = ImageColumns.BUCKET_ID + "=?";
-            mOrderClause = ImageColumns.DATE_TAKEN + " DESC, "
-                    + ImageColumns._ID + " ASC";
-            mBaseUri = Images.Media.EXTERNAL_CONTENT_URI;
-            mProjection = LocalImage.PROJECTION;
-        } else {
-            mWhereClause = VideoColumns.BUCKET_ID + "=?";
-            mOrderClause = VideoColumns.DATE_TAKEN + " DESC, "
-                    + VideoColumns._ID + " ASC";
-            mBaseUri = Video.Media.EXTERNAL_CONTENT_URI;
-            mProjection = LocalVideo.PROJECTION;
-        }
-
-        mUniqueId = context.getDataManager().obtainSetId(parentId, bucketId, this);
-        mResolver.registerContentObserver(mBaseUri, true, new MyContentObserver());
-    }
-
-    @Override
-    public long getUniqueId() {
-        return mUniqueId;
-    }
-
-    @Override
-    public ArrayList<MediaItem> getMediaItem(int start, int count) {
-        ImageService imageService = mContext.getImageService();
-        DataManager dataManager = mContext.getDataManager();
-        Uri uri = mBaseUri.buildUpon()
-                .appendQueryParameter("limit", start + "," + count).build();
-        ArrayList<MediaItem> list = new ArrayList<MediaItem>();
-        Utils.assertNotInRenderThread();
-        Cursor cursor = mResolver.query(
-                uri, mProjection, mWhereClause,
-                new String[]{String.valueOf(mBucketId)},
-                mOrderClause);
-
-        try {
-            while (cursor.moveToNext()) {
-                int myId = getMyId();
-                if (mIsImage) {
-                    list.add(LocalImage.load(myId, mContext, cursor, dataManager));
-                } else {
-                    list.add(LocalVideo.load(myId, imageService, cursor, dataManager));
-                }
-            }
-        } finally {
-            cursor.close();
-        }
-        return list;
-    }
-
-    @Override
-    public int getMediaItemCount() {
-        Utils.assertNotInRenderThread();
-        Cursor cursor = mResolver.query(
-                mBaseUri, COUNT_PROJECTION, mWhereClause,
-                new String[]{String.valueOf(mBucketId)}, null);
-        try {
-            Utils.Assert(cursor.moveToNext());
-            return cursor.getInt(0);
-        } finally {
-            cursor.close();
-        }
-    }
-
-    @Override
-    public String getName() {
-        return mBucketName;
-    }
-
-    @Override
-    public int getTotalMediaItemCount() {
-        return getMediaItemCount();
-    }
-
-    private static class BucketNameComparator implements Comparator<LocalAlbum> {
-        public int compare(LocalAlbum s1, LocalAlbum s2) {
-            int result = s1.mBucketName.compareTo(s2.mBucketName);
-            if (result != 0) return result;
-            return Utils.compare(s1.mBucketId, s2.mBucketId);
-        }
-    }
-
-    private static class DateTakenComparator implements Comparator<MediaItem> {
-        public int compare(MediaItem item1, MediaItem item2) {
-            LocalMediaItem s1 = (LocalMediaItem) item1;
-            LocalMediaItem s2 = (LocalMediaItem) item2;
-            return -Utils.compare(s1.mDateTakenInMs, s2.mDateTakenInMs);
-        }
-    }
-
-    @Override
-    public boolean reload() {
-        return mContentDirty.compareAndSet(true, false);
-    }
-
-    private class MyContentObserver extends ContentObserver {
-        public MyContentObserver() {
-            super(new Handler(mContext.getMainLooper()));
-        }
-
-        @Override
-        public void onChange(boolean selfChange) {
-            if (mContentDirty.compareAndSet(false, true)) {
-                if (mListener != null) mListener.onContentDirty();
-            }
-        }
-    }
-
-    @Override
-    public int getMergeId() {
-        return mBucketId;
-    }
-
-    @Override
-    public int getSupportedOperations(long uniqueId) {
-        return SUPPORT_DELETE | SUPPORT_ROTATE;
-    }
-
-    @Override
-    public void delete(long uniqueId) {
-        Utils.Assert(DataManager.extractParentId(uniqueId) == getMyId());
-        int itemId = DataManager.extractSelfId(uniqueId);
-        Utils.assertNotInRenderThread();
-        mResolver.delete(mBaseUri, DELETE_ITEM_WHERE_CLAUSE,
-                new String[] {String.valueOf(itemId)});
-    }
-
-    @Override
-    public void rotate(long uniqueId, int degrees) {
-        // TODO
-    }
-
-    public Uri getMediaItemUri(long uniqueId) {
-        Utils.Assert(DataManager.extractParentId(uniqueId) == getMyId());
-        int itemId = DataManager.extractSelfId(uniqueId);
-        return mBaseUri.buildUpon().appendPath(String.valueOf(itemId)).build();
-    }
-
-    public void deleteSelf() {
-        Utils.assertNotInRenderThread();
-        mResolver.delete(mBaseUri, mWhereClause,
-                new String[]{String.valueOf(mBucketId)});
-    }
-
-    public int getMediaType(long uniqueId) {
-        return mIsImage ? MEDIA_TYPE_IMAGE : MEDIA_TYPE_VIDEO;
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/data/LocalAlbumSet.java b/new3d/src/com/android/gallery3d/data/LocalAlbumSet.java
deleted file mode 100644
index 2007a15..0000000
--- a/new3d/src/com/android/gallery3d/data/LocalAlbumSet.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.data;
-
-import android.database.ContentObserver;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Handler;
-import android.provider.MediaStore.Images;
-import android.provider.MediaStore.Video;
-import android.provider.MediaStore.Images.ImageColumns;
-import android.provider.MediaStore.Video.VideoColumns;
-
-import com.android.gallery3d.app.GalleryContext;
-import com.android.gallery3d.util.Utils;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-// LocalAlbumSet lists all image or video albums in the local storage.
-public class LocalAlbumSet extends MediaSet {
-    private static final String TAG = "LocalAlbumSet";
-
-    // The indices should match the following projections.
-    private static final int BUCKET_ID_INDEX = 0;
-    private static final int BUCKET_NAME_INDEX = 1;
-
-    private static final String[] PROJECTION_IMAGE_BUCKETS = {
-            ImageColumns.BUCKET_ID,
-            ImageColumns.BUCKET_DISPLAY_NAME };
-
-    private static final String[] PROJECTION_VIDEO_BUCKETS = {
-            VideoColumns.BUCKET_ID,
-            VideoColumns.BUCKET_DISPLAY_NAME };
-
-    private final String[] mProjection;
-    private final Uri mBaseUri;
-
-    private GalleryContext mContext;
-    private boolean mIsImage;
-    private long mUniqueId;
-    private ArrayList<LocalAlbum> mAlbums = new ArrayList<LocalAlbum>();
-    private AtomicBoolean mContentDirty = new AtomicBoolean(true);
-    private final MyContentObserver mContentObserver;
-
-    public LocalAlbumSet(int parentId, int childKey, GalleryContext context,
-            boolean isImage) {
-        mContext = context;
-        mIsImage = isImage;
-        if (isImage) {
-            mProjection = PROJECTION_IMAGE_BUCKETS;
-            mBaseUri = Images.Media.EXTERNAL_CONTENT_URI;
-        } else {
-            mProjection = PROJECTION_VIDEO_BUCKETS;
-            mBaseUri = Video.Media.EXTERNAL_CONTENT_URI;
-        }
-
-        mUniqueId = context.getDataManager().obtainSetId(parentId, childKey, this);
-        mContentObserver = new MyContentObserver();
-        context.getContentResolver().registerContentObserver(
-                mBaseUri, true, mContentObserver);
-    }
-
-    @Override
-    public long getUniqueId() {
-        return mUniqueId;
-    }
-
-    @Override
-    public MediaSet getSubMediaSet(int index) {
-        return mAlbums.get(index);
-    }
-
-    @Override
-    public int getSubMediaSetCount() {
-        return mAlbums.size();
-    }
-
-    @Override
-    public String getName() {
-        return TAG;
-    }
-
-    @Override
-    public int getTotalMediaItemCount() {
-        int total = 0;
-        for (MediaSet album : mAlbums) {
-            total += album.getTotalMediaItemCount();
-        }
-        return total;
-    }
-
-    protected ArrayList<LocalAlbum> loadSubMediaSets() {
-        Uri uri = mBaseUri.buildUpon().
-                appendQueryParameter("distinct", "true").build();
-        Utils.assertNotInRenderThread();
-        Cursor cursor = mContext.getContentResolver().query(
-                uri, mProjection, null, null, null);
-        if (cursor == null) throw new NullPointerException();
-        HashMap<Integer, String> buffer = new HashMap<Integer, String>();
-        try {
-            while (cursor.moveToNext()) {
-                buffer.put(cursor.getInt(BUCKET_ID_INDEX),
-                        cursor.getString(BUCKET_NAME_INDEX));
-            }
-        } finally {
-            cursor.close();
-        }
-
-        ArrayList<LocalAlbum> albums = new ArrayList<LocalAlbum>();
-        DataManager dataManager = mContext.getDataManager();
-        int parentId = getMyId();
-        for (Map.Entry<Integer, String> entry : buffer.entrySet()) {
-            int childKey = entry.getKey();
-            LocalAlbum album = (LocalAlbum) dataManager.getMediaSet(parentId, childKey);
-            if (album == null) {
-                album = new LocalAlbum(parentId, mContext,
-                        childKey, entry.getValue(), mIsImage);
-            }
-            albums.add(album);
-        }
-        for (int i = 0, n = albums.size(); i < n; ++i) {
-            albums.get(i).reload();
-        }
-        Collections.sort(albums, LocalAlbum.sBucketNameComparator);
-        return albums;
-    }
-
-    private class MyContentObserver extends ContentObserver {
-        public MyContentObserver() {
-            super(new Handler(mContext.getMainLooper()));
-        }
-
-        @Override
-        public void onChange(boolean selfChange) {
-            if (mContentDirty.compareAndSet(false, true)) {
-                if (mListener != null) mListener.onContentDirty();
-            }
-        }
-    }
-
-    @Override
-    public int getSupportedOperations(long uniqueId) {
-        return SUPPORT_DELETE;
-    }
-
-    @Override
-    public void delete(long uniqueId) {
-        Utils.Assert(DataManager.extractParentId(uniqueId) == getMyId());
-
-        int childId = DataManager.extractSelfId(uniqueId);
-        LocalAlbum child = (LocalAlbum) mContext.getDataManager().getMediaSet(childId);
-        child.deleteSelf();
-    }
-
-    @Override
-    public boolean reload() {
-        if (!mContentDirty.compareAndSet(true, false)) return false;
-        ArrayList<LocalAlbum> album = loadSubMediaSets();
-        if (album.equals(mAlbums)) return false;
-        mAlbums = album;
-        return true;
-    }
-
-    // For debug only. Fake there is a ContentObserver.onChange() event.
-    void fakeChange() {
-        mContentObserver.dispatchChange(true);
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/data/LocalImage.java b/new3d/src/com/android/gallery3d/data/LocalImage.java
deleted file mode 100644
index 1570661..0000000
--- a/new3d/src/com/android/gallery3d/data/LocalImage.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.data;
-
-import com.android.gallery3d.util.Future;
-import com.android.gallery3d.util.FutureListener;
-
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.LargeBitmap;
-import android.provider.MediaStore.Images.ImageColumns;
-import android.util.Log;
-
-import com.android.gallery3d.app.GalleryContext;
-
-import java.io.File;
-
-// LocalImage represents an image in the local storage.
-public class LocalImage extends LocalMediaItem {
-
-    private static final int MICRO_TARGET_PIXELS = 128 * 128;
-
-    private static final int FULLIMAGE_TARGET_SIZE = 2048;
-    private static final int FULLIMAGE_MAX_NUM_PIXELS = 3 * 1024 * 1024;
-    private static final String TAG = "LocalImage";
-
-    // Must preserve order between these indices and the order of the terms in
-    // the following PROJECTION array.
-    private static final int INDEX_ID = 0;
-    private static final int INDEX_CAPTION = 1;
-    private static final int INDEX_MIME_TYPE = 2;
-    private static final int INDEX_LATITUDE = 3;
-    private static final int INDEX_LONGITUDE = 4;
-    private static final int INDEX_DATE_TAKEN = 5;
-    private static final int INDEX_DATE_ADDED = 6;
-    private static final int INDEX_DATE_MODIFIED = 7;
-    private static final int INDEX_DATA = 8;
-    private static final int INDEX_ORIENTATION = 9;
-
-    static final String[] PROJECTION =  {
-            ImageColumns._ID,           // 0
-            ImageColumns.TITLE,         // 1
-            ImageColumns.MIME_TYPE,     // 2
-            ImageColumns.LATITUDE,      // 3
-            ImageColumns.LONGITUDE,     // 4
-            ImageColumns.DATE_TAKEN,    // 5
-            ImageColumns.DATE_ADDED,    // 6
-            ImageColumns.DATE_MODIFIED, // 7
-            ImageColumns.DATA,          // 8
-            ImageColumns.ORIENTATION};  // 9
-
-    private final BitmapFactory.Options mOptions = new BitmapFactory.Options();
-
-    private long mUniqueId;
-    private int mRotation;
-    private final GalleryContext mContext;
-
-    protected LocalImage(GalleryContext context) {
-        mContext = context;
-    }
-
-    @Override
-    public long getUniqueId() {
-        return mUniqueId;
-    }
-
-    @Override
-    public synchronized Future<Bitmap>
-            requestImage(int type, FutureListener<? super Bitmap> listener) {
-        if (type == TYPE_FULL_IMAGE) {
-            return mContext.getDecodeService().requestDecode(
-                    new File(mFilePath), null, FULLIMAGE_TARGET_SIZE,
-                    FULLIMAGE_MAX_NUM_PIXELS, listener);
-        } else {
-            return mContext.getImageService()
-                    .requestImageThumbnail(mId, type, listener);
-        }
-    }
-
-    public static LocalImage load(int parentId, GalleryContext context,
-            Cursor cursor, DataManager dataManager) {
-        int itemId = cursor.getInt(INDEX_ID);
-        LocalImage item = new LocalImage(context);
-        item.mId = itemId;
-        item.mCaption = cursor.getString(INDEX_CAPTION);
-        item.mMimeType = cursor.getString(INDEX_MIME_TYPE);
-        item.mLatitude = cursor.getDouble(INDEX_LATITUDE);
-        item.mLongitude = cursor.getDouble(INDEX_LONGITUDE);
-        item.mDateTakenInMs = cursor.getLong(INDEX_DATE_TAKEN);
-        item.mDateAddedInSec = cursor.getLong(INDEX_DATE_ADDED);
-        item.mDateModifiedInSec = cursor.getLong(INDEX_DATE_MODIFIED);
-        item.mFilePath = cursor.getString(INDEX_DATA);
-        item.mRotation = cursor.getInt(INDEX_ORIENTATION);
-        item.mUniqueId = DataManager.makeId(parentId, itemId);
-
-        return item;
-    }
-
-   public Future<LargeBitmap> requestLargeImage(int type,
-            FutureListener<LargeBitmap> listener) {
-        DecodeService service = mContext.getDecodeService();
-        return service.requestCreateLargeBitmap(mFilePath, listener);
-   }
-}
diff --git a/new3d/src/com/android/gallery3d/data/LocalMediaItem.java b/new3d/src/com/android/gallery3d/data/LocalMediaItem.java
deleted file mode 100644
index a3b8bd0..0000000
--- a/new3d/src/com/android/gallery3d/data/LocalMediaItem.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.data;
-
-//
-// LocalMediaItem is an abstract class captures those common fields
-// in LocalImage and LocalVideo.
-//
-public abstract class LocalMediaItem extends MediaItem {
-
-    private static final String TAG = "LocalMediaItem";
-
-    // database fields
-    protected int mId;
-    protected String mCaption;
-    protected String mMimeType;
-    protected double mLatitude;
-    protected double mLongitude;
-    protected long mDateTakenInMs;
-    protected long mDateAddedInSec;
-    protected long mDateModifiedInSec;
-    protected String mFilePath;
-}
diff --git a/new3d/src/com/android/gallery3d/data/LocalVideo.java b/new3d/src/com/android/gallery3d/data/LocalVideo.java
deleted file mode 100644
index f7a1a6a..0000000
--- a/new3d/src/com/android/gallery3d/data/LocalVideo.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.data;
-
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.graphics.LargeBitmap;
-import android.provider.MediaStore.Video.VideoColumns;
-
-import com.android.gallery3d.util.Future;
-import com.android.gallery3d.util.FutureListener;
-
-// LocalVideo represents a video in the local storage.
-public class LocalVideo extends LocalMediaItem {
-
-    private static final int MICRO_TARGET_PIXELS = 128 * 128;
-
-    // Must preserve order between these indices and the order of the terms in
-    // the following PROJECTION array.
-    private static final int INDEX_ID = 0;
-    private static final int INDEX_CAPTION = 1;
-    private static final int INDEX_MIME_TYPE = 2;
-    private static final int INDEX_LATITUDE = 3;
-    private static final int INDEX_LONGITUDE = 4;
-    private static final int INDEX_DATE_TAKEN = 5;
-    private static final int INDEX_DATE_ADDED = 6;
-    private static final int INDEX_DATE_MODIFIED = 7;
-    private static final int INDEX_DATA = 8;
-    private static final int INDEX_DURATION = 9;
-
-    static final String[] PROJECTION = new String[] {
-            VideoColumns._ID,
-            VideoColumns.TITLE,
-            VideoColumns.MIME_TYPE,
-            VideoColumns.LATITUDE,
-            VideoColumns.LONGITUDE,
-            VideoColumns.DATE_TAKEN,
-            VideoColumns.DATE_ADDED,
-            VideoColumns.DATE_MODIFIED,
-            VideoColumns.DATA,
-            VideoColumns.DURATION};
-
-    private long mUniqueId;
-    public int mDurationInSec;
-    private final ImageService mImageService;
-
-    protected LocalVideo(ImageService imageService) {
-        mImageService = imageService;
-    }
-
-    @Override
-    public long getUniqueId() {
-        return mUniqueId;
-    }
-
-    @Override
-    public synchronized Future<Bitmap>
-            requestImage(int type, FutureListener<? super Bitmap> listener) {
-        return mImageService.requestVideoThumbnail(mId, type, listener);
-    }
-
-    public static LocalVideo load(int parentId, ImageService imageService,
-            Cursor cursor, DataManager dataManager) {
-        int itemId = cursor.getInt(INDEX_ID);
-        LocalVideo item = new LocalVideo(imageService);
-        item.mId = itemId;
-        item.mCaption = cursor.getString(INDEX_CAPTION);
-        item.mMimeType = cursor.getString(INDEX_MIME_TYPE);
-        item.mLatitude = cursor.getDouble(INDEX_LATITUDE);
-        item.mLongitude = cursor.getDouble(INDEX_LONGITUDE);
-        item.mDateTakenInMs = cursor.getLong(INDEX_DATE_TAKEN);
-        item.mDateAddedInSec = cursor.getLong(INDEX_DATE_ADDED);
-        item.mDateModifiedInSec = cursor.getLong(INDEX_DATE_MODIFIED);
-        item.mFilePath = cursor.getString(INDEX_DATA);
-        item.mDurationInSec = cursor.getInt(INDEX_DURATION);
-        item.mUniqueId = DataManager.makeId(parentId, itemId);
-
-        return item;
-    }
-
-    public Future<LargeBitmap> requestLargeImage(
-            int type, FutureListener<LargeBitmap> listener) {
-        throw new UnsupportedOperationException("Cannot regquest a large image"
-                + " to a local video!");
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/data/MediaItem.java b/new3d/src/com/android/gallery3d/data/MediaItem.java
deleted file mode 100644
index 2d4ea44..0000000
--- a/new3d/src/com/android/gallery3d/data/MediaItem.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.data;
-
-import android.graphics.Bitmap;
-import android.graphics.LargeBitmap;
-
-import com.android.gallery3d.util.Future;
-import com.android.gallery3d.util.FutureListener;
-
-// MediaItem represents an image or a video item.
-public abstract class MediaItem {
-    public static final int TYPE_COUNT = 3;
-    public static final int TYPE_FULL_IMAGE = 0;
-    public static final int TYPE_THUMBNAIL = 1;
-    public static final int TYPE_MICROTHUMBNAIL = 2;
-
-    public static final int IMAGE_READY = 0;
-    public static final int IMAGE_WAIT = 1;
-    public static final int IMAGE_ERROR = -1;
-
-    public abstract long getUniqueId();
-    public abstract Future<Bitmap>
-            requestImage(int type, FutureListener<? super Bitmap> listener);
-
-    public abstract Future<LargeBitmap> requestLargeImage(int type,
-            FutureListener<LargeBitmap> listener);
-}
diff --git a/new3d/src/com/android/gallery3d/data/MediaSet.java b/new3d/src/com/android/gallery3d/data/MediaSet.java
deleted file mode 100644
index 75167eb..0000000
--- a/new3d/src/com/android/gallery3d/data/MediaSet.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.data;
-
-import android.net.Uri;
-
-import java.util.ArrayList;
-
-// MediaSet is a directory-like data structure.
-// It contains MediaItems and sub-MediaSets.
-//
-// The primary interface are:
-// getMediaItemCount(), getMediaItem() and
-// getSubMediaSetCount(), getSubMediaSet().
-//
-// getTotalMediaItemCount() returns the number of all MediaItems, including
-// those in sub-MediaSets.
-public abstract class MediaSet {
-
-    // Below are the bits returned from getSupportedOperations():
-    public static final int SUPPORT_DELETE = 1;
-    public static final int SUPPORT_ROTATE = 2;
-    public static final int SUPPORT_SHARE = 4;
-
-    public static final int MEDIA_TYPE_UNKNOWN = 1;
-    public static final int MEDIA_TYPE_IMAGE = 2;
-    public static final int MEDIA_TYPE_VIDEO = 4;
-    public static final int MEDIA_TYPE_ALL = MEDIA_TYPE_IMAGE | MEDIA_TYPE_VIDEO;
-
-    public interface MediaSetListener {
-        public void onContentDirty();
-    }
-
-    public int getMediaItemCount() {
-        return 0;
-    }
-
-    // Returns the media items in the range [start, start + count).
-    //
-    // The number of media items returned may be less than the specified count
-    // if there are not enough media items available. The number of
-    // media items available may not be consistent with the return value of
-    // getMediaItemCount() because the contents of database may have already
-    // changed.
-    public ArrayList<MediaItem> getMediaItem(int start, int count) {
-        throw new IndexOutOfBoundsException();
-    }
-
-    public int getSubMediaSetCount() {
-        return 0;
-    }
-
-    public MediaSet getSubMediaSet(int index) {
-        throw new IndexOutOfBoundsException();
-    }
-
-    public abstract int getTotalMediaItemCount();
-
-    public abstract long getUniqueId();
-    public abstract String getName();
-
-    protected MediaSetListener mListener;
-
-    public void setContentListener(MediaSetListener listener) {
-        mListener = listener;
-    }
-
-    // Reload the content. Return true if the content is changed; false otherwise.
-    // reload should be called in the same thread as getMediaItem(int, int) and
-    // getSubMediaSet(int).
-    public abstract boolean reload();
-
-    public int getSupportedOperations(long uniqueId) {
-        return 0;
-    }
-
-    public void delete(long uniqueId) {
-        throw new UnsupportedOperationException();
-    }
-
-    public void rotate(long uniqueId, int degrees) {
-        throw new UnsupportedOperationException();
-    }
-
-    public Uri getMediaItemUri(long uniqueId) {
-        throw new UnsupportedOperationException();
-    }
-
-    public int getMediaType(long uniqueId) {
-        return MEDIA_TYPE_UNKNOWN;
-    }
-
-    public int getMergeId() {
-        return 0;
-    }
-
-    int getMyId() {
-        return DataManager.extractSelfId(getUniqueId());
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/data/MergeAlbum.java b/new3d/src/com/android/gallery3d/data/MergeAlbum.java
deleted file mode 100644
index 7ca8433..0000000
--- a/new3d/src/com/android/gallery3d/data/MergeAlbum.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.data;
-
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-// MergeAlbum merges items from two or more MediaSets. It uses a Comparator to
-// determine the order of items. The items are assumed to be sorted in the input
-// media sets (with the same order that the Comparator uses).
-//
-// This only handles MediaItems, not SubMediaSets.
-public class MergeAlbum extends MediaSet implements MediaSet.MediaSetListener {
-    private static final String TAG = "MergeAlbum";
-    private final DataManager mDataManager;
-    private final long mUniqueId;
-    private final int mPageSize;
-    private final Comparator<MediaItem> mComparator;
-    private final MediaSet[] mSources;
-    private final int mMergeId;
-
-    private ArrayList<MediaSet> mSets;
-    private int mSize;  // caches mSets.size()
-    private FetchCache[] mFetcher;
-
-    // mIndex maps global position to the position of each underlying media sets.
-    private TreeMap<Integer, int[]> mIndex;
-
-    public MergeAlbum(DataManager dataManager, int parentId, int pageSize,
-            Comparator<MediaItem> comparator, MediaSet[] sources, int mergeId) {
-        mUniqueId = dataManager.obtainSetId(parentId, mergeId, this);
-        mDataManager = dataManager;
-        mPageSize = pageSize;
-        mComparator = comparator;
-        mSources = sources;
-        mMergeId = mergeId;
-        updateData();
-    }
-
-    public void updateData() {
-        ArrayList<MediaSet> matches = new ArrayList<MediaSet>();
-
-        // Find sources that have a sub media set with specified merge id.
-        for (MediaSet set : mSources) {
-            for (int i = 0, n = set.getSubMediaSetCount(); i < n; i++) {
-                MediaSet subset = set.getSubMediaSet(i);
-                int mergeId = subset.getMergeId();
-                if (mergeId == mMergeId) {
-                    matches.add(subset);
-                }
-            }
-        }
-
-        // If the matches doesn't change, we don't need to update.
-        if (mSets != null) {
-            int n = matches.size();
-            if (n == mSize) {
-                int i;
-                for (i = 0; i < n; i++) {
-                    if (matches.get(i) != mSets.get(i)) break;
-                }
-                if (i == n) return;
-            }
-        }
-
-        mSets = matches;
-        mSize = matches.size();
-        mFetcher = new FetchCache[mSize];
-        for (int i = 0; i < mSize; i++) {
-            MediaSet s = mSets.get(i);
-            s.setContentListener(this);
-            mFetcher[i] = new FetchCache(s, mPageSize);
-        }
-        mIndex = new TreeMap<Integer, int[]>();
-        mIndex.put(0, new int[mSize]);
-    }
-
-    private void invalidateCache() {
-        for (int i = 0; i < mSize; i++) {
-            mFetcher[i].invalidate();
-        }
-        mIndex.clear();
-        mIndex.put(0, new int[mSize]);
-    }
-
-    @Override
-    public long getUniqueId() {
-        return mUniqueId;
-    }
-
-    @Override
-    public String getName() {
-        return TAG;
-    }
-
-    @Override
-    public int getMediaItemCount() {
-        return getTotalMediaItemCount();
-    }
-
-    @Override
-    public ArrayList<MediaItem> getMediaItem(int start, int count) {
-
-        // First find the nearest mark position <= start.
-        SortedMap<Integer, int[]> head = mIndex.headMap(start + 1);
-        int markPos = head.lastKey();
-        int[] subPos = head.get(markPos).clone();
-        MediaItem[] slot = new MediaItem[mSize];
-
-        // fill all slots
-        for (int i = 0; i < mSize; i++) {
-            slot[i] = mFetcher[i].getItem(subPos[i]);
-        }
-
-        ArrayList<MediaItem> result = new ArrayList<MediaItem>();
-
-        for (int i = markPos; i < start + count; i++) {
-            int k = -1;  // k points to the best slot up to now.
-            for (int j = 0; j < mSize; j++) {
-                if (slot[j] != null) {
-                    if (k == -1 || mComparator.compare(slot[j], slot[k]) < 0) {
-                        k = j;
-                    }
-                }
-            }
-
-            // If we don't have anything, all streams are exhausted.
-            if (k == -1) break;
-
-            // Pick the best slot and refill it.
-            subPos[k]++;
-            if (i >= start) {
-                result.add(slot[k]);
-            }
-            slot[k] = mFetcher[k].getItem(subPos[k]);
-
-            // Periodically leave a mark in the index, so we can come back later.
-            if ((i + 1) % mPageSize == 0) {
-                mIndex.put(i + 1, subPos.clone());
-            }
-        }
-
-        return result;
-    }
-
-    @Override
-    public int getTotalMediaItemCount() {
-        int count = 0;
-        for (MediaSet set : mSets) {
-            count += set.getTotalMediaItemCount();
-        }
-        return count;
-    }
-
-    @Override
-    public boolean reload() {
-        boolean changed = false;
-        for (MediaSet set : mSets) {
-            changed |= set.reload();
-        }
-        if (changed) {
-            invalidateCache();
-            updateData();
-        }
-        return changed;
-    }
-
-    public void onContentDirty() {
-        if (mListener != null) mListener.onContentDirty();
-    }
-
-    public void deleteSelf() {
-        for (MediaSet set : mSets) {
-            mDataManager.delete(set.getUniqueId());
-        }
-    }
-}
-
-class FetchCache {
-    private static final String TAG = "FetchCache";
-    private MediaSet mBaseSet;
-    private int mPageSize;
-    private ArrayList<MediaItem> mCache;
-    private int mStartPos;
-
-    FetchCache(MediaSet baseSet, int pageSize) {
-        mBaseSet = baseSet;
-        mPageSize = pageSize;
-    }
-
-    void invalidate() {
-        mCache = null;
-    }
-
-    MediaItem getItem(int index) {
-        boolean needLoading = false;
-        if (mCache == null) {
-            needLoading = true;
-        } else if (index < mStartPos || index >= mStartPos + mPageSize) {
-            needLoading = true;
-        }
-
-        if (needLoading) {
-            mCache = mBaseSet.getMediaItem(index, mPageSize);
-            mStartPos = index;
-        }
-
-        if (index < mStartPos || index >= mStartPos + mCache.size()) {
-            return null;
-        }
-
-        return mCache.get(index - mStartPos);
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/data/MergeAlbumSet.java b/new3d/src/com/android/gallery3d/data/MergeAlbumSet.java
deleted file mode 100644
index 0593140..0000000
--- a/new3d/src/com/android/gallery3d/data/MergeAlbumSet.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.data;
-
-import com.android.gallery3d.util.Utils;
-
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.TreeSet;
-
-// MergeAlbumSet merges two or more media sets into one.
-// If the the input media sets have sub media sets with the item id,
-// they are merged into one media set.
-public class MergeAlbumSet extends MediaSet implements MediaSet.MediaSetListener {
-    private static final String TAG = "MergeAlbumSet";
-    private static final int PAGE_SIZE = 100;
-    private final long mUniqueId;
-    private final DataManager mDataManager;
-    private Comparator<MediaItem> mComparator;
-    private final MediaSet[] mSets;
-    private ArrayList<MergeAlbum> mAlbums = new ArrayList<MergeAlbum>();
-    private TreeSet<Integer> mIds = new TreeSet<Integer>();
-
-    public MergeAlbumSet(DataManager dataManager, int parentId, int childKey,
-            Comparator<MediaItem> comparator, MediaSet ... mediaSets) {
-        mUniqueId = dataManager.obtainSetId(parentId, childKey, this);
-        mDataManager = dataManager;
-        mComparator = comparator;
-        mSets = mediaSets;
-        updateIds();
-        for (MediaSet set : mediaSets) {
-            set.setContentListener(this);
-        }
-    }
-
-    @Override
-    public long getUniqueId() {
-        return mUniqueId;
-    }
-
-    private void updateIds() {
-
-        // allIds keeps all item id of the (sub) media sets in the album sets
-        // we want to merge.
-        TreeSet<Integer> allIds = new TreeSet<Integer>();
-        for (MediaSet set : mSets) {
-            for (int i = 0, n = set.getSubMediaSetCount(); i < n; i++) {
-                MediaSet subset = set.getSubMediaSet(i);
-                int subId = subset.getMergeId();
-                allIds.add(subId);
-            }
-        }
-        // Update all existing albums.
-        for (MergeAlbum album : mAlbums) {
-            album.updateData();
-        }
-
-        // If there are new ids, create new albums for them.
-        for (int subId : allIds) {
-            if (mIds.contains(subId)) continue;
-            mIds.add(subId);
-            mAlbums.add(new MergeAlbum(mDataManager,
-                    getMyId(), PAGE_SIZE, mComparator, mSets, subId));
-        }
-    }
-
-    @Override
-    public MediaSet getSubMediaSet(int index) {
-        return mAlbums.get(index);
-    }
-
-    @Override
-    public int getSubMediaSetCount() {
-        return mAlbums.size();
-    }
-
-    @Override
-    public String getName() {
-        return TAG;
-    }
-
-    @Override
-    public int getTotalMediaItemCount() {
-        int count = 0;
-        for (MediaSet set : mSets) {
-            count += set.getTotalMediaItemCount();
-        }
-        return count;
-    }
-
-    @Override
-    public boolean reload() {
-        boolean changed = false;
-        for (MediaSet set : mSets) {
-            changed |= set.reload();
-        }
-        if (changed) updateIds();
-        return changed;
-    }
-
-    public void onContentDirty() {
-        if (mListener != null) mListener.onContentDirty();
-    }
-
-    @Override
-    public int getSupportedOperations(long uniqueId) {
-        return SUPPORT_DELETE;
-    }
-
-    @Override
-    public void delete(long uniqueId) {
-        Utils.Assert(DataManager.extractParentId(uniqueId) == getMyId());
-
-        int childId = DataManager.extractSelfId(uniqueId);
-        MergeAlbum child = (MergeAlbum) mDataManager.getMediaSet(childId);
-        child.deleteSelf();
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/data/PicasaAlbum.java b/new3d/src/com/android/gallery3d/data/PicasaAlbum.java
deleted file mode 100644
index ab16499..0000000
--- a/new3d/src/com/android/gallery3d/data/PicasaAlbum.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.data;
-
-import android.content.ContentResolver;
-import android.database.ContentObserver;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Handler;
-
-import com.android.gallery3d.app.GalleryContext;
-import com.android.gallery3d.picasa.AlbumEntry;
-import com.android.gallery3d.picasa.EntrySchema;
-import com.android.gallery3d.picasa.PhotoEntry;
-import com.android.gallery3d.picasa.PicasaContentProvider;
-import com.android.gallery3d.util.Utils;
-
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-// PicasaAlbum lists all images in a Picasa album.
-public class PicasaAlbum extends MediaSet {
-    public static final Comparator<PicasaAlbum>
-            sEditDateComparator = new EditDateComparator();
-
-    private static final String TAG = "PicasaAlbum";
-    private static final EntrySchema SCHEMA = PhotoEntry.SCHEMA;
-    private static final String[] COUNT_PROJECTION = { "count(*)" };
-    private static final String WHERE_CLAUSE = PhotoEntry.Columns.ALBUM_ID + " = ?";
-
-    private final AlbumEntry mData;
-    private final ContentResolver mResolver;
-    private long mUniqueId;
-    private GalleryContext mContext;
-    private AtomicBoolean mContentDirty = new AtomicBoolean(true);
-
-    public PicasaAlbum(int parentId, GalleryContext context, AlbumEntry entry) {
-        mContext = context;
-        mResolver = context.getContentResolver();
-        mData = entry;
-        mUniqueId = context.getDataManager().obtainSetId(parentId, (int) mData.id, this);
-        mResolver.registerContentObserver(
-                PicasaContentProvider.PHOTOS_URI, true, new MyContentObserver());
-    }
-
-    @Override
-    public long getUniqueId() {
-        return mUniqueId;
-    }
-
-    @Override
-    public ArrayList<MediaItem> getMediaItem(int start, int count) {
-        Uri uri = PicasaContentProvider.PHOTOS_URI.buildUpon()
-                .appendQueryParameter("limit", start + "," + count).build();
-
-        ArrayList<MediaItem> list = new ArrayList<MediaItem>();
-        Utils.assertNotInRenderThread();
-        Cursor cursor = mResolver.query(uri,
-                SCHEMA.getProjection(), WHERE_CLAUSE,
-                new String[]{String.valueOf(mData.id)},
-                PhotoEntry.Columns.DISPLAY_INDEX);
-
-        try {
-            while (cursor.moveToNext()) {
-                PhotoEntry entry = SCHEMA.cursorToObject(cursor, new PhotoEntry());
-                DataManager dataManager = mContext.getDataManager();
-                long uniqueId = DataManager.makeId(getMyId(), (int) entry.id);
-                PicasaImage item = new PicasaImage(uniqueId, mContext, entry);
-                list.add(item);
-            }
-        } finally {
-            cursor.close();
-        }
-        return list;
-    }
-
-    @Override
-    public int getMediaItemCount() {
-        Utils.assertNotInRenderThread();
-        Cursor cursor = mResolver.query(
-                PicasaContentProvider.PHOTOS_URI,
-                COUNT_PROJECTION, WHERE_CLAUSE,
-                new String[]{String.valueOf(mData.id)}, null);
-        try {
-            Utils.Assert(cursor.moveToNext());
-            return cursor.getInt(0);
-        } finally {
-            cursor.close();
-        }
-    }
-
-    @Override
-    public String getName() {
-        return mData.title;
-    }
-
-    @Override
-    public int getTotalMediaItemCount() {
-        return getMediaItemCount();
-    }
-
-    @Override
-    public boolean reload() {
-        return mContentDirty.compareAndSet(true, false);
-    }
-
-    private class MyContentObserver extends ContentObserver {
-        public MyContentObserver() {
-            super(new Handler(mContext.getMainLooper()));
-        }
-
-        @Override
-        public void onChange(boolean selfChange) {
-            if (mContentDirty.compareAndSet(false, true)) {
-                if (mListener != null) mListener.onContentDirty();
-            }
-        }
-    }
-
-    private static class EditDateComparator implements Comparator<PicasaAlbum> {
-        public int compare(PicasaAlbum a, PicasaAlbum b) {
-            int result = -Utils.compare(a.mData.dateEdited, b.mData.dateEdited);
-            if (result != 0) return result;
-            return Utils.compare(a.mData.id, b.mData.id);
-        }
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/data/PicasaAlbumSet.java b/new3d/src/com/android/gallery3d/data/PicasaAlbumSet.java
deleted file mode 100644
index 3ba71d6..0000000
--- a/new3d/src/com/android/gallery3d/data/PicasaAlbumSet.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.data;
-
-import android.database.ContentObserver;
-import android.database.Cursor;
-import android.os.Handler;
-
-import com.android.gallery3d.app.GalleryContext;
-import com.android.gallery3d.picasa.AlbumEntry;
-import com.android.gallery3d.picasa.EntrySchema;
-import com.android.gallery3d.picasa.PicasaContentProvider;
-import com.android.gallery3d.util.Utils;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-// PicasaAlbumSet lists all albums in a Picasa account.
-public class PicasaAlbumSet extends MediaSet {
-    private static final String TAG = "PicasaAlbumSet";
-    private final EntrySchema SCHEMA = AlbumEntry.SCHEMA;
-
-    private ArrayList<PicasaAlbum> mAlbums = new ArrayList<PicasaAlbum>();
-    private final ArrayList<AlbumEntry> mLoadBuffer = new ArrayList<AlbumEntry>();
-    private final long mUniqueId;
-    private GalleryContext mContext;
-    private AtomicBoolean mContentDirty = new AtomicBoolean(true);
-
-    public PicasaAlbumSet(int parentId, int childKey, GalleryContext context) {
-        mContext = context;
-        mUniqueId = context.getDataManager().obtainSetId(parentId, childKey, this);
-        context.getContentResolver().registerContentObserver(
-                PicasaContentProvider.ALBUMS_URI, true, new MyContentObserver());
-    }
-
-    @Override
-    public MediaSet getSubMediaSet(int index) {
-        return mAlbums.get(index);
-    }
-
-    @Override
-    public int getSubMediaSetCount() {
-        return mAlbums.size();
-    }
-
-    @Override
-    public String getName() {
-        return TAG;
-    }
-
-    @Override
-    public long getUniqueId() {
-        return mUniqueId;
-    }
-
-    @Override
-    public int getTotalMediaItemCount() {
-        int totalCount = 0;
-        for (PicasaAlbum album : mAlbums) {
-            totalCount += album.getTotalMediaItemCount();
-        }
-        return totalCount;
-    }
-
-    private ArrayList<PicasaAlbum> loadSubMediaSets() {
-        Utils.assertNotInRenderThread();
-        Cursor cursor = mContext.getContentResolver().query(
-                PicasaContentProvider.ALBUMS_URI,
-                SCHEMA.getProjection(), null, null, null);
-        try {
-            while (cursor.moveToNext()) {
-                AlbumEntry entry = SCHEMA.cursorToObject(cursor, new AlbumEntry());
-                mLoadBuffer.add(entry);
-            }
-        } finally {
-            cursor.close();
-        }
-
-        ArrayList<PicasaAlbum> newAlbums = new ArrayList<PicasaAlbum>();
-        DataManager dataManager = mContext.getDataManager();
-
-        int parentId = getMyId();
-        for (int i = 0, n = mLoadBuffer.size(); i < n; i++) {
-            AlbumEntry entry = mLoadBuffer.get(i);
-            int childKey = (int) entry.id;
-            PicasaAlbum album = (PicasaAlbum) dataManager.getMediaSet(parentId, childKey);
-            if (album == null) {
-                album = new PicasaAlbum(parentId, mContext, entry);
-            }
-            newAlbums.add(album);
-        }
-
-        for (int i = 0, n = mAlbums.size(); i < n; ++i) {
-            mAlbums.get(i).reload();
-        }
-        Collections.sort(newAlbums, PicasaAlbum.sEditDateComparator);
-        return newAlbums;
-    }
-
-    private class MyContentObserver extends ContentObserver {
-        public MyContentObserver() {
-            super(new Handler(mContext.getMainLooper()));
-        }
-
-        @Override
-        public void onChange(boolean selfChange) {
-            if (mContentDirty.compareAndSet(false, true)) {
-                if (mListener != null) mListener.onContentDirty();
-            }
-        }
-    }
-
-    @Override
-    public boolean reload() {
-        if (!mContentDirty.compareAndSet(true, false)) return false;
-        ArrayList<PicasaAlbum> album = loadSubMediaSets();
-        if (album.equals(mAlbums)) return false;
-        mAlbums = album;
-        return true;
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/data/PicasaImage.java b/new3d/src/com/android/gallery3d/data/PicasaImage.java
deleted file mode 100644
index 37edcb1..0000000
--- a/new3d/src/com/android/gallery3d/data/PicasaImage.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.gallery3d.data;
-
-import android.graphics.Bitmap;
-import android.graphics.LargeBitmap;
-import android.util.Log;
-
-import com.android.gallery3d.app.GalleryContext;
-import com.android.gallery3d.data.BlobCache.LookupRequest;
-import com.android.gallery3d.picasa.PhotoEntry;
-import com.android.gallery3d.util.ComboFuture;
-import com.android.gallery3d.util.Future;
-import com.android.gallery3d.util.FutureListener;
-import com.android.gallery3d.util.Utils;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.nio.ByteBuffer;
-
-// PicasaImage is an image in the Picasa account.
-public class PicasaImage extends MediaItem {
-    private static final String TAG = "PicasaImage";
-
-    private final GalleryContext mContext;
-    private final PhotoEntry mData;
-    private final BlobCache mPicasaCache;
-    private final long mUniqueId;
-
-    public PicasaImage(long uniqueId, GalleryContext context, PhotoEntry entry) {
-        mContext = context;
-        mData = entry;
-        mPicasaCache = mContext.getDataManager().getPicasaCache();
-        mUniqueId = uniqueId;
-    }
-
-    @Override
-    public long getUniqueId() {
-        return mUniqueId;
-    }
-
-    @Override
-    public synchronized Future<Bitmap>
-            requestImage(int type, FutureListener<? super Bitmap> listener) {
-        URL photoUrl = getPhotoUrl(type);
-        if (mPicasaCache != null) {
-
-            // Try to get the image from cache.
-            LookupRequest request = new LookupRequest();
-            request.key = Utils.crc64Long(photoUrl.toString());
-            boolean isCached = false;
-            try {
-                isCached = mPicasaCache.lookup(request);
-            } catch (IOException e) {
-                Log.w(TAG, "IOException in getting an image from " +
-                        "PicasaCache", e);
-            }
-
-            if (isCached) {
-                byte[] uri = Utils.getBytesInUtf8(photoUrl.toString());
-                if (isSameUri(uri, request.buffer)) {
-                    DecodeService service = mContext.getDecodeService();
-                    return service.requestDecode(request.buffer, uri.length,
-                            request.length - uri.length, null, listener);
-                } else {
-                    Log.w(TAG, "The cached image has different URI?");
-                }
-            }
-
-            Log.d(TAG, "Get uncached picasa image (type, url): " + type +
-                    " " + photoUrl.toString());
-        }
-
-        // Get the image from Picasaweb instead.
-        return new PicasaBitmapTask(type, photoUrl, listener);
-    }
-
-    private boolean isSameUri(byte[] uri, byte[] buffer) {
-        int uriLength = uri.length;
-        if (uriLength > buffer.length) {
-            return false;
-        }
-        for (int i = 0; i < uriLength; ++i) {
-            if (uri[i] != buffer[i]) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    private URL getPhotoUrl(int type) {
-        URL url = null;
-        try {
-            switch (type) {
-                case MediaItem.TYPE_MICROTHUMBNAIL:
-                     url = new URL(mData.thumbnailUrl);
-                    break;
-                case MediaItem.TYPE_THUMBNAIL:
-                    url = new URL(mData.screennailUrl);
-                    break;
-                case MediaItem.TYPE_FULL_IMAGE:
-                    url = new URL(mData.contentUrl);
-                    break;
-                default:
-                    throw new AssertionError();
-            }
-        } catch (MalformedURLException e) {
-            throw new RuntimeException(e);
-        }
-        return url;
-    }
-
-    private class PicasaBitmapTask extends ComboFuture<Bitmap> {
-        private final URL mUrl;
-        private final int mType;
-
-        public PicasaBitmapTask(
-                int type, URL url, FutureListener<? super Bitmap> listener) {
-            super(listener);
-            mType = type;
-            mUrl = url;
-            execute();
-        }
-
-        @Override
-        protected Future<?> executeNextTask(int step, Future<?> current)
-                throws Exception {
-            switch (step) {
-                case 0: {
-                    DownloadService service = mContext.getDownloadService();
-                    return service.requestDownload(mUrl, this);
-                }
-                case 1: {
-                    byte[] downloadedImage = (byte[]) current.get();
-
-                    if ((mPicasaCache != null)
-                            && (mType != MediaItem.TYPE_FULL_IMAGE)) {
-                        // Insert the downloaded image to the cache if we have a
-                        // cache and the image is not a full size one.
-                        long cacheKey = Utils.crc64Long(mUrl.toString());
-                        byte[] uri = Utils.getBytesInUtf8(mUrl.toString());
-                        ByteBuffer buffer = ByteBuffer.allocate(
-                                downloadedImage.length + uri.length);
-                        buffer.put(uri);
-                        buffer.put(downloadedImage);
-                        mPicasaCache.insert(cacheKey, buffer.array());
-                    }
-
-                    // Decode the downloaded image.
-                    DecodeService service = mContext.getDecodeService();
-                    return service.requestDecode(downloadedImage, null, this);
-                }
-            }
-            return null;
-        }
-    }
-
-    private class PicasaLargeBitmapTask extends ComboFuture<LargeBitmap> {
-        private final URL mUrl;
-        private final int mType;
-
-        public PicasaLargeBitmapTask(
-                int type, URL url, FutureListener<? super LargeBitmap> listener) {
-            super(listener);
-            mType = type;
-            mUrl = url;
-            execute();
-        }
-
-        @Override
-        protected Future<?> executeNextTask(int step, Future<?> current)
-                throws Exception {
-            switch (step) {
-                case 0: {
-                    DownloadService service = mContext.getDownloadService();
-                    return service.requestDownload(mUrl, this);
-                }
-                case 1: {
-                    byte[] downloadedImage = (byte[]) current.get();
-
-                    // Create the large bitmap.
-                    DecodeService service = mContext.getDecodeService();
-                    return service.requestCreateLargeBitmap(downloadedImage, 0,
-                            downloadedImage.length, this);
-                }
-            }
-            return null;
-        }
-    }
-
-    public Future<LargeBitmap> requestLargeImage(int type,
-            FutureListener<LargeBitmap> listener) {
-        URL photoUrl = getPhotoUrl(type);
-        return new PicasaLargeBitmapTask(type, photoUrl, listener);
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/gadget/PhotoAppWidgetConfigure.java b/new3d/src/com/android/gallery3d/gadget/PhotoAppWidgetConfigure.java
deleted file mode 100644
index c075079..0000000
--- a/new3d/src/com/android/gallery3d/gadget/PhotoAppWidgetConfigure.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2009 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.android.gallery3d.gadget;
-
-import android.app.Activity;
-import android.appwidget.AppWidgetManager;
-import android.content.Intent;
-import android.graphics.Bitmap;
-import android.os.Bundle;
-import android.widget.RemoteViews;
-
-public class PhotoAppWidgetConfigure extends Activity {
-
-    @SuppressWarnings("unused")
-    private static final String TAG = "PhotoAppWidgetConfigure";
-    static final int REQUEST_GET_PHOTO = 2;
-
-    private int mAppWidgetId = -1;
-
-    @Override
-    protected void onCreate(Bundle bundle) {
-        super.onCreate(bundle);
-
-        // Someone is requesting that we configure the given mAppWidgetId, which
-        // means we prompt the user to pick and crop a photo.
-        mAppWidgetId = getIntent().getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1);
-
-        if (mAppWidgetId == -1) {
-            setResult(Activity.RESULT_CANCELED);
-            finish();
-            return;
-        }
-
-        // TODO: get these values from constants somewhere
-        // TODO: Adjust the PhotoFrame's image size to avoid on the fly scaling
-        // TODO: we should handle it in two steps: Send a GET_CONTENT
-        //       intent and then a CROP intent.
-        Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
-        intent.setType("image/*");
-        intent.putExtra("crop", "true");
-        intent.putExtra("aspectX", 1);
-        intent.putExtra("aspectY", 1);
-        intent.putExtra("outputX", 192);
-        intent.putExtra("outputY", 192);
-        intent.putExtra("noFaceDetection", true);
-        intent.putExtra("return-data", true);
-
-        startActivityForResult(intent, REQUEST_GET_PHOTO);
-    }
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (resultCode == RESULT_OK && mAppWidgetId != -1) {
-            // Store the cropped photo in our database
-            Bitmap bitmap = (Bitmap) data.getParcelableExtra("data");
-
-            PhotoDatabaseHelper helper = new PhotoDatabaseHelper(this);
-            if (helper.setPhoto(mAppWidgetId, bitmap)) {
-                resultCode = Activity.RESULT_OK;
-
-                // Push newly updated widget to surface
-                RemoteViews views = PhotoAppWidgetProvider.buildUpdate(this, mAppWidgetId, helper);
-                AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
-                appWidgetManager.updateAppWidget(new int[] { mAppWidgetId }, views);
-            }
-            helper.close();
-        } else {
-            resultCode = Activity.RESULT_CANCELED;
-        }
-
-        // Make sure we pass back the original mAppWidgetId
-        Intent resultValue = new Intent();
-        resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
-        setResult(resultCode, resultValue);
-        finish();
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/gadget/PhotoAppWidgetProvider.java b/new3d/src/com/android/gallery3d/gadget/PhotoAppWidgetProvider.java
deleted file mode 100644
index b4d330e..0000000
--- a/new3d/src/com/android/gallery3d/gadget/PhotoAppWidgetProvider.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2009 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.android.gallery3d.gadget;
-
-import android.appwidget.AppWidgetManager;
-import android.appwidget.AppWidgetProvider;
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.util.Log;
-import android.widget.RemoteViews;
-
-import com.android.gallery3d.R;
-
-/**
- * Simple widget to show a user-selected picture.
- */
-public class PhotoAppWidgetProvider extends AppWidgetProvider {
-    static final String TAG = "PhotoAppWidgetProvider";
-    static final boolean LOGD = true;
-
-    @Override
-    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
-        // Update each requested appWidgetId with its unique photo
-        PhotoDatabaseHelper helper = new PhotoDatabaseHelper(context);
-        for (int appWidgetId : appWidgetIds) {
-            int[] specificAppWidget = new int[] {appWidgetId};
-            RemoteViews views = buildUpdate(context, appWidgetId, helper);
-            if (LOGD) {
-                Log.d(TAG, "sending out views=" + views + " for id=" + appWidgetId);
-            }
-            appWidgetManager.updateAppWidget(specificAppWidget, views);
-        }
-        helper.close();
-    }
-
-    @Override
-    public void onDeleted(Context context, int[] appWidgetIds) {
-        // Clean deleted photos out of our database
-        PhotoDatabaseHelper helper = new PhotoDatabaseHelper(context);
-        for (int appWidgetId : appWidgetIds) {
-            helper.deletePhoto(appWidgetId);
-        }
-        helper.close();
-    }
-
-    /**
-     * Load photo for given widget and build {@link RemoteViews} for it.
-     */
-    static RemoteViews buildUpdate(Context context, int appWidgetId, PhotoDatabaseHelper helper) {
-        RemoteViews views = null;
-        Bitmap bitmap = helper.getPhoto(appWidgetId);
-        if (bitmap != null) {
-            views = new RemoteViews(context.getPackageName(), R.layout.photo_frame);
-            views.setImageViewBitmap(R.id.photo, bitmap);
-        }
-        return views;
-    }
-
-}
diff --git a/new3d/src/com/android/gallery3d/gadget/PhotoDatabaseHelper.java b/new3d/src/com/android/gallery3d/gadget/PhotoDatabaseHelper.java
deleted file mode 100644
index 17591f4..0000000
--- a/new3d/src/com/android/gallery3d/gadget/PhotoDatabaseHelper.java
+++ /dev/null
@@ -1,130 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-
-package com.android.gallery3d.gadget;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteException;
-import android.database.sqlite.SQLiteOpenHelper;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.util.Log;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-class PhotoDatabaseHelper extends SQLiteOpenHelper {
-    private static final String DATABASE_NAME = "launcher.db";
-
-    private static final int DATABASE_VERSION = 2;
-
-    static final String TABLE_PHOTOS = "photos";
-    static final String FIELD_APPWIDGET_ID = "appWidgetId";
-    static final String FIELD_PHOTO_BLOB = "photoBlob";
-
-    PhotoDatabaseHelper(Context context) {
-        super(context, DATABASE_NAME, null, DATABASE_VERSION);
-    }
-
-    @Override
-    public void onCreate(SQLiteDatabase db) {
-        db.execSQL("CREATE TABLE " + TABLE_PHOTOS + " ("
-                + FIELD_APPWIDGET_ID + " INTEGER PRIMARY KEY,"
-                + FIELD_PHOTO_BLOB + " BLOB" + ");");
-    }
-
-    @Override
-    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
-        int version = oldVersion;
-
-        if (version != DATABASE_VERSION) {
-            Log.w(PhotoAppWidgetProvider.TAG, "Destroying all old data.");
-            db.execSQL("DROP TABLE IF EXISTS " + TABLE_PHOTOS);
-            onCreate(db);
-        }
-    }
-
-    /**
-     * Store the given bitmap in this database for the given appWidgetId.
-     */
-    public boolean setPhoto(int appWidgetId, Bitmap bitmap) {
-        boolean success = false;
-        try {
-            // Try go guesstimate how much space the icon will take when
-            // serialized to avoid unnecessary allocations/copies during
-            // the write.
-            int size = bitmap.getWidth() * bitmap.getHeight() * 4;
-            ByteArrayOutputStream out = new ByteArrayOutputStream(size);
-            bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
-            out.flush();
-            out.close();
-
-            ContentValues values = new ContentValues();
-            values.put(PhotoDatabaseHelper.FIELD_APPWIDGET_ID, appWidgetId);
-            values.put(PhotoDatabaseHelper.FIELD_PHOTO_BLOB, out.toByteArray());
-
-            SQLiteDatabase db = getWritableDatabase();
-            db.insertOrThrow(PhotoDatabaseHelper.TABLE_PHOTOS, null, values);
-
-            success = true;
-        } catch (SQLiteException e) {
-            Log.e(PhotoAppWidgetProvider.TAG, "Could not open database", e);
-        } catch (IOException e) {
-            Log.e(PhotoAppWidgetProvider.TAG, "Could not serialize photo", e);
-        }
-        if (PhotoAppWidgetProvider.LOGD) {
-            Log.d(PhotoAppWidgetProvider.TAG, "setPhoto success=" + success);
-        }
-        return success;
-    }
-
-    private static final String[] PHOTOS_PROJECTION = {FIELD_PHOTO_BLOB};
-    private static final int INDEX_PHOTO_BLOB = 0;
-    private static final String WHERE_CLAUSE = FIELD_APPWIDGET_ID + " = ?";
-
-    /**
-     * Inflate and return a bitmap for the given appWidgetId.
-     */
-    public Bitmap getPhoto(int appWidgetId) {
-        Cursor c = null;
-        Bitmap bitmap = null;
-        try {
-            SQLiteDatabase db = getReadableDatabase();
-            String selection = String.format("%s=%d", FIELD_APPWIDGET_ID, appWidgetId);
-            c = db.query(TABLE_PHOTOS, PHOTOS_PROJECTION,
-                    WHERE_CLAUSE, new String[]{String.valueOf(appWidgetId)},
-                    null, null, null, null);
-
-            if (c != null && PhotoAppWidgetProvider.LOGD) {
-                Log.d(PhotoAppWidgetProvider.TAG, "getPhoto query count=" + c.getCount());
-            }
-
-            if (c != null && c.moveToFirst()) {
-                byte[] data = c.getBlob(INDEX_PHOTO_BLOB);
-                if (data != null) {
-                    bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
-                }
-            }
-        } catch (SQLiteException e) {
-            Log.e(PhotoAppWidgetProvider.TAG, "Could not load photo from database", e);
-        } finally {
-            if (c != null) c.close();
-        }
-        return bitmap;
-    }
-
-    /**
-     * Remove any bitmap associated with the given appWidgetId.
-     */
-    public void deletePhoto(int appWidgetId) {
-        try {
-            SQLiteDatabase db = getWritableDatabase();
-            String whereClause = String.format("%s=%d", FIELD_APPWIDGET_ID, appWidgetId);
-            db.delete(TABLE_PHOTOS, whereClause, null);
-        } catch (SQLiteException e) {
-            Log.e(PhotoAppWidgetProvider.TAG, "Could not delete photo from database", e);
-        }
-    }
-}
\ No newline at end of file
diff --git a/new3d/src/com/android/gallery3d/picasa/AlbumEntry.java b/new3d/src/com/android/gallery3d/picasa/AlbumEntry.java
deleted file mode 100644
index 24d6a40..0000000
--- a/new3d/src/com/android/gallery3d/picasa/AlbumEntry.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright (C) 2009 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.android.gallery3d.picasa;
-
-import org.xml.sax.Attributes;
-
-/**
- * This class models the album entry kind in the Picasa GData API.
- */
-@Entry.Table("albums")
-public final class AlbumEntry extends Entry {
-    public static final EntrySchema SCHEMA = new EntrySchema(AlbumEntry.class);
-
-    /**
-     * The user account that is the sync source for this entry. Must be set
-     * before insert/update.
-     */
-    @Column(Columns.SYNC_ACCOUNT)
-    public String syncAccount;
-
-    /**
-     * The ETag for the album/photos GData feed.
-     */
-    @Column(Columns.PHOTOS_ETAG)
-    public String photosEtag = null;
-
-    /**
-     * True if the contents of the album need to be synchronized. Must be set
-     * before insert/update.
-     */
-    @Column(Columns.PHOTOS_DIRTY)
-    public boolean photosDirty;
-
-    /**
-     * The "edit" URI of the album.
-     */
-    @Column(Columns.EDIT_URI)
-    public String editUri;
-
-    /**
-     * The album owner.
-     */
-    @Column(Columns.USER)
-    public String user;
-
-    /**
-     * The title of the album.
-     */
-    @Column(value = Columns.TITLE)
-    public String title;
-
-    /**
-     * A short summary of the contents of the album.
-     */
-    @Column(value = Columns.SUMMARY)
-    public String summary;
-
-    /**
-     * The date the album was created.
-     */
-    @Column(Columns.DATE_PUBLISHED)
-    public long datePublished;
-
-    /**
-     * The date the album was last updated.
-     */
-    @Column(Columns.DATE_UPDATED)
-    public long dateUpdated;
-
-    /**
-     * The date the album entry was last edited. May be more recent than
-     * dateUpdated.
-     */
-    @Column(Columns.DATE_EDITED)
-    public long dateEdited;
-
-    /**
-     * The number of photos in the album.
-     */
-    @Column(Columns.NUM_PHOTOS)
-    public int numPhotos;
-
-    /**
-     * The number of bytes of storage that this album uses.
-     */
-    @Column(Columns.BYTES_USED)
-    public long bytesUsed;
-
-    /**
-     * The user-specified location associated with the album.
-     */
-    @Column(Columns.LOCATION_STRING)
-    public String locationString;
-
-    /**
-     * The thumbnail URL associated with the album.
-     */
-    @Column(Columns.THUMBNAIL_URL)
-    public String thumbnailUrl;
-
-    /**
-     * A link to the HTML page associated with the album.
-     */
-    @Column(Columns.HTML_PAGE_URL)
-    public String htmlPageUrl;
-
-    /**
-     * Column names specific to album entries.
-     */
-    public static final class Columns extends PicasaApi.Columns {
-        public static final String PHOTOS_ETAG = "photos_etag";
-        public static final String USER = "user";
-        public static final String BYTES_USED = "bytes_used";
-        public static final String NUM_PHOTOS = "num_photos";
-        public static final String LOCATION_STRING = "location_string";
-        public static final String PHOTOS_DIRTY = "photos_dirty";
-    }
-
-    /**
-     * Resets values to defaults for object reuse.
-     */
-    @Override
-    public void clear() {
-        super.clear();
-        syncAccount = null;
-        photosDirty = false;
-        editUri = null;
-        user = null;
-        title = null;
-        summary = null;
-        datePublished = 0;
-        dateUpdated = 0;
-        dateEdited = 0;
-        numPhotos = 0;
-        bytesUsed = 0;
-        locationString = null;
-        thumbnailUrl = null;
-        htmlPageUrl = null;
-    }
-
-    /**
-     * Sets the property value corresponding to the given XML element, if
-     * applicable.
-     */
-    @Override
-    public void setPropertyFromXml(String uri, String localName, Attributes attrs, String content) {
-        char localNameChar = localName.charAt(0);
-        if (uri.equals(GDataParser.GPHOTO_NAMESPACE)) {
-            switch (localNameChar) {
-            case 'i':
-                if (localName.equals("id")) {
-                    id = Long.parseLong(content);
-                }
-                break;
-            case 'u':
-                if (localName.equals("user")) {
-                    user = content;
-                }
-                break;
-            case 'n':
-                if (localName.equals("numphotos")) {
-                    numPhotos = Integer.parseInt(content);
-                }
-                break;
-            case 'b':
-                if (localName.equals("bytesUsed")) {
-                    bytesUsed = Long.parseLong(content);
-                }
-                break;
-            }
-        } else if (uri.equals(GDataParser.ATOM_NAMESPACE)) {
-            switch (localNameChar) {
-            case 't':
-                if (localName.equals("title")) {
-                    title = content;
-                }
-                break;
-            case 's':
-                if (localName.equals("summary")) {
-                    summary = content;
-                }
-                break;
-            case 'p':
-                if (localName.equals("published")) {
-                    datePublished = GDataParser.parseAtomTimestamp(content);
-                }
-                break;
-            case 'u':
-                if (localName.equals("updated")) {
-                    dateUpdated = GDataParser.parseAtomTimestamp(content);
-                }
-                break;
-            case 'l':
-                if (localName.equals("link")) {
-                    String rel = attrs.getValue("", "rel");
-                    String href = attrs.getValue("", "href");
-                    if (rel.equals("alternate") && attrs.getValue("", "type").equals("text/html")) {
-                        htmlPageUrl = href;
-                    } else if (rel.equals("edit")) {
-                        editUri = href;
-                    }
-                }
-                break;
-            }
-        } else if (uri.equals(GDataParser.APP_NAMESPACE)) {
-            if (localName.equals("edited")) {
-                dateEdited = GDataParser.parseAtomTimestamp(content);
-            }
-        } else if (uri.equals(GDataParser.MEDIA_RSS_NAMESPACE)) {
-            if (localName == "thumbnail") {
-                thumbnailUrl = attrs.getValue("", "url");
-            }
-        }
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/picasa/Entry.java b/new3d/src/com/android/gallery3d/picasa/Entry.java
deleted file mode 100644
index a20bad0..0000000
--- a/new3d/src/com/android/gallery3d/picasa/Entry.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2009 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.android.gallery3d.picasa;
-
-import org.xml.sax.Attributes;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-public abstract class Entry {
-    public static final String[] ID_PROJECTION = { "_id" };
-
-    // The primary key of the entry.
-    @Column("_id")
-    public long id = 0;
-
-    @Retention(RetentionPolicy.RUNTIME)
-    @Target(ElementType.TYPE)
-    public @interface Table {
-        String value();
-    }
-
-    @Retention(RetentionPolicy.RUNTIME)
-    @Target(ElementType.FIELD)
-    public @interface Column {
-        String value();
-
-        boolean indexed() default false;
-
-        boolean fullText() default false;
-    }
-
-    public void clear() {
-        id = 0;
-    }
-
-    abstract public void setPropertyFromXml(
-            String uri, String localName, Attributes attrs, String content);
-}
diff --git a/new3d/src/com/android/gallery3d/picasa/EntrySchema.java b/new3d/src/com/android/gallery3d/picasa/EntrySchema.java
deleted file mode 100644
index 147e6f3..0000000
--- a/new3d/src/com/android/gallery3d/picasa/EntrySchema.java
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
- * Copyright (C) 2009 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.android.gallery3d.picasa;
-
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.util.Log;
-
-import com.android.gallery3d.util.Utils;
-
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-
-public final class EntrySchema {
-    public static final int TYPE_STRING = 0;
-    public static final int TYPE_BOOLEAN = 1;
-    public static final int TYPE_SHORT = 2;
-    public static final int TYPE_INT = 3;
-    public static final int TYPE_LONG = 4;
-    public static final int TYPE_FLOAT = 5;
-    public static final int TYPE_DOUBLE = 6;
-    public static final int TYPE_BLOB = 7;
-    public static final String SQLITE_TYPES[] = {
-            "TEXT", "INTEGER", "INTEGER", "INTEGER", "INTEGER", "REAL", "REAL", "NONE" };
-
-    private static final String TAG = "SchemaInfo";
-    private static final String FULL_TEXT_INDEX_SUFFIX = "_fulltext";
-
-    private final String mTableName;
-    private final ColumnInfo[] mColumnInfo;
-    private final String[] mProjection;
-    private final boolean mHasFullTextIndex;
-
-    public EntrySchema(Class<? extends Entry> clazz) {
-        // Get table and column metadata from reflection.
-        ColumnInfo[] columns = parseColumnInfo(clazz);
-        mTableName = parseTableName(clazz);
-        mColumnInfo = columns;
-
-        // Cache the list of projection columns and check for full-text columns.
-        String[] projection = {};
-        boolean hasFullTextIndex = false;
-        if (columns != null) {
-            projection = new String[columns.length];
-            for (int i = 0; i != columns.length; ++i) {
-                ColumnInfo column = columns[i];
-                projection[i] = column.name;
-                if (column.fullText) {
-                    hasFullTextIndex = true;
-                }
-            }
-        }
-        mProjection = projection;
-        mHasFullTextIndex = hasFullTextIndex;
-    }
-
-    public String getTableName() {
-        return mTableName;
-    }
-
-    public ColumnInfo[] getColumnInfo() {
-        return mColumnInfo;
-    }
-
-    public String[] getProjection() {
-        return mProjection;
-    }
-
-    private void logExecSql(SQLiteDatabase db, String sql) {
-        // Log.i(TAG, sql);
-        db.execSQL(sql);
-    }
-
-    public <T extends Entry> T cursorToObject(Cursor cursor, T object) {
-        try {
-            for (ColumnInfo column : mColumnInfo) {
-                int columnIndex = column.projectionIndex;
-                Field field = column.field;
-                switch (column.type) {
-                case TYPE_STRING:
-                    field.set(object, cursor.getString(columnIndex));
-                    break;
-                case TYPE_BOOLEAN:
-                    field.setBoolean(object, cursor.getShort(columnIndex) == 1);
-                    break;
-                case TYPE_SHORT:
-                    field.setShort(object, cursor.getShort(columnIndex));
-                    break;
-                case TYPE_INT:
-                    field.setInt(object, cursor.getInt(columnIndex));
-                    break;
-                case TYPE_LONG:
-                    field.setLong(object, cursor.getLong(columnIndex));
-                    break;
-                case TYPE_FLOAT:
-                    field.setFloat(object, cursor.getFloat(columnIndex));
-                    break;
-                case TYPE_DOUBLE:
-                    field.setDouble(object, cursor.getDouble(columnIndex));
-                    break;
-                case TYPE_BLOB:
-                    field.set(object, cursor.getBlob(columnIndex));
-                    break;
-                }
-            }
-            return object;
-        } catch (IllegalAccessException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    public void objectToValues(Entry object, ContentValues values) {
-        try {
-            for (ColumnInfo column : mColumnInfo) {
-                String columnName = column.name;
-                Field field = column.field;
-                switch (column.type) {
-                case TYPE_STRING:
-                    values.put(columnName, (String) field.get(object));
-                    break;
-                case TYPE_BOOLEAN:
-                    values.put(columnName, field.getBoolean(object));
-                    break;
-                case TYPE_SHORT:
-                    values.put(columnName, field.getShort(object));
-                    break;
-                case TYPE_INT:
-                    values.put(columnName, field.getInt(object));
-                    break;
-                case TYPE_LONG:
-                    values.put(columnName, field.getLong(object));
-                    break;
-                case TYPE_FLOAT:
-                    values.put(columnName, field.getFloat(object));
-                    break;
-                case TYPE_DOUBLE:
-                    values.put(columnName, field.getDouble(object));
-                    break;
-                case TYPE_BLOB:
-                    values.put(columnName, (byte[]) field.get(object));
-                    break;
-                }
-            }
-        } catch (IllegalAccessException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    public Cursor queryAll(SQLiteDatabase db) {
-        return db.query(mTableName, mProjection, null, null, null, null, null);
-    }
-
-    public boolean queryWithId(SQLiteDatabase db, long id, Entry entry) {
-        Cursor cursor = db.query(mTableName, mProjection, "_id=?",
-                new String[] {Long.toString(id)}, null, null, null);
-        boolean success = false;
-        if (cursor.moveToFirst()) {
-            cursorToObject(cursor, entry);
-            success = true;
-        }
-        cursor.close();
-        return success;
-    }
-
-    public long insertOrReplace(SQLiteDatabase db, Entry entry) {
-        ContentValues values = new ContentValues();
-        objectToValues(entry, values);
-        if (entry.id == 0) {
-            Log.i(TAG, "removing id before insert");
-            values.remove("_id");
-        }
-        long id = db.replace(mTableName, "_id", values);
-        entry.id = id;
-        return id;
-    }
-
-    public boolean deleteWithId(SQLiteDatabase db, long id) {
-        return db.delete(mTableName, "_id=?", new String[] { Long.toString(id) }) == 1;
-    }
-
-    public void createTables(SQLiteDatabase db) {
-        // Wrapped class must have a @Table.Definition.
-        String tableName = mTableName;
-        Utils.Assert(tableName != null);
-
-        // Add the CREATE TABLE statement for the main table.
-        StringBuilder sql = new StringBuilder("CREATE TABLE ");
-        sql.append(tableName);
-        sql.append(" (_id INTEGER PRIMARY KEY");
-        for (ColumnInfo column : mColumnInfo) {
-            if (!column.isId()) {
-                sql.append(',');
-                sql.append(column.name);
-                sql.append(' ');
-                sql.append(SQLITE_TYPES[column.type]);
-                if (column.extraSql != null) {
-                    sql.append(' ');
-                    sql.append(column.extraSql);
-                }
-            }
-        }
-        sql.append(");");
-        logExecSql(db, sql.toString());
-        sql.setLength(0);
-
-        // Create indexes for all indexed columns.
-        for (ColumnInfo column : mColumnInfo) {
-            // Create an index on the indexed columns.
-            if (column.indexed) {
-                sql.append("CREATE INDEX ");
-                sql.append(tableName);
-                sql.append("_index_");
-                sql.append(column.name);
-                sql.append(" ON ");
-                sql.append(tableName);
-                sql.append(" (");
-                sql.append(column.name);
-                sql.append(");");
-                logExecSql(db, sql.toString());
-                sql.setLength(0);
-            }
-        }
-
-        if (mHasFullTextIndex) {
-            // Add an FTS virtual table if using full-text search.
-            String ftsTableName = tableName + FULL_TEXT_INDEX_SUFFIX;
-            sql.append("CREATE VIRTUAL TABLE ");
-            sql.append(ftsTableName);
-            sql.append(" USING FTS3 (_id INTEGER PRIMARY KEY");
-            for (ColumnInfo column : mColumnInfo) {
-                if (column.fullText) {
-                    // Add the column to the FTS table.
-                    String columnName = column.name;
-                    sql.append(',');
-                    sql.append(columnName);
-                    sql.append(" TEXT");
-                }
-            }
-            sql.append(");");
-            logExecSql(db, sql.toString());
-            sql.setLength(0);
-
-            // Build an insert statement that will automatically keep the FTS
-            // table in sync.
-            StringBuilder insertSql = new StringBuilder("INSERT OR REPLACE INTO ");
-            insertSql.append(ftsTableName);
-            insertSql.append(" (_id");
-            for (ColumnInfo column : mColumnInfo) {
-                if (column.fullText) {
-                    insertSql.append(',');
-                    insertSql.append(column.name);
-                }
-            }
-            insertSql.append(") VALUES (new._id");
-            for (ColumnInfo column : mColumnInfo) {
-                if (column.fullText) {
-                    insertSql.append(",new.");
-                    insertSql.append(column.name);
-                }
-            }
-            insertSql.append(");");
-            String insertSqlString = insertSql.toString();
-
-            // Add an insert trigger.
-            sql.append("CREATE TRIGGER ");
-            sql.append(tableName);
-            sql.append("_insert_trigger AFTER INSERT ON ");
-            sql.append(tableName);
-            sql.append(" FOR EACH ROW BEGIN ");
-            sql.append(insertSqlString);
-            sql.append("END;");
-            logExecSql(db, sql.toString());
-            sql.setLength(0);
-
-            // Add an update trigger.
-            sql.append("CREATE TRIGGER ");
-            sql.append(tableName);
-            sql.append("_update_trigger AFTER UPDATE ON ");
-            sql.append(tableName);
-            sql.append(" FOR EACH ROW BEGIN ");
-            sql.append(insertSqlString);
-            sql.append("END;");
-            logExecSql(db, sql.toString());
-            sql.setLength(0);
-
-            // Add a delete trigger.
-            sql.append("CREATE TRIGGER ");
-            sql.append(tableName);
-            sql.append("_delete_trigger AFTER DELETE ON ");
-            sql.append(tableName);
-            sql.append(" FOR EACH ROW BEGIN DELETE FROM ");
-            sql.append(ftsTableName);
-            sql.append(" WHERE _id = old._id; END;");
-            logExecSql(db, sql.toString());
-            sql.setLength(0);
-        }
-    }
-
-    public void dropTables(SQLiteDatabase db) {
-        String tableName = mTableName;
-        StringBuilder sql = new StringBuilder("DROP TABLE IF EXISTS ");
-        sql.append(tableName);
-        sql.append(';');
-        logExecSql(db, sql.toString());
-        sql.setLength(0);
-
-        if (mHasFullTextIndex) {
-            sql.append("DROP TABLE IF EXISTS ");
-            sql.append(tableName);
-            sql.append(FULL_TEXT_INDEX_SUFFIX);
-            sql.append(';');
-            logExecSql(db, sql.toString());
-        }
-
-    }
-
-    public void deleteAll(SQLiteDatabase db) {
-        StringBuilder sql = new StringBuilder("DELETE FROM ");
-        sql.append(mTableName);
-        sql.append(";");
-        logExecSql(db, sql.toString());
-    }
-
-    private String parseTableName(Class<? extends Object> clazz) {
-        // Check for a table annotation.
-        Entry.Table table = clazz.getAnnotation(Entry.Table.class);
-        if (table == null) {
-            return null;
-        }
-
-        // Return the table name.
-        return table.value();
-    }
-
-    private ColumnInfo[] parseColumnInfo(Class<? extends Object> clazz) {
-        // Gather metadata from each annotated field.
-        ArrayList<ColumnInfo> columns = new ArrayList<ColumnInfo>();
-        Field[] fields = clazz.getFields();
-        for (int i = 0; i != fields.length; ++i) {
-            // Get column metadata from the annotation.
-            Field field = fields[i];
-            Entry.Column info = ((AnnotatedElement) field).getAnnotation(Entry.Column.class);
-            if (info == null) {
-                continue;
-            }
-
-            // Determine the field type.
-            int type;
-            Class<?> fieldType = field.getType();
-            if (fieldType == String.class) {
-                type = TYPE_STRING;
-            } else if (fieldType == boolean.class) {
-                type = TYPE_BOOLEAN;
-            } else if (fieldType == short.class) {
-                type = TYPE_SHORT;
-            } else if (fieldType == int.class) {
-                type = TYPE_INT;
-            } else if (fieldType == long.class) {
-                type = TYPE_LONG;
-            } else if (fieldType == float.class) {
-                type = TYPE_FLOAT;
-            } else if (fieldType == double.class) {
-                type = TYPE_DOUBLE;
-            } else if (fieldType == byte[].class) {
-                type = TYPE_BLOB;
-            } else {
-                throw new IllegalArgumentException(
-                        "Unsupported field type for column: " + fieldType.getName());
-            }
-
-            // Add the column to the array.
-            int index = columns.size();
-            columns.add(new ColumnInfo(info.value(),
-                    type, info.indexed(), info.fullText(), field, index));
-        }
-
-        // Return a list.
-        ColumnInfo[] columnList = new ColumnInfo[columns.size()];
-        columns.toArray(columnList);
-        return columnList;
-    }
-
-    public static final class ColumnInfo {
-        private static final String ID_KEY = "_id";
-
-        public final String name;
-        public final int type;
-        public final boolean indexed;
-        public final boolean fullText;
-        public final String extraSql = "";
-        public final Field field;
-        public final int projectionIndex;
-
-        public ColumnInfo(String name, int type, boolean indexed,
-                boolean fullText, Field field, int projectionIndex) {
-            this.name = name.toLowerCase();
-            this.type = type;
-            this.indexed = indexed;
-            this.fullText = fullText;
-            this.field = field;
-            this.projectionIndex = projectionIndex;
-        }
-
-        public boolean isId() {
-            return ID_KEY.equals(name);
-        }
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/picasa/GDataClient.java b/new3d/src/com/android/gallery3d/picasa/GDataClient.java
deleted file mode 100644
index 9e8a47a..0000000
--- a/new3d/src/com/android/gallery3d/picasa/GDataClient.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright (C) 2009 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.android.gallery3d.picasa;
-
-import android.text.TextUtils;
-import android.util.Log;
-
-import org.apache.http.Header;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.client.methods.HttpUriRequest;
-import org.apache.http.client.params.HttpClientParams;
-import org.apache.http.conn.scheme.PlainSocketFactory;
-import org.apache.http.conn.scheme.Scheme;
-import org.apache.http.conn.scheme.SchemeRegistry;
-import org.apache.http.entity.ByteArrayEntity;
-import org.apache.http.entity.InputStreamEntity;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
-import org.apache.http.params.BasicHttpParams;
-import org.apache.http.params.HttpConnectionParams;
-import org.apache.http.params.HttpParams;
-import org.apache.http.params.HttpProtocolParams;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.GZIPOutputStream;
-
-public final class GDataClient {
-    private static final String TAG = "GDataClient";
-    private static final String USER_AGENT = "GData/1.0; gzip";
-    private static final String X_HTTP_METHOD_OVERRIDE = "X-HTTP-Method-Override";
-    private static final String IF_MATCH = "If-Match";
-    private static final int CONNECTION_TIMEOUT = 20000; // ms.
-    private static final int MIN_GZIP_SIZE = 512;
-    public static final HttpParams HTTP_PARAMS;
-    public static final ThreadSafeClientConnManager HTTP_CONNECTION_MANAGER;
-
-    private final DefaultHttpClient mHttpClient =
-            new DefaultHttpClient(HTTP_CONNECTION_MANAGER, HTTP_PARAMS);
-    private String mAuthToken;
-
-    static {
-        // Prepare HTTP parameters.
-        HttpParams params = new BasicHttpParams();
-        HttpConnectionParams.setStaleCheckingEnabled(params, false);
-        HttpConnectionParams.setConnectionTimeout(params, CONNECTION_TIMEOUT);
-        HttpConnectionParams.setSoTimeout(params, CONNECTION_TIMEOUT);
-        HttpClientParams.setRedirecting(params, true);
-        HttpProtocolParams.setUserAgent(params, USER_AGENT);
-        HTTP_PARAMS = params;
-
-        // Register HTTP protocol.
-        SchemeRegistry schemeRegistry = new SchemeRegistry();
-        schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
-
-        // Create the connection manager.
-        HTTP_CONNECTION_MANAGER = new ThreadSafeClientConnManager(params, schemeRegistry);
-    }
-
-    public static final class Operation {
-        public String inOutEtag;
-        public int outStatus;
-        public InputStream outBody;
-    }
-
-    public void setAuthToken(String authToken) {
-        mAuthToken = authToken;
-    }
-
-    public void get(String feedUrl, Operation operation) throws IOException {
-        callMethod(new HttpGet(feedUrl), operation);
-    }
-
-    public void post(String feedUrl, byte[] data, String contentType, Operation operation)
-            throws IOException {
-        ByteArrayEntity entity = getCompressedEntity(data);
-        entity.setContentType(contentType);
-        HttpPost post = new HttpPost(feedUrl);
-        post.setEntity(entity);
-        callMethod(post, operation);
-    }
-
-    public void put(String feedUrl, byte[] data, String contentType, Operation operation)
-            throws IOException {
-        ByteArrayEntity entity = getCompressedEntity(data);
-        entity.setContentType(contentType);
-        HttpPost post = new HttpPost(feedUrl);
-        post.setHeader(X_HTTP_METHOD_OVERRIDE, "PUT");
-        post.setEntity(entity);
-        callMethod(post, operation);
-    }
-
-    public void putStream(String feedUrl, InputStream stream, String contentType,
-            Operation operation) throws IOException {
-        InputStreamEntity entity = new InputStreamEntity(stream, -1);
-        entity.setContentType(contentType);
-        HttpPost post = new HttpPost(feedUrl);
-        post.setHeader(X_HTTP_METHOD_OVERRIDE, "PUT");
-        post.setEntity(entity);
-        callMethod(post, operation);
-    }
-
-    public void delete(String feedUrl, Operation operation) throws IOException {
-        HttpPost post = new HttpPost(feedUrl);
-        String etag = operation.inOutEtag;
-        post.setHeader(X_HTTP_METHOD_OVERRIDE, "DELETE");
-        post.setHeader(IF_MATCH, etag != null ? etag : "*");
-        callMethod(post, operation);
-    }
-
-    private void callMethod(HttpUriRequest request, Operation operation) throws IOException {
-        // Specify GData protocol version 2.0.
-        request.addHeader("GData-Version", "2");
-
-        // Indicate support for gzip-compressed responses.
-        request.addHeader("Accept-Encoding", "gzip");
-
-        // Specify authorization token if provided.
-        String authToken = mAuthToken;
-        if (!TextUtils.isEmpty(authToken)) {
-            request.addHeader("Authorization", "GoogleLogin auth=" + authToken);
-        }
-
-        // Specify the ETag of a prior response, if available.
-        String etag = operation.inOutEtag;
-        if (etag != null) {
-            request.addHeader("If-None-Match", etag);
-        }
-
-        // Execute the HTTP request.
-        HttpResponse httpResponse = null;
-        try {
-            httpResponse = mHttpClient.execute(request);
-        } catch (IOException e) {
-            Log.w(TAG, "Request failed: " + request.getURI());
-            throw e;
-        }
-
-        // Get the status code and response body.
-        int status = httpResponse.getStatusLine().getStatusCode();
-        InputStream stream = null;
-        HttpEntity entity = httpResponse.getEntity();
-        if (entity != null) {
-            // Wrap the entity input stream in a GZIP decoder if necessary.
-            stream = entity.getContent();
-            if (stream != null) {
-                Header header = entity.getContentEncoding();
-                if (header != null) {
-                    if (header.getValue().contains("gzip")) {
-                        stream = new GZIPInputStream(stream);
-                    }
-                }
-            }
-        }
-
-        // Return the stream if successful.
-        Header etagHeader = httpResponse.getFirstHeader("ETag");
-        operation.outStatus = status;
-        operation.inOutEtag = etagHeader != null ? etagHeader.getValue() : null;
-        operation.outBody = stream;
-    }
-
-    private ByteArrayEntity getCompressedEntity(byte[] data) throws IOException {
-        ByteArrayEntity entity;
-        if (data.length >= MIN_GZIP_SIZE) {
-            ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(data.length / 2);
-            GZIPOutputStream gzipOutput = new GZIPOutputStream(byteOutput);
-            gzipOutput.write(data);
-            gzipOutput.close();
-            entity = new ByteArrayEntity(byteOutput.toByteArray());
-        } else {
-            entity = new ByteArrayEntity(data);
-        }
-        return entity;
-    }
-
-    public static String inputStreamToString(InputStream stream) throws IOException {
-        InputStreamReader reader = new InputStreamReader(stream);
-        StringBuilder builder = new StringBuilder();
-        char buffer[] = new char[4096];
-        int charsRead = reader.read(buffer);
-        while (charsRead > 0) {
-            builder.append(buffer, 0, charsRead);
-        }
-        return builder.toString();
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/picasa/GDataParser.java b/new3d/src/com/android/gallery3d/picasa/GDataParser.java
deleted file mode 100644
index 175789c..0000000
--- a/new3d/src/com/android/gallery3d/picasa/GDataParser.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright (C) 2009 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.android.gallery3d.picasa;
-
-import android.text.format.Time;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.AttributesImpl;
-
-public final class GDataParser implements ContentHandler {
-    public static final String APP_NAMESPACE = "http://www.w3.org/2007/app";
-    public static final String ATOM_NAMESPACE = "http://www.w3.org/2005/Atom";
-    public static final String GD_NAMESPACE = "http://schemas.google.com/g/2005";
-    public static final String GPHOTO_NAMESPACE = "http://schemas.google.com/photos/2007";
-    public static final String MEDIA_RSS_NAMESPACE = "http://search.yahoo.com/mrss/";
-    public static final String GML_NAMESPACE = "http://www.opengis.net/gml";
-    private static final String FEED_ELEMENT = "feed";
-    private static final String ENTRY_ELEMENT = "entry";
-
-    private static final int STATE_DOCUMENT = 0;
-    private static final int STATE_FEED = 1;
-    private static final int STATE_ENTRY = 2;
-
-    private static final int NUM_LEVELS = 5;
-
-    private Entry mEntry = null;
-    private EntryHandler mHandler = null;
-    private int mState = STATE_DOCUMENT;
-    private int mLevel = 0;
-    private final String[] mUri = new String[NUM_LEVELS];
-    private final String[] mName = new String[NUM_LEVELS];
-    private final AttributesImpl[] mAttributes = new AttributesImpl[NUM_LEVELS];
-    private final StringBuilder mValue = new StringBuilder(128);
-
-    public interface EntryHandler {
-        void handleEntry(Entry entry);
-    }
-
-    public GDataParser() {
-        AttributesImpl[] attributes = mAttributes;
-        for (int i = 0; i != NUM_LEVELS; ++i) {
-            attributes[i] = new AttributesImpl();
-        }
-    }
-
-    public void setEntry(Entry entry) {
-        mEntry = entry;
-    }
-
-    public void setHandler(EntryHandler handler) {
-        mHandler = handler;
-    }
-
-    public static long parseAtomTimestamp(String timestamp) {
-        Time time = new Time();
-        time.parse3339(timestamp);
-        return time.toMillis(true);
-    }
-
-    public void startElement(String uri, String localName, String qName, Attributes attrs)
-            throws SAXException {
-        switch (mState) {
-            case STATE_DOCUMENT:
-                // Expect an atom:feed element.
-                if (uri.equals(ATOM_NAMESPACE) && localName.equals(FEED_ELEMENT)) {
-                    mState = STATE_FEED;
-                } else {
-                    throw new SAXException();
-                }
-                break;
-            case STATE_FEED:
-                // Expect a feed property element or an atom:entry element.
-                if (uri.equals(ATOM_NAMESPACE) && localName.equals(ENTRY_ELEMENT)) {
-                    mState = STATE_ENTRY;
-                    mEntry.clear();
-                } else {
-                    startProperty(uri, localName, attrs);
-                }
-                break;
-            case STATE_ENTRY:
-                startProperty(uri, localName, attrs);
-                break;
-        }
-    }
-
-    public void endElement(String uri, String localName, String qName) throws SAXException {
-        if (mLevel > 0) {
-            // Handle property exit.
-            endProperty();
-        } else {
-            // Handle state exit.
-            switch (mState) {
-            case STATE_DOCUMENT:
-                throw new SAXException();
-            case STATE_FEED:
-                mState = STATE_DOCUMENT;
-                break;
-            case STATE_ENTRY:
-                mState = STATE_FEED;
-                mHandler.handleEntry(mEntry);
-                break;
-            }
-        }
-    }
-
-    private void startProperty(String uri, String localName, Attributes attrs) {
-        // Push element information onto the property stack.
-        int level = ++mLevel;
-        mValue.setLength(0);
-        mUri[level] = uri;
-        mName[level] = localName;
-        mAttributes[level].setAttributes(attrs);
-    }
-
-    private void endProperty() {
-        // Apply property to the entry, then pop the stack.
-        int level = mLevel;
-        mEntry.setPropertyFromXml(mUri[level], mName[level], mAttributes[level], mValue.toString());
-        mLevel = level - 1;
-    }
-
-    public void characters(char[] ch, int start, int length) throws SAXException {
-        mValue.append(ch, start, length);
-    }
-
-    public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
-        // Ignored.
-    }
-
-    public void processingInstruction(String target, String data) throws SAXException {
-        // Ignored.
-    }
-
-    public void setDocumentLocator(Locator locator) {
-        // Ignored.
-    }
-
-    public void skippedEntity(String name) throws SAXException {
-        // Ignored.
-    }
-
-    public void startDocument() throws SAXException {
-        // Ignored.
-    }
-
-    public void endDocument() throws SAXException {
-        // Ignored.
-    }
-
-    public void startPrefixMapping(String prefix, String uri) throws SAXException {
-        // Ignored.
-    }
-
-    public void endPrefixMapping(String prefix) throws SAXException {
-        // Ignored.
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/picasa/PhotoEntry.java b/new3d/src/com/android/gallery3d/picasa/PhotoEntry.java
deleted file mode 100644
index 0f13baa..0000000
--- a/new3d/src/com/android/gallery3d/picasa/PhotoEntry.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * Copyright (C) 2009 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.android.gallery3d.picasa;
-
-import org.xml.sax.Attributes;
-
-/**
- * This class models the photo entry kind in the Picasa GData API.
- */
-@Entry.Table("photos")
-public final class PhotoEntry extends Entry {
-    public static final EntrySchema SCHEMA = new EntrySchema(PhotoEntry.class);
-
-    public static class Columns {
-        public static final String SYNC_ACCOUNT = "sync_account";
-        public static final String EDIT_URI = "edit_uri";
-        public static final String ALBUM_ID = "album_id";
-        public static final String DISPLAY_INDEX = "display_index";
-        public static final String TITLE = "title";
-        public static final String SUMMARY = "summary";
-        public static final String DATE_PUBLISHED = "date_published";
-        public static final String DATE_UPDATED = "date_updated";
-        public static final String DATE_EDITED = "date_edited";
-        public static final String DATE_TAKEN = "date_taken";
-        public static final String COMMENT_COUNT = "comment_count";
-        public static final String WIDTH = "width";
-        public static final String HEIGHT = "height";
-        public static final String ROTATION = "rotation";
-        public static final String SIZE = "size";
-        public static final String LATITUDE = "latitude";
-        public static final String LONGITUDE = "longitude";
-        public static final String THUMBNAIL_URL = "thumbnail_url";
-        public static final String SCREENNAIL_URL = "screennail_url";
-        public static final String CONTENT_URL = "content_url";
-        public static final String CONTENT_TYPE = "content_type";
-        public static final String HTML_PAGE_URL = "html_page_url";
-    }
-
-    /**
-     * The user account that is the sync source for this entry. Must be set
-     * before insert/update.
-     */
-    @Column(Columns.SYNC_ACCOUNT)
-    public String syncAccount;
-
-    /**
-     * The "edit" URI of the photo.
-     */
-    @Column(Columns.EDIT_URI)
-    public String editUri;
-
-    /**
-     * The containing album ID.
-     */
-    @Column(value = Columns.ALBUM_ID, indexed = true)
-    public long albumId;
-
-    /**
-     * The display index of the photo within the album. Must be set before
-     * insert/update.
-     */
-    @Column(value = Columns.DISPLAY_INDEX, indexed = true)
-    public int displayIndex;
-
-    /**
-     * The title of the photo.
-     */
-    @Column(Columns.TITLE)
-    public String title;
-
-    /**
-     * A short summary of the photo.
-     */
-    @Column(Columns.SUMMARY)
-    public String summary;
-
-    /**
-     * The date the photo was added.
-     */
-    @Column(Columns.DATE_PUBLISHED)
-    public long datePublished;
-
-    /**
-     * The date the photo was last updated.
-     */
-    @Column(Columns.DATE_UPDATED)
-    public long dateUpdated;
-
-    /**
-     * The date the photo entry was last edited. May be more recent than
-     * dateUpdated.
-     */
-    @Column(Columns.DATE_EDITED)
-    public long dateEdited;
-
-    /**
-     * The date the photo was captured as specified in the EXIF data.
-     */
-    @Column(Columns.DATE_TAKEN)
-    public long dateTaken;
-
-    /**
-     * The number of comments associated with the photo.
-     */
-    @Column(Columns.COMMENT_COUNT)
-    public int commentCount;
-
-    /**
-     * The width of the photo in pixels.
-     */
-    @Column(Columns.WIDTH)
-    public int width;
-
-    /**
-     * The height of the photo in pixels.
-     */
-    @Column(Columns.HEIGHT)
-    public int height;
-
-    /**
-     * The rotation of the photo in degrees, if rotation has not already been
-     * applied.
-     */
-    @Column(Columns.ROTATION)
-    public int rotation;
-
-    /**
-     * The size of the photo is bytes.
-     */
-    @Column(Columns.SIZE)
-    public int size;
-
-    /**
-     * The latitude associated with the photo.
-     */
-    @Column(Columns.LATITUDE)
-    public double latitude;
-
-    /**
-     * The longitude associated with the photo.
-     */
-    @Column(Columns.LONGITUDE)
-    public double longitude;
-
-    /**
-     * The "mini-thumbnail" URL for the photo (currently 144px-cropped).
-     */
-    @Column(Columns.THUMBNAIL_URL)
-    public String thumbnailUrl;
-
-    /**
-     * The "screennail" URL for the photo (currently 800px).
-     */
-    @Column(Columns.SCREENNAIL_URL)
-    public String screennailUrl;
-
-    /**
-     * The "content" URL for the photo (currently 1280px, or a video). The
-     * original image URL is not fetched since "imgmax" accepts one size, used
-     * to get this resource.
-     */
-    @Column(Columns.CONTENT_URL)
-    public String contentUrl;
-
-    /**
-     * The MIME type of the content URL.
-     */
-    @Column(Columns.CONTENT_TYPE)
-    public String contentType;
-
-    /**
-     * A link to the HTML page associated with the album.
-     */
-    @Column(Columns.HTML_PAGE_URL)
-    public String htmlPageUrl;
-
-    /**
-     * Resets values to defaults for object reuse.
-     */
-    @Override
-    public void clear() {
-        super.clear();
-        syncAccount = null;
-        editUri = null;
-        albumId = 0;
-        displayIndex = 0;
-        title = null;
-        summary = null;
-        datePublished = 0;
-        dateUpdated = 0;
-        dateEdited = 0;
-        dateTaken = 0;
-        commentCount = 0;
-        width = 0;
-        height = 0;
-        rotation = 0;
-        size = 0;
-        latitude = 0;
-        longitude = 0;
-        thumbnailUrl = null;
-        screennailUrl = null;
-        contentUrl = null;
-        contentType = null;
-        htmlPageUrl = null;
-    }
-
-    /**
-     * Sets the property value corresponding to the given XML element, if
-     * applicable.
-     */
-    @Override
-    public void setPropertyFromXml(String uri, String localName, Attributes attrs, String content) {
-        try {
-            char localNameChar = localName.charAt(0);
-            if (uri.equals(GDataParser.GPHOTO_NAMESPACE)) {
-                switch (localNameChar) {
-                case 'i':
-                    if (localName.equals("id")) {
-                        id = Long.parseLong(content);
-                    }
-                    break;
-                case 'a':
-                    if (localName.equals("albumid")) {
-                        albumId = Long.parseLong(content);
-                    }
-                    break;
-                case 't':
-                    if (localName.equals("timestamp")) {
-                        dateTaken = Long.parseLong(content);
-                    }
-                    break;
-                case 'c':
-                    if (localName.equals("commentCount")) {
-                        commentCount = Integer.parseInt(content);
-                    }
-                    break;
-                case 'w':
-                    if (localName.equals("width")) {
-                        width = Integer.parseInt(content);
-                    }
-                    break;
-                case 'h':
-                    if (localName.equals("height")) {
-                        height = Integer.parseInt(content);
-                    }
-                    break;
-                case 'r':
-                    if (localName.equals("rotation")) {
-                        rotation = Integer.parseInt(content);
-                    }
-                    break;
-                case 's':
-                    if (localName.equals("size")) {
-                        size = Integer.parseInt(content);
-                    }
-                    break;
-                case 'l':
-                    if (localName.equals("latitude")) {
-                        latitude = Double.parseDouble(content);
-                    } else if (localName.equals("longitude")) {
-                        longitude = Double.parseDouble(content);
-                    }
-                    break;
-                }
-            } else if (uri.equals(GDataParser.ATOM_NAMESPACE)) {
-                switch (localNameChar) {
-                case 't':
-                    if (localName.equals("title")) {
-                        title = content;
-                    }
-                    break;
-                case 's':
-                    if (localName.equals("summary")) {
-                        summary = content;
-                    }
-                    break;
-                case 'p':
-                    if (localName.equals("published")) {
-                        datePublished = GDataParser.parseAtomTimestamp(content);
-                    }
-                    break;
-                case 'u':
-                    if (localName.equals("updated")) {
-                        dateUpdated = GDataParser.parseAtomTimestamp(content);
-                    }
-                    break;
-                case 'l':
-                    if (localName.equals("link")) {
-                        String rel = attrs.getValue("", "rel");
-                        String href = attrs.getValue("", "href");
-                        if (rel.equals("alternate")
-                                && attrs.getValue("", "type").equals("text/html")) {
-                            htmlPageUrl = href;
-                        } else if (rel.equals("edit")) {
-                            editUri = href;
-                        }
-                    }
-                    break;
-                }
-            } else if (uri.equals(GDataParser.APP_NAMESPACE)) {
-                if (localName.equals("edited")) {
-                    dateEdited = GDataParser.parseAtomTimestamp(content);
-                }
-            } else if (uri.equals(GDataParser.MEDIA_RSS_NAMESPACE)) {
-                if (localName.equals("thumbnail")) {
-                    int width = Integer.parseInt(attrs.getValue("", "width"));
-                    int height = Integer.parseInt(attrs.getValue("", "height"));
-                    int dimension = Math.max(width, height);
-                    String url = attrs.getValue("", "url");
-                    if (dimension <= PicasaApi.THUMBNAIL_SIZE_THRESHOLD) {
-                        thumbnailUrl = url;
-                    } else {
-                        screennailUrl = url;
-                    }
-                } else if (localName.equals("content")) {
-                    // Only replace an existing URL if the MIME type is video.
-                    String type = attrs.getValue("", "type");
-                    if (contentUrl == null || type.startsWith("video/")) {
-                        contentUrl = attrs.getValue("", "url");
-                        contentType = type;
-                    }
-                }
-            } else if (uri.equals(GDataParser.GML_NAMESPACE)) {
-                if (localName.equals("pos")) {
-                    int spaceIndex = content.indexOf(' ');
-                    if (spaceIndex != -1) {
-                        latitude = Double.parseDouble(content.substring(0, spaceIndex));
-                        longitude = Double.parseDouble(content.substring(spaceIndex + 1));
-                    }
-                }
-            }
-        } catch (Exception e) {
-            return;
-        }
-    }
-
-}
diff --git a/new3d/src/com/android/gallery3d/picasa/PicasaApi.java b/new3d/src/com/android/gallery3d/picasa/PicasaApi.java
deleted file mode 100644
index b45d421..0000000
--- a/new3d/src/com/android/gallery3d/picasa/PicasaApi.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * Copyright (C) 2009 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.android.gallery3d.picasa;
-
-import android.accounts.Account;
-import android.accounts.AccountManager;
-import android.app.Activity;
-import android.content.Context;
-import android.content.SyncResult;
-import android.net.Uri;
-import android.os.Bundle;
-import android.util.Log;
-import android.util.Xml;
-
-import org.apache.http.HttpStatus;
-import org.xml.sax.SAXException;
-
-import java.io.IOException;
-import java.net.SocketException;
-import java.util.ArrayList;
-
-public final class PicasaApi {
-    public static final int RESULT_OK = 0;
-    public static final int RESULT_NOT_MODIFIED = 1;
-    public static final int RESULT_ERROR = 2;
-
-    private static final String TAG = "PicasaAPI";
-    private static final String BASE_URL = "http://picasaweb.google.com/data/feed/api/";
-    private static final String BASE_QUERY_STRING;
-
-    // The specs of query parameters are documented here:
-    // http://code.google.com/apis/picasaweb/docs/2.0/reference.html
-    public static final int THUMBNAIL_SIZE_THRESHOLD = 144;
-    private static final String THUMBNAIL_SIZE = "144c";
-    private static final String SCREENNAIL_SIZE = "512u";
-    private static final String FULL_SIZE = "d"; // Use the original size
-
-
-    static {
-        // Build the base query string using screen dimensions.
-        final StringBuilder query = new StringBuilder("?max-results=1000");
-        query.append("&imgmax=").append(FULL_SIZE);
-        query.append("&thumbsize=").append(THUMBNAIL_SIZE).append(",")
-                .append(SCREENNAIL_SIZE);
-        query.append("&visibility=visible");
-        BASE_QUERY_STRING = query.toString();
-    }
-
-    private final GDataClient mClient;
-    private final GDataClient.Operation mOperation = new GDataClient.Operation();
-    private final GDataParser mParser = new GDataParser();
-    private final AlbumEntry mAlbumInstance = new AlbumEntry();
-    private final PhotoEntry mPhotoInstance = new PhotoEntry();
-    private AuthAccount mAuth;
-
-    public static final class AuthAccount {
-        public final String user;
-        public final String authToken;
-        public final Account account;
-
-        public AuthAccount(String user, String authToken, Account account) {
-            this.user = user;
-            this.authToken = authToken;
-            this.account = account;
-        }
-    }
-
-    public static Account[] getAccounts(Context context) {
-        // Return the list of accounts supporting the Picasa GData service.
-        AccountManager accountManager = AccountManager.get(context);
-        Account[] accounts = {};
-        try {
-            accounts = accountManager.getAccountsByTypeAndFeatures(PicasaService.ACCOUNT_TYPE,
-                    new String[] { PicasaService.FEATURE_SERVICE_NAME }, null, null).getResult();
-        } catch (Exception e) {
-            Log.e(TAG, "cannot get accounts", e);
-        }
-        return accounts;
-    }
-
-    public static AuthAccount[] getAuthenticatedAccounts(Context context) {
-        AccountManager accountManager = AccountManager.get(context);
-        Account[] accounts = getAccounts(context);
-        if (accounts == null) return new AuthAccount[0];
-
-        int numAccounts = accounts.length;
-        ArrayList<AuthAccount> authAccounts = new ArrayList<AuthAccount>(numAccounts);
-        for (int i = 0; i != numAccounts; ++i) {
-            Account account = accounts[i];
-            String authToken;
-            try {
-                // Get the token without user interaction.
-                authToken = accountManager
-                        .blockingGetAuthToken(account, PicasaService.SERVICE_NAME, true);
-
-                // TODO: Remove this once the build is signed by Google, since
-                // we will always have permission.
-                // This code requests permission from the user explicitly.
-                if (context instanceof Activity) {
-                    Bundle bundle = accountManager.getAuthToken(
-                            account, PicasaService.SERVICE_NAME, null, (Activity) context,
-                            null, null).getResult();
-                    authToken = bundle.getString("authtoken");
-                    PicasaService.requestSync(context, PicasaService.TYPE_USERS_ALBUMS, -1);
-                }
-
-                // Add the account information to the list of accounts.
-                if (authToken != null) {
-                    String username = canonicalizeUsername(account.name);
-                    authAccounts.add(new AuthAccount(username, authToken, account));
-                }
-            } catch (Exception e) {
-                Log.e(TAG, "fail to get authenticated accounts", e);
-            }
-        }
-        return authAccounts.toArray(new AuthAccount[authAccounts.size()]);
-    }
-
-    /**
-     * Returns a canonical username for a Gmail account.  Lowercases the username and
-     * strips off a "gmail.com" or "googlemail.com" domain, but leaves other domains alone.
-     *
-     * e.g., Passing in "User@gmail.com: will return "user".
-     *
-     * @param username The username to be canonicalized.
-     * @return The username, lowercased and possibly stripped of its domain if a "gmail.com" or
-     * "googlemail.com" domain.
-     */
-    public static String canonicalizeUsername(String username) {
-        username = username.toLowerCase();
-        if (username.contains("@gmail.") || username.contains("@googlemail.")) {
-            // Strip the domain from GMail accounts for
-            // canonicalization. TODO: is there an official way?
-            username = username.substring(0, username.indexOf('@'));
-        }
-        return username;
-    }
-
-    public PicasaApi() {
-        mClient = new GDataClient();
-    }
-
-    public void setAuth(AuthAccount auth) {
-        mAuth = auth;
-        synchronized (mClient) {
-            mClient.setAuthToken(auth.authToken);
-        }
-    }
-
-    @SuppressWarnings("fallthrough")
-    public int getAlbums(AccountManager accountManager,
-            SyncResult syncResult, UserEntry user, GDataParser.EntryHandler handler) {
-        // Construct the query URL for user albums.
-        StringBuilder builder = new StringBuilder(BASE_URL);
-        builder.append("user/");
-        builder.append(Uri.encode(mAuth.user));
-        builder.append(BASE_QUERY_STRING);
-        builder.append("&kind=album");
-        try {
-            // Send the request.
-            synchronized (mOperation) {
-                GDataClient.Operation operation = mOperation;
-                operation.inOutEtag = user.albumsEtag;
-                boolean retry = false;
-                int numRetries = 1;
-                do {
-                    retry = false;
-                    synchronized (mClient) {
-                        mClient.get(builder.toString(), operation);
-                    }
-                    switch (operation.outStatus) {
-                    case HttpStatus.SC_OK:
-                        break;
-                    case HttpStatus.SC_NOT_MODIFIED:
-                        return RESULT_NOT_MODIFIED;
-                    case HttpStatus.SC_FORBIDDEN:
-                    case HttpStatus.SC_UNAUTHORIZED:
-                        if (!retry) {
-                            accountManager.invalidateAuthToken(
-                                    PicasaService.ACCOUNT_TYPE, mAuth.authToken);
-                            retry = true;
-                        }
-                        if (numRetries == 0) {
-                            ++syncResult.stats.numAuthExceptions;
-                        }
-                        // fall-through
-                    default:
-                        Log.i(TAG, "getAlbums uri " + builder.toString());
-                        Log.e(TAG, "getAlbums: unexpected status code "
-                                + operation.outStatus + " data: " + operation.outBody.toString());
-                        ++syncResult.stats.numIoExceptions;
-                        return RESULT_ERROR;
-                    }
-                    --numRetries;
-                } while (retry && numRetries >= 0);
-
-                // Store the new ETag for the user/albums feed.
-                user.albumsEtag = operation.inOutEtag;
-
-                // Parse the response.
-                synchronized (mParser) {
-                    GDataParser parser = mParser;
-                    parser.setEntry(mAlbumInstance);
-                    parser.setHandler(handler);
-                    try {
-                        Xml.parse(operation.outBody, Xml.Encoding.UTF_8, parser);
-                    } catch (SocketException e) {
-                        Log.e(TAG, "getAlbumPhotos: " + e);
-                        ++syncResult.stats.numIoExceptions;
-                        e.printStackTrace();
-                        return RESULT_ERROR;
-                    }
-                }
-            }
-            return RESULT_OK;
-        } catch (IOException e) {
-            Log.e(TAG, "getAlbums: " + e);
-            ++syncResult.stats.numIoExceptions;
-        } catch (SAXException e) {
-            Log.e(TAG, "getAlbums: " + e);
-            ++syncResult.stats.numParseExceptions;
-        }
-        return RESULT_ERROR;
-    }
-
-    public int getAlbumPhotos(AccountManager accountManager, SyncResult syncResult,
-            AlbumEntry album, GDataParser.EntryHandler handler) {
-        // Construct the query URL for user albums.
-        StringBuilder builder = new StringBuilder(BASE_URL);
-        builder.append("user/");
-        builder.append(Uri.encode(mAuth.user));
-        builder.append("/albumid/");
-        builder.append(album.id);
-        builder.append(BASE_QUERY_STRING);
-        builder.append("&kind=photo");
-        try {
-            // Send the request.
-            synchronized (mOperation) {
-                GDataClient.Operation operation = mOperation;
-                operation.inOutEtag = album.photosEtag;
-                boolean retry = false;
-                int numRetries = 1;
-                do {
-                    retry = false;
-                    synchronized (mClient) {
-                        mClient.get(builder.toString(), operation);
-                    }
-                    switch (operation.outStatus) {
-                    case HttpStatus.SC_OK:
-                        break;
-                    case HttpStatus.SC_NOT_MODIFIED:
-                        return RESULT_NOT_MODIFIED;
-                    case HttpStatus.SC_FORBIDDEN:
-                    case HttpStatus.SC_UNAUTHORIZED:
-                        // We need to reset the authtoken and retry only once.
-                        if (!retry) {
-                            retry = true;
-                            accountManager.invalidateAuthToken(PicasaService.SERVICE_NAME, mAuth.authToken);
-                        }
-                        if (numRetries == 0) {
-                            ++syncResult.stats.numAuthExceptions;
-                        }
-                        break;
-                    default:
-                        Log.e(TAG, "getAlbumPhotos: " + builder.toString()
-                                + ", unexpected status code " + operation.outStatus);
-                        ++syncResult.stats.numIoExceptions;
-                        return RESULT_ERROR;
-                    }
-                    --numRetries;
-                } while (retry && numRetries >= 0);
-
-                // Store the new ETag for the album/photos feed.
-                album.photosEtag = operation.inOutEtag;
-
-                // Parse the response.
-                synchronized (mParser) {
-                    GDataParser parser = mParser;
-                    parser.setEntry(mPhotoInstance);
-                    parser.setHandler(handler);
-                    try {
-                        Xml.parse(operation.outBody, Xml.Encoding.UTF_8, parser);
-                    } catch (SocketException e) {
-                        Log.e(TAG, "getAlbumPhotos: " + e);
-                        ++syncResult.stats.numIoExceptions;
-                        e.printStackTrace();
-                        return RESULT_ERROR;
-                    }
-                }
-            }
-            return RESULT_OK;
-        } catch (IOException e) {
-            Log.e(TAG, "getAlbumPhotos", e);
-            ++syncResult.stats.numIoExceptions;
-        } catch (SAXException e) {
-            Log.e(TAG, "getAlbumPhotos", e);
-            ++syncResult.stats.numParseExceptions;
-        }
-        return RESULT_ERROR;
-    }
-
-    public int deleteEntry(String editUri) {
-        try {
-            synchronized (mOperation) {
-                GDataClient.Operation operation = mOperation;
-                operation.inOutEtag = null;
-                synchronized (mClient) {
-                    mClient.delete(editUri, operation);
-                }
-                if (operation.outStatus == 200) {
-                    return RESULT_OK;
-                } else {
-                    Log.e(TAG, "deleteEntry: failed with status code " + operation.outStatus);
-                }
-            }
-        } catch (IOException e) {
-            Log.e(TAG, "deleteEntry", e);
-        }
-        return RESULT_ERROR;
-    }
-
-    /**
-     * Column names shared by multiple entry kinds.
-     */
-    public static class Columns {
-        public static final String _ID = "_id";
-        public static final String SYNC_ACCOUNT = "sync_account";
-        public static final String EDIT_URI = "edit_uri";
-        public static final String TITLE = "title";
-        public static final String SUMMARY = "summary";
-        public static final String DATE_PUBLISHED = "date_published";
-        public static final String DATE_UPDATED = "date_updated";
-        public static final String DATE_EDITED = "date_edited";
-        public static final String THUMBNAIL_URL = "thumbnail_url";
-        public static final String HTML_PAGE_URL = "html_page_url";
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/picasa/PicasaContentProvider.java b/new3d/src/com/android/gallery3d/picasa/PicasaContentProvider.java
deleted file mode 100644
index 57b8295..0000000
--- a/new3d/src/com/android/gallery3d/picasa/PicasaContentProvider.java
+++ /dev/null
@@ -1,603 +0,0 @@
-/*
- * Copyright (C) 2009 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.android.gallery3d.picasa;
-
-import android.accounts.Account;
-import android.accounts.AccountManager;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.SyncResult;
-import android.content.pm.ProviderInfo;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteOpenHelper;
-import android.net.Uri;
-import android.util.Log;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-public final class PicasaContentProvider extends TableContentProvider {
-    public static final String AUTHORITY = "com.android.gallery3d.picasa.contentprovider";
-    public static final Uri BASE_URI = Uri.parse("content://" + AUTHORITY);
-    public static final Uri PHOTOS_URI = Uri.withAppendedPath(BASE_URI, "photos");
-    public static final Uri ALBUMS_URI = Uri.withAppendedPath(BASE_URI, "albums");
-
-    private static final String TAG = "PicasaContentProvider";
-    private static final String[] ID_EDITED_PROJECTION = {"_id", "date_edited"};
-    private static final String[] ID_EDITED_INDEX_PROJECTION =
-            {"_id", "date_edited", "display_index"};
-    private static final String WHERE_ACCOUNT = "sync_account=?";
-    private static final String WHERE_ALBUM_ID = "album_id=?";
-
-    private final PhotoEntry mPhotoInstance = new PhotoEntry();
-    private final AlbumEntry mAlbumInstance = new AlbumEntry();
-    private SyncContext mSyncContext = null;
-    private Account mActiveAccount;
-
-    @Override
-    public void attachInfo(Context context, ProviderInfo info) {
-        // Initialize the provider and set the database.
-        super.attachInfo(context, info);
-        setDatabase(new Database(context, Database.DATABASE_NAME));
-
-        // Add mappings for each of the exposed tables.
-        addMapping(AUTHORITY, "photos", "vnd.android.gallery3d.picasa.photo", PhotoEntry.SCHEMA);
-        addMapping(AUTHORITY, "albums", "vnd.android.gallery3d.picasa.album", AlbumEntry.SCHEMA);
-
-        // Create the sync context.
-        try {
-            mSyncContext = new SyncContext();
-        } catch (Exception e) {
-            Log.e(TAG, "cannot get sync context", e);
-            // The database wasn't created successfully, we create a memory backed database.
-            setDatabase(new Database(context, null));
-        }
-    }
-
-    public static final class Database extends SQLiteOpenHelper {
-        public static final String DATABASE_NAME = "picasa.db";
-        public static final int DATABASE_VERSION = 83;
-
-        public Database(Context context, String name) {
-            super(context, name, null, DATABASE_VERSION);
-        }
-
-        @Override
-        public void onCreate(SQLiteDatabase db) {
-            PhotoEntry.SCHEMA.createTables(db);
-            AlbumEntry.SCHEMA.createTables(db);
-            UserEntry.SCHEMA.createTables(db);
-        }
-
-        @Override
-        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
-            // No new versions yet, if we are asked to upgrade we just reset
-            // everything.
-            PhotoEntry.SCHEMA.dropTables(db);
-            AlbumEntry.SCHEMA.dropTables(db);
-            UserEntry.SCHEMA.dropTables(db);
-            onCreate(db);
-        }
-    }
-
-    @Override
-    public int delete(Uri uri, String selection, String[] selectionArgs) {
-        // Ensure that the URI is well-formed. We currently do not allow WHERE
-        // clauses.
-        List<String> path = uri.getPathSegments();
-        if (path.size() != 2 || !uri.getAuthority().equals(AUTHORITY) || selection != null) {
-            return 0;
-        }
-
-        // Get the sync context.
-        SyncContext context = mSyncContext;
-
-        // Determine if the URI refers to an album or photo.
-        String type = path.get(0);
-        long id = Long.parseLong(path.get(1));
-        SQLiteDatabase db = context.db;
-        if (type.equals("photos")) {
-            // Retrieve the photo from the database to get the edit URI.
-            PhotoEntry photo = mPhotoInstance;
-            if (PhotoEntry.SCHEMA.queryWithId(db, id, photo)) {
-                // Send a DELETE request to the API.
-                if (context.login(photo.syncAccount)) {
-                    if (context.api.deleteEntry(photo.editUri) == PicasaApi.RESULT_OK) {
-                        deletePhoto(db, id);
-                        context.photosChanged = true;
-                        return 1;
-                    }
-                }
-            }
-        } else if (type.equals("albums")) {
-            // Retrieve the album from the database to get the edit URI.
-            AlbumEntry album = mAlbumInstance;
-            if (AlbumEntry.SCHEMA.queryWithId(db, id, album)) {
-                // Send a DELETE request to the API.
-                if (context.login(album.syncAccount)) {
-                    if (context.api.deleteEntry(album.editUri) == PicasaApi.RESULT_OK) {
-                        deleteAlbum(db, id);
-                        context.albumsChanged = true;
-                        return 1;
-                    }
-                }
-            }
-        }
-        context.finish();
-        return 0;
-    }
-
-    public void reloadAccounts() {
-        mSyncContext.reloadAccounts();
-    }
-
-    public void setActiveSyncAccount(Account account) {
-        mActiveAccount = account;
-    }
-
-    public void syncUsers(SyncResult syncResult) {
-        syncUsers(mSyncContext, syncResult);
-    }
-
-    public void syncUsersAndAlbums(final boolean syncAlbumPhotos, SyncResult syncResult) {
-        SyncContext context = mSyncContext;
-
-        // Synchronize users authenticated on the device.
-        UserEntry[] users = syncUsers(context, syncResult);
-
-        // Synchronize albums for each user.
-        String activeUsername = null;
-        if (mActiveAccount != null) {
-            activeUsername = PicasaApi.canonicalizeUsername(mActiveAccount.name);
-        }
-        boolean didSyncActiveUserName = false;
-        for (int i = 0, numUsers = users.length; i != numUsers; ++i) {
-            if (activeUsername != null && !context.accounts[i].user.equals(activeUsername))
-                continue;
-            if (!ContentResolver.getSyncAutomatically(context.accounts[i].account, AUTHORITY))
-                continue;
-            didSyncActiveUserName = true;
-            context.api.setAuth(context.accounts[i]);
-            syncUserAlbums(context, users[i], syncResult);
-            if (syncAlbumPhotos) {
-                syncUserPhotos(context, users[i].account, syncResult);
-            } else {
-                // // Always sync added albums.
-                // for (Long albumId : context.albumsAdded) {
-                // syncAlbumPhotos(albumId, false);
-                // }
-            }
-        }
-        if (!didSyncActiveUserName) {
-            ++syncResult.stats.numAuthExceptions;
-        }
-        context.finish();
-    }
-
-    public void syncAlbumPhotos(
-            final long albumId, final boolean forceRefresh, SyncResult syncResult) {
-        SyncContext context = mSyncContext;
-        AlbumEntry album = new AlbumEntry();
-        if (AlbumEntry.SCHEMA.queryWithId(context.db, albumId, album)) {
-            if ((album.photosDirty || forceRefresh) && context.login(album.syncAccount)) {
-                if (isSyncEnabled(album.syncAccount, context)) {
-                    syncAlbumPhotos(context, album.syncAccount, album, syncResult);
-                }
-            }
-        }
-        context.finish();
-    }
-
-    public static boolean isSyncEnabled(String accountName, SyncContext context) {
-        if (context.accounts == null) {
-            context.reloadAccounts();
-        }
-        PicasaApi.AuthAccount[] accounts = context.accounts;
-        int numAccounts = accounts.length;
-        for (int i = 0; i < numAccounts; ++i) {
-            PicasaApi.AuthAccount account = accounts[i];
-            if (account.user.equals(accountName)) {
-                return ContentResolver.getSyncAutomatically(account.account, AUTHORITY);
-            }
-        }
-        return true;
-    }
-
-    private UserEntry[] syncUsers(SyncContext context, SyncResult syncResult) {
-        // Get authorized accounts.
-        context.reloadAccounts();
-        PicasaApi.AuthAccount[] accounts = context.accounts;
-        int numUsers = accounts.length;
-        UserEntry[] users = new UserEntry[numUsers];
-
-        // Scan existing accounts.
-        EntrySchema schema = UserEntry.SCHEMA;
-        SQLiteDatabase db = context.db;
-        Cursor cursor = schema.queryAll(db);
-        if (cursor.moveToFirst()) {
-            do {
-                // Read the current account.
-                UserEntry entry = new UserEntry();
-                schema.cursorToObject(cursor, entry);
-
-                // Find the corresponding account, or delete the row if it does
-                // not exist.
-                int i;
-                for (i = 0; i != numUsers; ++i) {
-                    if (accounts[i].user.equals(entry.account)) {
-                        users[i] = entry;
-                        break;
-                    }
-                }
-                if (i == numUsers) {
-                    Log.e(TAG, "Deleting user " + entry.account);
-                    entry.albumsEtag = null;
-                    deleteUser(db, entry.account);
-                }
-            } while (cursor.moveToNext());
-        } else {
-            // Log.i(TAG, "No users in database yet");
-        }
-        cursor.close();
-
-        // Add new accounts and synchronize user albums if recursive.
-        for (int i = 0; i != numUsers; ++i) {
-            UserEntry entry = users[i];
-            PicasaApi.AuthAccount account = accounts[i];
-            if (entry == null) {
-                entry = new UserEntry();
-                entry.account = account.user;
-                users[i] = entry;
-                Log.e(TAG, "Inserting user " + entry.account);
-            }
-        }
-        return users;
-    }
-
-    private void syncUserAlbums(
-            final SyncContext context, final UserEntry user, final SyncResult syncResult) {
-        // Query existing album entry (id, dateEdited) sorted by ID.
-        final SQLiteDatabase db = context.db;
-        Cursor cursor = db.query(AlbumEntry.SCHEMA.getTableName(),
-                ID_EDITED_PROJECTION, WHERE_ACCOUNT, new String[] { user.account },
-                null, null, AlbumEntry.Columns.DATE_EDITED);
-        int localCount = cursor.getCount();
-
-        // Build a sorted index with existing entry timestamps.
-        final EntryMetadata local[] = new EntryMetadata[localCount];
-        for (int i = 0; i != localCount; ++i) {
-            cursor.moveToPosition(i); // TODO: throw exception here if returns
-                                      // false?
-            local[i] = new EntryMetadata(cursor.getLong(0), cursor.getLong(1), 0);
-        }
-        cursor.close();
-        Arrays.sort(local);
-
-        // Merge the truth from the API into the local database.
-        final EntrySchema albumSchema = AlbumEntry.SCHEMA;
-        final EntryMetadata key = new EntryMetadata();
-        final AccountManager accountManager = AccountManager.get(getContext());
-        int result = context.api.getAlbums(
-                accountManager, syncResult, user, new GDataParser.EntryHandler() {
-            public void handleEntry(Entry entry) {
-                AlbumEntry album = (AlbumEntry) entry;
-                long albumId = album.id;
-                key.id = albumId;
-                int index = Arrays.binarySearch(local, key);
-                EntryMetadata metadata = index >= 0 ? local[index] : null;
-                if (metadata == null || metadata.dateEdited < album.dateEdited) {
-                    // Insert / update.
-                    Log.i(TAG, "insert / update album " + album.title);
-                    album.syncAccount = user.account;
-                    album.photosDirty = true;
-                    albumSchema.insertOrReplace(db, album);
-                    if (metadata == null) {
-                        context.albumsAdded.add(albumId);
-                    }
-                    ++syncResult.stats.numUpdates;
-                } else {
-                    // Up-to-date.
-                    // Log.i(TAG, "up-to-date album " + album.title);
-                }
-
-                // Mark item as surviving so it is not deleted.
-                if (metadata != null) {
-                    metadata.survived = true;
-                }
-            }
-        });
-
-        // Return if not modified or on error.
-        switch (result) {
-        case PicasaApi.RESULT_ERROR:
-            ++syncResult.stats.numParseExceptions;
-        case PicasaApi.RESULT_NOT_MODIFIED:
-            return;
-        }
-
-        // Update the user entry with the new ETag.
-        UserEntry.SCHEMA.insertOrReplace(db, user);
-
-        // Delete all entries not present in the API response.
-        for (int i = 0; i != localCount; ++i) {
-            EntryMetadata metadata = local[i];
-            if (!metadata.survived) {
-                deleteAlbum(db, metadata.id);
-                ++syncResult.stats.numDeletes;
-                Log.i(TAG, "delete album " + metadata.id);
-            }
-        }
-
-        // Note that albums changed.
-        context.albumsChanged = true;
-    }
-
-    private void syncUserPhotos(SyncContext context, String account, SyncResult syncResult) {
-        // Synchronize albums with out-of-date photos.
-        SQLiteDatabase db = context.db;
-        Cursor cursor = db.query(AlbumEntry.SCHEMA.getTableName(),
-                Entry.ID_PROJECTION, "sync_account=? AND photos_dirty=1",
-                new String[] { account }, null, null, null);
-        AlbumEntry album = new AlbumEntry();
-        for (int i = 0, count = cursor.getCount(); i != count; ++i) {
-            cursor.moveToPosition(i);
-            if (AlbumEntry.SCHEMA.queryWithId(db, cursor.getLong(0), album)) {
-                syncAlbumPhotos(context, account, album, syncResult);
-            }
-
-            // Abort if interrupted.
-            if (Thread.interrupted()) {
-                ++syncResult.stats.numIoExceptions;
-                Log.e(TAG, "syncUserPhotos interrupted");
-            }
-        }
-        cursor.close();
-    }
-
-    private void syncAlbumPhotos(SyncContext context, final String account,
-            AlbumEntry album, final SyncResult syncResult) {
-        Log.i(TAG, "Syncing Picasa album: " + album.title);
-        // Query existing album entry (id, dateEdited) sorted by ID.
-        final SQLiteDatabase db = context.db;
-        long albumId = album.id;
-        String[] albumIdArgs = { Long.toString(albumId) };
-        Cursor cursor = db.query(PhotoEntry.SCHEMA.getTableName(), ID_EDITED_INDEX_PROJECTION, WHERE_ALBUM_ID, albumIdArgs, null,
-                null, "date_edited");
-        int localCount = cursor.getCount();
-
-        // Build a sorted index with existing entry timestamps and display
-        // indexes.
-        final EntryMetadata local[] = new EntryMetadata[localCount];
-        final EntryMetadata key = new EntryMetadata();
-        for (int i = 0; i != localCount; ++i) {
-            cursor.moveToPosition(i); // TODO: throw exception here if returns
-                                      // false?
-            local[i] = new EntryMetadata(cursor.getLong(0), cursor.getLong(1), cursor.getInt(2));
-        }
-        cursor.close();
-        Arrays.sort(local);
-
-        // Merge the truth from the API into the local database.
-        final EntrySchema photoSchema = PhotoEntry.SCHEMA;
-        final int[] displayIndex = { 0 };
-        final AccountManager accountManager = AccountManager.get(getContext());
-        int result = context.api.getAlbumPhotos(
-                accountManager, syncResult, album, new GDataParser.EntryHandler() {
-            public void handleEntry(Entry entry) {
-                PhotoEntry photo = (PhotoEntry) entry;
-                long photoId = photo.id;
-                int newDisplayIndex = displayIndex[0];
-                key.id = photoId;
-                int index = Arrays.binarySearch(local, key);
-                EntryMetadata metadata = index >= 0 ? local[index] : null;
-                if (metadata == null || metadata.dateEdited < photo.dateEdited
-                        || metadata.displayIndex != newDisplayIndex) {
-
-                    // Insert / update.
-                    // Log.i(TAG, "insert / update photo " + photo.title);
-                    photo.syncAccount = account;
-                    photo.displayIndex = newDisplayIndex;
-                    photoSchema.insertOrReplace(db, photo);
-                    ++syncResult.stats.numUpdates;
-                } else {
-                    // Up-to-date.
-                    // Log.i(TAG, "up-to-date photo " + photo.title);
-                }
-
-                // Mark item as surviving so it is not deleted.
-                if (metadata != null) {
-                    metadata.survived = true;
-                }
-
-                // Increment the display index.
-                displayIndex[0] = newDisplayIndex + 1;
-            }
-        });
-
-        // Return if not modified or on error.
-        switch (result) {
-        case PicasaApi.RESULT_ERROR:
-            ++syncResult.stats.numParseExceptions;
-            Log.e(TAG, "syncAlbumPhotos error");
-        case PicasaApi.RESULT_NOT_MODIFIED:
-            // Log.e(TAG, "result not modified");
-            return;
-        }
-
-        // Delete all entries not present in the API response.
-        for (int i = 0; i != localCount; ++i) {
-            EntryMetadata metadata = local[i];
-            if (!metadata.survived) {
-                deletePhoto(db, metadata.id);
-                ++syncResult.stats.numDeletes;
-                // Log.i(TAG, "delete photo " + metadata.id);
-            }
-        }
-
-        // Mark album as no longer dirty and store the new ETag.
-        album.photosDirty = false;
-        AlbumEntry.SCHEMA.insertOrReplace(db, album);
-        // Log.i(TAG, "Clearing dirty bit on album " + albumId);
-
-        // Mark that photos changed.
-        // context.photosChanged = true;
-        getContext().getContentResolver().notifyChange(ALBUMS_URI, null, false);
-        getContext().getContentResolver().notifyChange(PHOTOS_URI, null, false);
-    }
-
-    private void deleteUser(SQLiteDatabase db, String account) {
-        Log.w(TAG, "deleteUser(" + account + ")");
-
-        // Select albums owned by the user.
-        String albumTableName = AlbumEntry.SCHEMA.getTableName();
-        String[] whereArgs = { account };
-        Cursor cursor = db.query(AlbumEntry.SCHEMA.getTableName(),
-                Entry.ID_PROJECTION, WHERE_ACCOUNT, whereArgs, null, null, null);
-
-        // Delete contained photos for each album.
-        if (cursor.moveToFirst()) {
-            do {
-                deleteAlbumPhotos(db, cursor.getLong(0));
-            } while (cursor.moveToNext());
-        }
-        cursor.close();
-
-        // Delete all albums.
-        db.delete(albumTableName, WHERE_ACCOUNT, whereArgs);
-
-        // Delete the user entry.
-        db.delete(UserEntry.SCHEMA.getTableName(), "account=?", whereArgs);
-    }
-
-    private void deleteAlbum(SQLiteDatabase db, long albumId) {
-        // Delete contained photos.
-        deleteAlbumPhotos(db, albumId);
-
-        // Delete the album.
-        AlbumEntry.SCHEMA.deleteWithId(db, albumId);
-    }
-
-    private void deleteAlbumPhotos(SQLiteDatabase db, long albumId) {
-        Log.v(TAG, "deleteAlbumPhotos(" + albumId + ")");
-        String photoTableName = PhotoEntry.SCHEMA.getTableName();
-        String[] whereArgs = { Long.toString(albumId) };
-        Cursor cursor = db.query(photoTableName,
-                Entry.ID_PROJECTION, WHERE_ALBUM_ID, whereArgs, null, null, null);
-
-        // Delete cache entry for each photo.
-        if (cursor.moveToFirst()) {
-            do {
-                deletePhotoCache(cursor.getLong(0));
-            } while (cursor.moveToNext());
-        }
-        cursor.close();
-
-        // Delete all photos.
-        db.delete(photoTableName, WHERE_ALBUM_ID, whereArgs);
-    }
-
-    private void deletePhoto(SQLiteDatabase db, long photoId) {
-        PhotoEntry.SCHEMA.deleteWithId(db, photoId);
-        deletePhotoCache(photoId);
-    }
-
-    private void deletePhotoCache(long photoId) {
-        // TODO: implement it.
-    }
-
-    private final class SyncContext {
-        // List of all authenticated user accounts.
-        public PicasaApi.AuthAccount[] accounts;
-
-        // A connection to the Picasa API for a specific user account. Initially
-        // null.
-        public PicasaApi api = new PicasaApi();
-
-        // A handle to the Picasa databse.
-        public SQLiteDatabase db;
-
-        // List of album IDs that were added during the sync.
-        public final ArrayList<Long> albumsAdded = new ArrayList<Long>();
-
-        // Set to true if albums were changed.
-        public boolean albumsChanged = false;
-
-        // Set to true if photos were changed.
-        public boolean photosChanged = false;
-
-        public SyncContext() {
-            db = mDatabase.getWritableDatabase();
-        }
-
-        public void reloadAccounts() {
-            accounts = PicasaApi.getAuthenticatedAccounts(getContext());
-        }
-
-        public void finish() {
-            // Send notifications if needed and reset state.
-            ContentResolver cr = getContext().getContentResolver();
-            if (albumsChanged) {
-                cr.notifyChange(ALBUMS_URI, null, false);
-            }
-            if (photosChanged) {
-                cr.notifyChange(PHOTOS_URI, null, false);
-            }
-            albumsChanged = false;
-            photosChanged = false;
-        }
-
-        public boolean login(String user) {
-            if (accounts == null) {
-                reloadAccounts();
-            }
-            final PicasaApi.AuthAccount[] authAccounts = accounts;
-            for (PicasaApi.AuthAccount auth : authAccounts) {
-                if (auth.user.equals(user)) {
-                    api.setAuth(auth);
-                    return true;
-                }
-            }
-            return false;
-        }
-    }
-
-    /**
-     * Minimal metadata gathered during sync.
-     */
-    private static final class EntryMetadata implements Comparable<EntryMetadata> {
-        public long id;
-        public long dateEdited;
-        public int displayIndex;
-        public boolean survived = false;
-
-        public EntryMetadata() {
-        }
-
-        public EntryMetadata(long id, long dateEdited, int displayIndex) {
-            this.id = id;
-            this.dateEdited = dateEdited;
-            this.displayIndex = displayIndex;
-        }
-
-        public int compareTo(EntryMetadata other) {
-            return Long.signum(id - other.id);
-        }
-
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/picasa/PicasaReceiver.java b/new3d/src/com/android/gallery3d/picasa/PicasaReceiver.java
deleted file mode 100644
index 3e28820..0000000
--- a/new3d/src/com/android/gallery3d/picasa/PicasaReceiver.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2009 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.android.gallery3d.picasa;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.util.Log;
-
-public class PicasaReceiver extends BroadcastReceiver {
-
-    private static final String TAG = "PicasaRecevier";
-
-    @Override
-    public void onReceive(Context context, Intent intent) {
-        Log.v(TAG, "Accounts changed: " + intent);
-    }
-
-}
diff --git a/new3d/src/com/android/gallery3d/picasa/PicasaService.java b/new3d/src/com/android/gallery3d/picasa/PicasaService.java
deleted file mode 100644
index bc2adc7..0000000
--- a/new3d/src/com/android/gallery3d/picasa/PicasaService.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright (C) 2009 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.android.gallery3d.picasa;
-
-import android.accounts.Account;
-import android.accounts.AccountManager;
-import android.accounts.AuthenticatorException;
-import android.accounts.OperationCanceledException;
-import android.app.Service;
-import android.content.ContentProviderClient;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SyncResult;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.IBinder;
-import android.os.Process;
-
-import java.io.IOException;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-public final class PicasaService extends Service {
-    public static final String ACTION_SYNC = "com.android.gallery3d.picasa.action.SYNC";
-    public static final String ACTION_PERIODIC_SYNC =
-            "com.android.gallery3d.picasa.action.PERIODIC_SYNC";
-    public static final String ACCOUNT_TYPE = "com.google";
-    public static final String SERVICE_NAME = "lh2";
-    public static final String FEATURE_SERVICE_NAME = "service_" + SERVICE_NAME;
-    public static final String KEY_TYPE = "com.android.gallery3d.SYNC_TYPE";
-    public static final String KEY_ID = "com.android.gallery3d.SYNC_ID";
-    public static final int TYPE_USERS = 0;
-    public static final int TYPE_USERS_ALBUMS = 1;
-    public static final int TYPE_ALBUM_PHOTOS = 2;
-
-    private final HandlerThread mSyncThread = new HandlerThread("PicasaSyncThread");
-    private final Handler mSyncHandler;
-    private static final AtomicBoolean sSyncPending = new AtomicBoolean(false);
-
-    public static void requestSync(Context context, int type, long id) {
-        Bundle extras = new Bundle();
-        extras.putInt(KEY_TYPE, type);
-        extras.putLong(KEY_ID, id);
-
-        Account[] accounts = PicasaApi.getAccounts(context);
-        for (Account account : accounts) {
-            ContentResolver.requestSync(account, PicasaContentProvider.AUTHORITY, extras);
-        }
-
-        // context.startService(new Intent(context,
-        // PicasaService.class).putExtras(extras));
-    }
-
-    public PicasaService() {
-        mSyncThread.start();
-        mSyncHandler = new Handler(mSyncThread.getLooper());
-        mSyncHandler.post(new Runnable() {
-            public void run() {
-                Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
-            }
-        });
-    }
-
-    private static PicasaContentProvider getContentProvider(Context context) {
-        ContentResolver cr = context.getContentResolver();
-        ContentProviderClient client =
-                cr.acquireContentProviderClient(PicasaContentProvider.AUTHORITY);
-        return (PicasaContentProvider) client.getLocalContentProvider();
-    }
-
-    @Override
-    public int onStartCommand(final Intent intent, int flags, final int startId) {
-        mSyncHandler.post(new Runnable() {
-            public void run() {
-                performSync(PicasaService.this, null, intent.getExtras(), new SyncResult());
-                stopSelf(startId);
-            }
-        });
-        return START_NOT_STICKY;
-    }
-
-    @Override
-    public IBinder onBind(Intent intent) {
-        return new PicasaSyncAdapter(getApplicationContext()).getSyncAdapterBinder();
-    }
-
-    @Override
-    public void onDestroy() {
-        mSyncThread.quit();
-    }
-
-    public static boolean performSync(
-            Context context, Account account, Bundle extras, SyncResult syncResult) {
-        // Skip if another sync is pending.
-        if (!sSyncPending.compareAndSet(false, true)) {
-            return false;
-        }
-
-        // Perform the sync.
-        performSyncImpl(context, account, extras, syncResult);
-
-        // Mark sync as complete and notify all waiters.
-        sSyncPending.set(false);
-        synchronized (sSyncPending) {
-            sSyncPending.notifyAll();
-        }
-        return true;
-    }
-
-    public static void waitForPerformSync() {
-        synchronized (sSyncPending) {
-            while (sSyncPending.get()) {
-                try {
-                    // Wait for the sync to complete.
-                    sSyncPending.wait();
-                } catch (InterruptedException e) {
-                    // Stop waiting if interrupted.
-                    break;
-                }
-            }
-        }
-    }
-
-    private static void performSyncImpl(
-            Context context, Account account, Bundle extras, SyncResult syncResult) {
-        // Initialize newly added accounts to sync by default.
-        String authority = PicasaContentProvider.AUTHORITY;
-        if (extras.getBoolean(ContentResolver.SYNC_EXTRAS_INITIALIZE, false)) {
-            if (account != null && ContentResolver.getIsSyncable(account, authority) < 0) {
-                try {
-                    ContentResolver.setIsSyncable(
-                            account, authority, getIsSyncable(context, account) ? 1 : 0);
-                } catch (OperationCanceledException e) {
-                } catch (IOException e) {
-                }
-            }
-            return;
-        }
-
-        // Do nothing if sync is disabled for this account. TODO: is this
-        // blocked in PicasaContentProvider too?
-        if (account != null && ContentResolver.getIsSyncable(account, authority) < 0) {
-            ++syncResult.stats.numSkippedEntries;
-            return;
-        }
-
-        // Get the type of sync operation and the entity ID, if applicable.
-        // Default to synchronize all.
-        int type = extras.getInt(PicasaService.KEY_TYPE, PicasaService.TYPE_USERS_ALBUMS);
-        long id = extras.getLong(PicasaService.KEY_ID, -1);
-
-        // Get the content provider instance and reload the list of user
-        // accounts.
-        PicasaContentProvider provider = getContentProvider(context);
-        provider.reloadAccounts();
-
-        // Restrict sync to either a specific account or all accounts.
-        provider.setActiveSyncAccount(account);
-
-        // Perform the desired sync operation.
-        switch (type) {
-        case PicasaService.TYPE_USERS:
-            provider.syncUsers(syncResult);
-            break;
-        case PicasaService.TYPE_USERS_ALBUMS:
-            provider.syncUsersAndAlbums(true, syncResult);
-            break;
-        case PicasaService.TYPE_ALBUM_PHOTOS:
-            provider.syncAlbumPhotos(id, true, syncResult);
-            break;
-        default:
-            throw new IllegalArgumentException();
-        }
-    }
-
-    private static boolean getIsSyncable(Context context, Account account)
-            throws IOException, OperationCanceledException {
-        try {
-            Account[] picasaAccounts = AccountManager.get(context).getAccountsByTypeAndFeatures(
-                    ACCOUNT_TYPE, new String[] { FEATURE_SERVICE_NAME },
-                    null /* callback */, null /* handler */).getResult();
-            for (Account picasaAccount : picasaAccounts) {
-                if (account.equals(picasaAccount)) {
-                    return true;
-                }
-            }
-            return false;
-        } catch (AuthenticatorException e) {
-            throw new IOException(e.getMessage());
-        }
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/picasa/PicasaSyncAdapter.java b/new3d/src/com/android/gallery3d/picasa/PicasaSyncAdapter.java
deleted file mode 100644
index 5d5ae60..0000000
--- a/new3d/src/com/android/gallery3d/picasa/PicasaSyncAdapter.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (C) 2009 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.android.gallery3d.picasa;
-
-import android.accounts.Account;
-import android.accounts.AccountManager;
-import android.content.AbstractThreadedSyncAdapter;
-import android.content.BroadcastReceiver;
-import android.content.ContentProviderClient;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SyncResult;
-import android.os.Bundle;
-import android.util.Log;
-
-public class PicasaSyncAdapter extends AbstractThreadedSyncAdapter {
-    private final Context mContext;
-    public final static String TAG = "PicasaSyncAdapter";
-
-    public PicasaSyncAdapter(Context applicationContext) {
-        super(applicationContext, false);
-        mContext = applicationContext;
-    }
-
-    @Override
-    public void onPerformSync(Account account, Bundle extras, String authority,
-            ContentProviderClient providerClient, SyncResult syncResult) {
-        if (extras.getBoolean(ContentResolver.SYNC_EXTRAS_INITIALIZE, false)) {
-            try {
-                Account[] picasaAccounts = AccountManager.get(getContext())
-                        .getAccountsByTypeAndFeatures(
-                        PicasaService.ACCOUNT_TYPE,
-                        new String[] { PicasaService.FEATURE_SERVICE_NAME },
-                        null /* callback */, null /* handler */).getResult();
-                boolean isPicasaAccount = false;
-                for (Account picasaAccount : picasaAccounts) {
-                    if (account.equals(picasaAccount)) {
-                        isPicasaAccount = true;
-                        break;
-                    }
-                }
-                if (isPicasaAccount) {
-                    ContentResolver.setIsSyncable(account, authority, 1);
-                    ContentResolver.setSyncAutomatically(account, authority, true);
-                }
-            } catch (Exception e) {
-                Log.e(TAG, "cannot do sync", e);
-            }
-            return;
-        }
-        try {
-            PicasaService.performSync(mContext, account, extras, syncResult);
-        } catch (Exception e) {
-            // Report an error
-            ++syncResult.stats.numIoExceptions;
-        }
-    }
-
-    public static final class AccountChangeReceiver extends BroadcastReceiver {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            // TODO: Need to get account list change broadcast.
-        }
-
-    }
-}
diff --git a/new3d/src/com/android/gallery3d/picasa/TableContentProvider.java b/new3d/src/com/android/gallery3d/picasa/TableContentProvider.java
deleted file mode 100644
index ed2e297..0000000
--- a/new3d/src/com/android/gallery3d/picasa/TableContentProvider.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright (C) 2009 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.android.gallery3d.picasa;
-
-import android.content.ContentProvider;
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.content.UriMatcher;
-import android.database.Cursor;
-import android.database.SQLException;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteOpenHelper;
-import android.net.Uri;
-import android.text.TextUtils;
-
-import java.util.ArrayList;
-
-public class TableContentProvider extends ContentProvider {
-    private static final String NULL_COLUMN_HACK = "_id";
-    protected SQLiteOpenHelper mDatabase = null;
-    private final UriMatcher mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
-    private final ArrayList<Mapping> mMappings = new ArrayList<Mapping>();
-
-    public void setDatabase(SQLiteOpenHelper database) {
-        mDatabase = database;
-    }
-
-    public void addMapping(String authority, String path, String mimeSubtype, EntrySchema table) {
-        // Add the table URI mapping.
-        ArrayList<Mapping> mappings = mMappings;
-        UriMatcher matcher = mUriMatcher;
-        matcher.addURI(authority, path, mappings.size());
-        mappings.add(new Mapping(table, mimeSubtype, false));
-
-        // Add the row URI mapping.
-        matcher.addURI(authority, path + "/#", mappings.size());
-        mappings.add(new Mapping(table, mimeSubtype, true));
-    }
-
-    @Override
-    public boolean onCreate() {
-        // The database may not be loaded yet since attachInfo() has not been
-        // called, so we cannot
-        // check that the database opened successfully. Returns true
-        // optimistically.
-        return true;
-    }
-
-    @Override
-    public String getType(Uri uri) {
-        // Resolve the URI.
-        int match = mUriMatcher.match(uri);
-        if (match == UriMatcher.NO_MATCH) {
-            throw new IllegalArgumentException("Invalid URI: " + uri);
-        }
-
-        // Combine the standard type with the user-provided subtype.
-        Mapping mapping = mMappings.get(match);
-        String prefix = mapping.hasId
-                ? ContentResolver.CURSOR_ITEM_BASE_TYPE
-                : ContentResolver.CURSOR_DIR_BASE_TYPE;
-        return prefix + "/" + mapping.mimeSubtype;
-    }
-
-    @Override
-    public Cursor query(Uri uri, String[] projection,
-            String selection, String[] selectionArgs, String sortOrder) {
-        // Resolve the URI.
-        int match = mUriMatcher.match(uri);
-        if (match == UriMatcher.NO_MATCH) {
-            throw new IllegalArgumentException("Invalid URI: " + uri);
-        }
-
-        // Add the ID predicate if needed.
-        Mapping mapping = mMappings.get(match);
-        if (mapping.hasId) {
-            selection = whereWithId(uri, selection);
-        }
-
-        // System.out.println("QUERY " + uri + " WHERE (" + selection + ")");
-
-        // Run the query.
-        String tableName = mapping.table.getTableName();
-        String limit = uri.getQueryParameter("limit");
-        Cursor cursor = mDatabase.getReadableDatabase().query(
-                tableName, projection, selection, selectionArgs, null, null,
-                sortOrder, limit);
-        cursor.setNotificationUri(getContext().getContentResolver(), uri);
-        return cursor;
-    }
-
-    @Override
-    public Uri insert(Uri uri, ContentValues values) {
-        // Resolve the URI.
-        int match = mUriMatcher.match(uri);
-        Mapping mapping = match != UriMatcher.NO_MATCH ? mMappings.get(match) : null;
-        if (mapping == null || mapping.hasId) {
-            throw new IllegalArgumentException("Invalid URI: " + uri);
-        }
-
-        // Insert into the database, notify observers, and return the qualified
-        // URI.
-        String tableName = mapping.table.getTableName();
-        long rowId = mDatabase.getWritableDatabase().insert(tableName, NULL_COLUMN_HACK, values);
-        if (rowId > 0) {
-            notifyChange(uri);
-            return Uri.withAppendedPath(uri, Long.toString(rowId));
-        } else {
-            throw new SQLException("Failed to insert row at: " + uri);
-        }
-    }
-
-    @Override
-    public int bulkInsert(Uri uri, ContentValues[] values) {
-        // Resolve the URI.
-        int match = mUriMatcher.match(uri);
-        Mapping mapping = match != UriMatcher.NO_MATCH ? mMappings.get(match) : null;
-        if (mapping == null || mapping.hasId) {
-            throw new IllegalArgumentException("Invalid URI: " + uri);
-        }
-
-        // Insert all rows into the database and notify observers.
-        String tableName = mapping.table.getTableName();
-        SQLiteDatabase database = mDatabase.getWritableDatabase();
-        int numInserted = 0;
-        try {
-            int length = values.length;
-            database.beginTransaction();
-            for (int i = 0; i != length; ++i) {
-                database.insert(tableName, NULL_COLUMN_HACK, values[i]);
-            }
-            database.setTransactionSuccessful();
-            numInserted = length;
-        } finally {
-            database.endTransaction();
-        }
-        notifyChange(uri);
-        return numInserted;
-    }
-
-    @Override
-    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
-        // Resolve the URI.
-        int match = mUriMatcher.match(uri);
-        if (match == UriMatcher.NO_MATCH) {
-            throw new IllegalArgumentException("Invalid URI: " + uri);
-        }
-
-        // Add the ID predicate if needed.
-        Mapping mapping = mMappings.get(match);
-        if (mapping.hasId) {
-            selection = whereWithId(uri, selection);
-        }
-
-        // Update the item(s) and broadcast a change notification.
-        SQLiteDatabase db = mDatabase.getWritableDatabase();
-        String tableName = mapping.table.getTableName();
-        int count = db.update(tableName, values, selection, selectionArgs);
-        notifyChange(uri);
-        return count;
-    }
-
-    @Override
-    public int delete(Uri uri, String selection, String[] selectionArgs) {
-        // Resolve the URI.
-        int match = mUriMatcher.match(uri);
-        if (match == UriMatcher.NO_MATCH) {
-            throw new IllegalArgumentException("Invalid URI: " + uri);
-        }
-
-        // Add the ID predicate if needed.
-        Mapping mapping = mMappings.get(match);
-        if (mapping.hasId) {
-            selection = whereWithId(uri, selection);
-        }
-
-        // Delete the item(s) and broadcast a change notification.
-        SQLiteDatabase db = mDatabase.getWritableDatabase();
-        String tableName = mapping.table.getTableName();
-        int count = db.delete(tableName, selection, selectionArgs);
-        notifyChange(uri);
-        return count;
-    }
-
-    private final String whereWithId(Uri uri, String selection) {
-        String id = uri.getPathSegments().get(1);
-        StringBuilder where = new StringBuilder("_id=");
-        where.append(id);
-        if (!TextUtils.isEmpty(selection)) {
-            where.append(" AND (");
-            where.append(selection);
-            where.append(')');
-        }
-        return where.toString();
-    }
-
-    private final void notifyChange(Uri uri) {
-        getContext().getContentResolver().notifyChange(uri, null);
-    }
-
-    private static final class Mapping {
-        public EntrySchema table;
-        public String mimeSubtype;
-        public boolean hasId;
-
-        public Mapping(EntrySchema table, String mimeSubtype, boolea