package com.gh.base; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.TextUtils; import android.view.Window; import android.view.WindowManager; import com.gh.common.constant.Constants; import com.gh.common.util.DialogUtils; import com.gh.common.util.MtaHelper; import com.gh.common.util.PackageUtils; import com.gh.common.util.RunningUtils; import com.gh.common.util.ShareUtils; import com.gh.common.util.StringUtils; import com.gh.gamecenter.BuildConfig; import com.gh.gamecenter.LoginActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.eventbus.EBShowDialog; import com.lightgame.BaseAppCompatActivity; import com.lightgame.download.FileUtils; import com.lightgame.utils.Utils; import com.tencent.tauth.Tencent; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import org.json.JSONObject; import java.lang.ref.WeakReference; import java.util.List; import androidx.annotation.NonNull; import androidx.lifecycle.Lifecycle; import butterknife.ButterKnife; import pub.devrel.easypermissions.EasyPermissions; import static com.gh.common.util.EntranceUtils.KEY_ENTRANCE; /** * 只提供基础的服务(EventBus/ButterKnife/Share/GlobalDialog/Permissions) *

* 需要工具栏的页面请继承{@link ToolBarActivity} */ public abstract class BaseActivity extends BaseAppCompatActivity implements EasyPermissions.PermissionCallbacks { // global dialog key public final static String DOWNLOAD_HIJACK = "hijack"; public final static String LOGIN_EXCEPTION = "loginException"; public final static String PLUGGABLE = "plugin"; @NonNull protected String mEntrance; private boolean mIsExistLogoutDialog; protected final Handler mBaseHandler = new BaseHandler(this); protected static class BaseHandler extends Handler { private final WeakReference mActivityWeakReference; BaseHandler(BaseActivity activity) { mActivityWeakReference = new WeakReference<>(activity); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); BaseActivity activity = mActivityWeakReference.get(); if (activity != null) activity.handleMessage(msg); } } protected void handleMessage(Message msg) { } //接收QQ或者QQ空间分享回调 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == com.tencent.connect.common.Constants.REQUEST_QQ_SHARE || requestCode == com.tencent.connect.common.Constants.REQUEST_QZONE_SHARE) { Tencent.onActivityResultData(requestCode, resultCode, data, ShareUtils.getInstance(this).QqShareListener); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EventBus.getDefault().register(this); ButterKnife.bind(this); mEntrance = getIntent().getStringExtra(KEY_ENTRANCE); if (TextUtils.isEmpty(mEntrance)) { mEntrance = Constants.ENTRANCE_UNKNOWN; } if (BuildConfig.DEBUG) { Utils.log("ACTIVITY_ENTRANCE -> " + mEntrance); } } @Override protected void onDestroy() { EventBus.getDefault().unregister(this); mBaseHandler.removeCallbacksAndMessages(null); super.onDestroy(); } public void toast(String msg) { Utils.toast(this, msg); } public void toast(int msg) { toast(getString(msg)); } public void showShare(String url, String icon, String shareTitle, String shareSummary, ShareUtils.ShareType shareType) { ShareUtils.getInstance(this).showShareWindows(this, getWindow().getDecorView(), url, icon, shareTitle, shareSummary, shareType); if (shareType == ShareUtils.ShareType.game || shareType == ShareUtils.ShareType.plugin) { MtaHelper.onEvent("内容分享", "内容分享", shareTitle + shareSummary); } else { MtaHelper.onEvent("内容分享", "内容分享", shareTitle); } } @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(final EBShowDialog showDialog) { if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED) && this.getClass().getName().equals(RunningUtils.getTopActivity(this))) { if (DOWNLOAD_HIJACK.equals(showDialog.getType())) { DialogUtils.showQqSessionDialog(this);// 建议用户联系客服 } else if (PLUGGABLE.equals(showDialog.getType())) { DialogUtils.showPluginDialog(this, () -> { if (FileUtils.isEmptyFile(showDialog.getPath())) { toast(R.string.install_failure_hint); } else { startActivity(PackageUtils.getUninstallIntent(BaseActivity.this, showDialog.getPath())); } }); } else if (LOGIN_EXCEPTION.equals(showDialog.getType())) { if (mIsExistLogoutDialog) return; mIsExistLogoutDialog = true; try { JSONObject object = new JSONObject(showDialog.getPath()); JSONObject device = object.getJSONObject("device"); String model = device.getString("model"); DialogUtils.showAlertDialog(this, "你的账号已在另外一台设备登录" , StringUtils.buildString("(", model, ")") , "知道了", "重新登录" , null , () -> startActivity(LoginActivity.getIntent(BaseActivity.this, "你的账号已在另外一台设备登录多设备-重新登录")) ); mBaseHandler.postDelayed(() -> mIsExistLogoutDialog = false, 5000); } catch (Exception e) { e.printStackTrace(); } } } } @Override protected void onPause() { super.onPause(); if (isFinishing()) { onFinish(); } } @Override protected void onResume() { super.onResume(); } /** * 可凭借此回调确定当前 activity 已经执行了 finish() 处于 isFinishing 状态 * 可在后续进行 */ protected void onFinish() { } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); } @Override public void onPermissionsDenied(int requestCode, List perms) { } @Override public void onPermissionsGranted(int requestCode, List perms) { } protected void setStatusBarColor(int color) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.setStatusBarColor(color); } } /** * 提供当前 activity 的中文名 (不重载的话为类名) */ public String getActivityNameInChinese() { return getClass().getSimpleName(); } /** * @param entrance 上一个页面的链式入口名称 * @param path 当前页面名称 * @return 完整的链式入口名称 */ public static String mergeEntranceAndPath(String entrance, String path) { if (TextUtils.isEmpty(entrance) && TextUtils.isEmpty(path)) return ""; if (TextUtils.isEmpty(entrance) && !TextUtils.isEmpty(path)) { return StringUtils.buildString("(", path, ")"); } if (!TextUtils.isEmpty(entrance) && TextUtils.isEmpty(path)) { return entrance; } return StringUtils.buildString(entrance, "+(", path, ")"); } }