From fcdddf8b9b34f9930bec454b5fffe41c0e33ba3c Mon Sep 17 00:00:00 2001
From: Linjiajia <319408893@qq.com>
Date: 星期一, 24 四月 2023 21:17:05 +0800
Subject: [PATCH] 功能模块大部分

---
 app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java |  199 ++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 178 insertions(+), 21 deletions(-)

diff --git a/app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java b/app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java
index be3f169..51b3ab8 100644
--- a/app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java
+++ b/app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java
@@ -1,18 +1,31 @@
 package com.android.app_base.base.view;
 
 
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
 import android.os.Bundle;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.view.inputmethod.InputMethodManager;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.databinding.DataBindingUtil;
 import androidx.databinding.ViewDataBinding;
+import androidx.drawerlayout.widget.DrawerLayout;
 import androidx.lifecycle.Observer;
 import androidx.lifecycle.ViewModelProvider;
-import androidx.lifecycle.ViewModelStoreOwner;
 
+import com.android.app_base.action.TitleBarAction;
+import com.android.app_base.base.action.ClickAction;
 import com.android.app_base.base.viewmodel.BaseViewModel;
 import com.android.app_base.base.StateViewEnum;
+import com.blankj.utilcode.util.ToastUtils;
+import com.gyf.immersionbar.ImmersionBar;
+import com.hjq.bar.TitleBar;
 
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
@@ -20,28 +33,34 @@
 /**
  *  Activity鍩虹被,鎵�鏈夌殑 Activity 閮借缁ф壙姝ょ被
  */
-public abstract class BaseActivity<V extends ViewDataBinding,VM extends BaseViewModel> extends AppCompatActivity {
-    protected V binding;
+public abstract class BaseActivity<VDB extends ViewDataBinding,VM extends BaseViewModel> extends AppCompatActivity implements TitleBarAction, ClickAction {
+    protected VDB binding;
     protected VM viewModel;
     private int viewModelId;
-
+    /**
+     * 鏍囬鏍忓璞�
+     */
+    private TitleBar mTitleBar;
+    /**
+     * 鐘舵�佹爮娌夋蹈
+     */
+    private ImmersionBar mImmersionBar;
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        //缁戝畾 ViewDataBinding 鍜� ViewModel
-        initViewDataBindingAndViewModel();
-        //鍒濆鍖栫姸鎬佽鍥�
-        initStateView();
+        //Layout鍒濆鍖�
+        initLayout();
         //椤甸潰鍙傛暟鍒濆鍖栨柟娉�
         initParam();
         //椤甸潰view鍒濆鍖栨柟娉�
         initView();
-        //椤甸潰鏁版嵁鍒濆鍖栨柟娉�
-        initData();
         //椤甸潰浜嬩欢鐩戝惉鐨勬柟娉曪紝鐢ㄤ簬ViewModel灞傝浆鍒癡iew灞傜殑浜嬩欢娉ㄥ唽
         initLiveDataObserve();
+        //椤甸潰鏁版嵁鍒濆鍖栨柟娉�
+        initData();
     }
+
 
     @Override
     protected void onDestroy() {
@@ -54,28 +73,51 @@
         }
     }
 
+    /**
+     * 鍒濆鍖栧竷灞�
+     */
+    protected void initLayout(){
+        //缁戝畾 ViewDataBinding 鍜� ViewModel
+        initViewDataBindingAndViewModel();
+        //鍒濆鍖栫姸鎬佽鍥�
+        initStateView();
+        //鍒濆鍖栨矇娴稿紡鐘舵�佹爮鍜� titleBar
+        initStatusBar();
+        initSoftKeyboard();
+    }
 
     /**
      *  ViewDataBinding鍜� ViewModel鐨勮幏鍙栧強鐩稿叧缁戝畾
      */
