X-Git-Url: http://www.average.org/gitweb/?p=WhereAmI.git;a=blobdiff_plain;f=src%2Forg%2Faverage%2Fwhereami%2FOracle.java;h=1de3879b7db2b24b53d768f13a5bf74b09441312;hp=4043451bce61cc35d10764bd7f3bfa501efae3e9;hb=015cb569bd35a081666ac4849c661cd525d9b1d5;hpb=75e82caefb015eabcd87a20f002a8e89f820e33e diff --git a/src/org/average/whereami/Oracle.java b/src/org/average/whereami/Oracle.java index 4043451..1de3879 100644 --- a/src/org/average/whereami/Oracle.java +++ b/src/org/average/whereami/Oracle.java @@ -1,5 +1,81 @@ package org.average.whereami; +import org.average.whereami.PersistentStore; + +import java.io.IOException; + +import com.google.api.client.extensions.android2.AndroidHttp; +import com.google.api.client.auth.oauth2.draft10.AccessTokenResponse; +import com.google.api.client.googleapis.auth.oauth2.draft10.GoogleAccessProtectedResource; +import com.google.api.client.http.HttpResponseException; +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.jackson.JacksonFactory; + +import android.content.res.Resources; +import android.util.Log; + abstract public class Oracle { - abstract String getResult(); + + final String TAG = getClass().getName(); + + public HttpTransport httpTransport; + public JsonFactory jsonFactory; + public PersistentStore store; + public String authErrorMessage; + + public Oracle(final Resources res, final PersistentStore store) { + authErrorMessage = res.getString(R.string.autherror); + this.store = store; + + httpTransport = AndroidHttp.newCompatibleTransport(); + jsonFactory = new JacksonFactory(); + } + + private class MyAccessProtectedResource + extends GoogleAccessProtectedResource { + + // Why on earth contructors are not inherited?!?! + public MyAccessProtectedResource( + String accessToken, + HttpTransport transport, + JsonFactory jsonFactory, + String clientId, + String clientSecret, + String refreshToken) { + super(accessToken, transport, jsonFactory, + clientId, clientSecret, refreshToken); + } + + @Override + public void onAccessToken(String accessToken) { + Log.v(TAG, "Update access token to \"" + + accessToken + "\""); + store.updateAccessToken( accessToken); + } + + @Override + protected boolean executeRefreshToken() throws IOException { + Log.v(TAG, "executeRefreshToken was called"); + return super.executeRefreshToken(); + } + } + + public MyAccessProtectedResource accessProtectedResource() { + AccessTokenResponse token = store.readTokens(); + Log.v(TAG, "tokens - access: \"" + token.accessToken + + "\", refresh: \"" + token.refreshToken + + "\", client_id: \"" + ClientCredentials.CLIENT_ID + + "\", client_secret: \"" + + ClientCredentials.CLIENT_SECRET + + "\""); + return new MyAccessProtectedResource( + token.accessToken, httpTransport, jsonFactory, + ClientCredentials.CLIENT_ID, + ClientCredentials.CLIENT_SECRET, + token.refreshToken); + } + + abstract public String getResult(); }