blob: 764694939c2629cb7b3a7d48df30cdd0ee33ee39 [file] [log] [blame]
package com.android.server.appsearch;
import android.annotation.NonNull;
import android.content.Context;
import android.os.Environment;
import android.os.UserHandle;
import java.io.File;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.Objects;
/** Contains utility methods for Framework implementation of AppSearch. */
public class FrameworkAppSearchEnvironment implements AppSearchEnvironment {
/**
* Returns AppSearch directory in the credential encrypted system directory for the given user.
*
* <p>This folder should only be accessed after unlock.
*/
@Override
public File getAppSearchDir(@NonNull Context unused, @NonNull UserHandle userHandle) {
// Duplicates the implementation of Environment#getDataSystemCeDirectory
// TODO(b/191059409): Unhide Environment#getDataSystemCeDirectory and switch to it.
Objects.requireNonNull(userHandle);
File systemCeDir = new File(Environment.getDataDirectory(), "system_ce");
File systemCeUserDir = new File(systemCeDir, String.valueOf(userHandle.getIdentifier()));
return new File(systemCeUserDir, "appsearch");
}
/** Creates context for the user based on the userHandle. */
@Override
public Context createContextAsUser(@NonNull Context context, @NonNull UserHandle userHandle) {
Objects.requireNonNull(context);
Objects.requireNonNull(userHandle);
return context.createContextAsUser(userHandle, /*flags=*/ 0);
}
/** Creates and returns a ThreadPoolExecutor for given parameters. */
@Override
public ExecutorService createExecutorService(
int corePoolSize,
int maxConcurrency,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
int priority) {
return new ThreadPoolExecutor(
corePoolSize,
maxConcurrency,
keepAliveTime,
unit,
workQueue);
}
/** Createsand returns an ExecutorService with a single thread. */
@Override
public ExecutorService createSingleThreadExecutor() {
return Executors.newSingleThreadExecutor();
}
}