package com.orisider.gdfs.util;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AccountManagerCallback;
import android.accounts.AccountManagerFuture;
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.widget.Toast;
import com.google.api.client.extensions.android.http.AndroidHttp;
import com.google.api.client.extensions.android.json.AndroidJsonFactory;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.services.GoogleKeyInitializer;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.client.json.jackson.JacksonFactory;
import com.google.api.services.drive.Drive;
import com.orisider.gdfs.GDFSApp;
import com.orisider.gdfs.R;
import com.orisider.gdfs.model.AccessToken;
public class Util {
public static void showToast(int textResId) {
showToast(GDFSApp.ctx.getResources().getString(textResId));
}
public static void showToast(String text) {
Toast.makeText(GDFSApp.ctx, text, Toast.LENGTH_SHORT).show();
}
public static boolean isEmpty(String str) {
return str == null || str.trim().length() < 1;
}
public static void getAccountToken(AccountManager acntMgr, final Account acnt, Activity act, Handler handler,
final AccessTokenCallback callback) {
acntMgr.getAuthToken(acnt, Constant.AUTH_TOKEN_TYPE, null, act, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
try {
Bundle bundle = future.getResult();
String authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN);
if (!Util.isEmpty(authToken)) {
AccessToken token = new AccessToken(acnt.name, authToken);
SessionStore.saveAccountAuthToken(token);
callback.onTokenGetSuccess(token);
return;
}
callback.onTokenGetFailed(new Exception("token is empty"));
} catch (Throwable e) {
callback.onTokenGetFailed(e);
}
}
}, handler);
}
public static interface AccessTokenCallback {
public void onTokenGetSuccess(AccessToken token);
public void onTokenGetFailed(Throwable e);
}
public static Drive newGDrive(String accessToken) {
// final HttpTransport transport = AndroidHttp.newCompatibleTransport();
final HttpTransport transport = new NetHttpTransport();
final JsonFactory jsonFactory;
if( hasHoneycomb()) {
jsonFactory = new AndroidJsonFactory();
} else {
jsonFactory =new JacksonFactory();
}
String clientApiId = GDFSApp.ctx.getResources().getString(R.string.client_api_id);
String clientApiSecret = GDFSApp.ctx.getResources().getString(R.string.client_api_secret);
String simpleApiKey = GDFSApp.ctx.getResources().getString(R.string.simple_api_key);
GoogleCredential credential =
new GoogleCredential.Builder()
.setClientSecrets(clientApiId, clientApiSecret).build();
credential.setAccessToken(accessToken);
return new Drive.Builder(transport, jsonFactory, credential)
.setApplicationName(GDFSApp.ctx.getResources().getString(R.string.app_name))
.setJsonHttpRequestInitializer(new GoogleKeyInitializer(simpleApiKey))
.build();
}
public static boolean hasHoneycomb() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
}
}