From 2a320dc04d6deb22116ebfd302d6f898a15f23af Mon Sep 17 00:00:00 2001
From: Runt <qingingrunt2010@qq.com>
Date: Wed, 17 Aug 2022 13:29:58 +0000
Subject: [PATCH] 日期转换问题

---
 app/src/main/java/com/runt/open/mvvm/base/activities/BaseActivity.java |  379 +++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 331 insertions(+), 48 deletions(-)

diff --git a/app/src/main/java/com/runt/open/mvvm/base/activities/BaseActivity.java b/app/src/main/java/com/runt/open/mvvm/base/activities/BaseActivity.java
index 355a46d..5610e15 100644
--- a/app/src/main/java/com/runt/open/mvvm/base/activities/BaseActivity.java
+++ b/app/src/main/java/com/runt/open/mvvm/base/activities/BaseActivity.java
@@ -2,77 +2,61 @@
 
 import android.Manifest;
 import android.app.AlertDialog;
-import android.app.ProgressDialog;
 import android.content.Context;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
+import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Environment;
-import android.provider.Settings;
 import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.WindowManager;
+import android.view.*;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.EditText;
+import android.widget.TextView;
 import android.widget.Toast;
-
 import androidx.annotation.ColorRes;
 import androidx.annotation.Nullable;
 import androidx.annotation.StringRes;
 import androidx.appcompat.app.AppCompatActivity;
-import androidx.core.content.FileProvider;
 import androidx.lifecycle.ViewModelProvider;
 import androidx.viewbinding.ViewBinding;
-
+import com.permissionx.guolindev.PermissionX;
 import com.runt.open.mvvm.MyApplication;
 import com.runt.open.mvvm.R;
 import com.runt.open.mvvm.base.model.BaseViewModel;
 import com.runt.open.mvvm.base.model.ViewModelFactory;
-import com.runt.open.mvvm.data.ApkUpGradeResult;
-import com.runt.open.mvvm.util.MyLog;
-import com.runt.open.mvvm.util.SpUtils;
-import com.permissionx.guolindev.PermissionX;
-import com.permissionx.guolindev.callback.ExplainReasonCallbackWithBeforeParam;
-import com.permissionx.guolindev.callback.ForwardToSettingsCallback;
-import com.permissionx.guolindev.callback.RequestCallback;
-import com.permissionx.guolindev.request.ExplainScope;
-import com.permissionx.guolindev.request.ForwardScope;
+import com.runt.open.mvvm.listener.ResPonse;
+import com.runt.open.mvvm.util.PreferencesUtils;
+import com.runt.open.mvvm.widgets.TitleBarView;
+import dmax.dialog.SpotsDialog;
 
 import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
 import java.lang.reflect.Method;
 import java.lang.reflect.ParameterizedType;
-import java.util.Date;
-import java.util.List;
-
-import dmax.dialog.SpotsDialog;
-import okhttp3.Call;
-import okhttp3.Callback;
-import okhttp3.OkHttpClient;
-import okhttp3.Request;
-import okhttp3.Response;
-import okhttp3.ResponseBody;
+import java.util.Set;
 
 /**
  * activity 封装
  * Created by Administrator on 2021/10/27 0027.
  */
