My app has the ability to save a character sheet to Google Drive. It creates a folder named "SWChars" on the root of the person's Google Drive then saves files in the folder. Each file equals one character. When the below is run it only finds folders it created. If you want some more context you can find the full source code at Github
The following is done on the GoogleApiClient's onConnected method:
public static void connect(final Activity main){
final DriveFolder root = Drive.DriveApi.getRootFolder(((SWrpg)main.getApplication()).gac);
root.queryChildren(((SWrpg)main.getApplication()).gac,new Query.Builder()
.addFilter(Filters.eq(SearchableField.TITLE,"SWChars")).build())
.setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(@NonNull final DriveApi.MetadataBufferResult metBufRes) {
if(metBufRes.getStatus().isSuccess()){
final MetadataBuffer metBuf = metBufRes.getMetadataBuffer();
final DriveFolder[] charsFold = {null};
System.out.println("Root List Size: "+String.valueOf(metBuf.getCount()));
for(Metadata met:metBuf){
if(met.isFolder() && !met.isTrashed()){
charsFold[0] = met.getDriveId().asDriveFolder();
break;
}
}
metBuf.release();
if(charsFold[0] ==null){
System.out.println("Creating Chars Folder");
root.createFolder(((SWrpg)main.getApplication()).gac,
new MetadataChangeSet.Builder().setTitle("SWChars").build())
.setResultCallback(new ResultCallback<DriveFolder.DriveFolderResult>() {
@Override
public void onResult(@NonNull DriveFolder.DriveFolderResult driveFolderResult) {
if(driveFolderResult.getStatus().isSuccess()){
charsFold[0] = driveFolderResult.getDriveFolder();
charsFold[0].queryChildren(((SWrpg)main.getApplication()).gac,new Query.Builder()
.addFilter(Filters.eq(SearchableField.TITLE,"SWShips")).build())
.setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(@NonNull DriveApi.MetadataBufferResult metadataBufferResult) {
if(metadataBufferResult.getStatus().isSuccess()) {
MetadataBuffer metBuffer = metadataBufferResult.getMetadataBuffer();
final DriveFolder[] shipFold = {null};
for (Metadata met:metBuffer){
if(met.isFolder()&&!met.isTrashed()){
shipFold[0] = met.getDriveId().asDriveFolder();
break;
}
}
metBuf.release();
if(shipFold[0] ==null){
charsFold[0].createFolder(((SWrpg)main.getApplication()).gac,
new MetadataChangeSet.Builder().setTitle("SWShips").build())
.setResultCallback(new ResultCallback<DriveFolder.DriveFolderResult>() {
@Override
public void onResult(@NonNull DriveFolder.DriveFolderResult driveFolderResult) {
if(driveFolderResult.getStatus().isSuccess()){
shipFold[0] = driveFolderResult.getDriveFolder();
((SWrpg)main.getApplication()).charsFold = charsFold[0];
((SWrpg)main.getApplication()).vehicFold = shipFold[0];
System.out.println("Done");
}
}
});
}
}
metadataBufferResult.release();
}
});
}
}
});
}else{
charsFold[0].queryChildren(((SWrpg)main.getApplication()).gac,new Query.Builder()
.addFilter(Filters.eq(SearchableField.TITLE,"SWShips")).build())
.setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(@NonNull DriveApi.MetadataBufferResult metadataBufferResult) {
if(metadataBufferResult.getStatus().isSuccess()){
MetadataBuffer mets = metadataBufferResult.getMetadataBuffer();
DriveFolder vehic = null;
for (Metadata met:mets){
if(met.isFolder()&&!met.isTrashed()){
vehic = met.getDriveId().asDriveFolder();
break;
}
}
mets.release();
if(vehic == null){
charsFold[0].createFolder(((SWrpg)main.getApplication()).gac,new MetadataChangeSet.Builder()
.setTitle("SWShips").build())
.setResultCallback(new ResultCallback<DriveFolder.DriveFolderResult>() {
@Override
public void onResult(@NonNull DriveFolder.DriveFolderResult driveFolderResult) {
if(driveFolderResult.getStatus().isSuccess()){
((SWrpg)main.getApplication()).vehicFold = driveFolderResult.getDriveFolder();
((SWrpg)main.getApplication()).charsFold = charsFold[0];
}
}
});
}else{
((SWrpg)main.getApplication()).vehicFold = vehic;
((SWrpg)main.getApplication()).charsFold = charsFold[0];
}
}
metadataBufferResult.release();
}
});
}
metBufRes.release();
}
}
});
}
Sorry for the messyness.