Initial
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user