diff options
author | Ray Chen <raychen@google.com> | 2011-08-24 11:40:04 +0800 |
---|---|---|
committer | Ray Chen <raychen@google.com> | 2011-08-26 20:20:48 +0800 |
commit | 7c56dc26503e304905971830da9527968b64e6ab (patch) | |
tree | d7138684c7ee742527ca1c4ef41318567fb6a9e3 | |
parent | 6e08652a742e80e2db4bdb6d3782327efc2a090c (diff) | |
download | android_packages_apps_Camera2-7c56dc26503e304905971830da9527968b64e6ab.tar.gz android_packages_apps_Camera2-7c56dc26503e304905971830da9527968b64e6ab.tar.bz2 android_packages_apps_Camera2-7c56dc26503e304905971830da9527968b64e6ab.zip |
Fix 5133608 [UI] Details should be displayed as a system dialog in phone UI
Fix 5132798 [UI] Details popup on tablet is incorrectly placed and should not have x icon to close
Fix 5199822 Long press and select "detail" shows details of another item
Change-Id: I0e992ded8a154edb1c7a81b75d0461d5bf309f31
-rw-r--r-- | res/drawable-hdpi/ic_lockscreen_chevron_up.png | bin | 0 -> 698 bytes | |||
-rw-r--r-- | res/drawable-mdpi/ic_lockscreen_chevron_up.png | bin | 0 -> 536 bytes | |||
-rw-r--r-- | res/layout/details.xml | 23 | ||||
-rw-r--r-- | res/values-xlarge/bool.xml | 4 | ||||
-rw-r--r-- | res/values/bool.xml | 4 | ||||
-rw-r--r-- | res/values/strings.xml | 2 | ||||
-rw-r--r-- | src/com/android/gallery3d/ui/DetailsAddressResolver.java | 116 |
7 files changed, 149 insertions, 0 deletions
diff --git a/res/drawable-hdpi/ic_lockscreen_chevron_up.png b/res/drawable-hdpi/ic_lockscreen_chevron_up.png Binary files differnew file mode 100644 index 000000000..4ffa833b9 --- /dev/null +++ b/res/drawable-hdpi/ic_lockscreen_chevron_up.png diff --git a/res/drawable-mdpi/ic_lockscreen_chevron_up.png b/res/drawable-mdpi/ic_lockscreen_chevron_up.png Binary files differnew file mode 100644 index 000000000..35aca4e82 --- /dev/null +++ b/res/drawable-mdpi/ic_lockscreen_chevron_up.png diff --git a/res/layout/details.xml b/res/layout/details.xml new file mode 100644 index 000000000..dfda0ee22 --- /dev/null +++ b/res/layout/details.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2006 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<TextView xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@android:id/text1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textAppearance="?android:attr/textAppearanceMedium" + android:gravity="left" +/> diff --git a/res/values-xlarge/bool.xml b/res/values-xlarge/bool.xml new file mode 100644 index 000000000..cffa691fc --- /dev/null +++ b/res/values-xlarge/bool.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <bool name="dialog_details_view">false</bool> +</resources>
\ No newline at end of file diff --git a/res/values/bool.xml b/res/values/bool.xml new file mode 100644 index 000000000..cef32a297 --- /dev/null +++ b/res/values/bool.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <bool name="dialog_details_view">true</bool> +</resources>
\ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index cb8ce6d63..9f6cce8f0 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -97,6 +97,8 @@ <string name="slideshow">Slideshow</string> <string name="details">Details</string> + <string name="details_title">%1$d of %2$d items:</string> + <string name="close">Close</string> <!-- Title of a menu item to switch from Gallery to Camera app [CHAR LIMIT=30] --> <string name="switch_to_camera">Switch to Camera</string> diff --git a/src/com/android/gallery3d/ui/DetailsAddressResolver.java b/src/com/android/gallery3d/ui/DetailsAddressResolver.java new file mode 100644 index 000000000..fdf94ba09 --- /dev/null +++ b/src/com/android/gallery3d/ui/DetailsAddressResolver.java @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.gallery3d.ui; + +import com.android.gallery3d.app.GalleryActivity; +import com.android.gallery3d.data.MediaDetails; +import com.android.gallery3d.util.Future; +import com.android.gallery3d.util.FutureListener; +import com.android.gallery3d.util.GalleryUtils; +import com.android.gallery3d.util.ReverseGeocoder; +import com.android.gallery3d.util.ThreadPool.Job; +import com.android.gallery3d.util.ThreadPool.JobContext; + +import android.content.Context; +import android.location.Address; +import android.os.Handler; +import android.os.Looper; + +public class DetailsAddressResolver { + private AddressResolvingListener mListener; + private double[] mLatlng; + private GalleryActivity mContext; + private Future<Address> mAddressLookupJob; + private Handler mHandler; + + private class AddressLookupJob implements Job<Address> { + + protected AddressLookupJob(double[] latlng) { + mLatlng = latlng; + } + + public Address run(JobContext jc) { + ReverseGeocoder geocoder = new ReverseGeocoder(mContext.getAndroidContext()); + return geocoder.lookupAddress(mLatlng[0], mLatlng[1], true); + } + } + + public interface AddressResolvingListener { + public void onAddressAvailable(String address); + } + + public DetailsAddressResolver(GalleryActivity context) { + mContext = context; + mHandler = new Handler(Looper.getMainLooper()); + } + + public String resolveAddress(double[] latlng, AddressResolvingListener listener) { + mLatlng = latlng; + mListener = listener; + mAddressLookupJob = mContext.getThreadPool().submit( + new AddressLookupJob(latlng), + new FutureListener<Address>() { + public void onFutureDone(final Future<Address> future) { + mAddressLookupJob = null; + if (!future.isCancelled()) { + mHandler.post(new Runnable() { + public void run() { + updateLocation(future.get()); + } + }); + } + } + }); + return GalleryUtils.formatLatitudeLongitude("(%f,%f)", mLatlng[0], mLatlng[1]); + } + + private void updateLocation(Address address) { + if (address != null) { + Context context = mContext.getAndroidContext(); + String parts[] = { + address.getAdminArea(), + address.getSubAdminArea(), + address.getLocality(), + address.getSubLocality(), + address.getThoroughfare(), + address.getSubThoroughfare(), + address.getPremises(), + address.getPostalCode(), + address.getCountryName() + }; + + String addressText = ""; + for (int i = 0; i < parts.length; i++) { + if (parts[i] == null || parts[i].isEmpty()) continue; + if (!addressText.isEmpty()) { + addressText += ", "; + } + addressText += parts[i]; + } + String text = String.format("%s : %s", DetailsHelper.getDetailsName( + context, MediaDetails.INDEX_LOCATION), addressText); + mListener.onAddressAvailable(text); + } + } + + public void cancel() { + if (mAddressLookupJob != null) { + mAddressLookupJob.cancel(); + mAddressLookupJob = null; + } + } +} |