Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fa2b9222 authored by Sascha Haeberling's avatar Sascha Haeberling
Browse files

Make parsing integers for details dialog more robust.

  Bug: 7141309

Also make sure "orientation" is localized.

Change-Id: Ib950eca6becd2eed21bebfbd48e11a182b76e45a
parent dc514bb1
Loading
Loading
Loading
Loading
+28 −16
Original line number Diff line number Diff line
@@ -185,30 +185,20 @@ public class DialogDetailsView implements DetailsViewContainer {
                    }
                    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")) {
                        if (detail.getValue().toString().equalsIgnoreCase("0")) {
                            value = context.getString(R.string.unknown);
                            resolutionIsValid = false;
                        } else {
                            value = toLocalInteger(detail.getValue());
                        }
                        break;
                    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")) {
                        if (detail.getValue().toString().equalsIgnoreCase("0")) {
                            value = context.getString(R.string.unknown);
                            resolutionIsValid = false;
                        } else {
                            value = toLocalInteger(detail.getValue());
                        }
                        break;
                    }
@@ -228,6 +218,9 @@ public class DialogDetailsView implements DetailsViewContainer {
                        double focalLength = Double.parseDouble(detail.getValue().toString());
                        value = toLocalNumber(focalLength);
                        break;
                    case MediaDetails.INDEX_ORIENTATION:
                        value = toLocalInteger(detail.getValue());
                        break;
                    default: {
                        Object valueObj = detail.getValue();
                        // This shouldn't happen, log its key to help us diagnose the problem.
@@ -313,6 +306,25 @@ public class DialogDetailsView implements DetailsViewContainer {
            notifyDataSetChanged();
        }

        /**
         * Converts the given integer (given as String or Integer object) to a
         * localized String version.
         */
        private String toLocalInteger(Object valueObj) {
            if (valueObj instanceof Integer) {
                return toLocalNumber((Integer) valueObj);
            } else {
                String value = valueObj.toString();
                try {
                    value = toLocalNumber(Integer.parseInt(value));
                } catch (NumberFormatException ex) {
                    // Just keep the current "value" if we cannot
                    // parse it as a fallback.
                }
                return value;
            }
        }

        /** Converts the given integer to a localized String version. */
        private String toLocalNumber(int n) {
            return String.format(mDefaultLocale, "%d", n);