package com.shejiaomao.weibo.service.listener; import java.util.regex.Pattern; import android.content.Context; import android.content.Intent; import android.view.View; import android.view.View.OnClickListener; import android.view.inputmethod.InputMethodManager; import android.widget.CheckBox; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Toast; import com.cattong.commons.LibException; import com.cattong.commons.Logger; import com.cattong.commons.ServiceProvider; import com.cattong.commons.http.auth.Authorization; import com.cattong.commons.http.auth.OAuth2AuthorizeHelper; import com.cattong.commons.oauth.OAuth2.DisplayType; import com.cattong.commons.oauth.OAuth2.GrantType; import com.cattong.commons.oauth.config.OAuthConfig; import com.shejiaomao.maobo.R; import com.shejiaomao.weibo.activity.AddAccountActivity; import com.shejiaomao.weibo.activity.AuthorizeActivity; import com.shejiaomao.weibo.common.Constants; import com.shejiaomao.weibo.service.task.OAuthRetrieveRequestTokenTask; import com.shejiaomao.weibo.service.task.TwitterProxyAuthTask; import com.shejiaomao.weibo.service.task.XAuthTask; public class AddAccountAuthorizeClickListener implements OnClickListener { private AddAccountActivity context; public AddAccountAuthorizeClickListener(AddAccountActivity context) { this.context = context; } @Override public void onClick(View v) { ServiceProvider sp = context.getSp(); CheckBox cbMakeDefault = (CheckBox)context.findViewById(R.id.cbDefault); CheckBox cbFollowOffical = (CheckBox)context.findViewById(R.id.cbFollowOffical); boolean isMakeDefault = cbMakeDefault.isChecked(); boolean isFollowOffical = cbFollowOffical.isChecked(); if (sp == null) { Toast.makeText(context, R.string.msg_accounts_add_spSelect, Toast.LENGTH_LONG).show(); return; } //hide input method InputMethodManager inputMethodManager = (InputMethodManager)v.getContext(). getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(cbMakeDefault.getWindowToken(), 0); Authorization auth = context.getAuth(); OAuthConfig oauthConfig = auth.getoAuthConfig(); LinearLayout llXAuthForm = (LinearLayout) context.findViewById(R.id.llXAuthForm); if (llXAuthForm.getVisibility() == View.VISIBLE) { xauthAuthorize(sp, isMakeDefault, isFollowOffical); return; } if (oauthConfig.getAuthVersion() == Authorization.AUTH_VERSION_OAUTH_1) { new OAuthRetrieveRequestTokenTask(context, sp, isMakeDefault, isFollowOffical).execute(); return; } try { OAuth2AuthorizeHelper authHelper = new OAuth2AuthorizeHelper(); Intent intent = new Intent(); intent.setClass(context, AuthorizeActivity.class); intent.putExtra("Authorization", auth); intent.putExtra("ServiceProvider", sp.toString()); String authorizeUrl = authHelper.getAuthorizeUrl(auth, GrantType.AUTHORIZATION_CODE, DisplayType.MOBILE); intent.putExtra("Authorize_Url", authorizeUrl); intent.putExtra("Callback_Url", oauthConfig.getCallbackUrl()); context.startActivityForResult(intent, Constants.REQUEST_CODE_OAUTH_AUTHORIZE); } catch (LibException e) { Logger.debug("error", e); } } private static final Pattern SCHEME_HOST_PATH_PATTERN = Pattern.compile("http[s]?://[a-z0-9-]+(\\.[a-z0-9-]+)+(/[\\w-]+)*[/]?"); private static final Pattern HOST_PATH_PATTERN = Pattern.compile("[a-z0-9-]+(\\.[a-z0-9-]+)+(/[\\w-]+)*[/]?"); public void xauthAuthorize(ServiceProvider sp, boolean isMakeDefault, boolean isFollowOffical) { EditText etUsername = (EditText) context.findViewById(R.id.etUsername); EditText etPassword = (EditText) context.findViewById(R.id.etPassword); String userName = etUsername.getText().toString().trim(); String password = etPassword.getText().toString().trim(); CheckBox cbUseProxy = (CheckBox) context.findViewById(R.id.cbUseApiProxy); EditText etRestProxy = (EditText) context.findViewById(R.id.etRestProxy); EditText etSearchProxy = (EditText) context.findViewById(R.id.etSearchProxy); boolean isUseProxy = cbUseProxy.isChecked(); Authorization auth = context.getAuth(); auth.setAccessToken(userName); auth.setAccessSecret(password); switch (sp) { case Sina: case NetEase: case Sohu: case Fanfou: new XAuthTask(context, auth, isMakeDefault, isFollowOffical).execute(); break; case Twitter: if (isUseProxy) { String restApi = etRestProxy.getText().toString().trim().toLowerCase(); if (!restApi.matches(SCHEME_HOST_PATH_PATTERN.toString())) { if (restApi.matches(HOST_PATH_PATTERN.toString())) { restApi = "http://" + restApi; } else { Toast.makeText(context, R.string.msg_accounts_add_invalid_proxy_url, Toast.LENGTH_SHORT).show(); etRestProxy.requestFocus(); break; } } String searchApi = etSearchProxy.getText().toString().trim(); new TwitterProxyAuthTask( context, userName, password, restApi, searchApi, isMakeDefault ).execute(); } else { new XAuthTask(context, auth, isMakeDefault, isFollowOffical).execute(); } break; default: break; } } }