Loading media/java/android/media/RingtoneManager.java +1 −55 Original line number Diff line number Diff line Loading @@ -33,7 +33,6 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.UserInfo; import android.content.res.AssetFileDescriptor; import android.database.Cursor; import android.media.MediaScannerConnection.MediaScannerConnectionClient; import android.net.Uri; import android.os.Environment; import android.os.FileUtils; Loading @@ -50,7 +49,6 @@ import android.util.Log; import com.android.internal.database.SortCursor; import java.io.Closeable; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; Loading @@ -59,7 +57,6 @@ import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import java.util.concurrent.LinkedBlockingQueue; /** * RingtoneManager provides access to ringtones, notification, and other types Loading Loading @@ -927,11 +924,7 @@ public class RingtoneManager { } // Tell MediaScanner about the new file. Wait for it to assign a {@link Uri}. try (NewRingtoneScanner scanner = new NewRingtoneScanner(outFile)) { return scanner.take(); } catch (InterruptedException e) { throw new IOException("Audio file failed to scan as a ringtone", e); } return MediaStore.scanFile(mContext, outFile); } private static final String getExternalDirectoryForType(final int type) { Loading Loading @@ -1108,53 +1101,6 @@ public class RingtoneManager { return AudioManager.hasHapticChannels(ringtoneUri); } /** * Creates a {@link android.media.MediaScannerConnection} to scan a ringtone file and add its * information to the internal database. * * It uses a {@link java.util.concurrent.LinkedBlockingQueue} so that the caller can block until * the scan is completed. */ private class NewRingtoneScanner implements Closeable, MediaScannerConnectionClient { private MediaScannerConnection mMediaScannerConnection; private File mFile; private LinkedBlockingQueue<Uri> mQueue = new LinkedBlockingQueue<>(1); public NewRingtoneScanner(File file) { mFile = file; mMediaScannerConnection = new MediaScannerConnection(mContext, this); mMediaScannerConnection.connect(); } @Override public void close() { mMediaScannerConnection.disconnect(); } @Override public void onMediaScannerConnected() { mMediaScannerConnection.scanFile(mFile.getAbsolutePath(), null); } @Override public void onScanCompleted(String path, Uri uri) { if (uri == null) { // There was some issue with scanning. Delete the copied file so it is not oprhaned. mFile.delete(); return; } try { mQueue.put(uri); } catch (InterruptedException e) { Log.e(TAG, "Unable to put new ringtone Uri in queue", e); } } public Uri take() throws InterruptedException { return mQueue.take(); } } /** * Attempts to create a context for the given user. * Loading Loading
media/java/android/media/RingtoneManager.java +1 −55 Original line number Diff line number Diff line Loading @@ -33,7 +33,6 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.UserInfo; import android.content.res.AssetFileDescriptor; import android.database.Cursor; import android.media.MediaScannerConnection.MediaScannerConnectionClient; import android.net.Uri; import android.os.Environment; import android.os.FileUtils; Loading @@ -50,7 +49,6 @@ import android.util.Log; import com.android.internal.database.SortCursor; import java.io.Closeable; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; Loading @@ -59,7 +57,6 @@ import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import java.util.concurrent.LinkedBlockingQueue; /** * RingtoneManager provides access to ringtones, notification, and other types Loading Loading @@ -927,11 +924,7 @@ public class RingtoneManager { } // Tell MediaScanner about the new file. Wait for it to assign a {@link Uri}. try (NewRingtoneScanner scanner = new NewRingtoneScanner(outFile)) { return scanner.take(); } catch (InterruptedException e) { throw new IOException("Audio file failed to scan as a ringtone", e); } return MediaStore.scanFile(mContext, outFile); } private static final String getExternalDirectoryForType(final int type) { Loading Loading @@ -1108,53 +1101,6 @@ public class RingtoneManager { return AudioManager.hasHapticChannels(ringtoneUri); } /** * Creates a {@link android.media.MediaScannerConnection} to scan a ringtone file and add its * information to the internal database. * * It uses a {@link java.util.concurrent.LinkedBlockingQueue} so that the caller can block until * the scan is completed. */ private class NewRingtoneScanner implements Closeable, MediaScannerConnectionClient { private MediaScannerConnection mMediaScannerConnection; private File mFile; private LinkedBlockingQueue<Uri> mQueue = new LinkedBlockingQueue<>(1); public NewRingtoneScanner(File file) { mFile = file; mMediaScannerConnection = new MediaScannerConnection(mContext, this); mMediaScannerConnection.connect(); } @Override public void close() { mMediaScannerConnection.disconnect(); } @Override public void onMediaScannerConnected() { mMediaScannerConnection.scanFile(mFile.getAbsolutePath(), null); } @Override public void onScanCompleted(String path, Uri uri) { if (uri == null) { // There was some issue with scanning. Delete the copied file so it is not oprhaned. mFile.delete(); return; } try { mQueue.put(uri); } catch (InterruptedException e) { Log.e(TAG, "Unable to put new ringtone Uri in queue", e); } } public Uri take() throws InterruptedException { return mQueue.take(); } } /** * Attempts to create a context for the given user. * Loading