package im.actor.sdk.controllers.pickers.file.search;
import android.os.AsyncTask;
import android.os.Environment;
import android.os.Handler;
import android.util.Log;
import java.io.File;
import java.util.ArrayList;
/**
* Created by kiolt_000 on 17/09/2014.
*/
public abstract class IndexTask extends AsyncTask<Void, File, Integer> {
private final File root;
private final ArrayList<File> index;
private Integer foundCount = 0;
private Handler handler;
public IndexTask(File searchRoot) {
this.root = searchRoot;
handler = new Handler();
index = new ArrayList<File>();
}
@Override
protected final Integer doInBackground(Void... voids) {
handler.post(new Runnable() {
@Override
public void run() {
//onPreStart();
}
});
handler.post(new Runnable() {
@Override
public void run() {
//onSearchStarted();
}
});
Log.i("Searching", "Indexing started. Root path: " + root);
if (!root.getPath().equals("")) {
scanFolder(root);
} else {
scanFolder(Environment.getExternalStorageDirectory());
/*scanFolder(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES));
scanFolder(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS));
if (Build.VERSION.SDK_INT >= 19) {
scanFolder(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS));
}
scanFolder(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC));*/
}
if (isCancelled()) {
return null;
} else
Log.i("Search", "Indexing ended. " + index.size() + " items indexed");
return foundCount;
}
private void scanFolder(File folder) {
if (folder.getPath().contains("/sys")
|| folder.getPath().toLowerCase().contains("/cache")
|| folder.getPath().toLowerCase().contains(Environment.getExternalStorageDirectory().getPath().toLowerCase() + "/android")) {
return;
}
if (folder.listFiles() == null || folder.getName().toCharArray()[0] == '.') {
return;
}
index.add(folder);
for (final File file : folder.listFiles()) {
if (isCancelled()) {
return;
}
if (file.isDirectory()) {
scanFolder(file);
} else {
if (file.getName().toCharArray()[0] == '.') {
continue;
}
index.add(file);
}
}
}
@Override
protected final void onProgressUpdate(final File... values) {
for (File value : values) {
index.add(value);
}
}
@Override
protected final void onPostExecute(Integer result) {
onIndexingEnded(index);
}
public abstract void onIndexingEnded(ArrayList<File> indexedItems);
}