/** * */ package com.photoshare.service.share.views; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.photoshare.exception.NetworkError; import com.photoshare.fragments.BaseFragment; import com.photoshare.service.ShareHelper; import com.photoshare.service.photos.PhotoBean; import com.photoshare.service.share.ShareBean; import com.photoshare.service.share.ShareType; import com.photoshare.service.share.SinaWeiboToken; import com.photoshare.tabHost.R; import com.photoshare.utils.Utils; import com.photoshare.view.NotificationDisplayer; import com.renren.api.connect.android.Renren; import com.renren.api.connect.android.Util; import com.renren.api.connect.android.common.AbstractRequestListener; import com.renren.api.connect.android.exception.RenrenAuthError; import com.renren.api.connect.android.exception.RenrenError; import com.renren.api.connect.android.photos.PhotoUploadResponseBean; import com.renren.api.connect.android.view.RenrenAuthListener; import com.weibo.sdk.android.Oauth2AccessToken; import com.weibo.sdk.android.Weibo; import com.weibo.sdk.android.WeiboAuthListener; import com.weibo.sdk.android.WeiboDialogError; import com.weibo.sdk.android.WeiboException; import com.weibo.sdk.android.api.StatusesAPI; import com.weibo.sdk.android.net.RequestListener; import com.weibo.sdk.android.sso.SsoHandler; import com.weibo.sdk.android.util.Utility; /** * @author Aron * */ public class DecoratedSharingPreferencesFragment extends BaseFragment { private SharePreferencesView view; private Bitmap photo; private String caption = ""; private Renren mRenren; private Weibo mWeibo; public static final String TAG = "sinasdk"; private SsoHandler mSsoHandler; private NotificationDisplayer mNotificationDisplayer; public static DecoratedSharingPreferencesFragment newInstance( int fragmentViewId) { DecoratedSharingPreferencesFragment ss = new DecoratedSharingPreferencesFragment(); ss.setFragmentViewId(fragmentViewId); return ss; } private String getDecoratedSharingPreferencesFragment() { return getString(R.string.fdecoratedSharingPreferenceFragment); } @Override public void onActivityCreated(Bundle savedInstanceState) { if (savedInstanceState != null) { if (savedInstanceState.containsKey(PhotoBean.KEY_PHOTO)) { photo = savedInstanceState.getParcelable(PhotoBean.KEY_PHOTO); } if (savedInstanceState.containsKey(PhotoBean.KEY_CAPTION)) { caption = savedInstanceState.getString(PhotoBean.KEY_CAPTION); } } super.onActivityCreated(savedInstanceState); Bundle params = getArguments(); if (params != null) { if (params.containsKey(PhotoBean.KEY_PHOTO)) { photo = params.getParcelable(PhotoBean.KEY_PHOTO); } if (params.containsKey(PhotoBean.KEY_CAPTION)) { caption = params.getString(PhotoBean.KEY_CAPTION); } } initViews(); } /** * */ private void initViews() { mNotificationDisplayer = new NotificationDisplayer.NotificationBuilder() .Context(getActivity()).Ticker(getSuccessTicker()).build(); view = new SharePreferencesView(getActivity().findViewById( R.id.sharingPreferenceId), getActivity()); view.registerListener(listener); view.applyView(); } @Override public void onSaveInstanceState(Bundle outState) { if (outState != null) { outState.putParcelable(PhotoBean.KEY_PHOTO, photo); outState.putString(PhotoBean.KEY_CAPTION, caption); } super.onSaveInstanceState(outState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.sharing_preference_layout, container, false); } private String getSinaWeiboTag() { return getString(R.string.nSinaWeibo); } private String getRenrenTag() { return getString(R.string.nRenren); } private String getTxWeiboTag() { return getString(R.string.nTxWeibo); } private SharePreferencesView.OnAsyncItemClickListener listener = new SharePreferencesView.OnAsyncItemClickListener() { public void AsyncShareSettings(View view, ShareBean info) { ShareType type = info.getmShareType(); switch (type) { case NULL: break; case RenRen: mRenren = new Renren(type.getApiKey(), type.getSecretKey(), type.getAppId(), getActivity()); mRenren.init(getActivity()); mRenren.authorize(getActivity(), new RenrenAuthListenerImpl()); mNotificationDisplayer.setTag(getRenrenTag()); break; case SinaWeibo: mWeibo = Weibo.getInstance(type.getApiKey(), ShareBean.KEY_SINA_WEIBO_REDIRECT_URL); try { Class sso = Class .forName("com.weibo.sdk.android.sso.SsoHandler"); mSsoHandler = new SsoHandler(getActivity(), mWeibo); mSsoHandler.authorize(new SinaWeiboAuthListener()); } catch (ClassNotFoundException e) { Log.i(TAG, "com.weibo.sdk.android.sso.SsoHandler not found"); mWeibo.authorize(getActivity(), new SinaWeiboAuthListener()); } SinaWeiboToken.readAccessToken(getActivity()); mNotificationDisplayer.setTag(getSinaWeiboTag()); if (SinaWeiboToken.isSeesionValid()) { Weibo.isWifi = Utility.isWifi(getActivity()); try { Class.forName("com.weibo.sdk.android.api.WeiboAPI"); } catch (ClassNotFoundException e) { mExceptionHandler.obtainMessage( NetworkError.ERROR_SINA_WEIBO_AUTHORIZE) .sendToTarget(); } } else { // mSsoHandler = new SsoHandler(getActivity(), mWeibo); // mSsoHandler.authorize(mWeiboAuthListener); } break; case TxWeibo: mNotificationDisplayer.setTag(getTxWeiboTag()); break; default: break; } if (info != null && info.isValid()) { } else { } } }; @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { Util.logger("Call back"); super.onActivityResult(requestCode, resultCode, data); if (mRenren != null) { mRenren.authorizeCallback(requestCode, resultCode, data); return; } if (mSsoHandler != null) { mSsoHandler.authorizeCallBack(requestCode, resultCode, data); } } public void onAuthorizeCallback(int requestCode, int resultCode, Intent data) { Util.logger("AuthCallback"); if (mRenren != null) { mRenren.authorizeCallback(requestCode, resultCode, data); return; } if (mSsoHandler != null) { mSsoHandler.authorizeCallBack(requestCode, resultCode, data); } } class RenrenAuthListenerImpl implements RenrenAuthListener { public void onComplete(Bundle values) { Util.logger("complete"); ShareHelper helper = new ShareHelper(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); Drawable d = getResources().getDrawable( R.drawable.titlebar_left_button); photo = ((BitmapDrawable) d).getBitmap(); photo.compress(CompressFormat.PNG, 100, baos); File file = Utils.getFileFromBytes(baos.toByteArray(), "bitmap"); AbstractRequestListener<PhotoUploadResponseBean> listener = new AbstractRequestListener<PhotoUploadResponseBean>() { @Override public void onRenrenError(RenrenError renrenError) { mExceptionHandler.obtainMessage( NetworkError.ERROR_RENREN_PUBLISH_PHOTO) .sendToTarget(); } @Override public void onFault(Throwable fault) { mExceptionHandler.obtainMessage( NetworkError.ERROR_RENREN_PUBLISH_PHOTO) .sendToTarget(); } @Override public void onComplete(PhotoUploadResponseBean bean) { // TODO Auto-generated method stub getActivity().runOnUiThread(new Runnable() { public void run() { mNotificationDisplayer.displayNotification(); mNotificationDisplayer.cancleNotification(); } }); } }; helper.uploadPhotoToRenRen(file, caption, listener, mRenren); } public void onRenrenAuthError(RenrenAuthError renrenAuthError) { Util.logger("AuthError"); mExceptionHandler .obtainMessage(NetworkError.ERROR_RENREN_AUTHORIZE) .sendToTarget(); } public void onCancelLogin() { Util.logger("cancle"); mExceptionHandler .obtainMessage(NetworkError.ERROR_RENREN_AUTHORIZE) .sendToTarget(); } public void onCancelAuth(Bundle values) { Util.logger("AuthCancle"); mExceptionHandler .obtainMessage(NetworkError.ERROR_RENREN_AUTHORIZE) .sendToTarget(); } }; class SinaWeiboAuthListener implements WeiboAuthListener { public void onWeiboException(WeiboException arg0) { mExceptionHandler.obtainMessage( NetworkError.ERROR_SINA_WEIBO_AUTHORIZE).sendToTarget(); } public void onError(WeiboDialogError arg0) { mExceptionHandler.obtainMessage( NetworkError.ERROR_SINA_WEIBO_AUTHORIZE).sendToTarget(); } public void onComplete(Bundle values) { String token = values.getString("access_token"); String expires_in = values.getString("expires_in"); Oauth2AccessToken wToken = SinaWeiboToken.createToken(token, expires_in); if (wToken.isSessionValid()) { try { Class.forName("com.weibo.sdk.android.api.WeiboAPI"); } catch (ClassNotFoundException e) { mExceptionHandler .obtainMessage(NetworkError.ERROR_SINA_WEIBO_AUTHORIZE); } SinaWeiboToken.keepAccessToken(getActivity(), wToken); } ByteArrayOutputStream baos = new ByteArrayOutputStream(); photo.compress(CompressFormat.PNG, 100, baos); File file = Utils.getFileFromBytes(baos.toByteArray(), "bitmap"); final RequestListener listener = new RequestListener() { public void onIOException(IOException arg0) { mExceptionHandler.obtainMessage( NetworkError.ERROR_SINA_WEIBO_PUBLISH_PHOTO) .sendToTarget(); } public void onError(WeiboException arg0) { mExceptionHandler.obtainMessage( NetworkError.ERROR_SINA_WEIBO_PUBLISH_PHOTO) .sendToTarget(); } public void onComplete(String arg0) { getActivity().runOnUiThread(new Runnable() { public void run() { mNotificationDisplayer.displayNotification(); mNotificationDisplayer.cancleNotification(); } }); } }; StatusesAPI api = new StatusesAPI(wToken); if (file != null) { api.upload(caption, file.getAbsolutePath(), "90.0", "90.0", listener); } else { caption += ""; api.update(caption, "90.0", "90.0", listener); } } public void onCancel() { mExceptionHandler.obtainMessage( NetworkError.ERROR_SINA_WEIBO_AUTHORIZE).sendToTarget(); } }; /* * (non-Javadoc) * * @see com.photoshare.fragments.BaseFragment#OnRightBtnClicked() */ @Override protected void onRightBtnClicked() { } /* * (non-Javadoc) * * @see com.photoshare.fragments.BaseFragment#OnLeftBtnClicked() */ @Override protected void onLeftBtnClicked() { backward(null); } @Override protected void onLoginSuccess() { // TODO Auto-generated method stub } }