package com.distantfuture.videos.misc;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.content.Context;
import com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.services.youtube.YouTubeScopes;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
public class Auth {
private static GoogleAccountCredential credential;
private static String accountName;
public static String devKey() {
return Constants.youTubeClientAPIKey;
}
public static GoogleAccountCredential getCredentials(Context ctx, boolean useDefaultAccount) {
if (credential == null) {
List<String> scopes = Arrays.asList(YouTubeScopes.YOUTUBE);
credential = GoogleAccountCredential.usingOAuth2(ctx.getApplicationContext(), scopes);
// add account name if we have it
String accountName = null;
if (useDefaultAccount)
accountName = accountName(ctx);
if (accountName != null)
credential.setSelectedAccountName(accountName);
}
return credential;
}
public static HttpRequestInitializer nullCredentials(Context ctx) {
return new HttpRequestInitializer() {
public void initialize(HttpRequest request) throws IOException {
}
};
}
public static String accountName(Context ctx) {
if (accountName == null) {
accountName = AppUtils.instance(ctx).getAccountName();
AccountManager am = AccountManager.get(ctx);
Account[] accounts = am.getAccountsByType("com.google");
// verify that the user name still exists before trying to use it
if (accountName != null) {
boolean valid = false;
for (Account account : accounts) {
if (accountName.equals(account.name)) {
valid = true;
break;
}
}
if (!valid)
accountName = null;
}
if (accountName == null) {
// just get first item in list, is this correct? is there a default account name?
if (accounts.length > 0) {
accountName = accounts[0].name;
// save it in the prefs
AppUtils.instance(ctx).setAccountName(accountName);
}
}
}
return accountName;
}
public static void setCredentials(GoogleAccountCredential credential) {
Auth.credential = credential;
}
}