-public abstract class BaseActivity<B extends ViewBinding,VM extends BaseViewModel> extends AppCompatActivity {
+public abstract class BaseActivity<VB extends ViewBinding,VM extends BaseViewModel> extends AppCompatActivity {
 
-    protected  B binding;
-    protected  VM viewModel;
+    //viewbind
+    protected VB mBinding;
+    //viewmodel
+    protected VM mViewModel;
     protected String TAG ;
+    //文件读取权限
     public final String[] FILE_PERMISSIONS = new String []{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE};
-    public final String[] LOCATION_PERMISSIONS = new String []{Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION};
+    //夹带摄像头权限
     public final String[] CAMERA_PERMISSIONS = new String[]{ FILE_PERMISSIONS[0],FILE_PERMISSIONS[1], Manifest.permission.CAMERA};
+    //夹带录音权限
     public final String[] CAMERA_RECORD_PERMISSIONS = new String[]{ FILE_PERMISSIONS[0],FILE_PERMISSIONS[1], Manifest.permission.CAMERA,Manifest.permission.RECORD_AUDIO};
+
+    public static final String PARAMS_TITLE = "title";
+    public static  final String PARAMS_URL = "url";
 
     public static final int RESULT_LOGIN = 100,RESULT_LOGIN_RECREATE = 103,RESULT_BIND = 101,RESULT_SENDEDFILES = 105,RESULT_DISSCONNECT = 104,
             RESULT_UPDATEUSER =  115,RESULT_LOGOUT = 113, REQUEST_CODE_ACTIVITY = 333;
@@ -103,25 +87,30 @@
             RESULT_CODE_SUCESS = 4046/*成功*/,
             RESULT_CODE_CANCEL = 4043/*取消*/;
     protected Context mContext;
+    //标题栏
+    protected TitleBarView titleBarView;
 
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         // get genericity "B"
-        setStatusBarBgColor(R.color.white);
-        setStatusBarTextColor(true);
+        setStatusBarBgColor(R.color.white);//白色状态栏
+        setStatusBarTextColor(true);//状态栏文本黑色
         final ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
         try {
-            Class<B> entityClass = (Class<B>) type.getActualTypeArguments()[0];
+            //实例化泛型类
+            Class<VB> entityClass = (Class<VB>) type.getActualTypeArguments()[0];
             Method method = entityClass.getMethod("inflate", LayoutInflater.class);//get method from name "inflate";
-            binding = (B) method.invoke(entityClass,getLayoutInflater());//execute method to create a objct of viewbind;
+            mBinding = (VB) method.invoke(entityClass,getLayoutInflater());//execute method to create a objct of viewbind;
+            titleBarView = (TitleBarView) mBinding.getClass().getDeclaredField("titleBar").get(mBinding);
+            titleBarView.setLeftClick(v -> onBackPressed());
         } catch (Exception e) {
             e.printStackTrace();
         }
         Class<VM> vmClass = (Class<VM>) type.getActualTypeArguments()[1];
-        viewModel = new ViewModelProvider(this,getViewModelFactory()).get(vmClass);
-        setContentView(binding.getRoot());
+        mViewModel = new ViewModelProvider(this,getViewModelFactory()).get(vmClass);
+        setContentView(mBinding.getRoot());
         mContext = this;
         try {
             //设置坚屏 一定要放到try catch里面,否则会崩溃
@@ -129,10 +118,154 @@
         } catch (Exception e) {
         }
         TAG = this.getClass().getSimpleName();
-        initViews();
+        initViews();//初始化UI
+        mViewModel.onCreate(this);
+        loadData();//加载数据
     }
 
     public abstract void initViews();
+
+    public abstract void loadData();
+
+    /**
+     * 是否为空
+     * @param object
+     * @return
+     */
+    public boolean isNull(Object object){
+        return object == null || object.toString().trim().equals("") || object.equals("null");
+    }
+
+    /**
+     * 设置标题
+     * @param text
+     */
+    protected void setTitle(String text){
+        titleBarView.setTitleText(text);
+    }
+
+    /**
+     * 标题栏右侧文本
+     * @param text
+     */
+    protected void setTitleRight(String text){
+        titleBarView.setRightText(text);
+        titleBarView.setRightDra(null);
+    }
+
+    /**
+     * 标题栏右侧图片
+     * @param drawable
+     */
+    protected void setTitleRight(Drawable drawable){
+        titleBarView.setRightText(null);
+        titleBarView.setRightDra(drawable);
+    }
+
+
+    AlertDialog dialog;
+    /**
+     * 显示输入框弹框
+     * @param title     标题
+     * @param msg       消息
+     * @param resPonse  回调
+     */
+    public void showDialog(String title,String msg,ResPonse resPonse){
+        showDialog(title,msg,"确认","取消",resPonse);
+    }
+
+    /**
+     * 显示输入框弹框
+     * @param title     标题
+     * @param msg       消息
+     * @param hint      默认消息文本
+     * @param resPonse  回调
+     */
+    public void showInputDialog(String title,String msg,String hint,ResPonse resPonse){
+        showInputDialog(title,msg,hint,"确认","取消",resPonse);
+    }
+
+    /**
+     * 显示输入框弹框
+     * @param title     标题
+     * @param msg       消息
+     * @param hint      默认消息文本
+     * @param btnOk     确认按钮文本
+     * @param btnCancel 取消按钮文本
+     * @param resPonse  回调
+     */
+    public void showInputDialog(String title, String msg, String hint,String btnOk,String btnCancel,final  ResPonse resPonse){
+        showDialog(title,msg,hint,btnOk,btnCancel,resPonse,true);
+    }
+
+    /**
+     * 显示弹框
+     * @param title     标题
+     * @param msg       消息
+     * @param btnOk     确认按钮文本
+     * @param btnCancel 取消按钮文本
+     * @param resPonse  回调
+     */
+    public void showDialog(String title, String msg, String btnOk,String btnCancel,final  ResPonse resPonse){
+        showDialog(title,msg,null,btnOk,btnCancel,resPonse,false);
+    }
+
+    /**
+     * 显示弹框
+     * @param title     标题
+     * @param msg       消息
+     * @param hint      默认消息文本
+     * @param btnOk     确认按钮文本
+     * @param btnCancel 取消按钮文本
+     * @param resPonse  回调
+     * @param isEdit    是否为输入框
+     */
+    private void showDialog(String title, String msg, String hint,String btnOk,String btnCancel,final  ResPonse resPonse,boolean isEdit){
+
+        AlertDialog.Builder builder = new AlertDialog.Builder(this,R.style.TransparentDialog);
+        builder.setCancelable(false);
+        final View view = LayoutInflater.from(this).inflate(R.layout.layout_dialog,null);
+        TextView titleView = view.findViewById(R.id.txt_title);
+        TextView cancelView = view.findViewById(R.id.txt_cancel);
+        final TextView textView = view.findViewById(R.id.msg);
+        if(isEdit){
+            textView.setEnabled(true);
+        }else{
+            textView.setBackground(null);
+        }
+        cancelView.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                dialog.dismiss();
+                if(resPonse !=null){
+                    resPonse.doError(null);
+                }
+            }
+        });
+        cancelView.setText(btnCancel);
+        TextView confirmView = view.findViewById(R.id.txt_confirm);
+        confirmView.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                dialog.dismiss();
+                if(resPonse !=null){
+                    resPonse.doSuccess(textView.getText().toString());
+                }
+            }
+        });
+        confirmView.setText(btnOk);
+        confirmView.requestFocus();
+        if(hint != null){
+            textView.setHint(hint);
+        }
+        if(msg != null){
+            textView.setText(msg);
+        }
+        titleView.setText(title);
+        builder.setView(view);
+        dialog = builder.create();
+        dialog.show();
+    }
 
     AlertDialog loadingDialog;
     /**
@@ -158,15 +291,27 @@
         }
     }
 
+    /**
+     * viewmodel 工厂创建实例
+     * @return
+     */
     public ViewModelProvider.Factory getViewModelFactory(){
         return ViewModelFactory.getInstance();
     }
 