-    private void initViewDataBindingAndViewModel() {
-        binding = DataBindingUtil.setContentView(this, getLayoutId());
+    protected void initViewDataBindingAndViewModel() {
+        if (getLayoutId() > 0) {
+            binding = initViewBinding();
+        }
         viewModelId = getVariableId();
         viewModel = initViewModel();
-        //鍏宠仈ViewModel
-        binding.setVariable(viewModelId, viewModel);
-        //鏀寔LiveData缁戝畾xml锛屾暟鎹敼鍙橈紝UI鑷姩浼氭洿鏂�
-        binding.setLifecycleOwner(this);
-        //璁¬iewModel鎷ユ湁View鐨勭敓鍛藉懆鏈熸劅搴�
-        getLifecycle().addObserver(viewModel);
-
+        if (binding != null){
+            //鍏宠仈ViewModel
+            if (viewModelId > 0){
+                binding.setVariable(viewModelId, viewModel);
+            }
+            //鏀寔LiveData缁戝畾xml锛屾暟鎹敼鍙橈紝UI鑷姩浼氭洿鏂�
+            binding.setLifecycleOwner(this);
+            //璁¬iewModel鎷ユ湁View鐨勭敓鍛藉懆鏈熸劅搴�
+            getLifecycle().addObserver(viewModel);
+        }
     }
 
+    /**
+     * 鍒濆鍖朧iewBinding
+     */
+    protected VDB initViewBinding() {
+        return DataBindingUtil.setContentView(this, getLayoutId());
+    }
     /**
      * 鍒濆鍖朧iewModel
      * @return 杩斿洖涓�涓猇iewModel
      */
-    private VM initViewModel() {
+    protected VM initViewModel() {
         Class<VM> vmClass;
         Type type = getClass().getGenericSuperclass();
         if (type instanceof ParameterizedType){
@@ -87,10 +129,11 @@
         return new ViewModelProvider(this, (ViewModelProvider.Factory) ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication())).get(vmClass);
     }
 
+
     /**
      * 瀵圭姸鎬佽鍥緇iveData杩涜瑙傚療鐩戝惉
      */
-    private void initStateView() {
+    protected void initStateView() {
         viewModel.getStateViewLiveData().observe(this, new Observer<StateViewEnum>() {
             @Override
             public void onChanged(StateViewEnum stateViewEnum) {
@@ -103,6 +146,9 @@
                         break;
                     case DATA_LOADING:
                         dataLoading();
+                        break;
+                    case DATA_FINISH:
+                        dataFinish();
                         break;
                     case DATA_ERROR:
                         dataError();
@@ -121,7 +167,16 @@
                 }
             }
         });
+        viewModel.getMessageLivaData().observe(this, new Observer<String>() {
+            @Override
+            public void onChanged(String message) {
+                ToastUtils.showShort(message);
+            }
+        });
     }
+
+
+
     /**
      * 缂虹渷椤电瓑鐘舵�佽鍥剧殑鏇存柊
      * 鏈夐渶姹傜殑锛屽湪瀛愮被閫夋嫨閲嶅啓
@@ -132,6 +187,8 @@
     }
     protected void dataLoading() {
     }
+    protected void dataFinish() {
+    }
     protected void dataError() {
     }
     protected void dataNull() {
@@ -139,6 +196,59 @@
     protected void netError() {
     }
     protected void hide() {
+    }
+
+    /**
+     * 鍒濆鍖栨矇娴稿紡鐘舵�佹爮
+     */
+    protected void initStatusBar(){
+        if (isStatusBarImmersionEnabled()) {
+            getImmersionBarConfig().init();
+            // 璁剧疆鏍囬鏍忔矇娴�()
+            if (getTitleBar() != null) {
+                ImmersionBar.setTitleBar(this, getTitleBar());
+                getTitleBar().setOnTitleBarListener(this);
+            }
+        }
+    }
+    /**
+     * 鏄惁浣跨敤娌夋蹈寮忕姸鎬佹爮,鍙互瀛愮被閲嶅啓鎸囧畾
+     */
+    protected boolean isStatusBarImmersionEnabled() {
+        return true;
+    }
+    /**
+     * 鑾峰彇鐘舵�佹爮娌夋蹈鐨勯厤缃璞�
+     */
+    @NonNull
+    public ImmersionBar getImmersionBarConfig() {
+        if (mImmersionBar == null) {
+            mImmersionBar = createStatusBarConfig();
+        }
+        return mImmersionBar;
+    }
+    /**
+     * 鍒涘缓鐘舵�佹爮娌夋蹈鐨勯厤缃璞�
+     */
+    @NonNull
+    protected ImmersionBar createStatusBarConfig() {
+        return ImmersionBar.with(this)
+                // 榛樿鐘舵�佹爮瀛椾綋棰滆壊涓洪粦鑹�
+                .statusBarDarkFont(isStatusBarDarkFont(),0.2f);//涓嶅啓榛樿涓轰寒鑹�
+    }
+    /**
+     * 鐘舵�佹爮瀛椾綋娣辫壊妯″紡
+     */
+    protected boolean isStatusBarDarkFont() {
+        return true;
+    }
+    @Override
+    @Nullable
+    public TitleBar getTitleBar() {
+        if (mTitleBar == null) {
+            mTitleBar = obtainTitleBar(findViewById(Window.ID_ANDROID_CONTENT));
+        }
+        return mTitleBar;
     }
 
     /**
@@ -174,4 +284,51 @@
      */
     public abstract void initLiveDataObserve();
 
+    @Override
+    public void finish() {
+        hideSoftKeyboard();
+        super.finish();
+    }
+
+    /**
+     * 闅愯棌杞敭鐩�
+     */
+    protected void hideSoftKeyboard() {
+        // 闅愯棌杞敭鐩橈紝閬垮厤杞敭鐩樺紩鍙戠殑鍐呭瓨娉勯湶
+        View view = getCurrentFocus();
+        if (view != null) {
+            InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+            if (manager != null && manager.isActive(view)) {
+                manager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
+                view.clearFocus();
+            }
+        }
+    }
+
+    /**
+     * 鍒濆鍖栬蒋閿洏
+     */
+    protected void initSoftKeyboard() {
+        // 鐐瑰嚮澶栭儴闅愯棌杞敭鐩橈紝鎻愬崌鐢ㄦ埛浣撻獙
+        getContentView().setOnClickListener(v -> hideSoftKeyboard());
+    }
+
+    public ViewGroup getContentView() {
+        return findViewById(Window.ID_ANDROID_CONTENT);
+    }
+
+    public Activity getSelfActivity() {
+        return this;
+    }
+
+    /**
+     * 濡傛灉褰撳墠鐨� Activity锛坰ingleTop 鍚姩妯″紡锛� 琚鐢ㄦ椂浼氬洖璋�
+     */
+    @Override
+    protected void onNewIntent(Intent intent) {
+        super.onNewIntent(intent);
+        // 璁剧疆涓哄綋鍓嶇殑 Intent锛岄伩鍏� Activity 琚潃姝诲悗閲嶅惎 Intent 杩樻槸鏈�鍘熷厛鐨勯偅涓�
+        setIntent(intent);
+    }
+
 }

--
Gitblit v1.9.1