package wearable.android.zaim.net.activities; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.webkit.JsResult; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; import org.scribe.model.Token; import progress.menu.item.ProgressMenuItemHelper; import wearable.android.zaim.net.R; import wearable.android.zaim.net.common.utils.PreferenceUtils; import wearable.android.zaim.net.common.utils.ToastUtils; import wearable.android.zaim.net.services.SendLoginStatusService; import wearable.android.zaim.net.tasks.GetAccessTokenTask; import wearable.android.zaim.net.tasks.GetAccessTokenTaskCallback; import wearable.android.zaim.net.tasks.GetRequestTokenTask; import wearable.android.zaim.net.tasks.GetRequestTokenTaskCallback; import wearable.android.zaim.net.utils.NetWorkUtils; import wearable.android.zaim.net.utils.ZaimUtils; public class LoginActivity extends Activity implements GetRequestTokenTaskCallback, GetAccessTokenTaskCallback { private WebView mWebView; private ProgressMenuItemHelper mProgressHelper; private Token mRequestToken; @SuppressLint("SetJavaScriptEnabled") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mWebView = new WebView(getApplicationContext()); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { GetAccessTokenTask accessTokenTask = new GetAccessTokenTask(getApplicationContext(), mRequestToken, LoginActivity.this); accessTokenTask.execute(message); return true; } }); mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { mProgressHelper.stopProgress(); // dirty huck... view.loadUrl(getString(R.string.get_verifier)); } }); setContentView(mWebView); if (NetWorkUtils.isNotConnect(this)) { ToastUtils.show(this, R.string.message_disconnect); return; } GetRequestTokenTask mRequestTokenTask = new GetRequestTokenTask(getApplicationContext(), this); mRequestTokenTask.execute(); } @Override protected void onSaveInstanceState(@SuppressWarnings("NullableProblems") Bundle outState) { new WebView(getApplicationContext()).saveState(outState); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_login, menu); mProgressHelper = new ProgressMenuItemHelper(menu, R.id.action_refresh); mProgressHelper.startProgress(); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { mProgressHelper.startProgress(); mWebView.reload(); return super.onOptionsItemSelected(item); } @Override public void onSuccessGetRequestToken(Token requestToken) { mRequestToken = requestToken; String url = ZaimUtils.getOauthService(this).getAuthorizationUrl(mRequestToken); mWebView.loadUrl(url); } @Override public void onSuccessGetAccessToken(Token accessToken) { PreferenceUtils.saveAccessToken(this, accessToken.getToken(), accessToken.getSecret()); startService(SendLoginStatusService.createIntent(this, true)); startActivity(MainActivity.createIntent(this)); finish(); } }