blob: 5c2eb6d57c9c4418dc12c7516e2c2444371222b3 [file] [log] [blame]
package org.robolectric.shadows;
import static android.os.Build.VERSION_CODES.P;
import static org.robolectric.util.ReflectionHelpers.ClassParameter.from;
import android.os.CancellationSignal;
import android.os.FileUtils;
import android.os.FileUtils.ProgressListener;
import java.io.FileDescriptor;
import java.io.IOException;
import java.util.concurrent.Executor;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.util.ReflectionHelpers;
@Implements(value = FileUtils.class, isInAndroidSdk = false, minSdk = P)
public class ShadowFileUtils {
@Implementation(minSdk = P, maxSdk = P)
protected static long copy(
FileDescriptor in,
FileDescriptor out,
ProgressListener listener,
CancellationSignal signal,
long count)
throws IOException {
// never do the native copy optimization block
return ReflectionHelpers.callStaticMethod(FileUtils.class,
"copyInternalUserspace",
from(FileDescriptor.class, in),
from(FileDescriptor.class, out),
from(ProgressListener.class, listener),
from(CancellationSignal.class, signal),
from(long.class, count));
}
// BEGIN-INTERNAL
@Implementation(
minSdk = android.os.Build.VERSION_CODES.Q,
maxSdk = android.os.Build.VERSION_CODES.Q)
protected static long copy(
FileDescriptor in,
FileDescriptor out,
long count,
CancellationSignal signal,
Executor executor,
ProgressListener listener)
throws IOException {
// never do the native copy optimization block
return ReflectionHelpers.callStaticMethod(
FileUtils.class,
"copyInternalUserspace",
from(FileDescriptor.class, in),
from(FileDescriptor.class, out),
from(long.class, count),
from(CancellationSignal.class, signal),
from(Executor.class, executor),
from(ProgressListener.class, listener));
}
// END-INTERNAL
}