104 lines
3.2 KiB
Java
104 lines
3.2 KiB
Java
package org.joinmastodon.android;
|
|
|
|
import android.app.Activity;
|
|
import android.app.ProgressDialog;
|
|
import android.content.Intent;
|
|
import android.net.Uri;
|
|
import android.os.Bundle;
|
|
import android.text.TextUtils;
|
|
import android.util.Log;
|
|
import android.widget.Toast;
|
|
|
|
import org.joinmastodon.android.api.requests.accounts.GetOwnAccount;
|
|
import org.joinmastodon.android.api.requests.oauth.GetOauthToken;
|
|
import org.joinmastodon.android.api.session.AccountSessionManager;
|
|
import org.joinmastodon.android.model.Account;
|
|
import org.joinmastodon.android.model.Application;
|
|
import org.joinmastodon.android.model.Instance;
|
|
import org.joinmastodon.android.model.Token;
|
|
|
|
import androidx.annotation.Nullable;
|
|
import me.grishka.appkit.api.Callback;
|
|
import me.grishka.appkit.api.ErrorResponse;
|
|
|
|
public class OAuthActivity extends Activity{
|
|
@Override
|
|
protected void onCreate(@Nullable Bundle savedInstanceState){
|
|
super.onCreate(savedInstanceState);
|
|
Uri uri=getIntent().getData();
|
|
if(uri==null || isTaskRoot()){
|
|
finish();
|
|
return;
|
|
}
|
|
if(uri.getQueryParameter("error")!=null){
|
|
String error=uri.getQueryParameter("error_description");
|
|
if(TextUtils.isEmpty(error))
|
|
error=uri.getQueryParameter("error");
|
|
Toast.makeText(this, error, Toast.LENGTH_LONG).show();
|
|
finish();
|
|
restartMainActivity();
|
|
return;
|
|
}
|
|
String code=uri.getQueryParameter("code");
|
|
if(TextUtils.isEmpty(code)){
|
|
finish();
|
|
return;
|
|
}
|
|
Instance instance=AccountSessionManager.getInstance().getAuthenticatingInstance();
|
|
Application app=AccountSessionManager.getInstance().getAuthenticatingApp();
|
|
if(instance==null || app==null){
|
|
finish();
|
|
return;
|
|
}
|
|
ProgressDialog progress=new ProgressDialog(this);
|
|
progress.setMessage(getString(R.string.finishing_auth));
|
|
progress.setCancelable(false);
|
|
progress.show();
|
|
new GetOauthToken(app.clientId, app.clientSecret, code)
|
|
.setCallback(new Callback<>(){
|
|
@Override
|
|
public void onSuccess(Token token){
|
|
new GetOwnAccount()
|
|
.setCallback(new Callback<>(){
|
|
@Override
|
|
public void onSuccess(Account account){
|
|
AccountSessionManager.getInstance().addAccount(instance, token, account, app);
|
|
progress.dismiss();
|
|
finish();
|
|
// not calling restartMainActivity() here on purpose to have it recreated (notice different flags)
|
|
Intent intent=new Intent(OAuthActivity.this, MainActivity.class);
|
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
|
startActivity(intent);
|
|
}
|
|
|
|
@Override
|
|
public void onError(ErrorResponse error){
|
|
handleError(error);
|
|
progress.dismiss();
|
|
}
|
|
})
|
|
.exec(instance.uri, token);
|
|
}
|
|
|
|
@Override
|
|
public void onError(ErrorResponse error){
|
|
handleError(error);
|
|
progress.dismiss();
|
|
}
|
|
})
|
|
.execNoAuth(instance.uri);
|
|
}
|
|
|
|
private void handleError(ErrorResponse error){
|
|
error.showToast(OAuthActivity.this);
|
|
finish();
|
|
restartMainActivity();
|
|
}
|
|
|
|
private void restartMainActivity(){
|
|
Intent intent=new Intent(this, MainActivity.class);
|
|
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
|
startActivity(intent);
|
|
}
|
|
}
|