From ab5e6cbfcda0b0b2a3df64cdaee1008549757b44 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Thu, 17 Feb 2022 17:58:11 +0100 Subject: [PATCH] Bugfix: emojis cannot be used as filenames. Fixes #1129. --- .../de/dennisguse/opentracks/util/FileUtilsTest.java | 11 +++++++++-- .../java/de/dennisguse/opentracks/util/FileUtils.java | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/androidTest/java/de/dennisguse/opentracks/util/FileUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/util/FileUtilsTest.java index 9609fc9db..738cde1e6 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/util/FileUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/util/FileUtilsTest.java @@ -15,6 +15,8 @@ */ package de.dennisguse.opentracks.util; +import static org.junit.Assert.assertEquals; + import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -22,8 +24,6 @@ import org.junit.runners.JUnit4; import java.io.File; import java.util.Arrays; -import static org.junit.Assert.assertEquals; - /** * Tests for {@link FileUtils}. * @@ -101,6 +101,13 @@ public class FileUtilsTest { assertEquals(expected, FileUtils.sanitizeFileName(name)); } + @Test + public void testSanitizeFileName_emoji() { + String name = "\uD83C\uDF5B-Food"; + String expected = "_-Food"; + assertEquals(expected, FileUtils.sanitizeFileName(name)); + } + /** * Tests {@link FileUtils#truncateFileName(File, String, String)}. * Verifies the a long file name is truncated. diff --git a/src/main/java/de/dennisguse/opentracks/util/FileUtils.java b/src/main/java/de/dennisguse/opentracks/util/FileUtils.java index edaab6a27..217c2ed9f 100644 --- a/src/main/java/de/dennisguse/opentracks/util/FileUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/FileUtils.java @@ -146,7 +146,7 @@ public class FileUtils { for (int i = 0; i < name.length(); i++) { int codePoint = name.codePointAt(i); char character = name.charAt(i); - if (Character.isLetterOrDigit(character) || codePoint > 127 || isSpecialFat32(character) || character == '.') { + if (Character.isLetterOrDigit(character) || isSpecialFat32(character) || character == '.') { builder.appendCodePoint(codePoint); } else { builder.append("_");