I18N the Gallery's Details dialog.
Bug: 7141309
Change-Id: I9e658ea3972713fa39e76894f8ae7d8e3d5cdf2c
diff --git a/res/layout/details.xml b/res/layout/details.xml
index dfda0ee..1fea0a0 100644
--- a/res/layout/details.xml
+++ b/res/layout/details.xml
@@ -19,5 +19,5 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
- android:gravity="left"
+ android:gravity="start"
/>
diff --git a/src/com/android/gallery3d/ui/DialogDetailsView.java b/src/com/android/gallery3d/ui/DialogDetailsView.java
index 058c036..b8496ec 100644
--- a/src/com/android/gallery3d/ui/DialogDetailsView.java
+++ b/src/com/android/gallery3d/ui/DialogDetailsView.java
@@ -39,7 +39,9 @@
import com.android.gallery3d.ui.DetailsHelper.DetailsViewContainer;
import com.android.gallery3d.ui.DetailsHelper.ResolutionResolvingListener;
+import java.text.DecimalFormat;
import java.util.ArrayList;
+import java.util.Locale;
import java.util.Map.Entry;
public class DialogDetailsView implements DetailsViewContainer {
@@ -117,6 +119,8 @@
implements AddressResolvingListener, ResolutionResolvingListener {
private final ArrayList<String> mItems;
private int mLocationIndex;
+ private final Locale mDefaultLocale = Locale.getDefault();
+ private final DecimalFormat mDecimalFormat = new DecimalFormat(".####");
private int mWidthIndex = -1;
private int mHeightIndex = -1;
@@ -166,13 +170,15 @@
value = (String) detail.getValue();
double time = Double.valueOf(value);
if (time < 1.0f) {
- value = String.format("1/%d", (int) (0.5f + 1 / time));
+ value = String.format(mDefaultLocale, "%d/%d", 1,
+ (int) (0.5f + 1 / time));
} else {
int integer = (int) time;
time -= integer;
value = String.valueOf(integer) + "''";
if (time > 0.0001) {
- value += String.format(" 1/%d", (int) (0.5f + 1 / time));
+ value += String.format(mDefaultLocale, " %d/%d", 1,
+ (int) (0.5f + 1 / time));
}
}
break;
@@ -180,6 +186,12 @@
case MediaDetails.INDEX_WIDTH:
mWidthIndex = mItems.size();
value = detail.getValue().toString();
+ try {
+ value = toLocalNumber(Integer.parseInt(value));
+ } catch (NumberFormatException ex) {
+ // Just keep the current "value" if we cannot parse
+ // it as a fallback.
+ }
if (value.equalsIgnoreCase("0")) {
value = context.getString(R.string.unknown);
resolutionIsValid = false;
@@ -188,6 +200,12 @@
case MediaDetails.INDEX_HEIGHT: {
mHeightIndex = mItems.size();
value = detail.getValue().toString();
+ try {
+ value = toLocalNumber(Integer.parseInt(value));
+ } catch (NumberFormatException ex) {
+ // Just keep the current "value" if we cannot parse
+ // it as a fallback.
+ }
if (value.equalsIgnoreCase("0")) {
value = context.getString(R.string.unknown);
resolutionIsValid = false;
@@ -195,8 +213,21 @@
break;
}
case MediaDetails.INDEX_PATH:
- // Get the path and then fall through to the default case
+ // Prepend the new-line as a) paths are usually long, so
+ // the formatting is better and b) an RTL UI will see it
+ // as a separate section and interpret it for what it
+ // is, rather than trying to make it RTL (which messes
+ // up the path).
+ value = "\n" + detail.getValue().toString();
path = detail.getValue().toString();
+ break;
+ case MediaDetails.INDEX_ISO:
+ value = toLocalNumber(Integer.parseInt((String) detail.getValue()));
+ break;
+ case MediaDetails.INDEX_FOCAL_LENGTH:
+ double focalLength = Double.parseDouble(detail.getValue().toString());
+ value = toLocalNumber(focalLength);
+ break;
default: {
Object valueObj = detail.getValue();
// This shouldn't happen, log its key to help us diagnose the problem.
@@ -216,9 +247,9 @@
context, key), value);
}
mItems.add(value);
- if (!resolutionIsValid) {
- DetailsHelper.resolveResolution(path, this);
- }
+ }
+ if (!resolutionIsValid) {
+ DetailsHelper.resolveResolution(path, this);
}
}
@@ -271,14 +302,26 @@
if (width == 0 || height == 0) return;
// Update the resolution with the new width and height
Context context = mActivity.getAndroidContext();
- String widthString = String.format("%s: %d", DetailsHelper.getDetailsName(
- context, MediaDetails.INDEX_WIDTH), width);
- String heightString = String.format("%s: %d", DetailsHelper.getDetailsName(
- context, MediaDetails.INDEX_HEIGHT), height);
+ String widthString = String.format(mDefaultLocale, "%s: %d",
+ DetailsHelper.getDetailsName(
+ context, MediaDetails.INDEX_WIDTH), width);
+ String heightString = String.format(mDefaultLocale, "%s: %d",
+ DetailsHelper.getDetailsName(
+ context, MediaDetails.INDEX_HEIGHT), height);
mItems.set(mWidthIndex, String.valueOf(widthString));
mItems.set(mHeightIndex, String.valueOf(heightString));
notifyDataSetChanged();
}
+
+ /** Converts the given integer to a localized String version. */
+ private String toLocalNumber(int n) {
+ return String.format(mDefaultLocale, "%d", n);
+ }
+
+ /** Converts the given double to a localized String version. */
+ private String toLocalNumber(double n) {
+ return mDecimalFormat.format(n);
+ }
}
@Override