diff --git a/app/src/main/java/com/gh/base/GlobalActivityLifecycleObserver.kt b/app/src/main/java/com/gh/base/GlobalActivityLifecycleObserver.kt index 9e286c05a6..6af3e4f4e4 100644 --- a/app/src/main/java/com/gh/base/GlobalActivityLifecycleObserver.kt +++ b/app/src/main/java/com/gh/base/GlobalActivityLifecycleObserver.kt @@ -32,6 +32,7 @@ class GlobalActivityLifecycleObserver : Application.ActivityLifecycleCallbacks { if (mIsFromBackgroundToForeground) { if (AdDelegateHelper.shouldShowStartUpAd(true) + && !HaloApp.getInstance().isSkippingThirdParty && activity !is SplashScreenActivity && activity !is SkipActivity && activity !is AuthorizationActivity diff --git a/app/src/main/java/com/gh/common/provider/AppProviderImpl.kt b/app/src/main/java/com/gh/common/provider/AppProviderImpl.kt index bd5d3eb912..af44d494cd 100644 --- a/app/src/main/java/com/gh/common/provider/AppProviderImpl.kt +++ b/app/src/main/java/com/gh/common/provider/AppProviderImpl.kt @@ -82,4 +82,8 @@ class AppProviderImpl : IAppProvider { override fun getIsBrandNewInstall(): Boolean { return HaloApp.getInstance().isBrandNewInstall } + + override fun setSkippingThirdParty(isSkippingThirdParty: Boolean) { + HaloApp.getInstance().isSkippingThirdParty = isSkippingThirdParty + } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java b/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java index 1ca7297267..0a27bad1dc 100644 --- a/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java +++ b/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java @@ -20,15 +20,17 @@ import android.util.Base64; import androidx.annotation.NonNull; import com.alibaba.android.arouter.facade.annotation.Route; +import com.alibaba.android.arouter.launcher.ARouter; import com.gh.common.constant.Config; -import com.gh.gamecenter.common.utils.SensorsBridge; import com.gh.common.util.IntegralLogHelper; import com.gh.gamecenter.common.callback.BiCallback; import com.gh.gamecenter.common.constant.RouteConsts; import com.gh.gamecenter.common.eventbus.EBShare; import com.gh.gamecenter.common.utils.BitmapUtils; import com.gh.gamecenter.common.utils.ImageUtils; +import com.gh.gamecenter.common.utils.SensorsBridge; import com.gh.gamecenter.common.utils.ShareUtils; +import com.gh.gamecenter.core.provider.IAppProvider; import com.lightgame.utils.Utils; import com.sina.weibo.sdk.api.ImageObject; import com.sina.weibo.sdk.api.TextObject; @@ -50,6 +52,7 @@ import java.io.ByteArrayOutputStream; */ @Route(path = RouteConsts.activity.weiBoShareActivity) public class WeiBoShareActivity extends Activity implements WbShareCallback { + private IAppProvider mAppProvider = (IAppProvider) ARouter.getInstance().build(RouteConsts.provider.app).navigation(); private static final String WEIBO_SCOPE = ( "email,direct_messages_read,direct_messages_write," @@ -95,6 +98,9 @@ public class WeiBoShareActivity extends Activity implements WbShareCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (mAppProvider != null) { + mAppProvider.setSkippingThirdParty(true); + } Bundle extras = getIntent().getExtras(); if (extras == null) return; @@ -326,4 +332,12 @@ public class WeiBoShareActivity extends Activity implements WbShareCallback { } finish(); } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mAppProvider != null) { + mAppProvider.setSkippingThirdParty(false); + } + } } diff --git a/app/src/main/java/com/halo/assistant/HaloApp.java b/app/src/main/java/com/halo/assistant/HaloApp.java index 41db7f9d0a..425afad0c4 100644 --- a/app/src/main/java/com/halo/assistant/HaloApp.java +++ b/app/src/main/java/com/halo/assistant/HaloApp.java @@ -108,6 +108,8 @@ public class HaloApp extends MultiDexApplication { public boolean isRunningForeground = false; // 标记当前 APP 是否处于前台运行中 public boolean isAlreadyUpAndRunning = false; // 应用是否处于运行中状态 (进入到 MainActivity 就当运行中) + + public boolean isSkippingThirdParty = false; // 应用是否处于跳转第三方Activity状态 private List webViewAbiList; private IFlavorProvider mFlavorProvider = new FlavorProviderImp(); private final ServiceLoader mApplicationList = ServiceLoader.load(IApplication.class, this.getClass().getClassLoader()); diff --git a/feature/floating-window/src/demo/java/com/gh/gamecenter/feedback/provider/AppProviderImpl.kt b/feature/floating-window/src/demo/java/com/gh/gamecenter/feedback/provider/AppProviderImpl.kt index 9d3c413658..e0112c2728 100644 --- a/feature/floating-window/src/demo/java/com/gh/gamecenter/feedback/provider/AppProviderImpl.kt +++ b/feature/floating-window/src/demo/java/com/gh/gamecenter/feedback/provider/AppProviderImpl.kt @@ -101,4 +101,7 @@ class AppProviderImpl : IAppProvider { return true } + override fun setSkippingThirdParty(isSkippingThirdParty: Boolean) { + // do nothing + } } \ No newline at end of file diff --git a/feature/new_feedback/src/feedback/java/com/gh/gamecenter/feedback/provider/AppProviderImpl.kt b/feature/new_feedback/src/feedback/java/com/gh/gamecenter/feedback/provider/AppProviderImpl.kt index 096f67e426..99028c0884 100644 --- a/feature/new_feedback/src/feedback/java/com/gh/gamecenter/feedback/provider/AppProviderImpl.kt +++ b/feature/new_feedback/src/feedback/java/com/gh/gamecenter/feedback/provider/AppProviderImpl.kt @@ -101,4 +101,7 @@ class AppProviderImpl : IAppProvider { return false } + override fun setSkippingThirdParty(isSkippingThirdParty: Boolean) { + // do nothing + } } \ No newline at end of file diff --git a/feature/pkg/src/pkg/java/com/gh/gamecenter/pkg/provider/AppProviderImpl.kt b/feature/pkg/src/pkg/java/com/gh/gamecenter/pkg/provider/AppProviderImpl.kt index 7be9a80bb7..0b1049a32c 100644 --- a/feature/pkg/src/pkg/java/com/gh/gamecenter/pkg/provider/AppProviderImpl.kt +++ b/feature/pkg/src/pkg/java/com/gh/gamecenter/pkg/provider/AppProviderImpl.kt @@ -100,4 +100,8 @@ class AppProviderImpl : IAppProvider { override fun isUserAcceptPrivacyPolicy(context: Context): Boolean { return true } + + override fun setSkippingThirdParty(isSkippingThirdParty: Boolean) { + // do nothing + } } \ No newline at end of file diff --git a/feature/vpn/src/vpn/java/com/gh/gamecenter/vpn/provider/AppProviderImpl.kt b/feature/vpn/src/vpn/java/com/gh/gamecenter/vpn/provider/AppProviderImpl.kt index a389834124..5e17ce3509 100644 --- a/feature/vpn/src/vpn/java/com/gh/gamecenter/vpn/provider/AppProviderImpl.kt +++ b/feature/vpn/src/vpn/java/com/gh/gamecenter/vpn/provider/AppProviderImpl.kt @@ -100,4 +100,8 @@ class AppProviderImpl : IAppProvider { override fun getIsBrandNewInstall(): Boolean { return false } + + override fun setSkippingThirdParty(isSkippingThirdParty: Boolean) { + // do nothing + } } \ No newline at end of file diff --git a/module_common/src/main/java/com/gh/gamecenter/common/utils/ShareUtils.java b/module_common/src/main/java/com/gh/gamecenter/common/utils/ShareUtils.java index bd3404dc58..b0a699a8d2 100644 --- a/module_common/src/main/java/com/gh/gamecenter/common/utils/ShareUtils.java +++ b/module_common/src/main/java/com/gh/gamecenter/common/utils/ShareUtils.java @@ -33,6 +33,7 @@ import com.gh.gamecenter.common.constant.RouteConsts; import com.gh.gamecenter.common.entity.AdditionalParamsEntity; import com.gh.gamecenter.common.entity.ShareEntity; import com.gh.gamecenter.common.eventbus.EBShare; +import com.gh.gamecenter.core.provider.IAppProvider; import com.gh.gamecenter.core.provider.IConfigProvider; import com.gh.gamecenter.core.provider.IPackageUtilsProvider; import com.gh.gamecenter.core.utils.DisplayUtils; @@ -144,9 +145,15 @@ public class ShareUtils { private Context mContext; // application context //QQ或者QQ空间分享回调处理 + + private IAppProvider mAppProvider = (IAppProvider) ARouter.getInstance().build(RouteConsts.provider.app).navigation(); + public IUiListener QqShareListener = new IUiListener() { @Override public void onComplete(Object o) { + if (mAppProvider != null) { + mAppProvider.setSkippingThirdParty(false); + } Utils.toast(mContext, R.string.share_success_hint); LogUtils.uploadShareResult(shareType, ShareUtils.shareEntrance.getName(), "success", ShareUtils.shareEntity.getShareUrl(), ShareUtils.shareEntity.getShareTitle(), ShareUtils.shareEntity.getSummary(), ShareUtils.resourceId); @@ -181,6 +188,9 @@ public class ShareUtils { @Override public void onError(UiError uiError) { + if (mAppProvider != null) { + mAppProvider.setSkippingThirdParty(false); + } Utils.toast(mContext, R.string.share_fail_hint); LogUtils.uploadShareResult(shareType, ShareUtils.shareEntrance.getName(), "fail", ShareUtils.shareEntity.getShareUrl(), ShareUtils.shareEntity.getShareTitle(), ShareUtils.shareEntity.getSummary(), ShareUtils.resourceId); @@ -193,6 +203,9 @@ public class ShareUtils { @Override public void onCancel() { + if (mAppProvider != null) { + mAppProvider.setSkippingThirdParty(false); + } Utils.toast(mContext, R.string.share_cancel_hint); LogUtils.uploadShareResult(shareType, ShareUtils.shareEntrance.getName(), "cancel", ShareUtils.shareEntity.getShareUrl(), ShareUtils.shareEntity.getShareTitle(), ShareUtils.shareEntity.getSummary(), ShareUtils.resourceId); @@ -484,6 +497,9 @@ public class ShareUtils { Activity activity = mActivity.get(); if (activity != null) { + if (mAppProvider != null && isQQClientAvailable(mContext)) { + mAppProvider.setSkippingThirdParty(true); + } mTencent.shareToQQ(activity, params, QqShareListener); } @@ -504,6 +520,10 @@ public class ShareUtils { return; } + if (mAppProvider != null) { + mAppProvider.setSkippingThirdParty(true); + } + WXWebpageObject webpage = new WXWebpageObject(); WXMediaMessage msg = new WXMediaMessage(webpage); webpage.webpageUrl = shareUrl; @@ -651,6 +671,9 @@ public class ShareUtils { Activity activity = mActivity.get(); if (activity != null) { + if (mAppProvider != null && isQQClientAvailable(mContext)) { + mAppProvider.setSkippingThirdParty(true); + } mTencent.shareToQzone(activity, params, QqShareListener); } @@ -671,6 +694,10 @@ public class ShareUtils { return; } + if (mAppProvider != null) { + mAppProvider.setSkippingThirdParty(true); + } + WXWebpageObject webpage = new WXWebpageObject(); WXMediaMessage msg = new WXMediaMessage(webpage); @@ -736,6 +763,10 @@ public class ShareUtils { //短信分享 public void shortMessageShare() { + if (mAppProvider != null) { + mAppProvider.setSkippingThirdParty(true); + } + mShareType = ShareType.weibo; shareType = "sms"; LogUtils.uploadShareType(shareType, shareEntrance.getName(), shareUrl, mTitle, mSummary, resourceId); @@ -773,6 +804,9 @@ public class ShareUtils { Intent sendIntent = IntentUtils.getSMSIntent(smsBody); mContext.startActivity(sendIntent); } catch (Exception e) { + if (mAppProvider != null) { + mAppProvider.setSkippingThirdParty(false); + } Utils.toast(mContext, "设备短信服务异常,分享失败"); e.printStackTrace(); } diff --git a/module_core/src/main/java/com/gh/gamecenter/core/provider/IAppProvider.kt b/module_core/src/main/java/com/gh/gamecenter/core/provider/IAppProvider.kt index 86add93ca2..07b6bd6a0f 100644 --- a/module_core/src/main/java/com/gh/gamecenter/core/provider/IAppProvider.kt +++ b/module_core/src/main/java/com/gh/gamecenter/core/provider/IAppProvider.kt @@ -37,4 +37,6 @@ interface IAppProvider : IProvider { fun getFlavor(): String fun getIsBrandNewInstall(): Boolean + + fun setSkippingThirdParty(isSkippingThirdParty: Boolean) } \ No newline at end of file diff --git a/module_feedback/src/feedback/java/com/gh/gamecenter/feedback/provider/AppProviderImpl.kt b/module_feedback/src/feedback/java/com/gh/gamecenter/feedback/provider/AppProviderImpl.kt index b2404aec38..171fa7a980 100644 --- a/module_feedback/src/feedback/java/com/gh/gamecenter/feedback/provider/AppProviderImpl.kt +++ b/module_feedback/src/feedback/java/com/gh/gamecenter/feedback/provider/AppProviderImpl.kt @@ -96,4 +96,7 @@ class AppProviderImpl : IAppProvider { return false } + override fun setSkippingThirdParty(isSkippingThirdParty: Boolean) { + // do nothing + } } \ No newline at end of file diff --git a/module_login/src/main/java/com/gh/gamecenter/login/utils/LoginHelper.kt b/module_login/src/main/java/com/gh/gamecenter/login/utils/LoginHelper.kt index 97d8a0f179..582837d386 100644 --- a/module_login/src/main/java/com/gh/gamecenter/login/utils/LoginHelper.kt +++ b/module_login/src/main/java/com/gh/gamecenter/login/utils/LoginHelper.kt @@ -5,11 +5,12 @@ import android.content.Intent import com.alibaba.android.arouter.launcher.ARouter import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.utils.tryWithDefaultCatch +import com.gh.gamecenter.core.provider.IAppProvider import com.gh.gamecenter.core.provider.IConfigProvider -import com.lightgame.utils.RuntimeUtils import com.gh.gamecenter.login.HaloApp import com.gh.gamecenter.login.R import com.gh.gamecenter.login.user.LoginTag +import com.lightgame.utils.RuntimeUtils import com.lightgame.utils.Utils import com.sina.weibo.sdk.auth.AuthInfo import com.sina.weibo.sdk.auth.Oauth2AccessToken @@ -43,6 +44,7 @@ object LoginHelper { private var mAccessToken: Oauth2AccessToken? = null // weibo private var mLoginCallback: LoginCallback? = null + private val mAppProvider = ARouter.getInstance().build(RouteConsts.provider.app).navigation() as? IAppProvider init { val context = HaloApp.getInstance().applicationContext @@ -54,6 +56,7 @@ object LoginHelper { mQqLoginListener = object : IUiListener { override fun onComplete(o: Any?) { + mAppProvider?.setSkippingThirdParty(false) Utils.log("QQ 登录成功") if (o is JSONObject) { val s = o.toString() @@ -86,6 +89,7 @@ object LoginHelper { } override fun onCancel() { + mAppProvider?.setSkippingThirdParty(false) mLoginCallback?.onLoginFailure(LoginTag.qq, "登录取消") Utils.log("QQ 登录取消") } @@ -95,6 +99,7 @@ object LoginHelper { } override fun onError(p0: UiError?) { + mAppProvider?.setSkippingThirdParty(false) mLoginCallback?.onLoginFailure(LoginTag.qq, "登录失败") Utils.log("QQ 登录失败") } @@ -142,6 +147,7 @@ object LoginHelper { mLoginCallback = loginCallback if (mTencent?.isSessionValid == false) { Utils.log("QQLogin") + mAppProvider?.setSkippingThirdParty(true) mTencent?.login(activity, "all", mQqLoginListener) } } @@ -156,6 +162,7 @@ object LoginHelper { // 微信登录 @JvmStatic fun loginWithWechat(loginCallback: LoginCallback) { + mAppProvider?.setSkippingThirdParty(true) mLoginCallback = loginCallback val config = ARouter.getInstance().build(RouteConsts.provider.config).navigation() as? IConfigProvider val register = mIWXAPI.registerApp(config?.getWechatAppId()) @@ -166,6 +173,7 @@ object LoginHelper { val b = mIWXAPI.sendReq(req) Utils.log("微信注册状态::$register\n 发送状态::$b") if (!register || !b) { + mAppProvider?.setSkippingThirdParty(false) loginCallback.onLoginFailure(LoginTag.wechat, "请检查是否安装微信客户端") Utils.toast(HaloApp.getInstance(), "请检查是否安装微信客户端") } @@ -174,6 +182,7 @@ object LoginHelper { // 微博登录 @JvmStatic fun loginWithWeibo(loginCallback: LoginCallback, context: Activity) { + mAppProvider?.setSkippingThirdParty(true) mWBAPI = WBAPIFactory.createWBAPI(context) //初始化微博分享 mLoginCallback = loginCallback val config = ARouter.getInstance().build(RouteConsts.provider.config).navigation() as? IConfigProvider @@ -183,6 +192,7 @@ object LoginHelper { ) mWBAPI.authorizeClient(context, object : WbAuthListener { override fun onComplete(token: Oauth2AccessToken?) { + mAppProvider?.setSkippingThirdParty(false) token?.let { RuntimeUtils.getInstance().runOnUiThread { mAccessToken = token @@ -210,10 +220,12 @@ object LoginHelper { } override fun onError(error: com.sina.weibo.sdk.common.UiError?) { + mAppProvider?.setSkippingThirdParty(false) mLoginCallback?.onLoginFailure(LoginTag.weibo, "微博登录需要客户端支持,请先安装微博") } override fun onCancel() { + mAppProvider?.setSkippingThirdParty(false) mLoginCallback?.onLoginFailure(LoginTag.weibo, "取消授权") } }) diff --git a/module_login/src/main/java/com/gh/gamecenter/wxapi/WXEntryActivity.java b/module_login/src/main/java/com/gh/gamecenter/wxapi/WXEntryActivity.java index a27a496fb7..de50736b50 100644 --- a/module_login/src/main/java/com/gh/gamecenter/wxapi/WXEntryActivity.java +++ b/module_login/src/main/java/com/gh/gamecenter/wxapi/WXEntryActivity.java @@ -7,16 +7,17 @@ import android.text.TextUtils; import android.widget.TextView; import com.alibaba.android.arouter.launcher.ARouter; -import com.gh.gamecenter.common.utils.SensorsBridge; -import com.gh.gamecenter.common.utils.WXAPIProxyFactory; -import com.gh.gamecenter.core.provider.IQGameProvider; -import com.gh.gamecenter.login.utils.LoginHelper; import com.gh.gamecenter.common.constant.RouteConsts; import com.gh.gamecenter.common.eventbus.EBShare; +import com.gh.gamecenter.common.utils.SensorsBridge; import com.gh.gamecenter.common.utils.ShareUtils; +import com.gh.gamecenter.common.utils.WXAPIProxyFactory; +import com.gh.gamecenter.core.provider.IAppProvider; import com.gh.gamecenter.core.provider.IConfigProvider; import com.gh.gamecenter.core.provider.IDefaultUrlHandlerProvider; +import com.gh.gamecenter.core.provider.IQGameProvider; import com.gh.gamecenter.login.R; +import com.gh.gamecenter.login.utils.LoginHelper; import com.lightgame.utils.Utils; import com.tencent.mm.opensdk.constants.ConstantsAPI; import com.tencent.mm.opensdk.modelbase.BaseReq; @@ -214,4 +215,13 @@ public class WXEntryActivity extends Activity implements IWXAPIEventHandler, WeC this.finish(); overridePendingTransition(0, 0);//禁止退出Activity 动画 } + + @Override + protected void onDestroy() { + super.onDestroy(); + IAppProvider appProvider = (IAppProvider) ARouter.getInstance().build(RouteConsts.provider.app).navigation(); + if (appProvider != null) { + appProvider.setSkippingThirdParty(false); + } + } } \ No newline at end of file diff --git a/module_message/src/message/java/com/gh/gamecenter/message/provider/AppProviderImpl.kt b/module_message/src/message/java/com/gh/gamecenter/message/provider/AppProviderImpl.kt index 79cf6c79d1..79a4e3c3cb 100644 --- a/module_message/src/message/java/com/gh/gamecenter/message/provider/AppProviderImpl.kt +++ b/module_message/src/message/java/com/gh/gamecenter/message/provider/AppProviderImpl.kt @@ -101,4 +101,7 @@ class AppProviderImpl : IAppProvider { return false } + override fun setSkippingThirdParty(isSkippingThirdParty: Boolean) { + // do nothing + } } \ No newline at end of file diff --git a/module_setting/src/setting/java/com/gh/gamecenter/setting/provider/AppProviderImpl.kt b/module_setting/src/setting/java/com/gh/gamecenter/setting/provider/AppProviderImpl.kt index 62e4257887..d482254cb8 100644 --- a/module_setting/src/setting/java/com/gh/gamecenter/setting/provider/AppProviderImpl.kt +++ b/module_setting/src/setting/java/com/gh/gamecenter/setting/provider/AppProviderImpl.kt @@ -101,4 +101,8 @@ class AppProviderImpl : IAppProvider { override fun getIsBrandNewInstall(): Boolean { return false } + + override fun setSkippingThirdParty(isSkippingThirdParty: Boolean) { + // do nothing + } } \ No newline at end of file diff --git a/module_setting_compose/src/setting/java/com/gh/gamecenter/setting/compose/provider/AppProviderImpl.kt b/module_setting_compose/src/setting/java/com/gh/gamecenter/setting/compose/provider/AppProviderImpl.kt index 62ceeb8e22..826b57d9b7 100644 --- a/module_setting_compose/src/setting/java/com/gh/gamecenter/setting/compose/provider/AppProviderImpl.kt +++ b/module_setting_compose/src/setting/java/com/gh/gamecenter/setting/compose/provider/AppProviderImpl.kt @@ -95,4 +95,8 @@ class AppProviderImpl : IAppProvider { override fun getIsBrandNewInstall(): Boolean { return false } + + override fun setSkippingThirdParty(isSkippingThirdParty: Boolean) { + // do nothing + } } \ No newline at end of file