123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- package com.edufound.reader.base;
- import android.animation.Animator;
- import android.animation.AnimatorListenerAdapter;
- import android.animation.AnimatorSet;
- import android.animation.ObjectAnimator;
- import android.annotation.SuppressLint;
- import android.app.Activity;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.os.Build;
- import android.os.Bundle;
- import android.util.DisplayMetrics;
- import android.view.Gravity;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.view.WindowManager;
- import android.view.animation.LinearInterpolator;
- import android.widget.FrameLayout;
- import com.edufound.reader.R;
- import com.edufound.reader.annotation.BindView;
- import com.edufound.reader.application.EApplication;
- import com.edufound.reader.receiver.HomeKeyEventReceiver;
- import com.edufound.reader.receiver.NetworkChangeReceiver;
- import com.edufound.reader.util.Consts;
- import com.edufound.reader.util.EfunboxUtil;
- import com.edufound.reader.util.LiuHaiScreenUtil;
- import com.edufound.reader.util.PermissionsUtil;
- import com.google.gson.Gson;
- import com.jakewharton.rxbinding4.view.RxView;
- import java.lang.reflect.Field;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- import java.util.concurrent.TimeUnit;
- import androidx.appcompat.app.AppCompatActivity;
- import io.reactivex.rxjava3.annotations.Nullable;
- import io.reactivex.rxjava3.disposables.CompositeDisposable;
- import io.reactivex.rxjava3.disposables.Disposable;
- import io.reactivex.rxjava3.functions.Consumer;
- public abstract class BaseActivity extends AppCompatActivity {
- public CompositeDisposable mCompositeDisposable;
- //按home键的receiver
- HomeKeyEventReceiver mHomeReceiver;
- //登录广播action
- private final String LOGIN_SUCCESS_ACTION = "efunbox.login.success";
- //Gson
- Gson mGson;
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- // EfunboxUtil.setCustomDensity(this, Consts.getmApplicAtion());
- EApplication.mActivityList.add(this);
- EfunboxUtil.initDesignSize(this);
- setContentView(this.getLayoutId());
- initBase();
- bindViews(this);
- initView();
- }
- void initBase() {
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
- LiuHaiScreenUtil.openFullScreenModel(this);
- }
- mGson = new Gson();
- //获取录音权限
- PermissionsUtil.verifyAudioPermissions(this);
- if (Consts.getScreenSize() == null) {
- DisplayMetrics outMetrics = new DisplayMetrics();
- getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
- int widthPixels = outMetrics.widthPixels;
- int heightPixels = outMetrics.heightPixels;
- int arr[] = {widthPixels, heightPixels};
- Consts.setScreenSize(arr);
- }
- mCompositeDisposable = new CompositeDisposable();
- mHomeReceiver = new HomeKeyEventReceiver();
- //注册home广播
- registerReceiver(mHomeReceiver, new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
- // 注册网络广播
- NetworkChangeReceiver.registerReceiver(this);
- NetworkChangeReceiver.registerObserver(NetStateChangeObserver);
- //注册登录广播
- registerReceiver(loginReceiver, new IntentFilter(LOGIN_SUCCESS_ACTION));
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- clearDisposable();
- unregisterReceiver(mHomeReceiver);
- NetworkChangeReceiver.unRegisterReceiver(this);
- }
- /**
- * 设置布局
- *
- * @return
- */
- public abstract int getLayoutId();
- /**
- * 初始化视图
- */
- public abstract void initView();
- public static void bindViews(Activity activity) {
- Class<? extends Activity> activityClass = activity.getClass();//获取activity的class
- Field[] fields = activityClass.getDeclaredFields();//获取activity的字段
- //遍历所有的字段
- for (Field field : fields) {
- //获取该字段的注解
- BindView bindView = field.getAnnotation(BindView.class);
- //!=null 说明该字段有注解并且是指定的注解
- if (bindView != null) {
- //获取到注解总传入的数值value
- int viewId = bindView.id();
- if (viewId != -1) {
- try {
- //获取到activity中findViewById的方法
- Method findViewByIdMethod = activityClass.getMethod("findViewById", int.class);
- try {
- //执行findViewById方法
- Object resView = findViewByIdMethod.invoke(activity, viewId);
- //允许通过反射访问私有变量
- field.setAccessible(true);
- //把字段的值设置该view的实例
- field.set(activity, resView);
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
- /**
- * 添加订阅
- */
- public void addDisposable(Disposable mDisposable) {
- if (mCompositeDisposable == null) {
- mCompositeDisposable = new CompositeDisposable();
- }
- mCompositeDisposable.add(mDisposable);
- }
- /**
- * 取消所有订阅
- */
- public void clearDisposable() {
- if (mCompositeDisposable != null) {
- mCompositeDisposable.clear();
- }
- }
- @SuppressLint("AutoDispose")
- public void addUiClickListener(View view, Consumer onNext) {
- addDisposable(RxView.clicks(view).throttleFirst(2, TimeUnit.SECONDS).subscribe(onNext));
- }
- public abstract void onGetDisconnect();
- public abstract void onGetMobileConnect();
- public abstract void onGetWifiConnect();
- NetworkChangeReceiver.NetStateChangeObserver NetStateChangeObserver = new NetworkChangeReceiver.NetStateChangeObserver() {
- @Override
- public void onDisconnect() {
- //断网了
- onGetDisconnect();
- }
- @Override
- public void onMobileConnect() {
- //有网了(移动网络)
- onGetMobileConnect();
- }
- @Override
- public void onWifiConnect() {
- //有网了(wifi)
- onGetWifiConnect();
- }
- };
- protected void onLoginSuccess() {
- }
- BroadcastReceiver loginReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- onLoginSuccess();
- }
- };
- public ViewGroup getRootView() {
- return findViewById(android.R.id.content);
- }
- public void showFollowCountAnim() {
- View mFollowView = LayoutInflater.from(this).inflate(R.layout.anim_getfollow, null);
- FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
- params.gravity = Gravity.CENTER;
- mFollowView.setLayoutParams(params);
- ObjectAnimator mRotationImgAnim = ObjectAnimator.ofFloat(mFollowView, "translationY", 0, -150);
- mRotationImgAnim.setDuration(1500);
- LinearInterpolator interpolator = new LinearInterpolator();
- mRotationImgAnim.setInterpolator(interpolator); //设置匀速旋转,不卡顿 icon_anim.start();
- ObjectAnimator alphaAnim = ObjectAnimator.ofFloat(mFollowView, "alpha", 1f, 0f);
- alphaAnim.setDuration(1500);
- getRootView().addView(mFollowView);
- AnimatorSet animatorSet = new AnimatorSet();
- animatorSet.play(mRotationImgAnim).with(alphaAnim);
- animatorSet.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- super.onAnimationEnd(animation);
- getRootView().removeView(mFollowView);
- }
- });
- animatorSet.start();
- //
- }
- public Gson getGson() {
- return mGson;
- }
- public void toNextActivity(Class clazz) {
- Intent intent = new Intent(this, clazz);
- startActivity(intent);
- }
- public void toNextActivity(Class clazz, Bundle bundle) {
- Intent intent = new Intent(this, clazz);
- intent.putExtra("params_bundle", bundle);
- startActivity(intent);
- }
- public void toNextActivityForResult(Class clazz, Bundle bundle, int resultCode) {
- Intent intent = new Intent(this, clazz);
- intent.putExtra("params_bundle", bundle);
- startActivityForResult(intent, resultCode);
- }
- }
|