summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AndroidManifest.xml9
-rw-r--r--res/drawable-hdpi/blur.pngbin0 -> 14584 bytes
-rw-r--r--res/drawable-hdpi/drawer_bg.pngbin0 -> 93890 bytes
-rw-r--r--res/drawable-hdpi/feather.pngbin0 -> 2124 bytes
-rw-r--r--res/drawable-hdpi/focus.pngbin0 -> 15562 bytes
-rw-r--r--res/drawable-hdpi/fusion.pngbin0 -> 22420 bytes
-rw-r--r--res/drawable-hdpi/halo.pngbin0 -> 18272 bytes
-rw-r--r--res/drawable-hdpi/multiselect.pngbin0 -> 1839 bytes
-rw-r--r--res/drawable-hdpi/none.pngbin0 -> 16866 bytes
-rw-r--r--res/drawable-hdpi/play_detail.pngbin0 -> 2317 bytes
-rw-r--r--res/drawable-hdpi/random.pngbin0 -> 2622 bytes
-rw-r--r--res/drawable-hdpi/rectangle.pngbin0 -> 2073 bytes
-rw-r--r--res/drawable-hdpi/round.pngbin0 -> 1501 bytes
-rw-r--r--res/drawable-hdpi/sketch.pngbin0 -> 23417 bytes
-rw-r--r--res/drawable-hdpi/square.pngbin0 -> 1072 bytes
-rw-r--r--res/drawable-xhdpi/blur.pngbin0 -> 21824 bytes
-rw-r--r--res/drawable-xhdpi/drawer_bg.pngbin0 -> 147601 bytes
-rw-r--r--res/drawable-xhdpi/feather.pngbin0 -> 2650 bytes
-rw-r--r--res/drawable-xhdpi/focus.pngbin0 -> 23754 bytes
-rw-r--r--res/drawable-xhdpi/fusion.pngbin0 -> 36951 bytes
-rw-r--r--res/drawable-xhdpi/halo.pngbin0 -> 30310 bytes
-rw-r--r--res/drawable-xhdpi/multiselect.pngbin0 -> 1648 bytes
-rw-r--r--res/drawable-xhdpi/normal.pngbin0 -> 28264 bytes
-rw-r--r--res/drawable-xhdpi/play_detail.pngbin0 -> 3026 bytes
-rw-r--r--res/drawable-xhdpi/random.pngbin0 -> 3532 bytes
-rw-r--r--res/drawable-xhdpi/rectangle.pngbin0 -> 2594 bytes
-rw-r--r--res/drawable-xhdpi/round.pngbin0 -> 1686 bytes
-rw-r--r--res/drawable-xhdpi/sketch.pngbin0 -> 40439 bytes
-rw-r--r--res/drawable-xhdpi/square.pngbin0 -> 1111 bytes
-rw-r--r--res/drawable-xxhdpi/blur.pngbin0 -> 43238 bytes
-rw-r--r--res/drawable-xxhdpi/drawer_bg.pngbin0 -> 256388 bytes
-rw-r--r--res/drawable-xxhdpi/feather.pngbin0 -> 3373 bytes
-rw-r--r--res/drawable-xxhdpi/focus.pngbin0 -> 49557 bytes
-rw-r--r--res/drawable-xxhdpi/fusion.pngbin0 -> 84358 bytes
-rw-r--r--res/drawable-xxhdpi/halo.pngbin0 -> 68562 bytes
-rw-r--r--res/drawable-xxhdpi/multiselect.pngbin0 -> 1937 bytes
-rw-r--r--res/drawable-xxhdpi/none.pngbin0 -> 63931 bytes
-rw-r--r--res/drawable-xxhdpi/play_detail.pngbin0 -> 4329 bytes
-rw-r--r--res/drawable-xxhdpi/random.pngbin0 -> 6108 bytes
-rw-r--r--res/drawable-xxhdpi/rectangle.pngbin0 -> 3300 bytes
-rw-r--r--res/drawable-xxhdpi/round.pngbin0 -> 1990 bytes
-rw-r--r--res/drawable-xxhdpi/sketch.pngbin0 -> 113272 bytes
-rw-r--r--res/drawable-xxhdpi/square.pngbin0 -> 1139 bytes
-rw-r--r--res/drawable/addspot.xml38
-rw-r--r--res/drawable/adjust.xml38
-rw-r--r--res/drawable/albums.xml39
-rw-r--r--res/drawable/back.xml38
-rw-r--r--res/drawable/beautify.xml38
-rw-r--r--res/drawable/camera.xml46
-rw-r--r--res/drawable/cancel.xml38
-rw-r--r--res/drawable/cancel2.xml39
-rw-r--r--res/drawable/color.xml38
-rw-r--r--res/drawable/comparison_after.xml42
-rw-r--r--res/drawable/comparison_before.xml42
-rw-r--r--res/drawable/crop.xml38
-rw-r--r--res/drawable/delete.xml38
-rw-r--r--res/drawable/done.xml38
-rw-r--r--res/drawable/done2.xml39
-rw-r--r--res/drawable/drawer.xml38
-rw-r--r--res/drawable/drawer_item_selected_bg.xml36
-rw-r--r--res/drawable/dualcamera.xml21
-rw-r--r--res/drawable/edit.xml38
-rw-r--r--res/drawable/exposure.xml38
-rw-r--r--res/drawable/filtershow_menu_marker_rtl.xml2
-rw-r--r--res/drawable/filtershow_slider.xml6
-rw-r--r--res/drawable/frames.xml44
-rw-r--r--res/drawable/more.xml38
-rw-r--r--res/drawable/more2.xml38
-rw-r--r--res/drawable/multiselect.xml41
-rw-r--r--res/drawable/multiselect_delete.xml39
-rw-r--r--res/drawable/multiselect_more.xml39
-rw-r--r--res/drawable/multiselect_share.xml39
-rw-r--r--res/drawable/multiselected_back.xml39
-rw-r--r--res/drawable/overflow.xml44
-rw-r--r--res/drawable/selected.xml38
-rw-r--r--res/drawable/share.xml38
-rw-r--r--res/drawable/sliderbg.xml39
-rw-r--r--res/drawable/sliderprogress.xml38
-rw-r--r--res/drawable/slideshow.xml38
-rw-r--r--res/drawable/spinner_triangle.xml35
-rw-r--r--res/drawable/timeline.xml43
-rw-r--r--res/drawable/videos.xml39
-rw-r--r--res/layout-land/filtershow_activity.xml138
-rw-r--r--res/layout-land/filtershow_category_panel_new.xml52
-rw-r--r--res/layout-land/filtershow_editor_panel.xml213
-rw-r--r--res/layout-land/filtershow_grad_ui.xml4
-rw-r--r--res/layout-land/filtershow_main_panel.xml209
-rw-r--r--res/layout/action_mode.xml3
-rw-r--r--res/layout/details.xml3
-rw-r--r--res/layout/details_list.xml5
-rw-r--r--res/layout/drawer_list_item.xml55
-rw-r--r--res/layout/filtershow_actionbar.xml26
-rw-r--r--res/layout/filtershow_actionbar_new.xml54
-rw-r--r--res/layout/filtershow_activity.xml123
-rw-r--r--res/layout/filtershow_category_panel.xml4
-rw-r--r--res/layout/filtershow_category_panel_new.xml2
-rw-r--r--res/layout/filtershow_color_picker.xml8
-rw-r--r--res/layout/filtershow_control_action_slider.xml13
-rw-r--r--res/layout/filtershow_control_color_chooser.xml86
-rw-r--r--res/layout/filtershow_editor_panel.xml127
-rw-r--r--res/layout/filtershow_export_dialog.xml45
-rw-r--r--res/layout/filtershow_info_panel.xml31
-rw-r--r--res/layout/filtershow_main_panel.xml223
-rw-r--r--res/layout/filtershow_seekbar.xml42
-rw-r--r--res/layout/filtershow_state_panel_new.xml2
-rw-r--r--res/layout/gallery_main.xml94
-rw-r--r--res/layout/gl_root_group.xml3
-rw-r--r--res/layout/photopage_bottom_controls.xml87
-rw-r--r--res/layout/popup_list_item.xml2
-rw-r--r--res/layout/toolbar.xml41
-rw-r--r--res/menu/album.xml19
-rw-r--r--res/menu/filtershow_activity_menu.xml30
-rw-r--r--res/menu/operation.xml4
-rw-r--r--res/menu/photo.xml84
-rw-r--r--res/mipmap-hdpi/ic_launcher_gallery.pngbin20425 -> 2536 bytes
-rw-r--r--res/mipmap-xhdpi/ic_launcher_gallery.pngbin24283 -> 3277 bytes
-rw-r--r--res/mipmap-xxhdpi/ic_launcher_gallery.pngbin0 -> 4471 bytes
-rw-r--r--res/values/colors.xml26
-rw-r--r--res/values/dimens.xml75
-rw-r--r--res/values/filtershow_color.xml6
-rw-r--r--res/values/filtershow_strings.xml5
-rw-r--r--res/values/filtershow_styles.xml2
-rw-r--r--res/values/filtershow_values.xml16
-rwxr-xr-xres/values/strings.xml29
-rw-r--r--res/values/styles.xml51
-rw-r--r--src/com/android/gallery3d/app/AbstractGalleryActivity.java24
-rw-r--r--src/com/android/gallery3d/app/ActivityState.java3
-rw-r--r--src/com/android/gallery3d/app/AlbumListViewPage.java34
-rw-r--r--src/com/android/gallery3d/app/AlbumPage.java202
-rw-r--r--src/com/android/gallery3d/app/AlbumSetPage.java109
-rw-r--r--src/com/android/gallery3d/app/Config.java159
-rw-r--r--src/com/android/gallery3d/app/FilterUtils.java9
-rw-r--r--src/com/android/gallery3d/app/GalleryActionBar.java271
-rw-r--r--src/com/android/gallery3d/app/GalleryActivity.java303
-rw-r--r--src/com/android/gallery3d/app/MovieActivity.java3
-rw-r--r--src/com/android/gallery3d/app/PhotoPage.java163
-rw-r--r--src/com/android/gallery3d/app/PhotoPageBottomControls.java37
-rw-r--r--src/com/android/gallery3d/data/ClusterAlbum.java71
-rw-r--r--src/com/android/gallery3d/data/ClusterAlbumSet.java138
-rw-r--r--src/com/android/gallery3d/data/ClusterSource.java2
-rw-r--r--src/com/android/gallery3d/data/Clustering.java8
-rw-r--r--src/com/android/gallery3d/data/FilterDeleteSet.java4
-rw-r--r--src/com/android/gallery3d/data/LocalAlbum.java27
-rw-r--r--src/com/android/gallery3d/data/MediaItem.java3
-rw-r--r--src/com/android/gallery3d/data/MediaObject.java6
-rw-r--r--src/com/android/gallery3d/data/MediaSet.java10
-rw-r--r--src/com/android/gallery3d/data/TimeClustering.java22
-rw-r--r--src/com/android/gallery3d/filtershow/FilterShowActivity.java351
-rw-r--r--src/com/android/gallery3d/filtershow/category/CategoryView.java2
-rw-r--r--src/com/android/gallery3d/filtershow/category/IconView.java6
-rw-r--r--src/com/android/gallery3d/filtershow/category/MainPanel.java86
-rw-r--r--src/com/android/gallery3d/filtershow/controller/BasicSlider.java7
-rw-r--r--src/com/android/gallery3d/filtershow/controller/StyleChooser.java2
-rw-r--r--src/com/android/gallery3d/filtershow/controller/TitledSlider.java2
-rw-r--r--src/com/android/gallery3d/filtershow/editors/Editor.java47
-rw-r--r--src/com/android/gallery3d/filtershow/editors/EditorChanSat.java2
-rw-r--r--src/com/android/gallery3d/filtershow/editors/EditorDraw.java12
-rw-r--r--src/com/android/gallery3d/filtershow/editors/EditorGrad.java8
-rw-r--r--src/com/android/gallery3d/filtershow/editors/EditorPanel.java31
-rw-r--r--src/com/android/gallery3d/filtershow/editors/EditorStraighten.java2
-rw-r--r--src/com/android/gallery3d/filtershow/editors/EditorVignette.java2
-rw-r--r--src/com/android/gallery3d/filtershow/editors/ParametricEditor.java14
-rw-r--r--src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java6
-rw-r--r--src/com/android/gallery3d/filtershow/filters/FilterDualCamFusionRepresentation.java2
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilter.java8
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamFusion.java8
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamSketch.java9
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamera.java9
-rw-r--r--src/com/android/gallery3d/filtershow/history/HistoryManager.java46
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/GeometryMathUtils.java3
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageCrop.java1
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageMirror.java1
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageRotate.java1
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageShow.java29
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java3
-rw-r--r--src/com/android/gallery3d/ui/AbstractSlotRenderer.java36
-rw-r--r--src/com/android/gallery3d/ui/ActionModeHandler.java16
-rw-r--r--src/com/android/gallery3d/ui/AlbumLabelMaker.java153
-rw-r--r--src/com/android/gallery3d/ui/AlbumSetSlidingWindow.java3
-rw-r--r--src/com/android/gallery3d/ui/AlbumSetSlotRenderer.java2
-rw-r--r--src/com/android/gallery3d/ui/AlbumSlidingWindow.java333
-rw-r--r--src/com/android/gallery3d/ui/AlbumSlotRenderer.java101
-rw-r--r--src/com/android/gallery3d/ui/DialogDetailsView.java44
-rw-r--r--src/com/android/gallery3d/ui/MenuExecutor.java37
-rw-r--r--src/com/android/gallery3d/ui/PhotoView.java2
-rw-r--r--src/com/android/gallery3d/ui/PopupList.java7
-rw-r--r--src/com/android/gallery3d/ui/SelectionManager.java14
-rw-r--r--src/com/android/gallery3d/ui/SlotView.java27
-rw-r--r--src/com/android/gallery3d/util/GalleryUtils.java16
189 files changed, 5180 insertions, 1407 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 01d6123ad..93b015849 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -24,7 +24,7 @@
<original-package android:name="com.android.gallery3d" />
- <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17" />
+ <uses-sdk android:minSdkVersion="18" android:targetSdkVersion="18"/>
<permission android:name="com.android.gallery3d.permission.GALLERY_PROVIDER"
android:protectionLevel="signatureOrSystem" />
@@ -59,7 +59,6 @@
<application android:icon="@mipmap/ic_launcher_gallery" android:label="@string/app_name"
android:name="com.android.gallery3d.app.GalleryAppImpl"
- android:theme="@style/Theme.Gallery"
android:logo="@mipmap/ic_launcher_gallery"
android:hardwareAccelerated="true"
android:largeHeap="true"
@@ -118,7 +117,8 @@
</intent-filter>
</activity>
- <activity android:name="com.android.gallery3d.app.GalleryActivity" android:label="@string/app_name"
+ <activity android:name="com.android.gallery3d.app.GalleryActivity"
+ android:theme="@style/AppTheme"
android:configChanges="keyboardHidden|orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -292,7 +292,6 @@
<activity
android:name="com.android.gallery3d.filtershow.FilterShowActivity"
- android:label="@string/title_activity_filter_show"
android:theme="@style/Theme.FilterShow"
android:configChanges="keyboardHidden|orientation|screenSize">
<intent-filter>
@@ -399,6 +398,7 @@
<service android:name="com.android.camera.MediaSaveService" />
<activity android:name="org.codeaurora.gallery3d.video.SettingsActivity"
+ android:theme="@android:style/Theme.Material.Light"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/streaming_settings" >
<intent-filter>
@@ -426,6 +426,7 @@
</activity>
<activity android:name="org.codeaurora.gallery3d.video.VideoSettingsActivity"
android:label="@string/movie_view_label"
+ android:theme="@android:style/Theme.Material.Light"
android:configChanges="orientation|keyboardHidden|screenSize|mnc|mcc">
</activity>
</application>
diff --git a/res/drawable-hdpi/blur.png b/res/drawable-hdpi/blur.png
new file mode 100644
index 000000000..b767b1bbf
--- /dev/null
+++ b/res/drawable-hdpi/blur.png
Binary files differ
diff --git a/res/drawable-hdpi/drawer_bg.png b/res/drawable-hdpi/drawer_bg.png
new file mode 100644
index 000000000..d7dd7a682
--- /dev/null
+++ b/res/drawable-hdpi/drawer_bg.png
Binary files differ
diff --git a/res/drawable-hdpi/feather.png b/res/drawable-hdpi/feather.png
new file mode 100644
index 000000000..02bd37041
--- /dev/null
+++ b/res/drawable-hdpi/feather.png
Binary files differ
diff --git a/res/drawable-hdpi/focus.png b/res/drawable-hdpi/focus.png
new file mode 100644
index 000000000..a168a05d0
--- /dev/null
+++ b/res/drawable-hdpi/focus.png
Binary files differ
diff --git a/res/drawable-hdpi/fusion.png b/res/drawable-hdpi/fusion.png
new file mode 100644
index 000000000..7abeb245f
--- /dev/null
+++ b/res/drawable-hdpi/fusion.png
Binary files differ
diff --git a/res/drawable-hdpi/halo.png b/res/drawable-hdpi/halo.png
new file mode 100644
index 000000000..f32da8519
--- /dev/null
+++ b/res/drawable-hdpi/halo.png
Binary files differ
diff --git a/res/drawable-hdpi/multiselect.png b/res/drawable-hdpi/multiselect.png
new file mode 100644
index 000000000..59c8eee6a
--- /dev/null
+++ b/res/drawable-hdpi/multiselect.png
Binary files differ
diff --git a/res/drawable-hdpi/none.png b/res/drawable-hdpi/none.png
new file mode 100644
index 000000000..58a7fd833
--- /dev/null
+++ b/res/drawable-hdpi/none.png
Binary files differ
diff --git a/res/drawable-hdpi/play_detail.png b/res/drawable-hdpi/play_detail.png
new file mode 100644
index 000000000..21060fc17
--- /dev/null
+++ b/res/drawable-hdpi/play_detail.png
Binary files differ
diff --git a/res/drawable-hdpi/random.png b/res/drawable-hdpi/random.png
new file mode 100644
index 000000000..3ae23df96
--- /dev/null
+++ b/res/drawable-hdpi/random.png
Binary files differ
diff --git a/res/drawable-hdpi/rectangle.png b/res/drawable-hdpi/rectangle.png
new file mode 100644
index 000000000..10c0e9a88
--- /dev/null
+++ b/res/drawable-hdpi/rectangle.png
Binary files differ
diff --git a/res/drawable-hdpi/round.png b/res/drawable-hdpi/round.png
new file mode 100644
index 000000000..d9014c0b3
--- /dev/null
+++ b/res/drawable-hdpi/round.png
Binary files differ
diff --git a/res/drawable-hdpi/sketch.png b/res/drawable-hdpi/sketch.png
new file mode 100644
index 000000000..f43f6ace1
--- /dev/null
+++ b/res/drawable-hdpi/sketch.png
Binary files differ
diff --git a/res/drawable-hdpi/square.png b/res/drawable-hdpi/square.png
new file mode 100644
index 000000000..9b744bad7
--- /dev/null
+++ b/res/drawable-hdpi/square.png
Binary files differ
diff --git a/res/drawable-xhdpi/blur.png b/res/drawable-xhdpi/blur.png
new file mode 100644
index 000000000..279848e2f
--- /dev/null
+++ b/res/drawable-xhdpi/blur.png
Binary files differ
diff --git a/res/drawable-xhdpi/drawer_bg.png b/res/drawable-xhdpi/drawer_bg.png
new file mode 100644
index 000000000..5640493e3
--- /dev/null
+++ b/res/drawable-xhdpi/drawer_bg.png
Binary files differ
diff --git a/res/drawable-xhdpi/feather.png b/res/drawable-xhdpi/feather.png
new file mode 100644
index 000000000..d622a2fe0
--- /dev/null
+++ b/res/drawable-xhdpi/feather.png
Binary files differ
diff --git a/res/drawable-xhdpi/focus.png b/res/drawable-xhdpi/focus.png
new file mode 100644
index 000000000..ea695b49c
--- /dev/null
+++ b/res/drawable-xhdpi/focus.png
Binary files differ
diff --git a/res/drawable-xhdpi/fusion.png b/res/drawable-xhdpi/fusion.png
new file mode 100644
index 000000000..158fcbb2e
--- /dev/null
+++ b/res/drawable-xhdpi/fusion.png
Binary files differ
diff --git a/res/drawable-xhdpi/halo.png b/res/drawable-xhdpi/halo.png
new file mode 100644
index 000000000..8047a73e1
--- /dev/null
+++ b/res/drawable-xhdpi/halo.png
Binary files differ
diff --git a/res/drawable-xhdpi/multiselect.png b/res/drawable-xhdpi/multiselect.png
new file mode 100644
index 000000000..41ecb89ea
--- /dev/null
+++ b/res/drawable-xhdpi/multiselect.png
Binary files differ
diff --git a/res/drawable-xhdpi/normal.png b/res/drawable-xhdpi/normal.png
new file mode 100644
index 000000000..91cb73990
--- /dev/null
+++ b/res/drawable-xhdpi/normal.png
Binary files differ
diff --git a/res/drawable-xhdpi/play_detail.png b/res/drawable-xhdpi/play_detail.png
new file mode 100644
index 000000000..d8999dcdc
--- /dev/null
+++ b/res/drawable-xhdpi/play_detail.png
Binary files differ
diff --git a/res/drawable-xhdpi/random.png b/res/drawable-xhdpi/random.png
new file mode 100644
index 000000000..ca6b3f2e0
--- /dev/null
+++ b/res/drawable-xhdpi/random.png
Binary files differ
diff --git a/res/drawable-xhdpi/rectangle.png b/res/drawable-xhdpi/rectangle.png
new file mode 100644
index 000000000..138d25ba8
--- /dev/null
+++ b/res/drawable-xhdpi/rectangle.png
Binary files differ
diff --git a/res/drawable-xhdpi/round.png b/res/drawable-xhdpi/round.png
new file mode 100644
index 000000000..012a706ea
--- /dev/null
+++ b/res/drawable-xhdpi/round.png
Binary files differ
diff --git a/res/drawable-xhdpi/sketch.png b/res/drawable-xhdpi/sketch.png
new file mode 100644
index 000000000..357cb4176
--- /dev/null
+++ b/res/drawable-xhdpi/sketch.png
Binary files differ
diff --git a/res/drawable-xhdpi/square.png b/res/drawable-xhdpi/square.png
new file mode 100644
index 000000000..d9d794609
--- /dev/null
+++ b/res/drawable-xhdpi/square.png
Binary files differ
diff --git a/res/drawable-xxhdpi/blur.png b/res/drawable-xxhdpi/blur.png
new file mode 100644
index 000000000..9cd27ee8f
--- /dev/null
+++ b/res/drawable-xxhdpi/blur.png
Binary files differ
diff --git a/res/drawable-xxhdpi/drawer_bg.png b/res/drawable-xxhdpi/drawer_bg.png
new file mode 100644
index 000000000..adc7e4a39
--- /dev/null
+++ b/res/drawable-xxhdpi/drawer_bg.png
Binary files differ
diff --git a/res/drawable-xxhdpi/feather.png b/res/drawable-xxhdpi/feather.png
new file mode 100644
index 000000000..bb8069e11
--- /dev/null
+++ b/res/drawable-xxhdpi/feather.png
Binary files differ
diff --git a/res/drawable-xxhdpi/focus.png b/res/drawable-xxhdpi/focus.png
new file mode 100644
index 000000000..8d58fd6ce
--- /dev/null
+++ b/res/drawable-xxhdpi/focus.png
Binary files differ
diff --git a/res/drawable-xxhdpi/fusion.png b/res/drawable-xxhdpi/fusion.png
new file mode 100644
index 000000000..1e88b9b6b
--- /dev/null
+++ b/res/drawable-xxhdpi/fusion.png
Binary files differ
diff --git a/res/drawable-xxhdpi/halo.png b/res/drawable-xxhdpi/halo.png
new file mode 100644
index 000000000..99ed56f6c
--- /dev/null
+++ b/res/drawable-xxhdpi/halo.png
Binary files differ
diff --git a/res/drawable-xxhdpi/multiselect.png b/res/drawable-xxhdpi/multiselect.png
new file mode 100644
index 000000000..6ec298519
--- /dev/null
+++ b/res/drawable-xxhdpi/multiselect.png
Binary files differ
diff --git a/res/drawable-xxhdpi/none.png b/res/drawable-xxhdpi/none.png
new file mode 100644
index 000000000..6e54e7d59
--- /dev/null
+++ b/res/drawable-xxhdpi/none.png
Binary files differ
diff --git a/res/drawable-xxhdpi/play_detail.png b/res/drawable-xxhdpi/play_detail.png
new file mode 100644
index 000000000..01fc30f4c
--- /dev/null
+++ b/res/drawable-xxhdpi/play_detail.png
Binary files differ
diff --git a/res/drawable-xxhdpi/random.png b/res/drawable-xxhdpi/random.png
new file mode 100644
index 000000000..78140f7f6
--- /dev/null
+++ b/res/drawable-xxhdpi/random.png
Binary files differ
diff --git a/res/drawable-xxhdpi/rectangle.png b/res/drawable-xxhdpi/rectangle.png
new file mode 100644
index 000000000..ba45378e1
--- /dev/null
+++ b/res/drawable-xxhdpi/rectangle.png
Binary files differ
diff --git a/res/drawable-xxhdpi/round.png b/res/drawable-xxhdpi/round.png
new file mode 100644
index 000000000..3d9282fec
--- /dev/null
+++ b/res/drawable-xxhdpi/round.png
Binary files differ
diff --git a/res/drawable-xxhdpi/sketch.png b/res/drawable-xxhdpi/sketch.png
new file mode 100644
index 000000000..be89c59a0
--- /dev/null
+++ b/res/drawable-xxhdpi/sketch.png
Binary files differ
diff --git a/res/drawable-xxhdpi/square.png b/res/drawable-xxhdpi/square.png
new file mode 100644
index 000000000..d339d8eeb
--- /dev/null
+++ b/res/drawable-xxhdpi/square.png
Binary files differ
diff --git a/res/drawable/addspot.xml b/res/drawable/addspot.xml
new file mode 100644
index 000000000..15bfee87d
--- /dev/null
+++ b/res/drawable/addspot.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:pathData="M19.316,16.303v-4.351h-1.66v4.351h-4.264v1.707h4.264v4.328h1.66V18.01h4.27v-1.707H19.316zM7.814,1.638c-4.087,0 -7.4,3.313 -7.4,7.401c0,4.088 3.313,7.4 7.4,7.4s7.4,-3.313 7.4,-7.4C15.215,4.952 11.901,1.638 7.814,1.638zM7.729,15.008c-3.353,0 -6.07,-2.718 -6.07,-6.071s2.718,-6.071 6.07,-6.071c3.354,0 6.071,2.718 6.071,6.071S11.083,15.008 7.729,15.008zM7.729,4.513c-2.47,0 -4.472,2.002 -4.472,4.472s2.002,4.472 4.472,4.472s4.472,-2.002 4.472,-4.472S10.199,4.513 7.729,4.513z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/adjust.xml b/res/drawable/adjust.xml
new file mode 100644
index 000000000..3ce4ed243
--- /dev/null
+++ b/res/drawable/adjust.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="12dp"
+ android:height="12dp"
+ android:viewportWidth="12.0"
+ android:viewportHeight="12.0">
+ <path
+ android:pathData="M5.984,6.016m-5.859,0a5.859,5.859 0,1 1,11.718 0a5.859,5.859 0,1 1,-11.718 0"
+ android:fillColor="#00E3FF"/>
+</vector>
diff --git a/res/drawable/albums.xml b/res/drawable/albums.xml
new file mode 100644
index 000000000..7d742d61d
--- /dev/null
+++ b/res/drawable/albums.xml
@@ -0,0 +1,39 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M17.999,2h-12c-1.1,0 -2,0.9 -2,2v16c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2V4C19.999,2.9 19.099,2 17.999,2zM5.999,4h5v8l-2.5,-1.5l-2.5,1.5V4zM5.999,19l3,-3.859l2.141,2.58l3,-3.861L17.999,19H5.999z"
+ android:fillAlpha="0.54"/>
+</vector>
diff --git a/res/drawable/back.xml b/res/drawable/back.xml
new file mode 100644
index 000000000..a8e282f93
--- /dev/null
+++ b/res/drawable/back.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8l8,8l1.41,-1.41L7.83,13H20V11z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/beautify.xml b/res/drawable/beautify.xml
new file mode 100644
index 000000000..7ae64a316
--- /dev/null
+++ b/res/drawable/beautify.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="32dp"
+ android:height="32dp"
+ android:viewportWidth="32.0"
+ android:viewportHeight="32.0">
+ <path
+ android:pathData="M26.305,8.769c-0.433,0.9 -0.486,2.1 -0.486,2.1s-0.175,-1.205 -0.619,-2.128c-0.395,-0.822 -1.93,-1.111 -1.93,-1.111s1.492,-0.138 1.879,-0.938c0.451,-0.939 0.623,-2.139 0.623,-2.139s0.107,1.136 0.571,2.103c0.366,0.758 1.854,0.98 1.854,0.98S26.714,7.919 26.305,8.769zM24.283,18.035c0,0 0.081,-1.424 -0.418,-3.219c-1.354,-4.873 -3.568,-6.139 -3.568,-6.139s2.77,0.869 4.727,5.355C26.087,16.468 24.283,18.035 24.283,18.035zM23.139,17.76c0,0 0.488,1.772 -0.889,4.784c-1.379,3.017 -4.73,4.065 -4.73,4.065s2.842,-1.843 4.154,-4.443C22.706,20.119 23.139,17.76 23.139,17.76zM14.925,13.241c-2.487,1.971 -3.536,4.087 -3.536,7.08c0,3.931 5.176,7.127 5.176,7.127s-6.6,-2.607 -6.6,-7.426c0,-2.614 0.661,-5.133 1.835,-7.062c-0.72,0.654 -1.383,1.438 -1.868,2.416c-1.315,2.659 -0.804,6.175 -0.804,6.175c-2.54,-2.602 -3.533,-6.776 -2.229,-10.197c1.196,-3.136 3.49,-5.457 5.399,-6.058c3.968,-1.25 4.969,0.568 4.969,0.568s0.031,0.09 0.07,0.244c0.045,-0.37 -0.014,-0.573 -0.014,-0.573S21.336,8.16 14.925,13.241zM5.774,23.086c-0.294,0.622 -0.372,1.321 -0.372,1.321s-0.078,-0.701 -0.381,-1.34c-0.269,-0.566 -1.251,-0.704 -1.251,-0.704s0.954,-0.158 1.216,-0.711c0.307,-0.649 0.424,-1.481 0.424,-1.481s0.073,0.789 0.39,1.456C6.049,22.152 7,22.351 7,22.351S6.053,22.501 5.774,23.086zM24.859,22.814c0.478,-1.109 0.659,-2.631 0.659,-2.631s0.112,1.447 0.605,2.59c0.384,0.895 2.104,0.973 2.104,0.973s-1.716,0.152 -2.145,1.155c-0.459,1.063 -0.622,2.521 -0.622,2.521s-0.08,-1.464 -0.549,-2.553c-0.418,-0.972 -2.063,-1.146 -2.063,-1.146l-0.028,-0.004C22.822,23.72 24.451,23.762 24.859,22.814z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/camera.xml b/res/drawable/camera.xml
new file mode 100644
index 000000000..300b4a903
--- /dev/null
+++ b/res/drawable/camera.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
+ <path
+ android:pathData="M0,0h24v24H0V0z" />
+ <path
+ android:fillColor="#FFFFFF"
+ android:pathData="M 12 9.799 C 13.7673111995 9.799 15.2 11.2316888005 15.2 12.999 C 15.2 14.7663111995 13.7673111995 16.199 12 16.199 C 10.2326888005 16.199 8.8 14.7663111995 8.8 12.999 C 8.8 11.2316888005 10.2326888005 9.799 12 9.799 Z" />
+ <path
+ android:fillColor="#FFFFFF"
+ android:pathData="M9,3L7.17,5H4c-1.1,0-2,0.9-2,2v12c0,1.1,0.9,2,2,2h16c1.1,0,2-0.9,2-2V7c0-1.1-0.9-2-2-2h-3.17L15,3H9z
+M12,18c-2.76,0-5-2.24-5-5c0-2.76,2.24-5,5-5s5,2.24,5,5C17,15.76,14.76,18,12,18z" />
+</vector> \ No newline at end of file
diff --git a/res/drawable/cancel.xml b/res/drawable/cancel.xml
new file mode 100644
index 000000000..c3e5231e7
--- /dev/null
+++ b/res/drawable/cancel.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:pathData="M19.205,6.41L17.795,5l-5.59,5.59L6.615,5l-1.41,1.41l5.59,5.59l-5.59,5.59L6.615,19l5.59,-5.59l5.59,5.59l1.41,-1.41L13.615,12L19.205,6.41z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/cancel2.xml b/res/drawable/cancel2.xml
new file mode 100644
index 000000000..4ccde0a39
--- /dev/null
+++ b/res/drawable/cancel2.xml
@@ -0,0 +1,39 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M19.205,6.41L17.795,5l-5.59,5.59L6.615,5l-1.41,1.41l5.59,5.59l-5.59,5.59L6.615,19l5.59,-5.59l5.59,5.59l1.41,-1.41L13.615,12L19.205,6.41z"
+ android:fillAlpha="0.54"/>
+</vector>
diff --git a/res/drawable/color.xml b/res/drawable/color.xml
new file mode 100644
index 000000000..8a5530857
--- /dev/null
+++ b/res/drawable/color.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="32dp"
+ android:height="32dp"
+ android:viewportWidth="32.0"
+ android:viewportHeight="32.0">
+ <path
+ android:pathData="M16,4.951C9.898,4.951 4.951,9.898 4.951,16c0,6.102 4.947,11.049 11.049,11.049c1.02,0 1.842,-0.822 1.842,-1.842c0,-0.479 -0.178,-0.908 -0.479,-1.232c-0.289,-0.326 -0.461,-0.75 -0.461,-1.223c0,-1.02 0.822,-1.842 1.842,-1.842h2.166c3.389,0 6.139,-2.75 6.139,-6.138C27.049,9.347 22.102,4.951 16,4.951zM9.248,16c-1.02,0 -1.842,-0.822 -1.842,-1.842c0,-1.019 0.822,-1.841 1.842,-1.841s1.842,0.822 1.842,1.841C11.09,15.178 10.268,16 9.248,16zM12.932,11.09c-1.02,0 -1.842,-0.822 -1.842,-1.842c0,-1.019 0.822,-1.842 1.842,-1.842c1.018,0 1.84,0.823 1.84,1.842C14.771,10.268 13.949,11.09 12.932,11.09zM19.068,11.09c-1.021,0 -1.842,-0.822 -1.842,-1.842c0,-1.019 0.821,-1.842 1.842,-1.842c1.02,0 1.842,0.823 1.842,1.842C20.91,10.268 20.088,11.09 19.068,11.09zM22.752,16c-1.02,0 -1.842,-0.822 -1.842,-1.842c0,-1.019 0.822,-1.841 1.842,-1.841s1.842,0.822 1.842,1.841C24.594,15.178 23.771,16 22.752,16z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/comparison_after.xml b/res/drawable/comparison_after.xml
new file mode 100644
index 000000000..972f69d61
--- /dev/null
+++ b/res/drawable/comparison_after.xml
@@ -0,0 +1,42 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="36dp"
+ android:height="36dp"
+ android:viewportWidth="36.0"
+ android:viewportHeight="36.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M18,1c9.389,0 17,7.611 17,17c0,9.388 -7.611,17 -17,17C8.612,35 1,27.388 1,18C1,8.611 8.612,1 18,1z"
+ android:fillAlpha="0.26"/>
+ <path
+ android:pathData="M9.258,16h1.333v-1.333H9.258V16zM9.258,18.667h1.333v-1.334H9.258V18.667zM9.258,21.333h1.333V20H9.258V21.333zM10.591,23.999v-1.333H9.258C9.258,23.402 9.854,23.999 10.591,23.999zM9.258,13.334h1.333v-1.333C9.854,12.001 9.258,12.598 9.258,13.334zM17.334,25.332h1.333V10.667h-1.333V25.332zM14.667,23.999H16v-1.333h-1.333V23.999zM25.408,12.001h-5.37v1.333h5.37v9.332h-5.37v1.333h5.37c0.737,0 1.334,-0.597 1.334,-1.333v-9.332C26.742,12.598 26.146,12.001 25.408,12.001zM15.97,12.001h-1.333v1.333h1.333V12.001zM11.955,13.334h1.334v-1.333h-1.334V13.334zM11.955,23.999h1.334v-1.333h-1.334V23.999z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/comparison_before.xml b/res/drawable/comparison_before.xml
new file mode 100644
index 000000000..b846e03aa
--- /dev/null
+++ b/res/drawable/comparison_before.xml
@@ -0,0 +1,42 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="36dp"
+ android:height="36dp"
+ android:viewportWidth="36.0"
+ android:viewportHeight="36.0">
+ <path
+ android:pathData="M18,1c9.389,0 17,7.611 17,17c0,9.388 -7.611,17 -17,17C8.612,35 1,27.388 1,18C1,8.611 8.612,1 18,1z"
+ android:fillAlpha="0.26"
+ android:fillColor="#FFFFFF"/>
+ <path
+ android:pathData="M9.258,16h1.333v-1.333H9.258V16zM10.591,23.999v-1.333H9.258C9.258,23.402 9.854,23.999 10.591,23.999zM9.258,13.334h1.333v-1.333C9.854,12.001 9.258,12.598 9.258,13.334zM9.258,21.333h1.333V20H9.258V21.333zM9.258,18.667h1.333v-1.334H9.258V18.667zM14.667,23.999H16v-1.333h-1.333V23.999zM25.408,12.001h-5.37v1.333h5.37v9.332h-5.37v1.333h5.37c0.737,0 1.334,-0.597 1.334,-1.333v-9.332C26.742,12.598 26.146,12.001 25.408,12.001zM17.334,25.332h1.333V10.667h-1.333V25.332zM15.97,12.001h-1.333v1.333h1.333V12.001zM11.955,13.334h1.334v-1.333h-1.334V13.334zM11.955,23.999h1.334v-1.333h-1.334V23.999z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/crop.xml b/res/drawable/crop.xml
new file mode 100644
index 000000000..9621a7d86
--- /dev/null
+++ b/res/drawable/crop.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="32dp"
+ android:height="32dp"
+ android:viewportWidth="32.0"
+ android:viewportHeight="32.0">
+ <path
+ android:pathData="M20.911,19.324h2.28v-8.26c0,-1.127 -0.945,-2.438 -2.073,-2.438h-8.262v2.312h8.055V19.324zM11.117,21.008v-16.4H8.809v4.019h-4.02l-0.031,2.315l4.051,-0.004V21.27c0,1.127 0.914,2.041 2.041,2.041h10.03v4.082h2.312v-4.082h4.052v-2.303H11.117z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/delete.xml b/res/drawable/delete.xml
new file mode 100644
index 000000000..e3afef66d
--- /dev/null
+++ b/res/drawable/delete.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:pathData="M5.999,19.001c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2v-12h-12V19.001zM18.999,4.001h-3.5l-1,-1h-5l-1,1h-3.5v2h14V4.001z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/done.xml b/res/drawable/done.xml
new file mode 100644
index 000000000..bfd631671
--- /dev/null
+++ b/res/drawable/done.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:pathData="M8.795,15.875l-4.17,-4.17l-1.42,1.41l5.59,5.59l12,-12l-1.41,-1.41L8.795,15.875z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/done2.xml b/res/drawable/done2.xml
new file mode 100644
index 000000000..198cbf316
--- /dev/null
+++ b/res/drawable/done2.xml
@@ -0,0 +1,39 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M8.795,15.875l-4.17,-4.17l-1.42,1.41l5.59,5.59l12,-12l-1.41,-1.41L8.795,15.875z"
+ android:fillAlpha="0.54"/>
+</vector>
diff --git a/res/drawable/drawer.xml b/res/drawable/drawer.xml
new file mode 100644
index 000000000..eaebbc471
--- /dev/null
+++ b/res/drawable/drawer.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:pathData="M2.989,18h18.022v-2H2.989V18zM2.989,13h18.022v-2H2.989V13zM2.989,6v2h18.022V6H2.989z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/drawer_item_selected_bg.xml b/res/drawable/drawer_item_selected_bg.xml
new file mode 100644
index 000000000..81d6ce8b4
--- /dev/null
+++ b/res/drawable/drawer_item_selected_bg.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle" >
+ <solid android:color="#D8D8D8" >
+ </solid>
+
+</shape> \ No newline at end of file
diff --git a/res/drawable/dualcamera.xml b/res/drawable/dualcamera.xml
new file mode 100644
index 000000000..7f05fa9ff
--- /dev/null
+++ b/res/drawable/dualcamera.xml
@@ -0,0 +1,21 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="32dp"
+ android:height="32dp"
+ android:viewportWidth="32.0"
+ android:viewportHeight="32.0">
+ <path
+ android:pathData="M19.794,10.447H12.36c-1.152,0 -2.165,0.887 -2.165,2.04v7.912c0,1.153 1.012,2.086 2.165,2.086h7.434c1.154,0 2.011,-0.933 2.011,-2.086v-7.912C21.805,11.334 20.948,10.447 19.794,10.447zM19.865,20.57h-7.692v-8.175h7.692V20.57z"
+ android:fillColor="#FFFFFF"/>
+ <path
+ android:pathData="M21,7h4v5h2V7.713C27,6.341 26.156,5 24.783,5H21V7z"
+ android:fillColor="#FFFFFF"/>
+ <path
+ android:pathData="M7,12V7h4V5H7.399C6.027,5 5,6.341 5,7.713V12H7z"
+ android:fillColor="#FFFFFF"/>
+ <path
+ android:pathData="M11,26H7v-5H5v4.098C5,26.471 6.027,28 7.399,28H11V26z"
+ android:fillColor="#FFFFFF"/>
+ <path
+ android:pathData="M25,21v5h-4v2h3.783C26.156,28 27,26.471 27,25.098V21H25z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/edit.xml b/res/drawable/edit.xml
new file mode 100644
index 000000000..150152479
--- /dev/null
+++ b/res/drawable/edit.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:pathData="M2.999,17.252v3.75h3.75l11.061,-11.06l-3.75,-3.75L2.999,17.252zM20.708,7.042c0.39,-0.39 0.39,-1.02 0,-1.41l-2.34,-2.34c-0.39,-0.39 -1.021,-0.39 -1.41,0l-1.83,1.83l3.75,3.75L20.708,7.042z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/exposure.xml b/res/drawable/exposure.xml
new file mode 100644
index 000000000..493e67233
--- /dev/null
+++ b/res/drawable/exposure.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="32dp"
+ android:height="32dp"
+ android:viewportWidth="32.0"
+ android:viewportHeight="32.0">
+ <path
+ android:pathData="M19.514,21.201v2.357h1.644l0.045,-2.357h2.313v-1.688h-2.357V17.2h-1.643v2.313h-2.357v1.688H19.514zM24.85,4.793H7.061c-1.228,0 -2.223,0.995 -2.223,2.224v17.788c0,1.229 0.995,2.402 2.223,2.402H24.85c1.229,0 2.313,-1.174 2.313,-2.402V7.017C27.161,5.789 26.077,4.793 24.85,4.793zM8.173,8.173h6.671v2H8.173V8.173zM25.161,25.162h-18.1l18.1,-18.541V25.162z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/filtershow_menu_marker_rtl.xml b/res/drawable/filtershow_menu_marker_rtl.xml
index 151500472..a564985b6 100644
--- a/res/drawable/filtershow_menu_marker_rtl.xml
+++ b/res/drawable/filtershow_menu_marker_rtl.xml
@@ -1,4 +1,4 @@
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/filtershow_menu_marker"
+ android:src="@drawable/spinner_triangle"
android:autoMirrored="true">
</bitmap> \ No newline at end of file
diff --git a/res/drawable/filtershow_slider.xml b/res/drawable/filtershow_slider.xml
index 23457a6ef..80805dc6f 100644
--- a/res/drawable/filtershow_slider.xml
+++ b/res/drawable/filtershow_slider.xml
@@ -16,13 +16,13 @@
-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background"
- android:drawable="@drawable/filtershow_scrubber_track" />
+ android:drawable="@drawable/sliderbg" />
<item android:id="@android:id/secondaryProgress">
<scale android:scaleWidth="100%"
- android:drawable="@drawable/filtershow_scrubber_secondary" />
+ android:drawable="@drawable/sliderprogress" />
</item>
<item android:id="@android:id/progress">
<scale android:scaleWidth="100%"
- android:drawable="@drawable/filtershow_scrubber_primary" />
+ android:drawable="@drawable/sliderprogress" />
</item>
</layer-list> \ No newline at end of file
diff --git a/res/drawable/frames.xml b/res/drawable/frames.xml
new file mode 100644
index 000000000..b26f282fb
--- /dev/null
+++ b/res/drawable/frames.xml
@@ -0,0 +1,44 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="32dp"
+ android:height="32dp"
+ android:viewportWidth="32.0"
+ android:viewportHeight="32.0">
+ <path
+ android:pathData="M24.934,8.228h-4.467L16,3.761l-4.468,4.467H7.065c-1.234,0 -2.233,1 -2.233,2.233v15.441c0,1.232 0.999,2.338 2.233,2.338h17.869c1.233,0 2.233,-1.104 2.233,-2.338V10.461C27.168,9.228 26.168,8.228 24.934,8.228zM25.178,26.25H6.822V10.252h5.285l3.932,-3.699l3.886,3.699h5.253V26.25z"
+ android:fillColor="#FFFFFF"/>
+ <path
+ android:pathData="M23.143,12.216"
+ android:fillColor="#FFFFFF"/>
+ <path
+ android:pathData="M8.923,12.216h14.153v11.966h-14.153z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/more.xml b/res/drawable/more.xml
new file mode 100644
index 000000000..ae6b4ea77
--- /dev/null
+++ b/res/drawable/more.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2c-1.1,0 -2,0.9 -2,2S10.9,8 12,8zM12,10c-1.1,0 -2,0.9 -2,2c0,1.1 0.9,2 2,2c1.1,0 2,-0.9 2,-2C14,10.9 13.1,10 12,10zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2c1.1,0 2,-0.9 2,-2S13.1,16 12,16z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/more2.xml b/res/drawable/more2.xml
new file mode 100644
index 000000000..5f3c9888a
--- /dev/null
+++ b/res/drawable/more2.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="36dp"
+ android:height="36dp"
+ android:viewportWidth="36.0"
+ android:viewportHeight="36.0">
+ <path
+ android:pathData="M18,13c1.381,0 2.5,-1.119 2.5,-2.5S19.381,8 18,8s-2.5,1.119 -2.5,2.5S16.619,13 18,13zM18,15.5c-1.381,0 -2.5,1.119 -2.5,2.5s1.119,2.5 2.5,2.5s2.5,-1.119 2.5,-2.5S19.381,15.5 18,15.5zM18,23c-1.381,0 -2.5,1.119 -2.5,2.5S16.619,28 18,28s2.5,-1.119 2.5,-2.5S19.381,23 18,23z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/multiselect.xml b/res/drawable/multiselect.xml
new file mode 100644
index 000000000..9b2137006
--- /dev/null
+++ b/res/drawable/multiselect.xml
@@ -0,0 +1,41 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:pathData="M12,2C6.48,2 2,6.48 2,12c0,5.52 4.48,10 10,10c5.52,0 10,-4.48 10,-10C22,6.48 17.52,2 12,2z"
+ android:fillColor="#2196F3"/>
+ <path
+ android:pathData="M10,17l-5,-5l1.4099998,-1.4099998l3.5900002,3.58l7.59,-7.59l1.4099998,1.4200001z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/multiselect_delete.xml b/res/drawable/multiselect_delete.xml
new file mode 100644
index 000000000..aade6c28b
--- /dev/null
+++ b/res/drawable/multiselect_delete.xml
@@ -0,0 +1,39 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6V19zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"
+ android:fillAlpha="0.54"/>
+</vector>
diff --git a/res/drawable/multiselect_more.xml b/res/drawable/multiselect_more.xml
new file mode 100644
index 000000000..a0f6e7dc8
--- /dev/null
+++ b/res/drawable/multiselect_more.xml
@@ -0,0 +1,39 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2c-1.1,0 -2,0.9 -2,2S10.9,8 12,8zM12,10c-1.1,0 -2,0.9 -2,2c0,1.1 0.9,2 2,2c1.1,0 2,-0.9 2,-2C14,10.9 13.1,10 12,10zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2c1.1,0 2,-0.9 2,-2S13.1,16 12,16z"
+ android:fillAlpha="0.54"/>
+</vector>
diff --git a/res/drawable/multiselect_share.xml b/res/drawable/multiselect_share.xml
new file mode 100644
index 000000000..1cf741806
--- /dev/null
+++ b/res/drawable/multiselect_share.xml
@@ -0,0 +1,39 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M18,16.12c-0.76,0 -1.439,0.3 -1.96,0.77L8.91,12.74C8.96,12.51 9,12.28 9,12.04s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81c1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3s-3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.85C7.5,9.35 6.79,9.04 6,9.04c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.311 2.04,-0.811l7.12,4.16c-0.051,0.211 -0.08,0.43 -0.08,0.65c0,1.609 1.311,2.92 2.92,2.92s2.92,-1.311 2.92,-2.92S19.609,16.12 18,16.12z"
+ android:fillAlpha="0.54"/>
+</vector>
diff --git a/res/drawable/multiselected_back.xml b/res/drawable/multiselected_back.xml
new file mode 100644
index 000000000..dcd03f5af
--- /dev/null
+++ b/res/drawable/multiselected_back.xml
@@ -0,0 +1,39 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8l8,8l1.41,-1.41L7.83,13H20V11z"
+ android:fillAlpha="0.54"/>
+</vector>
diff --git a/res/drawable/overflow.xml b/res/drawable/overflow.xml
new file mode 100644
index 000000000..b507ea444
--- /dev/null
+++ b/res/drawable/overflow.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
+ <path
+ android:pathData="M0,0h24v24H0V0z" />
+ <path
+ android:fillColor="#FFFFFF"
+ android:pathData="M12,8c1.1,0,2-0.9,2-2s-0.9-2-2-2c-1.1,0-2,0.9-2,2S10.9,8,12,8z
+M12,10c-1.1,0-2,0.9-2,2c0,1.1,0.9,2,2,2 c1.1,0,2-0.9,2-2C14,10.9,13.1,10,12,10z
+M12,16c-1.1,0-2,0.9-2,2s0.9,2,2,2c1.1,0,2-0.9,2-2S13.1,16,12,16z" />
+</vector> \ No newline at end of file
diff --git a/res/drawable/selected.xml b/res/drawable/selected.xml
new file mode 100644
index 000000000..f55e66d10
--- /dev/null
+++ b/res/drawable/selected.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="37dp"
+ android:height="37dp"
+ android:viewportWidth="37.0"
+ android:viewportHeight="37.0">
+ <path
+ android:pathData="M36,1v35H1V1H36M37,0H0v37h37V0L37,0z"
+ android:fillColor="#40C4FF"/>
+</vector>
diff --git a/res/drawable/share.xml b/res/drawable/share.xml
new file mode 100644
index 000000000..bd05d1569
--- /dev/null
+++ b/res/drawable/share.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:pathData="M17.999,16.121c-0.76,0 -1.439,0.3 -1.96,0.77L8.91,12.741C8.959,12.512 9,12.281 9,12.041s-0.04,-0.471 -0.09,-0.7l7.049,-4.11c0.54,0.5 1.25,0.81 2.04,0.81c1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3s-3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.851C7.5,9.351 6.79,9.041 6,9.041c-1.66,0 -3,1.34 -3,3c0,1.661 1.34,3 3,3c0.79,0 1.5,-0.311 2.04,-0.811l7.12,4.16c-0.051,0.211 -0.08,0.43 -0.08,0.65c0,1.609 1.311,2.92 2.92,2.92s2.92,-1.311 2.92,-2.92S19.608,16.121 17.999,16.121z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/sliderbg.xml b/res/drawable/sliderbg.xml
new file mode 100644
index 000000000..974ab918e
--- /dev/null
+++ b/res/drawable/sliderbg.xml
@@ -0,0 +1,39 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="216dp"
+ android:height="4dp"
+ android:viewportWidth="216.0"
+ android:viewportHeight="4.0">
+ <path
+ android:pathData="M0,1h216v2h-216z"
+ android:fillAlpha="0.2"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/sliderprogress.xml b/res/drawable/sliderprogress.xml
new file mode 100644
index 000000000..9ca10b6e2
--- /dev/null
+++ b/res/drawable/sliderprogress.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="216dp"
+ android:height="4dp"
+ android:viewportWidth="216.0"
+ android:viewportHeight="4.0">
+ <path
+ android:pathData="M0,1h216v2h-216z"
+ android:fillColor="#00E3FF"/>
+</vector>
diff --git a/res/drawable/slideshow.xml b/res/drawable/slideshow.xml
new file mode 100644
index 000000000..1b044bb04
--- /dev/null
+++ b/res/drawable/slideshow.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:pathData="M10,8v8l5,-4L10,8zM19,3H5C3.9,3 3,3.9 3,5v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V5C21,3.9 20.1,3 19,3zM19,19H5V5h14V19z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/spinner_triangle.xml b/res/drawable/spinner_triangle.xml
new file mode 100644
index 000000000..a2f314153
--- /dev/null
+++ b/res/drawable/spinner_triangle.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector android:autoMirrored="true" android:height="12dp"
+ android:viewportHeight="12.0" android:viewportWidth="12.0"
+ android:width="12dp" xmlns:android="http://schemas.android.com/apk/res/android">
+ <path android:fillAlpha="0.3" android:fillColor="#FFFFFF" android:pathData="M12,3.7V12H3.7L12,3.7z"/>
+</vector>
diff --git a/res/drawable/timeline.xml b/res/drawable/timeline.xml
new file mode 100644
index 000000000..d5ba75b2e
--- /dev/null
+++ b/res/drawable/timeline.xml
@@ -0,0 +1,43 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M19.057,4.034h-1.01V2.059h-2.016v1.976H7.969V2.059H5.951v1.976H4.902c-1.115,0 -1.967,0.943 -1.967,2.058l-0.01,13.832c0,1.114 0.902,2.017 2.016,2.017h14.115c1.113,0 2.016,-0.902 2.016,-2.017V6.092C21.072,4.978 20.17,4.034 19.057,4.034zM19.098,19.965H4.941V9.015h14.156V19.965z"
+ android:fillAlpha="0.54"/>
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M6.184,16.241l3.738,-4.984l2.908,3.742l2.076,-2.496l2.907,3.738H6.184z"
+ android:fillAlpha="0.54"/>
+</vector>
diff --git a/res/drawable/videos.xml b/res/drawable/videos.xml
new file mode 100644
index 000000000..00f09d565
--- /dev/null
+++ b/res/drawable/videos.xml
@@ -0,0 +1,39 @@
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M3.999,6h-2v14c0,1.1 0.9,2 2,2h14v-2h-14V6zM19.999,2h-12c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2V4C21.999,2.9 21.099,2 19.999,2zM11.999,14.5v-9l6,4.5L11.999,14.5z"
+ android:fillAlpha="0.54"/>
+</vector>
diff --git a/res/layout-land/filtershow_activity.xml b/res/layout-land/filtershow_activity.xml
index f4380126e..35914a47f 100644
--- a/res/layout-land/filtershow_activity.xml
+++ b/res/layout-land/filtershow_activity.xml
@@ -16,99 +16,85 @@
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:id="@+id/mainView"
- android:background="@drawable/filtershow_tiled_background">
+ android:id="@+id/mainView"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
<LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="horizontal"
- android:animateLayoutChanges="true">
-
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:animateLayoutChanges="true"
+ android:orientation="horizontal" >
<FrameLayout
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_weight="1" >
+
+ <ProgressBar
+ android:id="@+id/loading"
+ style="@android:style/Widget.Holo.ProgressBar.Large"
android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:background="@null"
+ android:indeterminate="true"
+ android:indeterminateOnly="true" />
+
+ <RelativeLayout
+ android:id="@+id/imageContainer"
+ android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_weight="1">
+ android:layout_weight="1"
+ android:orientation="horizontal" >
- <ProgressBar
- android:id="@+id/loading"
- style="@android:style/Widget.Holo.ProgressBar.Large"
- android:layout_width="wrap_content"
+ <FrameLayout
+ android:id="@+id/editorContainer"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:indeterminate="true"
- android:indeterminateOnly="true"
- android:background="@null"/>
-
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
android:layout_weight="1"
- android:orientation="vertical"
- >
-
- <LinearLayout
- android:layout_weight="1"
- android:layout_width="wrap_content"
- android:layout_height="0dp"
- android:orientation="horizontal">
-
- <FrameLayout
- android:id="@+id/central_panel_container"
- android:layout_gravity="center"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:visibility="gone"/>
-
- <FrameLayout
- android:id="@+id/editorContainer"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"/>
-
- <com.android.gallery3d.filtershow.imageshow.ImageShow
- android:id="@+id/imageShow"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"/>
+ android:visibility="gone" />
- </LinearLayout>
-
- <FrameLayout
- android:id="@+id/state_panel_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:visibility="visible"/>
-
- </LinearLayout>
+ <com.android.gallery3d.filtershow.imageshow.ImageShow
+ android:id="@+id/imageShow"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1" />
- </FrameLayout>
+ <ImageButton
+ android:id="@+id/imgComparison"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_marginRight="16dp"
+ android:layout_marginTop="100dp"
+ android:background="@android:color/transparent"
+ android:src="@drawable/comparison_before"
+ android:visibility="visible" />
+ </RelativeLayout>
- <LinearLayout
+ <LinearLayout
android:id="@+id/mainPanel"
- android:layout_width="350dip"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:animateLayoutChanges="true">
+ android:layout_width="match_parent"
+ android:layout_height="80dp"
+ android:layout_gravity="center|bottom"
+ android:animateLayoutChanges="true"
+ android:orientation="vertical" >
- <FrameLayout
+ <FrameLayout
android:id="@+id/main_panel_container"
- android:layout_width="350dip"
+ android:layout_width="match_parent"
android:layout_height="0dip"
- android:layout_weight="1"/>
-
- </LinearLayout>
-
+ android:layout_gravity="center"
+ android:layout_weight="1" />
+ </LinearLayout>
+ </FrameLayout>
</LinearLayout>
<com.android.gallery3d.filtershow.category.CategorySelected
- android:layout_width="@dimen/category_panel_icon_size"
- android:layout_height="@dimen/category_panel_icon_size"
- android:id="@+id/categorySelectedIndicator"
- android:visibility="invisible"/>
+ android:id="@+id/categorySelectedIndicator"
+ android:layout_width="@dimen/category_panel_icon_size"
+ android:layout_height="@dimen/category_panel_icon_size"
+ android:visibility="gone" />
-</FrameLayout>
+</FrameLayout> \ No newline at end of file
diff --git a/res/layout-land/filtershow_category_panel_new.xml b/res/layout-land/filtershow_category_panel_new.xml
index ad85f7174..26b92e769 100644
--- a/res/layout-land/filtershow_category_panel_new.xml
+++ b/res/layout-land/filtershow_category_panel_new.xml
@@ -16,24 +16,48 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
+ xmlns:custom="http://schemas.android.com/apk/res/com.android.gallery3d"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@color/edit_actionbar_background"
+ android:orientation="horizontal" >
- <com.android.gallery3d.filtershow.category.IconView
- android:id="@+id/addButton"
- android:layout_width="match_parent"
- android:layout_height="@dimen/category_panel_height"
- android:src="@drawable/filtershow_add"/>
+ <!-- <com.android.gallery3d.filtershow.category.IconView -->
+ <!-- android:id="@+id/addButton" -->
+ <!-- android:layout_width="match_parent" -->
+ <!-- android:layout_height="@dimen/category_panel_height" -->
+ <!-- android:src="@drawable/filtershow_add"/> -->
+
+
+ <!-- <ListView -->
+ <!-- android:id="@+id/listItems" -->
+ <!-- android:orientation="vertical" -->
+ <!-- android:layout_width="match_parent" -->
+ <!-- android:layout_height="@dimen/category_panel_height" -->
+ <!-- android:layout_margin="8dip" -->
+ <!-- android:divider="@android:color/transparent" -->
+ <!-- android:dividerHeight="8dip" -->
+ <!-- android:layout_weight="1"/> -->
- <ListView
+ <HorizontalScrollView
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:scrollbars="none" >
+
+ <com.android.gallery3d.filtershow.category.CategoryTrack
android:id="@+id/listItems"
- android:orientation="vertical"
android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_margin="8dip"
+ android:layout_height="@dimen/category_panel_height"
android:divider="@android:color/transparent"
- android:dividerHeight="8dip"
- android:layout_weight="1"/>
+ android:dividerPadding="8dip"
+ custom:iconSize="@dimen/category_panel_icon_size" />
+ </HorizontalScrollView>
+
+ <com.android.gallery3d.filtershow.category.IconView
+ android:id="@+id/addButton"
+ android:layout_width="@dimen/category_panel_height"
+ android:layout_height="@dimen/category_panel_height"
+ android:src="@drawable/filtershow_add" />
</LinearLayout> \ No newline at end of file
diff --git a/res/layout-land/filtershow_editor_panel.xml b/res/layout-land/filtershow_editor_panel.xml
index f51dc14d0..59885e0f0 100644
--- a/res/layout-land/filtershow_editor_panel.xml
+++ b/res/layout-land/filtershow_editor_panel.xml
@@ -16,124 +16,97 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/top"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:visibility="visible">
-
- <RelativeLayout
+ android:id="@+id/top"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:visibility="visible" >
+
+ <!-- <RelativeLayout -->
+ <!-- android:layout_width="match_parent" -->
+ <!-- android:layout_height="match_parent" > -->
+
+ <Button
+ android:id="@+id/toggle_state"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_alignParentTop="true"
+ android:background="@color/background_main_toolbar"
+ android:text="@string/imageState"
+ android:visibility="gone" />
+
+ <!-- <LinearLayout -->
+ <!-- android:id="@+id/applyBar" -->
+ <!-- android:layout_width="match_parent" -->
+ <!-- android:layout_height="48dip" -->
+ <!-- android:layout_above="@id/bottomControlLineBottom" -->
+ <!-- android:background="@color/background_main_toolbar" -->
+ <!-- android:baselineAligned="false" -->
+ <!-- android:orientation="horizontal" -->
+ <!-- android:visibility="visible" > -->
+
+
+ <!-- <ImageButton -->
+ <!-- android:id="@+id/cancelFilter" -->
+ <!-- android:layout_width="wrap_content" -->
+ <!-- android:layout_height="fill_parent" -->
+ <!-- android:layout_gravity="left|center_vertical" -->
+ <!-- android:layout_weight=".1" -->
+ <!-- android:background="@android:color/transparent" -->
+ <!-- android:gravity="center" -->
+ <!-- android:src="@drawable/ic_menu_cancel_holo_light" -->
+ <!-- android:textSize="18dip" /> -->
+
+
+ <!-- <LinearLayout -->
+ <!-- android:id="@+id/panelAccessoryViewList" -->
+ <!-- android:layout_width="wrap_content" -->
+ <!-- android:layout_height="match_parent" -->
+ <!-- android:layout_weight="1" -->
+ <!-- android:orientation="horizontal" -->
+ <!-- android:visibility="visible" > -->
+
+
+ <!-- <com.android.gallery3d.filtershow.editors.SwapButton -->
+ <!-- android:id="@+id/applyEffect" -->
+ <!-- android:layout_width="fill_parent" -->
+ <!-- android:layout_height="fill_parent" -->
+ <!-- android:layout_gravity="center" -->
+ <!-- android:background="@android:color/transparent" -->
+ <!-- android:drawableEnd="@drawable/filtershow_menu_marker_rtl" -->
+ <!-- android:text="@string/apply_effect" -->
+ <!-- android:textSize="18dip" /> -->
+ <!-- </LinearLayout> -->
+
+
+ <!-- <ImageButton -->
+ <!-- android:id="@+id/applyFilter" -->
+ <!-- android:layout_width="wrap_content" -->
+ <!-- android:layout_height="fill_parent" -->
+ <!-- android:layout_gravity="right|center_vertical" -->
+ <!-- android:layout_weight=".1" -->
+ <!-- android:background="@android:color/transparent" -->
+ <!-- android:gravity="center" -->
+ <!-- android:src="@drawable/ic_menu_done_holo_light" -->
+ <!-- android:textSize="18dip" /> -->
+ <!-- </LinearLayout> -->
+
+ <LinearLayout
+ android:id="@+id/controlArea"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="bottom"
+ android:orientation="horizontal"
+ android:visibility="visible" >
+
+ <SeekBar
+ android:id="@+id/primarySeekBar"
+ style="@style/FilterShowSlider"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- >
-
- <Button
- android:id="@+id/toggle_state"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/imageState"
- android:background="@color/background_main_toolbar"
- android:layout_alignParentTop="true"
- />
-
- <View
- android:id="@+id/bottomControlLineBottom"
- android:background="@color/toolbar_separation_line"
- android:layout_height="1dip"
- android:layout_width="match_parent"
- android:layout_alignParentBottom="true"
- />
- <LinearLayout
- android:id="@+id/applyBar"
- android:layout_width="match_parent"
- android:layout_height="48dip"
- android:background="@color/background_main_toolbar"
- android:orientation="horizontal"
- android:baselineAligned="false"
- android:visibility="visible"
- android:layout_above="@id/bottomControlLineBottom"
- >
-
- <ImageButton
- android:id="@+id/cancelFilter"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:layout_gravity="left|center_vertical"
- android:background="@android:color/transparent"
- android:layout_weight=".1"
- android:gravity="center"
- android:src="@drawable/ic_menu_cancel_holo_light"
- android:textSize="18dip"/>
-
- <ImageView
- android:layout_width="2dp"
- android:layout_height="fill_parent"
- android:src="@drawable/filtershow_vertical_bar"/>
-
- <LinearLayout
- android:id="@+id/panelAccessoryViewList"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:orientation="horizontal"
- android:visibility="visible">
-
- <com.android.gallery3d.filtershow.editors.SwapButton
- android:id="@+id/applyEffect"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_gravity="center"
- android:background="@android:color/transparent"
- android:text="@string/apply_effect"
- android:textSize="18dip"
- android:drawableEnd="@drawable/filtershow_menu_marker_rtl"
- android:textAllCaps="true"/>
-
- </LinearLayout>
-
- <ImageView
- android:layout_width="2dp"
- android:layout_height="fill_parent"
- android:src="@drawable/filtershow_vertical_bar"/>
-
- <ImageButton
- android:id="@+id/applyFilter"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:layout_gravity="right|center_vertical"
- android:layout_weight=".1"
- android:background="@android:color/transparent"
- android:gravity="center"
- android:src="@drawable/ic_menu_done_holo_light"
- android:textSize="18dip"/>
- </LinearLayout>
- <View
- android:id="@+id/bottomControlLineTop"
- android:background="@color/toolbar_separation_line"
- android:layout_height="1dip"
- android:layout_width="match_parent"
- android:layout_above="@id/applyBar"
- />
-
- <LinearLayout
- android:id="@+id/controlArea"
- android:layout_width="match_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical"
- android:layout_above="@id/bottomControlLineTop"
- android:layout_below="@id/toggle_state"
- android:gravity="bottom"
- android:visibility="visible">
-
- <SeekBar
- android:id="@+id/primarySeekBar"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- style="@style/FilterShowSlider"
- android:visibility="gone"/>
-
- </LinearLayout>
-
- </RelativeLayout>
-</LinearLayout>
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:visibility="gone" />
+ </LinearLayout>
+ <!-- </RelativeLayout> -->
+
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout-land/filtershow_grad_ui.xml b/res/layout-land/filtershow_grad_ui.xml
index 71aa22ac5..7cc874c60 100644
--- a/res/layout-land/filtershow_grad_ui.xml
+++ b/res/layout-land/filtershow_grad_ui.xml
@@ -118,7 +118,7 @@
android:scaleType="centerInside"
android:layout_weight="0"
android:background="@drawable/filtershow_button_background"
- android:src="@drawable/filtershow_addpoint"
+ android:src="@drawable/addspot"
android:paddingBottom="8dp"
android:layout_marginStart="48dp" />
@@ -136,7 +136,7 @@
android:scaleType="centerInside"
android:layout_weight="0"
android:background="@drawable/filtershow_button_background"
- android:src="@drawable/ic_menu_trash_holo_light"
+ android:src="@drawable/delete"
android:paddingBottom="8dp"
android:layout_marginEnd="48dp" />
diff --git a/res/layout-land/filtershow_main_panel.xml b/res/layout-land/filtershow_main_panel.xml
index 2202f102c..2d20df12e 100644
--- a/res/layout-land/filtershow_main_panel.xml
+++ b/res/layout-land/filtershow_main_panel.xml
@@ -16,100 +16,165 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:baselineAligned="false"
- android:orientation="vertical"
- android:animateLayoutChanges="true"
- android:visibility="visible" >
-
- <FrameLayout android:id="@+id/category_panel_container"
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_weight="1"/>
-
- <View
- android:background="@color/toolbar_separation_line"
- android:layout_height="1dip"
- android:layout_width="match_parent"/>
+ android:layout_width="match_parent"
+ android:layout_height="80dp"
+ android:animateLayoutChanges="true"
+ android:baselineAligned="false"
+ android:orientation="vertical"
+ android:visibility="visible" >
+
<com.android.gallery3d.filtershow.CenteredLinearLayout
- xmlns:custom="http://schemas.android.com/apk/res/com.android.gallery3d"
+ xmlns:custom="http://schemas.android.com/apk/res/com.android.gallery3d"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_gravity="center|bottom"
+ android:orientation="vertical"
+ android:background="@color/edit_actionbar_background"
+ custom:max_width="400dip" >
+
+ <FrameLayout
+ android:id="@+id/category_panel_container"
android:layout_width="match_parent"
- android:layout_height="48dip"
- android:layout_gravity="center|bottom"
- custom:max_width="400dip"
- android:orientation="vertical">
+ android:layout_height="0dip"
+ android:layout_weight="1"
+ android:visibility="gone" />
- <LinearLayout android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:background="@color/background_main_toolbar">
+ <LinearLayout
+ android:id="@+id/effectsContainer"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingTop="10dp" >
<ImageButton
- android:id="@+id/fxButton"
- android:layout_width="@dimen/thumbnail_size"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:background="@drawable/filtershow_button_background"
- android:scaleType="centerInside"
- android:src="@drawable/ic_photoeditor_effects"/>
+ android:id="@+id/fxButton"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:background="@android:color/transparent"
+ android:scaleType="centerInside"
+ android:src="@drawable/color" />
<ImageButton
- android:id="@+id/borderButton"
- android:layout_width="@dimen/thumbnail_size"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:background="@drawable/filtershow_button_background"
- android:padding="2dip"
- android:scaleType="centerInside"
- android:src="@drawable/ic_photoeditor_border"/>
+ android:id="@+id/borderButton"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:background="@android:color/transparent"
+ android:padding="2dip"
+ android:scaleType="centerInside"
+ android:src="@drawable/frames" />
<ImageButton
- android:id="@+id/geometryButton"
- android:layout_width="@dimen/thumbnail_size"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:background="@drawable/filtershow_button_background"
- android:padding="2dip"
- android:scaleType="centerInside"
- android:src="@drawable/ic_photoeditor_fix"/>
+ android:id="@+id/geometryButton"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:background="@android:color/transparent"
+ android:padding="2dip"
+ android:scaleType="centerInside"
+ android:src="@drawable/crop" />
<ImageButton
- android:id="@+id/colorsButton"
- android:layout_width="@dimen/thumbnail_size"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:background="@drawable/filtershow_button_background"
- android:padding="2dip"
- android:scaleType="centerInside"
- android:src="@drawable/ic_photoeditor_color"/>
+ android:id="@+id/colorsButton"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:background="@android:color/transparent"
+ android:padding="2dip"
+ android:scaleType="centerInside"
+ android:src="@drawable/exposure" />
+
<ImageButton
- android:id="@+id/makeupButton"
- android:layout_width="@dimen/thumbnail_size"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:background="@drawable/filtershow_button_background"
- android:padding="2dip"
- android:scaleType="centerInside"
- android:visibility="gone"
- android:src="@drawable/ic_photoeditor_makeup"/>
+ android:id="@+id/makeupButton"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:background="@android:color/transparent"
+ android:padding="2dip"
+ android:scaleType="centerInside"
+ android:src="@drawable/beautify"
+ android:visibility="gone" />
<ImageButton
android:id="@+id/dualCamButton"
android:layout_width="@dimen/thumbnail_size"
android:layout_height="match_parent"
android:layout_weight="1"
- android:background="@drawable/filtershow_button_background"
+ android:background="@android:color/transparent"
android:padding="2dip"
android:scaleType="centerInside"
- android:src="@drawable/ic_photoeditor_dualcam"/>
-
+ android:src="@drawable/dualcamera"/>
</LinearLayout>
+ <LinearLayout
+ android:id="@+id/effectsText"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:paddingTop="5dp" >
+
+ <TextView
+ android:id="@+id/tvColor"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:text="@string/color"
+ android:textColor="#ffffff"
+ android:gravity="center"
+ android:textSize="@dimen/edit_main_font" />
+
+ <TextView
+ android:id="@+id/tvFrames"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:text="@string/frames"
+ android:textColor="#ffffff"
+ android:gravity="center"
+ android:textSize="@dimen/edit_main_font" />
+
+ <TextView
+ android:id="@+id/tvCrop"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:paddingLeft="12dp"
+ android:text="@string/crop"
+ android:textColor="#ffffff"
+ android:gravity="center"
+ android:textSize="@dimen/edit_main_font" />
+
+ <TextView
+ android:id="@+id/tvExposure"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:text="@string/exposure"
+ android:textColor="#ffffff"
+ android:gravity="center"
+ android:textSize="@dimen/edit_main_font" />
+
+ <TextView
+ android:id="@+id/tvBeautify"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:text="@string/beautify"
+ android:textColor="#ffffff"
+ android:gravity="center"
+ android:textSize="@dimen/edit_main_font"
+ android:visibility="gone" />
+
+ <TextView
+ android:id="@+id/tvDualCam"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:text="@string/dualcam"
+ android:gravity="center"
+ android:textColor="#ffffff"
+ android:textSize="@dimen/edit_main_font"
+ android:visibility="gone" />
+ </LinearLayout>
</com.android.gallery3d.filtershow.CenteredLinearLayout>
- <View
- android:background="@color/toolbar_separation_line"
- android:layout_height="1dip"
- android:layout_width="match_parent"/>
-
</LinearLayout> \ No newline at end of file
diff --git a/res/layout/action_mode.xml b/res/layout/action_mode.xml
index c3a5a774a..a8f5fc2e7 100644
--- a/res/layout/action_mode.xml
+++ b/res/layout/action_mode.xml
@@ -32,7 +32,8 @@
style="?android:attr/actionButtonStyle"
android:divider="?android:attr/listDividerAlertDialog"
android:textAppearance="?android:attr/textAppearanceLargePopupMenu"
- android:textColor="?android:attr/actionMenuTextColor"
+ android:textColor="#8A000000"
+ android:textSize="20sp"
android:singleLine="true"
android:gravity="left|center_vertical"
android:paddingEnd="25dip"
diff --git a/res/layout/details.xml b/res/layout/details.xml
index 1fea0a0fb..0c3622bcf 100644
--- a/res/layout/details.xml
+++ b/res/layout/details.xml
@@ -18,6 +18,7 @@
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textSize="16sp"
+ android:textColor="@color/albumset_label_background"
android:gravity="start"
/>
diff --git a/res/layout/details_list.xml b/res/layout/details_list.xml
index b80ab6ca8..aa5842c7b 100644
--- a/res/layout/details_list.xml
+++ b/res/layout/details_list.xml
@@ -17,6 +17,9 @@
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:padding="16dp"
+ android:paddingTop="20dp"
+ android:paddingBottom="16dp"
+ android:paddingLeft="24dp"
+ android:paddingRight="24dp"
android:dividerHeight="8dp"
/>
diff --git a/res/layout/drawer_list_item.xml b/res/layout/drawer_list_item.xml
new file mode 100644
index 000000000..aee19831e
--- /dev/null
+++ b/res/layout/drawer_list_item.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="48dp"
+ android:paddingTop="10dp"
+ android:paddingBottom="10dp">
+
+ <ImageView
+ android:id="@+id/ivItem"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentStart="true"
+ android:layout_marginStart="16dp"
+ />
+
+ <TextView
+ android:id="@+id/itemTitle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textSize="12sp"
+ android:layout_centerVertical="true"
+ android:fontFamily="sans-serif-medium"
+ android:textColor="#000000"
+ android:alpha="0.87"
+ android:layout_marginStart="64dp"
+ />
+</RelativeLayout>
diff --git a/res/layout/filtershow_actionbar.xml b/res/layout/filtershow_actionbar.xml
index 2b77dfcd1..f31587c37 100644
--- a/res/layout/filtershow_actionbar.xml
+++ b/res/layout/filtershow_actionbar.xml
@@ -14,14 +14,20 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:background="@drawable/filtershow_button_background"
- android:id="@+id/filtershow_done"
- android:textAllCaps="true"
- android:text="@string/save"
- android:gravity="center_vertical"
- android:textSize="14sp"
- android:drawableStart="@drawable/menu_save_photo"
- android:drawablePadding="8dip" /> \ No newline at end of file
+ android:layout_height="@dimen/toolbar_height" >
+
+ <TextView
+ android:id="@+id/filtershow_done"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:drawablePadding="24dp"
+ android:drawableStart="@drawable/done"
+ android:gravity="center_vertical"
+ android:paddingBottom="20dp"
+ android:text="@string/save"
+ android:textColor="#ffffff"
+ android:textSize="20sp" />
+
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout/filtershow_actionbar_new.xml b/res/layout/filtershow_actionbar_new.xml
new file mode 100644
index 000000000..1e56b8d57
--- /dev/null
+++ b/res/layout/filtershow_actionbar_new.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/toolbar_height"
+ android:paddingTop="15dp">
+
+ <ImageButton
+ android:id="@+id/imgCancel"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentLeft="true"
+ android:background="@android:color/transparent"
+ android:src="@drawable/cancel"
+ android:paddingLeft="16dp"/>
+
+ <ImageButton
+ android:id="@+id/imgDone"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:background="@android:color/transparent"
+ android:src="@drawable/done"
+ android:paddingRight="16dp" />
+
+</RelativeLayout> \ No newline at end of file
diff --git a/res/layout/filtershow_activity.xml b/res/layout/filtershow_activity.xml
index 79c315b7b..1340bc40d 100644
--- a/res/layout/filtershow_activity.xml
+++ b/res/layout/filtershow_activity.xml
@@ -16,85 +16,86 @@
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:id="@+id/mainView"
- android:background="@drawable/filtershow_tiled_background">
+ android:id="@+id/mainView"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="#212121" >
<LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical" >
<FrameLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1">
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1" >
<ProgressBar
- android:id="@+id/loading"
- style="@android:style/Widget.Holo.ProgressBar.Large"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:indeterminate="true"
- android:indeterminateOnly="true"
- android:background="@null"/>
-
- <LinearLayout
- android:layout_weight="1"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
+ android:id="@+id/loading"
+ style="@android:style/Widget.Holo.ProgressBar.Large"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:background="@null"
+ android:indeterminate="true"
+ android:indeterminateOnly="true" />
- <FrameLayout
- android:id="@+id/central_panel_container"
- android:layout_gravity="center"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:visibility="gone"/>
+ <RelativeLayout
+ android:id="@+id/imageContainer"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:orientation="horizontal" >
<FrameLayout
- android:id="@+id/editorContainer"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"/>
+ android:id="@+id/editorContainer"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:visibility="gone" />
<com.android.gallery3d.filtershow.imageshow.ImageShow
- android:id="@+id/imageShow"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"/>
-
-
- </LinearLayout>
-
- </FrameLayout>
+ android:id="@+id/imageShow"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_weight="1" />
- <com.android.gallery3d.filtershow.CenteredLinearLayout
+ <ImageButton
+ android:id="@+id/imgComparison"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_marginRight="10dp"
+ android:layout_marginTop="104dp"
+ android:background="@android:color/transparent"
+ android:src="@drawable/comparison_before"
+ android:visibility="visible" />
+ </RelativeLayout>
+
+ <com.android.gallery3d.filtershow.CenteredLinearLayout
xmlns:custom="http://schemas.android.com/apk/res/com.android.gallery3d"
android:id="@+id/mainPanel"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
+ android:layout_height="80dp"
android:layout_gravity="center|bottom"
- custom:max_width="650dip"
- android:orientation="vertical" >
-
- <FrameLayout android:id="@+id/main_panel_container"
- android:layout_gravity="center"
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_weight="1" />
-
- </com.android.gallery3d.filtershow.CenteredLinearLayout>
+ android:orientation="vertical"
+ custom:max_width="650dip" >
+ <FrameLayout
+ android:id="@+id/main_panel_container"
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ android:layout_gravity="center"
+ android:layout_weight="1" />
+ </com.android.gallery3d.filtershow.CenteredLinearLayout>
+ </FrameLayout>
</LinearLayout>
<com.android.gallery3d.filtershow.category.CategorySelected
- android:layout_width="@dimen/category_panel_icon_size"
- android:layout_height="@dimen/category_panel_icon_size"
- android:id="@+id/categorySelectedIndicator"
- android:visibility="invisible"/>
+ android:id="@+id/categorySelectedIndicator"
+ android:layout_width="@dimen/category_panel_icon_size"
+ android:layout_height="@dimen/category_panel_icon_size"
+ android:visibility="gone" />
-</FrameLayout>
+</FrameLayout> \ No newline at end of file
diff --git a/res/layout/filtershow_category_panel.xml b/res/layout/filtershow_category_panel.xml
index c1b8bbe35..74ead6376 100644
--- a/res/layout/filtershow_category_panel.xml
+++ b/res/layout/filtershow_category_panel.xml
@@ -17,8 +17,8 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="48dip"
- android:background="@color/background_main_toolbar" >
+ android:layout_height="80dp"
+ android:background="@color/edit_actionbar_background" >
<ImageButton
android:id="@+id/fxButton"
diff --git a/res/layout/filtershow_category_panel_new.xml b/res/layout/filtershow_category_panel_new.xml
index 8073f68a4..51439f011 100644
--- a/res/layout/filtershow_category_panel_new.xml
+++ b/res/layout/filtershow_category_panel_new.xml
@@ -20,7 +20,7 @@
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="@color/filtershow_categoryview_background">
+ android:background="@color/edit_actionbar_background">
<HorizontalScrollView
android:layout_width="0dp"
diff --git a/res/layout/filtershow_color_picker.xml b/res/layout/filtershow_color_picker.xml
index 7b05765fc..482c4636f 100644
--- a/res/layout/filtershow_color_picker.xml
+++ b/res/layout/filtershow_color_picker.xml
@@ -17,14 +17,14 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@color/background_main_toolbar">
+ android:background="@color/albumset_background">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:id="@+id/RelativeLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@color/background_main_toolbar">
+ android:background="@color/albumset_background">
<com.android.gallery3d.filtershow.colorpicker.ColorCompareView
android:id="@+id/btnSelect"
@@ -66,7 +66,7 @@
android:background="@android:color/transparent"
android:layout_weight=".1"
android:gravity="center"
- android:src="@drawable/ic_menu_cancel_holo_light"
+ android:src="@drawable/cancel2"
android:textSize="18dip"/>
<ImageView
@@ -81,7 +81,7 @@
android:layout_weight=".1"
android:background="@android:color/transparent"
android:gravity="center"
- android:src="@drawable/ic_menu_done_holo_light"
+ android:src="@drawable/done2"
android:textSize="18dip"/>
</LinearLayout>
</LinearLayout>
diff --git a/res/layout/filtershow_control_action_slider.xml b/res/layout/filtershow_control_action_slider.xml
index 34eac1e69..01d5e126e 100644
--- a/res/layout/filtershow_control_action_slider.xml
+++ b/res/layout/filtershow_control_action_slider.xml
@@ -19,7 +19,8 @@
xmlns:app="http://schemas.android.com/apk/res/com.example.imagefilterharness"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:orientation="horizontal" >
+ android:orientation="horizontal"
+ android:gravity="center" >
<ImageButton
android:id="@+id/leftActionButton"
@@ -29,8 +30,9 @@
android:scaleType="centerInside"
android:layout_weight="0"
android:background="@drawable/filtershow_button_background"
- android:src="@drawable/filtershow_addpoint"
- android:paddingBottom="8dp" />
+ android:src="@drawable/addspot"
+ android:paddingBottom="8dp"
+ android:paddingStart="14dp" />
<SeekBar
android:id="@+id/controlValueSeekBar"
@@ -48,8 +50,9 @@
android:scaleType="centerInside"
android:layout_weight="0"
android:background="@drawable/filtershow_button_background"
- android:src="@drawable/ic_menu_trash_holo_light"
- android:paddingBottom="8dp" />
+ android:src="@drawable/delete"
+ android:paddingBottom="8dp"
+ android:paddingEnd="14dp" />
</LinearLayout>
diff --git a/res/layout/filtershow_control_color_chooser.xml b/res/layout/filtershow_control_color_chooser.xml
index 145041cf0..18ac83d10 100644
--- a/res/layout/filtershow_control_color_chooser.xml
+++ b/res/layout/filtershow_control_color_chooser.xml
@@ -19,68 +19,64 @@
xmlns:app="http://schemas.android.com/apk/res/com.example.imagefilterharness"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical|center_horizontal"
android:orientation="horizontal" >
+
<LinearLayout
- android:id="@+id/listColors"
- android:layout_weight="5"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
+ android:id="@+id/listColors"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="16dp"
+ android:orientation="horizontal" >
<Button
- android:id="@+id/draw_color_button01"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:background="@drawable/filtershow_color_picker_circle"
- android:layout_marginEnd="4dp"/>
+ android:id="@+id/draw_color_button01"
+ android:layout_width="@dimen/color_button_width"
+ android:layout_height="@dimen/color_button_height"
+ android:layout_marginEnd="22dp"
+ android:background="@drawable/filtershow_color_picker_circle" />
<Button
- android:id="@+id/draw_color_button02"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:background="@drawable/filtershow_color_picker_circle"
- android:layout_marginEnd="4dp"/>
+ android:id="@+id/draw_color_button02"
+ android:layout_width="@dimen/color_button_width"
+ android:layout_height="@dimen/color_button_height"
+ android:layout_marginEnd="22dp"
+ android:background="@drawable/filtershow_color_picker_circle" />
<Button
- android:id="@+id/draw_color_button03"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:background="@drawable/filtershow_color_picker_circle"
- android:layout_marginEnd="4dp"/>
+ android:id="@+id/draw_color_button03"
+ android:layout_width="@dimen/color_button_width"
+ android:layout_height="@dimen/color_button_height"
+ android:layout_marginEnd="22dp"
+ android:background="@drawable/filtershow_color_picker_circle" />
<Button
- android:id="@+id/draw_color_button04"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:background="@drawable/filtershow_color_picker_circle"
- android:layout_marginEnd="4dp"/>
+ android:id="@+id/draw_color_button04"
+ android:layout_width="@dimen/color_button_width"
+ android:layout_height="@dimen/color_button_height"
+ android:layout_marginEnd="22dp"
+ android:background="@drawable/filtershow_color_picker_circle" />
<Button
- android:id="@+id/draw_color_button05"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:background="@drawable/filtershow_color_picker_circle"
- android:layout_marginEnd="4dp"/>
-
+ android:id="@+id/draw_color_button05"
+ android:layout_width="@dimen/color_button_width"
+ android:layout_height="@dimen/color_button_height"
+ android:layout_marginEnd="22dp"
+ android:background="@drawable/filtershow_color_picker_circle" />
</LinearLayout>
<FrameLayout
- android:background="@color/background_main_toolbar"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center">
- <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_marginRight="16dp" >
+
+ <Button
android:id="@+id/draw_color_popupbutton"
android:layout_width="wrap_content"
- android:layout_gravity="center"
android:layout_height="wrap_content"
- android:background="@drawable/ic_action_overflow"
- />
+ android:layout_gravity="center"
+ android:background="@drawable/more2" />
</FrameLayout>
-</LinearLayout>
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout/filtershow_editor_panel.xml b/res/layout/filtershow_editor_panel.xml
index 995399618..8fc01ecae 100644
--- a/res/layout/filtershow_editor_panel.xml
+++ b/res/layout/filtershow_editor_panel.xml
@@ -18,105 +18,56 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/top"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
+ android:layout_height="match_parent"
android:orientation="vertical"
android:visibility="visible" >
- <View
- android:background="@color/toolbar_separation_line"
- android:layout_height="1dip"
- android:layout_width="match_parent"/>
+ <!-- <View -->
+ <!-- android:layout_width="match_parent" -->
+ <!-- android:layout_height="1dip" -->
+ <!-- android:background="@color/toolbar_separation_line" /> -->
<LinearLayout
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
+ android:layout_height="match_parent"
+ android:orientation="vertical" >
<LinearLayout
- android:id="@+id/controlArea"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:layout_alignParentBottom="true"
- android:visibility="visible">
+ android:id="@+id/controlArea"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_alignParentBottom="true"
+ android:background="#000000"
+ android:orientation="horizontal"
+ android:gravity="center"
+ android:visibility="visible" >
+
+<!-- <TextView -->
+<!-- android:id="@+id/tvFilterName" -->
+<!-- android:layout_width="@dimen/swap_button_width" -->
+<!-- android:layout_height="@dimen/swap_button_height" -->
+<!-- android:text="@string/apply_effect" -->
+<!-- android:layout_gravity="left" -->
+<!-- android:textColor="#ffffff" -->
+<!-- android:textSize="20sp" -->
+<!-- android:layout_weight="1"/> -->
<SeekBar
- android:id="@+id/primarySeekBar"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- style="@style/FilterShowSlider"/>
-
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="48dip"
- android:background="@color/background_main_toolbar"
- android:orientation="horizontal"
- android:baselineAligned="false"
- android:visibility="visible">
-
- <ImageButton
- android:id="@+id/cancelFilter"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:layout_gravity="left|center_vertical"
- android:background="@android:color/transparent"
- android:layout_weight=".1"
- android:gravity="center"
- android:src="@drawable/ic_menu_cancel_holo_light"
- android:textSize="18dip"/>
-
- <ImageView
- android:layout_width="2dp"
- android:layout_height="fill_parent"
- android:src="@drawable/filtershow_vertical_bar"/>
-
- <LinearLayout
- android:id="@+id/panelAccessoryViewList"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:orientation="horizontal"
- android:visibility="visible">
-
- <com.android.gallery3d.filtershow.editors.SwapButton
- android:id="@+id/applyEffect"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_gravity="center"
- android:background="@android:color/transparent"
- android:text="@string/apply_effect"
- android:textSize="18dip"
- android:drawableEnd="@drawable/filtershow_menu_marker_rtl"
- android:textAllCaps="true"
- />
-
- </LinearLayout>
-
- <ImageView
- android:layout_width="2dp"
- android:layout_height="fill_parent"
- android:src="@drawable/filtershow_vertical_bar"/>
-
- <ImageButton
- android:id="@+id/applyFilter"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:layout_gravity="right|center_vertical"
- android:layout_weight=".1"
- android:background="@android:color/transparent"
- android:gravity="center"
- android:src="@drawable/ic_menu_done_holo_light"
- android:textSize="18dip"/>
+ android:id="@+id/primarySeekBar"
+ style="@style/FilterShowSlider"
+ android:layout_width="@dimen/seekbar_width_filter"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical|center_horizontal"
+ android:layout_weight="1"
+ android:layout_marginLeft="54dp"
+ android:layout_marginRight="54dp" />
</LinearLayout>
- <FrameLayout android:id="@+id/state_panel_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:visibility="visible" />
-
+ <FrameLayout
+ android:id="@+id/state_panel_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:visibility="gone" />
</LinearLayout>
-</LinearLayout>
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout/filtershow_export_dialog.xml b/res/layout/filtershow_export_dialog.xml
index 00add15a5..3b41ddaa4 100644
--- a/res/layout/filtershow_export_dialog.xml
+++ b/res/layout/filtershow_export_dialog.xml
@@ -27,6 +27,9 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical"
android:layout_margin="7dp"
+ android:paddingStart="8dp"
+ android:textSize="16sp"
+ android:textColor="@color/albumset_label_background"
android:text="@string/select_output_settings"/>
<GridLayout
@@ -35,34 +38,43 @@
android:layout_height="wrap_content"
android:alignmentMode="alignBounds"
android:useDefaultMargins="true"
+ android:layout_marginTop="24dp"
android:columnOrderPreserved="false"
android:columnCount="5">
<TextView
android:text="@string/size"
android:layout_marginStart="8dp"
- android:layout_gravity="start|center_vertical"/>
+ android:layout_gravity="start|center_vertical"
+ android:paddingStart="8dp"
+ android:textSize="16sp"
+ android:textColor="@color/albumlist_label_title"/>
<EditText
android:id="@+id/editableWidth"
android:layout_gravity="right|center_vertical"
+ android:gravity="center"
android:layout_width="70dp"
android:inputType="number"/>
<TextView
android:text="@string/x"
- android:layout_gravity="center"/>
+ android:layout_gravity="center"
+ android:textColor="@color/albumlist_label_title"/>
<EditText
android:id="@+id/editableHeight"
android:layout_gravity="left|center_vertical"
android:layout_width="70dp"
+ android:gravity="center"
android:inputType="number"/>
<TextView
android:id="@+id/estimadedSize"
android:layout_marginEnd="8dp"
- android:layout_gravity="end|center_vertical"/>
+ android:layout_gravity="end|center_vertical"
+ android:textSize="16sp"
+ android:textColor="@color/albumlist_label_title"/>
<LinearLayout
android:layout_columnSpan="5"
@@ -73,7 +85,9 @@
android:text="@string/quality"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
- android:layout_margin="8dp" />
+ android:layout_margin="8dp"
+ android:textSize="16sp"
+ android:textColor="@color/albumlist_label_title" />
<SeekBar
android:id="@+id/qualitySeekBar"
@@ -92,7 +106,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
- android:layout_gravity="end|center_vertical" />
+ android:textSize="16sp"
+ android:textColor="@color/albumlist_label_title"
+ android:layout_gravity="end|center_vertical"
+ />
</LinearLayout>
@@ -103,23 +120,27 @@
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="48dp"
- style="?android:attr/buttonBarStyle">
+ style="?android:attr/buttonBarStyle"
+ android:gravity="right">
<Button
android:id="@+id/cancel"
- android:layout_width="0dp"
+ android:layout_width="wrap_content"
android:layout_height="match_parent"
- android:layout_weight="1"
android:text="@string/cancel"
- style="?android:attr/buttonBarButtonStyle" />
+ android:textSize="14sp"
+ android:layout_marginRight="8dp"
+ style="?android:attr/buttonBarButtonStyle"
+ android:textColor="#009688"/>
<Button
android:id="@+id/done"
- android:layout_width="0dp"
+ android:layout_width="wrap_content"
android:layout_height="match_parent"
- android:layout_weight="1"
+ android:textSize="14sp"
android:text="@string/done"
- style="?android:attr/buttonBarButtonStyle"/>
+ style="?android:attr/buttonBarButtonStyle"
+ android:textColor="#009688"/>
</LinearLayout>
diff --git a/res/layout/filtershow_info_panel.xml b/res/layout/filtershow_info_panel.xml
index 1ca64bd6d..552fef2e9 100644
--- a/res/layout/filtershow_info_panel.xml
+++ b/res/layout/filtershow_info_panel.xml
@@ -19,8 +19,8 @@
android:minWidth="340dp"
android:layout_height="match_parent"
android:orientation="vertical"
- android:background="@color/background_main_toolbar"
- android:padding="16dp">
+ android:background="@color/albumset_background"
+ android:padding="24dp">
<ScrollView
android:layout_width="match_parent"
@@ -35,29 +35,34 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
+ android:weightSum="1"
>
<TextView
android:id="@+id/imageName"
style="?android:textAppearanceSmall"
android:textStyle="bold"
- android:textColor="#80ffffff"
+ android:textSize="16sp"
+ android:textColor="@color/albumlist_label_title"
android:layout_gravity="start"
- android:layout_width="wrap_content"
+ android:layout_width="0dp"
android:layout_height="wrap_content"
- android:layout_weight="1"
- android:gravity="start"/>
+ android:gravity="start"
+ android:ellipsize="end"
+ android:layout_weight="0.65"
+ android:maxLines="1"/>
<TextView
android:id="@+id/imageSize"
style="?android:textAppearanceSmall"
android:textAllCaps="true"
- android:textColor="#80ffffff"
+ android:textSize="16sp"
+ android:textColor="@color/albumlist_label_title"
android:textStyle="bold"
android:layout_gravity="end"
+ android:layout_weight="0.35"
android:layout_width="0dp"
android:layout_height="wrap_content"
- android:layout_weight="1"
android:gravity="end"/>
</LinearLayout>
@@ -91,8 +96,9 @@
style="?android:textAppearanceLarge"
android:id="@+id/exifLabel"
android:textStyle="bold"
- android:textColor="#fff"
- android:layout_marginTop="16dp"
+ android:textSize="20sp"
+ android:textColor="@color/filtershow_info_text"
+ android:layout_marginTop="24dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
@@ -102,8 +108,11 @@
android:id="@+id/exifData"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginTop="16dp"
+ android:layout_marginTop="20dp"
+ android:textSize="16sp"
+ android:textColor="@color/albumlist_label_title"
android:layout_gravity="start"
+ android:layout_marginBottom="32dp"
/>
</LinearLayout>
</ScrollView>
diff --git a/res/layout/filtershow_main_panel.xml b/res/layout/filtershow_main_panel.xml
index 1dc4e9f3f..7a0ead87c 100644
--- a/res/layout/filtershow_main_panel.xml
+++ b/res/layout/filtershow_main_panel.xml
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ Not a Contribution
+
Copyright (C) 2013 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,107 +19,165 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:baselineAligned="false"
- android:orientation="vertical"
- android:animateLayoutChanges="false"
- android:visibility="visible"
- android:background="@color/background_main_toolbar" >
-
- <FrameLayout android:id="@+id/state_panel_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:visibility="visible"
- android:layout_gravity="top"
- android:layout_weight="1" />
-
- <FrameLayout android:id="@+id/category_panel_container"
- android:layout_width="match_parent"
- android:visibility="visible"
- android:layout_height="0dip"
- android:layout_gravity="center"
- android:layout_weight="1"/>
-
- <View
- android:background="@color/toolbar_separation_line"
- android:layout_height="1dip"
- android:layout_width="match_parent"/>
+ android:layout_width="match_parent"
+ android:layout_height="80dp"
+ android:animateLayoutChanges="false"
+ android:baselineAligned="false"
+ android:orientation="vertical"
+ android:visibility="visible" >
<com.android.gallery3d.filtershow.CenteredLinearLayout
- xmlns:custom="http://schemas.android.com/apk/res/com.android.gallery3d"
- android:id="@+id/bottom_panel"
+ xmlns:custom="http://schemas.android.com/apk/res/com.android.gallery3d"
+ android:id="@+id/bottom_panel"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_gravity="center|bottom"
+ android:background="@color/edit_actionbar_background"
+ android:orientation="vertical"
+ custom:max_width="400dip" >
+
+ <FrameLayout
+ android:id="@+id/category_panel_container"
android:layout_width="match_parent"
- android:layout_height="48dip"
- android:layout_gravity="center|bottom"
- custom:max_width="400dip"
- android:orientation="vertical">
-
- <LinearLayout android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:background="@color/background_main_toolbar">
+ android:layout_height="0dip"
+ android:layout_gravity="center"
+ android:layout_weight="1"
+ android:visibility="gone" />
- <ImageButton
- android:id="@+id/fxButton"
- android:layout_width="@dimen/thumbnail_size"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:background="@drawable/filtershow_button_background"
- android:scaleType="centerInside"
- android:src="@drawable/ic_photoeditor_effects"/>
+ <LinearLayout
+ android:id="@+id/effectsContainer"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingTop="10dp" >
<ImageButton
- android:id="@+id/borderButton"
- android:layout_width="@dimen/thumbnail_size"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:background="@drawable/filtershow_button_background"
- android:padding="2dip"
- android:scaleType="centerInside"
- android:src="@drawable/ic_photoeditor_border"/>
+ android:id="@+id/fxButton"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:background="@android:color/transparent"
+ android:scaleType="centerInside"
+ android:src="@drawable/color" />
<ImageButton
- android:id="@+id/geometryButton"
- android:layout_width="@dimen/thumbnail_size"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:background="@drawable/filtershow_button_background"
- android:padding="2dip"
- android:scaleType="centerInside"
- android:src="@drawable/ic_photoeditor_fix"/>
+ android:id="@+id/borderButton"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:background="@android:color/transparent"
+ android:padding="2dip"
+ android:scaleType="centerInside"
+ android:src="@drawable/frames" />
<ImageButton
- android:id="@+id/colorsButton"
- android:layout_width="@dimen/thumbnail_size"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:background="@drawable/filtershow_button_background"
- android:padding="2dip"
- android:scaleType="centerInside"
- android:src="@drawable/ic_photoeditor_color"/>
+ android:id="@+id/geometryButton"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:background="@android:color/transparent"
+ android:padding="2dip"
+ android:scaleType="centerInside"
+ android:src="@drawable/crop" />
<ImageButton
- android:id="@+id/makeupButton"
- android:layout_width="@dimen/thumbnail_size"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:padding="2dip"
- android:background="@drawable/filtershow_button_background"
- android:scaleType="centerInside"
- android:visibility="gone"
- android:src="@drawable/ic_photoeditor_makeup"/>
+ android:id="@+id/colorsButton"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:background="@android:color/transparent"
+ android:padding="2dip"
+ android:scaleType="centerInside"
+ android:src="@drawable/exposure" />
<ImageButton
+ android:id="@+id/makeupButton"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:background="@android:color/transparent"
+ android:padding="2dip"
+ android:scaleType="centerInside"
+ android:src="@drawable/beautify"
+ android:visibility="gone" />
+
+ <ImageButton
android:id="@+id/dualCamButton"
android:layout_width="@dimen/thumbnail_size"
- android:layout_height="match_parent"
+ android:layout_height="wrap_content"
android:layout_weight="1"
- android:background="@drawable/filtershow_button_background"
+ android:background="@android:color/transparent"
android:padding="2dip"
android:scaleType="centerInside"
- android:src="@drawable/ic_photoeditor_dualcam"/>
+ android:src="@drawable/dualcamera"/>
</LinearLayout>
+ <LinearLayout
+ android:id="@+id/effectsText"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:paddingTop="5dp" >
+
+ <TextView
+ android:id="@+id/tvColor"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:text="@string/color"
+ android:textColor="#ffffff"
+ android:gravity="center"
+ android:textSize="@dimen/edit_main_font" />
+
+ <TextView
+ android:id="@+id/tvFrames"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:text="@string/frames"
+ android:textColor="#ffffff"
+ android:gravity="center"
+ android:textSize="@dimen/edit_main_font" />
+
+ <TextView
+ android:id="@+id/tvCrop"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:text="@string/crop"
+ android:textColor="#ffffff"
+ android:gravity="center"
+ android:textSize="@dimen/edit_main_font" />
+
+ <TextView
+ android:id="@+id/tvExposure"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:text="@string/exposure"
+ android:gravity="center"
+ android:textColor="#ffffff"
+ android:textSize="@dimen/edit_main_font" />
+
+ <TextView
+ android:id="@+id/tvBeautify"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:text="@string/beautify"
+ android:textColor="#ffffff"
+ android:gravity="center"
+ android:textSize="@dimen/edit_main_font"
+ android:visibility="gone" />
+
+ <TextView
+ android:id="@+id/tvDualCam"
+ android:layout_width="@dimen/thumbnail_size"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:text="@string/dualcam"
+ android:gravity="center"
+ android:textColor="#ffffff"
+ android:textSize="@dimen/edit_main_font"
+ android:visibility="gone" />
+ </LinearLayout>
</com.android.gallery3d.filtershow.CenteredLinearLayout>
-
</LinearLayout>
diff --git a/res/layout/filtershow_seekbar.xml b/res/layout/filtershow_seekbar.xml
index 54a874d07..f4d5577d2 100644
--- a/res/layout/filtershow_seekbar.xml
+++ b/res/layout/filtershow_seekbar.xml
@@ -19,14 +19,52 @@
android:id="@+id/top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="vertical"
+ android:orientation="horizontal"
android:visibility="visible" >
+ <LinearLayout
+ android:id="@+id/basicFilterContainer"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical" >
+
+ <TextView
+ android:id="@+id/tvFilterValue"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentLeft="true"
+ android:layout_gravity="left|center_vertical"
+ android:paddingLeft="23dp"
+ android:paddingTop="20dp"
+ android:textColor="#ffffff"
+ android:textSize="20sp"
+ android:visibility="gone" />
+
+ <TextView
+ android:id="@+id/tvFilterName"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentLeft="true"
+ android:layout_below="@+id/tvFilterValue"
+ android:layout_gravity="center_vertical"
+ android:paddingLeft="12dp"
+ android:paddingTop="14dp"
+ android:text="@string/apply_effect"
+ android:textColor="#ffffff"
+ android:textSize="14sp"
+ android:visibility="gone" />
+ </LinearLayout>
+
<SeekBar
android:id="@+id/primarySeekBar"
+ style="@style/FilterShowSlider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- style="@style/FilterShowSlider"
+ android:layout_gravity="center_vertical|center_horizontal"
+ android:layout_marginRight="34dp"
+ android:layout_toRightOf="@+id/tvFilterName"
+ android:layout_weight="1"
+ android:paddingTop="20dp"
android:visibility="gone" />
</LinearLayout>
diff --git a/res/layout/filtershow_state_panel_new.xml b/res/layout/filtershow_state_panel_new.xml
index b19969567..4ea7c8ae7 100644
--- a/res/layout/filtershow_state_panel_new.xml
+++ b/res/layout/filtershow_state_panel_new.xml
@@ -5,7 +5,7 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="@color/background_main_toolbar">
+ android:background="@color/edit_actionbar_background">
<View
android:background="@color/toolbar_separation_line"
diff --git a/res/layout/gallery_main.xml b/res/layout/gallery_main.xml
new file mode 100644
index 000000000..8aa2c07eb
--- /dev/null
+++ b/res/layout/gallery_main.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/drawerLayout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
+
+ <!-- MAIN CONTENT -->
+
+ <RelativeLayout
+ android:id="@+id/gallery_root"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
+
+ <include layout="@layout/gl_root_group" />
+ </RelativeLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical" >
+
+ <include
+ android:id="@+id/toolbar"
+ layout="@layout/toolbar" />
+ </LinearLayout>
+
+ <RelativeLayout
+ android:id="@+id/drawerPane"
+ android:layout_width="270dp"
+ android:layout_height="match_parent"
+ android:layout_gravity="start"
+ android:background="#fafafa"
+ android:clickable="true" >
+
+ <!-- Header -->
+
+ <RelativeLayout
+ android:id="@+id/header"
+ android:layout_width="match_parent"
+ android:layout_height="150dp"
+ android:background="@drawable/drawer_bg" >
+
+ <TextView
+ android:id="@+id/appName"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:layout_marginBottom="16dp"
+ android:layout_marginStart="16dp"
+ android:fontFamily="sans-serif"
+ android:text="@string/navigation_drawer_title"
+ android:textColor="#ffffff"
+ android:textSize="24sp" />
+ </RelativeLayout>
+
+ <ListView
+ android:id="@+id/navList"
+ android:layout_width="270dp"
+ android:layout_height="match_parent"
+ android:layout_below="@id/header"
+ android:layout_marginTop="4dp"
+ android:divider="@android:color/transparent" />
+ </RelativeLayout>
+
+</android.support.v4.widget.DrawerLayout> \ No newline at end of file
diff --git a/res/layout/gl_root_group.xml b/res/layout/gl_root_group.xml
index 76ff33b73..de0f66afe 100644
--- a/res/layout/gl_root_group.xml
+++ b/res/layout/gl_root_group.xml
@@ -22,5 +22,6 @@
<View android:id="@+id/gl_root_cover"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@android:color/black"/>
+ android:background="#fafafa"
+ />
</merge>
diff --git a/res/layout/photopage_bottom_controls.xml b/res/layout/photopage_bottom_controls.xml
index 20b3c11cd..fc9882280 100644
--- a/res/layout/photopage_bottom_controls.xml
+++ b/res/layout/photopage_bottom_controls.xml
@@ -1,50 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/photopage_bottom_controls"
- android:padding="10dp"
- android:layout_width="match_parent"
+ android:id="@+id/photopage_bottom_controls"
+ android:layout_width="match_parent"
+ android:layout_height="56dp"
+ android:layout_alignParentBottom="true"
+ android:background="#42000000"
+ android:orientation="horizontal"
+ android:visibility="gone" >
+
+ <ImageButton
+ android:id="@+id/photopage_bottom_control_edit"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
- android:orientation="horizontal"
- android:visibility="gone">
- <ImageButton
- android:id="@+id/photopage_bottom_control_edit"
- android:src="@drawable/ic_menu_edit_holo_dark"
- android:background="@drawable/photopage_bottom_button_background"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentStart="true"
- android:layout_alignParentBottom="true"
- android:paddingTop="5dp"
- android:paddingBottom="5dp"
- android:paddingStart="15dp"
- android:paddingEnd="15dp"
- android:visibility="gone"/>
- <ImageButton
- android:id="@+id/photopage_bottom_control_panorama"
- android:src="@drawable/ic_view_photosphere"
- android:background="@drawable/transparent_button_background"
- android:layout_width="70dp"
- android:layout_height="70dp"
- android:layout_centerHorizontal="true"
- android:layout_alignParentBottom="true"
- android:paddingTop="5dp"
- android:paddingBottom="5dp"
- android:paddingStart="5dp"
- android:paddingEnd="5dp"
- android:visibility="gone"/>
- <ImageButton
- android:id="@+id/photopage_bottom_control_tiny_planet"
- android:src="@drawable/ic_menu_tiny_planet"
- android:background="@drawable/photopage_bottom_button_background"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentEnd="true"
- android:layout_alignParentBottom="true"
- android:paddingTop="5dp"
- android:paddingBottom="5dp"
- android:paddingStart="15dp"
- android:paddingEnd="15dp"
- android:visibility="gone"/>
+ android:layout_centerVertical="true"
+ android:background="@null"
+ android:paddingStart="20dp"
+ android:layout_marginBottom="20dp"
+ android:src="@drawable/edit"
+ android:visibility="gone" />
+
+ <ImageButton
+ android:id="@+id/photopage_bottom_control_share"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:layout_marginBottom="20dp"
+ android:layout_centerInParent="true"
+ android:layout_centerVertical="true"
+ android:background="@null"
+ android:src="@drawable/share"
+ android:visibility="gone" />
+
+ <ImageButton
+ android:id="@+id/photopage_bottom_control_delete"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentEnd="true"
+ android:layout_centerVertical="true"
+ android:layout_marginBottom="20dp"
+ android:background="@null"
+ android:paddingEnd="20dp"
+ android:src="@drawable/delete"
+ android:visibility="gone" />
+
</RelativeLayout>
diff --git a/res/layout/popup_list_item.xml b/res/layout/popup_list_item.xml
index 837da0a5d..f0bafc1e8 100644
--- a/res/layout/popup_list_item.xml
+++ b/res/layout/popup_list_item.xml
@@ -19,6 +19,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLargePopupMenu"
+ android:textSize="20sp"
+ android:textColor="#8A000000"
android:singleLine="true"
android:gravity="center_vertical"
android:paddingStart="16dp"
diff --git a/res/layout/toolbar.xml b/res/layout/toolbar.xml
new file mode 100644
index 000000000..0d1cea067
--- /dev/null
+++ b/res/layout/toolbar.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/toolbar_height"
+ android:paddingTop="30dp"
+ android:background="#e53935"
+ android:elevation="4dp"
+ android:theme="@style/ToolbarTheme"
+ android:popupTheme="@style/ToolbarPopUpTheme"
+ android:navigationIcon="@drawable/drawer" >
+
+</Toolbar> \ No newline at end of file
diff --git a/res/menu/album.xml b/res/menu/album.xml
index 4db0e5100..00fd3ff17 100644
--- a/res/menu/album.xml
+++ b/res/menu/album.xml
@@ -15,17 +15,24 @@
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/action_camera"
- android:icon="@drawable/ic_menu_camera_holo_light"
+ android:icon="@drawable/camera"
android:title="@string/switch_to_camera"
android:showAsAction="ifRoom" />
<item android:id="@+id/action_slideshow"
- android:icon="@drawable/ic_menu_slideshow_holo_light"
+ android:icon="@drawable/slideshow"
android:title="@string/slideshow"
- android:showAsAction="never" />
+ android:showAsAction="ifRoom" />
<item android:id="@+id/action_select"
android:title="@string/select_item"
android:showAsAction="never" />
- <item android:id="@+id/action_group_by"
- android:title="@string/group_by"
- android:showAsAction="never"/>
+<!-- <item android:id="@+id/action_group_by" -->
+<!-- android:title="@string/group_by" -->
+<!-- android:showAsAction="never"/> -->
+ <item android:id="@+id/action_view_type"
+ android:showAsAction="never"
+ />
+ <item android:id="@+id/action_sync_picasa_albums"
+ android:title="@string/sync_picasa_albums"
+ android:showAsAction="never"
+ android:visible="false" />
</menu>
diff --git a/res/menu/filtershow_activity_menu.xml b/res/menu/filtershow_activity_menu.xml
index bb0b094dd..9a16e03d4 100644
--- a/res/menu/filtershow_activity_menu.xml
+++ b/res/menu/filtershow_activity_menu.xml
@@ -6,16 +6,16 @@
android:enabled="false"
android:visible="false"
android:title="@string/share"/>
- <item
- android:id="@+id/undoButton"
- android:icon="@drawable/filtershow_button_undo"
- android:showAsAction="always"
- android:title="@string/filtershow_undo"/>
- <item
- android:id="@+id/redoButton"
- android:icon="@drawable/filtershow_button_redo"
- android:showAsAction="always"
- android:title="@string/filtershow_redo"/>
+<!-- <item -->
+<!-- android:id="@+id/undoButton" -->
+<!-- android:icon="@drawable/filtershow_button_undo" -->
+<!-- android:showAsAction="always" -->
+<!-- android:title="@string/filtershow_undo"/> -->
+<!-- <item -->
+<!-- android:id="@+id/redoButton" -->
+<!-- android:icon="@drawable/filtershow_button_redo" -->
+<!-- android:showAsAction="always" -->
+<!-- android:title="@string/filtershow_redo"/> -->
<item
android:id="@+id/resetHistoryButton"
android:title="@string/reset"/>
@@ -24,11 +24,11 @@
android:showAsAction="never"
android:visible="true"
android:title="@string/filtershow_show_info_panel" />
- <item
- android:id="@+id/showImageStateButton"
- android:showAsAction="never"
- android:visible="true"
- android:title="@string/show_imagestate_panel" />
+<!-- <item -->
+<!-- android:id="@+id/showImageStateButton" -->
+<!-- android:showAsAction="never" -->
+<!-- android:visible="true" -->
+<!-- android:title="@string/show_imagestate_panel" /> -->
<item
android:id="@+id/manageUserPresets"
android:showAsAction="never"
diff --git a/res/menu/operation.xml b/res/menu/operation.xml
index ffc5afa4a..b34cd6803 100644
--- a/res/menu/operation.xml
+++ b/res/menu/operation.xml
@@ -30,14 +30,14 @@
android:showAsAction="ifRoom">
</item>
<item android:id="@+id/action_share"
- android:icon="@drawable/ic_menu_share_holo_light"
+ android:icon="@drawable/multiselect_share"
android:title="@string/share"
android:visible="false"
android:actionProviderClass="android.widget.ShareActionProvider"
android:showAsAction="never">
</item>
<item android:id="@+id/action_delete"
- android:icon="@drawable/ic_menu_trash_holo_light"
+ android:icon="@drawable/multiselect_delete"
android:title="@string/delete"
android:visible="false"
android:showAsAction="ifRoom" />
diff --git a/res/menu/photo.xml b/res/menu/photo.xml
index 67e700b9f..d02a8c9e8 100644
--- a/res/menu/photo.xml
+++ b/res/menu/photo.xml
@@ -14,52 +14,52 @@
limitations under the License.
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:id="@+id/action_import"
- android:title="@string/Import"
- android:icon="@drawable/ic_menu_ptp_holo_light"
- android:showAsAction="always|withText"
- android:visible="false" />
- <!-- Ideally, showAsAction for share_panorama and share should be reversed.
- But, if share_panorama is set to never, it doesn't seem to get promoted
- to the action bar and stays on the overflow menu. -->
- <item android:id="@+id/action_share_panorama"
- android:icon="@drawable/ic_menu_share_holo_light"
- android:title="@string/share_panorama"
- android:visible="false"
- android:actionProviderClass="android.widget.ShareActionProvider"
- android:showAsAction="ifRoom" />
- <item android:id="@+id/action_share"
- android:icon="@drawable/ic_menu_share_holo_light"
- android:title="@string/share"
- android:visible="false"
- android:actionProviderClass="android.widget.ShareActionProvider"
- android:showAsAction="never" />
- <item android:id="@+id/action_delete"
- android:icon="@drawable/ic_menu_trash_holo_light"
- android:title="@string/delete"
- android:visible="false"
- android:showAsAction="never" />
+<!-- <item android:id="@+id/action_import" -->
+<!-- android:title="@string/Import" -->
+<!-- android:icon="@drawable/ic_menu_ptp_holo_light" -->
+<!-- android:showAsAction="always|withText" -->
+<!-- android:visible="false" /> -->
+<!-- Ideally, showAsAction for share_panorama and share should be reversed. -->
+<!-- But, if share_panorama is set to never, it doesn't seem to get promoted -->
+<!-- to the action bar and stays on the overflow menu. -->
+<!-- <item android:id="@+id/action_share_panorama" -->
+<!-- android:icon="@drawable/ic_menu_share_holo_light" -->
+<!-- android:title="@string/share_panorama" -->
+<!-- android:visible="false" -->
+<!-- android:actionProviderClass="android.widget.ShareActionProvider" -->
+<!-- android:showAsAction="ifRoom" /> -->
+<!-- <item android:id="@+id/action_share" -->
+<!-- android:icon="@drawable/ic_menu_share_holo_light" -->
+<!-- android:title="@string/share" -->
+<!-- android:visible="false" -->
+<!-- android:actionProviderClass="android.widget.ShareActionProvider" -->
+<!-- android:showAsAction="never" /> -->
+<!-- <item android:id="@+id/action_delete" -->
+<!-- android:icon="@drawable/ic_menu_trash_holo_light" -->
+<!-- android:title="@string/delete" -->
+<!-- android:visible="false" -->
+<!-- android:showAsAction="never" /> -->
<item android:id="@+id/action_slideshow"
android:icon="@drawable/ic_menu_slideshow_holo_light"
android:title="@string/slideshow"
android:showAsAction="never" />
- <item android:id="@+id/action_edit"
- android:title="@string/edit"
- android:showAsAction="never"
- android:visible="false" />
- <item android:id="@+id/action_simple_edit"
- android:title="@string/simple_edit"
- android:showAsAction="never"
- android:visible="false" />
- <item android:id="@+id/action_rotate_ccw"
- android:showAsAction="never"
- android:title="@string/rotate_left" />
- <item android:id="@+id/action_rotate_cw"
- android:showAsAction="never"
- android:title="@string/rotate_right" />
- <item android:id="@+id/action_crop"
- android:title="@string/crop_action"
- android:showAsAction="never" />
+<!-- <item android:id="@+id/action_edit" -->
+<!-- android:title="@string/edit" -->
+<!-- android:showAsAction="never" -->
+<!-- android:visible="false" /> -->
+<!-- <item android:id="@+id/action_simple_edit" -->
+<!-- android:title="@string/simple_edit" -->
+<!-- android:showAsAction="never" -->
+<!-- android:visible="false" /> -->
+<!-- <item android:id="@+id/action_rotate_ccw" -->
+<!-- android:showAsAction="never" -->
+<!-- android:title="@string/rotate_left" /> -->
+<!-- <item android:id="@+id/action_rotate_cw" -->
+<!-- android:showAsAction="never" -->
+<!-- android:title="@string/rotate_right" /> -->
+<!-- <item android:id="@+id/action_crop" -->
+<!-- android:title="@string/crop_action" -->
+<!-- android:showAsAction="never" /> -->
<item android:id="@+id/action_trim"
android:title="@string/trim_action"
android:showAsAction="never" />
diff --git a/res/mipmap-hdpi/ic_launcher_gallery.png b/res/mipmap-hdpi/ic_launcher_gallery.png
index 23ea99890..a6eaaa384 100644
--- a/res/mipmap-hdpi/ic_launcher_gallery.png
+++ b/res/mipmap-hdpi/ic_launcher_gallery.png
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_launcher_gallery.png b/res/mipmap-xhdpi/ic_launcher_gallery.png
index 79544a2b6..345bbeeec 100644
--- a/res/mipmap-xhdpi/ic_launcher_gallery.png
+++ b/res/mipmap-xhdpi/ic_launcher_gallery.png
Binary files differ
diff --git a/res/mipmap-xxhdpi/ic_launcher_gallery.png b/res/mipmap-xxhdpi/ic_launcher_gallery.png
new file mode 100644
index 000000000..b064bdb4d
--- /dev/null
+++ b/res/mipmap-xxhdpi/ic_launcher_gallery.png
Binary files differ
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 20b2930d7..9fd91923f 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -14,18 +14,20 @@
limitations under the License.
-->
<resources>
- <color name="default_background">#000</color>
+
+ <color name="default_background">#fafafa</color>
<!-- configuration for album set page -->
- <color name="albumset_background">#1A1A1A</color>
- <color name="albumset_placeholder">#333</color>
- <color name="albumset_label_background">#EE414143</color>
- <color name="albumset_label_title">#FBFBFB</color>
- <color name="albumset_label_count">#A9ABAD</color>
+ <color name="albumset_background">#fafafa</color>
+ <color name="albumset_placeholder">#75000000</color>
+ <color name="albumset_label_background">#8A000000</color> <!-- 54% alpha -->
+ <color name="albumset_label_title">#FFFFFF</color>
+ <color name="albumset_label_count">#FFFFFF</color>
+ <color name="albumlist_label_title">#8E000000</color>
<!-- configuration for album page -->
- <color name="album_background">#1A1A1A</color>
- <color name="album_placeholder">#333</color>
+ <color name="album_background">#fafafa</color>
+ <color name="album_placeholder">#75000000</color>
<!-- configuration for photo page -->
<color name="photo_background">#1A1A1A</color>
@@ -74,4 +76,12 @@
<color name="lowlight">#650101</color>
<color name="grey">#e7e7e7</color>
<color name="disabled_knob">#575757</color>
+ <color name="toolbar_theme">#e53935</color>
+ <color name="multiselect_background">#ffffff</color>
+ <color name="edit_background">#212121</color>
+ <color name="edit_actionbar_background">#8A000000</color>
+ <color name="dialog_button_color">#009688</color>
+ <color name="timeline_title_text_color">#26000000</color>
+ <color name="timeline_title_number_text_color">#1a000000</color>
+ <color name="timeline_title_background_color">#fafafa</color>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index ef742d2b5..2b72812de 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -112,23 +112,50 @@
<!-- configuration for legacy album set page -->
<integer name="albumset_rows_land">2</integer>
<integer name="albumset_rows_port">3</integer>
- <dimen name="albumset_padding_top">7dp</dimen>
- <dimen name="albumset_padding_bottom">7dp</dimen>
- <dimen name="albumset_slot_gap">7dp</dimen>
-
- <dimen name="albumset_label_background_height">30dp</dimen>
- <dimen name="albumset_title_offset">10dp</dimen>
- <dimen name="albumset_count_offset">10dp</dimen>
- <dimen name="albumset_title_font_size">12sp</dimen>
- <dimen name="albumset_count_font_size">9sp</dimen>
+ <integer name="albumset_cols_land">3</integer>
+ <integer name="albumset_cols_port">2</integer>
+
+ <dimen name="albumset_padding_top">4dp</dimen>
+ <dimen name="albumset_padding_bottom">4dp</dimen>
+ <dimen name="albumset_padding_left">4dp</dimen>
+ <dimen name="albumset_padding_right">4dp</dimen>
+ <dimen name="albumset_slot_gap">4dp</dimen>
+ <dimen name="albumset_label_background_height">48dp</dimen>
+ <dimen name="albumset_title_offset">12dp</dimen>
+ <dimen name="albumset_count_offset">18dp</dimen>
+ <dimen name="albumset_title_font_size">16sp</dimen>
+ <dimen name="albumset_count_font_size">16sp</dimen>
<dimen name="albumset_left_margin">2dp</dimen>
<dimen name="albumset_title_right_margin">20dp</dimen>
+ <dimen name="albumset_title_left_margin">12dp</dimen>
+ <dimen name="albumset_count_right_margin">18dp</dimen>
<dimen name="albumset_icon_size">25dp</dimen>
+ <!-- configuration for albumset page in Landscape-->
+ <dimen name="albumset_slot_gap_land">29dp</dimen>
+ <dimen name="albumset_padding_top_land">30dp</dimen>
+ <dimen name="albumset_padding_bottom_land">30dp</dimen>
+ <dimen name="albumset_padding_left_land">30dp</dimen>
+ <dimen name="albumset_padding_right_land">30dp</dimen>
+
<!-- configuration for album page -->
<integer name="album_rows_land">2</integer>
<integer name="album_rows_port">4</integer>
- <dimen name="album_slot_gap">5dp</dimen>
+ <integer name="album_cols_land">5</integer>
+ <integer name="album_cols_port">3</integer>
+
+ <dimen name="album_slot_gap">3dp</dimen>
+ <dimen name="album_padding_top">3dp</dimen>
+ <dimen name="album_padding_bottom">3dp</dimen>
+ <dimen name="album_padding_left">3dp</dimen>
+ <dimen name="album_padding_right">3dp</dimen>
+
+ <!-- configuration for album page in Landscape-->
+ <dimen name="album_slot_gap_land">7dp</dimen>
+ <dimen name="album_padding_top_land">16dp</dimen>
+ <dimen name="album_padding_bottom_land">7dp</dimen>
+ <dimen name="album_padding_left_land">16dp</dimen>
+ <dimen name="album_padding_right_land">16dp</dimen>
<!-- configuration for manage page -->
<dimen name="cache_pin_size">24dp</dimen>
@@ -152,4 +179,32 @@
<dimen name="photoeditor_text_padding">10dp</dimen>
<dimen name="photoeditor_original_text_size">18dp</dimen>
<dimen name="photoeditor_original_text_margin">4dp</dimen>
+ <dimen name="timeline_grid_vertical_space">3dp</dimen>
+ <dimen name="slot_width">174dp</dimen>
+ <dimen name="slot_height">174dp</dimen>
+ <dimen name="toolbar_height">84dp</dimen>
+ <dimen name="slot_width_album">116dp</dimen>
+ <dimen name="slot_height_album">116dp</dimen>
+
+ <!-- configuration for album page in listview -->
+ <integer name="albumlist_cols_land">1</integer>
+ <integer name="albumlist_cols_port">1</integer>
+
+ <dimen name="albumlist_padding_top">18dp</dimen>
+ <dimen name="slot_height_albumlist">40dp</dimen>
+ <dimen name="albumlist_slot_gap">18dp</dimen>
+ <dimen name="albumlist_thumb_size">40dp</dimen>
+ <dimen name="albumlist_left_margin">16dp</dimen>
+ <dimen name="albumlist_title_margin">16dp</dimen>
+ <dimen name="albumlist_title_font_size">16sp</dimen>
+ <dimen name="albumlist_label_background_height">40dp</dimen>
+ <dimen name= "edit_main_font">13sp</dimen>
+ <dimen name="dialog_text_size">14sp</dimen>
+
+ <dimen name="timeline_port_slot_gap">3dp</dimen>
+ <dimen name="timeline_land_slot_gap">7dp</dimen>
+ <dimen name="timeline_land_margin">16dp</dimen>
+ <dimen name="timeline_port_margin">3dp</dimen>
+ <dimen name="timeline_title_height">48dp</dimen>
+ <dimen name="timeline_title_font_size">14sp</dimen>
</resources>
diff --git a/res/values/filtershow_color.xml b/res/values/filtershow_color.xml
index 4fb4495e7..fbfedc41f 100644
--- a/res/values/filtershow_color.xml
+++ b/res/values/filtershow_color.xml
@@ -20,7 +20,7 @@
<color name="red">#FF0000</color>
<color name="blue">#0000FF</color>
<color name="text_toolbar">#FFFFFF</color>
- <color name="background_screen">#101010</color>
+ <color name="background_screen">#212121</color>
<color name="background_toolbar">#363949</color>
<color name="background_main_toolbar">#232323</color>
<color name="toolbar_separation_line">#333333</color>
@@ -36,7 +36,7 @@
<color name="filtershow_stateview_selected_background">#c8c8c8</color>
<color name="filtershow_stateview_selected_text">#000000</color>
<color name="filtershow_categoryview_background">#1a1a1a</color>
- <color name="filtershow_categoryview_text">#a7a7a7</color>
+ <color name="filtershow_categoryview_text">#ffffff</color>
<color name="filtershow_category_selection">#ffffffff</color>
<color name="gradcontrol_point_center">#ffffffff</color>
<color name="gradcontrol_point_edge">#ffffffff</color>
@@ -49,5 +49,7 @@
<color name="draw_rect_border">#888888</color>
<color name="color_chooser_unslected_border">#00000000</color>
<color name="color_chooser_slected_border">#a7a7a7</color>
+ <color name="filtershow_image_mask">#4d000000</color>
+ <color name="filtershow_info_text">#DE000000</color>
</resources> \ No newline at end of file
diff --git a/res/values/filtershow_strings.xml b/res/values/filtershow_strings.xml
index 57a858b9f..fdc8f6a16 100644
--- a/res/values/filtershow_strings.xml
+++ b/res/values/filtershow_strings.xml
@@ -340,4 +340,9 @@
<string name="fusion_pick_underlay">Pick Underlay</string>
<string name="dualcam_no_segment_toast">No segment found at this point</string>
+ <string name="color">Color</string>
+ <string name="frames">Frames</string>
+ <string name="beautify">Beautify</string>
+ <string name="dualcam">Dual Camera</string>
+
</resources>
diff --git a/res/values/filtershow_styles.xml b/res/values/filtershow_styles.xml
index 4162ccde9..1e97acced 100644
--- a/res/values/filtershow_styles.xml
+++ b/res/values/filtershow_styles.xml
@@ -58,7 +58,7 @@
<item name="android:indeterminateDrawable">@drawable/filtershow_slider</item>
<item name="android:minHeight">13dip</item>
<item name="android:maxHeight">13dip</item>
- <item name="android:thumb">@drawable/filtershow_scrubber</item>
+ <item name="android:thumb">@drawable/adjust</item>
<item name="android:thumbOffset">16dip</item>
<item name="android:focusable">true</item>
<item name="android:paddingStart">16dip</item>
diff --git a/res/values/filtershow_values.xml b/res/values/filtershow_values.xml
index a788afefc..efa7ccb0a 100644
--- a/res/values/filtershow_values.xml
+++ b/res/values/filtershow_values.xml
@@ -16,7 +16,7 @@
<resources>
<!-- Specify the screen orientation -->
- <bool name="only_use_portrait">true</bool>
+ <bool name="only_use_portrait">false</bool>
<!-- Text size for the state panel -->
<dimen name="state_panel_text_size">16dip</dimen>
@@ -28,7 +28,7 @@
<dimen name="category_panel_icon_size">64dip</dimen>
<!-- Category Panel Text Size -->
- <dimen name="category_panel_text_size">13dip</dimen>
+ <dimen name="category_panel_text_size">13sp</dimen>
<!-- Category Panel Text Size -->
<dimen name="category_panel_margin">4dip</dimen>
@@ -65,4 +65,16 @@
<!-- Glow effect size -->
<dimen name="edge_glow_size">50dip</dimen>
+ <dimen name="swap_button_width">168dp</dimen>
+ <dimen name="swap_button_height">32dp</dimen>
+ <dimen name="compare_margin_top">104dp</dimen>
+ <dimen name="compare_margin_right">10dp</dimen>
+ <dimen name="compare_margin_top_scaled">96dp</dimen>
+ <dimen name="compare_margin_right_scaled">60dp</dimen>
+ <dimen name="color_button_width">36dp</dimen>
+ <dimen name="color_button_height">36dp</dimen>
+ <dimen name="seekbar_width_filter">216dp</dimen>
+ <dimen name="scaled_image_height">454dp</dimen>
+ <dimen name="scaled_image_width">330dp</dimen>
+
</resources> \ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b553dbdc9..405c44350 100755
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -107,7 +107,7 @@
<string name="wallpaper">Setting wallpaper\u2026</string>
<string name="camera_setas_wallpaper">Wallpaper</string>
<!-- Toast message for share items -->
- <string name="cannot_share_items">Selected items for share should less than 300</string>
+ <string name="cannot_share_items">Max selected items for share is 300</string>
<!-- Details dialog "OK" button. Dismisses dialog. -->
<string name="delete">Delete</string>
@@ -542,7 +542,7 @@
<string name="pano_progress_text">Rendering panorama</string>
<!-- The label on the button that will save an edited image -->
- <string name="save" msgid="8140440041190264400">Save</string>
+ <string name="save" msgid="8140440041190264400">Done</string>
<!-- A label representing the action of importing media item(s) [CHAR LIMIT=20] -->
<string name="ingest_import">@string/Import</string>
@@ -1135,6 +1135,11 @@ CHAR LIMIT = NONE] -->
<item quantity="other">%1$d photos</item>
</plurals>
+ <plurals name="number_of_videos">
+ <item quantity="one">%1$d Video</item>
+ <item quantity="other">%1$d Videos</item>
+ </plurals>
+
<!-- The label for the bass boost knob of the audio effects dialog. -->
<string name="bass_boost_strength">Bass boost</string>
@@ -1160,7 +1165,25 @@ CHAR LIMIT = NONE] -->
<string name="action_consumes_rights">Rights will be consumed for playing this media</string>
<string name="text_makeup_whiten">Whiten</string>
<string name="text_makeup_Soften">Soften</string>
+
+ <string-array name="title_array_nav_items">
+ <item>Timeline</item>
+ <item>Albums</item>
+ <item>Videos</item>
+ </string-array>
+
+ <string name="navigation_drawer_title">Gallery</string>
+ <!-- Timeline screen title -->
+ <string name="timeline_title">Timeline</string>
+ <!-- Albums screen title -->
+ <string name="albums_title">Albums</string>
+ <!-- Videos screen title -->
+ <string name="videos_title">Videos</string>
+ <string name="action_viewtype_list">List view</string>
+ <string name="action_viewtype_grid">Grid view</string>
+ <string name="tvEmptyAlbum">No photos found</string>
+ <string name="tvEmptyVideos">No videos found</string>
<string name="text_makeup_trimface">Trimface</string>
<string name="text_makeup_bigeye">Bigeye</string>
-
+ <string name="drawer_desc">drawer</string>
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 14e8e299b..e4b02fc04 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -19,17 +19,23 @@
<item name="listPreferredItemHeightSmall">48dp</item>
<item name="switchStyle">@android:style/Widget.CompoundButton</item>
</style>
- <style name="Theme.Gallery.Dialog" parent="android:Theme.Holo.Dialog"/>
- <style name="Theme.Gallery" parent="Theme.GalleryBase">
- <item name="android:displayOptions"></item>
+
+ <style name="Theme.Gallery.Dialog" parent="android:Theme.Holo.Dialog" />
+
+ <style name="Theme.Gallery" parent="android:Theme.Material.Light">
<item name="android:windowContentOverlay">@null</item>
- <item name="android:actionBarStyle">@style/Holo.ActionBar</item>
- <item name="android:windowBackground">@android:color/black</item>
- <item name="android:colorBackground">@null</item>
<item name="android:colorBackgroundCacheHint">@null</item>
+ <item name="android:windowDrawsSystemBarBackgrounds">true</item>
+ <item name="android:statusBarColor">@android:color/transparent</item>
+ <item name="android:windowTranslucentStatus">true</item>
+ <item name="android:windowTranslucentNavigation">false</item>
+ <item name="android:windowActionModeOverlay">true</item>
+ <item name="android:actionOverflowButtonStyle">@style/EditOverflow</item>
+ <item name="android:logo">@android:color/transparent</item>
</style>
<style name="Theme.FilterShow" parent="Theme.Gallery">
<item name="android:windowBackground">@null</item>
+ <item name="android:actionBarStyle">@style/FilterShowActionBar</item>
</style>
<style name="Theme.Crop" parent="Theme.GalleryBase">
<item name="android:displayOptions"></item>
@@ -297,4 +303,37 @@
<item name="android:drawablePadding">8dp</item>
<item name="android:background">@drawable/bg_pressed</item>
</style>
+
+ <style name="AppTheme" parent="android:Theme.Material.Light">
+ <item name="android:windowDrawsSystemBarBackgrounds">true</item>
+ <item name="android:statusBarColor">@android:color/transparent</item>
+ <item name="android:windowTranslucentStatus">true</item>
+ <item name="android:windowTranslucentNavigation">false</item>
+ <item name="android:windowActionBar">false</item>
+ <item name="android:windowActionModeOverlay">true</item>
+ <item name="android:actionModeBackground">@color/multiselect_background</item>
+ <item name="android:actionModeShareDrawable">@drawable/multiselect_share</item>
+ <item name="android:actionOverflowButtonStyle">@style/MyOverFlow</item>
+ <item name="android:homeAsUpIndicator">@drawable/back</item>
+ <item name="android:actionModeCloseDrawable">@drawable/multiselected_back</item>
+ </style>
+
+ <style name="QueryTheme" parent="android:Theme.Material">
+ <item name="android:statusBarColor">#ab5810</item>
+ </style>
+
+ <style name="ToolbarTheme" parent="android:Theme.Material" />
+
+ <style name="ToolbarPopUpTheme" parent="android:Theme.Material.Light" />
+
+ <!-- Styles -->
+ <style name="MyOverFlow" parent="@android:style/Widget.Holo.ActionButton.Overflow">
+ <item name="android:src">@drawable/multiselect_more</item>
+ </style>
+ <style name="EditOverflow" parent="@android:style/Widget.Holo.ActionButton.Overflow">
+ <item name="android:src">@drawable/more</item>
+ </style>
+ <style name="FilterShowActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
+ <item name="android:background">@color/edit_actionbar_background</item>
+ </style>
</resources>
diff --git a/src/com/android/gallery3d/app/AbstractGalleryActivity.java b/src/com/android/gallery3d/app/AbstractGalleryActivity.java
index 84a9b5753..915fc948a 100644
--- a/src/com/android/gallery3d/app/AbstractGalleryActivity.java
+++ b/src/com/android/gallery3d/app/AbstractGalleryActivity.java
@@ -37,6 +37,7 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.view.WindowManager;
+import android.widget.Toolbar;
import android.os.Handler;
import com.android.gallery3d.R;
@@ -62,6 +63,7 @@ public class AbstractGalleryActivity extends Activity implements GalleryContext
private boolean mDisableToggleStatusBar;
private PanoramaViewHelper mPanoramaViewHelper;
private static final int ONRESUME_DELAY = 50;
+ private Toolbar mToolbar;
private AlertDialog mAlertDialog = null;
private BroadcastReceiver mMountReceiver = new BroadcastReceiver() {
@@ -76,7 +78,6 @@ public class AbstractGalleryActivity extends Activity implements GalleryContext
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mOrientationManager = new OrientationManager(this);
- toggleStatusBarByOrientation();
getWindow().setBackgroundDrawable(null);
mPanoramaViewHelper = new PanoramaViewHelper(this);
mPanoramaViewHelper.onCreate();
@@ -100,7 +101,6 @@ public class AbstractGalleryActivity extends Activity implements GalleryContext
mStateManager.onConfigurationChange(config);
getGalleryActionBar().onConfigurationChanged();
invalidateOptionsMenu();
- toggleStatusBarByOrientation();
}
@Override
@@ -314,18 +314,6 @@ public class AbstractGalleryActivity extends Activity implements GalleryContext
mDisableToggleStatusBar = true;
}
- // Shows status bar in portrait view, hide in landscape view
- private void toggleStatusBarByOrientation() {
- if (mDisableToggleStatusBar) return;
-
- Window win = getWindow();
- if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
- win.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
- } else {
- win.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
- }
- }
-
public TransitionStore getTransitionStore() {
return mTransitionStore;
}
@@ -392,4 +380,12 @@ public class AbstractGalleryActivity extends Activity implements GalleryContext
Log.e(TAG, "Error printing an image", fnfe);
}
}
+
+ public Toolbar getToolbar() {
+ return mToolbar;
+ }
+
+ public void setToolbar(Toolbar toolbar) {
+ mToolbar = toolbar ;
+ }
}
diff --git a/src/com/android/gallery3d/app/ActivityState.java b/src/com/android/gallery3d/app/ActivityState.java
index 2f1e0c9d9..11be8c6dd 100644
--- a/src/com/android/gallery3d/app/ActivityState.java
+++ b/src/com/android/gallery3d/app/ActivityState.java
@@ -205,9 +205,6 @@ abstract public class ActivityState {
actionBar.show();
}
int stateCount = mActivity.getStateManager().getStateCount();
- mActivity.getGalleryActionBar().setDisplayOptions(stateCount > 1, true);
- // Default behavior, this can be overridden in ActivityState's onResume.
- actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
}
activity.invalidateOptionsMenu();
diff --git a/src/com/android/gallery3d/app/AlbumListViewPage.java b/src/com/android/gallery3d/app/AlbumListViewPage.java
new file mode 100644
index 000000000..a207cb969
--- /dev/null
+++ b/src/com/android/gallery3d/app/AlbumListViewPage.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.android.gallery3d.app;
+
+public class AlbumListViewPage extends AlbumPage {
+
+}
diff --git a/src/com/android/gallery3d/app/AlbumPage.java b/src/com/android/gallery3d/app/AlbumPage.java
index bd9f0170b..65442d056 100644
--- a/src/com/android/gallery3d/app/AlbumPage.java
+++ b/src/com/android/gallery3d/app/AlbumPage.java
@@ -20,6 +20,7 @@ import android.app.Activity;
import android.content.Context;
import android.content.Intent;
//import android.drm.DrmHelper;
+import android.graphics.Color;
import android.graphics.Rect;
import android.net.Uri;
import android.os.Bundle;
@@ -27,11 +28,15 @@ import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.text.TextUtils;
+import android.util.TypedValue;
+import android.view.Gravity;
import android.view.HapticFeedbackConstants;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
import android.widget.Toast;
import com.android.gallery3d.R;
@@ -76,6 +81,8 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
public static final String KEY_SHOW_CLUSTER_MENU = "cluster-menu";
public static final String KEY_EMPTY_ALBUM = "empty-album";
public static final String KEY_RESUME_ANIMATION = "resume_animation";
+ public static final String KEY_IS_VIDEOS_SCREEN = "is-videos-screen";
+ public static final String KEY_VIEWTYPE = "viewtype";
private static final int REQUEST_SLIDESHOW = 1;
public static final int REQUEST_PHOTO = 2;
@@ -100,7 +107,8 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
protected SelectionManager mSelectionManager;
private boolean mGetContent;
- private boolean mShowClusterMenu;
+ //private boolean mShowClusterMenu;
+ private boolean mIsVideoScreen;
private ActionModeHandler mActionModeHandler;
private int mFocusIndex = 0;
@@ -124,6 +132,20 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
private static final int MSG_PICK_PHOTO = 0;
private PhotoFallbackEffect mResumeEffect;
+
+ private Config.AlbumPage mConfig;
+ private Config.AlbumPageList mConfigList;
+ private GalleryActionBar mActionBar;
+
+ public static final int GRID_VIEW = 0;
+ public static final int LIST_VIEW = 1;
+ public static int mCurrentView = GRID_VIEW;
+ private final String PREF_VIEWTYPE = "albumview-type";
+ public boolean mViewType = true;
+ private Bundle mData;
+ private MenuItem mItemViewType;
+ private TextView tvEmptyAlbum;
+ private boolean mShowedEmptyToastForSelf;
private PhotoFallbackEffect.PositionProvider mPositionProvider =
new PhotoFallbackEffect.PositionProvider() {
@Override
@@ -159,21 +181,51 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
protected void onLayout(
boolean changed, int left, int top, int right, int bottom) {
- int slotViewTop = mActivity.getGalleryActionBar().getHeight();
- int slotViewBottom = bottom - top;
- int slotViewRight = right - left;
+ int paddingLeft;
+ int paddingBottom;
+ int paddingRight;
+ int paddingTop;
+
+ if (right - left > bottom - top) {
+ if (mViewType) {
+ paddingTop = mConfig.paddingLeft;
+ } else {
+ paddingTop = mConfigList.paddingLeft;
+ }
+ paddingBottom = mConfig.paddingBottomLand;
+ paddingRight = mConfig.paddingRightLand;
+ paddingLeft = mConfig.paddingLeftLand;
+ }
+ else {
+ if (mViewType) {
+ paddingTop = mConfig.paddingLeft;
+ paddingLeft = mConfig.paddingLeft;
+ } else {
+ paddingTop = mConfigList.paddingLeft;
+ paddingLeft = mConfigList.paddingLeft;
+ }
+ paddingBottom = mConfig.paddingBottom;
+ paddingRight = mConfig.paddingRight;
+ }
+ int slotViewTop = mActivity.getGalleryActionBar().getHeight()
+ + paddingTop;
+ int slotViewBottom = bottom - top - paddingBottom;
+ int slotViewRight = right - left - paddingRight;
+ int slotViewLeft = paddingLeft;
if (mShowDetails) {
- mDetailsHelper.layout(left, slotViewTop, right, bottom);
+ mDetailsHelper.layout(slotViewLeft, slotViewTop, slotViewRight, slotViewBottom);
} else {
mAlbumView.setHighlightItemPath(null);
}
// Set the mSlotView as a reference point to the open animation
mOpenCenter.setReferencePosition(0, slotViewTop);
- mSlotView.layout(0, slotViewTop, slotViewRight, slotViewBottom);
- GalleryUtils.setViewPointMatrix(mMatrix,
- (right - left) / 2, (bottom - top) / 2, -mUserDistance);
+ mSlotView.layout(slotViewLeft, slotViewTop, slotViewRight,
+ slotViewBottom);
+
+ GalleryUtils.setViewPointMatrix(mMatrix, (right - left) / 2,
+ (bottom - top) / 2, -mUserDistance);
}
@Override
@@ -213,6 +265,8 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
hideDetails();
} else if (mSelectionManager.inSelectionMode()) {
mSelectionManager.leaveSelectionMode();
+ } else if (mIsVideoScreen) {
+ super.onBackPressed();
} else {
if(mLaunchedFromPhotoPage) {
mActivity.getTransitionStore().putIfNotPresent(
@@ -233,6 +287,10 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
if (mInCameraApp) {
GalleryUtils.startGalleryActivity(mActivity);
} else if (mActivity.getStateManager().getStateCount() > 1) {
+ mActivity.getToolbar().setNavigationContentDescription(mActivity.getResources().
+ getString(R.string.drawer_desc));
+ mActivity.getToolbar().setNavigationIcon(R.drawable.drawer);
+ ((GalleryActivity)mActivity).toggleNavDrawer(true);
super.onBackPressed();
} else if (mParentMediaSetString != null) {
Bundle data = new Bundle(getData());
@@ -347,6 +405,7 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
data.putBoolean(PhotoPage.KEY_START_IN_FILMSTRIP,
startInFilmstrip);
data.putBoolean(PhotoPage.KEY_IN_CAMERA_ROLL, mMediaSet.isCameraRoll());
+ data.putBoolean(PhotoPage.KEY_FROM_VIDEOS_SCREEN, mIsVideoScreen);
if (startInFilmstrip) {
mActivity.getStateManager().switchState(this, FilmstripPage.class, data);
} else {
@@ -392,14 +451,6 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
String newPath = FilterUtils.newClusterPath(basePath, clusterType);
Bundle data = new Bundle(getData());
data.putString(AlbumSetPage.KEY_MEDIA_PATH, newPath);
- if (mShowClusterMenu) {
- Context context = mActivity.getAndroidContext();
- data.putString(AlbumSetPage.KEY_SET_TITLE, mMediaSet.getName());
- data.putString(AlbumSetPage.KEY_SET_SUBTITLE,
- GalleryActionBar.getClusterByTypeString(context, clusterType));
- }
-
- // mAlbumView.savePositions(PositionRepository.getInstance(mActivity));
mActivity.getStateManager().startStateForResult(
AlbumSetPage.class, REQUEST_DO_ANIMATION, data);
}
@@ -408,12 +459,17 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
protected void onCreate(Bundle data, Bundle restoreState) {
super.onCreate(data, restoreState);
mUserDistance = GalleryUtils.meterToPixel(USER_DISTANCE_METER);
+ mCurrentView = GalleryUtils.getIntPref(mActivity, PREF_VIEWTYPE,
+ GRID_VIEW);
+ mViewType = mCurrentView == GRID_VIEW;
+ mData = data;
initializeViews();
initializeData(data);
mGetContent = data.getBoolean(GalleryActivity.KEY_GET_CONTENT, false);
- mShowClusterMenu = data.getBoolean(KEY_SHOW_CLUSTER_MENU, false);
+ mIsVideoScreen = data.getBoolean(KEY_IS_VIDEOS_SCREEN, false);
mDetailsSource = new MyDetailsSource();
Context context = mActivity.getAndroidContext();
+ mActionBar = mActivity.getGalleryActionBar();
if (data.getBoolean(KEY_AUTO_SELECT_ALL)) {
mSelectionManager.selectAll();
@@ -454,12 +510,12 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
boolean enableHomeButton = (mActivity.getStateManager().getStateCount() > 1) |
mParentMediaSetString != null;
- GalleryActionBar actionBar = mActivity.getGalleryActionBar();
- actionBar.setDisplayOptions(enableHomeButton, false);
- if (!mGetContent) {
- actionBar.enableAlbumModeMenu(GalleryActionBar.ALBUM_GRID_MODE_SELECTED, this);
+ //GalleryActionBar actionBar = mActivity.getGalleryActionBar();
+ mActionBar.setDisplayOptions(enableHomeButton, true);
+ if (enableHomeButton) {
+ mActivity.getToolbar().setNavigationContentDescription("back");
+ mActivity.getToolbar().setNavigationIcon(R.drawable.back);
}
-
// Set the reload bit here to prevent it exit this page in clearLoadingBit().
setLoadingBit(BIT_LOADING_RELOAD);
mLoadingFailed = false;
@@ -488,9 +544,6 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
mAlbumDataAdapter.pause();
mAlbumView.pause();
DetailsHelper.pause();
- if (!mGetContent) {
- mActivity.getGalleryActionBar().disableAlbumModeMenu(true);
- }
if (mSyncTask != null) {
mSyncTask.cancel();
@@ -511,10 +564,18 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
private void initializeViews() {
mSelectionManager = new SelectionManager(mActivity, false);
mSelectionManager.setSelectionListener(this);
- Config.AlbumPage config = Config.AlbumPage.get(mActivity);
- mSlotView = new SlotView(mActivity, config.slotViewSpec);
- mAlbumView = new AlbumSlotRenderer(mActivity, mSlotView,
- mSelectionManager, config.placeholderColor);
+ mConfig = Config.AlbumPage.get(mActivity);
+ mConfigList = Config.AlbumPageList.get(mActivity);
+ if (mViewType) {
+ mSlotView = new SlotView(mActivity, mConfig.slotViewSpec);
+ mAlbumView = new AlbumSlotRenderer(mActivity, mSlotView,
+ mConfig.labelSpec, mSelectionManager, mConfig.placeholderColor, mViewType);
+ } else {
+ mSlotView = new SlotView(mActivity, mConfigList.slotViewSpec);
+ mAlbumView = new AlbumSlotRenderer(mActivity, mSlotView,
+ mConfigList.labelSpec, mSelectionManager,
+ mConfig.placeholderColor, mViewType);
+ }
mSlotView.setSlotRenderer(mAlbumView);
mRootPane.addComponent(mSlotView);
mSlotView.setListener(new SlotView.SimpleListener() {
@@ -583,26 +644,27 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
@Override
protected boolean onCreateActionBar(Menu menu) {
- GalleryActionBar actionBar = mActivity.getGalleryActionBar();
+ //GalleryActionBar actionBar = mActivity.getGalleryActionBar();
MenuInflater inflator = getSupportMenuInflater();
if (mGetContent) {
inflator.inflate(R.menu.pickup, menu);
int typeBits = mData.getInt(GalleryActivity.KEY_TYPE_BITS,
DataManager.INCLUDE_IMAGE);
- actionBar.setTitle(GalleryUtils.getSelectionModePrompt(typeBits));
+ mActionBar.setTitle(GalleryUtils.getSelectionModePrompt(typeBits));
} else {
inflator.inflate(R.menu.album, menu);
- actionBar.setTitle(mMediaSet.getName());
+ mActionBar.setTitle(mMediaSet.getName());
- FilterUtils.setupMenuItems(actionBar, mMediaSetPath, true);
+ FilterUtils.setupMenuItems(mActionBar, mMediaSetPath, true);
- menu.findItem(R.id.action_group_by).setVisible(mShowClusterMenu);
menu.findItem(R.id.action_camera).setVisible(
- MediaSetUtils.isCameraSource(mMediaSetPath)
- && GalleryUtils.isCameraAvailable(mActivity));
+ GalleryUtils.isAnyCameraAvailable(mActivity));
+ menu.findItem(R.id.action_slideshow).setVisible(!mIsVideoScreen);
+ MenuItem item = menu.findItem(R.id.action_view_type);
+ updateMenuTitle(item);
}
- actionBar.setSubtitle(null);
+ //actionBar.setSubtitle(null);
return true;
}
@@ -650,10 +712,6 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
mSelectionManager.setAutoLeaveSelectionMode(false);
mSelectionManager.enterSelectionMode();
return true;
- case R.id.action_group_by: {
- mActivity.getGalleryActionBar().showClusterDialog(this);
- return true;
- }
case R.id.action_slideshow: {
mInCameraAndWantQuitOnPause = false;
Bundle data = new Bundle();
@@ -676,6 +734,10 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
GalleryUtils.startCameraActivity(mActivity);
return true;
}
+ case R.id.action_view_type: {
+ switchView();
+ return true;
+ }
default:
return false;
}
@@ -793,12 +855,24 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
mLoadingBits &= ~loadTaskBit;
if (mLoadingBits == 0 && mIsActive) {
if (mAlbumDataAdapter.size() == 0) {
+ if (mIsVideoScreen)
+ {
+ mShowedEmptyToastForSelf = true;
+ showEmptyAlbumToast(Toast.LENGTH_LONG);
+ }
+ else {
Intent result = new Intent();
result.putExtra(KEY_EMPTY_ALBUM, true);
setStateResult(Activity.RESULT_OK, result);
mActivity.getStateManager().finishState(this);
+ }
+ return;
}
}
+ if (mShowedEmptyToastForSelf && mIsVideoScreen) {
+ mShowedEmptyToastForSelf = false;
+ hideEmptyAlbumToast();
+ }
}
private class MyLoadingListener implements LoadingListener {
@@ -850,4 +924,50 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
switchToFilmstrip();
}
}
+
+ public void updateMenuTitle(MenuItem item) {
+
+ item.setTitle(mViewType ? R.string.action_viewtype_list
+ : R.string.action_viewtype_grid);
+ }
+
+ private void switchView() {
+ if (mViewType) {
+ mCurrentView = LIST_VIEW;
+ GalleryUtils.setIntPref(mActivity, PREF_VIEWTYPE, mCurrentView);
+ mActivity.getStateManager().switchState(this,
+ AlbumListViewPage.class, mData);
+ } else {
+ mCurrentView = GRID_VIEW;
+ GalleryUtils.setIntPref(mActivity, PREF_VIEWTYPE, mCurrentView);
+ mActivity.getStateManager().switchState(this, AlbumPage.class,
+ mData);
+ }
+
+ }
+
+
+
+ private void showEmptyAlbumToast(int toastLength) {
+ tvEmptyAlbum = new TextView(mActivity);
+ tvEmptyAlbum.setText(R.string.tvEmptyVideos);
+ tvEmptyAlbum.setTextColor(Color.parseColor("#8A000000"));
+ tvEmptyAlbum.setGravity(Gravity.CENTER);
+ tvEmptyAlbum.setTextSize(TypedValue.COMPLEX_UNIT_SP,20);
+ RelativeLayout galleryRoot = (RelativeLayout) ((Activity) mActivity)
+ .findViewById(R.id.gallery_root);
+ RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
+ RelativeLayout.LayoutParams.WRAP_CONTENT,
+ RelativeLayout.LayoutParams.WRAP_CONTENT);
+ lp.addRule(RelativeLayout.CENTER_IN_PARENT);
+ galleryRoot.addView(tvEmptyAlbum, lp);
+ }
+
+ private void hideEmptyAlbumToast() {
+
+ if (tvEmptyAlbum != null)
+ {
+ tvEmptyAlbum.setVisibility(View.GONE);
+ }
+ }
}
diff --git a/src/com/android/gallery3d/app/AlbumSetPage.java b/src/com/android/gallery3d/app/AlbumSetPage.java
index 068ac33a0..d2cc0ca57 100644
--- a/src/com/android/gallery3d/app/AlbumSetPage.java
+++ b/src/com/android/gallery3d/app/AlbumSetPage.java
@@ -22,11 +22,14 @@ package com.android.gallery3d.app;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
+import android.graphics.Color;
import android.graphics.Rect;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
+import android.util.TypedValue;
+import android.view.Gravity;
import android.view.HapticFeedbackConstants;
import android.view.Menu;
import android.view.MenuInflater;
@@ -35,6 +38,7 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RelativeLayout;
+import android.widget.TextView;
import android.widget.Toast;
import com.android.gallery3d.R;
@@ -122,6 +126,7 @@ public class AlbumSetPage extends ActivityState implements
private Button mCameraButton;
private boolean mShowedEmptyToastForSelf = false;
+ private TextView tvEmptyAlbum;
@Override
protected int getBackgroundColorId() {
@@ -136,17 +141,38 @@ public class AlbumSetPage extends ActivityState implements
boolean changed, int left, int top, int right, int bottom) {
mEyePosition.resetPosition();
- int slotViewTop = mActionBar.getHeight() + mConfig.paddingTop;
- int slotViewBottom = bottom - top - mConfig.paddingBottom;
- int slotViewRight = right - left;
+ int paddingLeft;
+ int paddingBottom;
+ int paddingRight;
+ int paddingTop;
+
+ if (right - left > bottom - top) {
+ paddingTop = mConfig.paddingTopLand;
+ paddingBottom = mConfig.paddingBottomLand;
+ paddingRight = mConfig.paddingRightLand;
+ paddingLeft = mConfig.paddingLeftLand;
+ }
+ else
+ {
+ paddingTop = mConfig.paddingTop;
+ paddingBottom = mConfig.paddingBottom;
+ paddingRight = mConfig.paddingRight;
+ paddingLeft = mConfig.paddingLeft;
+ }
+
+ int slotViewTop = mActionBar.getHeight() + paddingTop;
+ int slotViewBottom = bottom - top - paddingBottom;
+ int slotViewRight = right - left - paddingRight;
+ int slotViewLeft = paddingLeft ;
+
if (mShowDetails) {
- mDetailsHelper.layout(left, slotViewTop, right, bottom);
+ mDetailsHelper.layout(slotViewLeft, slotViewTop, slotViewRight, slotViewBottom);
} else {
mAlbumSetView.setHighlightItemPath(null);
}
- mSlotView.layout(0, slotViewTop, slotViewRight, slotViewBottom);
+ mSlotView.layout(slotViewLeft, slotViewTop, slotViewRight, slotViewBottom);
}
@Override
@@ -218,23 +244,24 @@ public class AlbumSetPage extends ActivityState implements
WeakReference<Toast> mEmptyAlbumToast = null;
private void showEmptyAlbumToast(int toastLength) {
- Toast toast;
- if (mEmptyAlbumToast != null) {
- toast = mEmptyAlbumToast.get();
- if (toast != null) {
- toast.show();
- return;
- }
- }
- toast = Toast.makeText(mActivity, R.string.empty_album, toastLength);
- mEmptyAlbumToast = new WeakReference<Toast>(toast);
- toast.show();
+ tvEmptyAlbum = new TextView(mActivity);
+ tvEmptyAlbum.setText(R.string.tvEmptyAlbum);
+ tvEmptyAlbum.setTextColor(Color.parseColor("#8A000000"));
+ tvEmptyAlbum.setGravity(Gravity.CENTER);
+ tvEmptyAlbum.setTextSize(TypedValue.COMPLEX_UNIT_SP,20);
+ RelativeLayout galleryRoot = (RelativeLayout) ((Activity) mActivity)
+ .findViewById(R.id.gallery_root);
+ RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
+ RelativeLayout.LayoutParams.WRAP_CONTENT,
+ RelativeLayout.LayoutParams.WRAP_CONTENT);
+ lp.addRule(RelativeLayout.CENTER_IN_PARENT);
+ galleryRoot.addView(tvEmptyAlbum, lp);
}
private void hideEmptyAlbumToast() {
- if (mEmptyAlbumToast != null) {
- Toast toast = mEmptyAlbumToast.get();
- if (toast != null) toast.cancel();
+ if (tvEmptyAlbum != null)
+ {
+ tvEmptyAlbum.setVisibility(View.GONE);
}
}
@@ -272,10 +299,10 @@ public class AlbumSetPage extends ActivityState implements
data.putInt(PhotoPage.KEY_INDEX_HINT, 0);
data.putString(PhotoPage.KEY_MEDIA_SET_PATH,
mediaPath);
- data.putBoolean(PhotoPage.KEY_START_IN_FILMSTRIP, true);
+ data.putBoolean(PhotoPage.KEY_START_IN_FILMSTRIP, false);
data.putBoolean(PhotoPage.KEY_IN_CAMERA_ROLL, targetSet.isCameraRoll());
mActivity.getStateManager().startStateForResult(
- FilmstripPage.class, AlbumPage.REQUEST_PHOTO, data);
+ SinglePhotoPage.class, AlbumPage.REQUEST_PHOTO, data);
return;
}
data.putString(AlbumPage.KEY_MEDIA_PATH, mediaPath);
@@ -333,9 +360,8 @@ public class AlbumSetPage extends ActivityState implements
mEyePosition = new EyePosition(context, this);
mDetailsSource = new MyDetailsSource();
mActionBar = mActivity.getGalleryActionBar();
- mSelectedAction = data.getInt(AlbumSetPage.KEY_SELECTED_CLUSTER_TYPE,
- FilterUtils.CLUSTER_BY_ALBUM);
-
+ //mSelectedAction = data.getInt(AlbumSetPage.KEY_SELECTED_CLUSTER_TYPE,
+ // FilterUtils.CLUSTER_BY_ALBUM);
mHandler = new SynchronizedHandler(mActivity.getGLRoot()) {
@Override
public void handleMessage(Message message) {
@@ -447,7 +473,7 @@ public class AlbumSetPage extends ActivityState implements
// Call disableClusterMenu to avoid receiving callback after paused.
// Don't hide menu here otherwise the list menu will disappear earlier than
// the action bar, which is janky and unwanted behavior.
- mActionBar.disableClusterMenu(false);
+ //mActionBar.disableClusterMenu(false);
if (mSyncTask != null) {
mSyncTask.cancel();
mSyncTask = null;
@@ -468,9 +494,9 @@ public class AlbumSetPage extends ActivityState implements
mAlbumSetView.resume();
mEyePosition.resume();
mActionModeHandler.resume();
- if (mShowClusterMenu) {
+ /*if (mShowClusterMenu) {
mActionBar.enableClusterMenu(mSelectedAction, this);
- }
+ }*/
if (!mInitialSynced) {
setLoadingBit(BIT_LOADING_SYNC);
mSyncTask = mMediaSet.requestSync(AlbumSetPage.this);
@@ -547,21 +573,21 @@ public class AlbumSetPage extends ActivityState implements
inflater.inflate(R.menu.albumset, menu);
boolean wasShowingClusterMenu = mShowClusterMenu;
mShowClusterMenu = !inAlbum;
- if (mShowClusterMenu != wasShowingClusterMenu) {
+ /*if (mShowClusterMenu != wasShowingClusterMenu) {
if (mShowClusterMenu) {
mActionBar.enableClusterMenu(mSelectedAction, this);
} else {
mActionBar.disableClusterMenu(true);
}
- }
- boolean selectAlbums = !inAlbum &&
- mActionBar.getClusterTypeAction() == FilterUtils.CLUSTER_BY_ALBUM;
+ }*/
+ boolean selectAlbums = !inAlbum ;// &&
+ // mActionBar.getClusterTypeAction() == FilterUtils.CLUSTER_BY_ALBUM;
MenuItem selectItem = menu.findItem(R.id.action_select);
selectItem.setTitle(activity.getString(
selectAlbums ? R.string.select_album : R.string.select_group));
MenuItem cameraItem = menu.findItem(R.id.action_camera);
- cameraItem.setVisible(GalleryUtils.isCameraAvailable(activity));
+ cameraItem.setVisible(GalleryUtils.isAnyCameraAvailable(activity));
FilterUtils.setupMenuItems(mActionBar, mMediaSet.getPath(), false);
@@ -574,10 +600,7 @@ public class AlbumSetPage extends ActivityState implements
MenuItem moreItem = menu.findItem(R.id.action_more_image);
moreItem.setVisible(mActivity.getResources().getBoolean(
R.bool.config_show_more_images));
-
-
- mActionBar.setTitle(mTitle);
- mActionBar.setSubtitle(mSubtitle);
+ mActionBar.setTitle(R.string.albums_title);
}
return true;
}
@@ -649,7 +672,7 @@ public class AlbumSetPage extends ActivityState implements
}
}
- private String getSelectedString() {
+ /*private String getSelectedString() {
int count = mSelectionManager.getSelectedCount();
int action = mActionBar.getClusterTypeAction();
int string = action == FilterUtils.CLUSTER_BY_ALBUM
@@ -657,22 +680,24 @@ public class AlbumSetPage extends ActivityState implements
: R.plurals.number_of_groups_selected;
String format = mActivity.getResources().getQuantityString(string, count);
return String.format(format, count);
- }
+ }*/
@Override
public void onSelectionModeChange(int mode) {
switch (mode) {
case SelectionManager.ENTER_SELECTION_MODE: {
- mActionBar.disableClusterMenu(true);
+ //mActionBar.disableClusterMenu(true);
mActionModeHandler.startActionMode();
performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
+ ((GalleryActivity)mActivity).toggleNavDrawer(false);
break;
}
case SelectionManager.LEAVE_SELECTION_MODE: {
mActionModeHandler.finishActionMode();
- if (mShowClusterMenu) {
+ ((GalleryActivity)mActivity).toggleNavDrawer(true);
+ /*if (mShowClusterMenu) {
mActionBar.enableClusterMenu(mSelectedAction, this);
- }
+ }*/
mRootPane.invalidate();
break;
}
@@ -686,7 +711,7 @@ public class AlbumSetPage extends ActivityState implements
@Override
public void onSelectionChange(Path path, boolean selected) {
- mActionModeHandler.setTitle(getSelectedString());
+// mActionModeHandler.setTitle(getSelectedString());
mActionModeHandler.updateSupportedOperation(path, selected);
}
diff --git a/src/com/android/gallery3d/app/Config.java b/src/com/android/gallery3d/app/Config.java
index 7183acc33..8e8d11b26 100644
--- a/src/com/android/gallery3d/app/Config.java
+++ b/src/com/android/gallery3d/app/Config.java
@@ -21,7 +21,10 @@ import android.content.res.Resources;
import com.android.gallery3d.R;
import com.android.gallery3d.ui.AlbumSetSlotRenderer;
+import com.android.gallery3d.ui.AlbumSlotRenderer;
import com.android.gallery3d.ui.SlotView;
+import com.android.gallery3d.ui.TimeLineSlotRenderer;
+import com.android.gallery3d.ui.TimeLineSlotView;
final class Config {
public static class AlbumSetPage {
@@ -32,6 +35,12 @@ final class Config {
public int paddingTop;
public int paddingBottom;
public int placeholderColor;
+ public int paddingLeft;
+ public int paddingRight;
+ public int paddingTopLand;
+ public int paddingBottomLand;
+ public int paddingLeftLand;
+ public int paddingRightLand;
public static synchronized AlbumSetPage get(Context context) {
if (sInstance == null) {
@@ -46,21 +55,34 @@ final class Config {
placeholderColor = r.getColor(R.color.albumset_placeholder);
slotViewSpec = new SlotView.Spec();
- slotViewSpec.rowsLand = r.getInteger(R.integer.albumset_rows_land);
- slotViewSpec.rowsPort = r.getInteger(R.integer.albumset_rows_port);
+ //slotViewSpec.rowsLand = r.getInteger(R.integer.albumset_rows_land);
+ //slotViewSpec.rowsPort = r.getInteger(R.integer.albumset_rows_port);
+ slotViewSpec.colsLand = r.getInteger(R.integer.albumset_cols_land);
+ slotViewSpec.colsPort = r.getInteger(R.integer.albumset_cols_port);
slotViewSpec.slotGap = r.getDimensionPixelSize(R.dimen.albumset_slot_gap);
+ slotViewSpec.slotGapLand = r.getDimensionPixelSize(R.dimen.albumset_slot_gap_land);
slotViewSpec.slotHeightAdditional = 0;
+ slotViewSpec.slotWidth = r.getDimensionPixelSize(R.dimen.slot_width);
+ slotViewSpec.slotHeight = r.getDimensionPixelSize(R.dimen.slot_height);
paddingTop = r.getDimensionPixelSize(R.dimen.albumset_padding_top);
paddingBottom = r.getDimensionPixelSize(R.dimen.albumset_padding_bottom);
+ paddingLeft = r.getDimensionPixelSize(R.dimen.albumset_padding_left);
+ paddingRight = r.getDimensionPixelSize(R.dimen.albumset_padding_right);
+
+ paddingTopLand = r.getDimensionPixelSize(R.dimen.albumset_padding_top_land);
+ paddingBottomLand = r.getDimensionPixelSize(R.dimen.albumset_padding_bottom_land);
+
+ paddingLeftLand = r.getDimensionPixelSize(R.dimen.albumset_padding_left_land);
+ paddingRightLand = r.getDimensionPixelSize(R.dimen.albumset_padding_right_land);
labelSpec = new AlbumSetSlotRenderer.LabelSpec();
labelSpec.labelBackgroundHeight = r.getDimensionPixelSize(
R.dimen.albumset_label_background_height);
- labelSpec.titleOffset = r.getDimensionPixelSize(
+ /*labelSpec.titleOffset = r.getDimensionPixelSize(
R.dimen.albumset_title_offset);
labelSpec.countOffset = r.getDimensionPixelSize(
- R.dimen.albumset_count_offset);
+ R.dimen.albumset_count_offset);*/
labelSpec.titleFontSize = r.getDimensionPixelSize(
R.dimen.albumset_title_font_size);
labelSpec.countFontSize = r.getDimensionPixelSize(
@@ -69,8 +91,12 @@ final class Config {
R.dimen.albumset_left_margin);
labelSpec.titleRightMargin = r.getDimensionPixelSize(
R.dimen.albumset_title_right_margin);
- labelSpec.iconSize = r.getDimensionPixelSize(
- R.dimen.albumset_icon_size);
+ labelSpec.titleLeftMargin = r.getDimensionPixelSize(
+ R.dimen.albumset_title_left_margin);
+ labelSpec.countRightMargin = r.getDimensionPixelSize(
+ R.dimen.albumset_count_right_margin);
+ /*labelSpec.iconSize = r.getDimensionPixelSize(
+ R.dimen.albumset_icon_size);*/
labelSpec.backgroundColor = r.getColor(
R.color.albumset_label_background);
labelSpec.titleColor = r.getColor(R.color.albumset_label_title);
@@ -80,9 +106,17 @@ final class Config {
public static class AlbumPage {
private static AlbumPage sInstance;
-
+ public AlbumSlotRenderer.LabelSpec labelSpec;
public SlotView.Spec slotViewSpec;
public int placeholderColor;
+ public int paddingTop;
+ public int paddingBottom;
+ public int paddingLeft;
+ public int paddingRight;
+ public int paddingTopLand;
+ public int paddingBottomLand;
+ public int paddingLeftLand;
+ public int paddingRightLand;
public static synchronized AlbumPage get(Context context) {
if (sInstance == null) {
@@ -97,9 +131,26 @@ final class Config {
placeholderColor = r.getColor(R.color.album_placeholder);
slotViewSpec = new SlotView.Spec();
- slotViewSpec.rowsLand = r.getInteger(R.integer.album_rows_land);
- slotViewSpec.rowsPort = r.getInteger(R.integer.album_rows_port);
+ //slotViewSpec.rowsLand = r.getInteger(R.integer.album_rows_land);
+ //slotViewSpec.rowsPort = r.getInteger(R.integer.album_rows_port);
+ slotViewSpec.colsLand = r.getInteger(R.integer.album_cols_land);
+ slotViewSpec.colsPort = r.getInteger(R.integer.album_cols_port);
+ slotViewSpec.slotWidth = r.getDimensionPixelSize(R.dimen.slot_width_album);
+ slotViewSpec.slotHeight = r.getDimensionPixelSize(R.dimen.slot_height_album);
slotViewSpec.slotGap = r.getDimensionPixelSize(R.dimen.album_slot_gap);
+ slotViewSpec.slotGapLand = r.getDimensionPixelSize(R.dimen.album_slot_gap_land);
+
+ paddingTop = r.getDimensionPixelSize(R.dimen.album_padding_top);
+ paddingBottom = r.getDimensionPixelSize(R.dimen.album_padding_bottom);
+
+ paddingLeft = r.getDimensionPixelSize(R.dimen.album_padding_left);
+ paddingRight = r.getDimensionPixelSize(R.dimen.album_padding_right);
+
+ paddingTopLand = r.getDimensionPixelSize(R.dimen.album_padding_top_land);
+ paddingBottomLand = r.getDimensionPixelSize(R.dimen.album_padding_bottom_land);
+
+ paddingLeftLand = r.getDimensionPixelSize(R.dimen.album_padding_left_land);
+ paddingRightLand = r.getDimensionPixelSize(R.dimen.album_padding_right_land);
}
}
@@ -123,5 +174,95 @@ final class Config {
cachePinMargin = r.getDimensionPixelSize(R.dimen.cache_pin_margin);
}
}
+
+ public static class AlbumPageList {
+ private static AlbumPageList sInstance;
+
+ public SlotView.Spec slotViewSpec;
+ public AlbumSlotRenderer.LabelSpec labelSpec;
+ public int paddingTop;
+ public int paddingBottom;
+ public int paddingLeft;
+ public int paddingRight;
+ public int placeholderColor;
+
+ public static synchronized AlbumPageList get(Context context) {
+ if (sInstance == null) {
+ sInstance = new AlbumPageList(context);
+ }
+ return sInstance;
+ }
+
+ private AlbumPageList(Context context) {
+ Resources r = context.getResources();
+
+ placeholderColor = r.getColor(R.color.album_placeholder);
+
+ slotViewSpec = new SlotView.Spec();
+ slotViewSpec.slotHeight = r
+ .getDimensionPixelSize(R.dimen.slot_height_albumlist);
+ slotViewSpec.slotGap = r
+ .getDimensionPixelSize(R.dimen.albumlist_slot_gap);
+ slotViewSpec.slotGapLand = r
+ .getDimensionPixelSize(R.dimen.albumlist_slot_gap);
+ paddingTop = r.getDimensionPixelSize(R.dimen.albumlist_padding_top);
+ paddingBottom = r
+ .getDimensionPixelSize(R.dimen.album_padding_bottom);
+
+ paddingLeft = r.getDimensionPixelSize(R.dimen.albumlist_left_margin);
+ paddingRight = r.getDimensionPixelSize(R.dimen.album_padding_right);
+ labelSpec = new AlbumSlotRenderer.LabelSpec();
+ labelSpec.labelBackgroundHeight = r
+ .getDimensionPixelSize(R.dimen.albumlist_label_background_height);
+ labelSpec.titleFontSize = r
+ .getDimensionPixelSize(R.dimen.albumset_title_font_size);
+ labelSpec.leftMargin = r
+ .getDimensionPixelSize(R.dimen.albumlist_left_margin);
+ labelSpec.titleLeftMargin = r
+ .getDimensionPixelSize(R.dimen.albumlist_title_margin);
+ labelSpec.iconSize = r
+ .getDimensionPixelSize(R.dimen.albumlist_thumb_size);
+ labelSpec.backgroundColor = r
+ .getColor(R.color.albumset_label_background);
+ labelSpec.titleColor = r.getColor(R.color.albumlist_label_title);
+ }
+ }
+
+ public static class TimeLinePage {
+ private static TimeLinePage sInstance;
+
+ public TimeLineSlotView.Spec slotViewSpec;
+ public TimeLineSlotRenderer.LabelSpec labelSpec;
+ public int placeholderColor;
+
+ public static synchronized TimeLinePage get(Context context) {
+ if (sInstance == null) {
+ sInstance = new TimeLinePage(context);
+ }
+ return sInstance;
+ }
+ private TimeLinePage(Context context) {
+ Resources r = context.getResources();
+
+ placeholderColor = r.getColor(R.color.album_placeholder);
+
+ slotViewSpec = new TimeLineSlotView.Spec();
+ slotViewSpec.colsLand = r.getInteger(R.integer.album_cols_land);
+ slotViewSpec.colsPort = r.getInteger(R.integer.album_cols_port);
+ slotViewSpec.slotGapPort = r.getDimensionPixelSize(R.dimen.timeline_port_slot_gap);
+ slotViewSpec.slotGapLand = r.getDimensionPixelSize(R.dimen.timeline_land_slot_gap);
+ slotViewSpec.titleHeight = r.getDimensionPixelSize(R.dimen.timeline_title_height);
+
+ labelSpec = new TimeLineSlotRenderer.LabelSpec();
+
+ labelSpec.timeLineTitleHeight = r.getDimensionPixelSize(
+ R.dimen.timeline_title_height);
+ labelSpec.timeLineTitleFontSize = r.getDimensionPixelSize(
+ R.dimen.timeline_title_font_size);
+ labelSpec.timeLineTitleTextColor = r.getColor(R.color.timeline_title_text_color);
+ labelSpec.timeLineNumberTextColor = r.getColor(R.color.timeline_title_number_text_color);
+ labelSpec.timeLineTitleBackgroundColor = r.getColor(R.color.timeline_title_background_color);
+ }
+ }
}
diff --git a/src/com/android/gallery3d/app/FilterUtils.java b/src/com/android/gallery3d/app/FilterUtils.java
index bc28a9cc1..3e055357d 100644
--- a/src/com/android/gallery3d/app/FilterUtils.java
+++ b/src/com/android/gallery3d/app/FilterUtils.java
@@ -63,6 +63,7 @@ public class FilterUtils {
public static final int CLUSTER_BY_TAG = 8;
public static final int CLUSTER_BY_SIZE = 16;
public static final int CLUSTER_BY_FACE = 32;
+ public static final int CLUSTER_BY_VIDEOS = 64;
public static final int FILTER_IMAGE_ONLY = 1;
public static final int FILTER_VIDEO_ONLY = 2;
@@ -95,7 +96,7 @@ public class FilterUtils {
setMenuItemApplied(actionBar, CLUSTER_BY_FACE,
(ctype & CLUSTER_BY_FACE) != 0, (ccurrent & CLUSTER_BY_FACE) != 0);
- actionBar.setClusterItemVisibility(CLUSTER_BY_ALBUM, !inAlbum || ctype == 0);
+// actionBar.setClusterItemVisibility(CLUSTER_BY_ALBUM, !inAlbum || ctype == 0);
setMenuItemApplied(actionBar, R.id.action_cluster_album, ctype == 0,
ccurrent == 0);
@@ -165,11 +166,11 @@ public class FilterUtils {
private static void setMenuItemApplied(
GalleryActionBar model, int id, boolean applied, boolean updateTitle) {
- model.setClusterItemEnabled(id, !applied);
+// model.setClusterItemEnabled(id, !applied);
}
private static void setMenuItemAppliedEnabled(GalleryActionBar model, int id, boolean applied, boolean enabled, boolean updateTitle) {
- model.setClusterItemEnabled(id, enabled);
+// model.setClusterItemEnabled(id, enabled);
}
// Add a specified filter to the path.
@@ -208,6 +209,8 @@ public class FilterUtils {
case CLUSTER_BY_FACE:
kind = "face";
break;
+ case CLUSTER_BY_VIDEOS:
+ return "/local/video/-1";
default: /* CLUSTER_BY_ALBUM */
return base;
}
diff --git a/src/com/android/gallery3d/app/GalleryActionBar.java b/src/com/android/gallery3d/app/GalleryActionBar.java
index 588f5842a..1e8458738 100644
--- a/src/com/android/gallery3d/app/GalleryActionBar.java
+++ b/src/com/android/gallery3d/app/GalleryActionBar.java
@@ -26,6 +26,8 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
@@ -34,6 +36,7 @@ import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ShareActionProvider;
import android.widget.TextView;
+import android.widget.Toolbar;
import android.widget.TwoLineListItem;
import com.android.gallery3d.R;
@@ -41,7 +44,7 @@ import com.android.gallery3d.common.ApiHelper;
import java.util.ArrayList;
-public class GalleryActionBar implements OnNavigationListener {
+public class GalleryActionBar {
@SuppressWarnings("unused")
private static final String TAG = "GalleryActionBar";
@@ -53,9 +56,9 @@ public class GalleryActionBar implements OnNavigationListener {
private AbstractGalleryActivity mActivity;
private ActionBar mActionBar;
private int mCurrentIndex;
- private ClusterAdapter mAdapter = new ClusterAdapter();
+// private ClusterAdapter mAdapter = new ClusterAdapter();
- private AlbumModeAdapter mAlbumModeAdapter;
+// private AlbumModeAdapter mAlbumModeAdapter;
private OnAlbumModeSelectedListener mAlbumModeListener;
private int mLastAlbumModeSelected;
private CharSequence [] mAlbumModes;
@@ -107,7 +110,7 @@ public class GalleryActionBar implements OnNavigationListener {
R.string.group_by_tags)
};
- private class ClusterAdapter extends BaseAdapter {
+ /*private class ClusterAdapter extends BaseAdapter {
@Override
public int getCount() {
@@ -134,9 +137,9 @@ public class GalleryActionBar implements OnNavigationListener {
view.setText(sClusterItems[position].spinnerTitle);
return convertView;
}
- }
+ }*/
- private class AlbumModeAdapter extends BaseAdapter {
+ /*private class AlbumModeAdapter extends BaseAdapter {
@Override
public int getCount() {
return mAlbumModes.length;
@@ -174,7 +177,7 @@ public class GalleryActionBar implements OnNavigationListener {
view.setText((CharSequence) getItem(position));
return convertView;
}
- }
+ }*/
public static String getClusterByTypeString(Context context, int type) {
for (ActionItem item : sClusterItems) {
@@ -210,104 +213,105 @@ public class GalleryActionBar implements OnNavigationListener {
return mActionBar != null ? mActionBar.getHeight() : 0;
}
- public void setClusterItemEnabled(int id, boolean enabled) {
- for (ActionItem item : sClusterItems) {
- if (item.action == id) {
- item.enabled = enabled;
- return;
- }
- }
- }
-
- public void setClusterItemVisibility(int id, boolean visible) {
- for (ActionItem item : sClusterItems) {
- if (item.action == id) {
- item.visible = visible;
- return;
- }
- }
- }
-
- public int getClusterTypeAction() {
- return sClusterItems[mCurrentIndex].action;
- }
-
- public void enableClusterMenu(int action, ClusterRunner runner) {
- if (mActionBar != null) {
- // Don't set cluster runner until action bar is ready.
- mClusterRunner = null;
- mActionBar.setListNavigationCallbacks(mAdapter, this);
- mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
- setSelectedAction(action);
- mClusterRunner = runner;
- }
- }
+// public void setClusterItemEnabled(int id, boolean enabled) {
+// for (ActionItem item : sClusterItems) {
+// if (item.action == id) {
+// item.enabled = enabled;
+// return;
+// }
+// }
+// }
+
+// public void setClusterItemVisibility(int id, boolean visible) {
+// for (ActionItem item : sClusterItems) {
+// if (item.action == id) {
+// item.visible = visible;
+// return;
+// }
+// }
+// }
+
+// public int getClusterTypeAction() {
+// return sClusterItems[mCurrentIndex].action;
+// }
+
+// public void enableClusterMenu(int action, ClusterRunner runner) {
+// if (mActionBar != null) {
+// // Don't set cluster runner until action bar is ready.
+// mClusterRunner = null;
+//// mActionBar.setListNavigationCallbacks(mAdapter, this);
+// mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
+// setSelectedAction(action);
+// mClusterRunner = runner;
+// }
+// }
// The only use case not to hideMenu in this method is to ensure
// all elements disappear at the same time when exiting gallery.
// hideMenu should always be true in all other cases.
- public void disableClusterMenu(boolean hideMenu) {
- if (mActionBar != null) {
- mClusterRunner = null;
- if (hideMenu) {
- mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
- }
- }
- }
+// public void disableClusterMenu(boolean hideMenu) {
+// if (mActionBar != null) {
+// mClusterRunner = null;
+// if (hideMenu) {
+// mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
+// }
+// }
+// }
public void onConfigurationChanged() {
if (mActionBar != null && mAlbumModeListener != null) {
- OnAlbumModeSelectedListener listener = mAlbumModeListener;
- enableAlbumModeMenu(mLastAlbumModeSelected, listener);
- }
- }
-
- public void enableAlbumModeMenu(int selected, OnAlbumModeSelectedListener listener) {
- if (mActionBar != null) {
- if (mAlbumModeAdapter == null) {
- // Initialize the album mode options if they haven't been already
- Resources res = mActivity.getResources();
- mAlbumModes = new CharSequence[] {
- res.getString(R.string.switch_photo_filmstrip),
- res.getString(R.string.switch_photo_grid)};
- mAlbumModeAdapter = new AlbumModeAdapter();
- }
- mAlbumModeListener = null;
- mLastAlbumModeSelected = selected;
- mActionBar.setListNavigationCallbacks(mAlbumModeAdapter, this);
- mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
- mActionBar.setSelectedNavigationItem(selected);
- mAlbumModeListener = listener;
- }
- }
+// OnAlbumModeSelectedListener listener = mAlbumModeListener;
+// enableAlbumModeMenu(mLastAlbumModeSelected, listener);
- public void disableAlbumModeMenu(boolean hideMenu) {
- if (mActionBar != null) {
- mAlbumModeListener = null;
- if (hideMenu) {
- mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
- }
}
}
- public void showClusterDialog(final ClusterRunner clusterRunner) {
- createDialogData();
- final ArrayList<Integer> actions = mActions;
- new AlertDialog.Builder(mContext).setTitle(R.string.group_by).setItems(
- mTitles, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- // Need to lock rendering when operations invoked by system UI (main thread) are
- // modifying slot data used in GL thread for rendering.
- mActivity.getGLRoot().lockRenderThread();
- try {
- clusterRunner.doCluster(actions.get(which).intValue());
- } finally {
- mActivity.getGLRoot().unlockRenderThread();
- }
- }
- }).create().show();
- }
+// public void enableAlbumModeMenu(int selected, OnAlbumModeSelectedListener listener) {
+// if (mActionBar != null) {
+// if (mAlbumModeAdapter == null) {
+// // Initialize the album mode options if they haven't been already
+// Resources res = mActivity.getResources();
+// mAlbumModes = new CharSequence[] {
+// res.getString(R.string.switch_photo_filmstrip),
+// res.getString(R.string.switch_photo_grid)};
+// mAlbumModeAdapter = new AlbumModeAdapter();
+// }
+// mAlbumModeListener = null;
+// mLastAlbumModeSelected = selected;
+// mActionBar.setListNavigationCallbacks(mAlbumModeAdapter, this);
+// mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
+// mActionBar.setSelectedNavigationItem(selected);
+// mAlbumModeListener = listener;
+// }
+// }
+
+// public void disableAlbumModeMenu(boolean hideMenu) {
+// if (mActionBar != null) {
+// mAlbumModeListener = null;
+// if (hideMenu) {
+// mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
+// }
+// }
+// }
+
+// public void showClusterDialog(final ClusterRunner clusterRunner) {
+// createDialogData();
+// final ArrayList<Integer> actions = mActions;
+// new AlertDialog.Builder(mContext).setTitle(R.string.group_by).setItems(
+// mTitles, new DialogInterface.OnClickListener() {
+// @Override
+// public void onClick(DialogInterface dialog, int which) {
+// // Need to lock rendering when operations invoked by system UI (main thread) are
+// // modifying slot data used in GL thread for rendering.
+// mActivity.getGLRoot().lockRenderThread();
+// try {
+// clusterRunner.doCluster(actions.get(which).intValue());
+// } finally {
+// mActivity.getGLRoot().unlockRenderThread();
+// }
+// }
+// }).create().show();
+// }
@TargetApi(ApiHelper.VERSION_CODES.ICE_CREAM_SANDWICH)
private void setHomeButtonEnabled(boolean enabled) {
@@ -355,39 +359,39 @@ public class GalleryActionBar implements OnNavigationListener {
if (mActionBar != null) mActionBar.removeOnMenuVisibilityListener(listener);
}
- public boolean setSelectedAction(int type) {
- if (mActionBar == null) return false;
-
- for (int i = 0, n = sClusterItems.length; i < n; i++) {
- ActionItem item = sClusterItems[i];
- if (item.action == type) {
- mActionBar.setSelectedNavigationItem(i);
- mCurrentIndex = i;
- return true;
- }
- }
- return false;
- }
-
- @Override
- public boolean onNavigationItemSelected(int itemPosition, long itemId) {
- if (itemPosition != mCurrentIndex && mClusterRunner != null
- || mAlbumModeListener != null) {
- // Need to lock rendering when operations invoked by system UI (main thread) are
- // modifying slot data used in GL thread for rendering.
- mActivity.getGLRoot().lockRenderThread();
- try {
- if (mAlbumModeListener != null) {
- mAlbumModeListener.onAlbumModeSelected(itemPosition);
- } else {
- mClusterRunner.doCluster(sClusterItems[itemPosition].action);
- }
- } finally {
- mActivity.getGLRoot().unlockRenderThread();
- }
- }
- return false;
- }
+// public boolean setSelectedAction(int type) {
+// if (mActionBar == null) return false;
+//
+// for (int i = 0, n = sClusterItems.length; i < n; i++) {
+// ActionItem item = sClusterItems[i];
+// if (item.action == type) {
+// mActionBar.setSelectedNavigationItem(i);
+// mCurrentIndex = i;
+// return true;
+// }
+// }
+// return false;
+// }
+
+// @Override
+// public boolean onNavigationItemSelected(int itemPosition, long itemId) {
+// if (itemPosition != mCurrentIndex && mClusterRunner != null
+// || mAlbumModeListener != null) {
+// // Need to lock rendering when operations invoked by system UI (main thread) are
+// // modifying slot data used in GL thread for rendering.
+// mActivity.getGLRoot().lockRenderThread();
+// try {
+// if (mAlbumModeListener != null) {
+// mAlbumModeListener.onAlbumModeSelected(itemPosition);
+// } else {
+// mClusterRunner.doCluster(sClusterItems[itemPosition].action);
+// }
+// } finally {
+// mActivity.getGLRoot().unlockRenderThread();
+// }
+// }
+// return false;
+// }
private Menu mActionBarMenu;
private ShareActionProvider mSharePanoramaActionProvider;
@@ -435,4 +439,17 @@ public class GalleryActionBar implements OnNavigationListener {
onShareListener);
}
}
+
+ public void setBackGroundTransparent()
+ {
+ mActionBar.setBackgroundDrawable(new ColorDrawable(Color.argb(66, 0, 0, 0)));
+
+ }
+
+ public void setBackGroundDefault()
+ {
+ mActionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#e53935")));
+ }
+
+
}
diff --git a/src/com/android/gallery3d/app/GalleryActivity.java b/src/com/android/gallery3d/app/GalleryActivity.java
index 4071a082b..d7ee8fcf9 100644
--- a/src/com/android/gallery3d/app/GalleryActivity.java
+++ b/src/com/android/gallery3d/app/GalleryActivity.java
@@ -1,4 +1,7 @@
/*
+ * Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ * Not a Contribution
+ *
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,7 +20,7 @@
package com.android.gallery3d.app;
import java.util.Locale;
-
+import android.os.Handler;
import android.app.Dialog;
import android.content.ContentResolver;
import android.content.ContentUris;
@@ -36,13 +39,30 @@ import android.os.SystemProperties;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.util.Log;
+import android.view.Gravity;
import android.view.InputDevice;
+import android.view.LayoutInflater;
+import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
+import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
+import android.view.View.OnClickListener;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.TextView;
import android.widget.Toast;
+import android.widget.Toolbar;
+import android.widget.Toolbar.OnMenuItemClickListener;
+import android.support.v4.widget.DrawerLayout;
+import android.support.v4.widget.DrawerLayout.DrawerListener;
+import android.text.TextUtils;
+import java.util.ArrayList;
import com.android.gallery3d.R;
import com.android.gallery3d.common.Utils;
import com.android.gallery3d.data.DataManager;
@@ -74,19 +94,24 @@ public final class GalleryActivity extends AbstractGalleryActivity implements On
private static final String TAG = "GalleryActivity";
private Dialog mVersionCheckDialog;
+ private ListView mDrawerListView;
+ private DrawerLayout mDrawerLayout;
+ public static boolean mIsparentActivityFInishing;
+ NavigationDrawerListAdapter mNavigationAdapter;
+ public Toolbar mToolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_ACTION_BAR);
- requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
+ requestWindowFeature(Window.FEATURE_NO_TITLE);
if (getIntent().getBooleanExtra(KEY_DISMISS_KEYGUARD, false)) {
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
}
- setContentView(R.layout.main);
+ setContentView(R.layout.gallery_main);
+ initView();
if (savedInstanceState != null) {
getStateManager().restoreFromState(savedInstanceState);
@@ -99,6 +124,208 @@ public final class GalleryActivity extends AbstractGalleryActivity implements On
startBulkMpoProcess();
}
+ private static class ActionItem {
+ public int action;
+ public int title;
+ public int icon;
+
+ public ActionItem(int action, int title, int icon) {
+ this.action = action;
+ this.title = title;
+ this.icon = icon;
+ }
+ }
+
+ private static final ActionItem[] sActionItems = new ActionItem[] {
+ new ActionItem(FilterUtils.CLUSTER_BY_TIME,
+ R.string.timeline_title, R.drawable.timeline),
+ new ActionItem(FilterUtils.CLUSTER_BY_ALBUM, R.string.albums_title,
+ R.drawable.albums),
+ new ActionItem(FilterUtils.CLUSTER_BY_VIDEOS,
+ R.string.videos_title, R.drawable.videos) };
+
+ public void initView() {
+ mDrawerListView = (ListView) findViewById(R.id.navList);
+ mNavigationAdapter = new NavigationDrawerListAdapter(this);
+ mDrawerListView.setAdapter(mNavigationAdapter);
+ mToolbar = (Toolbar) findViewById(R.id.toolbar);
+ setActionBar(mToolbar);
+
+ mDrawerListView
+ .setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view,
+ int position, long id) {
+ getGLRoot().lockRenderThread();
+ showScreen(position);
+
+ mNavigationAdapter.setClickPosition(position);
+ mDrawerListView.invalidateViews();
+ mDrawerLayout.closeDrawer(Gravity.LEFT);
+ getGLRoot().unlockRenderThread();
+ }
+ });
+ mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
+ mDrawerLayout.setDrawerListener(new DrawerListener() {
+
+ @Override
+ public void onDrawerStateChanged(int arg0) {
+ if (getStateManager().getStateCount() == 1)
+ {
+ mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
+ } else {
+ mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
+ }
+ }
+
+ @Override
+ public void onDrawerSlide(View arg0, float arg1) {
+
+ }
+
+ @Override
+ public void onDrawerOpened(View arg0) {
+
+ }
+
+ @Override
+ public void onDrawerClosed(View arg0) {
+
+ }
+ });
+ mToolbar.setNavigationContentDescription("drawer");
+ mToolbar.setNavigationOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ if (mToolbar.getNavigationContentDescription().equals("drawer")) {
+ mDrawerLayout.openDrawer(Gravity.LEFT);
+
+ } else {
+ mToolbar.setNavigationContentDescription("drawer");
+ mToolbar.setNavigationIcon(R.drawable.drawer);
+ onBackPressed();
+ }
+ }
+ });
+ setToolbar(mToolbar);
+ }
+
+ public void toggleNavDrawer(boolean setDrawerVisibility)
+ {
+ if (mDrawerLayout != null) {
+ if (setDrawerVisibility) {
+ mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
+ }
+ else {
+ mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
+ }
+ }
+ }
+
+ public void showScreen(int position) {
+ if (position > 2) {
+ position = 1;
+ }
+ // Bundle data = new Bundle();
+ // int clusterType;
+ // String newPath;
+ String basePath = getDataManager().getTopSetPath(
+ DataManager.INCLUDE_ALL);
+ switch (position) {
+
+ case 0:
+ startTimelinePage(); //Timeline view
+ break;
+ case 1:
+ startAlbumPage(); // Albums View
+ break;
+ case 2:
+ startVideoPage(); // Videos view
+ break;
+ default:
+ break;
+ }
+
+ mNavigationAdapter.setClickPosition(position);
+
+ mDrawerListView.invalidateViews();
+ mToolbar.setTitle(getResources().getStringArray(
+ R.array.title_array_nav_items)[position]);
+
+ mDrawerListView.setItemChecked(position, true);
+ mDrawerListView.setSelection(position);
+ mToolbar.setNavigationContentDescription("drawer");
+ mToolbar.setNavigationIcon(R.drawable.drawer);
+ }
+
+ private class NavigationDrawerListAdapter extends BaseAdapter {
+
+ private int curTab = 0;
+ Context mContext;
+
+ public NavigationDrawerListAdapter(Context context) {
+ mContext = context;
+
+ }
+
+ @Override
+ public int getCount() {
+ return sActionItems.length;
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return sActionItems[position];
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return 0;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ View view;
+
+ if (convertView == null) {
+ LayoutInflater inflater = (LayoutInflater) mContext
+ .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ view = inflater.inflate(
+ com.android.gallery3d.R.layout.drawer_list_item, null);
+ } else {
+ view = convertView;
+ }
+
+ TextView titleView = (TextView) view.findViewById(R.id.itemTitle);
+ ImageView iconView = (ImageView) view.findViewById(R.id.ivItem);
+
+ titleView.setText(sActionItems[position].title);
+ iconView.setImageResource(sActionItems[position].icon);
+
+ if (curTab == position) {
+ view.setBackgroundResource(R.drawable.drawer_item_selected_bg);
+ } else {
+ view.setBackgroundColor(android.R.color.transparent);
+ }
+
+ return view;
+ }
+
+ public void setClickPosition(int position) {
+ curTab = position;
+ }
+ }
+
+ public static int getActionTitle(Context context, int type) {
+ for (ActionItem item : sActionItems) {
+ if (item.action == type) {
+ return item.title;
+ }
+ }
+ return -1;
+ }
+
private void initializeByIntent() {
Intent intent = getIntent();
String action = intent.getAction();
@@ -120,16 +347,72 @@ public final class GalleryActivity extends AbstractGalleryActivity implements On
|| ACTION_REVIEW.equalsIgnoreCase(action)){
startViewAction(intent);
} else {
- startDefaultPage();
+ startTimelinePage();
+ mToolbar.setTitle(R.string.albums_title);
}
}
- public void startDefaultPage() {
+ public void startAlbumPage() {
PicasaSource.showSignInReminder(this);
Bundle data = new Bundle();
- data.putString(AlbumSetPage.KEY_MEDIA_PATH,
- getDataManager().getTopSetPath(DataManager.INCLUDE_ALL));
- getStateManager().startState(AlbumSetPage.class, data);
+ int clusterType = FilterUtils.CLUSTER_BY_ALBUM;
+ data.putString(AlbumSetPage.KEY_MEDIA_PATH, getDataManager()
+ .getTopSetPath(DataManager.INCLUDE_ALL));
+ if (getStateManager().getStateCount() == 0)
+ getStateManager().startState(AlbumSetPage.class, data);
+ else {
+ ActivityState state = getStateManager().getTopState();
+ String oldClass = state.getClass().getSimpleName();
+ String newClass = AlbumSetPage.class.getSimpleName();
+ if (!oldClass.equals(newClass)) {
+ getStateManager().switchState(getStateManager().getTopState(),
+ AlbumSetPage.class, data);
+ }
+ }
+ mVersionCheckDialog = PicasaSource.getVersionCheckDialog(this);
+ if (mVersionCheckDialog != null) {
+ mVersionCheckDialog.setOnCancelListener(this);
+ }
+ }
+
+ private void startTimelinePage() {
+ String newBPath = getDataManager().getTopSetPath(DataManager.INCLUDE_ALL);
+ String newPath = FilterUtils.switchClusterPath(newBPath, FilterUtils.CLUSTER_BY_TIME);
+ Bundle data = new Bundle();
+ data.putString(TimeLinePage.KEY_MEDIA_PATH, newPath);
+ if (getStateManager().getStateCount() == 0)
+ getStateManager().startState(TimeLinePage.class, data);
+ else {
+ ActivityState state = getStateManager().getTopState();
+ String oldClass = state.getClass().getSimpleName();
+ String newClass = TimeLinePage.class.getSimpleName();
+ if (!oldClass.equals(newClass)) {
+ getStateManager().switchState(getStateManager().getTopState(),
+ TimeLinePage.class, data);
+ }
+ }
+ mVersionCheckDialog = PicasaSource.getVersionCheckDialog(this);
+ if (mVersionCheckDialog != null) {
+ mVersionCheckDialog.setOnCancelListener(this);
+ }
+ }
+
+ public void startVideoPage() {
+ PicasaSource.showSignInReminder(this);
+ String basePath = getDataManager().getTopSetPath(
+ DataManager.INCLUDE_ALL);
+ Bundle data = new Bundle();
+ int clusterType = FilterUtils.CLUSTER_BY_VIDEOS;
+ String newPath = FilterUtils.switchClusterPath(basePath, clusterType);
+ data.putString(AlbumPage.KEY_MEDIA_PATH, newPath);
+ data.putBoolean(AlbumPage.KEY_IS_VIDEOS_SCREEN, true);
+ ActivityState state = getStateManager().getTopState();
+ String oldClass = state.getClass().getSimpleName();
+ String newClass = AlbumPage.class.getSimpleName();
+ if (!oldClass.equals(newClass)) {
+ getStateManager().switchState(getStateManager().getTopState(),
+ AlbumPage.class, data);
+ }
mVersionCheckDialog = PicasaSource.getVersionCheckDialog(this);
if (mVersionCheckDialog != null) {
mVersionCheckDialog.setOnCancelListener(this);
@@ -224,7 +507,7 @@ public final class GalleryActivity extends AbstractGalleryActivity implements On
getStateManager().startState(AlbumSetPage.class, data);
}
} else {
- startDefaultPage();
+ startTimelinePage();
}
} else {
Path itemPath = dm.findPathByUri(uri, contentType);
diff --git a/src/com/android/gallery3d/app/MovieActivity.java b/src/com/android/gallery3d/app/MovieActivity.java
index beab0e5ef..87c224208 100644
--- a/src/com/android/gallery3d/app/MovieActivity.java
+++ b/src/com/android/gallery3d/app/MovieActivity.java
@@ -37,7 +37,9 @@ import android.content.pm.ActivityInfo;
import android.database.Cursor;
//import android.drm.DrmHelper;
import android.graphics.Bitmap;
+import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.ColorDrawable;
import android.media.AudioManager;
import android.media.audiofx.AudioEffect;
import android.media.audiofx.AudioEffect.Descriptor;
@@ -270,6 +272,7 @@ public class MovieActivity extends Activity {
actionBar.setDisplayOptions(
ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE,
ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE);
+ actionBar.setBackgroundDrawable(new ColorDrawable(Color.argb(66, 0, 0, 0)));
actionBar.addOnMenuVisibilityListener(new OnMenuVisibilityListener() {
@Override
diff --git a/src/com/android/gallery3d/app/PhotoPage.java b/src/com/android/gallery3d/app/PhotoPage.java
index f72505670..15b70d330 100644
--- a/src/com/android/gallery3d/app/PhotoPage.java
+++ b/src/com/android/gallery3d/app/PhotoPage.java
@@ -82,7 +82,7 @@ import java.util.Locale;
public abstract class PhotoPage extends ActivityState implements
PhotoView.Listener, AppBridge.Server, ShareActionProvider.OnShareTargetSelectedListener,
- PhotoPageBottomControls.Delegate, GalleryActionBar.OnAlbumModeSelectedListener {
+ PhotoPageBottomControls.Delegate {
private static final String TAG = "PhotoPage";
private static final int MSG_HIDE_BARS = 1;
@@ -123,7 +123,8 @@ public abstract class PhotoPage extends ActivityState implements
public static final String KEY_SHOW_WHEN_LOCKED = "show_when_locked";
public static final String KEY_IN_CAMERA_ROLL = "in_camera_roll";
public static final String KEY_READONLY = "read-only";
-
+ public static final String KEY_FROM_VIDEOS_SCREEN = "from-video-screen";
+ public static final String KEY_FROM_TIMELINE_SCREEN = "from-timeline-screen";
// Bundle key, used for checking whether it is from widget
public static final String KEY_IS_FROM_WIDGET = "is_from_widget";
@@ -178,6 +179,8 @@ public abstract class PhotoPage extends ActivityState implements
private boolean mStartInFilmstrip;
private boolean mHasCameraScreennailOrPlaceholder = false;
private boolean mRecenterCameraOnResume = true;
+ private boolean mIsFromVideoScreen;
+ private boolean mIsFromTimelineScreen;
// These are only valid after the panorama callback
private boolean mIsPanorama;
@@ -202,6 +205,10 @@ public abstract class PhotoPage extends ActivityState implements
private int mLastSystemUiVis = 0;
+ private ShareActionProvider mShareActionProvider;
+ private Intent mShareIntent;
+ private boolean mIsPhotoChanged = true;
+
private final PanoramaSupportCallback mUpdatePanoramaMenuItemsCallback = new PanoramaSupportCallback() {
@Override
public void panoramaInfoAvailable(MediaObject mediaObject, boolean isPanorama,
@@ -270,6 +277,7 @@ public abstract class PhotoPage extends ActivityState implements
public void onCreate(Bundle data, Bundle restoreState) {
super.onCreate(data, restoreState);
mActionBar = mActivity.getGalleryActionBar();
+ mActionBar.setBackGroundTransparent();
mSelectionManager = new SelectionManager(mActivity, false);
mMenuExecutor = new MenuExecutor(mActivity, mSelectionManager);
@@ -279,6 +287,8 @@ public abstract class PhotoPage extends ActivityState implements
mApplication = (GalleryApp) ((Activity) mActivity).getApplication();
mOrientationManager = mActivity.getOrientationManager();
mActivity.getGLRoot().setOrientationSource(mOrientationManager);
+ mIsFromVideoScreen = data.getBoolean(KEY_FROM_VIDEOS_SCREEN, false);
+ mIsFromTimelineScreen = data.getBoolean(KEY_FROM_TIMELINE_SCREEN, false);
mHandler = new SynchronizedHandler(mActivity.getGLRoot()) {
@Override
@@ -469,6 +479,9 @@ public abstract class PhotoPage extends ActivityState implements
mSetPathString = "/filter/delete/{" + mSetPathString + "}";
mMediaSet = (FilterDeleteSet) mActivity.getDataManager()
.getMediaSet(mSetPathString);
+ if(mMediaSet != null && mIsFromTimelineScreen) {
+ mMediaSet.setClusterKind(-1);
+ }
if (mMediaSet == null) {
Log.w(TAG, "failed to restore " + mSetPathString);
}
@@ -527,6 +540,7 @@ public abstract class PhotoPage extends ActivityState implements
public void onPhotoChanged(int index, Path item) {
int oldIndex = mCurrentIndex;
mCurrentIndex = index;
+ mIsPhotoChanged = true;
if (mHasCameraScreennailOrPlaceholder) {
if (mCurrentIndex > 0) {
@@ -552,7 +566,10 @@ public abstract class PhotoPage extends ActivityState implements
if (!mSkipUpdateCurrentPhoto) {
if (item != null) {
MediaItem photo = mModel.getMediaItem(0);
- if (photo != null) updateCurrentPhoto(photo);
+ if (photo != null) {
+ mActionBar.setTitle(photo.getName());
+ updateCurrentPhoto(photo);
+ }
}
updateBars();
}
@@ -635,19 +652,36 @@ public abstract class PhotoPage extends ActivityState implements
if (mCurrentPhoto == null) {
return false;
}
- switch(control) {
- case R.id.photopage_bottom_control_edit:
- return mHaveImageEditor && mShowBars && !mReadOnlyView
- && !mPhotoView.getFilmMode()
- && (mCurrentPhoto.getSupportedOperations() & MediaItem.SUPPORT_EDIT) != 0
- && mCurrentPhoto.getMediaType() == MediaObject.MEDIA_TYPE_IMAGE;
- case R.id.photopage_bottom_control_panorama:
- return mIsPanorama;
- case R.id.photopage_bottom_control_tiny_planet:
- return mHaveImageEditor && mShowBars
- && mIsPanorama360 && !mPhotoView.getFilmMode();
- default:
- return false;
+ if (mIsPhotoChanged) {
+ if (mCurrentPhoto.getMediaType() == MediaObject.MEDIA_TYPE_VIDEO) {
+ mBottomControls.setSharePositionForVideo(mActivity);
+ } else {
+ mBottomControls.setSharePositionForImage();
+ }
+ mIsPhotoChanged = false;
+ }
+ switch (control) {
+ case R.id.photopage_bottom_controls:
+ return mShowBars;
+ case R.id.photopage_bottom_control_edit:
+ return mHaveImageEditor
+ && mShowBars
+ && !mReadOnlyView
+ && !mPhotoView.getFilmMode()
+ && (mCurrentPhoto.getSupportedOperations() & MediaItem.SUPPORT_EDIT) != 0
+ && mCurrentPhoto.getMediaType() == MediaObject.MEDIA_TYPE_IMAGE;
+ // case R.id.photopage_bottom_control_panorama:
+ // return mIsPanorama;
+ // case R.id.photopage_bottom_control_tiny_planet:
+ // return mHaveImageEditor && mShowBars
+ // && mIsPanorama360 && !mPhotoView.getFilmMode();
+ case R.id.photopage_bottom_control_share:
+ mShareIntent = new Intent(Intent.ACTION_SEND);
+ return mShowBars;
+ case R.id.photopage_bottom_control_delete:
+ return mShowBars;
+ default:
+ return false;
}
}
@@ -657,15 +691,39 @@ public abstract class PhotoPage extends ActivityState implements
case R.id.photopage_bottom_control_edit:
launchPhotoEditor();
return;
- case R.id.photopage_bottom_control_panorama:
- mActivity.getPanoramaViewHelper()
- .showPanorama(mCurrentPhoto.getContentUri());
- return;
- case R.id.photopage_bottom_control_tiny_planet:
- launchTinyPlanet();
- return;
- default:
+ case R.id.photopage_bottom_control_share:
+ if (mModel != null && mModel.getMediaItem(0) != null) {
+ Uri uri = Uri.parse(mModel.getMediaItem(0).getFilePath());
+ mShareIntent.setType(MenuExecutor.getMimeType(mModel
+ .getMediaItem(0).getMediaType()));
+ mShareIntent.putExtra(Intent.EXTRA_STREAM, uri);
+ mActivity.startActivity(Intent.createChooser(mShareIntent,
+ "Share via"));
+ }
+ return;
+
+ case R.id.photopage_bottom_control_delete:
+ String confirmMsg = null;
+ confirmMsg = mActivity.getResources().getQuantityString(
+ R.plurals.delete_selection, 1);
+ if (mModel != null && mModel.getMediaItem(0) != null) {
+ Path path = mModel.getMediaItem(0).getPath();
+ mSelectionManager.deSelectAll();
+ mSelectionManager.toggle(path);
+ MenuItem item = null;
+ mMenuExecutor.onMenuClicked(item, confirmMsg,
+ mConfirmDialogListener);
+ }
return;
+ // case R.id.photopage_bottom_control_panorama:
+ // mActivity.getPanoramaViewHelper()
+ // .showPanorama(mCurrentPhoto.getContentUri());
+ // return;
+ // case R.id.photopage_bottom_control_tiny_planet:
+ // launchTinyPlanet();
+ // return;
+ default:
+ return;
}
}
@@ -950,6 +1008,17 @@ public abstract class PhotoPage extends ActivityState implements
onUpPressed();
} else {
super.onBackPressed();
+ mActionBar.setBackGroundDefault();
+ int count = mActivity.getStateManager().getStateCount();
+ if(mIsFromTimelineScreen) {
+ mMediaSet.setClusterKind(0);
+ }
+ if (mIsFromVideoScreen || count == 1 || mIsFromTimelineScreen) {
+ mActivity.getToolbar().setNavigationContentDescription(
+ "drawer");
+ mActivity.getToolbar().setNavigationIcon(R.drawable.drawer);
+ ((GalleryActivity)mActivity).toggleNavDrawer(true);
+ }
}
}
}
@@ -1024,7 +1093,7 @@ public abstract class PhotoPage extends ActivityState implements
mActionBar.createActionBarMenu(R.menu.photo, menu);
mHaveImageEditor = GalleryUtils.isEditorAvailable(mActivity, "image/*");
updateMenuOperations();
- mActionBar.setTitle(mMediaSet != null ? mMediaSet.getName() : "");
+ //mActionBar.setTitle(mMediaSet != null ? mMediaSet.getName() : "");
return true;
}
@@ -1124,7 +1193,7 @@ public abstract class PhotoPage extends ActivityState implements
SlideshowPage.class, REQUEST_SLIDESHOW, data);
return true;
}
- case R.id.action_crop: {
+ /*case R.id.action_crop: {
Activity activity = mActivity;
Intent intent = new Intent(CropActivity.CROP_ACTION);
intent.setClass(activity, CropActivity.class);
@@ -1134,7 +1203,7 @@ public abstract class PhotoPage extends ActivityState implements
? REQUEST_CROP_PICASA
: REQUEST_CROP);
return true;
- }
+ }*/
case R.id.action_trim: {
Intent intent = new Intent(mActivity, TrimVideo.class);
intent.setData(manager.getContentUri(path));
@@ -1160,10 +1229,10 @@ public abstract class PhotoPage extends ActivityState implements
launchPhotoEditor();
return true;
}
- case R.id.action_simple_edit: {
+ /*case R.id.action_simple_edit: {
launchSimpleEditor();
return true;
- }
+ }*/
case R.id.action_details: {
if (mShowDetails) {
hideDetails();
@@ -1180,8 +1249,8 @@ public abstract class PhotoPage extends ActivityState implements
confirmMsg = mActivity.getResources().getQuantityString(
R.plurals.delete_selection, 1);
case R.id.action_setas:
- case R.id.action_rotate_ccw:
- case R.id.action_rotate_cw:
+ //case R.id.action_rotate_ccw:
+ //case R.id.action_rotate_cw:
case R.id.action_show_on_map:
mSelectionManager.deSelectAll();
mSelectionManager.toggle(path);
@@ -1372,11 +1441,11 @@ public abstract class PhotoPage extends ActivityState implements
case REQUEST_EDIT:
setCurrentPhotoByIntent(data);
break;
- case REQUEST_CROP:
+ /*case REQUEST_CROP:
if (resultCode == Activity.RESULT_OK) {
setCurrentPhotoByIntent(data);
}
- break;
+ break;*/
case REQUEST_CROP_PICASA: {
if (resultCode == Activity.RESULT_OK) {
Context context = mActivity.getAndroidContext();
@@ -1422,9 +1491,9 @@ public abstract class PhotoPage extends ActivityState implements
mHandler.removeMessages(MSG_REFRESH_BOTTOM_CONTROLS);
refreshBottomControlsWhenReady();
mActionBar.removeOnMenuVisibilityListener(mMenuVisibilityListener);
- if (mShowSpinner) {
- mActionBar.disableAlbumModeMenu(true);
- }
+ // if (mShowSpinner) {
+ // mActionBar.disableAlbumModeMenu(true);
+ // }
onCommitDeleteImage();
mMenuExecutor.pause();
if (mMediaSet != null) mMediaSet.clearDeletion();
@@ -1438,14 +1507,14 @@ public abstract class PhotoPage extends ActivityState implements
@Override
public void onFilmModeChanged(boolean enabled) {
refreshBottomControlsWhenReady();
- if (mShowSpinner) {
+ /*if (mShowSpinner) {
if (enabled) {
mActionBar.enableAlbumModeMenu(
GalleryActionBar.ALBUM_FILMSTRIP_MODE_SELECTED, this);
} else {
mActionBar.disableAlbumModeMenu(true);
}
- }
+ }*/
if (enabled) {
mHandler.removeMessages(MSG_HIDE_BARS);
UsageStatistics.onContentViewChanged(
@@ -1538,13 +1607,17 @@ public abstract class PhotoPage extends ActivityState implements
mModel.resume();
mPhotoView.resume();
mActionBar.setDisplayOptions(
- ((mSecureAlbum == null) && (mSetPathString != null)), false);
+ ((mSecureAlbum == null) && (mSetPathString != null)), true);
mActionBar.addOnMenuVisibilityListener(mMenuVisibilityListener);
refreshBottomControlsWhenReady();
- if (mShowSpinner && mPhotoView.getFilmMode()) {
- mActionBar.enableAlbumModeMenu(
- GalleryActionBar.ALBUM_FILMSTRIP_MODE_SELECTED, this);
- }
+ if (((mSecureAlbum == null) && (mSetPathString != null))) {
+ mActivity.getToolbar().setNavigationContentDescription("back");
+ mActivity.getToolbar().setNavigationIcon(R.drawable.back);
+ }
+ // if (mShowSpinner && mPhotoView.getFilmMode()) {
+ // mActionBar.enableAlbumModeMenu(
+ // GalleryActionBar.ALBUM_FILMSTRIP_MODE_SELECTED, this);
+ // }
if (!mShowBars) {
mActionBar.hide();
mActivity.getGLRoot().setLightsOutMode(true);
@@ -1595,12 +1668,12 @@ public abstract class PhotoPage extends ActivityState implements
}
}
- @Override
+ /*@Override
public void onAlbumModeSelected(int mode) {
if (mode == GalleryActionBar.ALBUM_GRID_MODE_SELECTED) {
switchToGrid();
}
- }
+ }*/
@Override
public void refreshBottomControlsWhenReady() {
diff --git a/src/com/android/gallery3d/app/PhotoPageBottomControls.java b/src/com/android/gallery3d/app/PhotoPageBottomControls.java
index 57f8b6f35..f12f6fb69 100644
--- a/src/com/android/gallery3d/app/PhotoPageBottomControls.java
+++ b/src/com/android/gallery3d/app/PhotoPageBottomControls.java
@@ -17,6 +17,8 @@
package com.android.gallery3d.app;
import android.content.Context;
+import android.content.res.Resources;
+import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@@ -24,6 +26,7 @@ import android.view.ViewGroup;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.widget.RelativeLayout;
+import android.widget.ImageButton;
import com.android.gallery3d.R;
@@ -50,6 +53,9 @@ public class PhotoPageBottomControls implements OnClickListener {
private static final int CONTAINER_ANIM_DURATION_MS = 200;
private static final int CONTROL_ANIM_DURATION_MS = 150;
+ private ImageButton imgShare;
+ private RelativeLayout.LayoutParams defaultParams;
+
private static Animation getControlAnimForVisibility(boolean visible) {
Animation anim = visible ? new AlphaAnimation(0f, 1f)
: new AlphaAnimation(1f, 0f);
@@ -66,11 +72,16 @@ public class PhotoPageBottomControls implements OnClickListener {
mContainer = (ViewGroup) inflater
.inflate(R.layout.photopage_bottom_controls, mParentLayout, false);
mParentLayout.addView(mContainer);
-
+ imgShare = (ImageButton) mContainer
+ .findViewById(R.id.photopage_bottom_control_share);
+ defaultParams = (RelativeLayout.LayoutParams) imgShare
+ .getLayoutParams();
for (int i = mContainer.getChildCount() - 1; i >= 0; i--) {
View child = mContainer.getChildAt(i);
child.setOnClickListener(this);
mControlsVisible.put(child, false);
+ if (i == 0)
+ mControlsVisible.put(mContainer, false);
}
mContainerAnimIn.setDuration(CONTAINER_ANIM_DURATION_MS);
@@ -79,6 +90,30 @@ public class PhotoPageBottomControls implements OnClickListener {
mDelegate.refreshBottomControlsWhenReady();
}
+ public void setSharePositionForImage() {
+ RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) imgShare
+ .getLayoutParams();
+ params.removeRule(RelativeLayout.ALIGN_PARENT_START);
+ params.removeRule(RelativeLayout.ALIGN_PARENT_LEFT);
+ params.leftMargin = 0;
+ params.addRule(RelativeLayout.CENTER_IN_PARENT,-1);
+ imgShare.setLayoutParams(params);
+ }
+
+ public void setSharePositionForVideo(Context context) {
+ imgShare = (ImageButton) mContainer
+ .findViewById(R.id.photopage_bottom_control_share);
+ RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) imgShare
+ .getLayoutParams();
+ params.addRule(RelativeLayout.ALIGN_PARENT_START,-1);
+ Resources r = context.getResources();
+ int margin = (int) TypedValue.applyDimension(
+ TypedValue.COMPLEX_UNIT_DIP, 20, r.getDisplayMetrics());
+ params.leftMargin = margin;
+ imgShare.setLayoutParams(params);
+
+ }
+
private void hide() {
mContainer.clearAnimation();
mContainerAnimOut.reset();
diff --git a/src/com/android/gallery3d/data/ClusterAlbum.java b/src/com/android/gallery3d/data/ClusterAlbum.java
index 8681952bf..3f84cc903 100644
--- a/src/com/android/gallery3d/data/ClusterAlbum.java
+++ b/src/com/android/gallery3d/data/ClusterAlbum.java
@@ -17,6 +17,7 @@
package com.android.gallery3d.data;
import java.util.ArrayList;
+import com.android.gallery3d.util.GalleryUtils;
public class ClusterAlbum extends MediaSet implements ContentListener {
@SuppressWarnings("unused")
@@ -26,13 +27,22 @@ public class ClusterAlbum extends MediaSet implements ContentListener {
private DataManager mDataManager;
private MediaSet mClusterAlbumSet;
private MediaItem mCover;
+ private final int INVALID_COUNT = -1;
+ private int mImageCount = INVALID_COUNT;
+ private int mVideoCount = INVALID_COUNT;
+ private int mKind = -1;
+
+
+ private TimeLineTitleMediaItem mTimelineTitleMediaItem;
public ClusterAlbum(Path path, DataManager dataManager,
- MediaSet clusterAlbumSet) {
+ MediaSet clusterAlbumSet, int kind) {
super(path, nextVersionNumber());
mDataManager = dataManager;
mClusterAlbumSet = clusterAlbumSet;
mClusterAlbumSet.addContentListener(this);
+ mKind = kind;
+ mTimelineTitleMediaItem = new TimeLineTitleMediaItem(path);
}
public void setCoverMediaItem(MediaItem cover) {
@@ -48,12 +58,16 @@ public class ClusterAlbum extends MediaSet implements ContentListener {
mPaths = paths;
}
- ArrayList<Path> getMediaItems() {
+ public ArrayList<Path> getMediaItems() {
return mPaths;
}
public void setName(String name) {
mName = name;
+ mTimelineTitleMediaItem.setTitle(name);
+ /*if (mKind == ClusterSource.CLUSTER_ALBUMSET_TIME) {
+ mTimelineTitleMediaItem = new TimeLineTitleMediaItem(name);
+ }*/
}
@Override
@@ -63,12 +77,52 @@ public class ClusterAlbum extends MediaSet implements ContentListener {
@Override
public int getMediaItemCount() {
+ if (mKind == ClusterSource.CLUSTER_ALBUMSET_TIME) {
+ return mPaths.size()+1;
+ }
return mPaths.size();
}
+ public void setImageItemCount(int count) {
+ mImageCount = count;
+ if (mTimelineTitleMediaItem != null && mKind == ClusterSource.CLUSTER_ALBUMSET_TIME) {
+ mTimelineTitleMediaItem.setImageCount(count);
+ }
+ }
+
+ public void setVideoItemCount(int count) {
+ mVideoCount = count;
+ if (mTimelineTitleMediaItem != null && mKind == ClusterSource.CLUSTER_ALBUMSET_TIME) {
+ mTimelineTitleMediaItem.setVideoCount(count);
+ }
+ }
+
@Override
public ArrayList<MediaItem> getMediaItem(int start, int count) {
- return getMediaItemFromPath(mPaths, start, count, mDataManager);
+ //return getMediaItemFromPath(mPaths, start, count, mDataManager);
+ if (mKind == ClusterSource.CLUSTER_ALBUMSET_TIME) {
+ if (mPaths.size() <= 0) return null;
+ if (start == 0) {
+ ArrayList<MediaItem> mediaItemList = new ArrayList<MediaItem>();
+ mediaItemList.addAll(getMediaItemFromPath(mPaths, start, count - 1, mDataManager));
+ mediaItemList.add(0, mTimelineTitleMediaItem);
+ return mediaItemList;
+ } else {
+ return getMediaItemFromPath(mPaths, start - 1, count, mDataManager);
+ }
+ } else {
+ return getMediaItemFromPath(mPaths, start, count, mDataManager);
+ }
+ }
+
+ @Override
+ public int getImageItemCount() {
+ return mImageCount;
+ }
+
+ @Override
+ public int getVideoItemCount() {
+ return mVideoCount;
}
public static ArrayList<MediaItem> getMediaItemFromPath(
@@ -102,6 +156,9 @@ public class ClusterAlbum extends MediaSet implements ContentListener {
@Override
public int getTotalMediaItemCount() {
+ if (mKind == ClusterSource.CLUSTER_ALBUMSET_TIME) {
+ return mPaths.size()+1;
+ }
return mPaths.size();
}
@@ -140,4 +197,12 @@ public class ClusterAlbum extends MediaSet implements ContentListener {
public boolean isLeafAlbum() {
return true;
}
+
+ public TimeLineTitleMediaItem getTimelineTitle() {
+ return mTimelineTitleMediaItem;
+ }
+
+ public void setClusterKind(int kind) {
+ mKind = kind;
+ }
}
diff --git a/src/com/android/gallery3d/data/ClusterAlbumSet.java b/src/com/android/gallery3d/data/ClusterAlbumSet.java
index cb212ba36..c16b6bf79 100644
--- a/src/com/android/gallery3d/data/ClusterAlbumSet.java
+++ b/src/com/android/gallery3d/data/ClusterAlbumSet.java
@@ -20,9 +20,12 @@ import android.content.Context;
import android.net.Uri;
import com.android.gallery3d.app.GalleryApp;
-
+import com.android.gallery3d.util.GalleryUtils;
+import com.android.gallery3d.common.Utils;
import java.util.ArrayList;
import java.util.HashSet;
+import java.util.Arrays;
+import java.util.HashMap;
public class ClusterAlbumSet extends MediaSet implements ContentListener {
@SuppressWarnings("unused")
@@ -33,6 +36,10 @@ public class ClusterAlbumSet extends MediaSet implements ContentListener {
private ArrayList<ClusterAlbum> mAlbums = new ArrayList<ClusterAlbum>();
private boolean mFirstReloadDone;
+ private int mTotalMediaItemCount;
+ private ArrayList<Integer> mAlbumItemCountList;
+ private ArrayList<TimeLineTitleMediaItem> mTimelineTitleMediaList;
+
public ClusterAlbumSet(Path path, GalleryApp application,
MediaSet baseSet, int kind) {
super(path, INVALID_DATA_VERSION);
@@ -59,14 +66,20 @@ public class ClusterAlbumSet extends MediaSet implements ContentListener {
@Override
public long reload() {
- if (mBaseSet.reload() > mDataVersion) {
- if (mFirstReloadDone) {
- updateClustersContents();
- } else {
- updateClusters();
- mFirstReloadDone = true;
+ synchronized(this){
+ if (mBaseSet.reload() > mDataVersion) {
+ if (mFirstReloadDone) {
+ updateClustersContents();
+ } else {
+ updateClusters();
+ mFirstReloadDone = true;
+ }
+ mDataVersion = nextVersionNumber();
+ }
+ if (mKind == ClusterSource.CLUSTER_ALBUMSET_TIME) {
+ calculateTotalItemsCount();
+ createTimelineTitleMediaList();
}
- mDataVersion = nextVersionNumber();
}
return mDataVersion;
}
@@ -117,22 +130,24 @@ public class ClusterAlbumSet extends MediaSet implements ContentListener {
synchronized (DataManager.LOCK) {
album = (ClusterAlbum) dataManager.peekMediaObject(childPath);
if (album == null) {
- album = new ClusterAlbum(childPath, dataManager, this);
+ album = new ClusterAlbum(childPath, dataManager, this, mKind);
}
}
album.setMediaItems(clustering.getCluster(i));
album.setName(childName);
album.setCoverMediaItem(clustering.getClusterCover(i));
+ album.setImageItemCount(clustering.getClusterImageCount(i));
+ album.setVideoItemCount(clustering.getClusterVideoCount(i));
mAlbums.add(album);
}
}
- private void updateClustersContents() {
- final HashSet<Path> existing = new HashSet<Path>();
+ protected void updateClustersContents() {
+ final HashMap<Path, Integer> existing = new HashMap<Path, Integer>();
mBaseSet.enumerateTotalMediaItems(new MediaSet.ItemConsumer() {
@Override
public void consume(int index, MediaItem item) {
- existing.add(item.getPath());
+ existing.put(item.getPath(), item.getMediaType());
}
});
@@ -144,16 +159,111 @@ public class ClusterAlbumSet extends MediaSet implements ContentListener {
ArrayList<Path> oldPaths = mAlbums.get(i).getMediaItems();
ArrayList<Path> newPaths = new ArrayList<Path>();
int m = oldPaths.size();
+ int imageCount = 0;
+ int videoCount = 0;
+ int mediaType = MEDIA_TYPE_UNKNOWN;
+ ClusterAlbum album = mAlbums.get(i);
for (int j = 0; j < m; j++) {
Path p = oldPaths.get(j);
- if (existing.contains(p)) {
+ if (existing.containsKey(p)) {
newPaths.add(p);
+ mediaType = existing.get(p);
+ existing.remove(p);
+ if(mediaType == MediaObject.MEDIA_TYPE_IMAGE) {
+ imageCount++;
+ } else if(mediaType == MediaObject.MEDIA_TYPE_VIDEO) {
+ videoCount++;
+ }
}
}
- mAlbums.get(i).setMediaItems(newPaths);
+ album.setImageItemCount(imageCount);
+ album.setVideoItemCount(videoCount);
+ album.setMediaItems(newPaths);
if (newPaths.isEmpty()) {
mAlbums.remove(i);
}
}
+
+ updateClusters();
}
+
+ private void calculateTotalItemsCount() {
+ mTotalMediaItemCount = 0;
+ if( mAlbums != null && mAlbums.size() > 0) {
+ mAlbumItemCountList = new ArrayList<Integer>();
+ for(ClusterAlbum album: mAlbums) {
+ int count = album.getMediaItemCount();
+ mTotalMediaItemCount = mTotalMediaItemCount + count;
+ mAlbumItemCountList.add(mTotalMediaItemCount);
+ }
+ }
+ }
+
+ private void createTimelineTitleMediaList() {
+ if (mTimelineTitleMediaList == null) {
+ mTimelineTitleMediaList = new ArrayList<TimeLineTitleMediaItem>();
+ }
+ mTimelineTitleMediaList.clear();
+ for(ClusterAlbum album: mAlbums) {
+ mTimelineTitleMediaList.add(album.getTimelineTitle());
+ }
+ }
+
+ public TimeLineTitleMediaItem getTimelineTitleMediaItem(int index) {
+ if (mTimelineTitleMediaList == null || index >= mTimelineTitleMediaList.size()) {
+ return null;
+ }
+ return mTimelineTitleMediaList.get(index);
+ }
+
+ @Override
+ public int getMediaItemCount() {
+ return mTotalMediaItemCount;
+ }
+
+ @Override
+ public ArrayList<MediaItem> getMediaItem(int start, int count) {
+ if ((start + count) > mTotalMediaItemCount ) {
+ count = mTotalMediaItemCount - start;
+ }
+ if (count <= 0) return null;
+ ArrayList<MediaItem> mediaItems = new ArrayList<MediaItem>();
+ int startAlbum = findTimelineAlbumIndex(start);
+ int endAlbum = findTimelineAlbumIndex(start + count - 1);
+ int pAlbumCount = 0;
+ int s;
+ int lCount;
+ if (startAlbum > 0) {
+ pAlbumCount = mAlbumItemCountList.get(startAlbum -1);
+ }
+ s = start - pAlbumCount;
+ for (int i = startAlbum; i <= endAlbum && i < mAlbums.size(); ++i) {
+ int albumCount = mAlbums.get(i).getTotalMediaItemCount();
+ lCount = Math.min(albumCount - s, count);
+ ArrayList<MediaItem> items = mAlbums.get(i).getMediaItem(s, lCount);
+ if (items != null)
+ mediaItems.addAll(items);
+ count -= lCount;
+ s = 0;
+ }
+ return mediaItems;
+ }
+
+ public int findTimelineAlbumIndex(int itemIndex) {
+ int index = Arrays.binarySearch(mAlbumItemCountList.toArray(new Integer[0]), itemIndex);
+ if (index < mTotalMediaItemCount && index >= 0)
+ return index + 1;
+ if (index < 0) {
+ index = (index * (-1)) - 1;
+ }
+ return index;
+ }
+
+ public ClusterAlbum getAlbumFromindex(int index) {
+ int albumIndex = findTimelineAlbumIndex(index);
+ if (albumIndex >= 0 && albumIndex < mAlbums.size()) {
+ return mAlbums.get(albumIndex);
+ }
+ return null;
+ }
}
diff --git a/src/com/android/gallery3d/data/ClusterSource.java b/src/com/android/gallery3d/data/ClusterSource.java
index a1f22e57a..f4ef1102f 100644
--- a/src/com/android/gallery3d/data/ClusterSource.java
+++ b/src/com/android/gallery3d/data/ClusterSource.java
@@ -77,7 +77,7 @@ class ClusterSource extends MediaSource {
MediaSet parent = dataManager.getMediaSet(path.getParent());
// The actual content in the ClusterAlbum will be filled later
// when the reload() method in the parent is run.
- return new ClusterAlbum(path, dataManager, parent);
+ return new ClusterAlbum(path, dataManager, parent, matchType);
}
default:
throw new RuntimeException("bad path: " + path);
diff --git a/src/com/android/gallery3d/data/Clustering.java b/src/com/android/gallery3d/data/Clustering.java
index 4072bf57b..204bd1a34 100644
--- a/src/com/android/gallery3d/data/Clustering.java
+++ b/src/com/android/gallery3d/data/Clustering.java
@@ -26,4 +26,12 @@ public abstract class Clustering {
public MediaItem getClusterCover(int index) {
return null;
}
+
+ public int getClusterImageCount(int index) {
+ return 0;
+ }
+
+ public int getClusterVideoCount(int index) {
+ return 0;
+ }
}
diff --git a/src/com/android/gallery3d/data/FilterDeleteSet.java b/src/com/android/gallery3d/data/FilterDeleteSet.java
index f7329739d..fcf0dec74 100644
--- a/src/com/android/gallery3d/data/FilterDeleteSet.java
+++ b/src/com/android/gallery3d/data/FilterDeleteSet.java
@@ -258,4 +258,8 @@ public class FilterDeleteSet extends MediaSet implements ContentListener {
public int getNumberOfDeletions() {
return mCurrent.size();
}
+
+ public void setClusterKind(int kind) {
+ mBaseSet.setClusterKind(kind);
+ }
}
diff --git a/src/com/android/gallery3d/data/LocalAlbum.java b/src/com/android/gallery3d/data/LocalAlbum.java
index 7b7015af6..24d3b1b3f 100644
--- a/src/com/android/gallery3d/data/LocalAlbum.java
+++ b/src/com/android/gallery3d/data/LocalAlbum.java
@@ -75,7 +75,11 @@ public class LocalAlbum extends MediaSet {
mProjection = LocalImage.PROJECTION;
mItemPath = LocalImage.ITEM_PATH;
} else {
+ if (mBucketId == -1) {
+ mWhereClause = null;
+ } else {
mWhereClause = VideoColumns.BUCKET_ID + " = ?";
+ }
mOrderClause = VideoColumns.DATE_TAKEN + " DESC, "
+ VideoColumns._ID + " DESC";
mBaseUri = Video.Media.EXTERNAL_CONTENT_URI;
@@ -88,9 +92,10 @@ public class LocalAlbum extends MediaSet {
public LocalAlbum(Path path, GalleryApp application, int bucketId,
boolean isImage) {
- this(path, application, bucketId, isImage,
- BucketHelper.getBucketName(
- application.getContentResolver(), bucketId));
+ this(path, application, bucketId, isImage, bucketId == -1 ? application
+ .getAndroidContext().getString(R.string.videos_title)
+ : BucketHelper.getBucketName(application.getContentResolver(),
+ bucketId));
}
@Override
@@ -118,10 +123,16 @@ public class LocalAlbum extends MediaSet {
.appendQueryParameter("limit", start + "," + count).build();
ArrayList<MediaItem> list = new ArrayList<MediaItem>();
GalleryUtils.assertNotInRenderThread();
- Cursor cursor = mResolver.query(
+ Cursor cursor;
+ if (mBucketId == -1) {
+ cursor = mResolver.query(uri, mProjection, mWhereClause, null,
+ mOrderClause);
+ } else {
+ cursor = mResolver.query(
uri, mProjection, mWhereClause,
new String[]{String.valueOf(mBucketId)},
mOrderClause);
+ }
if (cursor == null) {
Log.w(TAG, "query fail: " + uri);
return list;
@@ -229,9 +240,15 @@ public class LocalAlbum extends MediaSet {
@Override
public int getMediaItemCount() {
if (mCachedCount == INVALID_COUNT) {
- Cursor cursor = mResolver.query(
+ Cursor cursor;
+ if (mBucketId == -1) {
+ cursor = mResolver.query(mBaseUri, COUNT_PROJECTION,
+ mWhereClause, null, mOrderClause);
+ } else {
+ cursor = mResolver.query(
mBaseUri, COUNT_PROJECTION, mWhereClause,
new String[]{String.valueOf(mBucketId)}, null);
+ }
if (cursor == null) {
Log.w(TAG, "query fail");
return 0;
diff --git a/src/com/android/gallery3d/data/MediaItem.java b/src/com/android/gallery3d/data/MediaItem.java
index 92ac88dc6..9d952bc4d 100644
--- a/src/com/android/gallery3d/data/MediaItem.java
+++ b/src/com/android/gallery3d/data/MediaItem.java
@@ -57,6 +57,9 @@ public abstract class MediaItem extends MediaObject {
public MediaItem(Path path, long version) {
super(path, version);
}
+ public MediaItem(Path path) {
+ super(path);
+ }
public long getDateInMs() {
return 0;
diff --git a/src/com/android/gallery3d/data/MediaObject.java b/src/com/android/gallery3d/data/MediaObject.java
index 6e3867647..6f8eef3ac 100644
--- a/src/com/android/gallery3d/data/MediaObject.java
+++ b/src/com/android/gallery3d/data/MediaObject.java
@@ -52,6 +52,8 @@ public abstract class MediaObject {
public static final int MEDIA_TYPE_DRM_VIDEO = 5;
public static final int MEDIA_TYPE_DRM_IMAGE = 6;
public static final int MEDIA_TYPE_ALL = MEDIA_TYPE_IMAGE | MEDIA_TYPE_VIDEO;
+ //TYPE for Timeline Title
+ public static final int MEDIA_TYPE_TIMELINE_TITLE= 7;
public static final String MEDIA_TYPE_IMAGE_STRING = "image";
public static final String MEDIA_TYPE_VIDEO_STRING = "video";
@@ -85,6 +87,10 @@ public abstract class MediaObject {
mDataVersion = version;
}
+ public MediaObject(Path path) {
+ mPath = path;
+ }
+
public Path getPath() {
return mPath;
}
diff --git a/src/com/android/gallery3d/data/MediaSet.java b/src/com/android/gallery3d/data/MediaSet.java
index 4c009c735..9f7ffceda 100644
--- a/src/com/android/gallery3d/data/MediaSet.java
+++ b/src/com/android/gallery3d/data/MediaSet.java
@@ -62,6 +62,14 @@ public abstract class MediaSet extends MediaObject {
return 0;
}
+ public int getImageItemCount(){
+ return 0;
+ }
+
+ public int getVideoItemCount(){
+ 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
@@ -350,4 +358,6 @@ public abstract class MediaSet extends MediaObject {
if (listener != null) listener.onSyncDone(MediaSet.this, mResult);
}
}
+
+ public void setClusterKind(int kind){};
}
diff --git a/src/com/android/gallery3d/data/TimeClustering.java b/src/com/android/gallery3d/data/TimeClustering.java
index 35cbab1ee..87111f29d 100644
--- a/src/com/android/gallery3d/data/TimeClustering.java
+++ b/src/com/android/gallery3d/data/TimeClustering.java
@@ -108,6 +108,7 @@ public class TimeClustering extends Clustering {
if (index < 0 || index >= total) return;
SmallItem s = new SmallItem();
s.path = item.getPath();
+ s.mediaType = item.getMediaType();
s.dateInMs = item.getDateInMs();
item.getLatLong(latLng);
s.lat = latLng[0];
@@ -189,6 +190,19 @@ public class TimeClustering extends Clustering {
mMaxClusterSize = Utils.clamp(mMaxClusterSize, MIN_MAX_CLUSTER_SIZE, MAX_MAX_CLUSTER_SIZE);
}
+ @Override
+ public int getClusterImageCount(int index) {
+ // TODO Auto-generated method stub
+ return mClusters.get(index).mPhotoCount;
+
+ }
+
+ @Override
+ public int getClusterVideoCount(int index) {
+ // TODO Auto-generated method stub
+ return mClusters.get(index).mVideoCount;
+ }
+
private void compute(SmallItem currentItem) {
if (currentItem != null) {
int numClusters = mClusters.size();
@@ -343,12 +357,15 @@ class SmallItem {
Path path;
long dateInMs;
double lat, lng;
+ int mediaType;
}
class Cluster {
@SuppressWarnings("unused")
private static final String TAG = "Cluster";
private static final String MMDDYY_FORMAT = "MMddyy";
+ public int mPhotoCount = 0;
+ public int mVideoCount = 0;
// This is for TimeClustering only.
public boolean mGeographicallySeparatedFromPrevCluster = false;
@@ -359,6 +376,11 @@ class Cluster {
}
public void addItem(SmallItem item) {
+ if(item.mediaType == MediaObject.MEDIA_TYPE_IMAGE) {
+ mPhotoCount++;
+ } else if(item.mediaType == MediaObject.MEDIA_TYPE_VIDEO) {
+ mVideoCount++;
+ }
mItems.add(item);
}
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
index fbb832fd6..4ff3e2ff4 100644
--- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java
+++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
@@ -20,6 +20,7 @@ import java.io.File;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Vector;
+import java.util.Locale;
import android.app.ActionBar;
import android.app.AlertDialog;
@@ -47,22 +48,31 @@ import android.os.IBinder;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.print.PrintHelper;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
+import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
+import android.view.Window;
import android.view.View.OnClickListener;
+import android.view.View.OnTouchListener;
import android.view.ViewPropertyAnimator;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
+import android.widget.Button;
import android.widget.FrameLayout;
+import android.widget.ImageButton;
+import android.widget.LinearLayout;
import android.widget.PopupMenu;
+import android.widget.RelativeLayout;
+import android.widget.RelativeLayout.LayoutParams;
import android.widget.ShareActionProvider;
import android.widget.ShareActionProvider.OnShareTargetSelectedListener;
import android.widget.Toast;
@@ -129,6 +139,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
private ImageShow mImageShow = null;
private View mSaveButton = null;
+ private View mDoneButton = null, mCancelButton = null;
private EditorPlaceHolder mEditorPlaceHolder = new EditorPlaceHolder(this);
private Editor mCurrentEditor = null;
@@ -185,6 +196,14 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
private PopupMenu mCurrentMenu = null;
private boolean mLoadingVisible = true;
private boolean mReleaseDualCamOnDestory = true;
+ private FrameLayout mCategoryFragment;
+ private View mEffectsContainer;
+ private View mEffectsTextContainer;
+ private ImageButton imgComparison;
+ private String mPopUpText, mExit;
+ RelativeLayout rlImageContainer;
+ boolean isOrientationChanged;
+ private boolean isComingFromEditorScreen;
public ProcessingService getProcessingService() {
return mBoundService;
@@ -262,7 +281,6 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
-
boolean onlyUsePortrait = getResources().getBoolean(R.bool.only_use_portrait);
if (onlyUsePortrait) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
@@ -282,7 +300,13 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
if (findViewById(R.id.main_panel_container) == null) {
return;
}
+ Fragment main = getSupportFragmentManager().findFragmentByTag(
+ MainPanel.FRAGMENT_TAG);
MainPanel panel = new MainPanel();
+ Bundle bundle = new Bundle();
+ bundle.putBoolean(MainPanel.EDITOR_TAG, isComingFromEditorScreen);
+ panel.setArguments(bundle);
+ isComingFromEditorScreen = false;
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.main_panel_container, panel, MainPanel.FRAGMENT_TAG);
transaction.commitAllowingStateLoss();
@@ -300,6 +324,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
public void run() {
EditorPanel panel = new EditorPanel();
panel.setEditor(currentId);
+ setActionBarForEffects(currentEditor);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.remove(getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG));
transaction.replace(R.id.main_panel_container, panel, MainPanel.FRAGMENT_TAG);
@@ -336,30 +361,200 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
private void loadXML() {
setContentView(R.layout.filtershow_activity);
+ Resources r = getResources();
+ setActionBar(false);
+ mPopUpText = r.getString(R.string.save_and_exit).toUpperCase(
+ Locale.getDefault());
+ mExit = r.getString(R.string.exit).toUpperCase(Locale.getDefault());
+ int marginTop = r.getDimensionPixelSize(R.dimen.compare_margin_top);
+ int marginRight = r.getDimensionPixelSize(R.dimen.compare_margin_right);
+ imgComparison = (ImageButton) findViewById(R.id.imgComparison);
+ rlImageContainer = (RelativeLayout) findViewById(R.id.imageContainer);
+
+ mImageShow = (ImageShow) findViewById(R.id.imageShow);
+ mImageViews.add(mImageShow);
+
+ setupEditors();
+
+ mEditorPlaceHolder.hide();
+ mImageShow.attach();
+ setupStatePanel();
+
+ imgComparison.setOnTouchListener(new OnTouchListener() {
+
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ int action = event.getAction();
+ action = action & MotionEvent.ACTION_MASK;
+ if (action == MotionEvent.ACTION_DOWN) {
+
+ HistoryManager adapter = mMasterImage.getHistory();
+ int position = adapter.backToOriginal();// adapter.undo();
+ mMasterImage.onHistoryItemClick(position);
+ v.setPressed(true);
+ backToMain();
+ invalidateViews();
+ }
+ if (action == MotionEvent.ACTION_UP
+ || action == MotionEvent.ACTION_CANCEL
+ || action == MotionEvent.ACTION_OUTSIDE) {
+ v.setPressed(false);
+ HistoryManager adapter = mMasterImage.getHistory();
+ int position = adapter.backToCurrent();
+ mMasterImage.onHistoryItemClick(position);
+ invalidateViews();
+
+ }
+
+ return false;
+ }
+ });
+ }
+
+ public void toggleComparisonButtonVisibility() {
+ if (imgComparison.getVisibility() == View.VISIBLE)
+ imgComparison.setVisibility(View.GONE);
+ }
+
+ public void setActionBar(boolean isEffectClicked) {
ActionBar actionBar = getActionBar();
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
- actionBar.setCustomView(R.layout.filtershow_actionbar);
- actionBar.setBackgroundDrawable(new ColorDrawable(
- getResources().getColor(R.color.background_screen)));
+ actionBar.setBackgroundDrawable(new ColorDrawable(getResources()
+ .getColor(R.color.edit_actionbar_background)));
+ if (!isEffectClicked) {
+ actionBar.setCustomView(R.layout.filtershow_actionbar);
+ mSaveButton = actionBar.getCustomView();
+ mSaveButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ saveImage();
+ }
+ });
+ invalidateOptionsMenu();
+ } else {
+ mMenu.clear();
+ final Fragment main = getSupportFragmentManager().findFragmentByTag(
+ MainPanel.FRAGMENT_TAG);
+
+ actionBar.setCustomView(R.layout.filtershow_actionbar_new);
+ mCancelButton = actionBar.getCustomView().findViewById(
+ R.id.imgCancel);
+ mDoneButton = actionBar.getCustomView().findViewById(R.id.imgDone);
+ mCancelButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ MainPanel mainPanel = (MainPanel) main;
+ mainPanel.toggleEffectsTrayVisibility(true);
+ setActionBar(false);
+ HistoryManager adapter = mMasterImage.getHistory();
+ int position = adapter.undoCurrentFilter();
+ mMasterImage.onHistoryItemClick(position);
+ adapter.resetActiveFilter();
+ backToMain();
+ invalidateViews();
+ }
+ });
+ mDoneButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ // saveImage();
+ MainPanel mainPanel = (MainPanel) main;
+ mainPanel.toggleEffectsTrayVisibility(true);
+ setActionBar(false);
+ HistoryManager adapter = mMasterImage
+ .getHistory();
+ adapter.resetActiveFilter();
+ }
+ });
+ isEffectClicked = false;
+ }
- mSaveButton = actionBar.getCustomView();
- mSaveButton.setOnClickListener(new OnClickListener() {
+ }
+
+ public void setActionBarForEffects(final Editor currentEditor) {
+ View view;
+ LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ view = inflater.inflate(R.layout.filtershow_editor_panel, null);
+ View editControl = view.findViewById(R.id.controlArea);
+ ActionBar actionBar = getActionBar();
+ actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
+ actionBar.setBackgroundDrawable(new ColorDrawable(getResources()
+ .getColor(R.color.edit_actionbar_background)));
+ actionBar.setCustomView(R.layout.filtershow_actionbar_effects);
+ ImageButton cancelButton = (ImageButton) actionBar.getCustomView()
+ .findViewById(R.id.cancelFilter);
+ ImageButton applyButton = (ImageButton) actionBar.getCustomView()
+ .findViewById(R.id.applyFilter);
+ Button editTitle = (Button) actionBar.getCustomView().findViewById(
+ R.id.applyEffect);
+ editTitle.setTransformationMethod(null);
+ View actionControl = actionBar.getCustomView().findViewById(
+ R.id.panelAccessoryViewList);
+ cancelButton.setOnClickListener(new View.OnClickListener() {
@Override
- public void onClick(View view) {
- saveImage();
+ public void onClick(View v) {
+ cancelCurrentFilter();
+ FilterShowActivity.this.backToMain();
+ setActionBar(false);
+ }
+ });
+ applyButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ currentEditor.finalApplyCalled();
+ FilterShowActivity.this.backToMain();
+ setActionBar(false);
}
});
- mImageShow = (ImageShow) findViewById(R.id.imageShow);
- mImageViews.add(mImageShow);
+ if (currentEditor != null) {
+ currentEditor.setUpEditorUI(editTitle, actionControl, editControl);
+ currentEditor.reflectCurrentFilter();
+ if (currentEditor.useUtilityPanel()) {
+ currentEditor.openUtilityPanel((LinearLayout) actionControl);
+ }
+ }
+ }
- setupEditors();
+ public void cancelCurrentFilter() {
+ MasterImage masterImage = MasterImage.getImage();
+ HistoryManager adapter = masterImage.getHistory();
- mEditorPlaceHolder.hide();
- mImageShow.attach();
+ int position = adapter.undo();
+ masterImage.onHistoryItemClick(position);
+ invalidateViews();
+ }
- setupStatePanel();
+ private void toggleEffectsTrayVisibility(boolean isEffectTrayEnabled) {
+ if (isEffectTrayEnabled) {
+ mCategoryFragment.setVisibility(View.VISIBLE);
+ mEffectsContainer.setVisibility(View.GONE);
+ mEffectsTextContainer.setVisibility(View.GONE);
+ } else {
+ mCategoryFragment.setVisibility(View.GONE);
+ mEffectsContainer.setVisibility(View.VISIBLE);
+ mEffectsTextContainer.setVisibility(View.VISIBLE);
+ }
+ }
+
+ public void adjustCompareButton(boolean scaled) {
+ Resources r = getResources();
+ int marginTop, marginRight;
+ if (scaled) {
+ marginTop = r
+ .getDimensionPixelSize(R.dimen.compare_margin_top_scaled);
+ marginRight = r
+ .getDimensionPixelSize(R.dimen.compare_margin_right_scaled);
+ } else {
+ marginTop = r.getDimensionPixelSize(R.dimen.compare_margin_top);
+ marginRight = r.getDimensionPixelSize(R.dimen.compare_margin_right);
+
+ }
+ RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) imgComparison
+ .getLayoutParams();
+ params.setMargins(0, marginTop, marginRight, 0);
+ imgComparison.setLayoutParams(params);
}
public void fillCategories() {
@@ -705,6 +900,8 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
public void setCurrentPanel(int currentPanel) {
mCurrentPanel = currentPanel;
+ HistoryManager adapter = mMasterImage.getHistory();
+ adapter.setActiveFilter(currentPanel);
}
public int getCurrentPanel() {
@@ -1030,16 +1227,11 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
}
@Override
- public boolean onCreateOptionsMenu(Menu menu) {
+ public boolean onPrepareOptionsMenu(Menu menu) {
+ menu.clear();
getMenuInflater().inflate(R.menu.filtershow_activity_menu, menu);
- MenuItem showState = menu.findItem(R.id.showImageStateButton);
- if (mShowingImageStatePanel) {
- showState.setTitle(R.string.hide_imagestate_panel);
- } else {
- showState.setTitle(R.string.show_imagestate_panel);
- }
- mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share)
- .getActionProvider();
+ mShareActionProvider = (ShareActionProvider) menu.findItem(
+ R.id.menu_share).getActionProvider();
mShareActionProvider.setShareIntent(getDefaultShareIntent());
mShareActionProvider.setOnShareTargetSelectedListener(this);
mMenu = menu;
@@ -1051,14 +1243,14 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
if (mMenu == null || mMasterImage == null) {
return;
}
- MenuItem undoItem = mMenu.findItem(R.id.undoButton);
- MenuItem redoItem = mMenu.findItem(R.id.redoButton);
+ //MenuItem undoItem = mMenu.findItem(R.id.undoButton);
+ //MenuItem redoItem = mMenu.findItem(R.id.redoButton);
MenuItem resetItem = mMenu.findItem(R.id.resetHistoryButton);
MenuItem printItem = mMenu.findItem(R.id.printButton);
if (!PrintHelper.systemSupportsPrint()) {
printItem.setVisible(false);
}
- mMasterImage.getHistory().setMenuItems(undoItem, redoItem, resetItem);
+ //mMasterImage.getHistory().setMenuItems(undoItem, redoItem, resetItem);
}
@Override
@@ -1085,7 +1277,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
- case R.id.undoButton: {
+ /*case R.id.undoButton: {
HistoryManager adapter = mMasterImage.getHistory();
int position = adapter.undo();
mMasterImage.onHistoryItemClick(position);
@@ -1099,15 +1291,15 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
mMasterImage.onHistoryItemClick(position);
invalidateViews();
return true;
- }
+ }*/
case R.id.resetHistoryButton: {
resetHistory();
return true;
}
- case R.id.showImageStateButton: {
+ /*case R.id.showImageStateButton: {
toggleImageStatePanel();
return true;
- }
+ }*/
case R.id.exportFlattenButton: {
showExportOptionsDialog();
return true;
@@ -1303,9 +1495,9 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
if (mMasterImage == null) {
return;
}
- loadXML();
- fillCategories();
- loadMainPanel();
+ //loadXML();
+ //fillCategories();
+ //loadMainPanel();
if (mCurrentMenu != null) {
mCurrentMenu.dismiss();
@@ -1376,28 +1568,81 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
@Override
public void onBackPressed() {
- Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG);
+ if (imgComparison != null && imgComparison.getVisibility() == View.GONE) {
+ imgComparison.setVisibility(View.VISIBLE);
+ }
+ Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(
+ MainPanel.FRAGMENT_TAG);
+
if (currentPanel instanceof MainPanel) {
- if (!mImageShow.hasModifications()) {
- done();
+ MainPanel mainPanel = (MainPanel) currentPanel;
+ if (mainPanel.isCategoryPanelVisible()) {
+ if (mImageShow.hasModifications()) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setMessage(R.string.unsaved).setTitle(
+ R.string.save_before_exit);
+ builder.setPositiveButton(mPopUpText,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog,
+ int id) {
+ // saveImage();
+ HistoryManager adapter = mMasterImage
+ .getHistory();
+ adapter.resetActiveFilter();
+ }
+ });
+ builder.setNegativeButton(mExit,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog,
+ int id) {
+ HistoryManager adapter = mMasterImage
+ .getHistory();
+ int position = adapter.undoCurrentFilter();
+ mMasterImage.onHistoryItemClick(position);
+ adapter.resetActiveFilter();
+ backToMain();
+ invalidateViews();
+ }
+ });
+ builder.show();
+ }
+ setActionBar(false);
+ mainPanel.toggleEffectsTrayVisibility(true);
+ invalidateOptionsMenu();
+ if (MasterImage.getImage().getScaleFactor() < 1)
+ setScaleImage(false);
+ adjustCompareButton(false);
+
} else {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setMessage(R.string.unsaved).setTitle(R.string.save_before_exit);
- builder.setPositiveButton(R.string.save_and_exit, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int id) {
- saveImage();
- }
- });
- builder.setNegativeButton(R.string.exit, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int id) {
- done();
- }
- });
- builder.show();
+ if (!mImageShow.hasModifications()) {
+ done();
+ } else {
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setMessage(R.string.unsaved).setTitle(
+ R.string.save_before_exit);
+ builder.setPositiveButton(R.string.save_and_exit,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog,
+ int id) {
+ saveImage();
+ }
+ });
+ builder.setNegativeButton(R.string.exit,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog,
+ int id) {
+ done();
+ }
+ });
+ builder.show();
+ }
}
} else {
+ isComingFromEditorScreen = true;
backToMain();
}
}
@@ -1571,4 +1816,8 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
}
});
}
+
+ public void setScaleImage(boolean isScaled) {
+ mImageShow.scaleImage(isScaled,getBaseContext());
+ }
}
diff --git a/src/com/android/gallery3d/filtershow/category/CategoryView.java b/src/com/android/gallery3d/filtershow/category/CategoryView.java
index 1570517ea..99af80f4d 100644
--- a/src/com/android/gallery3d/filtershow/category/CategoryView.java
+++ b/src/com/android/gallery3d/filtershow/category/CategoryView.java
@@ -64,7 +64,7 @@ public class CategoryView extends IconView
mSelectPaint.setColor(mSelectionColor);
mBorderPaint = new Paint(mSelectPaint);
- mBorderPaint.setColor(Color.BLACK);
+// mBorderPaint.setColor(Color.BLACK);
mBorderStroke = mSelectionStroke / 3;
}
diff --git a/src/com/android/gallery3d/filtershow/category/IconView.java b/src/com/android/gallery3d/filtershow/category/IconView.java
index cba2d794f..089203acf 100644
--- a/src/com/android/gallery3d/filtershow/category/IconView.java
+++ b/src/com/android/gallery3d/filtershow/category/IconView.java
@@ -69,7 +69,7 @@ public class IconView extends View {
private void setup(Context context) {
Resources res = getResources();
mTextColor = res.getColor(R.color.filtershow_categoryview_text);
- mBackgroundColor = res.getColor(R.color.filtershow_categoryview_background);
+ mBackgroundColor = res.getColor(android.R.color.transparent);
mMargin = res.getDimensionPixelOffset(R.dimen.category_panel_margin);
mTextSize = res.getDimensionPixelSize(R.dimen.category_panel_text_size);
}
@@ -80,7 +80,7 @@ public class IconView extends View {
}
mPaint.setTextSize(mTextSize);
if (getOrientation() == VERTICAL) {
- text = text.toUpperCase();
+// text = text.toUpperCase();
// TODO: set this in xml
mPaint.setTypeface(Typeface.DEFAULT_BOLD);
}
@@ -108,7 +108,7 @@ public class IconView extends View {
// justify to the left.
x = mMargin;
}
- int y = canvas.getHeight() - 2*mMargin;
+ int y = canvas.getHeight() / 2 ;//- 2*mMargin;
canvas.drawText(text, x, y, mPaint);
}
diff --git a/src/com/android/gallery3d/filtershow/category/MainPanel.java b/src/com/android/gallery3d/filtershow/category/MainPanel.java
index a80df3bfa..93da39ceb 100644
--- a/src/com/android/gallery3d/filtershow/category/MainPanel.java
+++ b/src/com/android/gallery3d/filtershow/category/MainPanel.java
@@ -22,8 +22,11 @@ import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.util.Log;
import com.android.gallery3d.R;
import com.android.gallery3d.filtershow.FilterShowActivity;
@@ -43,8 +46,13 @@ public class MainPanel extends Fragment {
private ImageButton filtersButton;
private ImageButton dualCamButton;
private ImageButton makeupButton;
+ private View mEffectsContainer;
+ private View mEffectsTextContainer;
+ private FrameLayout mCategoryFragment;
+ private View mBottomView;
public static final String FRAGMENT_TAG = "MainPanel";
+ public static final String EDITOR_TAG = "coming-from-editor-panel";
public static final int LOOKS = 0;
public static final int BORDERS = 1;
public static final int GEOMETRY = 2;
@@ -55,6 +63,7 @@ public class MainPanel extends Fragment {
private int mCurrentSelected = -1;
private int mPreviousToggleVersions = -1;
+ private boolean isEffectClicked;
private void selection(int position, boolean value) {
if (value) {
@@ -114,9 +123,21 @@ public class MainPanel extends Fragment {
geometryButton = (ImageButton) mMainView.findViewById(R.id.geometryButton);
filtersButton = (ImageButton) mMainView.findViewById(R.id.colorsButton);
dualCamButton = (ImageButton) mMainView.findViewById(R.id.dualCamButton);
+ mCategoryFragment = (FrameLayout) mMainView
+ .findViewById(R.id.category_panel_container);
+ mBottomView = mMainView.findViewById(R.id.bottom_panel);
+ mEffectsContainer = mMainView.findViewById(R.id.effectsContainer);
+ mEffectsTextContainer = mMainView.findViewById(R.id.effectsText);
if(SimpleMakeupImageFilter.HAS_TS_MAKEUP) {
makeupButton = (ImageButton) mMainView.findViewById(R.id.makeupButton);
makeupButton.setVisibility(View.VISIBLE);
+ TextView beautify = (TextView) mEffectsTextContainer
+ .findViewById(R.id.tvBeautify);
+ beautify.setVisibility(View.VISIBLE);
+ }
+ boolean showPanel = false;
+ if (getArguments() != null) {
+ showPanel = getArguments().getBoolean(EDITOR_TAG);
}
if(makeupButton != null) {
@@ -161,8 +182,10 @@ public class MainPanel extends Fragment {
enableDualCameraButton(DualCameraNativeEngine.getInstance().isLibLoaded());
FilterShowActivity activity = (FilterShowActivity) getActivity();
- showImageStatePanel(activity.isShowingImageStatePanel());
- showPanel(activity.getCurrentPanel());
+ //showImageStatePanel(activity.isShowingImageStatePanel());
+ if (showPanel) {
+ showPanel(activity.getCurrentPanel());
+ }
return mMainView;
}
@@ -173,13 +196,39 @@ public class MainPanel extends Fragment {
return true;
}
+ public boolean isCategoryPanelVisible() {
+ return (View.VISIBLE == mCategoryFragment.getVisibility());
+ }
+
+ public void toggleEffectsTrayVisibility(boolean isCategoryTrayVisible) {
+ if (isCategoryTrayVisible) {
+ mCategoryFragment.setVisibility(View.GONE);
+ mEffectsContainer.setVisibility(View.VISIBLE);
+ mEffectsTextContainer.setVisibility(View.VISIBLE);
+ } else {
+ mCategoryFragment.setVisibility(View.VISIBLE);
+ mEffectsContainer.setVisibility(View.GONE);
+ mEffectsTextContainer.setVisibility(View.GONE);
+ }
+ }
+
private void setCategoryFragment(CategoryPanel category, boolean fromRight) {
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
+ FilterShowActivity activity = (FilterShowActivity) getActivity();
if (fromRight) {
transaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_right);
} else {
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left);
}
+ if (isEffectClicked) {
+ toggleEffectsTrayVisibility(false);
+ activity.setActionBar(isEffectClicked);
+ isEffectClicked = false;
+ } else {
+ toggleEffectsTrayVisibility(true);
+ activity.setActionBar(isEffectClicked);
+
+ }
transaction.replace(R.id.category_panel_container, category, CategoryPanel.FRAGMENT_TAG);
transaction.commitAllowingStateLoss();
}
@@ -198,9 +247,9 @@ public class MainPanel extends Fragment {
}
public void loadCategoryBorderPanel() {
- if (mCurrentSelected == BORDERS) {
+ /*if (mCurrentSelected == BORDERS) {
return;
- }
+ }*/
boolean fromRight = isRightAnimation(BORDERS);
selection(mCurrentSelected, false);
CategoryPanel categoryPanel = new CategoryPanel();
@@ -211,7 +260,7 @@ public class MainPanel extends Fragment {
}
public void loadCategoryMakeupPanel() {
- if (makeupButton == null || mCurrentSelected == MAKEUP) {
+ if (makeupButton == null) {
return;
}
boolean fromRight = isRightAnimation(MAKEUP);
@@ -224,9 +273,9 @@ public class MainPanel extends Fragment {
}
public void loadCategoryGeometryPanel() {
- if (mCurrentSelected == GEOMETRY) {
+ /*if (mCurrentSelected == GEOMETRY) {
return;
- }
+ }*/
if (MasterImage.getImage().hasTinyPlanet()) {
return;
}
@@ -240,9 +289,9 @@ public class MainPanel extends Fragment {
}
public void loadCategoryFiltersPanel() {
- if (mCurrentSelected == FILTERS) {
+ /*if (mCurrentSelected == FILTERS) {
return;
- }
+ }*/
boolean fromRight = isRightAnimation(FILTERS);
selection(mCurrentSelected, false);
CategoryPanel categoryPanel = new CategoryPanel();
@@ -253,9 +302,9 @@ public class MainPanel extends Fragment {
}
public void loadCategoryVersionsPanel() {
- if (mCurrentSelected == VERSIONS) {
+ /*if (mCurrentSelected == VERSIONS) {
return;
- }
+ }*/
FilterShowActivity activity = (FilterShowActivity) getActivity();
activity.updateVersions();
boolean fromRight = isRightAnimation(VERSIONS);
@@ -268,9 +317,9 @@ public class MainPanel extends Fragment {
}
public void loadCategoryDualCamPanel() {
- if (mCurrentSelected == DUALCAM) {
+ /*if (mCurrentSelected == DUALCAM) {
return;
- }
+ }*/
boolean fromRight = isRightAnimation(DUALCAM);
selection(mCurrentSelected, false);
CategoryPanel categoryPanel = new CategoryPanel();
@@ -281,9 +330,11 @@ public class MainPanel extends Fragment {
}
public void showPanel(int currentPanel) {
+ isEffectClicked = true;
+ FilterShowActivity activity = (FilterShowActivity) getActivity();
switch (currentPanel) {
case LOOKS: {
- loadCategoryLookPanel(false);
+ loadCategoryLookPanel(true);
break;
}
case BORDERS: {
@@ -311,6 +362,13 @@ public class MainPanel extends Fragment {
break;
}
}
+ if (currentPanel > 0) {
+ activity.setScaleImage(true);
+ activity.adjustCompareButton(true);
+ } else {
+ activity.setScaleImage(false);
+ activity.adjustCompareButton(false);
+ }
}
public void setToggleVersionsPanelButton(ImageButton button) {
diff --git a/src/com/android/gallery3d/filtershow/controller/BasicSlider.java b/src/com/android/gallery3d/filtershow/controller/BasicSlider.java
index 811b47466..1ff3e1677 100644
--- a/src/com/android/gallery3d/filtershow/controller/BasicSlider.java
+++ b/src/com/android/gallery3d/filtershow/controller/BasicSlider.java
@@ -21,14 +21,17 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.TextView;
import com.android.gallery3d.R;
import com.android.gallery3d.filtershow.editors.Editor;
public class BasicSlider implements Control {
private SeekBar mSeekBar;
+ private TextView mFilterValue,mFilterText;
private ParameterInteger mParameter;
Editor mEditor;
@@ -42,8 +45,12 @@ public class BasicSlider implements Control {
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout lp = (LinearLayout) inflater.inflate(
R.layout.filtershow_seekbar, container, true);
+ LinearLayout lpBasicFilterContainer = (LinearLayout) lp.findViewById(R.id.basicFilterContainer);
mSeekBar = (SeekBar) lp.findViewById(R.id.primarySeekBar);
+ mFilterText = (TextView)lpBasicFilterContainer.findViewById(R.id.tvFilterName);
+ mFilterValue = (TextView)lpBasicFilterContainer.findViewById(R.id.tvFilterValue);
mSeekBar.setVisibility(View.VISIBLE);
+ mEditor.setBasicFilterUI(mFilterText, mFilterValue);
updateUI();
mSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
diff --git a/src/com/android/gallery3d/filtershow/controller/StyleChooser.java b/src/com/android/gallery3d/filtershow/controller/StyleChooser.java
index dc31401e0..ab17d63d7 100644
--- a/src/com/android/gallery3d/filtershow/controller/StyleChooser.java
+++ b/src/com/android/gallery3d/filtershow/controller/StyleChooser.java
@@ -45,7 +45,7 @@ public class StyleChooser implements Control {
LayoutParams lp = new LayoutParams(dim, dim);
for (int i = 0; i < n; i++) {
final ImageButton button = new ImageButton(context);
- button.setScaleType(ScaleType.CENTER_CROP);
+ button.setScaleType(ScaleType.CENTER_INSIDE);
button.setLayoutParams(lp);
button.setBackgroundResource(android.R.color.transparent);
mIconButton.add(button);
diff --git a/src/com/android/gallery3d/filtershow/controller/TitledSlider.java b/src/com/android/gallery3d/filtershow/controller/TitledSlider.java
index f29442bb9..8031b759f 100644
--- a/src/com/android/gallery3d/filtershow/controller/TitledSlider.java
+++ b/src/com/android/gallery3d/filtershow/controller/TitledSlider.java
@@ -88,7 +88,7 @@ public class TitledSlider implements Control {
@Override
public void updateUI() {
if (mControlName != null && mParameter.getParameterName() != null) {
- mControlName.setText(mParameter.getParameterName().toUpperCase());
+ mControlName.setText(mParameter.getParameterName());
}
if (mControlValue != null) {
mControlValue.setText(
diff --git a/src/com/android/gallery3d/filtershow/editors/Editor.java b/src/com/android/gallery3d/filtershow/editors/Editor.java
index e3eec390b..490e5991c 100644
--- a/src/com/android/gallery3d/filtershow/editors/Editor.java
+++ b/src/com/android/gallery3d/filtershow/editors/Editor.java
@@ -31,9 +31,11 @@ import android.widget.LinearLayout;
import android.widget.PopupMenu;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.TextView;
import com.android.gallery3d.R;
import com.android.gallery3d.filtershow.controller.Control;
+import com.android.gallery3d.filtershow.filters.FilterBasicRepresentation;
import com.android.gallery3d.filtershow.filters.FilterRepresentation;
import com.android.gallery3d.filtershow.imageshow.ImageShow;
import com.android.gallery3d.filtershow.imageshow.MasterImage;
@@ -62,6 +64,9 @@ public class Editor implements OnSeekBarChangeListener, SwapButton.SwapButtonLis
public static byte SHOW_VALUE_UNDEFINED = -1;
public static byte SHOW_VALUE_OFF = 0;
public static byte SHOW_VALUE_INT = 1;
+ private View mActionButton, mEditControl;
+ private TextView mBasicFilterText;
+ private TextView mBasicFilterValue;
public static void hackFixStrings(Menu menu) {
int count = menu.size();
@@ -72,7 +77,7 @@ public class Editor implements OnSeekBarChangeListener, SwapButton.SwapButtonLis
}
public String calculateUserMessage(Context context, String effectName, Object parameterValue) {
- return effectName.toUpperCase() + " " + parameterValue;
+ return effectName + " " + parameterValue;
}
protected Editor(int id) {
@@ -91,16 +96,37 @@ public class Editor implements OnSeekBarChangeListener, SwapButton.SwapButtonLis
return true;
}
- public void setUpEditorUI(View actionButton, View editControl,
+ /*public void setUpEditorUI(View actionButton, View editControl,
Button editTitle, Button stateButton) {
mEditTitle = editTitle;
mFilterTitle = stateButton;
mButton = editTitle;
MasterImage.getImage().resetGeometryImages(false);
setUtilityPanelUI(actionButton, editControl);
+ }*/
+
+ public void setUpEditorUI(View editControl, Button stateButton) {
+
+ mFilterTitle = stateButton;
+ MasterImage.getImage().resetGeometryImages(false);
+ mEditControl = editControl;
+ setUtilityPanelUI(null, editControl);
}
- public boolean showsPopupIndicator() {
+ public void setUpEditorUI(Button editTitle, View actionButton,
+ View editControl) {
+ mEditTitle = editTitle;
+ mButton = editTitle;
+ setUtilityPanelUI(actionButton, editControl);
+ }
+
+ public void setBasicFilterUI(TextView textFilterName,
+ TextView textFilterValue) {
+ mBasicFilterText = textFilterName;
+ mBasicFilterValue = textFilterValue;
+ }
+
+ public boolean showsPopupIndicator() {
return false;
}
@@ -257,6 +283,19 @@ public class Editor implements OnSeekBarChangeListener, SwapButton.SwapButtonLis
s = mContext.getString(mLocalRepresentation.getTextId());
}
mButton.setText(calculateUserMessage(mContext, s, ""));
+ if (mLocalRepresentation instanceof FilterBasicRepresentation
+ && mBasicFilterText != null) {
+ mBasicFilterText.setText(s);
+ String text = calculateUserMessage(mContext, s, "");
+ String[] split = text.split("[+-]");
+ int length = split.length;
+ if (length == 2)
+ mBasicFilterValue.setText(split[1] != null ? split[1] : "");
+ mBasicFilterText.setVisibility(View.VISIBLE);
+ mBasicFilterValue.setVisibility(View.VISIBLE);
+ mButton.setVisibility(View.INVISIBLE);
+
+ }
}
/**
@@ -285,7 +324,7 @@ public class Editor implements OnSeekBarChangeListener, SwapButton.SwapButtonLis
protected void setMenuIcon(boolean on) {
mEditTitle.setCompoundDrawablesRelativeWithIntrinsicBounds(
- 0, 0, on ? R.drawable.filtershow_menu_marker_rtl : 0, 0);
+ 0, 0, on ? R.drawable.spinner_triangle : 0, 0);
}
protected void createMenu(int[] strId, View button) {
diff --git a/src/com/android/gallery3d/filtershow/editors/EditorChanSat.java b/src/com/android/gallery3d/filtershow/editors/EditorChanSat.java
index abf0a690f..135c19373 100644
--- a/src/com/android/gallery3d/filtershow/editors/EditorChanSat.java
+++ b/src/com/android/gallery3d/filtershow/editors/EditorChanSat.java
@@ -162,7 +162,7 @@ public class EditorChanSat extends ParametricEditor implements OnSeekBarChangeLi
value = rep.getValue(FilterChanSatRepresentation.MODE_MAGENTA);
mMagentaBar.setProgress(value + 100);
mMagentaValue.setText("" + value);
- String text = mContext.getString(rep.getTextId()).toUpperCase();
+ String text = mContext.getString(rep.getTextId());
mFilterTitle.setText(text);
updateText();
}
diff --git a/src/com/android/gallery3d/filtershow/editors/EditorDraw.java b/src/com/android/gallery3d/filtershow/editors/EditorDraw.java
index 58bde1260..33e328098 100644
--- a/src/com/android/gallery3d/filtershow/editors/EditorDraw.java
+++ b/src/com/android/gallery3d/filtershow/editors/EditorDraw.java
@@ -61,11 +61,11 @@ public class EditorDraw extends ParametricEditor implements FilterView {
private static final int MODE_STYLE = FilterDrawRepresentation.PARAM_STYLE;
private static final int MODE_COLOR = FilterDrawRepresentation.PARAM_COLOR;
int[] brushIcons = {
- R.drawable.brush_flat,
- R.drawable.brush_round,
- R.drawable.brush_gauss,
- R.drawable.brush_marker,
- R.drawable.brush_spatter
+ R.drawable.square,
+ R.drawable.round,
+ R.drawable.feather,
+ R.drawable.rectangle,
+ R.drawable.random
};
int[] mBasColors = {
@@ -257,7 +257,7 @@ public class EditorDraw extends ParametricEditor implements FilterView {
R.layout.filtershow_draw_ui, (ViewGroup) editControl, true);
mTabletUI = new EditorDrawTabletUI(this, mContext, lp);
- mDrawString = mContext.getResources().getString(R.string.imageDraw).toUpperCase();
+ mDrawString = mContext.getResources().getString(R.string.imageDraw);
setMenuIcon(true);
}
diff --git a/src/com/android/gallery3d/filtershow/editors/EditorGrad.java b/src/com/android/gallery3d/filtershow/editors/EditorGrad.java
index 059121634..96b8dbdd7 100644
--- a/src/com/android/gallery3d/filtershow/editors/EditorGrad.java
+++ b/src/com/android/gallery3d/filtershow/editors/EditorGrad.java
@@ -51,8 +51,8 @@ public class EditorGrad extends ParametricEditor
private static final int MODE_BRIGHTNESS = FilterGradRepresentation.PARAM_BRIGHTNESS;
private static final int MODE_SATURATION = FilterGradRepresentation.PARAM_SATURATION;
private static final int MODE_CONTRAST = FilterGradRepresentation.PARAM_CONTRAST;
- private static final int ADD_ICON = R.drawable.ic_grad_add;
- private static final int DEL_ICON = R.drawable.ic_grad_del;
+ private static final int ADD_ICON = R.drawable.addspot;
+ private static final int DEL_ICON = R.drawable.delete;
private int mSliderMode = MODE_BRIGHTNESS;
ImageGrad mImageGrad;
ParamAdapter []mAdapters = new ParamAdapter[3];
@@ -215,7 +215,7 @@ public class EditorGrad extends ParametricEditor
if (mSliderMode != mMode) {
mSliderMode = mMode;
mEffectName = mContext.getResources().getString(getModeNameid(mMode));
- mEffectName = mEffectName.toUpperCase();
+// mEffectName = mEffectName.toUpperCase();
}
mTextView.setText(Integer.toString(value));
mView.invalidate();
@@ -311,7 +311,7 @@ public class EditorGrad extends ParametricEditor
return mEffectName;
}
int val = rep.getParameter(mSliderMode);
- return mEffectName.toUpperCase() + ((val > 0) ? " +" : " ") + val;
+ return mEffectName + ((val > 0) ? " +" : " ") + val;
}
private FilterGradRepresentation getGradRepresentation() {
diff --git a/src/com/android/gallery3d/filtershow/editors/EditorPanel.java b/src/com/android/gallery3d/filtershow/editors/EditorPanel.java
index 54409923e..a127ddf2e 100644
--- a/src/com/android/gallery3d/filtershow/editors/EditorPanel.java
+++ b/src/com/android/gallery3d/filtershow/editors/EditorPanel.java
@@ -27,6 +27,8 @@ import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
+import android.widget.TextView;
+
import com.android.gallery3d.R;
import com.android.gallery3d.filtershow.FilterShowActivity;
import com.android.gallery3d.filtershow.history.HistoryManager;
@@ -80,39 +82,14 @@ public class EditorPanel extends Fragment {
return mMainView;
}
mMainView = (LinearLayout) inflater.inflate(R.layout.filtershow_editor_panel, null);
-
- View actionControl = mMainView.findViewById(R.id.panelAccessoryViewList);
+ //TextView mFilterText = (TextView) mMainView.findViewById(R.id.tvFilterName);
View editControl = mMainView.findViewById(R.id.controlArea);
- ImageButton cancelButton = (ImageButton) mMainView.findViewById(R.id.cancelFilter);
- ImageButton applyButton = (ImageButton) mMainView.findViewById(R.id.applyFilter);
- Button editTitle = (Button) mMainView.findViewById(R.id.applyEffect);
- cancelButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- cancelCurrentFilter();
- FilterShowActivity activity = (FilterShowActivity) getActivity();
- activity.backToMain();
- }
- });
-
Button toggleState = (Button) mMainView.findViewById(R.id.toggle_state);
mEditor = activity.getEditor(mEditorID);
if (mEditor != null) {
- mEditor.setUpEditorUI(actionControl, editControl, editTitle, toggleState);
+ mEditor.setUpEditorUI(editControl, toggleState);
mEditor.reflectCurrentFilter();
- if (mEditor.useUtilityPanel()) {
- mEditor.openUtilityPanel((LinearLayout) actionControl);
- }
}
- applyButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- FilterShowActivity activity = (FilterShowActivity) getActivity();
- mEditor.finalApplyCalled();
- activity.backToMain();
- }
- });
-
showImageStatePanel(activity.isShowingImageStatePanel());
return mMainView;
}
diff --git a/src/com/android/gallery3d/filtershow/editors/EditorStraighten.java b/src/com/android/gallery3d/filtershow/editors/EditorStraighten.java
index ff84ba8f9..d77df71a9 100644
--- a/src/com/android/gallery3d/filtershow/editors/EditorStraighten.java
+++ b/src/com/android/gallery3d/filtershow/editors/EditorStraighten.java
@@ -41,7 +41,7 @@ public class EditorStraighten extends Editor implements EditorInfo {
public String calculateUserMessage(Context context, String effectName, Object parameterValue) {
String apply = context.getString(R.string.apply_effect);
apply += " " + effectName;
- return apply.toUpperCase();
+ return apply;
}
@Override
diff --git a/src/com/android/gallery3d/filtershow/editors/EditorVignette.java b/src/com/android/gallery3d/filtershow/editors/EditorVignette.java
index 630a1a9da..fb17ba76e 100644
--- a/src/com/android/gallery3d/filtershow/editors/EditorVignette.java
+++ b/src/com/android/gallery3d/filtershow/editors/EditorVignette.java
@@ -128,7 +128,7 @@ public class EditorVignette extends ParametricEditor {
}
mImageVignette.setRepresentation(rep);
- String text = mContext.getString(rep.getTextId()).toUpperCase();
+ String text = mContext.getString(rep.getTextId());
mFilterTitle.setText(text);
updateText();
}
diff --git a/src/com/android/gallery3d/filtershow/editors/ParametricEditor.java b/src/com/android/gallery3d/filtershow/editors/ParametricEditor.java
index c16865721..8398c31c2 100644
--- a/src/com/android/gallery3d/filtershow/editors/ParametricEditor.java
+++ b/src/com/android/gallery3d/filtershow/editors/ParametricEditor.java
@@ -115,12 +115,12 @@ public class ParametricEditor extends Editor {
if (mShowParameter == SHOW_VALUE_INT & useCompact(context)) {
if (getLocalRepresentation() instanceof FilterBasicRepresentation) {
FilterBasicRepresentation interval = (FilterBasicRepresentation) getLocalRepresentation();
- apply += " " + effectName.toUpperCase() + " " + interval.getStateRepresentation();
+ apply += " " + effectName + " " + interval.getStateRepresentation();
} else {
- apply += " " + effectName.toUpperCase() + " " + parameterValue;
+ apply += " " + effectName + " " + parameterValue;
}
} else {
- apply += " " + effectName.toUpperCase();
+ apply += " " + effectName;
}
return apply;
}
@@ -172,11 +172,15 @@ public class ParametricEditor extends Editor {
if (param != null) {
control(param, editControl);
} else {
- mSeekBar = new SeekBar(editControl.getContext());
+ /*mSeekBar = new SeekBar(editControl.getContext());
LayoutParams lp = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
mSeekBar.setLayoutParams(lp);
- ((LinearLayout) editControl).addView(mSeekBar);
+ ((LinearLayout) editControl).addView(mSeekBar);*/
+ mSeekBar = (SeekBar) editControl.findViewById(R.id.primarySeekBar);
+ if (mSeekBar != null) {
+ mSeekBar.setVisibility(View.VISIBLE);
+ }
mSeekBar.setOnSeekBarChangeListener(this);
}
}
diff --git a/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java b/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java
index ba6fff382..3de93cf5a 100644
--- a/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java
+++ b/src/com/android/gallery3d/filtershow/filters/BaseFiltersManager.java
@@ -380,8 +380,8 @@ public abstract class BaseFiltersManager implements FiltersManagerInterface {
};
int[] overlayId = {
- R.drawable.filtershow_dualcam_focus,
- R.drawable.filtershow_dualcam_halo
+ R.drawable.focus,
+ R.drawable.halo
};
String[] serializationNames = {
@@ -415,7 +415,7 @@ public abstract class BaseFiltersManager implements FiltersManagerInterface {
FilterDualCamSketchRepresentation sketch = new FilterDualCamSketchRepresentation(
context.getString(R.string.sketch), R.string.sketch);
- sketch.setOverlayId(R.drawable.filtershow_dualcam_sketch);
+ sketch.setOverlayId(R.drawable.sketch);
sketch.setOverlayOnly(true);
sketch.setSerializationName("DUAL_CAM_SKETCH");
mDualCam.add(sketch);
diff --git a/src/com/android/gallery3d/filtershow/filters/FilterDualCamFusionRepresentation.java b/src/com/android/gallery3d/filtershow/filters/FilterDualCamFusionRepresentation.java
index 0e3598b48..8e38c250b 100644
--- a/src/com/android/gallery3d/filtershow/filters/FilterDualCamFusionRepresentation.java
+++ b/src/com/android/gallery3d/filtershow/filters/FilterDualCamFusionRepresentation.java
@@ -58,7 +58,7 @@ public class FilterDualCamFusionRepresentation extends FilterRepresentation {
setEditorId(EditorDualCamFusion.ID);
setShowParameterValue(false);
setTextId(R.string.fusion);
- setOverlayId(R.drawable.filtershow_dualcam_fusion);
+ setOverlayId(R.drawable.fusion);
setOverlayOnly(true);
}
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilter.java b/src/com/android/gallery3d/filtershow/filters/ImageFilter.java
index 1d580c1c4..1a32e46e0 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilter.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilter.java
@@ -20,7 +20,6 @@ import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.renderscript.Allocation;
-import android.graphics.Rect;
import android.widget.Toast;
import com.android.gallery3d.filtershow.imageshow.GeometryMathUtils;
@@ -93,13 +92,6 @@ public abstract class ImageFilter implements Cloneable {
.getGeometryFilters(), true, MasterImage.getImage().getOriginalBounds(), w, h);
}
- protected Matrix getImageToScreenMatrix(int imageWidth, int imageHeight, int viewWidth,
- int viewHeight) {
- Rect imageDimens = new Rect(0, 0, imageWidth, imageHeight);
- return GeometryMathUtils.getImageToScreenMatrix(getEnvironment().getImagePreset()
- .getGeometryFilters(), true, imageDimens, viewWidth, viewHeight);
- }
-
public void setEnvironment(FilterEnvironment environment) {
mEnvironment = environment;
}
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamFusion.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamFusion.java
index c019c1ab8..1e89f3361 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamFusion.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamFusion.java
@@ -82,10 +82,8 @@ public class ImageFilterDualCamFusion extends ImageFilter {
Rect originalBounds = MasterImage.getImage().getOriginalBounds();
int origW = originalBounds.width();
int origH = originalBounds.height();
- int w = bitmap.getWidth();
- int h = bitmap.getHeight();
- filteredBitmap = MasterImage.getImage().getBitmapCache().getBitmap(w, h, BitmapCache.FILTERS);
+ filteredBitmap = MasterImage.getImage().getBitmapCache().getBitmap(origW, origH, BitmapCache.FILTERS);
filteredBitmap.setHasAlpha(true);
boolean result = DualCameraNativeEngine.getInstance().getForegroundImg(point.x, point.y, filteredBitmap);
@@ -114,10 +112,12 @@ public class ImageFilterDualCamFusion extends ImageFilter {
bitmap.setHasAlpha(true);
Canvas canvas = new Canvas(bitmap);
+ int w = bitmap.getWidth();
+ int h = bitmap.getHeight();
canvas.drawColor(0, PorterDuff.Mode.CLEAR);
if(getEnvironment().getImagePreset().getDoApplyGeometry()) {
- Matrix originalToScreen = getImageToScreenMatrix(w, h, w, h);
+ Matrix originalToScreen = getOriginalToScreenMatrix(w, h);
canvas.drawBitmap(filteredBitmap, originalToScreen, null);
} else {
canvas.drawBitmap(filteredBitmap, null, new Rect(0,0,w,h), null);
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamSketch.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamSketch.java
index 254773938..6907fe394 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamSketch.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamSketch.java
@@ -78,10 +78,8 @@ public class ImageFilterDualCamSketch extends ImageFilter {
Rect originalBounds = MasterImage.getImage().getOriginalBounds();
int origW = originalBounds.width();
int origH = originalBounds.height();
- int w = bitmap.getWidth();
- int h = bitmap.getHeight();
- filteredBitmap = MasterImage.getImage().getBitmapCache().getBitmap(w, h, BitmapCache.FILTERS);
+ filteredBitmap = MasterImage.getImage().getBitmapCache().getBitmap(origW, origH, BitmapCache.FILTERS);
result = DualCameraNativeEngine.getInstance().applySketch(point.x, point.y, filteredBitmap);
@@ -107,9 +105,10 @@ public class ImageFilterDualCamSketch extends ImageFilter {
}
Canvas canvas = new Canvas(bitmap);
-
+ int w = bitmap.getWidth();
+ int h = bitmap.getHeight();
if(getEnvironment().getImagePreset().getDoApplyGeometry()) {
- Matrix originalToScreen = getImageToScreenMatrix(w, h, w, h);
+ Matrix originalToScreen = getOriginalToScreenMatrix(w, h);
canvas.drawBitmap(filteredBitmap, originalToScreen, mPaint);
} else {
canvas.drawBitmap(filteredBitmap, null, new Rect(0,0,w,h), mPaint);
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamera.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamera.java
index af1531aad..dce31c353 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamera.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterDualCamera.java
@@ -81,10 +81,8 @@ public class ImageFilterDualCamera extends ImageFilter {
Rect originalBounds = MasterImage.getImage().getOriginalBounds();
int origW = originalBounds.width();
int origH = originalBounds.height();
- int w = bitmap.getWidth();
- int h = bitmap.getHeight();
- filteredBitmap = MasterImage.getImage().getBitmapCache().getBitmap(w, h, BitmapCache.FILTERS);
+ filteredBitmap = MasterImage.getImage().getBitmapCache().getBitmap(origW, origH, BitmapCache.FILTERS);
boolean result = false;
@@ -122,9 +120,10 @@ public class ImageFilterDualCamera extends ImageFilter {
}
Canvas canvas = new Canvas(bitmap);
-
+ int w = bitmap.getWidth();
+ int h = bitmap.getHeight();
if(getEnvironment().getImagePreset().getDoApplyGeometry()) {
- Matrix originalToScreen = getImageToScreenMatrix(w, h, w, h);
+ Matrix originalToScreen = getOriginalToScreenMatrix(w, h);
canvas.drawBitmap(filteredBitmap, originalToScreen, mPaint);
} else {
canvas.drawBitmap(filteredBitmap, null, new Rect(0,0,w,h), mPaint);
diff --git a/src/com/android/gallery3d/filtershow/history/HistoryManager.java b/src/com/android/gallery3d/filtershow/history/HistoryManager.java
index 9d5065a28..216bb1e16 100644
--- a/src/com/android/gallery3d/filtershow/history/HistoryManager.java
+++ b/src/com/android/gallery3d/filtershow/history/HistoryManager.java
@@ -25,10 +25,13 @@ public class HistoryManager {
private static final String LOGTAG = "HistoryManager";
private Vector<HistoryItem> mHistoryItems = new Vector<HistoryItem>();
+ private Vector<HistoryItem> mHistoryItemsActiveFilter = new Vector<HistoryItem>();
private int mCurrentPresetPosition = 0;
+ private int mComparePresetPosition = 0;
private MenuItem mUndoMenuItem = null;
private MenuItem mRedoMenuItem = null;
private MenuItem mResetMenuItem = null;
+ private int mActiveFilter = -1;
public void setMenuItems(MenuItem undoItem, MenuItem redoItem, MenuItem resetItem) {
mUndoMenuItem = undoItem;
@@ -128,6 +131,7 @@ public class HistoryManager {
public void addHistoryItem(HistoryItem preset) {
insert(preset, 0);
+ insertActiveFilter(preset, 0);
updateMenuItems();
}
@@ -170,4 +174,46 @@ public class HistoryManager {
return mCurrentPresetPosition;
}
+ public int backToOriginal() {
+ saveComparePresetPosition();
+ mCurrentPresetPosition = getCount() - 1;
+ return mCurrentPresetPosition;
+ }
+
+ public int backToCurrent() {
+ mCurrentPresetPosition = getCurrentPresetPosition();
+ return mCurrentPresetPosition;
+ }
+ public int setActiveFilter(int value)
+ {
+ mActiveFilter = value;
+ return mActiveFilter;
+ }
+ private void insertActiveFilter(HistoryItem preset, int position)
+ {
+ mHistoryItemsActiveFilter.add(preset);
+ }
+ public void resetActiveFilter()
+ {
+ mHistoryItemsActiveFilter.clear();
+ }
+ public int undoCurrentFilter()
+ {
+ mCurrentPresetPosition = mCurrentPresetPosition + mHistoryItemsActiveFilter.size();
+ if (mCurrentPresetPosition >= getCount()) {
+ mCurrentPresetPosition = getCount() - 1;
+ }
+ updateMenuItems();
+ return mCurrentPresetPosition;
+ }
+
+ public void saveComparePresetPosition()
+ {
+ mComparePresetPosition = mCurrentPresetPosition ;
+ }
+ public int getCurrentPresetPosition()
+ {
+ return mComparePresetPosition;
+ }
+
}
diff --git a/src/com/android/gallery3d/filtershow/imageshow/GeometryMathUtils.java b/src/com/android/gallery3d/filtershow/imageshow/GeometryMathUtils.java
index 614b6485d..958170c78 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/GeometryMathUtils.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/GeometryMathUtils.java
@@ -446,6 +446,9 @@ public final class GeometryMathUtils {
bw = bitmapHeight;
}
float scale = GeometryMathUtils.scale(bw, bh, viewWidth, viewHeight);
+ if (scale > 3.0f) {
+ scale = 3.0f;
+ }
scale *= SHOW_SCALE;
float s = Math.min(viewWidth / (float) bitmapWidth, viewHeight / (float) bitmapHeight);
Matrix m = getFullGeometryMatrix(holder, bitmapWidth, bitmapHeight);
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageCrop.java b/src/com/android/gallery3d/filtershow/imageshow/ImageCrop.java
index 4e53f8247..6f0268fb6 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageCrop.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageCrop.java
@@ -261,6 +261,7 @@ public class ImageCrop extends ImageShow {
if (!mValidDraw || bitmap == null) {
return;
}
+ toggleComparisonButtonVisibility();
forceStateConsistency();
mImageBounds.set(0, 0, bitmap.getWidth(), bitmap.getHeight());
// If display matrix doesn't exist, create it and its dependencies
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageMirror.java b/src/com/android/gallery3d/filtershow/imageshow/ImageMirror.java
index 26c49b1a8..acc0e4df9 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageMirror.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageMirror.java
@@ -66,6 +66,7 @@ public class ImageMirror extends ImageShow {
if (image == null) {
return;
}
+ toggleComparisonButtonVisibility();
GeometryMathUtils.initializeHolder(mDrawHolder, mLocalRep);
GeometryMathUtils.drawTransformedCropped(mDrawHolder, canvas, image, getWidth(),
getHeight());
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageRotate.java b/src/com/android/gallery3d/filtershow/imageshow/ImageRotate.java
index 5186c09d7..a620847bb 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageRotate.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageRotate.java
@@ -70,6 +70,7 @@ public class ImageRotate extends ImageShow {
if (image == null) {
return;
}
+ toggleComparisonButtonVisibility();
GeometryMathUtils.initializeHolder(mDrawHolder, mLocalRep);
GeometryMathUtils.drawTransformedCropped(mDrawHolder, canvas, image, canvas.getWidth(),
canvas.getHeight());
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
index 9ca143fde..261d43fb8 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
@@ -44,6 +44,7 @@ import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.View;
+import android.widget.ImageButton;
import android.widget.LinearLayout;
import com.android.gallery3d.R;
@@ -124,6 +125,7 @@ public class ImageShow extends View implements OnGestureListener,
private Paint mMaskPaint = new Paint();
private Matrix mShaderMatrix = new Matrix();
private boolean mDidStartAnimation = false;
+ private boolean isScalingUpAllowed = true;
private static Bitmap convertToAlphaMask(Bitmap b) {
Bitmap a = Bitmap.createBitmap(b.getWidth(), b.getHeight(), Bitmap.Config.ALPHA_8);
@@ -324,7 +326,7 @@ public class ImageShow extends View implements OnGestureListener,
}
// drawHighresImage(canvas, fullHighres);
- drawCompareImage(canvas, getGeometryOnlyImage());
+ //drawCompareImage(canvas, getGeometryOnlyImage());
canvas.restore();
@@ -1031,4 +1033,29 @@ public class ImageShow extends View implements OnGestureListener,
return false;
}
+ public void scaleImage(boolean isScaled, Context context) {
+ float scale = 1.0f;
+ Bitmap bitmap = MasterImage.getImage().getOriginalBitmapLarge();
+ int bitmapWidth = bitmap.getWidth();
+ int bitmapheight = bitmap.getHeight();
+
+// int width = MasterImage.getImage().getOriginalBounds().width();
+// int height = MasterImage.getImage().getOriginalBounds().height();
+ int width = getWidth();
+ int height = getHeight();
+ int scaledWidth = context.getResources().getDimensionPixelSize(R.dimen.scaled_image_width);
+ int scaledHeight = context.getResources().getDimensionPixelSize(R.dimen.scaled_image_height);
+ if (isScaled) {
+ scale = (float) scaledHeight / height ;
+ }
+ MasterImage.getImage().setScaleFactor(scale);
+
+ invalidate();
+ }
+
+ public void toggleComparisonButtonVisibility()
+ {
+ mActivity.toggleComparisonButtonVisibility();
+ }
+
}
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java b/src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java
index 4742f2ecf..829af18eb 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java
@@ -223,6 +223,9 @@ public class ImageStraighten extends ImageShow {
ih = imageHeight;
}
float scale = GeometryMathUtils.scale(iw, ih, viewWidth, viewHeight);
+ if (scale > 3.0f) {
+ scale = 3.0f;
+ }
scale *= GeometryMathUtils.SHOW_SCALE;
GeometryMathUtils.scaleRect(tmp, scale);
getUntranslatedStraightenCropBounds(tmp, mAngle);
diff --git a/src/com/android/gallery3d/ui/AbstractSlotRenderer.java b/src/com/android/gallery3d/ui/AbstractSlotRenderer.java
index 63bcbea5d..e9190e3fd 100644
--- a/src/com/android/gallery3d/ui/AbstractSlotRenderer.java
+++ b/src/com/android/gallery3d/ui/AbstractSlotRenderer.java
@@ -35,15 +35,17 @@ public abstract class AbstractSlotRenderer implements SlotView.SlotRenderer {
private final NinePatchTexture mFramePressed;
private final NinePatchTexture mFrameSelected;
private final ResourceTexture mDrmIcon;
+ private final ResourceTexture mSelectionIcon;
private FadeOutTexture mFramePressedUp;
protected AbstractSlotRenderer(Context context) {
mVideoOverlay = new ResourceTexture(context, R.drawable.ic_video_thumb);
- mVideoPlayIcon = new ResourceTexture(context, R.drawable.ic_gallery_play);
+ mVideoPlayIcon = new ResourceTexture(context, R.drawable.play_detail);
mPanoramaIcon = new ResourceTexture(context, R.drawable.ic_360pano_holo_light);
mFramePressed = new NinePatchTexture(context, R.drawable.grid_pressed);
mFrameSelected = new NinePatchTexture(context, R.drawable.grid_selected);
mDrmIcon = new ResourceTexture(context, R.drawable.drm_image);
+ mSelectionIcon = new ResourceTexture(context, R.drawable.multiselect);
}
protected void drawContent(GLCanvas canvas,
@@ -52,7 +54,7 @@ public abstract class AbstractSlotRenderer implements SlotView.SlotRenderer {
// The content is always rendered in to the largest square that fits
// inside the slot, aligned to the top of the slot.
- width = height = Math.min(width, height);
+ //width = height = Math.min(width, height);
if (rotation != 0) {
canvas.translate(width / 2, height / 2);
canvas.rotate(rotation, 0, 0, 1);
@@ -69,20 +71,18 @@ public abstract class AbstractSlotRenderer implements SlotView.SlotRenderer {
canvas.restore();
}
- protected void drawVideoOverlay(GLCanvas canvas, int width, int height) {
+ protected void drawVideoOverlay(GLCanvas canvas, int width, int height,
+ boolean isGridViewShown, int thumbSize) {
// Scale the video overlay to the height of the thumbnail and put it
// on the left side.
- ResourceTexture v = mVideoOverlay;
- float scale = (float) height / v.getHeight();
- int w = Math.round(scale * v.getWidth());
- int h = Math.round(scale * v.getHeight());
- v.draw(canvas, 0, 0, w, h);
-
- int s = Math.min(width, height) / 6;
- mVideoPlayIcon.draw(canvas, (width - s) / 2, (height - s) / 2, s, s);
+ int side = Math.min(width, height) / 6;
+ if (!isGridViewShown)
+ width = thumbSize;
+ mVideoPlayIcon.draw(canvas, (width - side) / 2, (height - side) / 2, side, side);
}
- protected void drawDrmOverlay(GLCanvas canvas, int width, int height, int Drm_mediaType) {
+ protected void drawDrmOverlay(GLCanvas canvas, int width, int height, int Drm_mediaType,
+ boolean isGridViewShown, int thumbSize) {
// Scale the video overlay to the height of the thumbnail and put it on the left side.
if (Drm_mediaType == MediaObject.MEDIA_TYPE_DRM_VIDEO) {
ResourceTexture v = mVideoOverlay;
@@ -92,11 +92,18 @@ public abstract class AbstractSlotRenderer implements SlotView.SlotRenderer {
v.draw(canvas, 0, 0, w, h);
}
int side = Math.min(width, height) / 6;
+ if (!isGridViewShown) {
+ width = thumbSize;
+ }
mDrmIcon.draw(canvas, (width - side) / 2, (height - side) / 2, side, side);
}
- protected void drawPanoramaIcon(GLCanvas canvas, int width, int height) {
+ protected void drawPanoramaIcon(GLCanvas canvas, int width, int height,
+ boolean isGridViewShown, int thumbSize) {
int iconSize = Math.min(width, height) / 6;
+ if (!isGridViewShown) {
+ width = thumbSize;
+ }
mPanoramaIcon.draw(canvas, (width - iconSize) / 2, (height - iconSize) / 2,
iconSize, iconSize);
}
@@ -124,7 +131,8 @@ public abstract class AbstractSlotRenderer implements SlotView.SlotRenderer {
}
protected void drawSelectedFrame(GLCanvas canvas, int width, int height) {
- drawFrame(canvas, mFrameSelected.getPaddings(), mFrameSelected, 0, 0, width, height);
+ mSelectionIcon.draw(canvas,15,15);
+ //drawFrame(canvas, mFrameSelected.getPaddings(), mFrameSelected, 0, 0, width, height);
}
protected static void drawFrame(GLCanvas canvas, Rect padding, Texture frame,
diff --git a/src/com/android/gallery3d/ui/ActionModeHandler.java b/src/com/android/gallery3d/ui/ActionModeHandler.java
index 080b6af2c..3ff8ed232 100644
--- a/src/com/android/gallery3d/ui/ActionModeHandler.java
+++ b/src/com/android/gallery3d/ui/ActionModeHandler.java
@@ -31,6 +31,7 @@ import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ShareActionProvider;
+import android.widget.Toolbar;
import android.widget.ShareActionProvider.OnShareTargetSelectedListener;
import com.android.gallery3d.R;
@@ -80,6 +81,7 @@ public class ActionModeHandler implements Callback, PopupList.OnPopupItemClickLi
private final Handler mMainHandler;
private ActionMode mActionMode;
private boolean mShareMaxDialog = false;
+ private Toolbar mToolbar;
private static class GetAllPanoramaSupports implements PanoramaSupportCallback {
private int mNumInfoRequired;
@@ -131,11 +133,13 @@ public class ActionModeHandler implements Callback, PopupList.OnPopupItemClickLi
mMenuExecutor = new MenuExecutor(activity, selectionManager);
mMainHandler = new Handler(activity.getMainLooper());
mNfcAdapter = NfcAdapter.getDefaultAdapter(mActivity.getAndroidContext());
+ mToolbar = mActivity.getToolbar();
}
public void startActionMode() {
Activity a = mActivity;
- mActionMode = a.startActionMode(this);
+// mActionMode = a.startActionMode(this);
+ mActionMode = mActivity.getToolbar().startActionMode(this);
View customView = LayoutInflater.from(a).inflate(
R.layout.action_mode, null);
mActionMode.setCustomView(customView);
@@ -238,6 +242,7 @@ public class ActionModeHandler implements Callback, PopupList.OnPopupItemClickLi
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.operation, menu);
+ mActivity.getToolbar().setVisibility(View.INVISIBLE);
mMenu = menu;
mSharePanoramaMenuItem = menu.findItem(R.id.action_share_panorama);
@@ -262,6 +267,8 @@ public class ActionModeHandler implements Callback, PopupList.OnPopupItemClickLi
@Override
public void onDestroyActionMode(ActionMode mode) {
mSelectionManager.leaveSelectionMode();
+ mActivity.getToolbar().setVisibility(View.VISIBLE);
+
}
private ArrayList<MediaObject> getSelectedMediaObjects(JobContext jc) {
@@ -279,7 +286,6 @@ public class ActionModeHandler implements Callback, PopupList.OnPopupItemClickLi
}
selected.add(manager.getMediaObject(path));
}
-
return selected;
}
// Menu options are determined by selection set itself.
@@ -401,9 +407,7 @@ public class ActionModeHandler implements Callback, PopupList.OnPopupItemClickLi
// Disable share actions until share intent is in good shape
if (mSharePanoramaMenuItem != null) mSharePanoramaMenuItem.setEnabled(false);
- if (mShareMenuItem != null && mSelectionManager.inSelectAllMode()) {
- mShareMenuItem.setVisible(false);
- }
+ if (mShareMenuItem != null) mShareMenuItem.setEnabled(false);
// Generate sharing intent and update supported operations in the background
// The task can take a long time and be canceled in the mean time.
@@ -489,7 +493,7 @@ public class ActionModeHandler implements Callback, PopupList.OnPopupItemClickLi
mShareMaxDialog = false;
}
- mShareMenuItem.setVisible(canShare);
+ mShareMenuItem.setEnabled(canShare);
mShareActionProvider.setShareIntent(share_intent);
}
}
diff --git a/src/com/android/gallery3d/ui/AlbumLabelMaker.java b/src/com/android/gallery3d/ui/AlbumLabelMaker.java
index 3ac3bb7fe..20e4a2dea 100644
--- a/src/com/android/gallery3d/ui/AlbumLabelMaker.java
+++ b/src/com/android/gallery3d/ui/AlbumLabelMaker.java
@@ -1,4 +1,7 @@
/*
+ * Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ * Not a Contribution
+ *
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -38,18 +41,19 @@ import java.util.Locale;
public class AlbumLabelMaker {
private static final int BORDER_SIZE = 0;
- private final AlbumSetSlotRenderer.LabelSpec mSpec;
- private final TextPaint mTitlePaint;
- private final TextPaint mCountPaint;
+ private AlbumSetSlotRenderer.LabelSpec mSpec;
+ private AlbumSlotRenderer.LabelSpec mAlbumListSpec;
+ private TextPaint mTitlePaint;
+ private TextPaint mCountPaint;
private final Context mContext;
private int mLabelWidth;
private int mBitmapWidth;
private int mBitmapHeight;
- private final LazyLoadedBitmap mLocalSetIcon;
+ /*private final LazyLoadedBitmap mLocalSetIcon;
private final LazyLoadedBitmap mPicasaIcon;
- private final LazyLoadedBitmap mCameraIcon;
+ private final LazyLoadedBitmap mCameraIcon;*/
public AlbumLabelMaker(Context context, AlbumSetSlotRenderer.LabelSpec spec) {
mContext = context;
@@ -57,16 +61,22 @@ public class AlbumLabelMaker {
mTitlePaint = getTextPaint(spec.titleFontSize, spec.titleColor, false);
mCountPaint = getTextPaint(spec.countFontSize, spec.countColor, false);
- mLocalSetIcon = new LazyLoadedBitmap(R.drawable.frame_overlay_gallery_folder);
+ /*mLocalSetIcon = new LazyLoadedBitmap(R.drawable.frame_overlay_gallery_folder);
mPicasaIcon = new LazyLoadedBitmap(R.drawable.frame_overlay_gallery_picasa);
- mCameraIcon = new LazyLoadedBitmap(R.drawable.frame_overlay_gallery_camera);
+ mCameraIcon = new LazyLoadedBitmap(R.drawable.frame_overlay_gallery_camera);*/
+ }
+
+ public AlbumLabelMaker(Context context, AlbumSlotRenderer.LabelSpec spec) {
+ mContext = context;
+ mAlbumListSpec = spec;
+ mTitlePaint = getTextPaint(spec.titleFontSize, spec.titleColor, false);
}
public static int getBorderSize() {
return BORDER_SIZE;
}
- private Bitmap getOverlayAlbumIcon(int sourceType) {
+ /*private Bitmap getOverlayAlbumIcon(int sourceType) {
switch (sourceType) {
case DataSourceType.TYPE_CAMERA:
return mCameraIcon.get();
@@ -76,13 +86,14 @@ public class AlbumLabelMaker {
return mPicasaIcon.get();
}
return null;
- }
+ }*/
private static TextPaint getTextPaint(int textSize, int color, boolean isBold) {
TextPaint paint = new TextPaint();
paint.setTextSize(textSize);
paint.setAntiAlias(true);
paint.setColor(color);
+ paint.setTypeface(Typeface.SANS_SERIF);
//paint.setShadowLayer(2f, 0f, 0f, Color.LTGRAY);
if (isBold) {
paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
@@ -109,12 +120,16 @@ public class AlbumLabelMaker {
}
}
- public synchronized void setLabelWidth(int width) {
+ public synchronized void setLabelWidth(int width, String key) {
if (mLabelWidth == width) return;
mLabelWidth = width;
int borders = 2 * BORDER_SIZE;
mBitmapWidth = width + borders;
- mBitmapHeight = mSpec.labelBackgroundHeight + borders;
+ if (key.equalsIgnoreCase(AlbumSetSlidingWindow.KEY_ALBUM)) {
+ mBitmapHeight = mSpec.labelBackgroundHeight + borders;
+ } else {
+ mBitmapHeight = mAlbumListSpec.labelBackgroundHeight + borders;
+ }
}
public ThreadPool.Job<Bitmap> requestLabel(
@@ -122,6 +137,10 @@ public class AlbumLabelMaker {
return new AlbumLabelJob(title, count, sourceType);
}
+ public ThreadPool.Job<Bitmap> requestLabel(String title) {
+ return new AlbumLabelJob(title);
+ }
+
static void drawText(Canvas canvas,
int x, int y, String text, int lengthLimit, TextPaint p) {
// The TextPaint cannot be used concurrently
@@ -134,8 +153,9 @@ public class AlbumLabelMaker {
private class AlbumLabelJob implements ThreadPool.Job<Bitmap> {
private final String mTitle;
- private final String mCount;
- private final int mSourceType;
+ private String mCount;
+ private int mSourceType;
+ private boolean isAlbumListViewShown;
public AlbumLabelJob(String title, String count, int sourceType) {
mTitle = title;
@@ -143,13 +163,20 @@ public class AlbumLabelMaker {
mSourceType = sourceType;
}
+ public AlbumLabelJob(String title) {
+ mTitle = title;
+ isAlbumListViewShown = true;
+
+ }
+
@Override
public Bitmap run(JobContext jc) {
AlbumSetSlotRenderer.LabelSpec s = mSpec;
+ AlbumSlotRenderer.LabelSpec s1 = mAlbumListSpec;
String title = mTitle;
String count = mCount;
- Bitmap icon = getOverlayAlbumIcon(mSourceType);
+ //Bitmap icon = getOverlayAlbumIcon(mSourceType);
Bitmap bitmap;
int labelWidth;
@@ -159,17 +186,27 @@ public class AlbumLabelMaker {
bitmap = GalleryBitmapPool.getInstance().get(mBitmapWidth, mBitmapHeight);
}
- if (bitmap == null) {
- int borders = 2 * BORDER_SIZE;
+ int borders = 2 * BORDER_SIZE;
+ if (!isAlbumListViewShown) {
+ if (bitmap == null) {
+
+ bitmap = Bitmap
+ .createBitmap(labelWidth + borders,
+ s.labelBackgroundHeight + borders,
+ Config.ARGB_8888);
+ }
+ } else {
bitmap = Bitmap.createBitmap(labelWidth + borders,
- s.labelBackgroundHeight + borders, Config.ARGB_8888);
+ s1.labelBackgroundHeight + borders, Config.ARGB_8888);
}
Canvas canvas = new Canvas(bitmap);
canvas.clipRect(BORDER_SIZE, BORDER_SIZE,
bitmap.getWidth() - BORDER_SIZE,
bitmap.getHeight() - BORDER_SIZE);
- canvas.drawColor(mSpec.backgroundColor, PorterDuff.Mode.SRC);
+ if (!isAlbumListViewShown) {
+ canvas.drawColor(mSpec.backgroundColor, PorterDuff.Mode.SRC);
+ }
canvas.translate(BORDER_SIZE, BORDER_SIZE);
@@ -178,57 +215,59 @@ public class AlbumLabelMaker {
// draw title
if (jc.isCancelled()) return null;
int strLength = (int) mTitlePaint.measureText(title);
- int x = labelWidth - (s.leftMargin + s.iconSize) - strLength;
+ if (!isAlbumListViewShown) {
+ int x = labelWidth - s.leftMargin - strLength;
// TODO: is the offset relevant in new reskin?
// int y = s.titleOffset;
int y = (s.labelBackgroundHeight - s.titleFontSize) / 2;
- drawText(canvas, x, y, title, labelWidth - s.leftMargin - x -
- s.titleRightMargin, mTitlePaint);
+ drawText(canvas, x, y, title, labelWidth - s.leftMargin - x, mTitlePaint);
// draw count
if (jc.isCancelled()) return null;
- x = s.leftMargin + 10;// plus 10 to get a much bigger margin
+ x = s.leftMargin + 10 - s.titleRightMargin;// plus 10 to get a much bigger margin
y = (s.labelBackgroundHeight - s.countFontSize) / 2;
drawText(canvas, x, y, count,
labelWidth - x, mCountPaint);
- // draw the icon
- if (icon != null) {
- if (jc.isCancelled()) return null;
- float scale = (float) s.iconSize / icon.getWidth();
- canvas.translate(labelWidth - s.leftMargin - s.iconSize,
- (s.labelBackgroundHeight -
- Math.round(scale * icon.getHeight())) / 2f);
- canvas.scale(scale, scale);
- canvas.drawBitmap(icon, 0, 0, null);
+ } else {
+ int x = labelWidth
+ - (s1.leftMargin + s1.iconSize)
+ - strLength;
+ // TODO: is the offset relevant in new reskin?
+ // int y = s.titleOffset;
+ int y = (s1.labelBackgroundHeight - s1.titleFontSize) / 2;
+ drawText(canvas, x, y, title, labelWidth - s1.leftMargin
+ - x, mTitlePaint);
}
- } else { // LTR
- // draw title
- if (jc.isCancelled()) return null;
- int x = s.leftMargin + s.iconSize;
- // TODO: is the offset relevant in new reskin?
- // int y = s.titleOffset;
- int y = (s.labelBackgroundHeight - s.titleFontSize) / 2;
- drawText(canvas, x, y, title, labelWidth - s.leftMargin - x -
- s.titleRightMargin, mTitlePaint);
- // draw count
- if (jc.isCancelled()) return null;
- x = labelWidth - s.titleRightMargin;
- y = (s.labelBackgroundHeight - s.countFontSize) / 2;
- drawText(canvas, x, y, count,
- labelWidth - x, mCountPaint);
-
- // draw the icon
- if (icon != null) {
- if (jc.isCancelled()) return null;
- float scale = (float) s.iconSize / icon.getWidth();
- canvas.translate(s.leftMargin, (s.labelBackgroundHeight -
- Math.round(scale * icon.getHeight())) / 2f);
- canvas.scale(scale, scale);
- canvas.drawBitmap(icon, 0, 0, null);
+ } else { // LTR
+ // draw title
+ if (jc.isCancelled())
+ return null;
+ if (!isAlbumListViewShown) {
+ int x = s.leftMargin + s.titleLeftMargin;
+ // TODO: is the offset relevant in new reskin?
+ // int y = s.titleOffset;
+ int y = (s.labelBackgroundHeight - s.titleFontSize) / 2;
+ drawText(canvas, x, y, title, labelWidth - s.leftMargin - x
+ - s.titleRightMargin - s.countRightMargin, mTitlePaint);
+
+ // draw count
+ if (jc.isCancelled())
+ return null;
+ x = labelWidth - s.titleRightMargin - s.countRightMargin;
+ y = (s.labelBackgroundHeight - s.countFontSize) / 2;
+ drawText(canvas, x, y, count, labelWidth - x, mCountPaint);
+ } else {
+
+ int x = s1.leftMargin + s1.iconSize;
+ // TODO: is the offset relevant in new reskin?
+ // int y = s.titleOffset;
+ int y = (s1.labelBackgroundHeight - s1.titleFontSize) / 2;
+
+ drawText(canvas, x, y, title, labelWidth - s1.leftMargin
+ - x, mTitlePaint);
}
- }
-
+ }
return bitmap;
}
}
diff --git a/src/com/android/gallery3d/ui/AlbumSetSlidingWindow.java b/src/com/android/gallery3d/ui/AlbumSetSlidingWindow.java
index 8149df4b3..8dd149647 100644
--- a/src/com/android/gallery3d/ui/AlbumSetSlidingWindow.java
+++ b/src/com/android/gallery3d/ui/AlbumSetSlidingWindow.java
@@ -39,6 +39,7 @@ import com.android.gallery3d.util.ThreadPool;
public class AlbumSetSlidingWindow implements AlbumSetDataLoader.DataListener {
private static final String TAG = "AlbumSetSlidingWindow";
private static final int MSG_UPDATE_ALBUM_ENTRY = 1;
+ public static final String KEY_ALBUM = "AlbumSet";
public static interface Listener {
public void onSizeChanged(int size);
@@ -527,7 +528,7 @@ public class AlbumSetSlidingWindow implements AlbumSetDataLoader.DataListener {
mSlotWidth = width;
mLoadingLabel = null;
- mLabelMaker.setLabelWidth(mSlotWidth);
+ mLabelMaker.setLabelWidth(mSlotWidth,KEY_ALBUM);
if (!mIsActive) return;
diff --git a/src/com/android/gallery3d/ui/AlbumSetSlotRenderer.java b/src/com/android/gallery3d/ui/AlbumSetSlotRenderer.java
index 46daf1451..5c817e6de 100644
--- a/src/com/android/gallery3d/ui/AlbumSetSlotRenderer.java
+++ b/src/com/android/gallery3d/ui/AlbumSetSlotRenderer.java
@@ -58,11 +58,13 @@ public class AlbumSetSlotRenderer extends AbstractSlotRenderer {
public int countFontSize;
public int leftMargin;
public int iconSize;
+ public int titleLeftMargin;
public int titleRightMargin;
public int backgroundColor;
public int titleColor;
public int countColor;
public int borderSize;
+ public int countRightMargin;
}
public AlbumSetSlotRenderer(AbstractGalleryActivity activity,
diff --git a/src/com/android/gallery3d/ui/AlbumSlidingWindow.java b/src/com/android/gallery3d/ui/AlbumSlidingWindow.java
index fec7d1e92..f0540b175 100644
--- a/src/com/android/gallery3d/ui/AlbumSlidingWindow.java
+++ b/src/com/android/gallery3d/ui/AlbumSlidingWindow.java
@@ -1,4 +1,7 @@
/*
+ * Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ * Not a Contribution
+ *
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,17 +19,28 @@
package com.android.gallery3d.ui;
+import android.content.res.Configuration;
import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.Bitmap.Config;
import android.os.Message;
+import android.text.TextPaint;
+import android.text.TextUtils;
import com.android.gallery3d.app.AbstractGalleryActivity;
import com.android.gallery3d.app.AlbumDataLoader;
+import com.android.gallery3d.app.AlbumPage;
import com.android.gallery3d.common.Utils;
import com.android.gallery3d.data.MediaItem;
import com.android.gallery3d.data.MediaObject;
import com.android.gallery3d.data.MediaObject.PanoramaSupportCallback;
import com.android.gallery3d.data.Path;
+import com.android.gallery3d.glrenderer.BitmapTexture;
import com.android.gallery3d.glrenderer.Texture;
+import com.android.gallery3d.glrenderer.TextureUploader;
import com.android.gallery3d.glrenderer.TiledTexture;
import com.android.gallery3d.util.Future;
import com.android.gallery3d.util.FutureListener;
@@ -38,14 +52,18 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
private static final int MSG_UPDATE_ENTRY = 0;
private static final int JOB_LIMIT = 2;
+ private static final int MSG_UPDATE_ALBUM_ENTRY = 1;
+ public static final String KEY_ALBUM = "Album";
public static interface Listener {
public void onSizeChanged(int size);
+
public void onContentChanged();
}
public static class AlbumEntry {
public MediaItem item;
+ public String name; // For title of image
public Path path;
public boolean isPanorama;
public int rotation;
@@ -55,6 +73,9 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
public Texture content;
private BitmapLoader contentLoader;
private PanoSupportListener mPanoSupportListener;
+ public BitmapTexture labelTexture;
+ private BitmapLoader labelLoader;
+
}
private final AlbumDataLoader mSource;
@@ -75,36 +96,64 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
private int mActiveRequestCount = 0;
private boolean mIsActive = false;
+ private AlbumLabelMaker mLabelMaker;
+ private int mSlotWidth;
+ private BitmapTexture mLoadingLabel;
+ private TextureUploader mLabelUploader;
+ private int mCurrentView;
+ private AbstractGalleryActivity mActivity;
+ private boolean isSlotSizeChanged;
+ private boolean mViewType;
private class PanoSupportListener implements PanoramaSupportCallback {
public final AlbumEntry mEntry;
- public PanoSupportListener (AlbumEntry entry) {
+
+ public PanoSupportListener(AlbumEntry entry) {
mEntry = entry;
}
+
@Override
- public void panoramaInfoAvailable(MediaObject mediaObject, boolean isPanorama,
- boolean isPanorama360) {
- if (mEntry != null) mEntry.isPanorama = isPanorama;
+ public void panoramaInfoAvailable(MediaObject mediaObject,
+ boolean isPanorama, boolean isPanorama360) {
+ if (mEntry != null)
+ mEntry.isPanorama = isPanorama;
}
}
public AlbumSlidingWindow(AbstractGalleryActivity activity,
- AlbumDataLoader source, int cacheSize) {
+ AlbumDataLoader source, int cacheSize,
+ AlbumSlotRenderer.LabelSpec labelSpec, boolean viewType) {
source.setDataListener(this);
mSource = source;
+ mViewType = viewType;
mData = new AlbumEntry[cacheSize];
mSize = source.size();
-
mHandler = new SynchronizedHandler(activity.getGLRoot()) {
@Override
public void handleMessage(Message message) {
- Utils.assertTrue(message.what == MSG_UPDATE_ENTRY);
- ((ThumbnailLoader) message.obj).updateEntry();
+ switch (message.what) {
+ case 0:
+ Utils.assertTrue(message.what == MSG_UPDATE_ENTRY);
+ ((ThumbnailLoader) message.obj).updateEntry();
+ break;
+ case 1:
+ Utils.assertTrue(message.what == MSG_UPDATE_ALBUM_ENTRY);
+ ((EntryUpdater) message.obj).updateEntry();
+ break;
+ }
+
}
};
mThreadPool = new JobLimiter(activity.getThreadPool(), JOB_LIMIT);
+ if (!mViewType) {
+ mLabelMaker = new AlbumLabelMaker(activity.getAndroidContext(),
+ labelSpec);
+ mLabelUploader = new TextureUploader(activity.getGLRoot());
+ }
mTileUploader = new TiledTexture.Uploader(activity.getGLRoot());
+ mActivity = activity;
+
}
public void setListener(Listener listener) {
@@ -113,8 +162,8 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
public AlbumEntry get(int slotIndex) {
if (!isActiveSlot(slotIndex)) {
- Utils.fail("invalid slot: %s outsides (%s, %s)",
- slotIndex, mActiveStart, mActiveEnd);
+ Utils.fail("invalid slot: %s outsides (%s, %s)", slotIndex,
+ mActiveStart, mActiveEnd);
}
return mData[slotIndex % mData.length];
}
@@ -124,7 +173,8 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
}
private void setContentWindow(int contentStart, int contentEnd) {
- if (contentStart == mContentStart && contentEnd == mContentEnd) return;
+ if (contentStart == mContentStart && contentEnd == mContentEnd)
+ return;
if (!mIsActive) {
mContentStart = contentStart;
@@ -170,12 +220,13 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
mActiveStart = start;
mActiveEnd = end;
- int contentStart = Utils.clamp((start + end) / 2 - data.length / 2,
- 0, Math.max(0, mSize - data.length));
+ int contentStart = Utils.clamp((start + end) / 2 - data.length / 2, 0,
+ Math.max(0, mSize - data.length));
int contentEnd = Math.min(contentStart + data.length, mSize);
setContentWindow(contentStart, contentEnd);
updateTextureUploadQueue();
- if (mIsActive) updateAllImageRequests();
+ if (mIsActive)
+ updateAllImageRequests();
}
private void uploadBgTextureInSlot(int index) {
@@ -184,12 +235,21 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
if (entry.bitmapTexture != null) {
mTileUploader.addTexture(entry.bitmapTexture);
}
+ if (!mViewType) {
+ if (entry.labelTexture != null) {
+ mLabelUploader.addBgTexture(entry.labelTexture);
+ }
+ }
}
}
private void updateTextureUploadQueue() {
- if (!mIsActive) return;
+ if (!mIsActive)
+ return;
mTileUploader.clear();
+ if (!mViewType) {
+ mLabelUploader.clear();
+ }
// add foreground textures
for (int i = mActiveStart, n = mActiveEnd; i < n; ++i) {
@@ -197,11 +257,16 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
if (entry.bitmapTexture != null) {
mTileUploader.addTexture(entry.bitmapTexture);
}
+ if (!mViewType) {
+ if (entry.labelTexture != null) {
+ mLabelUploader.addFgTexture(entry.labelTexture);
+ }
+ }
}
// add background textures
- int range = Math.max(
- (mContentEnd - mActiveEnd), (mActiveStart - mContentStart));
+ int range = Math.max((mContentEnd - mActiveEnd),
+ (mActiveStart - mContentStart));
for (int i = 0; i < range; ++i) {
uploadBgTextureInSlot(mActiveEnd + i);
uploadBgTextureInSlot(mActiveStart - i - 1);
@@ -209,54 +274,108 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
}
// We would like to request non active slots in the following order:
- // Order: 8 6 4 2 1 3 5 7
- // |---------|---------------|---------|
- // |<- active ->|
- // |<-------- cached range ----------->|
+ // Order: 8 6 4 2 1 3 5 7
+ // |---------|---------------|---------|
+ // |<- active ->|
+ // |<-------- cached range ----------->|
private void requestNonactiveImages() {
- int range = Math.max(
- (mContentEnd - mActiveEnd), (mActiveStart - mContentStart));
- for (int i = 0 ;i < range; ++i) {
- requestSlotImage(mActiveEnd + i);
- requestSlotImage(mActiveStart - 1 - i);
+ int range = Math.max((mContentEnd - mActiveEnd),
+ (mActiveStart - mContentStart));
+ for (int i = 0; i < range; ++i) {
+ // requestSlotImage(mActiveEnd + i);
+ // requestSlotImage(mActiveStart - 1 - i);
+ requestImagesInSlot(mActiveEnd + i);
+ requestImagesInSlot(mActiveStart - 1 - i);
+ }
+ isSlotSizeChanged = false;
+ }
+
+ private void requestImagesInSlot(int slotIndex) {
+ if (slotIndex < mContentStart || slotIndex >= mContentEnd)
+ return;
+ AlbumEntry entry = mData[slotIndex % mData.length];
+ if (isSlotSizeChanged && !mViewType) {
+ if ((entry.content != null || entry.item == null)
+ && entry.labelTexture != null) {
+ return;
+
+ } else {
+ if (entry.labelLoader != null)
+ entry.labelLoader.startLoad();
+ }
+ } else {
+ if (entry.content != null || entry.item == null)
+ return;
+ entry.mPanoSupportListener = new PanoSupportListener(entry);
+ entry.item.getPanoramaSupport(entry.mPanoSupportListener);
+ if (entry.contentLoader != null)
+ entry.contentLoader.startLoad();
+ if (!mViewType) {
+
+ if (entry.labelLoader != null)
+ entry.labelLoader.startLoad();
+ }
}
+
}
// return whether the request is in progress or not
private boolean requestSlotImage(int slotIndex) {
- if (slotIndex < mContentStart || slotIndex >= mContentEnd) return false;
+ if (slotIndex < mContentStart || slotIndex >= mContentEnd)
+ return false;
AlbumEntry entry = mData[slotIndex % mData.length];
- if (entry.content != null || entry.item == null) return false;
+ if (entry.content != null || entry.item == null)
+ return false;
// Set up the panorama callback
entry.mPanoSupportListener = new PanoSupportListener(entry);
entry.item.getPanoramaSupport(entry.mPanoSupportListener);
- entry.contentLoader.startLoad();
return entry.contentLoader.isRequestInProgress();
}
+ private static boolean startLoadBitmap(BitmapLoader loader) {
+ if (loader == null)
+ return false;
+ loader.startLoad();
+ return loader.isRequestInProgress();
+ }
+
private void cancelNonactiveImages() {
- int range = Math.max(
- (mContentEnd - mActiveEnd), (mActiveStart - mContentStart));
- for (int i = 0 ;i < range; ++i) {
+ int range = Math.max((mContentEnd - mActiveEnd),
+ (mActiveStart - mContentStart));
+ for (int i = 0; i < range; ++i) {
cancelSlotImage(mActiveEnd + i);
cancelSlotImage(mActiveStart - 1 - i);
}
}
private void cancelSlotImage(int slotIndex) {
- if (slotIndex < mContentStart || slotIndex >= mContentEnd) return;
+ if (slotIndex < mContentStart || slotIndex >= mContentEnd)
+ return;
AlbumEntry item = mData[slotIndex % mData.length];
- if (item.contentLoader != null) item.contentLoader.cancelLoad();
+ if (item.contentLoader != null)
+ item.contentLoader.cancelLoad();
+ if (!mViewType) {
+ if (item.labelLoader != null)
+ item.labelLoader.cancelLoad();
+ }
}
private void freeSlotContent(int slotIndex) {
AlbumEntry data[] = mData;
int index = slotIndex % data.length;
AlbumEntry entry = data[index];
- if (entry.contentLoader != null) entry.contentLoader.recycle();
- if (entry.bitmapTexture != null) entry.bitmapTexture.recycle();
+ if (entry.contentLoader != null)
+ entry.contentLoader.recycle();
+ if (!mViewType) {
+ if (entry.labelLoader != null)
+ entry.labelLoader.recycle();
+ if (entry.labelTexture != null)
+ entry.labelTexture.recycle();
+ }
+ if (entry.bitmapTexture != null)
+ entry.bitmapTexture.recycle();
data[index] = null;
}
@@ -264,28 +383,63 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
AlbumEntry entry = new AlbumEntry();
MediaItem item = mSource.get(slotIndex); // item could be null;
entry.item = item;
- entry.mediaType = (item == null)
- ? MediaItem.MEDIA_TYPE_UNKNOWN
+ entry.name = (item == null) ? null : item.getName();
+ entry.mediaType = (item == null) ? MediaItem.MEDIA_TYPE_UNKNOWN
: entry.item.getMediaType();
entry.path = (item == null) ? null : item.getPath();
entry.rotation = (item == null) ? 0 : item.getRotation();
entry.contentLoader = new ThumbnailLoader(slotIndex, entry.item);
+ if (!mViewType) {
+ if (entry.labelLoader != null) {
+ entry.labelLoader.recycle();
+ entry.labelLoader = null;
+ entry.labelTexture = null;
+ }
+ if (entry.name != null) {
+ entry.labelLoader = new AlbumLabelLoader(slotIndex, entry.name);
+ }
+ }
mData[slotIndex % mData.length] = entry;
}
private void updateAllImageRequests() {
mActiveRequestCount = 0;
for (int i = mActiveStart, n = mActiveEnd; i < n; ++i) {
- if (requestSlotImage(i)) ++mActiveRequestCount;
+ AlbumEntry entry = mData[i % mData.length];
+ if (isSlotSizeChanged) {
+ if ((entry.content != null || entry.item == null)
+ && entry.labelTexture != null) {
+ continue;
+ } else {
+ if (startLoadBitmap(entry.labelLoader))
+ ++mActiveRequestCount;
+ }
+
+ }
+
+ else {
+ if (entry.content != null || entry.item == null)
+ continue;
+ if (startLoadBitmap(entry.contentLoader))
+ ++mActiveRequestCount;
+ if (!mViewType) {
+ if (startLoadBitmap(entry.labelLoader))
+ ++mActiveRequestCount;
+ }
+ }
+
+ // if (requestSlotImage(i)) ++mActiveRequestCount;
}
- if (mActiveRequestCount == 0) {
+
+ if (isSlotSizeChanged || mActiveRequestCount == 0) {
requestNonactiveImages();
} else {
+
cancelNonactiveImages();
}
}
- private class ThumbnailLoader extends BitmapLoader {
+ private class ThumbnailLoader extends BitmapLoader {
private final int mSlotIndex;
private final MediaItem mItem;
@@ -307,7 +461,9 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
public void updateEntry() {
Bitmap bitmap = getBitmap();
- if (bitmap == null) return; // error or recycled
+
+ if (bitmap == null)
+ return; // error or recycled
AlbumEntry entry = mData[mSlotIndex % mData.length];
entry.bitmapTexture = new TiledTexture(bitmap);
entry.content = entry.bitmapTexture;
@@ -315,8 +471,10 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
if (isActiveSlot(mSlotIndex)) {
mTileUploader.addTexture(entry.bitmapTexture);
--mActiveRequestCount;
- if (mActiveRequestCount == 0) requestNonactiveImages();
- if (mListener != null) mListener.onContentChanged();
+ if (mActiveRequestCount == 0)
+ requestNonactiveImages();
+ if (mListener != null)
+ mListener.onContentChanged();
} else {
mTileUploader.addTexture(entry.bitmapTexture);
}
@@ -327,9 +485,12 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
public void onSizeChanged(int size) {
if (mSize != size) {
mSize = size;
- if (mListener != null) mListener.onSizeChanged(mSize);
- if (mContentEnd > mSize) mContentEnd = mSize;
- if (mActiveEnd > mSize) mActiveEnd = mSize;
+ if (mListener != null)
+ mListener.onSizeChanged(mSize);
+ if (mContentEnd > mSize)
+ mContentEnd = mSize;
+ if (mActiveEnd > mSize)
+ mActiveEnd = mSize;
}
}
@@ -356,10 +517,88 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
public void pause() {
mIsActive = false;
+ if (!mViewType)
+ mLabelUploader.clear();
mTileUploader.clear();
TiledTexture.freeResources();
for (int i = mContentStart, n = mContentEnd; i < n; ++i) {
freeSlotContent(i);
}
}
+
+ private static interface EntryUpdater {
+ public void updateEntry();
+ }
+
+ private class AlbumLabelLoader extends BitmapLoader implements EntryUpdater {
+ private final int mSlotIndex;
+ private final String mTitle;
+
+ public AlbumLabelLoader(int slotIndex, String title) {
+ mSlotIndex = slotIndex;
+ mTitle = title;
+ // mTotalCount = totalCount;
+ // mSourceType = sourceType;
+ }
+
+ @Override
+ protected Future<Bitmap> submitBitmapTask(FutureListener<Bitmap> l) {
+ return mThreadPool.submit(mLabelMaker.requestLabel(mTitle), this);
+ }
+
+ @Override
+ protected void onLoadComplete(Bitmap bitmap) {
+ mHandler.obtainMessage(MSG_UPDATE_ALBUM_ENTRY, this).sendToTarget();
+ }
+
+ @Override
+ public void updateEntry() {
+ Bitmap bitmap = getBitmap();
+ if (bitmap == null)
+ return; // Error or recycled
+
+ AlbumEntry entry = mData[mSlotIndex % mData.length];
+ entry.labelTexture = new BitmapTexture(bitmap);
+ entry.labelTexture.setOpaque(false);
+ // entry.labelTexture = texture;
+
+ if (isActiveSlot(mSlotIndex)) {
+ mLabelUploader.addFgTexture(entry.labelTexture);
+ --mActiveRequestCount;
+ if (mActiveRequestCount == 0)
+ requestNonactiveImages();
+ if (mListener != null)
+ mListener.onContentChanged();
+ } else {
+ mLabelUploader.addBgTexture(entry.labelTexture);
+ }
+ }
+ }
+
+ public void onSlotSizeChanged(int width, int height) {
+ if (mSlotWidth == width)
+ return;
+
+ isSlotSizeChanged = !mViewType ;
+ mSlotWidth = width;
+ mLoadingLabel = null;
+ mLabelMaker.setLabelWidth(mSlotWidth,KEY_ALBUM);
+
+ if (!mIsActive)
+ return;
+
+ for (int i = mContentStart, n = mContentEnd; i < n; ++i) {
+ AlbumEntry entry = mData[i % mData.length];
+ if (entry.labelLoader != null) {
+ entry.labelLoader.recycle();
+ entry.labelLoader = null;
+ entry.labelTexture = null;
+ }
+ if (entry.name != null) {
+ entry.labelLoader = new AlbumLabelLoader(i, entry.name);
+ }
+ }
+ updateAllImageRequests();
+ updateTextureUploadQueue();
+ }
}
diff --git a/src/com/android/gallery3d/ui/AlbumSlotRenderer.java b/src/com/android/gallery3d/ui/AlbumSlotRenderer.java
index 5c1441ee9..5d4898f10 100644
--- a/src/com/android/gallery3d/ui/AlbumSlotRenderer.java
+++ b/src/com/android/gallery3d/ui/AlbumSlotRenderer.java
@@ -1,4 +1,7 @@
/*
+ * Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ * Not a Contribution
+ *
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,6 +21,7 @@ package com.android.gallery3d.ui;
import com.android.gallery3d.app.AbstractGalleryActivity;
import com.android.gallery3d.app.AlbumDataLoader;
+import com.android.gallery3d.app.AlbumPage;
import com.android.gallery3d.data.MediaObject;
import com.android.gallery3d.data.Path;
import com.android.gallery3d.glrenderer.ColorTexture;
@@ -25,10 +29,24 @@ import com.android.gallery3d.glrenderer.FadeInTexture;
import com.android.gallery3d.glrenderer.GLCanvas;
import com.android.gallery3d.glrenderer.Texture;
import com.android.gallery3d.glrenderer.TiledTexture;
+import com.android.gallery3d.glrenderer.UploadedTexture;
+import com.android.gallery3d.ui.AlbumSlidingWindow.AlbumEntry;
public class AlbumSlotRenderer extends AbstractSlotRenderer {
@SuppressWarnings("unused")
private static final String TAG = "AlbumView";
+ private boolean mIsGridViewShown;
+
+ public static class LabelSpec {
+ public int labelBackgroundHeight;
+ public int titleFontSize;
+ public int leftMargin;
+ public int iconSize;
+ public int titleLeftMargin;
+ public int backgroundColor;
+ public int titleColor;
+ public int borderSize;
+ }
public interface SlotFilter {
public boolean acceptSlot(int index);
@@ -40,7 +58,7 @@ public class AlbumSlotRenderer extends AbstractSlotRenderer {
private AlbumSlidingWindow mDataWindow;
private final AbstractGalleryActivity mActivity;
private final ColorTexture mWaitLoadingTexture;
- private final SlotView mSlotView;
+ private SlotView mSlotView;
private final SelectionManager mSelectionManager;
private int mPressedIndex = -1;
@@ -49,33 +67,40 @@ public class AlbumSlotRenderer extends AbstractSlotRenderer {
private boolean mInSelectionMode;
private SlotFilter mSlotFilter;
+ protected final LabelSpec mLabelSpec;
- public AlbumSlotRenderer(AbstractGalleryActivity activity, SlotView slotView,
- SelectionManager selectionManager, int placeholderColor) {
+ public AlbumSlotRenderer(AbstractGalleryActivity activity,
+ SlotView slotView, LabelSpec labelSpec,
+ SelectionManager selectionManager, int placeholderColor,
+ boolean viewType) {
super(activity);
mActivity = activity;
mSlotView = slotView;
mSelectionManager = selectionManager;
mPlaceholderColor = placeholderColor;
-
+ mLabelSpec = labelSpec;
mWaitLoadingTexture = new ColorTexture(mPlaceholderColor);
mWaitLoadingTexture.setSize(1, 1);
+ mIsGridViewShown = viewType;
}
public void setPressedIndex(int index) {
- if (mPressedIndex == index) return;
+ if (mPressedIndex == index)
+ return;
mPressedIndex = index;
mSlotView.invalidate();
}
public void setPressedUp() {
- if (mPressedIndex == -1) return;
+ if (mPressedIndex == -1)
+ return;
mAnimatePressedUp = true;
mSlotView.invalidate();
}
public void setHighlightItemPath(Path path) {
- if (mHighlightItemPath == path) return;
+ if (mHighlightItemPath == path)
+ return;
mHighlightItemPath = path;
mSlotView.invalidate();
}
@@ -87,22 +112,28 @@ public class AlbumSlotRenderer extends AbstractSlotRenderer {
mDataWindow = null;
}
if (model != null) {
- mDataWindow = new AlbumSlidingWindow(mActivity, model, CACHE_SIZE);
+ mDataWindow = new AlbumSlidingWindow(mActivity, model, CACHE_SIZE,
+ mLabelSpec, mIsGridViewShown);
mDataWindow.setListener(new MyDataModelListener());
mSlotView.setSlotCount(model.size());
+
}
}
private static Texture checkTexture(Texture texture) {
return (texture instanceof TiledTexture)
- && !((TiledTexture) texture).isReady()
- ? null
- : texture;
+ && !((TiledTexture) texture).isReady() ? null : texture;
}
@Override
- public int renderSlot(GLCanvas canvas, int index, int pass, int width, int height) {
- if (mSlotFilter != null && !mSlotFilter.acceptSlot(index)) return 0;
+ public int renderSlot(GLCanvas canvas, int index, int pass, int width,
+ int height) {
+ int thumbSize = 0;
+ if (!mIsGridViewShown) {
+ thumbSize = mLabelSpec.iconSize;
+ }
+ if (mSlotFilter != null && !mSlotFilter.acceptSlot(index))
+ return 0;
AlbumSlidingWindow.AlbumEntry entry = mDataWindow.get(index);
@@ -118,20 +149,25 @@ public class AlbumSlotRenderer extends AbstractSlotRenderer {
entry.content = content;
}
drawContent(canvas, content, width, height, entry.rotation);
- if ((content instanceof FadeInTexture) &&
- ((FadeInTexture) content).isAnimating()) {
+ if ((content instanceof FadeInTexture)
+ && ((FadeInTexture) content).isAnimating()) {
renderRequestFlags |= SlotView.RENDER_MORE_FRAME;
}
+ if (!mIsGridViewShown)
+ renderRequestFlags |= renderLabel(canvas, entry, width, height);
if (entry.mediaType == MediaObject.MEDIA_TYPE_VIDEO) {
- drawVideoOverlay(canvas, width, height);
- } else if ((entry.mediaType == MediaObject.MEDIA_TYPE_DRM_VIDEO)
+ drawVideoOverlay(canvas, width, height, mIsGridViewShown, thumbSize);
+ }
+
+ if ((entry.mediaType == MediaObject.MEDIA_TYPE_DRM_VIDEO)
|| (entry.mediaType == MediaObject.MEDIA_TYPE_DRM_IMAGE)) {
- drawDrmOverlay(canvas, width, height, entry.mediaType);
+ drawDrmOverlay(canvas, width, height, entry.mediaType,
+ mIsGridViewShown, thumbSize);
}
if (entry.isPanorama) {
- drawPanoramaIcon(canvas, width, height);
+ drawPanoramaIcon(canvas, width, height, mIsGridViewShown, thumbSize);
}
renderRequestFlags |= renderOverlay(canvas, index, entry, width, height);
@@ -139,6 +175,19 @@ public class AlbumSlotRenderer extends AbstractSlotRenderer {
return renderRequestFlags;
}
+ protected int renderLabel(GLCanvas canvas, AlbumEntry entry, int width,
+ int height) {
+ Texture content = checkLabelTexture(entry.labelTexture);
+ if (content == null) {
+ content = mWaitLoadingTexture;
+ }
+ int b = AlbumLabelMaker.getBorderSize();
+ int h = mLabelSpec.labelBackgroundHeight;
+ content.draw(canvas, -b, height - h + b, width + b + b, h);
+
+ return 0;
+ }
+
private int renderOverlay(GLCanvas canvas, int index,
AlbumSlidingWindow.AlbumEntry entry, int width, int height) {
int renderRequestFlags = 0;
@@ -155,22 +204,30 @@ public class AlbumSlotRenderer extends AbstractSlotRenderer {
}
} else if ((entry.path != null) && (mHighlightItemPath == entry.path)) {
drawSelectedFrame(canvas, width, height);
- } else if (mInSelectionMode && mSelectionManager.isItemSelected(entry.path)) {
+ } else if (mInSelectionMode
+ && mSelectionManager.isItemSelected(entry.path)) {
drawSelectedFrame(canvas, width, height);
}
return renderRequestFlags;
}
+ private static Texture checkLabelTexture(Texture texture) {
+ return ((texture instanceof UploadedTexture) && ((UploadedTexture) texture)
+ .isUploading()) ? null : texture;
+ }
+
private class MyDataModelListener implements AlbumSlidingWindow.Listener {
@Override
public void onContentChanged() {
mSlotView.invalidate();
+
}
@Override
public void onSizeChanged(int size) {
mSlotView.setSlotCount(size);
mSlotView.invalidate();
+
}
}
@@ -196,7 +253,9 @@ public class AlbumSlotRenderer extends AbstractSlotRenderer {
@Override
public void onSlotSizeChanged(int width, int height) {
- // Do nothing
+ if (!mIsGridViewShown && mDataWindow != null) {
+ mDataWindow.onSlotSizeChanged(width, height);
+ }
}
public void setSlotFilter(SlotFilter slotFilter) {
diff --git a/src/com/android/gallery3d/ui/DialogDetailsView.java b/src/com/android/gallery3d/ui/DialogDetailsView.java
index 26934105b..84d224fc4 100644
--- a/src/com/android/gallery3d/ui/DialogDetailsView.java
+++ b/src/com/android/gallery3d/ui/DialogDetailsView.java
@@ -21,8 +21,10 @@ import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
+import android.content.res.Resources;
import android.text.TextUtils;
import android.text.format.Formatter;
+import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -54,7 +56,7 @@ public class DialogDetailsView implements DetailsViewContainer {
private MediaDetails mDetails;
private final DetailsSource mSource;
private int mIndex;
- private Dialog mDialog;
+ private AlertDialog mDialog;
private CloseListener mListener;
public DialogDetailsView(AbstractGalleryActivity activity, DetailsSource source) {
@@ -94,17 +96,19 @@ public class DialogDetailsView implements DetailsViewContainer {
ListView detailsList = (ListView) LayoutInflater.from(mActivity.getAndroidContext()).inflate(
R.layout.details_list, null, false);
detailsList.setAdapter(mAdapter);
- mDialog = new AlertDialog.Builder(mActivity)
- .setView(detailsList)
- .setTitle(title)
- .setPositiveButton(R.string.close, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int whichButton) {
- mDialog.dismiss();
- }
- })
- .create();
+ AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
+
+ builder.setView(detailsList);
+ builder.setTitle(title);
+ builder.setPositiveButton(R.string.close,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int whichButton) {
+ mDialog.dismiss();
+ }
+ });
+ mDialog = builder.create();
mDialog.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
@@ -113,6 +117,24 @@ public class DialogDetailsView implements DetailsViewContainer {
}
}
});
+ mDialog.show();
+ Resources r = mActivity.getResources();
+
+ int buttonColor = r.getColor(R.color.dialog_button_color);
+ mDialog.getButton(DialogInterface.BUTTON_POSITIVE)
+ .setTextSize(TypedValue.COMPLEX_UNIT_SP,14);
+ mDialog.getButton(DialogInterface.BUTTON_POSITIVE).setTextColor(
+ buttonColor);
+
+ builder.setView(detailsList);
+ builder.setTitle(title);
+ builder.setPositiveButton(R.string.close,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int whichButton) {
+ mDialog.dismiss();
+ }
+ });
}
diff --git a/src/com/android/gallery3d/ui/MenuExecutor.java b/src/com/android/gallery3d/ui/MenuExecutor.java
index 2e8b90644..c4636cb38 100644
--- a/src/com/android/gallery3d/ui/MenuExecutor.java
+++ b/src/com/android/gallery3d/ui/MenuExecutor.java
@@ -183,9 +183,9 @@ public class MenuExecutor {
supportPrint &= PrintHelper.systemSupportsPrint();
boolean supportDrmInfo = (supported & MediaObject.SUPPORT_DRM_INFO) != 0;
setMenuItemVisible(menu, R.id.action_delete, supportDelete);
- setMenuItemVisible(menu, R.id.action_rotate_ccw, supportRotate);
- setMenuItemVisible(menu, R.id.action_rotate_cw, supportRotate);
- setMenuItemVisible(menu, R.id.action_crop, supportCrop);
+ //setMenuItemVisible(menu, R.id.action_rotate_ccw, supportRotate);
+ //setMenuItemVisible(menu, R.id.action_rotate_cw, supportRotate);
+ //setMenuItemVisible(menu, R.id.action_crop, supportCrop);
setMenuItemVisible(menu, R.id.action_trim, supportTrim);
setMenuItemVisible(menu, R.id.action_mute, supportMute);
// Hide panorama until call to updateMenuForPanorama corrects it
@@ -204,8 +204,8 @@ public class MenuExecutor {
boolean disablePanorama360Options) {
setMenuItemVisible(menu, R.id.action_share_panorama, shareAsPanorama360);
if (disablePanorama360Options) {
- setMenuItemVisible(menu, R.id.action_rotate_ccw, false);
- setMenuItemVisible(menu, R.id.action_rotate_cw, false);
+ //setMenuItemVisible(menu, R.id.action_rotate_ccw, false);
+ //setMenuItemVisible(menu, R.id.action_rotate_cw, false);
}
}
@@ -242,11 +242,11 @@ public class MenuExecutor {
mSelectionManager.selectAll();
}
return;
- case R.id.action_crop: {
+ /*case R.id.action_crop: {
Intent intent = getIntentBySingleSelectedPath(CropActivity.CROP_ACTION);
((Activity) mActivity).startActivity(intent);
return;
- }
+ }*/
case R.id.action_edit: {
Intent intent = getIntentBySingleSelectedPath(Intent.ACTION_EDIT)
.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
@@ -273,12 +273,15 @@ public class MenuExecutor {
case R.id.action_delete:
title = R.string.delete;
break;
- case R.id.action_rotate_cw:
+ case R.id.photopage_bottom_control_delete:
+ title = R.string.delete;
+ break;
+ /*case R.id.action_rotate_cw:
title = R.string.rotate_right;
break;
case R.id.action_rotate_ccw:
title = R.string.rotate_left;
- break;
+ break;*/
case R.id.action_show_on_map:
title = R.string.show_on_map;
break;
@@ -335,7 +338,14 @@ public class MenuExecutor {
public void onMenuClicked(MenuItem menuItem, String confirmMsg,
final ProgressListener listener) {
- final int action = menuItem.getItemId();
+ final int action;
+ if (menuItem == null) {
+ action = R.id.photopage_bottom_control_delete;
+ }
+ else
+ {
+ action = menuItem.getItemId();
+ }
if (confirmMsg != null) {
if (listener != null) listener.onConfirmDialogShown();
@@ -401,12 +411,15 @@ public class MenuExecutor {
case R.id.action_delete:
manager.delete(path);
break;
- case R.id.action_rotate_cw:
+ case R.id.photopage_bottom_control_delete:
+ manager.delete(path);
+ break;
+ /*case R.id.action_rotate_cw:
manager.rotate(path, 90);
break;
case R.id.action_rotate_ccw:
manager.rotate(path, -90);
- break;
+ break;*/
case R.id.action_toggle_full_caching: {
MediaObject obj = manager.getMediaObject(path);
int cacheFlag = obj.getCacheFlag();
diff --git a/src/com/android/gallery3d/ui/PhotoView.java b/src/com/android/gallery3d/ui/PhotoView.java
index cb14e490d..3cb24e4a1 100644
--- a/src/com/android/gallery3d/ui/PhotoView.java
+++ b/src/com/android/gallery3d/ui/PhotoView.java
@@ -307,7 +307,7 @@ public class PhotoView extends GLView {
mEdgeView.onAbsorb(velocity, direction);
}
});
- mVideoPlayIcon = new ResourceTexture(mContext, R.drawable.ic_control_play);
+ mVideoPlayIcon = new ResourceTexture(mContext, R.drawable.play_detail);
mDrmIcon = new ResourceTexture(mContext, R.drawable.drm_image);
for (int i = -SCREEN_NAIL_MAX; i <= SCREEN_NAIL_MAX; i++) {
if (i == 0) {
diff --git a/src/com/android/gallery3d/ui/PopupList.java b/src/com/android/gallery3d/ui/PopupList.java
index 248f50b25..a03e27ca2 100644
--- a/src/com/android/gallery3d/ui/PopupList.java
+++ b/src/com/android/gallery3d/ui/PopupList.java
@@ -17,7 +17,9 @@
package com.android.gallery3d.ui;
import android.content.Context;
+import android.graphics.Color;
import android.graphics.Rect;
+import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.MeasureSpec;
@@ -154,9 +156,10 @@ public class PopupList {
private PopupWindow createPopupWindow() {
PopupWindow popup = new PopupWindow(mContext);
popup.setOnDismissListener(mOnDismissListener);
+ popup.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#ffffff")));
- popup.setBackgroundDrawable(mContext.getResources().getDrawable(
- R.drawable.menu_dropdown_panel_holo_dark));
+// popup.setBackgroundDrawable(mContext.getResources().getDrawable(
+// R.drawable.menu_dropdown_panel_holo_dark));
mContentList = new ListView(mContext, null,
android.R.attr.dropDownListViewStyle);
diff --git a/src/com/android/gallery3d/ui/SelectionManager.java b/src/com/android/gallery3d/ui/SelectionManager.java
index 0164a7a75..d7cd16229 100644
--- a/src/com/android/gallery3d/ui/SelectionManager.java
+++ b/src/com/android/gallery3d/ui/SelectionManager.java
@@ -147,6 +147,20 @@ public class SelectionManager {
}
}
+ public void toggleTimeLineSet(ArrayList<Path> paths) {
+ if (mClickedSet.containsAll(paths))
+ mClickedSet.removeAll(paths);
+ else {
+ enterSelectionMode();
+ mClickedSet.addAll(paths);
+ }
+ int count = getSelectedCount();
+ if (count == (mSourceMediaSet.getMediaItemCount() - mSourceMediaSet.getSubMediaSetCount()))
+ selectAll();
+ if (mListener != null) mListener.onSelectionChange(paths.get(0), isItemSelected(paths.get(0)));
+ if (count == 0 && mAutoLeave)
+ leaveSelectionMode();
+ }
private static boolean expandMediaSet(ArrayList<Path> items, MediaSet set, int maxSelection) {
int subCount = set.getSubMediaSetCount();
for (int i = 0; i < subCount; i++) {
diff --git a/src/com/android/gallery3d/ui/SlotView.java b/src/com/android/gallery3d/ui/SlotView.java
index eaf23f553..b5fa2bf6c 100644
--- a/src/com/android/gallery3d/ui/SlotView.java
+++ b/src/com/android/gallery3d/ui/SlotView.java
@@ -16,6 +16,7 @@
package com.android.gallery3d.ui;
+import android.app.Activity;
import android.graphics.Rect;
import android.os.Handler;
import android.text.TextUtils;
@@ -24,6 +25,7 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.animation.DecelerateInterpolator;
+import com.android.gallery3d.R;
import com.android.gallery3d.anim.Animation;
import com.android.gallery3d.app.AbstractGalleryActivity;
import com.android.gallery3d.common.Utils;
@@ -35,7 +37,7 @@ public class SlotView extends GLView {
@SuppressWarnings("unused")
private static final String TAG = "SlotView";
- private static final boolean WIDE = true;
+ private static final boolean WIDE = false;
private static final int INDEX_NONE = -1;
public static final int RENDER_MORE_PASS = 1;
@@ -94,11 +96,13 @@ public class SlotView extends GLView {
// Flag to check whether it is come from Photo Page.
private boolean isFromPhotoPage = false;
+ private Activity mActivity;
public SlotView(AbstractGalleryActivity activity, Spec spec) {
mGestureDetector = new GestureDetector(activity, new MyGestureListener());
mScroller = new ScrollerHelper(activity);
mHandler = new SynchronizedHandler(activity.getGLRoot());
+ mActivity = activity;
setSlotSpec(spec);
}
@@ -410,6 +414,9 @@ public class SlotView extends GLView {
public int rowsLand = -1;
public int rowsPort = -1;
public int slotGap = -1;
+ public int slotGapLand = -1;
+ public int colsLand = -1;
+ public int colsPort = -1;
}
public class Layout {
@@ -508,7 +515,7 @@ public class SlotView extends GLView {
int availableUnits = Math.min(mUnitCount, mSlotCount);
int usedMinorLength = availableUnits * minorUnitSize +
(availableUnits - 1) * mSlotGap;
- padding[0] = (minorLength - usedMinorLength) / 2;
+ padding[0] = 0;//mActivity.getResources().getDimensionPixelSize(R.dimen.toolbar_height);
// Then calculate how many columns we need for all slots.
int count = ((mSlotCount + mUnitCount - 1) / mUnitCount);
@@ -516,20 +523,20 @@ public class SlotView extends GLView {
// If the content length is less then the screen width, put
// extra padding in left and right.
- padding[1] = Math.max(0, (majorLength - mContentLength) / 2);
+ padding[1] = 0 ;//Math.max(0, (majorLength - mContentLength) / 2);
}
private void initLayoutParameters() {
// Initialize mSlotWidth and mSlotHeight from mSpec
if (mSpec.slotWidth != -1) {
- mSlotGap = 0;
- mSlotWidth = mSpec.slotWidth;
- mSlotHeight = mSpec.slotHeight;
+ mSlotGap = (mWidth > mHeight) ? mSpec.slotGapLand : mSpec.slotGap;
+ int cols = (mWidth > mHeight) ? mSpec.colsLand : mSpec.colsPort;
+ mSlotHeight = Math.max(1, (mWidth - (cols - 1) * mSlotGap) / cols) ;
+ mSlotWidth = mSlotHeight ;//mSpec.slotWidth;
} else {
- int rows = (mWidth > mHeight) ? mSpec.rowsLand : mSpec.rowsPort;
- mSlotGap = mSpec.slotGap;
- mSlotHeight = Math.max(1, (mHeight - (rows - 1) * mSlotGap) / rows);
- mSlotWidth = mSlotHeight - mSpec.slotHeightAdditional;
+ mSlotGap = (mWidth > mHeight) ? mSpec.slotGapLand : mSpec.slotGap;;
+ mSlotHeight = mSpec.slotHeight;//Math.max(1, (mHeight - (rows - 1) * mSlotGap) / rows);
+ mSlotWidth = mWidth;//mSlotHeight - mSpec.slotHeightAdditional;
}
if (mRenderer != null) {
diff --git a/src/com/android/gallery3d/util/GalleryUtils.java b/src/com/android/gallery3d/util/GalleryUtils.java
index 8e4ebb714..d7fb3332a 100644
--- a/src/com/android/gallery3d/util/GalleryUtils.java
+++ b/src/com/android/gallery3d/util/GalleryUtils.java
@@ -23,6 +23,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
@@ -44,6 +45,7 @@ import com.android.gallery3d.app.PackagesMonitor;
import com.android.gallery3d.common.ApiHelper;
import com.android.gallery3d.data.DataManager;
import com.android.gallery3d.data.MediaItem;
+import com.android.gallery3d.ui.SharedPreferencesCompat;
import com.android.gallery3d.ui.TiledScreenNail;
import com.android.gallery3d.util.IntentHelper;
import com.android.gallery3d.util.ThreadPool.CancelListener;
@@ -421,4 +423,18 @@ public class GalleryUtils {
int h = item.getHeight();
return (h > 0 && w / h >= 2);
}
+ // Newly added methods
+ public static int getIntPref(Context context, String name, int def) {
+ SharedPreferences prefs =
+ context.getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE);
+ return prefs.getInt(name, def);
+ }
+
+ public static void setIntPref(Context context, String name, int value) {
+ SharedPreferences prefs =
+ context.getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE);
+ Editor ed = prefs.edit();
+ ed.putInt(name, value);
+ ed.commit();
+ }
}