package com.felkertech.cumulustv.fileio;
import android.app.Activity;
import android.util.Log;
import com.felkertech.cumulustv.utils.ActivityUtils;
import com.felkertech.n.cumulustv.R;
import com.felkertech.settingsmanager.SettingsManager;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.drive.Drive;
/**
* Created by Nick on 12/15/2016.
*/
public class CloudStorageProvider {
private static final String TAG = CloudStorageProvider.class.getSimpleName();
private static final boolean DEBUG = true;
private static CloudStorageProvider mCloudStorageProvider;
private GoogleApiClient mGoogleApiClient;
private CloudProviderCallback mOnConnectedCallback;
private CloudStorageProvider() {
}
public static CloudStorageProvider getInstance() {
if (mCloudStorageProvider == null) {
mCloudStorageProvider = new CloudStorageProvider();
}
return mCloudStorageProvider;
}
public GoogleApiClient connect(Activity activity) {
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(activity)
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.addConnectionCallbacks((GoogleApiClient.ConnectionCallbacks) activity)
.addOnConnectionFailedListener((GoogleApiClient.OnConnectionFailedListener)
activity)
.build();
}
mGoogleApiClient.connect();
return mGoogleApiClient;
}
public boolean autoConnect(Activity activity) {
if(isDriveEnabled(activity)) {
if (DEBUG) {
Log.d(TAG, "Drive is enabled, automatically connect");
Log.d(TAG, ">" + new SettingsManager(activity).getString(R.string.sm_google_drive_id).length());
Log.d(TAG, new SettingsManager(activity).getString(R.string.sm_google_drive_id) + "<");
}
connect(activity);
return true;
}
if (DEBUG) {
Log.d(TAG, "Drive is not enabled, don't connect yet.");
}
return false;
}
public boolean isDriveEnabled(Activity activity) {
String gdriveId = new SettingsManager(activity).getString(R.string.sm_google_drive_id);
Log.d(TAG, R.string.sm_google_drive_id + " " + gdriveId);
return !gdriveId.isEmpty() && gdriveId.length() > 0;
}
public boolean isDriveConnected() {
return mGoogleApiClient != null && mGoogleApiClient.isConnected();
}
public void pickDriveFile(final Activity activity) {
if (!isDriveConnected()) {
connect(activity);
mOnConnectedCallback = new CloudProviderCallback() {
@Override
public void actionCompleted(int status) {
if (status == Activity.RESULT_OK) {
ActivityUtils.syncFile(activity, mGoogleApiClient);
}
}
};
} else {
ActivityUtils.syncFile(activity, mGoogleApiClient);
}
}
public void switchFile(final Activity activity) {
if (!isDriveConnected()) {
connect(activity);
mOnConnectedCallback = new CloudProviderCallback() {
@Override
public void actionCompleted(int status) {
if (status == Activity.RESULT_OK) {
ActivityUtils.switchGoogleDrive(activity, mGoogleApiClient);
}
}
};
} else {
ActivityUtils.switchGoogleDrive(activity, mGoogleApiClient);
}
}
public void onConnected(int status) {
if (mOnConnectedCallback != null) {
mOnConnectedCallback.actionCompleted(status);
}
}
public GoogleApiClient getClient() {
return mGoogleApiClient;
}
public interface CloudProviderCallback {
void actionCompleted(int status);
}
}