diff options
author | Ravi Banuri <ravibanuri@codeaurora.org> | 2015-10-21 15:54:59 +0530 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2015-11-08 22:56:22 -0800 |
commit | 49f14dd9382af3a04ec27bde0b2ae7362220181a (patch) | |
tree | 63be966b79c42e2e46b486f081384f299a3a448c | |
parent | c963ee889ea7e1f05c51129a8c742f8cfd874047 (diff) | |
download | android_packages_apps_Gallery2-49f14dd9382af3a04ec27bde0b2ae7362220181a.tar.gz android_packages_apps_Gallery2-49f14dd9382af3a04ec27bde0b2ae7362220181a.tar.bz2 android_packages_apps_Gallery2-49f14dd9382af3a04ec27bde0b2ae7362220181a.zip |
Gallery: UX enhancement
Added new resources and modified source
to enhance the UI of Gallery application.
CRs-Fixed: 926603
Change-Id: I5ca7c49115ab4a3531b72a53380bb765d52707a2
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 Binary files differnew file mode 100644 index 000000000..b767b1bbf --- /dev/null +++ b/res/drawable-hdpi/blur.png diff --git a/res/drawable-hdpi/drawer_bg.png b/res/drawable-hdpi/drawer_bg.png Binary files differnew file mode 100644 index 000000000..d7dd7a682 --- /dev/null +++ b/res/drawable-hdpi/drawer_bg.png diff --git a/res/drawable-hdpi/feather.png b/res/drawable-hdpi/feather.png Binary files differnew file mode 100644 index 000000000..02bd37041 --- /dev/null +++ b/res/drawable-hdpi/feather.png diff --git a/res/drawable-hdpi/focus.png b/res/drawable-hdpi/focus.png Binary files differnew file mode 100644 index 000000000..a168a05d0 --- /dev/null +++ b/res/drawable-hdpi/focus.png diff --git a/res/drawable-hdpi/fusion.png b/res/drawable-hdpi/fusion.png Binary files differnew file mode 100644 index 000000000..7abeb245f --- /dev/null +++ b/res/drawable-hdpi/fusion.png diff --git a/res/drawable-hdpi/halo.png b/res/drawable-hdpi/halo.png Binary files differnew file mode 100644 index 000000000..f32da8519 --- /dev/null +++ b/res/drawable-hdpi/halo.png diff --git a/res/drawable-hdpi/multiselect.png b/res/drawable-hdpi/multiselect.png Binary files differnew file mode 100644 index 000000000..59c8eee6a --- /dev/null +++ b/res/drawable-hdpi/multiselect.png diff --git a/res/drawable-hdpi/none.png b/res/drawable-hdpi/none.png Binary files differnew file mode 100644 index 000000000..58a7fd833 --- /dev/null +++ b/res/drawable-hdpi/none.png diff --git a/res/drawable-hdpi/play_detail.png b/res/drawable-hdpi/play_detail.png Binary files differnew file mode 100644 index 000000000..21060fc17 --- /dev/null +++ b/res/drawable-hdpi/play_detail.png diff --git a/res/drawable-hdpi/random.png b/res/drawable-hdpi/random.png Binary files differnew file mode 100644 index 000000000..3ae23df96 --- /dev/null +++ b/res/drawable-hdpi/random.png diff --git a/res/drawable-hdpi/rectangle.png b/res/drawable-hdpi/rectangle.png Binary files differnew file mode 100644 index 000000000..10c0e9a88 --- /dev/null +++ b/res/drawable-hdpi/rectangle.png diff --git a/res/drawable-hdpi/round.png b/res/drawable-hdpi/round.png Binary files differnew file mode 100644 index 000000000..d9014c0b3 --- /dev/null +++ b/res/drawable-hdpi/round.png diff --git a/res/drawable-hdpi/sketch.png b/res/drawable-hdpi/sketch.png Binary files differnew file mode 100644 index 000000000..f43f6ace1 --- /dev/null +++ b/res/drawable-hdpi/sketch.png diff --git a/res/drawable-hdpi/square.png b/res/drawable-hdpi/square.png Binary files differnew file mode 100644 index 000000000..9b744bad7 --- /dev/null +++ b/res/drawable-hdpi/square.png diff --git a/res/drawable-xhdpi/blur.png b/res/drawable-xhdpi/blur.png Binary files differnew file mode 100644 index 000000000..279848e2f --- /dev/null +++ b/res/drawable-xhdpi/blur.png diff --git a/res/drawable-xhdpi/drawer_bg.png b/res/drawable-xhdpi/drawer_bg.png Binary files differnew file mode 100644 index 000000000..5640493e3 --- /dev/null +++ b/res/drawable-xhdpi/drawer_bg.png diff --git a/res/drawable-xhdpi/feather.png b/res/drawable-xhdpi/feather.png Binary files differnew file mode 100644 index 000000000..d622a2fe0 --- /dev/null +++ b/res/drawable-xhdpi/feather.png diff --git a/res/drawable-xhdpi/focus.png b/res/drawable-xhdpi/focus.png Binary files differnew file mode 100644 index 000000000..ea695b49c --- /dev/null +++ b/res/drawable-xhdpi/focus.png diff --git a/res/drawable-xhdpi/fusion.png b/res/drawable-xhdpi/fusion.png Binary files differnew file mode 100644 index 000000000..158fcbb2e --- /dev/null +++ b/res/drawable-xhdpi/fusion.png diff --git a/res/drawable-xhdpi/halo.png b/res/drawable-xhdpi/halo.png Binary files differnew file mode 100644 index 000000000..8047a73e1 --- /dev/null +++ b/res/drawable-xhdpi/halo.png diff --git a/res/drawable-xhdpi/multiselect.png b/res/drawable-xhdpi/multiselect.png Binary files differnew file mode 100644 index 000000000..41ecb89ea --- /dev/null +++ b/res/drawable-xhdpi/multiselect.png diff --git a/res/drawable-xhdpi/normal.png b/res/drawable-xhdpi/normal.png Binary files differnew file mode 100644 index 000000000..91cb73990 --- /dev/null +++ b/res/drawable-xhdpi/normal.png diff --git a/res/drawable-xhdpi/play_detail.png b/res/drawable-xhdpi/play_detail.png Binary files differnew file mode 100644 index 000000000..d8999dcdc --- /dev/null +++ b/res/drawable-xhdpi/play_detail.png diff --git a/res/drawable-xhdpi/random.png b/res/drawable-xhdpi/random.png Binary files differnew file mode 100644 index 000000000..ca6b3f2e0 --- /dev/null +++ b/res/drawable-xhdpi/random.png diff --git a/res/drawable-xhdpi/rectangle.png b/res/drawable-xhdpi/rectangle.png Binary files differnew file mode 100644 index 000000000..138d25ba8 --- /dev/null +++ b/res/drawable-xhdpi/rectangle.png diff --git a/res/drawable-xhdpi/round.png b/res/drawable-xhdpi/round.png Binary files differnew file mode 100644 index 000000000..012a706ea --- /dev/null +++ b/res/drawable-xhdpi/round.png diff --git a/res/drawable-xhdpi/sketch.png b/res/drawable-xhdpi/sketch.png Binary files differnew file mode 100644 index 000000000..357cb4176 --- /dev/null +++ b/res/drawable-xhdpi/sketch.png diff --git a/res/drawable-xhdpi/square.png b/res/drawable-xhdpi/square.png Binary files differnew file mode 100644 index 000000000..d9d794609 --- /dev/null +++ b/res/drawable-xhdpi/square.png diff --git a/res/drawable-xxhdpi/blur.png b/res/drawable-xxhdpi/blur.png Binary files differnew file mode 100644 index 000000000..9cd27ee8f --- /dev/null +++ b/res/drawable-xxhdpi/blur.png diff --git a/res/drawable-xxhdpi/drawer_bg.png b/res/drawable-xxhdpi/drawer_bg.png Binary files differnew file mode 100644 index 000000000..adc7e4a39 --- /dev/null +++ b/res/drawable-xxhdpi/drawer_bg.png diff --git a/res/drawable-xxhdpi/feather.png b/res/drawable-xxhdpi/feather.png Binary files differnew file mode 100644 index 000000000..bb8069e11 --- /dev/null +++ b/res/drawable-xxhdpi/feather.png diff --git a/res/drawable-xxhdpi/focus.png b/res/drawable-xxhdpi/focus.png Binary files differnew file mode 100644 index 000000000..8d58fd6ce --- /dev/null +++ b/res/drawable-xxhdpi/focus.png diff --git a/res/drawable-xxhdpi/fusion.png b/res/drawable-xxhdpi/fusion.png Binary files differnew file mode 100644 index 000000000..1e88b9b6b --- /dev/null +++ b/res/drawable-xxhdpi/fusion.png diff --git a/res/drawable-xxhdpi/halo.png b/res/drawable-xxhdpi/halo.png Binary files differnew file mode 100644 index 000000000..99ed56f6c --- /dev/null +++ b/res/drawable-xxhdpi/halo.png diff --git a/res/drawable-xxhdpi/multiselect.png b/res/drawable-xxhdpi/multiselect.png Binary files differnew file mode 100644 index 000000000..6ec298519 --- /dev/null +++ b/res/drawable-xxhdpi/multiselect.png diff --git a/res/drawable-xxhdpi/none.png b/res/drawable-xxhdpi/none.png Binary files differnew file mode 100644 index 000000000..6e54e7d59 --- /dev/null +++ b/res/drawable-xxhdpi/none.png diff --git a/res/drawable-xxhdpi/play_detail.png b/res/drawable-xxhdpi/play_detail.png Binary files differnew file mode 100644 index 000000000..01fc30f4c --- /dev/null +++ b/res/drawable-xxhdpi/play_detail.png diff --git a/res/drawable-xxhdpi/random.png b/res/drawable-xxhdpi/random.png Binary files differnew file mode 100644 index 000000000..78140f7f6 --- /dev/null +++ b/res/drawable-xxhdpi/random.png diff --git a/res/drawable-xxhdpi/rectangle.png b/res/drawable-xxhdpi/rectangle.png Binary files differnew file mode 100644 index 000000000..ba45378e1 --- /dev/null +++ b/res/drawable-xxhdpi/rectangle.png diff --git a/res/drawable-xxhdpi/round.png b/res/drawable-xxhdpi/round.png Binary files differnew file mode 100644 index 000000000..3d9282fec --- /dev/null +++ b/res/drawable-xxhdpi/round.png diff --git a/res/drawable-xxhdpi/sketch.png b/res/drawable-xxhdpi/sketch.png Binary files differnew file mode 100644 index 000000000..be89c59a0 --- /dev/null +++ b/res/drawable-xxhdpi/sketch.png diff --git a/res/drawable-xxhdpi/square.png b/res/drawable-xxhdpi/square.png Binary files differnew file mode 100644 index 000000000..d339d8eeb --- /dev/null +++ b/res/drawable-xxhdpi/square.png 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 Binary files differindex 23ea99890..a6eaaa384 100644 --- a/res/mipmap-hdpi/ic_launcher_gallery.png +++ b/res/mipmap-hdpi/ic_launcher_gallery.png diff --git a/res/mipmap-xhdpi/ic_launcher_gallery.png b/res/mipmap-xhdpi/ic_launcher_gallery.png Binary files differindex 79544a2b6..345bbeeec 100644 --- a/res/mipmap-xhdpi/ic_launcher_gallery.png +++ b/res/mipmap-xhdpi/ic_launcher_gallery.png diff --git a/res/mipmap-xxhdpi/ic_launcher_gallery.png b/res/mipmap-xxhdpi/ic_launcher_gallery.png Binary files differnew file mode 100644 index 000000000..b064bdb4d --- /dev/null +++ b/res/mipmap-xxhdpi/ic_launcher_gallery.png 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(); + } } |