Back to project page vocabulary-list.
The source code is released under:
Apache License
If you think the Android project vocabulary-list listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.rulych.vocabularylist.model.persistence.impl; //from w ww . j ava 2 s.co m import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.drive.Drive; import com.google.android.gms.drive.DriveApi; import com.google.android.gms.drive.DriveFile; import com.google.android.gms.drive.DriveFolder; import com.google.android.gms.drive.Metadata; import com.google.android.gms.drive.MetadataChangeSet; import com.google.android.gms.drive.query.Filters; import com.google.android.gms.drive.query.Query; import com.google.android.gms.drive.query.SearchableField; import com.rulych.vocabularylist.model.persistence.impl.exception.CouldNotGetFileException; import java.util.Iterator; import java.util.Locale; import rx.Observable; import rx.functions.Func0; import rx.schedulers.Schedulers; import rx.util.async.Async; import timber.log.Timber; public class FileGetterImpl implements FileGetter { private static final String FILE_MIME = "application/json"; private GoogleApiClient mApiClient; public FileGetterImpl(GoogleApiClient apiClient) { mApiClient = apiClient; } @Override public Observable<DriveFile> getFileFor(Locale locale) { String language = locale.getLanguage(); return Async.start(new GetFileFunc(language), Schedulers.io()); } private DriveFolder getFolder() { return Drive.DriveApi.getAppFolder(mApiClient); } private class GetFileFunc implements Func0<DriveFile> { private String mFileTitle; private GetFileFunc(String fileTitle) { mFileTitle = fileTitle; } @Override public DriveFile call() { try { return getExistingFile(); } catch (Exception e) { Timber.i("File %s not found. Will create it.", mFileTitle); return createNewFile(); } } private DriveFile getExistingFile() { Query query = new Query.Builder() .addFilter(Filters.eq(SearchableField.TITLE, mFileTitle)) .build(); Timber.d("Will look for file with title '%s'.", mFileTitle); DriveApi.MetadataBufferResult result = getFolder().queryChildren(mApiClient, query).await(); if (!result.getStatus().isSuccess()) { throw new CouldNotGetFileException("Couldn't query for file: (%d) %s", result.getStatus().getStatusCode(), result.getStatus().getStatusMessage()); } Iterator<Metadata> metadataIterator = result.getMetadataBuffer().iterator(); if (!metadataIterator.hasNext()) { result.getMetadataBuffer().close(); throw new CouldNotGetFileException("File %s does not exist.", mFileTitle); } Metadata metadata = metadataIterator.next(); DriveFile file = Drive.DriveApi.getFile(mApiClient, metadata.getDriveId()); result.getMetadataBuffer().close(); return file; } private DriveFile createNewFile() { DriveApi.ContentsResult result = Drive.DriveApi.newContents(mApiClient).await(); if (!result.getStatus().isSuccess()) { throw new CouldNotGetFileException( "Error while trying to create new file contents: (%d) %s", result.getStatus().getStatusCode(), result.getStatus().getStatusMessage()); } MetadataChangeSet changeSet = new MetadataChangeSet.Builder().setTitle(mFileTitle) .setMimeType(FILE_MIME) .setPinned(true) .build(); DriveFolder.DriveFileResult fileResult = getFolder().createFile(mApiClient, changeSet, result.getContents()).await(); if (!fileResult.getStatus().isSuccess()) { throw new CouldNotGetFileException("Error while trying to create the file: (%d) %s", fileResult.getStatus().getStatusCode(), fileResult.getStatus().getStatusMessage()); } DriveFile driveFile = fileResult.getDriveFile(); Timber.i("Created a file with ID: %s", driveFile.getDriveId().encodeToString()); return driveFile; } } }