diff options
Diffstat (limited to 'legacy')
-rw-r--r-- | legacy/src/com/android/providers/media/LegacyMediaProvider.java | 44 |
1 files changed, 40 insertions, 4 deletions
diff --git a/legacy/src/com/android/providers/media/LegacyMediaProvider.java b/legacy/src/com/android/providers/media/LegacyMediaProvider.java index 93d1b8ead..b79a955e8 100644 --- a/legacy/src/com/android/providers/media/LegacyMediaProvider.java +++ b/legacy/src/com/android/providers/media/LegacyMediaProvider.java @@ -26,6 +26,7 @@ import android.content.Context; import android.content.pm.ProviderInfo; import android.database.Cursor; import android.net.Uri; +import android.os.Bundle; import android.provider.MediaStore; import android.provider.MediaStore.MediaColumns; @@ -37,6 +38,7 @@ import java.io.File; import java.io.FileDescriptor; import java.io.IOException; import java.io.PrintWriter; +import java.util.Objects; /** * Very limited subset of {@link MediaProvider} which only surfaces @@ -46,6 +48,9 @@ public class LegacyMediaProvider extends ContentProvider { private DatabaseHelper mInternalDatabase; private DatabaseHelper mExternalDatabase; + public static final String START_LEGACY_MIGRATION_CALL = "start_legacy_migration"; + public static final String FINISH_LEGACY_MIGRATION_CALL = "finish_legacy_migration"; + @Override public void attachInfo(Context context, ProviderInfo info) { // Sanity check our setup @@ -68,9 +73,9 @@ public class LegacyMediaProvider extends ContentProvider { Logging.initPersistent(persistentDir); mInternalDatabase = new DatabaseHelper(context, INTERNAL_DATABASE_NAME, - true, false, true, null, null, null); + true, false, true, null, null, null, null); mExternalDatabase = new DatabaseHelper(context, EXTERNAL_DATABASE_NAME, - false, false, true, null, null, null); + false, false, true, null, null, null, null); return true; } @@ -79,9 +84,9 @@ public class LegacyMediaProvider extends ContentProvider { final String volumeName = MediaStore.getVolumeName(uri); switch (volumeName) { case MediaStore.VOLUME_INTERNAL: - return mInternalDatabase; + return Objects.requireNonNull(mInternalDatabase, "Missing internal database"); default: - return mExternalDatabase; + return Objects.requireNonNull(mExternalDatabase, "Missing external database"); } } @@ -124,6 +129,37 @@ public class LegacyMediaProvider extends ContentProvider { } @Override + public Bundle call(String authority, String method, String arg, Bundle extras) { + switch (method) { + case START_LEGACY_MIGRATION_CALL: { + // Nice to know, but nothing actionable + break; + } + case FINISH_LEGACY_MIGRATION_CALL: { + // We're only going to hear this once, since we've either + // successfully migrated legacy data, or we're never going to + // try again, so it's time to clean things up + final String volumeName = arg; + switch (volumeName) { + case MediaStore.VOLUME_INTERNAL: { + mInternalDatabase.close(); + mInternalDatabase = null; + getContext().deleteDatabase(INTERNAL_DATABASE_NAME); + break; + } + default: { + mExternalDatabase.close(); + mExternalDatabase = null; + getContext().deleteDatabase(EXTERNAL_DATABASE_NAME); + break; + } + } + } + } + return null; + } + + @Override public void dump(FileDescriptor fd, PrintWriter writer, String[] args) { Logging.dumpPersistent(writer); } |