+    /**
+     * 透明状态栏
+     * @param isBlack   是否为黑色文本
+     */
     public void setStatusBarTransparent(boolean isBlack){
         //透明状态栏
         getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
         //透明导航栏
         getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
+        setStatusBarTextColor(isBlack);
+        final ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) titleBarView.getLayoutParams();
+        layoutParams.topMargin = layoutParams.topMargin+getStatusBarHeight();
+        titleBarView.setLayoutParams(layoutParams);
     }
 
     /**
@@ -295,7 +440,8 @@
         }
     }
     public void showToast(String message){
-        Toast.makeText(this,message,Toast.LENGTH_SHORT).show();
+        Log.i(TAG,"showToast "+message);
+        runOnUiThread(() -> Toast.makeText(mContext,message,Toast.LENGTH_SHORT).show());
     }
 
     public void showToast(@StringRes int msg){
@@ -317,10 +463,147 @@
         return storePath + File.separator +fileName;
     }
 
-
-    protected boolean onBackKeyDown() {
-        onBackPressed();
-        return false;
+    /**
+     * 拨打电话(直接拨打电话)
+     * @param phoneNum 电话号码
+     */
+    public void callPhone(String phoneNum){
+        PermissionX.init(this)
+                .permissions(Manifest.permission.CALL_PHONE)
+                .request((allGranted, grantedList, deniedList) -> {
+                    if(allGranted){
+                        Intent intent = new Intent(Intent.ACTION_CALL);
+                        Uri data = Uri.parse("tel:" + phoneNum);
+                        intent.setData(data);
+                        startActivity(intent);
+                    }else{
+                        showToast("权限被拒绝");
+                    }
+                });
     }
 
