Skip to content

Commit

Permalink
fix: MediaStore scan crash on OxygenOS 11 (#171)
Browse files Browse the repository at this point in the history
  • Loading branch information
deltazefiro committed Jul 12, 2024
1 parent b3d5396 commit 0221cc8
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 9 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package deltazero.amarok.filehider;

import android.content.Context;
import android.media.MediaScannerConnection;
import android.util.Log;

import com.topjohnwu.superuser.Shell;
Expand All @@ -10,6 +9,7 @@
import java.util.Set;

import deltazero.amarok.R;
import deltazero.amarok.utils.MediaStoreHelper;

public class ChmodFileHider extends BaseFileHider {

Expand All @@ -32,8 +32,7 @@ protected void process(Set<String> targetDirs, ProcessMethod method) throws Inte
.map(d -> String.format("chmod -R %s %s", method == ProcessMethod.HIDE ? 0 : 2770, d))
.forEach(processJob::add);

processJob.submit(result -> MediaScannerConnection.scanFile(context, targetDirs.toArray(new String[0]), null,
(ignore, ignore2) -> Log.d("ChmodFileHider", "MediaStore cache refreshed")));
processJob.submit(result -> MediaStoreHelper.scan(context, processDirs));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package deltazero.amarok.filehider;

import android.content.Context;
import android.media.MediaScannerConnection;
import android.util.Log;

import java.nio.file.Paths;
import java.util.Set;

import deltazero.amarok.utils.MediaStoreHelper;

public class NoMediaFileHider extends BaseFileHider {

private static final String TAG = "NoMediaFileHider";
Expand Down Expand Up @@ -50,8 +51,7 @@ protected void process(Set<String> targetDirs, ProcessMethod method) throws Inte
}
}

MediaScannerConnection.scanFile(context, targetDirs.toArray(new String[0]), null,
(ignore, ignore2) -> Log.d(TAG, "MediaStore cache refreshed"));
MediaStoreHelper.scan(context, targetDirs);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import static deltazero.amarok.filehider.BaseFileHider.ProcessMethod.UNHIDE;

import android.content.Context;
import android.media.MediaScannerConnection;
import android.util.Base64;
import android.util.Log;

Expand All @@ -24,6 +23,7 @@

import deltazero.amarok.PrefMgr;
import deltazero.amarok.utils.FileHiderUtil;
import deltazero.amarok.utils.MediaStoreHelper;

public class ObfuscateFileHider extends BaseFileHider {
private final static String TAG = "FileHider";
Expand Down Expand Up @@ -58,8 +58,7 @@ protected void process(Set<String> targetDirs, ProcessMethod method) throws Inte
Log.w(TAG, String.format("Failed to process %s: ", dir), e);
}
}
MediaScannerConnection.scanFile(context, targetDirs.toArray(new String[0]), null,
(ignore, ignore2) -> Log.d(TAG, "MediaStore cache refreshed"));
MediaStoreHelper.scan(context, targetDirs);
}

@Override
Expand Down
22 changes: 22 additions & 0 deletions app/src/main/java/deltazero/amarok/utils/MediaStoreHelper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package deltazero.amarok.utils;

import android.content.Context;
import android.media.MediaScannerConnection;
import android.util.Log;

import java.util.Set;

public class MediaStoreHelper {
private static final String TAG = "MediaStoreHelper";

public static void scan(Context context, Set<String> dirs) {
try {
MediaScannerConnection.scanFile(context, dirs.toArray(new String[0]), null,
(ignore, ignore2) -> Log.d(TAG, "MediaStore cache refreshed"));
} catch (Exception e) {
// MediaScannerConnection.scanFile may throw ArrayIndexOutOfBoundsException on OxygenOS 11
// See https://github.com/deltazefiro/Amarok-Hider/issues/171#issuecomment-2225104851
Log.w(TAG, "Error while rescanning media store", e);
}
}
}

0 comments on commit 0221cc8

Please sign in to comment.