public static AuthorizationResponse fromUri()

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();
    }