in auth-lib/src/main/java/com/spotify/sdk/android/auth/AuthorizationResponse.java [170:230]
public static AuthorizationResponse fromUri(Uri uri) {
AuthorizationResponse.Builder builder = new AuthorizationResponse.Builder();
if (uri == null) {
builder.setType(Type.EMPTY);
return builder.build();
}
String possibleError = uri.getQueryParameter(AccountsQueryParameters.ERROR);
if (possibleError != null) {
String state = uri.getQueryParameter(AccountsQueryParameters.STATE);
builder.setError(possibleError);
builder.setState(state);
builder.setType(Type.ERROR);
return builder.build();
}
String possibleCode = uri.getQueryParameter(AccountsQueryParameters.CODE);
if (possibleCode != null) {
String state = uri.getQueryParameter(AccountsQueryParameters.STATE);
builder.setCode(possibleCode);
builder.setState(state);
builder.setType(Type.CODE);
return builder.build();
}
String possibleImplicit = uri.getEncodedFragment();
if (possibleImplicit != null && possibleImplicit.length() > 0) {
String[] parts = possibleImplicit.split("&");
String accessToken = null;
String state = null;
String expiresIn = null;
for (String part : parts) {
String[] partSplit = part.split("=");
if (partSplit.length == 2) {
if (partSplit[0].startsWith(AccountsQueryParameters.ACCESS_TOKEN)) {
accessToken = Uri.decode(partSplit[1]);
}
if (partSplit[0].startsWith(AccountsQueryParameters.STATE)) {
state = Uri.decode(partSplit[1]);
}
if (partSplit[0].startsWith(AccountsQueryParameters.EXPIRES_IN)) {
expiresIn = Uri.decode(partSplit[1]);
}
}
}
builder.setAccessToken(accessToken);
builder.setState(state);
if (expiresIn != null) {
try {
builder.setExpiresIn(Integer.parseInt(expiresIn));
} catch (NumberFormatException e) {
// Ignore
}
}
builder.setType(Type.TOKEN);
return builder.build();
}
builder.setType(Type.UNKNOWN);
return builder.build();
}