import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.viewbinding.ViewBinding;
import com.fjasmin.testapplication.R;
import com.lxj.xpopup.XPopup;
import com.lxj.xpopup.impl.LoadingPopupView;
import com.tbruyelle.rxpermissions3.RxPermissions;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import io.reactivex.rxjava3.disposables.CompositeDisposable;
public abstract class BaseActivity<T extends ViewBinding> extends AppCompatActivity implements Toolbar.OnMenuItemClickListener {
private static final String TAG = BaseActivity.class.getName();
protected Toolbar toolbar = null;
protected TextView toolbarTitle = null;
protected CompositeDisposable compositeDisposable = new CompositeDisposable();
protected T viewBinding;
protected RxPermissions rxPermissions;
private LoadingPopupView panelOnDialog = null;
protected boolean hasToolbar() {
return true;
}
protected int navigationIcon() {
return R.mipmap.icon_goback;
}
protected String getToolbarTitle() {
return getString(R.string.app_name);
}
protected void onImmersionBar() {
//ImmersionBar.with(this).statusBarColor(R.color.stylePrimaryColor).navigationBarColor(R.color.black).statusBarDarkFont(false).fitsSystemWindows(true).init();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
panelOnDialog = new XPopup
.Builder(this)
.isDarkTheme(false)
.dismissOnBackPressed(false)
.dismissOnTouchOutside(false)
.asLoading("加载中");
rxPermissions = new RxPermissions(this);
ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass();
Class cls = (Class) type.getActualTypeArguments()[0];
try {
Method inflate = cls.getDeclaredMethod("inflate", LayoutInflater.class);
viewBinding = (T) inflate.invoke(null, getLayoutInflater());
setContentView(viewBinding.getRoot());
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
Log.e(TAG, e.toString());
}
if (hasToolbar()) {
toolbar = findViewById(R.id.toolbar);
toolbar.setOnMenuItemClickListener(this);
toolbarTitle = findViewById(R.id.toolbar_title);
toolbarTitle.setText(getToolbarTitle());
setSupportActionBar(toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSupportActionBar().setDisplayShowTitleEnabled(false);
}
toolbar.setNavigationOnClickListener(v -> onBackPressed());
toolbar.setNavigationIcon(null);
if (navigationIcon() > 0) {
toolbar.setNavigationIcon(navigationIcon());
}
}
onImmersionBar();
}
@Override
public void finish() {
super.finish();
if (compositeDisposable != null){
compositeDisposable.clear();
compositeDisposable = null;
}
}
@Override
public void onConfigurationChanged( Configuration newConfig) {
if (newConfig.fontScale != -1)
getResources();
super.onConfigurationChanged(newConfig);
}
@Override
public Resources getResources() {
Resources resources = super.getResources();
if (resources.getConfiguration().fontScale != 1){
Configuration newConfig = new Configuration();
newConfig.setToDefaults();
resources.updateConfiguration(newConfig,resources.getDisplayMetrics());
}
return resources;
}
@Override
public boolean onMenuItemClick(MenuItem item) {
return false;
}
public final void setToolbarTitle(String toolbarTitle) {
if (this.toolbarTitle != null) {
this.toolbarTitle.setText(toolbarTitle);
}
}
public void setToolbarTitle(@StringRes int resId) {
if (this.toolbarTitle != null){
this.toolbarTitle.setText(resId);
}
}
/**
* 开启加载进度条
*
* @param msg 进图条文本
*/
public void startLoadingDialog(String msg) {
if(panelOnDialog != null && !panelOnDialog.isShow()) {
panelOnDialog.show();
}
}
/**
* 开启加载进度条
*/
public void startLoadingDialog() {
if(panelOnDialog != null && !panelOnDialog.isShow()) {
panelOnDialog.show();
}
}
/**
* 关闭加载进度条
*/
public void stopLoadingDialog() {
if(panelOnDialog != null) {
panelOnDialog.dismiss();
}
}
public void showToast(CharSequence text) {
//ToastUtils.showShortToast(this, text);
}
public void showToast(@StringRes int resId) {
//ToastUtils.showShortToast(this, getString(resId));
}
public void showLongToast(CharSequence text) {
//ToastUtils.showLongToast(this, text);
}
}
网友评论