+    //===========================================
+    //以下为preferences操作
+    public boolean getBooleanUserPrefrence(String key){
+        return PreferencesUtils.getBoolean(this,key,false,PreferencesUtils.USER);
+    }
+    public boolean getBooleanProjectPrefrence(String key){
+        return PreferencesUtils.getBoolean(this,key,false,PreferencesUtils.PROJECT);
+    }
+
+    public String getStringUserPrefrence(String key){
+        return PreferencesUtils.getString(this,key,"",PreferencesUtils.USER);
+    }
+
+    public String getStringProjectPrefrence(String key){
+        return PreferencesUtils.getString(this,key,"",PreferencesUtils.PROJECT);
+    }
+
+    public Integer getIntProjectPrefrence(String key){
+        return PreferencesUtils.getInt(this,key,0,PreferencesUtils.PROJECT);
+    }
+
+    public Long getLongProjectPrefrence(String key){
+        return PreferencesUtils.getLong(this,key,0,PreferencesUtils.PROJECT);
+    }
+
+    public float getFloatProjectPrefrence(String key){
+        return PreferencesUtils.getFloat(this,key,0,PreferencesUtils.PROJECT);
+    }
+
+    public Set getStringSetProjectPrefrence(String key){
+        return PreferencesUtils.getStringSet(this,key,PreferencesUtils.PROJECT);
+    }
+
+    public Integer getIntUserPrefrence(String key){
+        return PreferencesUtils.getInt(this,key,0,PreferencesUtils.USER);
+    }
+
+    public Long getLongUserPrefrence(String key){
+        return PreferencesUtils.getLong(this,key,0,PreferencesUtils.USER);
+    }
+
+    public float getFloatUserPrefrence(String key){
+        return PreferencesUtils.getFloat(this,key,0,PreferencesUtils.USER);
+    }
+
+    public Set getStringSetUserPrefrence(String key){
+        return PreferencesUtils.getStringSet(this,key,PreferencesUtils.USER);
+    }
+
+
+    public void putBooleanUserPrefrence(String key ,Boolean value){
+        PreferencesUtils.putBoolean(this,key,value,PreferencesUtils.USER);
+    }
+
+    public void putBooleanProjectPrefrence(String key,Boolean value){
+        PreferencesUtils.putBoolean(this,key,value,PreferencesUtils.PROJECT);
+    }
+
+    public void putStringUserPrefrence(String key,String value){
+        PreferencesUtils.putString(this,key,value,PreferencesUtils.USER);
+    }
+
+    public void putStringProjectPrefrence(String key,String value){
+        PreferencesUtils.putString(this,key,value,PreferencesUtils.PROJECT);
+    }
+
+    public void putIntProjectPrefrence(String key,int value){
+        PreferencesUtils.putInt(this,key,value,PreferencesUtils.PROJECT);
+    }
+
+    public void putLongProjectPrefrence(String key,long value){
+        PreferencesUtils.putLong(this,key,value,PreferencesUtils.PROJECT);
+    }
+
+    public void putFloatProjectPrefrence(String key,float value){
+        PreferencesUtils.putFloat(this,key,value,PreferencesUtils.PROJECT);
+    }
+
+    public void putStringSetProjectPrefrence(String key, Set value){
+        PreferencesUtils.putStringSet(this,key,value,PreferencesUtils.PROJECT);
+    }
+
+    public void putIntUserPrefrence(String key,int value){
+        PreferencesUtils.putInt(this,key,value,PreferencesUtils.USER);
+    }
+
+    public void putLongUserPrefrence(String key,long value){
+        PreferencesUtils.putLong(this,key,value,PreferencesUtils.USER);
+    }
+
+    public void putFloatUserPrefrence(String key,float value){
+        PreferencesUtils.putFloat(this,key,value,PreferencesUtils.USER);
+    }
+
+    public void putStringSetUserPrefrence(String key, Set value){
+        PreferencesUtils.putStringSet(this,key,value,PreferencesUtils.USER);
+    }
+
+
+    public void removeUserKey(String key){
+        PreferencesUtils.removeKey(this,key,PreferencesUtils.USER);
+    }
+
+    public void removeProjectKey(String key){
+        PreferencesUtils.removeKey(this,key,PreferencesUtils.PROJECT);
+    }
+
+    public void removeUserValue(String Value){
+        PreferencesUtils.removeValue(this,Value,PreferencesUtils.USER);
+    }
+
+    public void removeProjectValue(String Value){
+        PreferencesUtils.removeValue(this,Value,PreferencesUtils.PROJECT);
+    }
+
+
+    public void clearProjectData(){
+        PreferencesUtils.clearData(this,PreferencesUtils.PROJECT);
+    }
+    public void clearUserData(){
+        PreferencesUtils.clearData(this,PreferencesUtils.USER);
+    }
+
+
 }

--
Gitblit v1.9.1