diff --git a/plugins/admob/proj.android/res/values/ad_key.xml b/plugins/admob/proj.android/res/values/ad_key.xml new file mode 100644 index 00000000..a6693fd1 --- /dev/null +++ b/plugins/admob/proj.android/res/values/ad_key.xml @@ -0,0 +1,4 @@ + + + + diff --git a/plugins/admob/proj.android/sdk/GoogleAdMobAdsSdk.jar b/plugins/admob/proj.android/sdk/GoogleAdMobAdsSdk.jar old mode 100755 new mode 100644 index 3cf479a2..de667541 Binary files a/plugins/admob/proj.android/sdk/GoogleAdMobAdsSdk.jar and b/plugins/admob/proj.android/sdk/GoogleAdMobAdsSdk.jar differ diff --git a/plugins/admob/proj.android/src/org/cocos2dx/plugin/AdsAdmob.java b/plugins/admob/proj.android/src/org/cocos2dx/plugin/AdsAdmob.java index 8b19eaf4..94d8a6b4 100644 --- a/plugins/admob/proj.android/src/org/cocos2dx/plugin/AdsAdmob.java +++ b/plugins/admob/proj.android/src/org/cocos2dx/plugin/AdsAdmob.java @@ -20,7 +20,7 @@ of this software and associated documentation files (the "Software"), to deal LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -****************************************************************************/ + ****************************************************************************/ package org.cocos2dx.plugin; import java.util.HashSet; @@ -28,14 +28,18 @@ of this software and associated documentation files (the "Software"), to deal import java.util.Iterator; import java.util.Set; -import com.google.ads.*; -import com.google.ads.AdRequest.ErrorCode; - import android.app.Activity; import android.content.Context; import android.util.Log; import android.view.WindowManager; +import com.google.ads.Ad; +import com.google.ads.AdListener; +import com.google.ads.AdRequest; +import com.google.ads.AdRequest.ErrorCode; +import com.google.ads.AdSize; +import com.google.ads.AdView; + public class AdsAdmob implements InterfaceAds { private static final String LOG_TAG = "AdsAdmob"; @@ -71,6 +75,18 @@ protected static void LogD(String msg) { public AdsAdmob(Context context) { mContext = (Activity) context; mAdapter = this; + + m_r = mContext.getResources(); + android.util.DisplayMetrics metrics = new android.util.DisplayMetrics(); + mContext.getWindowManager().getDefaultDisplay().getMetrics(metrics); + m_density = (int) metrics.density; + } + + private static android.content.res.Resources m_r = null; + private static int m_density = 0; + + public static int dens(int val) { + return val * m_density; } @Override @@ -80,13 +96,16 @@ public void setDebugMode(boolean debug) { @Override public String getSDKVersion() { - return "6.3.1"; + return "6.4.1"; } @Override public void configDeveloperInfo(Hashtable devInfo) { try { mPublishID = devInfo.get("AdmobID"); + if(mPublishID==null){ + mPublishID = m_r.getString(org.cocos2dx.libAdsAdmob.R.string.adUnitId); + } LogD("init AppInfo : " + mPublishID); } catch (Exception e) { LogE("initAppInfo, The format of appInfo is wrong", e); @@ -95,28 +114,26 @@ public void configDeveloperInfo(Hashtable devInfo) { @Override public void showAds(Hashtable info, int pos) { - try - { - String strType = info.get("AdmobType"); - int adsType = Integer.parseInt(strType); - - switch (adsType) { - case ADMOB_TYPE_BANNER: - { - String strSize = info.get("AdmobSizeEnum"); - int sizeEnum = Integer.parseInt(strSize); - showBannerAd(sizeEnum, pos); - break; - } - case ADMOB_TYPE_FULLSCREEN: - LogD("Now not support full screen view in Admob"); - break; - default: - break; - } - } catch (Exception e) { - LogE("Error when show Ads ( " + info.toString() + " )", e); - } + try { + String strType = info.get("AdmobType"); + int adsType = Integer.parseInt(strType); + + switch (adsType) { + case ADMOB_TYPE_BANNER: { + String strSize = info.get("AdmobSizeEnum"); + int sizeEnum = Integer.parseInt(strSize); + showBannerAd(sizeEnum, pos); + break; + } + case ADMOB_TYPE_FULLSCREEN: + LogD("Now not support full screen view in Admob"); + break; + default: + break; + } + } catch (Exception e) { + LogE("Error when show Ads ( " + info.toString() + " )", e); + } } @Override @@ -126,24 +143,23 @@ public void spendPoints(int points) { @Override public void hideAds(Hashtable info) { - try - { - String strType = info.get("AdmobType"); - int adsType = Integer.parseInt(strType); - - switch (adsType) { - case ADMOB_TYPE_BANNER: - hideBannerAd(); - break; - case ADMOB_TYPE_FULLSCREEN: - LogD("Now not support full screen view in Admob"); - break; - default: - break; - } - } catch (Exception e) { - LogE("Error when hide Ads ( " + info.toString() + " )", e); - } + try { + String strType = info.get("AdmobType"); + int adsType = Integer.parseInt(strType); + + switch (adsType) { + case ADMOB_TYPE_BANNER: + hideBannerAd(); + break; + case ADMOB_TYPE_FULLSCREEN: + LogD("Now not support full screen view in Admob"); + break; + default: + break; + } + } catch (Exception e) { + LogE("Error when hide Ads ( " + info.toString() + " )", e); + } } private void showBannerAd(int sizeEnum, int pos) { @@ -178,32 +194,37 @@ public void run() { size = AdSize.IAB_LEADERBOARD; break; case AdsAdmob.ADMOB_SIZE_Skyscraper: - size = AdSize.IAB_WIDE_SKYSCRAPER; - break; + size = AdSize.IAB_WIDE_SKYSCRAPER; + break; default: break; } adView = new AdView(mContext, size, mPublishID); AdRequest req = new AdRequest(); - + try { if (mTestDevices != null) { Iterator ir = mTestDevices.iterator(); - while(ir.hasNext()) - { + while (ir.hasNext()) { req.addTestDevice(ir.next()); } } } catch (Exception e) { LogE("Error during add test device", e); } - + adView.loadAd(req); adView.setAdListener(new AdmobAdsListener()); if (null == mWm) { mWm = (WindowManager) mContext.getSystemService("window"); } + if (size == AdSize.BANNER) { + AdsWrapper.addAdView(mWm, adView, dens(320), dens(50), + curPos); + } else { + AdsWrapper.addAdView(mWm, adView, curPos); + } AdsWrapper.addAdView(mWm, adView, curPos); } }); @@ -237,7 +258,8 @@ private class AdmobAdsListener implements AdListener { @Override public void onDismissScreen(Ad arg0) { LogD("onDismissScreen invoked"); - AdsWrapper.onAdsResult(mAdapter, AdsWrapper.RESULT_CODE_AdsDismissed, "Ads view dismissed!"); + AdsWrapper.onAdsResult(mAdapter, + AdsWrapper.RESULT_CODE_AdsDismissed, "Ads view dismissed!"); } @Override @@ -246,7 +268,7 @@ public void onFailedToReceiveAd(Ad arg0, ErrorCode arg1) { String errorMsg = "Unknow error"; switch (arg1) { case NETWORK_ERROR: - errorNo = AdsWrapper.RESULT_CODE_NetworkError; + errorNo = AdsWrapper.RESULT_CODE_NetworkError; errorMsg = "Network error"; break; case INVALID_REQUEST: @@ -271,13 +293,16 @@ public void onLeaveApplication(Ad arg0) { @Override public void onPresentScreen(Ad arg0) { LogD("onPresentScreen invoked"); - AdsWrapper.onAdsResult(mAdapter, AdsWrapper.RESULT_CODE_AdsShown, "Ads view shown!"); + AdsWrapper.onAdsResult(mAdapter, AdsWrapper.RESULT_CODE_AdsShown, + "Ads view shown!"); } @Override public void onReceiveAd(Ad arg0) { LogD("onReceiveAd invoked"); - AdsWrapper.onAdsResult(mAdapter, AdsWrapper.RESULT_CODE_AdsReceived, "Ads request received success!"); + AdsWrapper.onAdsResult(mAdapter, + AdsWrapper.RESULT_CODE_AdsReceived, + "Ads request received success!"); } } @@ -286,8 +311,8 @@ public String getPluginVersion() { return "0.2.0"; } - @Override - public void queryPoints() { - LogD("Admob not support query points!"); - } + @Override + public void queryPoints() { + LogD("Admob not support query points!"); + } } diff --git a/plugins/twitter/proj.android/.classpath b/plugins/twitter/proj.android/.classpath index e877b820..21779f97 100755 --- a/plugins/twitter/proj.android/.classpath +++ b/plugins/twitter/proj.android/.classpath @@ -1,12 +1,14 @@ - - - + - + + + + + diff --git a/plugins/twitter/proj.android/res/values/ad_sns.xml b/plugins/twitter/proj.android/res/values/ad_sns.xml new file mode 100644 index 00000000..22e1c1c6 --- /dev/null +++ b/plugins/twitter/proj.android/res/values/ad_sns.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/twitter/proj.android/sdk/okhttp-1.5.1.jar b/plugins/twitter/proj.android/sdk/okhttp-1.5.1.jar new file mode 100644 index 00000000..df0ebbd9 Binary files /dev/null and b/plugins/twitter/proj.android/sdk/okhttp-1.5.1.jar differ diff --git a/plugins/twitter/proj.android/sdk/twitter4j-core-4.0.1.jar b/plugins/twitter/proj.android/sdk/twitter4j-core-4.0.1.jar new file mode 100644 index 00000000..fbbd6d79 Binary files /dev/null and b/plugins/twitter/proj.android/sdk/twitter4j-core-4.0.1.jar differ diff --git a/plugins/twitter/proj.android/sdk/twitter4j-core-android-3.0.1.jar b/plugins/twitter/proj.android/sdk/twitter4j-core-android-3.0.1.jar deleted file mode 100755 index 62d02b6f..00000000 Binary files a/plugins/twitter/proj.android/sdk/twitter4j-core-android-3.0.1.jar and /dev/null differ diff --git a/plugins/twitter/proj.android/sdk/twitter4j-media-support-4.0.1.jar b/plugins/twitter/proj.android/sdk/twitter4j-media-support-4.0.1.jar new file mode 100644 index 00000000..1057a6b2 Binary files /dev/null and b/plugins/twitter/proj.android/sdk/twitter4j-media-support-4.0.1.jar differ diff --git a/plugins/twitter/proj.android/sdk/twitter4j-spdy-support-4.0.1.jar b/plugins/twitter/proj.android/sdk/twitter4j-spdy-support-4.0.1.jar new file mode 100644 index 00000000..1c4e1e65 Binary files /dev/null and b/plugins/twitter/proj.android/sdk/twitter4j-spdy-support-4.0.1.jar differ diff --git a/plugins/twitter/proj.android/src/org/cocos2dx/plugin/ShareTwitter.java b/plugins/twitter/proj.android/src/org/cocos2dx/plugin/ShareTwitter.java index a77d611e..0634b638 100755 --- a/plugins/twitter/proj.android/src/org/cocos2dx/plugin/ShareTwitter.java +++ b/plugins/twitter/proj.android/src/org/cocos2dx/plugin/ShareTwitter.java @@ -20,15 +20,18 @@ of this software and associated documentation files (the "Software"), to deal LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -****************************************************************************/ + ****************************************************************************/ package org.cocos2dx.plugin; +import java.net.URLDecoder; import java.util.Hashtable; +import org.cocos2dx.libSocialTwitter.R; import org.cocos2dx.plugin.TwitterApp.TwDialogListener; import android.app.Activity; import android.content.Context; +import android.content.res.Resources; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.util.Log; @@ -39,16 +42,24 @@ public class ShareTwitter implements InterfaceShare { private static Activity mContext = null; private static InterfaceShare mShareAdapter = null; protected static boolean bDebug = false; - private static String CONSUMER_KEY=""; - private static String CONSUMER_SECRET=""; + private static String CONSUMER_KEY = ""; + private static String CONSUMER_SECRET = ""; + private static String TWITPIC_API_KEY = ""; //support twitpic + private static TwitterApp mTwitter = null; private static boolean isInitialized = false; private static Hashtable mShareInfo = null; - - public static String KEY_TEXT="SharedText"; + + private final static String KEY_CONSUMER_KEY = "TwitterKey"; + private final static String KEY_CONSUMER_SECRET = "TwitterSecret"; + private final static String KEY_TWITPIC_API_KEY = "TwitPicAPIKey"; + + public static String KEY_TEXT = "SharedText"; public static String KEY_IMAGE_PATH = "SharedImagePath"; + private static boolean encode_f = false; + protected static void LogE(String msg, Exception e) { Log.e(LOG_TAG, msg, e); e.printStackTrace(); @@ -63,26 +74,59 @@ protected static void LogD(String msg) { public ShareTwitter(Context context) { mContext = (Activity) context; mShareAdapter = this; + + + Resources mResource = mContext.getResources(); + CONSUMER_KEY = mResource.getString(R.string.consumar_key); + CONSUMER_SECRET = mResource.getString(R.string.consumar_secret); + TWITPIC_API_KEY = mResource.getString(R.string.twitpic_api_key); + LogD("key : " + CONSUMER_KEY); + LogD("secret : " + CONSUMER_SECRET); + LogD("twitpic : " + TWITPIC_API_KEY); } - @Override public void configDeveloperInfo(Hashtable cpInfo) { LogD("initDeveloperInfo invoked " + cpInfo.toString()); try { - ShareTwitter.CONSUMER_KEY = cpInfo.get("TwitterKey"); - ShareTwitter.CONSUMER_SECRET = cpInfo.get("TwitterSecret"); - LogD("key : " + ShareTwitter.CONSUMER_KEY); - LogD("secret : " + ShareTwitter.CONSUMER_SECRET); - if(isInitialized){ + if (isInitialized) { return; } - isInitialized = true; + isInitialized = true; + + String _CONSUMER_KEY= cpInfo.get(KEY_CONSUMER_KEY); + if(_CONSUMER_KEY != null){ + CONSUMER_KEY = _CONSUMER_KEY; + } + String _CONSUMER_SECRET= cpInfo.get(KEY_CONSUMER_SECRET); + if(_CONSUMER_SECRET != null){ + CONSUMER_SECRET = _CONSUMER_SECRET; + } + + String _TWITPIC_API_KEY= cpInfo.get(KEY_TWITPIC_API_KEY); + if(_TWITPIC_API_KEY != null){ + TWITPIC_API_KEY = _TWITPIC_API_KEY; + } + + LogD("key : " + CONSUMER_KEY); + LogD("secret : " + CONSUMER_SECRET); + LogD("twitpic : " + TWITPIC_API_KEY); + + //support encode + try { + encode_f = Boolean.valueOf(cpInfo.get("encode_flag")); + } catch (Exception e) { + encode_f = false; + } + + PluginWrapper.runOnMainThread(new Runnable() { - + @Override public void run() { - mTwitter = new TwitterApp(PluginWrapper.getContext(), ShareTwitter.CONSUMER_KEY, ShareTwitter.CONSUMER_SECRET); + mTwitter = new TwitterApp(PluginWrapper.getContext(), + ShareTwitter.CONSUMER_KEY, + ShareTwitter.CONSUMER_SECRET); mTwitter.setListener(mTwLoginDialogListener); } }); @@ -95,21 +139,21 @@ public void run() { @Override public void share(Hashtable info) { LogD("share invoked " + info.toString()); - mShareInfo = info; - if (! networkReachable()) { + mShareInfo = info; + if (!networkReachable()) { shareResult(ShareWrapper.SHARERESULT_FAIL, "Network error!"); return; } - if (! isInitialized) { + if (!isInitialized) { shareResult(ShareWrapper.SHARERESULT_FAIL, "Initialize failed!"); return; } // need login - if(!mTwitter.hasAccessToken()){ + if (!mTwitter.hasAccessToken()) { PluginWrapper.runOnMainThread(new Runnable() { - + @Override public void run() { mTwitter.authorize(); @@ -118,9 +162,9 @@ public void run() { return; } - + PluginWrapper.runOnMainThread(new Runnable() { - + @Override public void run() { ShareTwitter.sendToTwitter(); @@ -135,13 +179,14 @@ public void setDebugMode(boolean debug) { @Override public String getSDKVersion() { - return "Unknown version"; + return "4.0.1"; } private boolean networkReachable() { boolean bRet = false; try { - ConnectivityManager conn = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE); + ConnectivityManager conn = (ConnectivityManager) mContext + .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = conn.getActiveNetworkInfo(); bRet = (null == netInfo) ? false : netInfo.isAvailable(); } catch (Exception e) { @@ -157,13 +202,13 @@ private static void shareResult(int ret, String msg) { } private static final TwDialogListener mTwLoginDialogListener = new TwDialogListener() { - + @Override public void onError(int flag, String value) { LogD("Twitter connection failed!"); - shareResult(ShareWrapper.SHARERESULT_FAIL, value); + shareResult(ShareWrapper.SHARERESULT_FAIL, value); } - + @Override public void onComplete(String value) { ShareTwitter.sendToTwitter(); @@ -172,12 +217,26 @@ public void onComplete(String value) { private static void sendToTwitter() { String text = mShareInfo.get(KEY_TEXT); - String imagePath = mShareInfo.get(KEY_IMAGE_PATH); + String imagePath = mShareInfo.get(KEY_IMAGE_PATH); try { - if(imagePath != null && imagePath.length() > 0){ - mTwitter.updateStatus(text, imagePath); - }else{ - mTwitter.updateStatus(text); + if(encode_f){ + try{ + text = URLDecoder.decode(text,"utf-8"); + } + catch(Exception ex){} + } + + if (imagePath != null && imagePath.length() > 0) { + if (TWITPIC_API_KEY != null && !"".equals(TWITPIC_API_KEY)) { + String url = mTwitter.updateStatusTwitPic( + text,imagePath, TWITPIC_API_KEY); + mTwitter.updateStatus(text + " " + url); + } + else{ + mTwitter.updateStatus(text, imagePath); + } + } else { + mTwitter.updateStatus(text); } LogD("Posted to Twitter!"); shareResult(ShareWrapper.SHARERESULT_SUCCESS, "Share succeed!"); diff --git a/plugins/twitter/proj.android/src/org/cocos2dx/plugin/TwitterApp.java b/plugins/twitter/proj.android/src/org/cocos2dx/plugin/TwitterApp.java index 5e7fa562..b38cdd3d 100755 --- a/plugins/twitter/proj.android/src/org/cocos2dx/plugin/TwitterApp.java +++ b/plugins/twitter/proj.android/src/org/cocos2dx/plugin/TwitterApp.java @@ -14,14 +14,21 @@ import oauth.signpost.OAuthProvider; import oauth.signpost.basic.DefaultOAuthProvider; import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer; + +import org.cocos2dx.libSocialTwitter.R; + import twitter4j.StatusUpdate; import twitter4j.Twitter; import twitter4j.TwitterException; import twitter4j.TwitterFactory; import twitter4j.User; import twitter4j.auth.AccessToken; +import twitter4j.conf.ConfigurationBuilder; +import twitter4j.media.ImageUploadFactory; +import twitter4j.media.MediaProvider; import android.app.ProgressDialog; import android.content.Context; +import android.content.res.Resources; import android.os.Handler; import android.os.Message; import android.util.Log; @@ -40,8 +47,10 @@ public class TwitterApp { private Context context; private boolean mInit = true; private static final String LOG_TAG = "TwitterApp"; - public static final String CALLBACK_URL = "twitterapp://connect"; - + // public static final String CALLBACK_URL = "twitterapp://connect"; + public static String CALLBACK_URL = ""; + public static final String CALLBACK_URL_FORMAT = "%s://%s"; + protected static void LogE(String msg, Exception e) { Log.e(LOG_TAG, msg, e); e.printStackTrace(); @@ -53,33 +62,39 @@ protected static void LogD(String msg) { } } - public TwitterApp(Context context, String consumerKey, String secretKey) { - this.context = context; - + this.context = context; + mTwitter = new TwitterFactory().getInstance(); - mSession = new TwitterSession(context); - mProgressDlg = new ProgressDialog(context); + mSession = new TwitterSession(context); + mProgressDlg = new ProgressDialog(context); mProgressDlg.setCancelable(false); mProgressDlg.requestWindowFeature(Window.FEATURE_NO_TITLE); - mConsumerKey = consumerKey; - mSecretKey = secretKey; - - mHttpOauthConsumer = new CommonsHttpOAuthConsumer(mConsumerKey, mSecretKey); - mHttpOauthprovider = new DefaultOAuthProvider("https://twitter.com/oauth/request_token", - "https://twitter.com/oauth/access_token", - "https://twitter.com/oauth/authorize"); - - mAccessToken = mSession.getAccessToken(); + Resources m_r = context.getResources(); + CALLBACK_URL = String.format(CALLBACK_URL_FORMAT, + m_r.getString(R.string.callback_scheme), + m_r.getString(R.string.callback_host)); + mConsumerKey = consumerKey; + mSecretKey = secretKey; + + mHttpOauthConsumer = new CommonsHttpOAuthConsumer(mConsumerKey, + mSecretKey); + mHttpOauthprovider = new DefaultOAuthProvider( + "https://twitter.com/oauth/request_token", + "https://twitter.com/oauth/access_token", + "https://twitter.com/oauth/authorize"); + + mAccessToken = mSession.getAccessToken(); + configureToken(); } - + public void setListener(TwDialogListener listener) { mListener = listener; } - + private void configureToken() { if (mAccessToken != null) { if (mInit) { @@ -89,18 +104,18 @@ private void configureToken() { mTwitter.setOAuthAccessToken(mAccessToken); } } - + public boolean hasAccessToken() { return (mAccessToken == null) ? false : true; } - + public void resetAccessToken() { if (mAccessToken != null) { mSession.resetAccessToken(); mAccessToken = null; } } - + public String getUsername() { return mSession.getUsername(); } @@ -112,112 +127,142 @@ public void updateStatus(String status) throws Exception { throw e; } } - - public void updateStatus(String status, String imagePath) throws Exception { - StatusUpdate update = new StatusUpdate(status); + + public void updateStatus(String status, String imagePath) throws Exception { + StatusUpdate update = new StatusUpdate(status); update.setMedia(new File(imagePath)); - try { + try { mTwitter.updateStatus(update); } catch (TwitterException e) { throw e; } } + //twitpic post + public String updateStatusTwitPic(String status, String imagePath,String twitPicKey) throws Exception { + ConfigurationBuilder cb2 = new ConfigurationBuilder() + .setOAuthConsumerKey(mTwitter.getConfiguration().getOAuthConsumerKey()) + .setOAuthConsumerSecret(mTwitter.getConfiguration().getOAuthConsumerSecret()) + .setOAuthAccessToken(mTwitter.getOAuthAccessToken().getToken()) + .setOAuthAccessTokenSecret(mTwitter.getOAuthAccessToken().getTokenSecret()); + + MediaProvider mediaprovider = MediaProvider.TWITPIC; + if(mediaprovider==MediaProvider.TWITPIC){ + cb2.setMediaProviderAPIKey(twitPicKey); + } + //conf + twitter4j.conf.Configuration conf = cb2.build(); + + //upload + File newfile = new File(imagePath); + twitter4j.media.ImageUpload upload1 = new ImageUploadFactory(conf).getInstance(mediaprovider); + return upload1.upload(newfile,status); + } + public void authorize() { mProgressDlg.setMessage("Initializing ..."); mProgressDlg.show(); - + new Thread() { @Override public void run() { String authUrl = ""; int what = 1; try { - authUrl = mHttpOauthprovider.retrieveRequestToken(mHttpOauthConsumer, CALLBACK_URL); - what = 0; + authUrl = mHttpOauthprovider.retrieveRequestToken( + mHttpOauthConsumer, CALLBACK_URL); + what = 0; LogD("Request token url " + authUrl); } catch (Exception e) { - LogD("Failed to get request token"); + LogD("Failed to get request token"); e.printStackTrace(); - } - mHandler.sendMessage(mHandler.obtainMessage(what, 1, 0, authUrl)); + } + mHandler.sendMessage(mHandler + .obtainMessage(what, 1, 0, authUrl)); } }.start(); } - - public void processToken(String callbackUrl) { + + public void processToken(String callbackUrl) { mProgressDlg.setMessage("Finalizing ..."); mProgressDlg.show(); - + final String verifier = getVerifier(callbackUrl); new Thread() { @Override public void run() { - int what = 1; + int what = 1; try { - mHttpOauthprovider.retrieveAccessToken(mHttpOauthConsumer, verifier); - mAccessToken = new AccessToken(mHttpOauthConsumer.getToken(), mHttpOauthConsumer.getTokenSecret()); - configureToken(); - User user = mTwitter.verifyCredentials(); - mSession.storeAccessToken(mAccessToken, user.getName()); - what = 0; - } catch (Exception e){ - LogD("Error getting access token"); + mHttpOauthprovider.retrieveAccessToken(mHttpOauthConsumer, + verifier); + mAccessToken = new AccessToken( + mHttpOauthConsumer.getToken(), + mHttpOauthConsumer.getTokenSecret()); + configureToken(); + User user = mTwitter.verifyCredentials(); + mSession.storeAccessToken(mAccessToken, user.getName()); + what = 0; + } catch (Exception e) { + LogD("Error getting access token"); e.printStackTrace(); - } + } mHandler.sendMessage(mHandler.obtainMessage(what, 2, 0)); } }.start(); } - + private String getVerifier(String callbackUrl) { - String verifier = ""; + String verifier = ""; try { - callbackUrl = callbackUrl.replace("twitterapp", "http"); - URL url = new URL(callbackUrl); - String query = url.getQuery(); - String array[] = query.split("&"); + callbackUrl = callbackUrl.replace("twitterapp", "http"); + URL url = new URL(callbackUrl); + String query = url.getQuery(); + String array[] = query.split("&"); for (String parameter : array) { - String v[] = parameter.split("="); - if (URLDecoder.decode(v[0]).equals(oauth.signpost.OAuth.OAUTH_VERIFIER)) { - verifier = URLDecoder.decode(v[1]); - break; - } - } + String v[] = parameter.split("="); + if (URLDecoder.decode(v[0]).equals( + oauth.signpost.OAuth.OAUTH_VERIFIER)) { + verifier = URLDecoder.decode(v[1]); + break; + } + } } catch (MalformedURLException e) { e.printStackTrace(); - } + } return verifier; } - + private void showLoginDialog(String url) { final TwDialogListener listener = new TwDialogListener() { @Override public void onComplete(String value) { processToken(value); } - + @Override public void onError(int flag, String value) { - mListener.onError(Consts.EFAILED_OPENING_AUTHORIZATION_PAGE, "Failed opening authorization page"); + mListener.onError(Consts.EFAILED_OPENING_AUTHORIZATION_PAGE, + "Failed opening authorization page"); } }; - + new TwitterDialog(context, url, listener).show(); } - + private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { mProgressDlg.dismiss(); - + if (msg.what == 1) { if (msg.arg1 == 1) - mListener.onError(Consts.EGETTING_REQUEST_TOKEN, "Error getting request token"); + mListener.onError(Consts.EGETTING_REQUEST_TOKEN, + "Error getting request token"); else - mListener.onError(Consts.EGETTING_ACCESS_TOKEN, "Error getting access token"); - }else { + mListener.onError(Consts.EGETTING_ACCESS_TOKEN, + "Error getting access token"); + } else { if (msg.arg1 == 1) showLoginDialog((String) msg.obj); else @@ -225,11 +270,11 @@ public void handleMessage(Message msg) { } } }; - + public interface TwDialogListener { - public void onComplete(String value); - + public void onComplete(String value); + public void onError(int flag, String value); } - + } \ No newline at end of file diff --git a/protocols/proj.android/jni/Application.mk b/protocols/proj.android/jni/Application.mk index 190da5e5..c20d7932 100644 --- a/protocols/proj.android/jni/Application.mk +++ b/protocols/proj.android/jni/Application.mk @@ -1,8 +1,8 @@ # it is needed for ndk-r5 APP_PLATFORM := android-10 APP_STL := gnustl_static -APP_CPPFLAGS += -frtti +APP_CPPFLAGS += -frtti -Wno-error=format-security APP_MODULES := PluginProtocolStatic -APP_ABI :=armeabi armeabi-v7a +APP_ABI :=armeabi armeabi-v7a x86 #APP_ABI :=x86 #APP_ABI :=mips mips-r2 mips-r2-sf armeabi diff --git a/protocols/proj.android/src/org/cocos2dx/plugin/AdsWrapper.java b/protocols/proj.android/src/org/cocos2dx/plugin/AdsWrapper.java index 5afc4ecc..d049306d 100644 --- a/protocols/proj.android/src/org/cocos2dx/plugin/AdsWrapper.java +++ b/protocols/proj.android/src/org/cocos2dx/plugin/AdsWrapper.java @@ -20,7 +20,7 @@ of this software and associated documentation files (the "Software"), to deal LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -****************************************************************************/ + ****************************************************************************/ package org.cocos2dx.plugin; import android.view.Gravity; @@ -29,29 +29,67 @@ of this software and associated documentation files (the "Software"), to deal public class AdsWrapper { - public static final int RESULT_CODE_AdsReceived = 0; // The ad is received - public static final int RESULT_CODE_AdsShown = 1; // The advertisement shown - public static final int RESULT_CODE_AdsDismissed = 2; // The advertisement dismissed - public static final int RESULT_CODE_PointsSpendSucceed = 3; // The points spend succeed - public static final int RESULT_CODE_PointsSpendFailed = 4; // The points spend failed - public static final int RESULT_CODE_NetworkError = 5; // Network error - public static final int RESULT_CODE_UnknownError = 6; // Unknown error - - public static final int POS_CENTER = 0; - public static final int POS_TOP = 1; - public static final int POS_TOP_LEFT = 2; - public static final int POS_TOP_RIGHT = 3; - public static final int POS_BOTTOM = 4; - public static final int POS_BOTTOM_LEFT = 5; + public static final int RESULT_CODE_AdsReceived = 0; // The ad is received + public static final int RESULT_CODE_AdsShown = 1; // The advertisement shown + public static final int RESULT_CODE_AdsDismissed = 2; // The advertisement + // dismissed + public static final int RESULT_CODE_PointsSpendSucceed = 3; // The points + // spend succeed + public static final int RESULT_CODE_PointsSpendFailed = 4; // The points + // spend failed + public static final int RESULT_CODE_NetworkError = 5; // Network error + public static final int RESULT_CODE_UnknownError = 6; // Unknown error + + public static final int POS_CENTER = 0; + public static final int POS_TOP = 1; + public static final int POS_TOP_LEFT = 2; + public static final int POS_TOP_RIGHT = 3; + public static final int POS_BOTTOM = 4; + public static final int POS_BOTTOM_LEFT = 5; public static final int POS_BOTTOM_RIGHT = 6; + public static void addAdView(WindowManager mWm, View adView, int width,int height, int pos) { + WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(); + mLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL; + mLayoutParams.width = width; + mLayoutParams.height = height; + mLayoutParams.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; + + switch (pos) { + case POS_CENTER: + mLayoutParams.gravity = Gravity.CENTER; + break; + case POS_TOP: + mLayoutParams.gravity = Gravity.TOP; + break; + case POS_TOP_LEFT: + mLayoutParams.gravity = Gravity.TOP | Gravity.LEFT; + break; + case POS_TOP_RIGHT: + mLayoutParams.gravity = Gravity.TOP | Gravity.RIGHT; + break; + case POS_BOTTOM: + mLayoutParams.gravity = Gravity.BOTTOM; + break; + case POS_BOTTOM_LEFT: + mLayoutParams.gravity = Gravity.BOTTOM | Gravity.LEFT; + break; + case POS_BOTTOM_RIGHT: + mLayoutParams.gravity = Gravity.BOTTOM | Gravity.RIGHT; + break; + default: + break; + } + mWm.addView(adView, mLayoutParams); + } + public static void addAdView(WindowManager mWm, View adView, int pos) { WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(); mLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL; mLayoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT; mLayoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; mLayoutParams.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; - + switch (pos) { case POS_CENTER: mLayoutParams.gravity = Gravity.CENTER; @@ -84,7 +122,7 @@ public static void onAdsResult(InterfaceAds adapter, int code, String msg) { final int curCode = code; final String curMsg = msg; final InterfaceAds curObj = adapter; - PluginWrapper.runOnGLThread(new Runnable(){ + PluginWrapper.runOnGLThread(new Runnable() { @Override public void run() { String name = curObj.getClass().getName(); @@ -93,12 +131,14 @@ public void run() { } }); } - private native static void nativeOnAdsResult(String className, int code, String msg); + + private native static void nativeOnAdsResult(String className, int code, + String msg); public static void onPlayerGetPoints(InterfaceAds adapter, int points) { final int curPoints = points; final InterfaceAds curAdapter = adapter; - PluginWrapper.runOnGLThread(new Runnable(){ + PluginWrapper.runOnGLThread(new Runnable() { @Override public void run() { String name = curAdapter.getClass().getName(); @@ -107,5 +147,7 @@ public void run() { } }); } - private native static void nativeOnPlayerGetPoints(String className, int points); + + private native static void nativeOnPlayerGetPoints(String className, + int points); } diff --git a/samples/HelloPlugins/proj.android/.project b/samples/HelloPlugins/proj.android/.project index 866cd15e..00173f1a 100644 --- a/samples/HelloPlugins/proj.android/.project +++ b/samples/HelloPlugins/proj.android/.project @@ -36,6 +36,11 @@ 2 PARENT-1-PROJECT_LOC/Classes + + Resources + 2 + PARENT-1-PROJECT_LOC/Resources + plugin-x 2