summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/drawable-hdpi/ic_lockscreen_chevron_up.pngbin0 -> 698 bytes
-rw-r--r--res/drawable-mdpi/ic_lockscreen_chevron_up.pngbin0 -> 536 bytes
-rw-r--r--res/layout/details.xml23
-rw-r--r--res/values-xlarge/bool.xml4
-rw-r--r--res/values/bool.xml4
-rw-r--r--res/values/strings.xml2
-rw-r--r--src/com/android/gallery3d/ui/DetailsAddressResolver.java116
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
new file mode 100644
index 000000000..4ffa833b9
--- /dev/null
+++ b/res/drawable-hdpi/ic_lockscreen_chevron_up.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_lockscreen_chevron_up.png b/res/drawable-mdpi/ic_lockscreen_chevron_up.png
new file mode 100644
index 000000000..35aca4e82
--- /dev/null
+++ b/res/drawable-mdpi/ic_lockscreen_chevron_up.png
Binary files differ
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;
+ }
+ }
+}