328 lines
12 KiB
Java
328 lines
12 KiB
Java
package com.gh.base;
|
||
|
||
import android.content.Intent;
|
||
import android.content.res.Configuration;
|
||
import android.content.res.Resources;
|
||
import android.graphics.Color;
|
||
import android.os.Build;
|
||
import android.os.Bundle;
|
||
import android.os.Handler;
|
||
import android.os.Message;
|
||
import android.text.TextUtils;
|
||
import android.util.TypedValue;
|
||
import android.view.Gravity;
|
||
import android.view.View;
|
||
import android.view.Window;
|
||
import android.view.WindowManager;
|
||
import android.widget.LinearLayout;
|
||
import android.widget.RelativeLayout;
|
||
import android.widget.TextView;
|
||
|
||
import com.gh.base.fragment.BaseFragment;
|
||
import com.gh.common.constant.Constants;
|
||
import com.gh.common.util.DialogUtils;
|
||
import com.gh.common.util.DisplayUtils;
|
||
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.core.content.ContextCompat;
|
||
import androidx.fragment.app.Fragment;
|
||
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)
|
||
* <p>
|
||
* 需要工具栏的页面请继承{@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<BaseActivity> 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);
|
||
if (useEventBus()) EventBus.getDefault().register(this);
|
||
if (useButterKnife()) ButterKnife.bind(this);
|
||
mEntrance = getIntent().getStringExtra(KEY_ENTRANCE);
|
||
if (TextUtils.isEmpty(mEntrance)) {
|
||
mEntrance = Constants.ENTRANCE_UNKNOWN;
|
||
}
|
||
|
||
if (BuildConfig.DEBUG) {
|
||
Utils.log("ACTIVITY_ENTRANCE -> " + mEntrance);
|
||
}
|
||
}
|
||
|
||
@SuppressWarnings("ConstantConditions")
|
||
@Override
|
||
public void setContentView(View view) {
|
||
if (BuildConfig.DEBUG || BuildConfig.BUILD_TIME != 0) {
|
||
view = getRootViewWithEnvIndicator(view);
|
||
}
|
||
super.setContentView(view);
|
||
}
|
||
|
||
@Override
|
||
protected void onDestroy() {
|
||
if (useEventBus()) 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.ShareEntrance shareEntrance, String id) {
|
||
ShareUtils.getInstance(this).showShareWindows(this,
|
||
getWindow().getDecorView(),
|
||
url,
|
||
icon,
|
||
shareTitle,
|
||
shareSummary,
|
||
shareEntrance, id);
|
||
if (shareEntrance == ShareUtils.ShareEntrance.game || shareEntrance == ShareUtils.ShareEntrance.plugin) {
|
||
MtaHelper.onEvent("内容分享", "内容分享", shareTitle + shareSummary);
|
||
} else {
|
||
MtaHelper.onEvent("内容分享", "内容分享", shareTitle);
|
||
}
|
||
}
|
||
|
||
private View getRootViewWithEnvIndicator(View view) {
|
||
RelativeLayout screenRootView = new RelativeLayout(this);
|
||
screenRootView.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
|
||
|
||
LinearLayout ll = new LinearLayout(this);
|
||
TextView tv = new TextView(this);
|
||
String envText = "正式环境";
|
||
if (BuildConfig.FLAVOR.equals("internal")) {
|
||
envText = "测试环境";
|
||
}
|
||
tv.setText(envText);
|
||
tv.setGravity(Gravity.CENTER);
|
||
tv.setTextColor(Color.WHITE);
|
||
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 13);
|
||
tv.setBackground(ContextCompat.getDrawable(this, R.color.red));
|
||
tv.measure(0, 0);
|
||
tv.setAlpha(0.15F);
|
||
int height = tv.getMeasuredHeight();
|
||
int width = tv.getMeasuredWidth();
|
||
tv.setPadding(DisplayUtils.dip2px(20), 0, DisplayUtils.dip2px(20), 0);
|
||
ll.setTranslationX(DisplayUtils.dip2px(20));
|
||
ll.setRotation(45);
|
||
ll.addView(tv);
|
||
ll.setPadding(0, (width - height) / 2, 0, (width - height) / 2);
|
||
|
||
screenRootView.addView(view);
|
||
screenRootView.addView(ll);
|
||
|
||
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) ll.getLayoutParams();
|
||
lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
|
||
view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
|
||
return screenRootView;
|
||
}
|
||
|
||
@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();
|
||
for (Fragment fragment : getSupportFragmentManager().getFragments()) {
|
||
if (fragment.isAdded() && fragment instanceof BaseFragment) {
|
||
((BaseFragment) fragment).onParentActivityFinish();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
@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<String> perms) {
|
||
|
||
}
|
||
|
||
@Override
|
||
public void onPermissionsGranted(int requestCode, List<String> 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, ")");
|
||
}
|
||
|
||
protected boolean useEventBus() {
|
||
return true;
|
||
}
|
||
|
||
protected boolean useButterKnife() {
|
||
return true;
|
||
}
|
||
|
||
@Override
|
||
public Resources getResources() {
|
||
Resources resources = super.getResources();
|
||
if (resources.getConfiguration().fontScale != 1.0f) {
|
||
Configuration configuration = resources.getConfiguration();
|
||
configuration.fontScale = 1.0f;
|
||
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
|
||
}
|
||
return resources;
|
||
}
|
||
}
|