Rename the project to LibreMediaConverter

Done now rather than later: the application ID is permanent once published --
Play treats a change as an entirely different app -- so this is the last
cheap moment to choose it.

  applicationId / namespace  dev.jasonmross.mediaconverter -> org.libremediaconverter
  source tree                java/dev/jasonmross/mediaconverter -> java/org/libremediaconverter
  gradle project             AndroidMediaConverter -> LibreMediaConverter
  theme                      Theme.MediaConverter -> Theme.LibreMediaConverter
  compose theme              MediaConverterTheme -> LibreMediaConverterTheme
  display name               "Media Converter" -> "LibreMediaConverter"

org.* rather than dev.jasonmross.* because "Libre" signals a project rather
than a personal app, and a project-owned namespace lets maintainership move
later without the identifier contradicting reality.

The source trees moved with git mv so history follows the files instead of
showing 42 deletions beside 42 additions.

Verified after the rename: 66 unit tests, and 40 instrumented tests on an
API 36 emulator, 0 failures. The built APK reports org.libremediaconverter,
and no stale jasonmross, AndroidMediaConverter or MediaConverterTheme
identifiers remain anywhere in the tree.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-20 18:31:43 -05:00
co-authored by Claude Opus 5
parent 128763e99c
commit dd2fcf0a19
51 changed files with 169 additions and 169 deletions
@@ -1,4 +1,4 @@
package dev.jasonmross.mediaconverter.bench
package org.libremediaconverter.bench
import android.media.MediaExtractor
import android.media.MediaFormat
@@ -8,15 +8,15 @@ import androidx.media3.common.MimeTypes
import androidx.media3.common.util.UnstableApi
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import dev.jasonmross.mediaconverter.codec.AndroidDeviceCodecs
import dev.jasonmross.mediaconverter.convert.Media3Engine
import dev.jasonmross.mediaconverter.convert.MediaProbe
import dev.jasonmross.mediaconverter.ffmpeg.FFmpegEngine
import dev.jasonmross.mediaconverter.model.ConversionRequest
import dev.jasonmross.mediaconverter.model.ConversionRouter
import dev.jasonmross.mediaconverter.model.OutputFormat
import dev.jasonmross.mediaconverter.model.QualityTier
import dev.jasonmross.mediaconverter.model.VideoCodec
import org.libremediaconverter.codec.AndroidDeviceCodecs
import org.libremediaconverter.convert.Media3Engine
import org.libremediaconverter.convert.MediaProbe
import org.libremediaconverter.ffmpeg.FFmpegEngine
import org.libremediaconverter.model.ConversionRequest
import org.libremediaconverter.model.ConversionRouter
import org.libremediaconverter.model.OutputFormat
import org.libremediaconverter.model.QualityTier
import org.libremediaconverter.model.VideoCodec
import kotlinx.coroutines.runBlocking
import org.junit.Assume.assumeTrue
import org.junit.Test
@@ -38,7 +38,7 @@ import java.io.File
* 2. that x264's CRF is worth the GPL licence the app carries for it.
*
* Skips itself when the sample files are absent, so it is harmless in CI. Populate with:
* adb push <file>.mp4 /sdcard/Android/data/dev.jasonmross.mediaconverter/files/
* adb push <file>.mp4 /sdcard/Android/data/org.libremediaconverter/files/
*/
@UnstableApi
@RunWith(AndroidJUnit4::class)
@@ -1,4 +1,4 @@
package dev.jasonmross.mediaconverter.convert
package org.libremediaconverter.convert
import android.media.MediaExtractor
import android.media.MediaFormat
@@ -1,12 +1,12 @@
package dev.jasonmross.mediaconverter.fallback
package org.libremediaconverter.fallback
import android.content.Context
import android.net.Uri
import dev.jasonmross.mediaconverter.convert.ConversionDependencies
import dev.jasonmross.mediaconverter.convert.HardwareTranscoder
import dev.jasonmross.mediaconverter.convert.OutputPublisher
import dev.jasonmross.mediaconverter.convert.SoftwareTranscoder
import dev.jasonmross.mediaconverter.model.ConversionRequest
import org.libremediaconverter.convert.ConversionDependencies
import org.libremediaconverter.convert.HardwareTranscoder
import org.libremediaconverter.convert.OutputPublisher
import org.libremediaconverter.convert.SoftwareTranscoder
import org.libremediaconverter.model.ConversionRequest
import java.io.File
/**
@@ -1,4 +1,4 @@
package dev.jasonmross.mediaconverter.fallback
package org.libremediaconverter.fallback
import android.net.Uri
import androidx.media3.common.util.UnstableApi
@@ -6,13 +6,13 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import androidx.work.WorkInfo
import androidx.work.WorkManager
import dev.jasonmross.mediaconverter.convert.ConversionDependencies
import dev.jasonmross.mediaconverter.model.DeviceCodecs
import dev.jasonmross.mediaconverter.model.Engine
import dev.jasonmross.mediaconverter.model.OutputFormat
import dev.jasonmross.mediaconverter.model.QualityTier
import dev.jasonmross.mediaconverter.work.ConcatWorker
import dev.jasonmross.mediaconverter.work.ConversionWorker
import org.libremediaconverter.convert.ConversionDependencies
import org.libremediaconverter.model.DeviceCodecs
import org.libremediaconverter.model.Engine
import org.libremediaconverter.model.OutputFormat
import org.libremediaconverter.model.QualityTier
import org.libremediaconverter.work.ConcatWorker
import org.libremediaconverter.work.ConversionWorker
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withTimeout
@@ -1,4 +1,4 @@
package dev.jasonmross.mediaconverter.fallback
package org.libremediaconverter.fallback
import android.net.Uri
import androidx.media3.common.util.UnstableApi
@@ -6,9 +6,9 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import androidx.work.WorkInfo
import androidx.work.WorkManager
import dev.jasonmross.mediaconverter.model.OutputFormat
import dev.jasonmross.mediaconverter.model.QualityTier
import dev.jasonmross.mediaconverter.work.ConversionWorker
import org.libremediaconverter.model.OutputFormat
import org.libremediaconverter.model.QualityTier
import org.libremediaconverter.work.ConversionWorker
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withTimeout
@@ -1,4 +1,4 @@
package dev.jasonmross.mediaconverter.fallback
package org.libremediaconverter.fallback
import android.net.Uri
import androidx.media3.common.util.UnstableApi
@@ -8,10 +8,10 @@ import androidx.work.Data
import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkInfo
import androidx.work.WorkManager
import dev.jasonmross.mediaconverter.convert.OutputPublisher
import dev.jasonmross.mediaconverter.ffmpeg.ConcatEngine
import dev.jasonmross.mediaconverter.work.ConcatWorker
import dev.jasonmross.mediaconverter.work.ConversionWorker
import org.libremediaconverter.convert.OutputPublisher
import org.libremediaconverter.ffmpeg.ConcatEngine
import org.libremediaconverter.work.ConcatWorker
import org.libremediaconverter.work.ConversionWorker
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withTimeout
@@ -45,7 +45,7 @@ class UnopenableUriTest {
private lateinit var staged: File
/** A syntactically valid content URI whose authority does not exist. */
private val bogus: Uri = Uri.parse("content://dev.jasonmross.nonexistent.provider/media/1")
private val bogus: Uri = Uri.parse("content://org.libremediaconverter.nonexistent.provider/media/1")
@Before
fun setUp() {
@@ -1,12 +1,12 @@
package dev.jasonmross.mediaconverter.ffmpeg
package org.libremediaconverter.ffmpeg
import android.media.MediaExtractor
import android.media.MediaFormat
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import dev.jasonmross.mediaconverter.model.ConversionRequest
import dev.jasonmross.mediaconverter.model.OutputFormat
import dev.jasonmross.mediaconverter.model.QualityTier
import org.libremediaconverter.model.ConversionRequest
import org.libremediaconverter.model.OutputFormat
import org.libremediaconverter.model.QualityTier
import kotlinx.coroutines.runBlocking
import org.junit.After
import org.junit.Assert.assertEquals
@@ -28,7 +28,7 @@ import java.io.File
class FFmpegEngineTest {
private val context = InstrumentationRegistry.getInstrumentation().targetContext
private val engine: dev.jasonmross.mediaconverter.convert.SoftwareTranscoder = FFmpegEngine()
private val engine: org.libremediaconverter.convert.SoftwareTranscoder = FFmpegEngine()
private lateinit var input: File
private val outputs = mutableListOf<File>()
@@ -1,13 +1,13 @@
package dev.jasonmross.mediaconverter.join
package org.libremediaconverter.join
import android.media.MediaExtractor
import android.media.MediaFormat
import android.net.Uri
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import dev.jasonmross.mediaconverter.convert.MediaProbe
import dev.jasonmross.mediaconverter.ffmpeg.ConcatEngine
import dev.jasonmross.mediaconverter.model.ConcatStrategy
import org.libremediaconverter.convert.MediaProbe
import org.libremediaconverter.ffmpeg.ConcatEngine
import org.libremediaconverter.model.ConcatStrategy
import kotlinx.coroutines.runBlocking
import org.junit.After
import org.junit.Assert.assertEquals
@@ -1,4 +1,4 @@
package dev.jasonmross.mediaconverter.join
package org.libremediaconverter.join
import android.net.Uri
import androidx.media3.common.util.UnstableApi
@@ -6,8 +6,8 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import androidx.work.WorkInfo
import androidx.work.WorkManager
import dev.jasonmross.mediaconverter.model.ConcatStrategy
import dev.jasonmross.mediaconverter.work.ConcatWorker
import org.libremediaconverter.model.ConcatStrategy
import org.libremediaconverter.work.ConcatWorker
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withTimeout
@@ -1,4 +1,4 @@
package dev.jasonmross.mediaconverter.work
package org.libremediaconverter.work
import android.content.pm.ServiceInfo
import android.net.Uri
@@ -8,11 +8,11 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import androidx.work.WorkInfo
import androidx.work.WorkManager
import dev.jasonmross.mediaconverter.codec.AndroidDeviceCodecs
import dev.jasonmross.mediaconverter.model.Engine
import dev.jasonmross.mediaconverter.model.OutputFormat
import dev.jasonmross.mediaconverter.model.QualityTier
import dev.jasonmross.mediaconverter.model.VideoCodec
import org.libremediaconverter.codec.AndroidDeviceCodecs
import org.libremediaconverter.model.Engine
import org.libremediaconverter.model.OutputFormat
import org.libremediaconverter.model.QualityTier
import org.libremediaconverter.model.VideoCodec
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withTimeout