会议室预订 初始提交

master
hwf453 2 years ago
parent 2930f7c995
commit db314e658c

1
app/.gitignore vendored

@ -0,0 +1 @@
/build

@ -0,0 +1,131 @@
apply plugin: 'com.android.application'
android {
compileSdk 33
buildToolsVersion '33.0.0'
defaultConfig {
applicationId "com.rehome.meetingbook"
minSdkVersion 24
targetSdkVersion 33
versionCode 1
versionName "1.0.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
//authorities
resValue "string", "authorities", applicationId
multiDexEnabled true
ndk {
abiFilters 'armeabi-v7a','arm64-v8a'
}
}
buildFeatures {
viewBinding = true
buildConfig = true
}
signingConfigs {
release {
keyAlias 'key0'
storeFile file('../key/keystore1')
storePassword 'abc123123'
keyPassword 'abc123123'
v1SigningEnabled true //V1
v2SigningEnabled true //V2
}
}
/* keypassword:abc123123 alias key0*/
buildTypes {
debug {
minifyEnabled false
buildConfigField "boolean", "LOG_ERROR", "true"
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
buildConfigField("boolean","LOG_ERROR","true");
}
release {
lintOptions {
checkReleaseBuilds false
abortOnError false
}
minifyEnabled false //
zipAlignEnabled true // zip
debuggable false // debug
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
buildConfigField "boolean", "LOG_ERROR", "false"
signingConfig signingConfigs.release //
//apk
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "sbcksyy.apk"
}
};
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
namespace 'com.rehome.meetingbook'
compileOptions {
targetCompatibility JavaVersion.VERSION_17
sourceCompatibility JavaVersion.VERSION_17
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation 'com.zhy:autolayout:1.4.5'
// -------------------------------------------------------
implementation 'com.yolanda.nohttp:nohttp:1.0.5'
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.hjq:http:9.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation 'com.hjq.gson:factory:2.2'
implementation 'cn.hutool:hutool-all:5.8.5'
// ----------------------------------------------------------------
implementation 'com.hjq:toast:8.8'
implementation 'org.litepal.android:core:1.5.1'
implementation 'com.orhanobut:logger:2.2.0'
implementation 'com.yanzhenjie:permission:2.0.3'
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
implementation 'de.hdodenhof:circleimageview:3.1.0'
implementation 'com.github.chrisbanes.photoview:library:1.2.4'
implementation 'me.leolin:ShortcutBadger:1.1.22@aar'
implementation 'cn.jzvd:jiaozivideoplayer:7.2.3'
implementation 'com.google.zxing:core:3.4.1'
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
implementation 'com.github.chrisbanes:PhotoView:2.1.3'
implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.10.0'
implementation 'com.haozhang.libary:android-slanted-textview:1.2'
implementation 'com.github.huangyanbin:SmartTable:2.2.0'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'com.github.xuexiangjys:XUI:1.1.5'
implementation 'com.haibin:calendarview:3.6.3'
implementation 'com.github.baoyachi:StepView:1.9'
implementation 'com.azhon:appupdateX:2.8.0'
implementation 'com.king.zxing:zxing-lite:1.1.6-androidx'
implementation 'com.tencent.bugly:crashreport:3.2.1'
implementation 'com.github.xuexiangjys.SmartRefreshLayout:refresh-header:1.1.5'
implementation 'com.github.xuexiangjys.SmartRefreshLayout:refresh-layout:1.1.5'
implementation 'com.just.agentweb:agentweb:4.1.4'
implementation 'com.lcodecorex:tkrefreshlayout:1.0.7'
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'
implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.5.9'
implementation 'com.github.bumptech.glide:glide:4.11.0'
//
implementation 'com.haibin:calendarview:3.7.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
}

Binary file not shown.

Binary file not shown.

@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

@ -0,0 +1,26 @@
package com.rehome.meetingbook;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("com.rehome.sbcksyy", appContext.getPackageName());
}
}

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE" />
<uses-permission android:name="com.huawei.permission.sec.MDM" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<permission-group android:name="${applicationId}.andpermission" />
<application
android:name=".App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="design_width"
android:value="1024" />
<meta-data
android:name="design_height"
android:value="1280" />
<activity
android:name=".ui.activity.LoginActivity"
android:exported="true"
android:screenOrientation="landscape"
android:windowSoftInputMode="stateHidden|adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:exported="false"
android:screenOrientation="landscape" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths_public" />
</provider>
</application>
</manifest>

@ -0,0 +1,100 @@
package com.rehome.meetingbook;
import android.app.ActivityManager;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import androidx.multidex.MultiDex;
import com.github.mikephil.charting.utils.Utils;
import com.tencent.bugly.crashreport.CrashReport;
import com.xuexiang.xui.XUI;
import com.yolanda.nohttp.NoHttp;
import com.zhy.autolayout.config.AutoLayoutConifg;
import org.litepal.LitePalApplication;
public class App extends LitePalApplication {
private static final String APP_NAME = "com.rehome.sbcksyy";
private String DateSave;
public String getDateSave() {
return DateSave;
}
public void setDateSave(String dateSave) {
DateSave = dateSave;
}
private static App mInstance;
public static App getInstance() {
return mInstance;
}
@Override
public void onCreate() {
super.onCreate();
Log.e("BaseApplication", "onCreate");
Log.e("BaseApplication", getProcessNameByPID(getApplicationContext(), android.os.Process.myPid()));
Log.e("isAppMainProcess", String.valueOf(isAppMainProcess()));
mInstance = this;
NoHttp.initialize(this);
MultiDex.install(this);
AutoLayoutConifg.getInstance().useDeviceSize();
Utils.init(this);
XUI.init(this); //初始化UI框架
CrashReport.initCrashReport(getApplicationContext(), "ef7c97c038", true);
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
/**
*
*
* @return
*/
public boolean isAppMainProcess() {
try {
int pid = android.os.Process.myPid();
String process = getProcessNameByPID(getApplicationContext(), pid);
return TextUtils.isEmpty(process) || APP_NAME.equalsIgnoreCase(process);
} catch (Exception e) {
return true;
}
}
/**
* pid
*
* @param context
* @param pid
* @return
*/
public String getProcessNameByPID(Context context, int pid) {
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
if (manager == null) {
return "";
}
for (android.app.ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
if (processInfo == null) {
continue;
}
if (processInfo.pid == pid) {
return processInfo.processName;
}
}
return "";
}
}

@ -0,0 +1,103 @@
package com.rehome.meetingbook;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import java.util.Stack;
public class AppManager {
private static Stack<Activity> activityStack;
private static AppManager instance;
private AppManager() {
}
/**
*
*/
public static AppManager getAppManager() {
if (instance == null) {
instance = new AppManager();
}
return instance;
}
/**
* Activity
*/
public void addActivity(Activity activity) {
if (activityStack == null) {
activityStack = new Stack<Activity>();
}
activityStack.add(activity);
}
/**
* Activity
*/
public Activity currentActivity() {
Activity activity = activityStack.lastElement();
return activity;
}
/**
* Activity
*/
public void finishActivity() {
Activity activity = activityStack.lastElement();
finishActivity(activity);
}
/**
* Activity
*/
public void finishActivity(Activity activity) {
if (activity != null) {
activityStack.remove(activity);
activity.finish();
activity = null;
}
}
/**
* Activity
*/
public void finishActivity(Class<?> cls) {
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
}
}
}
/**
* Activity
*/
public void finishAllActivity() {
for (int i = 0, size = activityStack.size(); i < size; i++) {
if (null != activityStack.get(i)) {
activityStack.get(i).finish();
}
}
activityStack.clear();
}
/**
* 退
*/
@SuppressWarnings("deprecation")
public void AppExit(Context context) {
try {
finishAllActivity();
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.restartPackage(context.getPackageName());
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
}
}
}

@ -0,0 +1,42 @@
package com.rehome.meetingbook;
/**
* Create By HuangWenFei
* 2022-12-01 15:16
*
*/
public class Contans {
//APP登录接口url
//public static String BASE_URL = "http://192.168.2.215:8082/";
//厂内
public static String BASE_URL = "http://10.19.0.73:8082/";
//获取历史练习数据
public static String GET_APPOINTMENT_SUCCESS_URL="CBS/Api/YYGL/GetYYKSJGList.ashx?sfzh=";
//获取预约等级和培训考试模式
public static String GET_YYTYPEANDEXAMMODEL_URL="CBS/Api/YYGL/GetYYType.ashx?typecode=";
//获取厂内人员组织结构
public static String GETDEPTUSER_URL="CBS/Api/YYGL/GetDeptUser.ashx";
//获取预约人的承包商信息以及该承包商下的人员
public static String GET_CBSUSERLISTBYZJHM_URL="CBS/Api/YYGL/GetCBSUserListByZJHM.ashx?zjhm=";
//获取部门
public static String GET_DEPT_LIST_URL="CBS/Api/YYGL/GetDeptList.ashx";
//获取班组
public static String GET_DEPT_BZ_LIST_URL="CBS/Api/YYGL/GetDeptBZList.ashx?deptcode=";
//获取可预约人数
public static String GET_CAN_APPOINTMENT_COUNT_URL="CBS/Api/YYGL/GetKyyRs.ashx";
//预约保存主数据
public static String SAVE_CAN_APPOINTMENT_MAIN_URL="CBS/Api/YYGL/SaveCBSYYMain.ashx";
//保存预约人员数据
public static String SAVE_CAN_APPOINTMENT_USERS_URL="CBS/Api/YYGL/SaveCBSYYUsers.ashx";
//获取有预约的日期(从当前时间起)
public static String GET_YYDATE_URL="CBS/Api/YYGL/GetYYDate.ashx";
//获取每天预约详细
public static String GET_YYDATEDETAILLIST_URL="CBS/Api/YYGL/GetYYDateList.ashx?yyrq=";
//获取生产岗位培训室使用时间
public static String GET_YYDATESCGW_URL="CBS/Api/YYGL/GetYYDateSCGW.ashx?time=";
}

@ -0,0 +1,269 @@
package com.rehome.meetingbook;
import android.app.DownloadManager;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.Toolbar;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.GridView;
import com.rehome.meetingbook.adapter.GridViewAdapter;
import com.rehome.meetingbook.base.BaseActivity2;
import com.rehome.meetingbook.bean.GridViewBean;
import com.rehome.meetingbook.databinding.ActivityMainBinding;
import com.rehome.meetingbook.ui.activity.LoginActivity;
import com.rehome.meetingbook.ui.activity.SimpleActivity;
import com.rehome.meetingbook.utils.ControllerActivity;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends BaseActivity2<ActivityMainBinding> {
GridView gv;
private List<GridViewBean> beanList = new ArrayList<>();
private GridViewAdapter adapter;
private List<String> dialogDatas;
private List<String> dialogDatas2;
DownloadManager DM, mDownloadManager;
private long downloadId;
private boolean isTask = false;//是否有任务
private long exitTime = 0;
// private String[] str = {"考试预约", "预约记录", "安健环巡查", "综合巡查", "行为安全观察", "工单录入", "巡视抄表", "定期工作", "定期工作"};
// private int[] imageId = {R.mipmap.appointment,
// R.mipmap.appointment_record,
// R.mipmap.icon10,
// R.mipmap.icon12,
// R.mipmap.icon14,
// R.mipmap.icon13,
// R.mipmap.icon6, R.mipmap.dingqi, R.mipmap.dingqi
// };
// private int[] colors = {R.drawable.radius_a1, R.drawable.radius_a2,
// R.drawable.radius_a3, R.drawable.radius_a4,
// R.drawable.radius_d3, R.drawable.radius_c5, R.drawable.radius_e3, R.drawable.radius_a1,
// R.drawable.radius_a2};
private String[] str = {
"考试预约", "预约查询", "预约一览"
};
private int[] imageId = {
R.mipmap.appointment,
R.mipmap.appointment_record,
R.mipmap.icon13
};
private int[] colors = {
R.drawable.radius_a1,
R.drawable.radius_a2,
R.drawable.radius_a3
};
private List<Integer> item;
private String idCardNo;
private String xm;
// android:background="@drawable/home_bg"
@Override
protected ActivityMainBinding getBinding() {
return ActivityMainBinding.inflate(LayoutInflater.from(this));
}
@Override
protected Toolbar getToolbar() {
return binding.toolbarView.toolbar;
}
@Override
protected void initView() {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
binding.toolbarView.title.setText("承包商考试预约");
mToolbar.setBackgroundColor(Color.parseColor("#00000000"));
gv = findViewById(R.id.gv);
setExitZx();
}
@Override
public void initData() {
Intent intent = getIntent();
idCardNo = intent.getStringExtra("idCardNo");
xm = intent.getStringExtra("xm");
dialogDatas = new ArrayList<>();
dialogDatas2 = new ArrayList<>();
item = new ArrayList<>();
beanList.addAll(getGridViewData(isTask));
gv.setSelector(new ColorDrawable(Color.TRANSPARENT));
adapter = new GridViewAdapter(this, beanList, item, true);
gv.setAdapter(adapter);
gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent;
switch (position) {
case 0:
// intent = new Intent();
// intent.setClass(MainActivity.this, ExamAppointmentActivity.class);
// intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
// intent.putExtra("idCardNo", idCardNo);
// startActivity(intent);
break;
case 1:
// intent = new Intent();
// intent.setClass(MainActivity.this, AppointmentListActivity.class);
// intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
// intent.putExtra("idCardNo", idCardNo);
// startActivity(intent);
break;
case 2:
intent = new Intent();
//intent.setClass(MainActivity.this, AppointmentDateActivity.class);
intent.setClass(MainActivity.this, SimpleActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("idCardNo", idCardNo);
startActivity(intent);
break;
default:
break;
}
}
});
}
// 按两次返回键退出程序
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK
&& event.getAction() == KeyEvent.ACTION_DOWN) {
if ((System.currentTimeMillis() - exitTime) > 2000) {
showToast("再按一次退出程序");
exitTime = System.currentTimeMillis();
} else {
ControllerActivity.getAppManager().finishAllActivity();
finish();
System.exit(0);
}
return true;
}
return super.onKeyDown(keyCode, event);
}
private void setExitZx() {
mToolbar.setNavigationIcon(R.mipmap.back);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("提示");
builder.setMessage("你确定要退出程序?");
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ControllerActivity.getAppManager().finishAllActivity();
finish();
System.exit(0);
dialog.dismiss();
}
});
builder.create().show();
}
});
mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.zx:
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("提示");
builder.setMessage("您确定要注销吗?");
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ControllerActivity.getAppManager().finishAllActivity();
Intent intent = new Intent(MainActivity.this, LoginActivity.class);
startActivity(intent);
//finish();
dialog.dismiss();
}
});
builder.create().show();
break;
}
return true;
}
});
}
/**
* @param isTask
* @return
*/
private List<GridViewBean> getGridViewData(boolean isTask) {
List<GridViewBean> datas = new ArrayList<>();
for (int i = 0; i < str.length; i++) {
GridViewBean bean = new GridViewBean();
bean.setTitle(str[i]);
bean.setBackgroup(colors[i]);
bean.setImageid(imageId[i]);
bean.setShow(isTask);
datas.add(bean);
}
return datas;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
}

@ -0,0 +1,163 @@
package com.rehome.meetingbook.ZKUSBManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbManager;
import androidx.annotation.NonNull;
import java.util.Random;
/**
* usb permission and hotplug
*/
public class ZKUSBManager {
//usb's vendor id
private int vid = 0;
//usb's product id
private int pid = 0;
//application context
private Context mContext = null;
/////////////////////////////////////////////
//for usb permission
private static final String SOURCE_STRING = "0123456789-_abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ";
private static final int DEFAULT_LENGTH = 16;
private String ACTION_USB_PERMISSION;
private boolean mbRegisterFilter = false;
private ZKUSBManagerListener zknirusbManagerListener = null;
private BroadcastReceiver usbMgrReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION_USB_PERMISSION.equals(action))
{
UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (device.getVendorId() == vid && device.getProductId() == pid) {
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
zknirusbManagerListener.onCheckPermission(0);
} else {
zknirusbManagerListener.onCheckPermission(-2);
}
}
}
else if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action))
{
UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (device.getVendorId() == vid && device.getProductId() == pid) {
zknirusbManagerListener.onUSBArrived(device);
}
}
else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action))
{
UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (device.getVendorId() == vid && device.getProductId() == pid) {
zknirusbManagerListener.onUSBRemoved(device);
}
}
}
};
private boolean isNullOrEmpty(String target) {
if (null == target || "".equals(target) || target.isEmpty()) {
return true;
}
return false;
}
private String createRandomString(String source, int length) {
if (this.isNullOrEmpty(source)) {
return "";
}
StringBuffer result = new StringBuffer();
Random random = new Random();
for(int index = 0; index < length; index++) {
result.append(source.charAt(random.nextInt(source.length())));
}
return result.toString();
}
public boolean registerUSBPermissionReceiver()
{
if (null == mContext || mbRegisterFilter)
{
return false;
}
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_USB_PERMISSION);
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
mContext.registerReceiver(usbMgrReceiver, filter);
mbRegisterFilter = true;
return true;
}
public void unRegisterUSBPermissionReceiver()
{
if (null == mContext || !mbRegisterFilter)
{
return;
}
mContext.unregisterReceiver(usbMgrReceiver);
mbRegisterFilter = false;
}
//End USB Permission
/////////////////////////////////////////////
public ZKUSBManager(@NonNull Context context, @NonNull ZKUSBManagerListener listener)
{
super();
if (null == context || null == listener)
{
throw new NullPointerException("context or listener is null");
}
zknirusbManagerListener = listener;
ACTION_USB_PERMISSION = createRandomString(SOURCE_STRING, DEFAULT_LENGTH);
mContext = context;
}
//0 means success
//-1 means device no found
//-2 means device no permission
public void initUSBPermission(int vid, int pid){
UsbManager usbManager = (UsbManager)mContext.getSystemService(Context.USB_SERVICE);
UsbDevice usbDevice = null;
for (UsbDevice device : usbManager.getDeviceList().values()) {
int device_vid = device.getVendorId();
int device_pid = device.getProductId();
if (device_vid == vid && device_pid == pid)
{
usbDevice = device;
break;
}
}
if (null == usbDevice)
{
zknirusbManagerListener.onCheckPermission(-1);
return;
}
this.vid = vid;
this.pid = pid;
if (!usbManager.hasPermission(usbDevice))
{
Intent intent = new Intent(this.ACTION_USB_PERMISSION);
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0);
usbManager.requestPermission(usbDevice, pendingIntent);
}
else {
zknirusbManagerListener.onCheckPermission(0);
}
}
}

@ -0,0 +1,16 @@
package com.rehome.meetingbook.ZKUSBManager;
import android.hardware.usb.UsbDevice;
public interface ZKUSBManagerListener
{
//0 means success
//-1 means device no found
//-2 means device no permission
void onCheckPermission(int result);
void onUSBArrived(UsbDevice device);
void onUSBRemoved(UsbDevice device);
}

@ -0,0 +1,52 @@
package com.rehome.meetingbook.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import com.rehome.meetingbook.bean.AppointmentDateDetailListBean;
import com.rehome.meetingbook.databinding.AdapterAppointmentDateBinding;
import com.rehome.meetingbook.databinding.AdapterContactBinding;
import java.util.List;
/**
* Create By HuangWenFei
* 2022-12-21 09:30
*
*/
public class AppointmentDateAdapter extends MyAdapter<AdapterAppointmentDateBinding>{
private List<AppointmentDateDetailListBean.RowsBean> datas;
public AppointmentDateAdapter(Context context, List<AppointmentDateDetailListBean.RowsBean> datas) {
super(context);
this.datas=datas;
}
@Override
protected void handleData(int position, AdapterAppointmentDateBinding binding) {
AppointmentDateDetailListBean.RowsBean item = datas.get(position);
binding.tvDesc.setText(item.getPskssj_s()+" 至 "+item.getPskssj_e()+"共:"+item.getRs()+"人,还可预约"+ item.getKyyrs() + "人");
}
@Override
protected AdapterAppointmentDateBinding getBinding(LayoutInflater inflater, ViewGroup parent) {
return AdapterAppointmentDateBinding.inflate(inflater, parent, false);
}
@Override
public int getCount() {
return datas.size();
}
@Override
public Object getItem(int position) {
return datas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
}

@ -0,0 +1,90 @@
package com.rehome.meetingbook.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.rehome.meetingbook.R;
import com.rehome.meetingbook.bean.AppointmentMemberBean;
import com.rehome.meetingbook.databinding.AdapterAppointmentMemberBinding;
import com.rehome.meetingbook.databinding.AdapterAppointmentResultBinding;
import java.util.List;
/**
* Create By HuangWenFei
* 2022-12-10 15:06
*
*/
public class AppointmentMemberAdapter extends MyAdapter<AdapterAppointmentMemberBinding>{
private List<AppointmentMemberBean.RowsBean> datas;
private final Context context;
private DeleteItemListener deleteItemListener;
public AppointmentMemberAdapter(Context context, List<AppointmentMemberBean.RowsBean> datas,DeleteItemListener deleteItemListener) {
super(context);
this.datas = datas;
this.context=context;
this.deleteItemListener=deleteItemListener;
}
@Override
protected void handleData(int position, AdapterAppointmentMemberBinding binding) {
AppointmentMemberBean.RowsBean bean = (AppointmentMemberBean.RowsBean) getItem(position);
if ((position + 1) % 2 == 0) {
binding.ll.setBackgroundColor(context.getResources().getColor(R.color.itemColor));
} else {
binding.ll.setBackgroundColor(context.getResources().getColor(R.color.white));
}
binding.tvXm.setText(bean.getXm());
if (bean.getIszzpfzr()!=null&&bean.getIszzpfzr().equals("1")){
binding.tvXm.setText(bean.getXm()+"(工作负责人)");
}
binding.tvSfzh.setText(bean.getSfzh());
binding.tvPszb.setText(bean.getPszbName());
binding.tvYyrq.setText(bean.getYyrq());
binding.tvPsbm.setText(bean.getPsbmName());
binding.tvPsbz.setText(bean.getPsbzName());
binding.imageViewDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(deleteItemListener!=null){
deleteItemListener.deleteItem(bean.getSfzh());
}
}
});
}
@Override
protected AdapterAppointmentMemberBinding getBinding(LayoutInflater inflater, ViewGroup parent) {
return AdapterAppointmentMemberBinding.inflate(inflater, parent, false);
}
@Override
public int getCount() {
return datas.size();
}
@Override
public Object getItem(int position) {
return datas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public interface DeleteItemListener {
void deleteItem(String sfzh);
}
}

@ -0,0 +1,82 @@
package com.rehome.meetingbook.adapter;
import android.content.Context;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.bumptech.glide.Glide;
import com.rehome.meetingbook.Contans;
import com.rehome.meetingbook.R;
import com.rehome.meetingbook.bean.ContactListBean;
import com.rehome.meetingbook.databinding.AdapterAppointmentResultBinding;
import com.rehome.meetingbook.databinding.AdapterContactBinding;
import java.util.List;
/**
* Create By HuangWenFei
* 2022-12-08 14:29
*
*/
public class ContactAdapter extends MyAdapter<AdapterContactBinding>{
private final Context context;
private final List<ContactListBean.RowsBean.OrderlistBean> datas;
public ContactAdapter(Context context, List<ContactListBean.RowsBean.OrderlistBean> datas) {
super(context);
this.datas = datas;
this.context=context;
}
@Override
protected void handleData(int position, AdapterContactBinding binding) {
ContactListBean.RowsBean.OrderlistBean item = datas.get(position);
if (!TextUtils.isEmpty(item.getName())) {
binding.ll.setVisibility(View.VISIBLE);
binding.tvDeptName.setVisibility(View.GONE);
binding.tvName.setText(item.getName());
binding.tvPhone1.setText(item.getTelephone());
binding.tvPhone2.setText(item.getAddress_tel());
if (!item.getAccount_head().equals("")) {
Glide.with(context).load(Contans.BASE_URL + item.getAccount_head()).into(binding.headView);
} else {
binding.headView.setImageResource(R.drawable.head_photo);
}
} else {
if (position == 0) {
binding.tvDeptName.setVisibility(View.GONE);
binding.ll.setVisibility(View.GONE);
} else {
binding.tvDeptName.setText(item.getGroupName());
binding.ll.setVisibility(View.GONE);
binding.tvDeptName.setVisibility(View.VISIBLE);
}
}
}
@Override
protected AdapterContactBinding getBinding(LayoutInflater inflater, ViewGroup parent) {
return AdapterContactBinding.inflate(inflater, parent, false);
}
@Override
public int getCount() {
return datas.size();
}
@Override
public Object getItem(int position) {
return datas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
}

@ -0,0 +1,114 @@
package com.rehome.meetingbook.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.rehome.meetingbook.bean.GridViewBean;
import com.rehome.meetingbook.R;
import java.util.List;
/**
* Create By HuangWenFei
* 2022-11-25 19:51
*
*/
public class GridViewAdapter extends BaseAdapter {
private Context context;
private List<GridViewBean> datas;
private int item = 0;
private List<Integer> items;//通过传入一些item让传入的item不可以点击
private boolean flag;
public GridViewAdapter(Context context, List<GridViewBean> datas, List<Integer> items, boolean flag) {
this.context = context;
this.items = items;
this.flag = flag;
this.datas = datas;
}
@Override
public int getCount() {
return datas.size();
}
@Override
public GridViewBean getItem(int i) {
return datas.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
ViewHolder holder;
if (view == null) {
holder = new ViewHolder();
view = LayoutInflater.from(context).inflate(R.layout.gridview_item, viewGroup, false);
holder.iv = (ImageView) view.findViewById(R.id.iv);
holder.tv = (TextView) view.findViewById(R.id.tv);
holder.ll = (LinearLayout) view.findViewById(R.id.ll);
holder.red_dot = (ImageView) view.findViewById(R.id.iv_reddot);
view.setTag(holder);
//AutoUtils.autoSize(view);
} else {
holder = (ViewHolder) view.getTag();
}
GridViewBean bean = getItem(position);
// holder.ll.setBackgroundColor(context.getResources().getColor(bean.getBackgroup()));
holder.ll.setBackgroundResource(bean.getBackgroup());
holder.red_dot.setVisibility(bean.isShow() ? View.VISIBLE : View.GONE);
if (bean.getTitle() != " ") {
holder.iv.setImageResource(bean.getImageid());
}
holder.tv.setText(bean.getTitle());
return view;
}
static class ViewHolder {
TextView tv;
ImageView iv;
LinearLayout ll;
ImageView red_dot;
}
//重写isEnabled,传入哪个position
@Override
public boolean isEnabled(int position) {
if (!flag) {
for (int i = 0; i < items.size(); i++) {
if (position == items.get(i)) {
return true;
}
}
return false;
}
return true;
}
}

@ -0,0 +1,49 @@
package com.rehome.meetingbook.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import androidx.viewbinding.ViewBinding;
/**
* Create By HuangWenFei
* 2022-12-06 14:23
*
*/
public abstract class MyAdapter<T extends ViewBinding> extends BaseAdapter {
private final LayoutInflater inflater;
public MyAdapter(Context context) {
inflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (null == convertView) {
T binding = getBinding(inflater, parent);
holder = new ViewHolder(binding);
convertView = binding.getRoot();
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
handleData(position, holder.binding);
return convertView;
}
protected abstract void handleData(int position, T binding);
protected abstract T getBinding(LayoutInflater inflater, ViewGroup parent);
class ViewHolder {
private final T binding;
public ViewHolder(T binding) {
this.binding = binding;
}
}
}

@ -0,0 +1,51 @@
package com.rehome.meetingbook.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import com.rehome.meetingbook.bean.YunQingExalBean;
import com.rehome.meetingbook.databinding.AdapterAppointmentDateBinding;
import com.rehome.meetingbook.databinding.AdapterYunQingExamBinding;
import java.util.List;
/**
* Create By HuangWenFei
* 2022-12-21 11:11
*
*/
public class YunQingExalAdapter extends MyAdapter<AdapterYunQingExamBinding>{
private List<YunQingExalBean.RowsBean> datas;
public YunQingExalAdapter(Context context, List<YunQingExalBean.RowsBean> datas) {
super(context);
this.datas=datas;
}
@Override
protected void handleData(int position, AdapterYunQingExamBinding binding) {
YunQingExalBean.RowsBean item = datas.get(position);
binding.tvDesc.setText(item.getTimes()+" 至 "+item.getTimee()+""+item.getDepartment_name());
}
@Override
protected AdapterYunQingExamBinding getBinding(LayoutInflater inflater, ViewGroup parent) {
return AdapterYunQingExamBinding.inflate(inflater, parent, false);
}
@Override
public int getCount() {
return datas.size();
}
@Override
public Object getItem(int position) {
return datas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
}

@ -0,0 +1,80 @@
package com.rehome.meetingbook.adapter.base;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import com.rehome.meetingbook.R;
import com.rehome.meetingbook.adapter.MyAdapter;
import com.rehome.meetingbook.bean.AppointmentResultBean;
import com.rehome.meetingbook.databinding.AdapterAppointmentResultBinding;
import java.util.List;
/**
* Create By HuangWenFei
* 2022-12-06 14:24
*
*/
public class AppointmentResultAdapter extends MyAdapter<AdapterAppointmentResultBinding> {
private List<AppointmentResultBean.RowsBean> datas;
private final Context context;
public AppointmentResultAdapter(Context context, List<AppointmentResultBean.RowsBean> datas) {
super(context);
this.datas = datas;
this.context=context;
//Log.i("app", GsonUtils.GsonString(datas));
}
@Override
protected void handleData(int position, AdapterAppointmentResultBinding binding) {
AppointmentResultBean.RowsBean bean = (AppointmentResultBean.RowsBean) getItem(position);
if ((position + 1) % 2 == 0) {
binding.ll.setBackgroundColor(context.getResources().getColor(R.color.itemColor));
} else {
binding.ll.setBackgroundColor(context.getResources().getColor(R.color.white));
}
binding.tvYyrq.setText(bean.getYyrq());
binding.tvKsms.setText(bean.getPsmodelname());
binding.tvXm.setText(bean.getYyrxm());
binding.tvCbsfzr.setText(bean.getXxfzrname());
binding.tvYyType.setText(bean.getYylx());
binding.tvCbsname.setText(bean.getCbsname());
binding.tvPxrName.setText(bean.getXm());
binding.tvYydj.setText(bean.getPszb());
binding.tvPsbm.setText(bean.getPsbm());
binding.tvPsbz.setText(bean.getPsbz());
binding.tvIszzpfzr.setText(bean.getIszzpfzr());
binding.tvIsys.setText(bean.getIsys());
binding.tvIssendrl.setText(bean.getIssendrl());
binding.tvShstate.setText(bean.getShstate());
binding.tvShsj.setText(bean.getShsj());
}
@Override
protected AdapterAppointmentResultBinding getBinding(LayoutInflater inflater, ViewGroup parent) {
return AdapterAppointmentResultBinding.inflate(inflater, parent, false);
}
@Override
public int getCount() {
return datas.size();
}
@Override
public Object getItem(int position) {
return datas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
}

@ -0,0 +1,112 @@
package com.rehome.meetingbook.base;
import android.app.PendingIntent;
import android.content.Context;
import android.content.IntentFilter;
import android.os.Bundle;
import androidx.annotation.LayoutRes;
import androidx.appcompat.widget.Toolbar;
import android.view.View;
import android.view.WindowManager;
import android.widget.TextView;
import android.widget.Toast;
import com.rehome.meetingbook.R;
import com.rehome.meetingbook.utils.ControllerActivity;
import com.zhy.autolayout.AutoLayoutActivity;
/**
* Create By HuangWenFei
* 2022-12-07 14:29
*
*/
public abstract class BaseActivity extends AutoLayoutActivity {
public static final int CX_FLAG = 0;//查询的状态码
public static final int SC_FLAG = 1;//上传的状态码
public Toolbar mToolbar;
public TextView title;
public Context context;
private String readResult = "";
private PendingIntent pendingIntent;
private IntentFilter[] mFilters;
private String[][] mTechLists;
private boolean isFirst = true;
private IntentFilter ndef;
public abstract int getContentViewID();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
setContentView(getContentViewID());
context = this;
ControllerActivity.getAppManager().addActivity(this);
mToolbar = (Toolbar) findViewById(R.id.toolbar);
title = (TextView) findViewById(R.id.title);
mToolbar.setTitle("");
setSupportActionBar(mToolbar);
initView();
initData();
}
@Override
public void setContentView(@LayoutRes int layoutResID) {
super.setContentView(layoutResID);
}
/**
* View
*/
protected abstract void initView();
/**
*
*/
protected abstract void initData();
@Override
protected void onDestroy() {
super.onDestroy();
ControllerActivity.getAppManager().finishActivity(this);
context = null;
}
/**
* toast
*
* @param text
*/
public void showToast(String text) {
if (text != null && !text.trim().equals("")) {
Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
}
}
public void showToast(int id) {
Toast.makeText(this, id, Toast.LENGTH_SHORT).show();
}
public void setTitle(String title) {
this.title.setText(title);
}
public void setBack() {
mToolbar.setNavigationIcon(R.mipmap.back);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
}

@ -0,0 +1,67 @@
package com.rehome.meetingbook.base;
import android.content.Context;
import android.os.Bundle;
import android.view.WindowManager;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.viewbinding.ViewBinding;
import com.rehome.meetingbook.utils.ControllerActivity;
/**
* Create By HuangWenFei
* 2022-12-06 17:35
*
*/
public abstract class BaseActivity2<T extends ViewBinding> extends AppCompatActivity {
protected T binding;
protected Toolbar mToolbar;
public Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
binding = getBinding();
mToolbar = getToolbar();
setContentView(binding.getRoot());
context = this;
ControllerActivity.getAppManager().addActivity(this);
mToolbar.setTitle("");
setSupportActionBar(mToolbar);
initView();
initData();
}
@Override
protected void onDestroy() {
super.onDestroy();
ControllerActivity.getAppManager().finishActivity(this);
context = null;
}
/**
* toast
* @param text
*/
public void showToast(String text) {
if (text != null && !text.trim().equals("")) {
Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
}
}
public void showToast(int id) {
Toast.makeText(this, id, Toast.LENGTH_SHORT).show();
}
protected abstract T getBinding();
protected abstract Toolbar getToolbar();
protected abstract void initView();
protected abstract void initData();
}

@ -0,0 +1,46 @@
package com.rehome.meetingbook.base;
import android.content.Context;
import android.widget.Toast;
import com.rehome.meetingbook.weiget.LoadDialog;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
/**
* Created by Rehome-rjb1 on 2017/5/17.
* dialog
*/
public abstract class BaseCallBack<T> implements Callback<T> {
private final Context context;
private final LoadDialog dialog;
public BaseCallBack(Context context) {
this.context = context;
dialog = new LoadDialog(context, false, "正在加载中...");
dialog.show();
}
@Override
public void onResponse(Call<T> call, Response<T> response) {
dialog.dismiss();
onSuccess(call, response);
}
@Override
public void onFailure(Call<T> call, Throwable t) {
dialog.dismiss();
Toast.makeText(context, "网络连接失败", Toast.LENGTH_SHORT).show();
onError(call, t);
}
public abstract void onSuccess(Call<T> call, Response<T> response);
public abstract void onError(Call<T> call, Throwable t);
}

@ -0,0 +1,40 @@
package com.rehome.meetingbook.base;
import android.content.Context;
import android.widget.Toast;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
/**
* Created by Rehome-rjb1 on 2017/5/17.
* dialog
*/
public abstract class BaseCallBackNoProgress<T> implements Callback<T> {
private final Context context;
public BaseCallBackNoProgress(Context context) {
this.context = context;
}
@Override
public void onResponse(Call<T> call, Response<T> response) {
onSuccess(call, response);
}
@Override
public void onFailure(Call<T> call, Throwable t) {
Toast.makeText(context, "网络连接失败", Toast.LENGTH_SHORT).show();
onError(call, t);
}
public abstract void onSuccess(Call<T> call, Response<T> response);
public abstract void onError(Call<T> call, Throwable t);
}

@ -0,0 +1,54 @@
package com.rehome.meetingbook.base;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
/**
* Created by Rehome-rjb1 on 2017/5/8.
* fragmentfragment
*/
public abstract class BaseFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(getLayoutId(), container, false);
initData();
return view;
}
public abstract int getLayoutId();
public abstract void initData();
@Override
public void onDestroyView() {
super.onDestroyView();
}
public void showToast(String msg) {
Toast.makeText(getContext(), msg, Toast.LENGTH_SHORT).show();
}
public void showToast(int strId) {
Toast.makeText(getContext(), strId, Toast.LENGTH_SHORT).show();
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public void onDetach() {
super.onDetach();
}
}

@ -0,0 +1,76 @@
package com.rehome.meetingbook.base;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
/**
* Created by ruihong on 2017/10/28.
*/
public abstract class BaseFragment2 extends Fragment {
public static final int CX_FLAG = 0;//查询的状态码
public static final int SC_FLAG = 1;//上传的状态码
public abstract int getContentViewId();
public Activity mActivity;
public View view;
public Context context;
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context = context;
mActivity = getActivity();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(getContentViewId(), container, false);
//Logger.v("fragment:" + getClass().getSimpleName());
initView();
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initData();
}
/**
*
*/
protected abstract void initView();
/**
*
*/
public void initData() {
}
public void showToast(String text) {
if (text != null && !text.trim().equals("")) {
Toast.makeText(getActivity(), text, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
}
}

@ -0,0 +1,198 @@
package com.rehome.meetingbook.base;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
/**
* Created by ruihong on 2018/4/20.
*/
public abstract class BaseLazyFragment extends Fragment {
private boolean isPrepared;
protected View mRootView;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mRootView = inflater.inflate(getContentViewId(), container, false);
//绑定到butterKnife
return mRootView;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//如果要使用eventBus请将此方法返回true
initPrepare();
}
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
}
@Override
public void onDestroyView() {
super.onDestroyView();
}
@Override
public void onDestroy() {
super.onDestroy();
this.mRootView = null;
}
/**
*
*
* @return the int
*/
protected abstract int getContentViewId();
/**
*
*/
protected abstract void initView();
/**
*
*/
protected abstract void initData();
/**
*
*/
protected abstract void initListener();
/**
* 使fragment,activityfragment,
* ,bundle,what,,setData
* switch,,message
* <p>
* 使fragment,setDataonActivityCreated
* ,setDatapresenter,,daggeronActivityCreated
* ,,setData,onActivityCreated
*
*
* @param data
*/
public void setData(Object data) {
}
/**
* 使fragment,setDataonActivityCreated
* ,setDatapresenter,,daggeronActivityCreated
* ,,setData,onActivityCreated
*
*/
public void setData() {
}
/**
* onResumeonUserVisibleonFirstUserVisible
*/
private boolean isFirstResume = true;
@Override
public void onResume() {
super.onResume();
if (isFirstResume) {
isFirstResume = false;
return;
}
if (getUserVisibleHint()) {
onUserVisible();
}
}
@Override
public void onPause() {
super.onPause();
if (getUserVisibleHint()) {
onUserInvisible();
}
}
private boolean isFirstVisible = true;
private boolean isFirstInvisible = true;
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
if (isFirstVisible) {
isFirstVisible = false;
initPrepare();
} else {
onUserVisible();
}
} else {
if (isFirstInvisible) {
isFirstInvisible = false;
onFirstUserInvisible();
} else {
onUserInvisible();
}
}
}
public synchronized void initPrepare() {
if (isPrepared) {
onFirstUserVisible();
} else {
isPrepared = true;
}
}
/**
* fragment
*/
public void onFirstUserVisible() {
initView();
initData();
initListener();
}
/**
* fragmentonResume
*/
public void onUserVisible() {
}
/**
* fragment
*/
public void onFirstUserInvisible() {
}
/**
* fragmentonPause
*/
public void onUserInvisible() {
}
}

@ -0,0 +1,94 @@
package com.rehome.meetingbook.bean;
import java.util.List;
/**
* Create By HuangWenFei
* 2022-12-20 17:16
*
*/
public class AppointmentDateDetailListBean {
private String Total;
private List<RowsBean> Rows;
public String getTotal() {
return Total;
}
public void setTotal(String Total) {
this.Total = Total;
}
public List<RowsBean> getRows() {
return Rows;
}
public void setRows(List<RowsBean> Rows) {
this.Rows = Rows;
}
public static class RowsBean {
//培训考试模式20001日常培训考试20002集中培训考试
private String psmodel;
//预约日期格式HH:mm
private String yyrq;
//培训考试起始时间格式HH:mm
private String pskssj_s;
//培训考试结束时间格式HH:mm
private String pskssj_e;
//预约总人数
private String rs;
//还可预约人数
private String kyyrs;
public String getPsmodel() {
return psmodel;
}
public void setPsmodel(String psmodel) {
this.psmodel = psmodel;
}
public String getYyrq() {
return yyrq;
}
public void setYyrq(String yyrq) {
this.yyrq = yyrq;
}
public String getPskssj_s() {
return pskssj_s;
}
public void setPskssj_s(String pskssj_s) {
this.pskssj_s = pskssj_s;
}
public String getPskssj_e() {
return pskssj_e;
}
public void setPskssj_e(String pskssj_e) {
this.pskssj_e = pskssj_e;
}
public String getRs() {
return rs;
}
public void setRs(String rs) {
this.rs = rs;
}
public String getKyyrs() {
return kyyrs;
}
public void setKyyrs(String kyyrs) {
this.kyyrs = kyyrs;
}
}
}

@ -0,0 +1,64 @@
package com.rehome.meetingbook.bean;
import java.util.List;
/**
* Create By HuangWenFei
* 2022-12-20 16:48
*
*/
public class AppointmentDateListBean {
private String Total;
private List<RowsBean> Rows;
public String getTotal() {
return Total;
}
public void setTotal(String Total) {
this.Total = Total;
}
public List<RowsBean> getRows() {
return Rows;
}
public void setRows(List<RowsBean> Rows) {
this.Rows = Rows;
}
public static class RowsBean {
//预约日期格式yyyy-MM-dd
private String yyrq;
//预约日期格式yyyy-M-d
private String yyrq2;
//预约总人数
private String rs;
public String getYyrq() {
return yyrq;
}
public void setYyrq(String yyrq) {
this.yyrq = yyrq;
}
public String getYyrq2() {
return yyrq2;
}
public void setYyrq2(String yyrq2) {
this.yyrq2 = yyrq2;
}
public String getRs() {
return rs;
}
public void setRs(String rs) {
this.rs = rs;
}
}
}

@ -0,0 +1,51 @@
package com.rehome.meetingbook.bean;
import java.util.List;
/**
*
*/
public class AppointmentLevelBean {
private String Total;
private List<RowsBean> Rows;
public String getTotal() {
return Total;
}
public void setTotal(String Total) {
this.Total = Total;
}
public List<RowsBean> getRows() {
return Rows;
}
public void setRows(List<RowsBean> Rows) {
this.Rows = Rows;
}
public static class RowsBean {
//id
private String id;
//预约等级
private String text;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
}

@ -0,0 +1,154 @@
package com.rehome.meetingbook.bean;
import java.util.ArrayList;
import java.util.List;
/**
* Create By HuangWenFei
* 2022-12-10 14:27
*
*/
public class AppointmentMemberBean {
private String mainid;
private List<RowsBean> Rows = new ArrayList<>();
public String getMainid() {
return mainid;
}
public void setMainid(String mainid) {
this.mainid = mainid;
}
public List<RowsBean> getRows() {
return Rows;
}
public void setRows(List<RowsBean> Rows) {
this.Rows = Rows;
}
public static class RowsBean {
//预约时间格式yyyy-MM-dd HH:mm
private String yyrq="";
//预约等级ID
private String pszb="";
//预约等级名称
private String pszbName="";
//预约部门ID
private String psbm="";
//预约部门名称
private String psbmName="";
//预约班组ID
private String psbz="";
//预约班组名称
private String psbzName="";
//姓名
private String xm="";
//身份证号
private String sfzh="";
//是否为工作票负责人培训厂级0否1是,部门或班组级:空值)
private String iszzpfzr="";
//是否特种作业人员
private String istzzy="";
//备注(三种人授权类型或特种作业工种)
private String bz="";
public String getYyrq() {
return yyrq;
}
public void setYyrq(String yyrq) {
this.yyrq = yyrq;
}
public String getPszb() {
return pszb;
}
public void setPszb(String pszb) {
this.pszb = pszb;
}
public String getPsbm() {
return psbm;
}
public void setPsbm(String psbm) {
this.psbm = psbm;
}
public String getPsbz() {
return psbz;
}
public void setPsbz(String psbz) {
this.psbz = psbz;
}
public String getXm() {
return xm;
}
public void setXm(String xm) {
this.xm = xm;
}
public String getSfzh() {
return sfzh;
}
public void setSfzh(String sfzh) {
this.sfzh = sfzh;
}
public String getIszzpfzr() {
return iszzpfzr;
}
public void setIszzpfzr(String iszzpfzr) {
this.iszzpfzr = iszzpfzr;
}
public String getIstzzy() {
return istzzy;
}
public void setIstzzy(String istzzy) {
this.istzzy = istzzy;
}
public String getBz() {
return bz;
}
public void setBz(String bz) {
this.bz = bz;
}
public String getPszbName() {
return pszbName;
}
public void setPszbName(String pszbName) {
this.pszbName = pszbName;
}
public String getPsbmName() {
return psbmName;
}
public void setPsbmName(String psbmName) {
this.psbmName = psbmName;
}
public String getPsbzName() {
return psbzName;
}
public void setPsbzName(String psbzName) {
this.psbzName = psbzName;
}
}
}

@ -0,0 +1,52 @@
package com.rehome.meetingbook.bean;
/**
*
*/
public class AppointmentMemberCount {
private boolean isyy;
private int rs;
private String msg;
private String times;
private String timee;
public boolean isIsyy() {
return isyy;
}
public void setIsyy(boolean isyy) {
this.isyy = isyy;
}
public int getRs() {
return rs;
}
public void setRs(int rs) {
this.rs = rs;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getTimes() {
return times;
}
public void setTimes(String times) {
this.times = times;
}
public String getTimee() {
return timee;
}
public void setTimee(String timee) {
this.timee = timee;
}
}

@ -0,0 +1,240 @@
package com.rehome.meetingbook.bean;
import java.util.List;
/**
* Create By HuangWenFei
* 2022-12-01 14:57
*
*/
public class AppointmentResultBean {
private String Total;
private List<RowsBean> Rows;
public String getTotal() {
return Total;
}
public void setTotal(String Total) {
this.Total = Total;
}
public List<RowsBean> getRows() {
return Rows;
}
public void setRows(List<RowsBean> Rows) {
this.Rows = Rows;
}
public static class RowsBean {
private String yylx;
private String cbsname;
private String shstate;
private String xxfzrname;
private String psmodelname;
private String yyrq;
private String pszb;
private String psbm;
private String psbz;
private String xm;
private String sfzh;
private String iszzpfzr;
private String istzzy;
private String bz;
private String sszt;
private String ps_ssjd;
private String ks_istg;
private String ks_ksfs;
private String ks_ykscs;
private String issendrl;
private String isys;
private String shsj;
private String yyrxm;
public String getYylx() {
return yylx;
}
public void setYylx(String yylx) {
this.yylx = yylx;
}
public String getCbsname() {
return cbsname;
}
public void setCbsname(String cbsname) {
this.cbsname = cbsname;
}
public String getShstate() {
return shstate;
}
public void setShstate(String shstate) {
this.shstate = shstate;
}
public String getXxfzrname() {
return xxfzrname;
}
public void setXxfzrname(String xxfzrname) {
this.xxfzrname = xxfzrname;
}
public String getPsmodelname() {
return psmodelname;
}
public void setPsmodelname(String psmodelname) {
this.psmodelname = psmodelname;
}
public String getYyrq() {
return yyrq;
}
public void setYyrq(String yyrq) {
this.yyrq = yyrq;
}
public String getPszb() {
return pszb;
}
public void setPszb(String pszb) {
this.pszb = pszb;
}
public String getPsbm() {
return psbm;
}
public void setPsbm(String psbm) {
this.psbm = psbm;
}
public String getPsbz() {
return psbz;
}
public void setPsbz(String psbz) {
this.psbz = psbz;
}
public String getXm() {
return xm;
}
public void setXm(String xm) {
this.xm = xm;
}
public String getSfzh() {
return sfzh;
}
public void setSfzh(String sfzh) {
this.sfzh = sfzh;
}
public String getIszzpfzr() {
return iszzpfzr;
}
public void setIszzpfzr(String iszzpfzr) {
this.iszzpfzr = iszzpfzr;
}
public String getIstzzy() {
return istzzy;
}
public void setIstzzy(String istzzy) {
this.istzzy = istzzy;
}
public String getBz() {
return bz;
}
public void setBz(String bz) {
this.bz = bz;
}
public String getSszt() {
return sszt;
}
public void setSszt(String sszt) {
this.sszt = sszt;
}
public String getPs_ssjd() {
return ps_ssjd;
}
public void setPs_ssjd(String ps_ssjd) {
this.ps_ssjd = ps_ssjd;
}
public String getKs_istg() {
return ks_istg;
}
public void setKs_istg(String ks_istg) {
this.ks_istg = ks_istg;
}
public String getKs_ksfs() {
return ks_ksfs;
}
public void setKs_ksfs(String ks_ksfs) {
this.ks_ksfs = ks_ksfs;
}
public String getKs_ykscs() {
return ks_ykscs;
}
public void setKs_ykscs(String ks_ykscs) {
this.ks_ykscs = ks_ykscs;
}
public String getIssendrl() {
return issendrl;
}
public void setIssendrl(String issendrl) {
this.issendrl = issendrl;
}
public String getIsys() {
return isys;
}
public void setIsys(String isys) {
this.isys = isys;
}
public String getShsj() {
return shsj;
}
public void setShsj(String shsj) {
this.shsj = shsj;
}
public String getYyrxm() {
return yyrxm;
}
public void setYyrxm(String yyrxm) {
this.yyrxm = yyrxm;
}
}
}

@ -0,0 +1,76 @@
package com.rehome.meetingbook.bean;
import java.util.List;
/**
* Create By HuangWenFei
* 2022-12-09 11:33
*
*/
public class CbsBaseBean {
//姓名
private String xm;
//身份证号码
private String zjhm;
//承包商名称
private String cbsname;
//承包商人员集合
private List<RowsBean> listcbsusers;
public String getXm() {
return xm;
}
public void setXm(String xm) {
this.xm = xm;
}
public String getZjhm() {
return zjhm;
}
public void setZjhm(String zjhm) {
this.zjhm = zjhm;
}
public String getCbsname() {
return cbsname;
}
public void setCbsname(String cbsname) {
this.cbsname = cbsname;
}
public List<RowsBean> getListcbsusers() {
return listcbsusers;
}
public void setListcbsusers(List<RowsBean> listcbsusers) {
this.listcbsusers = listcbsusers;
}
public static class RowsBean {
//姓名
private String xm;
//身份证号码
private String zjhm;
public String getXm() {
return xm;
}
public void setXm(String xm) {
this.xm = xm;
}
public String getZjhm() {
return zjhm;
}
public void setZjhm(String zjhm) {
this.zjhm = zjhm;
}
}
}

@ -0,0 +1,59 @@
package com.rehome.meetingbook.bean;
/**
* Create By HuangWenFei
* 2022-12-12 11:18
*
*/
public class CbsCanAppointmentBean {
//是否可以预约true:可以预约false:不可以预约)
private Boolean isyy;
//可以预约的人数
private String rs;
//信息提示
private String msg;
//占用时间起始
private String times;
//占用时间结束
private String timee;
public Boolean isIsyy() {
return isyy;
}
public void setIsyy(Boolean isyy) {
this.isyy = isyy;
}
public String getRs() {
return rs;
}
public void setRs(String rs) {
this.rs = rs;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getTimes() {
return times;
}
public void setTimes(String times) {
this.times = times;
}
public String getTimee() {
return timee;
}
public void setTimee(String timee) {
this.timee = timee;
}
}

@ -0,0 +1,29 @@
package com.rehome.meetingbook.bean;
/**
* Create By HuangWenFei
* 2022-12-13 11:11
*
*/
public class CbsYYUsersResultBean {
//执行结果 1成功0失败2发生异常
private String result;
//提示信息
private String msg;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}

@ -0,0 +1,131 @@
package com.rehome.meetingbook.bean;
import java.util.List;
/**
* Create By HuangWenFei
* 2022-12-08 14:27
*
*/
public class ContactListBean {
private List<RowsBean> Rows;
public List<RowsBean> getRows() {
return Rows;
}
public void setRows(List<RowsBean> Rows) {
this.Rows = Rows;
}
public static class RowsBean {
/**
* DeptName :
* orderlist : [{"name":"高苑辉","telephone":"","address_tel":""},{"name":"张洪刚","telephone":"","address_tel":""},{"name":"石喜光","telephone":"","address_tel":""},{"name":"齐晓波","telephone":"","address_tel":""},{"name":"陈运强","telephone":"","address_tel":""}]
*/
private String DeptName;
private List<OrderlistBean> orderlist;
public String getDeptName() {
return DeptName;
}
public void setDeptName(String DeptName) {
this.DeptName = DeptName;
}
public List<OrderlistBean> getOrderlist() {
return orderlist;
}
public void setOrderlist(List<OrderlistBean> orderlist) {
this.orderlist = orderlist;
}
public static class OrderlistBean {
/**
* name :
* telephone :
* address_tel :
*/
private String name;
private String telephone;
private String address_tel;
private String groupName;
private String man_id;
private String account_head;
public OrderlistBean(String name, String telephone, String address_tel, String groupName, String man_id, String account_head) {
this.name = name;
this.telephone = telephone;
this.address_tel = address_tel;
this.groupName = groupName;
this.man_id = man_id;
this.account_head = account_head;
}
public OrderlistBean(String groupName) {
this.groupName = groupName;
}
public OrderlistBean() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getAddress_tel() {
return address_tel;
}
public void setAddress_tel(String address_tel) {
this.address_tel = address_tel;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public String getMan_id() {
return man_id;
}
public void setMan_id(String man_id) {
this.man_id = man_id;
}
public String getAccount_head() {
return account_head;
}
public void setAccount_head(String account_head) {
this.account_head = account_head;
}
}
}
}

@ -0,0 +1,50 @@
package com.rehome.meetingbook.bean;
import java.util.List;
/**
*
*/
public class DeptBean {
private String Total;
private List<RowsBean> Rows;
public String getTotal() {
return Total;
}
public void setTotal(String Total) {
this.Total = Total;
}
public List<RowsBean> getRows() {
return Rows;
}
public void setRows(List<RowsBean> Rows) {
this.Rows = Rows;
}
public static class RowsBean {
private String deptname;
private String deptcode;
public String getDeptname() {
return deptname;
}
public void setDeptname(String deptname) {
this.deptname = deptname;
}
public String getDeptcode() {
return deptcode;
}
public void setDeptcode(String deptcode) {
this.deptcode = deptcode;
}
}
}

@ -0,0 +1,50 @@
package com.rehome.meetingbook.bean;
import java.util.List;
/**
*
*/
public class DeptBzBean {
private String Total;
private List<RowsBean> Rows;
public String getTotal() {
return Total;
}
public void setTotal(String Total) {
this.Total = Total;
}
public List<RowsBean> getRows() {
return Rows;
}
public void setRows(List<RowsBean> Rows) {
this.Rows = Rows;
}
public static class RowsBean {
private String deptname;
private String deptcode;
public String getDeptname() {
return deptname;
}
public void setDeptname(String deptname) {
this.deptname = deptname;
}
public String getDeptcode() {
return deptcode;
}
public void setDeptcode(String deptcode) {
this.deptcode = deptcode;
}
}
}

@ -0,0 +1,47 @@
package com.rehome.meetingbook.bean;
/**
* Create By HuangWenFei
* 2022-11-25 19:35
*
*/
public class GridViewBean {
private String title;
private int imageid;
private int backgroup;
private boolean isShow;
public int getImageid() {
return imageid;
}
public void setImageid(int imageid) {
this.imageid = imageid;
}
public int getBackgroup() {
return backgroup;
}
public void setBackgroup(int backgroup) {
this.backgroup = backgroup;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public boolean isShow() {
return isShow;
}
public void setShow(boolean show) {
isShow = show;
}
}

@ -0,0 +1,79 @@
package com.rehome.meetingbook.bean;
/**
* Create By HuangWenFei
* 2022-12-12 17:17
*
*/
public class UploadCbsMainDataBean {
//承包商名称(全称)
private String cbsname;
//预约人手机号
private String yyrdh;
//预约人姓名
private String yyrxm;
//厂内项目负责人工号
private String xxfzrid;
//厂内项目负责人姓名
private String xxfzrname;
//培训考试模式ID
private String psmodel;
//是否为常委承包商0否1是
private String iscw="0";
public String getCbsname() {
return cbsname;
}
public void setCbsname(String cbsname) {
this.cbsname = cbsname;
}
public String getYyrdh() {
return yyrdh;
}
public void setYyrdh(String yyrdh) {
this.yyrdh = yyrdh;
}
public String getYyrxm() {
return yyrxm;
}
public void setYyrxm(String yyrxm) {
this.yyrxm = yyrxm;
}
public String getXxfzrid() {
return xxfzrid;
}
public void setXxfzrid(String xxfzrid) {
this.xxfzrid = xxfzrid;
}
public String getXxfzrname() {
return xxfzrname;
}
public void setXxfzrname(String xxfzrname) {
this.xxfzrname = xxfzrname;
}
public String getPsmodel() {
return psmodel;
}
public void setPsmodel(String psmodel) {
this.psmodel = psmodel;
}
public String getIscw() {
return iscw;
}
public void setIscw(String iscw) {
this.iscw = iscw;
}
}

@ -0,0 +1,39 @@
package com.rehome.meetingbook.bean;
/**
* Create By HuangWenFei
* 2022-12-13 10:58
*
*/
public class UploadCbsMainDataResultBean {
//执行结果 1成功0失败2发生异常
private String result;
//主数据ID
private String mainid;
//提示信息
private String msg;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public String getMainid() {
return mainid;
}
public void setMainid(String mainid) {
this.mainid = mainid;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}

@ -0,0 +1,69 @@
package com.rehome.meetingbook.bean;
import java.util.List;
/**
*
*/
public class WorkMemberBean {
private String Total;
private List<DeptBean.RowsBean> Rows;
public String getTotal() {
return Total;
}
public void setTotal(String Total) {
this.Total = Total;
}
public List<DeptBean.RowsBean> getRows() {
return Rows;
}
public void setRows(List<DeptBean.RowsBean> Rows) {
this.Rows = Rows;
}
public static class RowsBean {
private String man_id;
private String name;
private String deptname;
private String deptcode;
public String getMan_id() {
return man_id;
}
public void setMan_id(String man_id) {
this.man_id = man_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDeptname() {
return deptname;
}
public void setDeptname(String deptname) {
this.deptname = deptname;
}
public String getDeptcode() {
return deptcode;
}
public void setDeptcode(String deptcode) {
this.deptcode = deptcode;
}
}
}

@ -0,0 +1,73 @@
package com.rehome.meetingbook.bean;
import java.util.List;
/**
* Create By HuangWenFei
* 2022-12-21 11:17
*
*/
public class YunQingExalBean {
private String Total;
private List<RowsBean> Rows;
public String getTotal() {
return Total;
}
public void setTotal(String Total) {
this.Total = Total;
}
public List<RowsBean> getRows() {
return Rows;
}
public void setRows(List<RowsBean> Rows) {
this.Rows = Rows;
}
public static class RowsBean {
//预约日期格式HH:mm
private String rq;
//培训考试起始时间格式HH:mm
private String times;
//培训考试结束时间格式HH:mm
private String timee;
//预约总人数
private String department_name;
public String getRq() {
return rq;
}
public void setRq(String rq) {
this.rq = rq;
}
public String getTimes() {
return times;
}
public void setTimes(String times) {
this.times = times;
}
public String getTimee() {
return timee;
}
public void setTimee(String timee) {
this.timee = timee;
}
public String getDepartment_name() {
return department_name;
}
public void setDepartment_name(String department_name) {
this.department_name = department_name;
}
}
}

@ -0,0 +1,192 @@
package com.rehome.meetingbook.ui.activity;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbManager;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import com.rehome.meetingbook.MainActivity;
import com.rehome.meetingbook.R;
import com.rehome.meetingbook.ZKUSBManager.ZKUSBManager;
import com.rehome.meetingbook.ZKUSBManager.ZKUSBManagerListener;
import com.rehome.meetingbook.base.BaseActivity2;
import com.rehome.meetingbook.databinding.ActivityLoginBinding;
import com.rehome.meetingbook.utils.ControllerActivity;
import com.rehome.meetingbook.weiget.CustomLoadingDialog;
import com.zkteco.android.biometric.core.device.ParameterHelper;
import com.zkteco.android.biometric.core.device.TransportType;
import com.zkteco.android.biometric.core.utils.LogHelper;
import com.zkteco.android.biometric.module.idcard.IDCardReader;
import com.zkteco.android.biometric.module.idcard.IDCardReaderFactory;
import com.zkteco.android.biometric.module.idcard.IDCardType;
import com.zkteco.android.biometric.module.idcard.exception.IDCardReaderException;
import com.zkteco.android.biometric.module.idcard.meta.IDCardInfo;
import com.zkteco.android.biometric.module.idcard.meta.IDPRPCardInfo;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.widget.Toolbar;
/**
* Create By HuangWenFei
* 2022-11-29 10:44
*
*/
public class LoginActivity extends BaseActivity2<ActivityLoginBinding> {
private long exitTime = 0;
private String lastBtnCkick = "appointment"; // appointment search
private CustomLoadingDialog customDialog;
private String xm;
private final ActivityResultLauncher<Intent> mAppointmentSearchStartActivityForResult = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
// 处理 result
// Intent data = result.getData();
// if (data != null) {
// String idCardNo = data.getStringExtra("sfzh");
// if (idCardNo != null) {
// Intent intent = new Intent();
// intent.setClass(LoginActivity.this, AppointmentListActivity.class);
// intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
// intent.putExtra("idCardNo", idCardNo);
// startActivity(intent);
// }
// }
}
}
);
//隐藏
@Override
protected void initView() {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
binding.tvVersion.setText("版本号:" + getVersionName());
binding.llCloseKey.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
hideKeyBoard(LoginActivity.this);
}
});
}
@Override
protected void initData() {
}
@Override
protected ActivityLoginBinding getBinding() {
return ActivityLoginBinding.inflate(LayoutInflater.from(this));
}
@Override
protected Toolbar getToolbar() {
return binding.toolbarView.toolbar;
}
public void setBack() {
mToolbar.setNavigationIcon(R.mipmap.back);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
public static void hideKeyBoard(Activity activity) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
//Find the currently focused view, so we can grab the correct window token from it.
View view = activity.getCurrentFocus();
//If no view currently has focus, create a new one, just so we can grab a window token from it
if (view == null) {
view = new View(activity);
}
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
//身份证号码格式校验
public boolean checkIdCardNoFormat(String idCardNo) {
String reg = "^\\d{15}$|^\\d{17}[0-9Xx]$";
return idCardNo.matches(reg);
}
// 按两次返回键退出程序
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK
&& event.getAction() == KeyEvent.ACTION_DOWN) {
if ((System.currentTimeMillis() - exitTime) > 2000) {
showToast("再按一次退出程序");
exitTime = System.currentTimeMillis();
} else {
ControllerActivity.getAppManager().finishAllActivity();
finish();
System.exit(0);
//NohttpUtils.getInstance().cancelAll();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
/**
* :
*
* @return null
*/
private String getVersionName() {
//1,包管理者对象packageManager
PackageManager pm = getPackageManager();
//2,从包的管理者对象中,获取指定包名的基本信息(版本名称,版本号),传0代表获取基本信息
try {
PackageInfo packageInfo = pm.getPackageInfo(getPackageName(), 0);
//3,获取版本名称
return packageInfo.versionName;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

@ -0,0 +1,341 @@
package com.rehome.meetingbook.ui.activity;
import androidx.appcompat.widget.Toolbar;
import android.graphics.Color;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import com.haibin.calendarview.Calendar;
import com.haibin.calendarview.CalendarView;
import com.rehome.meetingbook.Contans;
import com.rehome.meetingbook.R;
import com.rehome.meetingbook.adapter.AppointmentDateAdapter;
import com.rehome.meetingbook.adapter.YunQingExalAdapter;
import com.rehome.meetingbook.base.BaseActivity2;
import com.rehome.meetingbook.bean.AppointmentDateDetailListBean;
import com.rehome.meetingbook.bean.AppointmentDateListBean;
import com.rehome.meetingbook.bean.AppointmentLevelBean;
import com.rehome.meetingbook.bean.YunQingExalBean;
import com.rehome.meetingbook.databinding.ActivitySimpleBinding;
import com.rehome.meetingbook.utils.GsonUtils;
import com.rehome.meetingbook.utils.HttpListener;
import com.rehome.meetingbook.utils.NoProgresshttpUtils;
import com.rehome.meetingbook.utils.StatusBarUtil;
import com.yolanda.nohttp.NoHttp;
import com.yolanda.nohttp.RequestMethod;
import com.yolanda.nohttp.rest.Request;
import com.yolanda.nohttp.rest.Response;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SimpleActivity extends BaseActivity2<ActivitySimpleBinding>implements
CalendarView.OnCalendarSelectListener,
CalendarView.OnYearChangeListener{
private int mYear;
//培训考试模式
private List<AppointmentLevelBean.RowsBean> appointmentExamModel;
//日常培训考试
private List<AppointmentDateDetailListBean.RowsBean> daylyExamList;
private AppointmentDateAdapter daylyAdapter;
//运行部考试
private List<YunQingExalBean.RowsBean> yqExalList;
private YunQingExalAdapter yqExalAdapter;
@Override
protected ActivitySimpleBinding getBinding() {
return ActivitySimpleBinding.inflate(LayoutInflater.from(this));
}
@Override
protected Toolbar getToolbar() {
return binding.toolbarView.toolbar;
}
@Override
protected void initView() {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
StatusBarUtil.setColor(SimpleActivity.this, Color.parseColor("#138CF2"));
binding.toolbarView.title.setText("预约一览");
setExitZx();
appointmentExamModel = new ArrayList<>();
daylyExamList = new ArrayList<>();
yqExalList = new ArrayList<>();
daylyAdapter = new AppointmentDateAdapter(SimpleActivity.this,daylyExamList);
yqExalAdapter = new YunQingExalAdapter(SimpleActivity.this,yqExalList);
binding.lvAppointmentDayly.setAdapter(daylyAdapter);
binding.lvAppointmentYy.setAdapter(yqExalAdapter);
mYear = binding.calendarView.getCurYear();
binding.tvYear.setText(String.valueOf(binding.calendarView.getCurYear()));
binding.flCurrent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
binding.calendarView.scrollToCurrent();
}
});
binding.tvMonthDay.setText(binding.calendarView.getCurMonth() + "月" + binding.calendarView.getCurDay() + "日");
binding.tvLunar.setText("今日");
binding.tvCurrentDay.setText(String.valueOf(binding.calendarView.getCurDay()));
binding.calendarView.setOnYearChangeListener(this);
binding.calendarView.setOnCalendarSelectListener(this);
}
@Override
protected void initData() {
// int year = binding.calendarView.getCurYear();
// int month = binding.calendarView.getCurMonth();
//
// Map<String, Calendar> map = new HashMap<>();
// map.put(getSchemeCalendar(year, month, 3, 0xFF40db25, "假").toString(),
// getSchemeCalendar(year, month, 3, 0xFF40db25, "假"));
// map.put(getSchemeCalendar(year, month, 6, 0xFF40db25, "事").toString(),
// getSchemeCalendar(year, month, 6, 0xFF40db25, "事"));
// map.put(getSchemeCalendar(year, month, 9, 0xFF40db25, "议").toString(),
// getSchemeCalendar(year, month, 9, 0xFF40db25, "议"));
// map.put(getSchemeCalendar(year, month, 13, 0xFF40db25, "记").toString(),
// getSchemeCalendar(year, month, 13, 0xFF40db25, "记"));
// map.put(getSchemeCalendar(year, month, 14, 0xFF40db25, "记").toString(),
// getSchemeCalendar(year, month, 14, 0xFF40db25, "记"));
// map.put(getSchemeCalendar(year, month, 15, 0xFF40db25, "假").toString(),
// getSchemeCalendar(year, month, 15, 0xFF40db25, "假"));
// map.put(getSchemeCalendar(year, month, 18, 0xFF40db25, "记").toString(),
// getSchemeCalendar(year, month, 18, 0xFF40db25, "记"));
// map.put(getSchemeCalendar(year, month, 25, 0xFF40db25, "假").toString(),
// getSchemeCalendar(year, month, 25, 0xFF40db25, "假"));
// map.put(getSchemeCalendar(year, month, 27, 0xFF40db25, "多").toString(),
// getSchemeCalendar(year, month, 27, 0xFF40db25, "多"));
// //此方法在巨大的数据量上不影响遍历性能,推荐使用
// binding.calendarView.setSchemeDate(map);
//获取培训考试模式
getExamModel();
}
private Calendar getSchemeCalendar(int year, int month, int day, int color, String text) {
Calendar calendar = new Calendar();
calendar.setYear(year);
calendar.setMonth(month);
calendar.setDay(day);
calendar.setSchemeColor(color);//如果单独标记颜色、则会使用这个颜色
calendar.setScheme(text);
return calendar;
}
private void setExitZx() {
mToolbar.setNavigationIcon(R.mipmap.back);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
@Override
public void onCalendarOutOfRange(Calendar calendar) {
}
@Override
public void onCalendarSelect(Calendar calendar, boolean isClick) {
binding.tvLunar.setVisibility(View.VISIBLE);
binding.tvYear.setVisibility(View.VISIBLE);
binding.tvMonthDay.setText(calendar.getMonth() + "月" + calendar.getDay() + "日");
binding.tvYear.setText(String.valueOf(calendar.getYear()));
binding.tvLunar.setText(calendar.getLunar());
mYear = calendar.getYear();
Log.i("app","onCalendarSelect");
Log.i("app",String.valueOf(calendar.getYear())+"-"+String.valueOf(calendar.getMonth())+"-"+calendar.getDay());
getDateDetailList(String.valueOf(calendar.getYear())+"-"+String.format("%02d", calendar.getMonth())+"-"+String.format("%02d", calendar.getDay()));
//获取生产岗位培训室使用时间
getScgwDateDetailList(String.valueOf(calendar.getYear())+"-"+String.format("%02d", calendar.getMonth())+"-"+String.format("%02d", calendar.getDay()));
}
@Override
public void onYearChange(int year) {
binding.tvMonthDay.setText(String.valueOf(year));
}
private void getExamModel() {
String url = Contans.BASE_URL + Contans.GET_YYTYPEANDEXAMMODEL_URL + "PSKSMS";
Log.i("app", url);
Request<String> request = NoHttp.createStringRequest(url, RequestMethod.GET);
NoProgresshttpUtils.getInstance().add(0, request, new HttpListener<String>() {
@Override
public void onSucceed(int what, Response<String> response) {
Log.i("app", "----------------");
String result = response.get();
Log.i("app", result);
AppointmentLevelBean bean = GsonUtils.GsonToBean(result, AppointmentLevelBean.class);
if (bean != null && bean.getRows() != null && bean.getRows().size() > 0) {
appointmentExamModel.clear();
appointmentExamModel.addAll(bean.getRows());
//获取有预约的日期(从当前时间起)
getDateList();
}
}
@Override
public void onFailed(int what, Response<String> response) {
}
});
}
//获取有预约的日期(从当前时间起)
private void getDateList() {
String url = Contans.BASE_URL + Contans.GET_YYDATE_URL;
Log.i("app", url);
Request<String> request = NoHttp.createStringRequest(url, RequestMethod.GET);
NoProgresshttpUtils.getInstance().add(0, request, new HttpListener<String>() {
@Override
public void onSucceed(int what, Response<String> response) {
Log.i("app", "----------------");
String result = response.get();
Log.i("app", result);
AppointmentDateListBean bean = GsonUtils.GsonToBean(result, AppointmentDateListBean.class);
if (bean != null) {
if (bean.getRows() != null && bean.getRows().size() > 0) {
Map<String, Calendar> map = new HashMap<>();
for (AppointmentDateListBean.RowsBean item:bean.getRows()) {
if(!TextUtils.isEmpty(item.getYyrq())){
String year = item.getYyrq().substring(0,4);
String month = item.getYyrq().substring(5,7);
String day = item.getYyrq().substring(8,10);
map.put(getSchemeCalendar(Integer.parseInt(year),Integer.parseInt(month),Integer.parseInt(day),0xFF40db25,"假").toString(),
getSchemeCalendar(Integer.parseInt(year),Integer.parseInt(month),Integer.parseInt(day),0xFF40db25,"假"));
}
}
//此方法在巨大的数据量上不影响遍历性能,推荐使用
binding.calendarView.setSchemeDate(map);
// //获取每天预约详细
// getDateDetailList(bean.getRows().get(0).getYyrq());
// //获取生产岗位培训室使用时间
// getScgwDateDetailList(bean.getRows().get(0).getYyrq());
binding.calendarView.scrollToCurrent();
}
} else {
showToast("预约数据");
}
}
@Override
public void onFailed(int what, Response<String> response) {
}
});
}
//获取每天预约详细
private void getDateDetailList(String dateStr) {
binding.tvTimeDay1.setText(dateStr+":");
binding.tvTimeDay3.setText(dateStr+":");
String url = Contans.BASE_URL + Contans.GET_YYDATEDETAILLIST_URL+dateStr;
Log.i("app", url);
Request<String> request = NoHttp.createStringRequest(url, RequestMethod.GET);
NoProgresshttpUtils.getInstance().add(0, request, new HttpListener<String>() {
@Override
public void onSucceed(int what, Response<String> response) {
Log.i("app", "----------------");
String result = response.get();
Log.i("app", result);
AppointmentDateDetailListBean bean = GsonUtils.GsonToBean(result, AppointmentDateDetailListBean.class);
if (bean != null) {
if (bean.getRows() != null && bean.getRows().size() > 0) {
if(appointmentExamModel.size()>0){
String idDayly = "";
daylyExamList.clear();
for (AppointmentLevelBean.RowsBean modelItem:appointmentExamModel) {
if(modelItem.getText().equals("日常培训考试")){
idDayly = modelItem.getId();
}
}
for (AppointmentDateDetailListBean.RowsBean item:bean.getRows()) {
if(item.getPsmodel().equals(idDayly)){
daylyExamList.add(item);
}
}
daylyAdapter.notifyDataSetChanged();
}
}else{
daylyExamList.clear();
daylyAdapter.notifyDataSetChanged();
}
}
}
@Override
public void onFailed(int what, Response<String> response) {
}
});
}
//获取每天预约详细
private void getScgwDateDetailList(String dateStr) {
String url = Contans.BASE_URL + Contans.GET_YYDATESCGW_URL+dateStr;
Log.i("app", url);
Request<String> request = NoHttp.createStringRequest(url, RequestMethod.GET);
NoProgresshttpUtils.getInstance().add(0, request, new HttpListener<String>() {
@Override
public void onSucceed(int what, Response<String> response) {
Log.i("app", "----------------");
String result = response.get();
Log.i("app", result);
YunQingExalBean bean = GsonUtils.GsonToBean(result, YunQingExalBean.class);
if (bean != null) {
if (bean.getRows() != null && bean.getRows().size() > 0) {
yqExalList.clear();
yqExalList.addAll(bean.getRows());
yqExalAdapter.notifyDataSetChanged();
}else{
yqExalList.clear();
yqExalAdapter.notifyDataSetChanged();
}
}
}
@Override
public void onFailed(int what, Response<String> response) {
}
});
}
}

@ -0,0 +1,52 @@
package com.rehome.meetingbook.ui.fragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.viewbinding.ViewBinding;
/**
* Create By HuangWenFei
* 2022-12-06 17:36
*
*/
public abstract class BaseFragment<T extends ViewBinding> extends Fragment {
protected Context context;
protected T binding;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
binding = getBinding(inflater, container);
return binding.getRoot();
}
protected abstract T getBinding(LayoutInflater inflater, ViewGroup container);
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
this.context = context;
}
@Override
public void onDetach() {
super.onDetach();
this.context = null;
}
}

@ -0,0 +1,47 @@
package com.rehome.meetingbook.utils;
import com.rehome.meetingbook.bean.ContactListBean;
import java.util.ArrayList;
import java.util.List;
/**
* Create By HuangWenFei
* 2022-12-08 15:38
*
*/
public class ContactDatas {
public static List<ContactListBean.RowsBean.OrderlistBean> getContanctList(ContactListBean bean) {
List<ContactListBean.RowsBean.OrderlistBean> orderlistBeanListEnd = new ArrayList<>();
List<ContactListBean.RowsBean> rowsBeanList = bean.getRows();
for (int i = 0; i < rowsBeanList.size(); i++) {
ContactListBean.RowsBean rowsBean = rowsBeanList.get(i);
if (rowsBean.getOrderlist() != null) {
List<ContactListBean.RowsBean.OrderlistBean> orderlistBeanList = rowsBean.getOrderlist();
if (orderlistBeanList.size() != 0) {
orderlistBeanListEnd.add(new ContactListBean.RowsBean.OrderlistBean("", "", "", rowsBean.getDeptName(),"",""));
for (ContactListBean.RowsBean.OrderlistBean orderlistBean : orderlistBeanList) {
orderlistBean.setGroupName(rowsBean.getDeptName());
}
orderlistBeanListEnd.addAll(orderlistBeanList);
}
}
}
return orderlistBeanListEnd;
}
}

@ -0,0 +1,113 @@
package com.rehome.meetingbook.utils;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import java.util.Stack;
/**
* Created by ruihong on 2017/10/28.
*/
public class ControllerActivity {
//activity栈
private static Stack<Activity> activityStack;
//使用单例模式
private static ControllerActivity instance;
private ControllerActivity() {
}
public static ControllerActivity getAppManager() {
if (instance == null) {
instance = new ControllerActivity();
}
return instance;
}
/***
* Activity
* @param activity
*/
public void addActivity(Activity activity) {
if (activityStack == null) {
activityStack = new Stack<Activity>();
}
activityStack.add(activity);
}
/**
* Activity
*/
public Activity currentActivity() {
if (activityStack.size() == 0) {
return null;
} else {
Activity activity = activityStack.lastElement();
return activity;
}
}
/**
* Activity
*/
public void finishActivity() {
Activity activity = activityStack.lastElement();
finishActivity(activity);
}
/**
* Activity
*/
public void finishActivity(Activity activity) {
if (activity != null) {
activityStack.remove(activity);
activity.finish();
activity = null;
}
}
/**
* Activity
*/
public void finishActivity(Class<?> cls) {
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
break;
}
}
}
/**
* Activity
*/
public void finishAllActivity() {
for (int i = 0; i < activityStack.size(); i++) {
if (null != activityStack.get(i)) {
activityStack.get(i).finish();
}
}
activityStack.clear();
}
/**
* 退
*
* @param context
*/
public void AppExit(Context context) {
try {
finishAllActivity();
ActivityManager activityMgr = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
activityMgr.killBackgroundProcesses(context.getPackageName());
System.exit(0);
} catch (Exception e) {
}
}
}

@ -0,0 +1,134 @@
package com.rehome.meetingbook.utils;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Create By HuangWenFei
* 2022-12-01 15:36
* gsonGSON
*/
public class GsonUtils {
private static Gson gson = null;
static {
if (gson == null) {
gson = new Gson();
}
}
private GsonUtils() {
}
/**
* json
*
* @param object
* @return
*/
public static String GsonString(Object object) {
String gsonString = null;
if (gson != null) {
gsonString = gson.toJson(object);
}
return gsonString;
}
/**
* bean
*
* @param gsonString
* @param cls
* @return
*/
public static <T> T GsonToBean(String gsonString, Class<T> cls) {
T t = null;
if (gson != null) {
try {
t = gson.fromJson(gsonString, cls);
} catch (Exception e) {
e.printStackTrace();
}
}
return t;
}
/**
* list
*
*
* @param gsonString
* @param cls
* @return
*/
public static <T> List<T> GsonToList(String gsonString, Class<T> cls) {
List<T> list = null;
if (gson != null) {
list = gson.fromJson(gsonString, new TypeToken<List<T>>() {
}.getType());
}
return list;
}
/**
* list
*
*
* @param json
* @param cls
* @param <T>
* @return
*/
public <T> List<T> jsonToList(String json, Class<T> cls) {
Gson gson = new Gson();
List<T> list = new ArrayList<T>();
JsonArray array = new JsonParser().parse(json).getAsJsonArray();
for (final JsonElement elem : array) {
list.add(gson.fromJson(elem, cls));
}
return list;
}
/**
* listmap
*
* @param gsonString
* @return
*/
public static <T> List<Map<String, T>> GsonToListMaps(String gsonString) {
List<Map<String, T>> list = null;
if (gson != null) {
list = gson.fromJson(gsonString,
new TypeToken<List<Map<String, T>>>() {
}.getType());
}
return list;
}
/**
* map
*
* @param gsonString
* @return
*/
public static <T> Map<String, T> GsonToMaps(String gsonString) {
Map<String, T> map = null;
if (gson != null) {
map = gson.fromJson(gsonString, new TypeToken<Map<String, T>>() {
}.getType());
}
return map;
}
}

@ -0,0 +1,27 @@
package com.rehome.meetingbook.utils;
import com.yolanda.nohttp.rest.Response;
/**
* Create By HuangWenFei
* 2022-11-29 15:29
* NoHttp
*/
public interface HttpListener<T> {
/**
*
*
* @param what
* @param response
*/
void onSucceed(int what, Response<T> response);
/**
*
*
* @param what
* @param response
*/
void onFailed(int what, Response<T> response);
}

@ -0,0 +1,140 @@
package com.rehome.meetingbook.utils;
/**
* Create By HuangWenFei
* 2022-11-29 15:27
*
*/
import android.app.Activity;
import android.content.DialogInterface;
import android.widget.Toast;
import com.rehome.meetingbook.weiget.WaitDialog;
import com.yolanda.nohttp.Logger;
import com.yolanda.nohttp.error.NetworkError;
import com.yolanda.nohttp.error.TimeoutError;
import com.yolanda.nohttp.error.URLError;
import com.yolanda.nohttp.error.UnKnownHostError;
import com.yolanda.nohttp.rest.OnResponseListener;
import com.yolanda.nohttp.rest.Request;
import com.yolanda.nohttp.rest.Response;
/**
* NoHttp
*/
public class HttpResponseListener<T> implements OnResponseListener {
private final Activity mActivity;
/**
* dialog
*/
private WaitDialog mDialog;
/**
*
*/
private final Request<T> mRequest;
/**
*
*/
private final HttpListener<T> callback;
/**
* dialog
*/
private final boolean isLoading;
/**
* @param mActivity dialog
* @param mRequest
* @param callback
* @param canCancel
* @param isLoading dialog
*/
public HttpResponseListener(Activity mActivity, final Request<T> mRequest, HttpListener<T> callback, boolean canCancel, boolean isLoading, String msg) {
this.mActivity = mActivity;
this.mRequest = mRequest;
if (isLoading) {
mDialog = new WaitDialog(mActivity, msg);
mDialog.setCancelable(canCancel);
mDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialogInterface) {
HttpResponseListener.this.mRequest.cancel();//取消请求
}
});
}
this.callback = callback;
this.isLoading = isLoading;
}
/**
*
*
* @param what
*/
@Override
public void onStart(int what) {
if (mDialog != null && !mDialog.isShowing() && !mActivity.isFinishing()) {
mDialog.show();
}
}
/**
*
*
* @param what
* @param response
*/
@Override
public void onSucceed(int what, Response response) {
if (callback != null) {
callback.onSucceed(what, response);
}
}
/**
*
*
* @param what
* @param response
*/
@Override
public void onFailed(int what, Response response) {
Exception exception = response.getException();
if (mActivity != null) {
if (exception instanceof NetworkError) {// 网络不好
Toast.makeText(mActivity, "网络异常", Toast.LENGTH_SHORT).show();
} else if (exception instanceof TimeoutError) {// 请求超时
Toast.makeText(mActivity, "请求超时", Toast.LENGTH_SHORT).show();
} else if (exception instanceof UnKnownHostError) {// 找不到服务器
Toast.makeText(mActivity, "找不到服务器", Toast.LENGTH_SHORT).show();
} else if (exception instanceof URLError) {// URL是错的
Toast.makeText(mActivity, "url出错", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(mActivity, "网络连接超时", Toast.LENGTH_SHORT).show();
}
}
Logger.e("错误:" + exception.getMessage());
if (callback != null)
callback.onFailed(what, response);
}
/**
*
*
* @param what
*/
@Override
public void onFinish(int what) {
if (mDialog != null && mDialog.isShowing()) {
mDialog.dismiss();
}
}
}

@ -0,0 +1,86 @@
package com.rehome.meetingbook.utils;
import com.yolanda.nohttp.rest.OnResponseListener;
import com.yolanda.nohttp.rest.Request;
import com.yolanda.nohttp.rest.Response;
/**
* Create By HuangWenFei
* 2022-11-29 15:31
* NoHttp
*/
public class HttpResponseListenerNoProgress<T> implements OnResponseListener {
/**
*
*/
private Request<T> mRequest;
/**
*
*/
private HttpListener<T> callback;
/**
*
* @param mRequest
* @param callback
*/
public HttpResponseListenerNoProgress(final Request<T> mRequest, HttpListener<T> callback) {
this.mRequest = mRequest;
this.callback = callback;
}
/**
*
*
* @param what
*/
@Override
public void onStart(int what) {
}
/**
*
*
* @param what
* @param response
*/
@Override
public void onSucceed(int what, Response response) {
if (callback != null) {
try {
callback.onSucceed(what, response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
*
*
* @param what
* @param response
*/
@Override
public void onFailed(int what, Response response) {
if (callback != null)
callback.onFailed(what, response);
}
/**
*
*
* @param what
*/
@Override
public void onFinish(int what) {
}
}

@ -0,0 +1,116 @@
package com.rehome.meetingbook.utils;
/**
* Create By HuangWenFei
* 2022-11-29 15:30
*
*/
import android.content.Context;
import com.rehome.meetingbook.R;
import com.yolanda.nohttp.NoHttp;
import com.yolanda.nohttp.download.DownloadQueue;
import com.yolanda.nohttp.rest.Request;
import com.yolanda.nohttp.rest.RequestQueue;
import java.security.KeyStore;
import java.security.SecureRandom;
import java.security.cert.CertificateFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManagerFactory;
/**
* Nohttp
*/
public class NoProgresshttpUtils {
private static NoProgresshttpUtils sUtils;
private RequestQueue mQueue;
/**
* .
*/
private static DownloadQueue downloadQueue;
private NoProgresshttpUtils() {
mQueue = NoHttp.newRequestQueue(8);
}
/**
* DCL
*
* @return
*/
public static NoProgresshttpUtils getInstance() {
if (sUtils == null) {
synchronized (NohttpUtils.class) {
if (sUtils == null) {
sUtils = new NoProgresshttpUtils();
}
}
}
return sUtils;
}
/**
* .
*/
public static DownloadQueue getDownloadInstance() {
if (downloadQueue == null)
downloadQueue = NoHttp.newDownloadQueue(1);
return downloadQueue;
}
public <T> void add(int what, Request<T> request, HttpListener<T> callback) {
mQueue.add(what, request, new HttpResponseListenerNoProgress<T>(request, callback));
}
/**
* sign
*
* @param sign
*/
public void cancelBySign(Object sign) {
mQueue.cancelBySign(sign);
}
/**
*
*/
public void cancelAll() {
mQueue.cancelAll();
}
/**
* 退App
*/
public void stopAll() {
mQueue.stop();
}
public static SSLSocketFactory getSSLSocketFactory(Context context){
try {
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null);
String certificateAlias = Integer.toString(0);
keyStore.setCertificateEntry(certificateAlias, certificateFactory.
generateCertificate(context.getResources().openRawResource(R.raw.ca1)));
SSLContext sslContext = SSLContext.getInstance("TLS");
final TrustManagerFactory trustManagerFactory =
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStore);
sslContext.init
(
null,
trustManagerFactory.getTrustManagers(),
new SecureRandom()
);
return sslContext.getSocketFactory();
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
}

@ -0,0 +1,101 @@
package com.rehome.meetingbook.utils;
import android.app.Activity;
import com.yolanda.nohttp.NoHttp;
import com.yolanda.nohttp.download.DownloadQueue;
import com.yolanda.nohttp.rest.Request;
import com.yolanda.nohttp.rest.RequestQueue;
/**
* Create By HuangWenFei
* 2022-11-29 15:26
*
*/
public class NohttpUtils {
private static NohttpUtils sUtils;
private final RequestQueue mQueue;
/**
* .
*/
private static DownloadQueue downloadQueue;
private NohttpUtils() {
mQueue = NoHttp.newRequestQueue(8);
}
/**
* DCL
*
* @return
*/
public static NohttpUtils getInstance() {
if (sUtils == null) {
synchronized (NohttpUtils.class) {
if (sUtils == null) {
sUtils = new NohttpUtils();
}
}
}
return sUtils;
}
/**
* .
*/
public static DownloadQueue getDownloadInstance() {
if (downloadQueue == null)
downloadQueue = NoHttp.newDownloadQueue(1);
return downloadQueue;
}
/**
*
*
* @param mActivity activity
* @param what
* @param request
* @param callback
* @param canCanel
* @param isLoading
* @param <T>
*/
public <T> void add(Activity mActivity, int what, Request<T> request, HttpListener<T> callback, boolean canCanel, boolean isLoading, String msg) {
mQueue.add(what, request, new HttpResponseListener<T>(mActivity, request, callback, canCanel, isLoading, msg));
}
public <T> void add(Activity mActivity, int what, Request<T> request, HttpListener<T> callback) {
mQueue.add(what, request, new HttpResponseListener<T>(mActivity, request, callback, true, true, "加载中..."));
}
public <T> void add(Activity mActivity, int what,String progressTitle, Request<T> request, HttpListener<T> callback) {
mQueue.add(what, request, new HttpResponseListener<T>(mActivity, request, callback, true, true, progressTitle));
}
/**
* sign
*
* @param sign
*/
public void cancelBySign(Object sign) {
mQueue.cancelBySign(sign);
}
/**
*
*/
public void cancelAll() {
mQueue.cancelAll();
}
/**
* 退App
*/
public void stopAll() {
mQueue.stop();
}
}

@ -0,0 +1,833 @@
package com.rehome.meetingbook.utils;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import androidx.annotation.ColorInt;
import androidx.annotation.IntRange;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.drawerlayout.widget.DrawerLayout;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;
import com.rehome.meetingbook.R;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* @author 47184 on 2018/2/27.
*/
public class StatusBarUtil {
public static final int DEFAULT_STATUS_BAR_ALPHA = 0;
private static final int FAKE_STATUS_BAR_VIEW_ID = R.id.statusbarutil_fake_status_bar_view;
private static final int FAKE_TRANSLUCENT_VIEW_ID = R.id.statusbarutil_translucent_view;
private static final int TAG_KEY_HAVE_SET_OFFSET = -123;
/**
*
*
* @param activity
*/
@TargetApi(19)
public static void transparencyBar(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = activity.getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window window = activity.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
/**
*
*
* @param activity activity
* @param color
*/
public static void setColor(Activity activity, @ColorInt int color) {
setColor(activity, color, DEFAULT_STATUS_BAR_ALPHA);
}
/**
*
*
* @param activity activity
* @param color
* @param statusBarAlpha
*/
public static void setColor(Activity activity, @ColorInt int color, @IntRange(from = 0, to = 255) int statusBarAlpha) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
activity.getWindow().setStatusBarColor(calculateStatusColor(color, statusBarAlpha));
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
View fakeStatusBarView = decorView.findViewById(FAKE_STATUS_BAR_VIEW_ID);
if (fakeStatusBarView != null) {
if (fakeStatusBarView.getVisibility() == View.GONE) {
fakeStatusBarView.setVisibility(View.VISIBLE);
}
fakeStatusBarView.setBackgroundColor(calculateStatusColor(color, statusBarAlpha));
} else {
decorView.addView(createStatusBarView(activity, color, statusBarAlpha));
}
setRootView(activity);
}
}
/**
*
*
* @param activity activity
* @param color
*/
public static void setColorForSwipeBack(Activity activity, int color) {
setColorForSwipeBack(activity, color, DEFAULT_STATUS_BAR_ALPHA);
}
/**
*
*
* @param activity activity
* @param color
* @param statusBarAlpha
*/
public static void setColorForSwipeBack(Activity activity, @ColorInt int color,
@IntRange(from = 0, to = 255) int statusBarAlpha) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
ViewGroup contentView = activity.findViewById(android.R.id.content);
View rootView = contentView.getChildAt(0);
int statusBarHeight = getStatusBarHeight(activity);
if (rootView != null && rootView instanceof CoordinatorLayout) {
final CoordinatorLayout coordinatorLayout = (CoordinatorLayout) rootView;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
coordinatorLayout.setFitsSystemWindows(false);
contentView.setBackgroundColor(calculateStatusColor(color, statusBarAlpha));
boolean isNeedRequestLayout = contentView.getPaddingTop() < statusBarHeight;
if (isNeedRequestLayout) {
contentView.setPadding(0, statusBarHeight, 0, 0);
coordinatorLayout.post(new Runnable() {
@Override
public void run() {
coordinatorLayout.requestLayout();
}
});
}
} else {
coordinatorLayout.setStatusBarBackgroundColor(calculateStatusColor(color, statusBarAlpha));
}
} else {
contentView.setPadding(0, statusBarHeight, 0, 0);
contentView.setBackgroundColor(calculateStatusColor(color, statusBarAlpha));
}
setTransparentForWindow(activity);
}
}
/**
*
*
* @param activity activity
* @param color
*/
public static void setColorNoTranslucent(Activity activity, @ColorInt int color) {
setColor(activity, color, 0);
}
/**
* (5.0,使)
*
* @param activity activity
* @param color
*/
@Deprecated
public static void setColorDiff(Activity activity, @ColorInt int color) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
return;
}
transparentStatusBar(activity);
ViewGroup contentView = activity.findViewById(android.R.id.content);
// 移除半透明矩形,以免叠加
View fakeStatusBarView = contentView.findViewById(FAKE_STATUS_BAR_VIEW_ID);
if (fakeStatusBarView != null) {
if (fakeStatusBarView.getVisibility() == View.GONE) {
fakeStatusBarView.setVisibility(View.VISIBLE);
}
fakeStatusBarView.setBackgroundColor(color);
} else {
contentView.addView(createStatusBarView(activity, color));
}
setRootView(activity);
}
/**
* 使
* <p>
* ,
*
* @param activity activity
*/
public static void setTranslucent(Activity activity) {
setTranslucent(activity, DEFAULT_STATUS_BAR_ALPHA);
}
/**
* 使
* <p>
* ,
*
* @param activity activity
* @param statusBarAlpha
*/
public static void setTranslucent(Activity activity, @IntRange(from = 0, to = 255) int statusBarAlpha) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
return;
}
setTransparent(activity);
addTranslucentView(activity, statusBarAlpha);
}
/**
* CoordinatorLayout, 使
* <p>
* ,
*
* @param activity activity
* @param statusBarAlpha
*/
public static void setTranslucentForCoordinatorLayout(Activity activity, @IntRange(from = 0, to = 255) int statusBarAlpha) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
return;
}
transparentStatusBar(activity);
addTranslucentView(activity, statusBarAlpha);
}
/**
*
*
* @param activity activity
*/
public static void setTransparent(Activity activity) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
return;
}
transparentStatusBar(activity);
setRootView(activity);
}
/**
* 使(5.0,使)
* <p>
* ,
*
* @param activity activity
*/
@Deprecated
public static void setTranslucentDiff(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// 设置状态栏透明
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
setRootView(activity);
}
}
/**
* DrawerLayout
*
* @param activity activity
* @param drawerLayout DrawerLayout
* @param color
*/
public static void setColorForDrawerLayout(Activity activity, DrawerLayout drawerLayout, @ColorInt int color) {
setColorForDrawerLayout(activity, drawerLayout, color, DEFAULT_STATUS_BAR_ALPHA);
}
/**
* DrawerLayout ,
*
* @param activity activity
* @param drawerLayout DrawerLayout
* @param color
*/
public static void setColorNoTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout, @ColorInt int color) {
setColorForDrawerLayout(activity, drawerLayout, color, 0);
}
/**
* DrawerLayout
*
* @param activity activity
* @param drawerLayout DrawerLayout
* @param color
* @param statusBarAlpha
*/
public static void setColorForDrawerLayout(Activity activity, DrawerLayout drawerLayout, @ColorInt int color,
@IntRange(from = 0, to = 255) int statusBarAlpha) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
return;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
} else {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
// 生成一个状态栏大小的矩形
// 添加 statusBarView 到布局中
ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);
View fakeStatusBarView = contentLayout.findViewById(FAKE_STATUS_BAR_VIEW_ID);
if (fakeStatusBarView != null) {
if (fakeStatusBarView.getVisibility() == View.GONE) {
fakeStatusBarView.setVisibility(View.VISIBLE);
}
fakeStatusBarView.setBackgroundColor(color);
} else {
contentLayout.addView(createStatusBarView(activity, color), 0);
}
// 内容布局不是 LinearLayout 时,设置padding top
if (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) {
contentLayout.getChildAt(1)
.setPadding(contentLayout.getPaddingLeft(), getStatusBarHeight(activity) + contentLayout.getPaddingTop(),
contentLayout.getPaddingRight(), contentLayout.getPaddingBottom());
}
// 设置属性
setDrawerLayoutProperty(drawerLayout, contentLayout);
addTranslucentView(activity, statusBarAlpha);
}
/**
* DrawerLayout
*
* @param drawerLayout DrawerLayout
* @param drawerLayoutContentLayout DrawerLayout
*/
private static void setDrawerLayoutProperty(DrawerLayout drawerLayout, ViewGroup drawerLayoutContentLayout) {
ViewGroup drawer = (ViewGroup) drawerLayout.getChildAt(1);
drawerLayout.setFitsSystemWindows(false);
drawerLayoutContentLayout.setFitsSystemWindows(false);
drawerLayoutContentLayout.setClipToPadding(true);
drawer.setFitsSystemWindows(false);
}
/**
* DrawerLayout (5.0,使)
*
* @param activity activity
* @param drawerLayout DrawerLayout
* @param color
*/
@Deprecated
public static void setColorForDrawerLayoutDiff(Activity activity, DrawerLayout drawerLayout, @ColorInt int color) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// 生成一个状态栏大小的矩形
ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);
View fakeStatusBarView = contentLayout.findViewById(FAKE_STATUS_BAR_VIEW_ID);
if (fakeStatusBarView != null) {
if (fakeStatusBarView.getVisibility() == View.GONE) {
fakeStatusBarView.setVisibility(View.VISIBLE);
}
fakeStatusBarView.setBackgroundColor(calculateStatusColor(color, DEFAULT_STATUS_BAR_ALPHA));
} else {
// 添加 statusBarView 到布局中
contentLayout.addView(createStatusBarView(activity, color), 0);
}
// 内容布局不是 LinearLayout 时,设置padding top
if (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) {
contentLayout.getChildAt(1).setPadding(0, getStatusBarHeight(activity), 0, 0);
}
// 设置属性
setDrawerLayoutProperty(drawerLayout, contentLayout);
}
}
/**
* DrawerLayout
*
* @param activity activity
* @param drawerLayout DrawerLayout
*/
public static void setTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout) {
setTranslucentForDrawerLayout(activity, drawerLayout, DEFAULT_STATUS_BAR_ALPHA);
}
/**
* DrawerLayout
*
* @param activity activity
* @param drawerLayout DrawerLayout
*/
public static void setTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout,
@IntRange(from = 0, to = 255) int statusBarAlpha) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
return;
}
setTransparentForDrawerLayout(activity, drawerLayout);
addTranslucentView(activity, statusBarAlpha);
}
/**
* DrawerLayout
*
* @param activity activity
* @param drawerLayout DrawerLayout
*/
public static void setTransparentForDrawerLayout(Activity activity, DrawerLayout drawerLayout) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
return;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
} else {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);
// 内容布局不是 LinearLayout 时,设置padding top
if (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) {
contentLayout.getChildAt(1).setPadding(0, getStatusBarHeight(activity), 0, 0);
}
// 设置属性
setDrawerLayoutProperty(drawerLayout, contentLayout);
}
/**
* DrawerLayout (5.0,使)
*
* @param activity activity
* @param drawerLayout DrawerLayout
*/
@Deprecated
public static void setTranslucentForDrawerLayoutDiff(Activity activity, DrawerLayout drawerLayout) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// 设置状态栏透明
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// 设置内容布局属性
ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);
contentLayout.setFitsSystemWindows(true);
contentLayout.setClipToPadding(true);
// 设置抽屉布局属性
ViewGroup vg = (ViewGroup) drawerLayout.getChildAt(1);
vg.setFitsSystemWindows(false);
// 设置 DrawerLayout 属性
drawerLayout.setFitsSystemWindows(false);
}
}
/**
* ImageView
*
* @param activity activity
* @param needOffsetView View
*/
public static void setTransparentForImageView(Activity activity, View needOffsetView) {
setTranslucentForImageView(activity, 0, needOffsetView);
}
/**
* ImageView (使)
*
* @param activity activity
* @param needOffsetView View
*/
public static void setTranslucentForImageView(Activity activity, View needOffsetView) {
setTranslucentForImageView(activity, DEFAULT_STATUS_BAR_ALPHA, needOffsetView);
}
/**
* ImageView
*
* @param activity activity
* @param statusBarAlpha
* @param needOffsetView View
*/
public static void setTranslucentForImageView(Activity activity, @IntRange(from = 0, to = 255) int statusBarAlpha,
View needOffsetView) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
return;
}
setTransparentForWindow(activity);
addTranslucentView(activity, statusBarAlpha);
if (needOffsetView != null) {
Object haveSetOffset = needOffsetView.getTag(TAG_KEY_HAVE_SET_OFFSET);
if (haveSetOffset != null && (Boolean) haveSetOffset) {
return;
}
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) needOffsetView.getLayoutParams();
layoutParams.setMargins(layoutParams.leftMargin, layoutParams.topMargin + getStatusBarHeight(activity),
layoutParams.rightMargin, layoutParams.bottomMargin);
needOffsetView.setTag(TAG_KEY_HAVE_SET_OFFSET, true);
}
}
/**
* fragment ImageView
*
* @param activity fragment activity
* @param needOffsetView View
*/
public static void setTranslucentForImageViewInFragment(Activity activity, View needOffsetView) {
setTranslucentForImageViewInFragment(activity, DEFAULT_STATUS_BAR_ALPHA, needOffsetView);
}
/**
* fragment ImageView
*
* @param activity fragment activity
* @param needOffsetView View
*/
public static void setTransparentForImageViewInFragment(Activity activity, View needOffsetView) {
setTranslucentForImageViewInFragment(activity, 0, needOffsetView);
}
/**
* fragment ImageView
*
* @param activity fragment activity
* @param statusBarAlpha
* @param needOffsetView View
*/
public static void setTranslucentForImageViewInFragment(Activity activity, @IntRange(from = 0, to = 255) int statusBarAlpha,
View needOffsetView) {
setTranslucentForImageView(activity, statusBarAlpha, needOffsetView);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
clearPreviousSetting(activity);
}
}
/**
* View
*
* @param activity Activity
*/
public static void hideFakeStatusBarView(Activity activity) {
ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
View fakeStatusBarView = decorView.findViewById(FAKE_STATUS_BAR_VIEW_ID);
if (fakeStatusBarView != null) {
fakeStatusBarView.setVisibility(View.GONE);
}
View fakeTranslucentView = decorView.findViewById(FAKE_TRANSLUCENT_VIEW_ID);
if (fakeTranslucentView != null) {
fakeTranslucentView.setVisibility(View.GONE);
}
}
///////////////////////////////////////////////////////////////////////////////////
@TargetApi(Build.VERSION_CODES.KITKAT)
private static void clearPreviousSetting(Activity activity) {
ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
View fakeStatusBarView = decorView.findViewById(FAKE_STATUS_BAR_VIEW_ID);
if (fakeStatusBarView != null) {
decorView.removeView(fakeStatusBarView);
ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
rootView.setPadding(0, 0, 0, 0);
}
}
/**
*
*
* @param activity activity
* @param statusBarAlpha
*/
private static void addTranslucentView(Activity activity, @IntRange(from = 0, to = 255) int statusBarAlpha) {
ViewGroup contentView = activity.findViewById(android.R.id.content);
View fakeTranslucentView = contentView.findViewById(FAKE_TRANSLUCENT_VIEW_ID);
if (fakeTranslucentView != null) {
if (fakeTranslucentView.getVisibility() == View.GONE) {
fakeTranslucentView.setVisibility(View.VISIBLE);
}
fakeTranslucentView.setBackgroundColor(Color.argb(statusBarAlpha, 0, 0, 0));
} else {
contentView.addView(createTranslucentStatusBarView(activity, statusBarAlpha));
}
}
/**
*
*
* @param activity activity
* @param color
* @return
*/
private static View createStatusBarView(Activity activity, @ColorInt int color) {
return createStatusBarView(activity, color, 0);
}
/**
*
*
* @param activity activity
* @param color
* @param alpha
* @return
*/
private static View createStatusBarView(Activity activity, @ColorInt int color, int alpha) {
// 绘制一个和状态栏一样高的矩形
View statusBarView = new View(activity);
LinearLayout.LayoutParams params =
new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity));
statusBarView.setLayoutParams(params);
statusBarView.setBackgroundColor(calculateStatusColor(color, alpha));
statusBarView.setId(FAKE_STATUS_BAR_VIEW_ID);
return statusBarView;
}
/**
*
*/
private static void setRootView(Activity activity) {
ViewGroup parent = activity.findViewById(android.R.id.content);
for (int i = 0, count = parent.getChildCount(); i < count; i++) {
View childView = parent.getChildAt(i);
if (childView instanceof ViewGroup) {
childView.setFitsSystemWindows(true);
((ViewGroup) childView).setClipToPadding(true);
}
}
}
/**
*
*/
private static void setTransparentForWindow(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
activity.getWindow()
.getDecorView()
.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
activity.getWindow()
.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
/**
* 使
*/
@TargetApi(Build.VERSION_CODES.KITKAT)
private static void transparentStatusBar(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
} else {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
/**
* View
*
* @param alpha
* @return View
*/
private static View createTranslucentStatusBarView(Activity activity, int alpha) {
// 绘制一个和状态栏一样高的矩形
View statusBarView = new View(activity);
LinearLayout.LayoutParams params =
new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity));
statusBarView.setLayoutParams(params);
statusBarView.setBackgroundColor(Color.argb(alpha, 0, 0, 0));
statusBarView.setId(FAKE_TRANSLUCENT_VIEW_ID);
return statusBarView;
}
/**
*
*
* @param context context
* @return
*/
private static int getStatusBarHeight(Context context) {
// 获得状态栏高度
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
return context.getResources().getDimensionPixelSize(resourceId);
}
/**
*
*
* @param color color
* @param alpha alpha
* @return
*/
private static int calculateStatusColor(@ColorInt int color, int alpha) {
if (alpha == 0) {
return color;
}
float a = 1 - alpha / 255f;
int red = color >> 16 & 0xff;
int green = color >> 8 & 0xff;
int blue = color & 0xff;
red = (int) (red * a + 0.5);
green = (int) (green * a + 0.5);
blue = (int) (blue * a + 0.5);
return 0xff << 24 | red << 16 | green << 8 | blue;
}
/**
*
* 4.4MIUIVFlyme6.0Android
*
* @param activity
* @return 1:MIUUI 2:Flyme 3:android6.0
*/
public static int StatusBarLightMode(Activity activity) {
int result = 0;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (MIUISetStatusBarLightMode(activity, true)) {
result = 1;
} else if (FlymeSetStatusBarLightMode(activity.getWindow(), true)) {
result = 2;
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
result = 3;
}
}
return result;
}
/**
*
* 4.4MIUIVFlyme6.0Android
*
* @param activity
* @param type 1:MIUUI 2:Flyme 3:android6.0
*/
public static void StatusBarLightMode(Activity activity, int type) {
if (type == 1) {
MIUISetStatusBarLightMode(activity, true);
} else if (type == 2) {
FlymeSetStatusBarLightMode(activity.getWindow(), true);
} else if (type == 3) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
}
/**
* MIUIflyme6.0
*/
public static void StatusBarDarkMode(Activity activity, int type) {
if (type == 1) {
MIUISetStatusBarLightMode(activity, false);
} else if (type == 2) {
FlymeSetStatusBarLightMode(activity.getWindow(), false);
} else if (type == 3) {
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
}
}
/**
*
* Flyme
*
* @param window
* @param dark
* @return boolean true
*/
public static boolean FlymeSetStatusBarLightMode(Window window, boolean dark) {
boolean result = false;
if (window != null) {
try {
WindowManager.LayoutParams lp = window.getAttributes();
Field darkFlag = WindowManager.LayoutParams.class
.getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");
Field meizuFlags = WindowManager.LayoutParams.class
.getDeclaredField("meizuFlags");
darkFlag.setAccessible(true);
meizuFlags.setAccessible(true);
int bit = darkFlag.getInt(null);
int value = meizuFlags.getInt(lp);
if (dark) {
value |= bit;
} else {
value &= ~bit;
}
meizuFlags.setInt(lp, value);
window.setAttributes(lp);
result = true;
} catch (Exception e) {
}
}
return result;
}
/**
* MIUIV6
*
* @param activity
* @param dark
* @return boolean true
*/
public static boolean MIUISetStatusBarLightMode(Activity activity, boolean dark) {
boolean result = false;
Window window = activity.getWindow();
if (window != null) {
Class clazz = window.getClass();
try {
int darkModeFlag = 0;
@SuppressLint("PrivateApi") Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");
Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");
darkModeFlag = field.getInt(layoutParams);
Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);
if (dark) {
extraFlagField.invoke(window, darkModeFlag, darkModeFlag);//状态栏透明且黑色字体
} else {
extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字体
}
result = true;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//开发版 7.7.13 及以后版本采用了系统API旧方法无效但不会报错所以两个方式都要加上
if (dark) {
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
} else {
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
}
}
} catch (Exception ignored) {
}
}
return result;
}
}

@ -0,0 +1,99 @@
package com.rehome.meetingbook.weiget;
/**
* Create By HuangWenFei
* 2022-12-09 14:08
*
*/
import android.app.Dialog;
import android.content.Context;
import androidx.annotation.NonNull;
import android.text.TextUtils;
import android.view.Display;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.rehome.meetingbook.R;
/**
* Created by Rehome-rjb1 on 2017/5/31.
*
*/
public class AuditDialog extends Dialog {
TextView tvMsg;
TextView dialogCancel;
TextView dialogCommit;
LinearLayout layDialogCancel;
private AuditDialogListener listener;
public AuditDialog(@NonNull Context context, String msg, AuditDialogListener listener) {
super(context);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
setContentView(R.layout.layout_audit_dialog);
Window window = getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = (getScreenWidth(context)) / 3;
window.setGravity(Gravity.CENTER);
tvMsg = findViewById(R.id.tv_msg);
dialogCancel = findViewById(R.id.dialog_cancel);
dialogCommit = findViewById(R.id.dialog_commit);
layDialogCancel = findViewById(R.id.lay_dialog_cancel);
dialogCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
if (listener != null) {
listener.cancel();
}
}
});
dialogCommit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
if (listener != null) {
listener.confirm();
}
}
});
this.listener = listener;
setCancelable(false);
setTvMsg(msg);
}
public void setTvMsg(String msg) {
if (!TextUtils.isEmpty(msg)) {
tvMsg.setText(msg);
}
}
//获取屏幕宽度
public static int getScreenWidth(Context context) {
WindowManager manager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
return display.getWidth();
}
public interface AuditDialogListener {
void confirm();
void cancel();
}
}

@ -0,0 +1,145 @@
package com.rehome.meetingbook.weiget;
import android.content.Context;
import android.content.res.TypedArray;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.widget.TextView;
import androidx.appcompat.widget.Toolbar;
import com.rehome.meetingbook.R;
import com.zhy.autolayout.AutoLayoutInfo;
import com.zhy.autolayout.utils.AutoLayoutHelper;
import com.zhy.autolayout.utils.AutoUtils;
import com.zhy.autolayout.utils.DimenUtils;
import java.lang.reflect.Field;
/**
* Created by hupei on 2015/12/28 20:33.
*/
public class AutoToolbar extends Toolbar {
private static final int NO_VALID = -1;
private int mTextSize;
private int mSubTextSize;
private final AutoLayoutHelper mHelper = new AutoLayoutHelper(this);
public AutoToolbar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.Toolbar,
defStyleAttr, R.style.Widget_AppCompat_Toolbar);
int titleTextAppearance = a.getResourceId(R.styleable.Toolbar_titleTextAppearance,
R.style.TextAppearance_Widget_AppCompat_Toolbar_Title);
int subtitleTextAppearance = a.getResourceId(R.styleable.Toolbar_subtitleTextAppearance,
R.style.TextAppearance_Widget_AppCompat_Toolbar_Subtitle);
mTextSize = loadTextSizeFromTextAppearance(titleTextAppearance);
mSubTextSize = loadTextSizeFromTextAppearance(subtitleTextAppearance);
TypedArray menuA = context.getTheme().obtainStyledAttributes(attrs, R.styleable.ActionBar,
defStyleAttr, R.style.ThemeOverlay_AppCompat);
int menuTextAppearance = menuA.getResourceId(R.styleable.AutoLayout_Layout_layout_auto_basewidth,
R.style.ThemeOverlay_AppCompat_ActionBar);
int menuTextSize = loadTextSizeFromTextAppearance(menuTextAppearance);
//防止 menu 定义 textSize而 Toolbar 无定义 textSize 时title 的 textSize 随 menu 变化
if (mTextSize == NO_VALID) mTextSize = menuTextSize;
if (mSubTextSize == NO_VALID) mSubTextSize = menuTextSize;
a.recycle();
menuA.recycle();
}
public AutoToolbar(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public AutoToolbar(Context context) {
this(context, null);
}
private int loadTextSizeFromTextAppearance(int textAppearanceResId) {
TypedArray a = getContext().obtainStyledAttributes(textAppearanceResId,
R.styleable.TextAppearance);
try {
if (!DimenUtils.isPxVal(a.peekValue(R.styleable.TextAppearance_android_textSize)))
return NO_VALID;
return a.getDimensionPixelSize(R.styleable.TextAppearance_android_textSize, NO_VALID);
} finally {
a.recycle();
}
}
private void setUpTitleTextSize() {
CharSequence title = getTitle();
if (!TextUtils.isEmpty(title) && mTextSize != NO_VALID)
setUpTitleTextSize("mTitleTextView", mTextSize);
CharSequence subtitle = getSubtitle();
if (!TextUtils.isEmpty(subtitle) && mSubTextSize != NO_VALID)
setUpTitleTextSize("mSubtitleTextView", mSubTextSize);
}
private void setUpTitleTextSize(String name, int val) {
try {
//反射 Toolbar 的 TextView
Field f = getClass().getSuperclass().getDeclaredField(name);
f.setAccessible(true);
TextView textView = (TextView) f.get(this);
if (textView != null) {
int autoTextSize = AutoUtils.getPercentHeightSize(val);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, autoTextSize);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (!this.isInEditMode()) {
setUpTitleTextSize();
this.mHelper.adjustChildren();
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
}
@Override
public LayoutParams generateLayoutParams(AttributeSet attrs) {
return new LayoutParams(this.getContext(), attrs);
}
public static class LayoutParams extends Toolbar.LayoutParams implements AutoLayoutHelper.AutoLayoutParams {
private AutoLayoutInfo mDimenLayoutInfo;
public LayoutParams(Context c, AttributeSet attrs) {
super(c, attrs);
this.mDimenLayoutInfo = AutoLayoutHelper.getAutoLayoutInfo(c, attrs);
}
@Override
public AutoLayoutInfo getAutoLayoutInfo() {
return this.mDimenLayoutInfo;
}
public LayoutParams(int width, int height) {
super(width, height);
}
public LayoutParams(android.view.ViewGroup.LayoutParams source) {
super(source);
}
public LayoutParams(MarginLayoutParams source) {
super(source);
}
}
}

@ -0,0 +1,32 @@
package com.rehome.meetingbook.weiget;
import android.content.Context;
import android.view.Display;
import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
/**
* Create By HuangWenFei
* 2022-12-10 11:28
*
*/
public class CbsMemberAlertDialog extends AlertDialog {
public CbsMemberAlertDialog(@NonNull Context context) {
super(context);
Window window = getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = (getScreenWidth(context)) / 4;
}
//获取屏幕宽度
public static int getScreenWidth(Context context) {
WindowManager manager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
return display.getWidth();
}
}

@ -0,0 +1,102 @@
package com.rehome.meetingbook.weiget;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Display;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.NonNull;
import com.rehome.meetingbook.bean.AppointmentMemberBean;
import com.rehome.meetingbook.databinding.DialogChangeBzBinding;
import com.rehome.meetingbook.databinding.DialogResultBinding;
/**
* Create By HuangWenFei
* 2022-12-19 09:19
*
*/
public class ChangeBzDialog extends Dialog {
protected View mView;
protected DialogChangeBzBinding binding;
Context context;
private ChangeBzDialogListener listener;
private AppointmentMemberBean.RowsBean item;
public ChangeBzDialog(@NonNull Context context, String msg, AppointmentMemberBean.RowsBean item, ChangeBzDialogListener listener) {
super(context);
this.context=context;
this.item=item;
binding = DialogChangeBzBinding.inflate(getLayoutInflater());
mView = binding.getRoot();
binding.tvTitle.setText(msg);
binding.etIstz.setText(item.getIstzzy());
binding.etBeizhu.setText(item.getBz());
binding.bottomBtnView.dialogCommit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
if (listener != null) {
item.setIstzzy(binding.etIstz.getText().toString().trim());
item.setBz(binding.etBeizhu.getText().toString().trim());
listener.confirm();
}
}
});
binding.bottomBtnView.dialogCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
if (listener != null) {
listener.cancel();
}
}
});
this.listener = listener;
setCancelable(false);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(mView);
Window window = getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = (getScreenWidth(context)) / 2;
window.setGravity(Gravity.CENTER);
// Window window = this.getWindow();
// WindowManager.LayoutParams lp = window.getAttributes();
// Display d = window.getWindowManager().getDefaultDisplay();
// lp.width = (int) (d.getWidth() * 0.9F);
// window.setAttributes(lp);
}
public void setTvMsg(String msg) {
if (!TextUtils.isEmpty(msg)) {
binding.tvTitle.setText(msg);
}
}
//获取屏幕宽度
public static int getScreenWidth(Context context) {
WindowManager manager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
return display.getWidth();
}
public interface ChangeBzDialogListener {
void confirm();
void cancel();
}
}

@ -0,0 +1,128 @@
package com.rehome.meetingbook.weiget;
import android.content.Context;
import android.graphics.drawable.Drawable;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.drawable.DrawableCompat;
import androidx.appcompat.widget.AppCompatEditText;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import com.rehome.meetingbook.R;
/**
* Create By HuangWenFei
* 2022-12-08 14:01
* EditText
*/
public class ClearEditText extends AppCompatEditText implements View.OnTouchListener, View.OnFocusChangeListener, TextWatcher {
private Drawable mClearTextIcon;
private OnFocusChangeListener mOnFocusChangeListener;
private OnTouchListener mOnTouchListener;
public ClearEditText(final Context context) {
super(context);
init(context);
}
public ClearEditText(final Context context, final AttributeSet attrs) {
super(context, attrs);
init(context);
}
public ClearEditText(final Context context, final AttributeSet attrs, final int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(final Context context) {
final Drawable drawable = ContextCompat.getDrawable(context, R.drawable.del);
final Drawable wrappedDrawable = DrawableCompat.wrap(drawable); //Wrap the drawable so that it can be tinted pre Lollipop
DrawableCompat.setTint(wrappedDrawable, getCurrentHintTextColor());
mClearTextIcon = wrappedDrawable;
// mClearTextIcon= context.getResources().getDrawable(R.drawable.icon_delete_32);
//设置图片在右边
mClearTextIcon.setBounds(0, 0, mClearTextIcon.getIntrinsicHeight()/2, mClearTextIcon.getIntrinsicHeight()/2);
//默认设置为隐藏状态1
setClearIconVisible(false);
super.setOnTouchListener(this);
super.setOnFocusChangeListener(this);
addTextChangedListener(this);
}
@Override
public void setOnFocusChangeListener(OnFocusChangeListener l) {
mOnFocusChangeListener = l;
}
@Override
public void setOnTouchListener(OnTouchListener l) {
mOnTouchListener = l;
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
//如果获取焦点。文本大于0就显示删除按钮
if (hasFocus) {
setClearIconVisible(getText().length() > 0);
} else {
setClearIconVisible(false);
}
if (mOnFocusChangeListener != null) {
mOnFocusChangeListener.onFocusChange(v, hasFocus);
}
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
final int x = (int) motionEvent.getX();
//点击删除按钮,就清空字符串
if (mClearTextIcon.isVisible() && x > getWidth() - getPaddingRight() - mClearTextIcon.getIntrinsicWidth()) {
if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
setError(null);
setText("");
}
return true;
}
return mOnTouchListener != null && mOnTouchListener.onTouch(view, motionEvent);
}
@Override
public final void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
//有获取到焦点且文本发生变化时候,显示删除按钮
if (isFocused()) {
setClearIconVisible(text.length() > 0);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
//设置删除图标是否隐藏
private void setClearIconVisible(final boolean visible) {
mClearTextIcon.setVisible(visible, false);
final Drawable[] compoundDrawables = getCompoundDrawables();
setCompoundDrawables(
compoundDrawables[0],
compoundDrawables[1],
visible ? mClearTextIcon : null,
compoundDrawables[3]);
}
}

@ -0,0 +1,54 @@
package com.rehome.meetingbook.weiget;
/**
* Create By HuangWenFei
* 2023-02-20 15:28
*
*/
import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.TextView;
import com.rehome.meetingbook.R;
public class CustomLoadingDialog extends Dialog {
TextView tvLoadingTx;
ImageView ivLoading;
public CustomLoadingDialog(Context context) {
this(context, R.style.loading_dialog, "请刷身份证...");
}
public CustomLoadingDialog(Context context, String string) {
this(context, R.style.loading_dialog, string);
}
protected CustomLoadingDialog(Context context, int theme, String string) {
super(context, theme);
setCanceledOnTouchOutside(true);//点击其他区域时 true 关闭弹窗 false 不关闭弹窗
setContentView(R.layout.loading_dialog);//加载布局
tvLoadingTx = findViewById(R.id.tv_loading_tx);
tvLoadingTx.setText(string);
ivLoading = findViewById(R.id.iv_loading);
// 加载动画
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(
context, R.anim.loading_animation);
// 使用ImageView显示动画
ivLoading.startAnimation(hyperspaceJumpAnimation);
getWindow().getAttributes().gravity = Gravity.CENTER;//居中显示
getWindow().getAttributes().dimAmount = 0.5f;//背景透明度 取值范围 0 ~ 1
}
//关闭弹窗
@Override
public void dismiss() {
super.dismiss();
}
}

@ -0,0 +1,205 @@
package com.rehome.meetingbook.weiget;
/**
* Create By HuangWenFei
* 2022-12-22 14:19
*
*/
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.text.TextUtils;
import com.haibin.calendarview.Calendar;
import com.haibin.calendarview.MonthView;
/**
*
* Created by huanghaibin on 2018/2/9.
*/
public class CustomMonthView extends MonthView {
private int mRadius;
/**
*
*/
private Paint mTextPaint = new Paint();
/**
* 24
*/
private Paint mSolarTermTextPaint = new Paint();
/**
*
*/
private Paint mPointPaint = new Paint();
/**
*
*/
private Paint mCurrentDayPaint = new Paint();
/**
*
*/
private float mPointRadius;
private int mPadding;
private float mCircleRadius;
/**
*
*/
private Paint mSchemeBasicPaint = new Paint();
private float mSchemeBaseLine;
public CustomMonthView(Context context) {
super(context);
mTextPaint.setTextSize(dipToPx(context, 8));
mTextPaint.setColor(0xffffffff);
mTextPaint.setAntiAlias(true);
mTextPaint.setFakeBoldText(true);
mSolarTermTextPaint.setColor(0xff489dff);
mSolarTermTextPaint.setAntiAlias(true);
mSolarTermTextPaint.setTextAlign(Paint.Align.CENTER);
mSchemeBasicPaint.setAntiAlias(true);
mSchemeBasicPaint.setStyle(Paint.Style.FILL);
mSchemeBasicPaint.setTextAlign(Paint.Align.CENTER);
mSchemeBasicPaint.setFakeBoldText(true);
mSchemeBasicPaint.setColor(Color.WHITE);
mCurrentDayPaint.setAntiAlias(true);
mCurrentDayPaint.setStyle(Paint.Style.FILL);
mCurrentDayPaint.setColor(0xFFeaeaea);
mPointPaint.setAntiAlias(true);
mPointPaint.setStyle(Paint.Style.FILL);
mPointPaint.setTextAlign(Paint.Align.CENTER);
mPointPaint.setColor(Color.RED);
mCircleRadius = dipToPx(getContext(), 7);
mPadding = dipToPx(getContext(), 3);
mPointRadius = dipToPx(context, 2);
Paint.FontMetrics metrics = mSchemeBasicPaint.getFontMetrics();
mSchemeBaseLine = mCircleRadius - metrics.descent + (metrics.bottom - metrics.top) / 2 + dipToPx(getContext(), 1);
}
@Override
protected void onPreviewHook() {
mSolarTermTextPaint.setTextSize(mCurMonthLunarTextPaint.getTextSize());
mRadius = Math.min(mItemWidth, mItemHeight) / 11 * 5;
mSchemePaint.setStyle(Paint.Style.STROKE);
}
@Override
protected boolean onDrawSelected(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme) {
int cx = x + mItemWidth / 2;
int cy = y + mItemHeight / 2;
canvas.drawCircle(cx, cy, mRadius, mSelectedPaint);
return true;
}
@Override
protected void onDrawScheme(Canvas canvas, Calendar calendar, int x, int y) {
int cx = x + mItemWidth / 2;
int cy = y + mItemHeight / 2;
canvas.drawCircle(cx, cy, mRadius, mSchemePaint);
// boolean isSelected = isSelected(calendar);
// if (isSelected) {
// mPointPaint.setColor(Color.WHITE);
// } else {
// mPointPaint.setColor(Color.GRAY);
// }
//
// canvas.drawCircle(x + mItemWidth / 2, y + mItemHeight - 3 * mPadding, mPointRadius, mPointPaint);
}
@SuppressWarnings("IntegerDivisionInFloatingPointContext")
@Override
protected void onDrawText(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme, boolean isSelected) {
int cx = x + mItemWidth / 2;
int cy = y + mItemHeight / 2;
int top = y - mItemHeight / 6;
if (calendar.isCurrentDay() && !isSelected) {
canvas.drawCircle(cx, cy, mRadius, mCurrentDayPaint);
}
// if (hasScheme) {
// canvas.drawCircle(x + mItemWidth - mPadding - mCircleRadius / 2, y + mPadding + mCircleRadius, mCircleRadius, mSchemeBasicPaint);
// mTextPaint.setColor(calendar.getSchemeColor());
// canvas.drawText(calendar.getScheme(), x + mItemWidth - mPadding - mCircleRadius, y + mPadding + mSchemeBaseLine, mTextPaint);
// }
//当然可以换成其它对应的画笔就不麻烦,
if (calendar.isWeekend() && calendar.isCurrentMonth()) {
mCurMonthTextPaint.setColor(0xFF489dff);
mCurMonthLunarTextPaint.setColor(0xFF489dff);
mSchemeTextPaint.setColor(0xFF489dff);
mSchemeLunarTextPaint.setColor(0xFF489dff);
mOtherMonthLunarTextPaint.setColor(0xFF489dff);
mOtherMonthTextPaint.setColor(0xFF489dff);
} else {
mCurMonthTextPaint.setColor(0xff333333);
mCurMonthLunarTextPaint.setColor(0xffCFCFCF);
mSchemeTextPaint.setColor(0xff333333);
mSchemeLunarTextPaint.setColor(0xffCFCFCF);
mOtherMonthTextPaint.setColor(0xFFe1e1e1);
mOtherMonthLunarTextPaint.setColor(0xFFe1e1e1);
}
if (isSelected) {
canvas.drawText(String.valueOf(calendar.getDay()), cx, mTextBaseLine + top,
mSelectTextPaint);
canvas.drawText(calendar.getLunar(), cx, mTextBaseLine + y + mItemHeight / 10, mSelectedLunarTextPaint);
} else if (hasScheme) {
canvas.drawText(String.valueOf(calendar.getDay()), cx, mTextBaseLine + top,
calendar.isCurrentMonth() ? mSchemeTextPaint : mOtherMonthTextPaint);
canvas.drawText(calendar.getLunar(), cx, mTextBaseLine + y + mItemHeight / 10,
!TextUtils.isEmpty(calendar.getSolarTerm()) ? mSolarTermTextPaint : mSchemeLunarTextPaint);
} else {
canvas.drawText(String.valueOf(calendar.getDay()), cx, mTextBaseLine + top,
calendar.isCurrentDay() ? mCurDayTextPaint :
calendar.isCurrentMonth() ? mCurMonthTextPaint : mOtherMonthTextPaint);
canvas.drawText(calendar.getLunar(), cx, mTextBaseLine + y + mItemHeight / 10,
calendar.isCurrentDay() ? mCurDayLunarTextPaint :
calendar.isCurrentMonth() ? !TextUtils.isEmpty(calendar.getSolarTerm()) ? mSolarTermTextPaint :
mCurMonthLunarTextPaint : mOtherMonthLunarTextPaint);
}
}
/**
* dppx
*
* @param context context
* @param dpValue dp
* @return px
*/
private static int dipToPx(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
}

@ -0,0 +1,206 @@
package com.rehome.meetingbook.weiget;
/**
* Create By HuangWenFei
* 2022-12-22 14:16
*
*/
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.text.TextUtils;
import com.haibin.calendarview.Calendar;
import com.haibin.calendarview.WeekView;
/**
*
* Created by huanghaibin on 2018/2/9.
*/
public class CustomWeekView extends WeekView {
private int mRadius;
/**
*
*/
private Paint mTextPaint = new Paint();
/**
* 24
*/
private Paint mSolarTermTextPaint = new Paint();
/**
*
*/
private Paint mPointPaint = new Paint();
/**
*
*/
private Paint mCurrentDayPaint = new Paint();
/**
*
*/
private float mPointRadius;
private int mPadding;
private float mCircleRadius;
/**
*
*/
private Paint mSchemeBasicPaint = new Paint();
private float mSchemeBaseLine;
public CustomWeekView(Context context) {
super(context);
mTextPaint.setTextSize(dipToPx(context, 8));
mTextPaint.setColor(0xffffffff);
mTextPaint.setAntiAlias(true);
mTextPaint.setFakeBoldText(true);
mSolarTermTextPaint.setColor(0xff489dff);
mSolarTermTextPaint.setAntiAlias(true);
mSolarTermTextPaint.setTextAlign(Paint.Align.CENTER);
mSchemeBasicPaint.setAntiAlias(true);
mSchemeBasicPaint.setStyle(Paint.Style.FILL);
mSchemeBasicPaint.setTextAlign(Paint.Align.CENTER);
mSchemeBasicPaint.setFakeBoldText(true);
mSchemeBasicPaint.setColor(Color.WHITE);
mPointPaint.setAntiAlias(true);
mPointPaint.setStyle(Paint.Style.FILL);
mPointPaint.setTextAlign(Paint.Align.CENTER);
mPointPaint.setColor(Color.RED);
mCurrentDayPaint.setAntiAlias(true);
mCurrentDayPaint.setStyle(Paint.Style.FILL);
mCurrentDayPaint.setColor(0xFFeaeaea);
mCircleRadius = dipToPx(getContext(), 7);
mPadding = dipToPx(getContext(), 3);
mPointRadius = dipToPx(context, 2);
Paint.FontMetrics metrics = mSchemeBasicPaint.getFontMetrics();
mSchemeBaseLine = mCircleRadius - metrics.descent + (metrics.bottom - metrics.top) / 2 + dipToPx(getContext(), 1);
}
@Override
protected void onPreviewHook() {
mSolarTermTextPaint.setTextSize(mCurMonthLunarTextPaint.getTextSize());
mRadius = Math.min(mItemWidth, mItemHeight) / 11 * 5;
}
@Override
protected boolean onDrawSelected(Canvas canvas, Calendar calendar, int x, boolean hasScheme) {
int cx = x + mItemWidth / 2;
int cy = mItemHeight / 2;
canvas.drawCircle(cx, cy, mRadius, mSelectedPaint);
return true;
}
@Override
protected void onDrawScheme(Canvas canvas, Calendar calendar, int x) {
boolean isSelected = isSelected(calendar);
if (isSelected) {
mPointPaint.setColor(Color.WHITE);
} else {
mPointPaint.setColor(Color.GRAY);
}
canvas.drawCircle(x + mItemWidth / 2, mItemHeight - 3 * mPadding, mPointRadius, mPointPaint);
}
@SuppressWarnings("IntegerDivisionInFloatingPointContext")
@Override
protected void onDrawText(Canvas canvas, Calendar calendar, int x, boolean hasScheme, boolean isSelected) {
int cx = x + mItemWidth / 2;
int cy = mItemHeight / 2;
int top = -mItemHeight / 6;
if (calendar.isCurrentDay() && !isSelected) {
canvas.drawCircle(cx, cy, mRadius, mCurrentDayPaint);
}
if(hasScheme){
canvas.drawCircle(x + mItemWidth - mPadding - mCircleRadius / 2, mPadding + mCircleRadius, mCircleRadius, mSchemeBasicPaint);
mTextPaint.setColor(calendar.getSchemeColor());
canvas.drawText(calendar.getScheme(), x + mItemWidth - mPadding - mCircleRadius, mPadding + mSchemeBaseLine, mTextPaint);
}
if (calendar.isWeekend() && calendar.isCurrentMonth()) {
mCurMonthTextPaint.setColor(0xFF489dff);
mCurMonthLunarTextPaint.setColor(0xFF489dff);
mSchemeTextPaint.setColor(0xFF489dff);
mSchemeLunarTextPaint.setColor(0xFF489dff);
mOtherMonthLunarTextPaint.setColor(0xFF489dff);
mOtherMonthTextPaint.setColor(0xFF489dff);
} else {
mCurMonthTextPaint.setColor(0xff333333);
mCurMonthLunarTextPaint.setColor(0xffCFCFCF);
mSchemeTextPaint.setColor(0xff333333);
mSchemeLunarTextPaint.setColor(0xffCFCFCF);
mOtherMonthTextPaint.setColor(0xFFe1e1e1);
mOtherMonthLunarTextPaint.setColor(0xFFe1e1e1);
}
if (isSelected) {
canvas.drawText(String.valueOf(calendar.getDay()), cx, mTextBaseLine + top,
mSelectTextPaint);
canvas.drawText(calendar.getLunar(), cx, mTextBaseLine + mItemHeight / 10, mSelectedLunarTextPaint);
} else if (hasScheme) {
canvas.drawText(String.valueOf(calendar.getDay()), cx, mTextBaseLine + top,
calendar.isCurrentMonth() ? mSchemeTextPaint : mOtherMonthTextPaint);
canvas.drawText(calendar.getLunar(), cx, mTextBaseLine + mItemHeight / 10,
!TextUtils.isEmpty(calendar.getSolarTerm()) ? mSolarTermTextPaint : mSchemeLunarTextPaint);
} else {
canvas.drawText(String.valueOf(calendar.getDay()), cx, mTextBaseLine + top,
calendar.isCurrentDay() ? mCurDayTextPaint :
calendar.isCurrentMonth() ? mCurMonthTextPaint : mOtherMonthTextPaint);
canvas.drawText(calendar.getLunar(), cx, mTextBaseLine + mItemHeight / 10,
calendar.isCurrentDay() ? mCurDayLunarTextPaint :
!TextUtils.isEmpty(calendar.getSolarTerm()) ? mSolarTermTextPaint :
calendar.isCurrentMonth() ?
mCurMonthLunarTextPaint : mOtherMonthLunarTextPaint);
}
}
/**
* dppx
*
* @param context context
* @param dpValue dp
* @return px
*/
private static int dipToPx(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
}

@ -0,0 +1,133 @@
package com.rehome.meetingbook.weiget;
/**
* Create By HuangWenFei
* 2022-12-22 14:18
*
*/
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import com.haibin.calendarview.Calendar;
import com.haibin.calendarview.YearView;
/**
*
* Created by huanghaibin on 2018/10/9.
*/
@SuppressWarnings("unused")
public class CustomYearView extends YearView {
private int mTextPadding;
/**
*
*/
private Paint mLeapYearTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
public CustomYearView(Context context) {
super(context);
mTextPadding = dipToPx(context, 3);
mLeapYearTextPaint.setTextSize(dipToPx(context, 12));
mLeapYearTextPaint.setColor(0xffd1d1d1);
mLeapYearTextPaint.setAntiAlias(true);
mLeapYearTextPaint.setFakeBoldText(true);
}
@Override
protected void onDrawMonth(Canvas canvas, int year, int month, int x, int y, int width, int height) {
String text = getContext()
.getResources()
.getStringArray(com.haibin.calendarview.R.array.month_string_array)[month - 1];
canvas.drawText(text,
x + mItemWidth / 2 - mTextPadding,
y + mMonthTextBaseLine,
mMonthTextPaint);
if (month == 2 && isLeapYear(year)) {
float w = getTextWidth(mMonthTextPaint, text);
canvas.drawText("闰年",
x + mItemWidth / 2 - mTextPadding + w + dipToPx(getContext(), 6),
y + mMonthTextBaseLine,
mLeapYearTextPaint);
}
}
private float getTextWidth(Paint paint, String text) {
return paint.measureText(text);
}
/**
*
*
* @param year year
* @return
*/
private static boolean isLeapYear(int year) {
return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
}
@Override
protected void onDrawWeek(Canvas canvas, int week, int x, int y, int width, int height) {
String text = getContext().getResources().getStringArray(com.haibin.calendarview.R.array.year_view_week_string_array)[week];
canvas.drawText(text,
x + width / 2,
y + mWeekTextBaseLine,
mWeekTextPaint);
}
@Override
protected boolean onDrawSelected(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme) {
int cx = x + mItemWidth / 2;
int cy = y + mItemHeight / 2;
int radius = Math.min(mItemWidth, mItemHeight) / 8 * 5;
canvas.drawCircle(cx, cy, radius, mSelectedPaint);
return true;
}
@Override
protected void onDrawScheme(Canvas canvas, Calendar calendar, int x, int y) {
}
@Override
protected void onDrawText(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme, boolean isSelected) {
float baselineY = mTextBaseLine + y;
int cx = x + mItemWidth / 2;
if (isSelected) {
canvas.drawText(String.valueOf(calendar.getDay()),
cx,
baselineY,
hasScheme ? mSchemeTextPaint : mSelectTextPaint);
} else if (hasScheme) {
canvas.drawText(String.valueOf(calendar.getDay()),
cx,
baselineY,
calendar.isCurrentDay() ? mCurDayTextPaint : mSchemeTextPaint);
} else {
canvas.drawText(String.valueOf(calendar.getDay()), cx, baselineY,
calendar.isCurrentDay() ? mCurDayTextPaint : mCurMonthTextPaint);
}
}
/**
* dppx
*
* @param context context
* @param dpValue dp
* @return px
*/
private static int dipToPx(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
}

@ -0,0 +1,279 @@
package com.rehome.meetingbook.weiget;
import android.app.Dialog;
import android.content.Context;
import android.view.Display;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;
import com.rehome.meetingbook.R;
import java.text.SimpleDateFormat;
import java.util.Calendar;
/**
* Create By HuangWenFei
* 2022-12-09 15:51
*
*/
public class DateTimeMinutePickDialog extends Dialog implements View.OnClickListener, DatePicker.OnDateChangedListener,
TimePicker.OnTimeChangedListener {
private final TextView tv_dialog_title;
private TextView tv_dialog_msg;
private final TextView tv_dialog_commit;
private final TextView tv_dialog_cancel;
private final View lay_dialog_title;
private final View lay_dialog_cancel;
private View lay_dialog_commit;
private final DateTimeMinutePickDialog.CommitClickListener commitClickListener;
private final DatePicker datePicker;
private final TimePicker timePicker;
private String dateTime, outPutDateTime, outPutDateTime1, outPutDateTime2;
private Calendar calendar = Calendar.getInstance();
private final Calendar nowCalendar = Calendar.getInstance();//现在时间
private Calendar tempCalendar = Calendar.getInstance();//历史时间
private final SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
private final SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
private final SimpleDateFormat simpleDateFormat3 = new SimpleDateFormat("yyyy-MM-dd");
private final SimpleDateFormat simpleDateFormat4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public DateTimeMinutePickDialog(Context context, DateTimeMinutePickDialog.CommitClickListener commitClickListener) {
super(context);
this.commitClickListener = commitClickListener;
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
setContentView(R.layout.layout_datetime_dialog);
Window window = getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = (getScreenWidth(context)) * 2 / 5;
window.setGravity(Gravity.CENTER);
lay_dialog_title = findViewById(R.id.lay_dialog_title);
tv_dialog_title = findViewById(R.id.dialog_title);
lay_dialog_cancel = findViewById(R.id.lay_dialog_cancel);
// lay_dialog_commit = findViewById(R.id.lay_dialog_commit);
tv_dialog_cancel = findViewById(R.id.dialog_cancel);
tv_dialog_commit = findViewById(R.id.dialog_commit);
datePicker = findViewById(R.id.datePicker);
timePicker = findViewById(R.id.timePicker);
if (calendar != null) {
initDateTime(datePicker, timePicker, calendar);
}
timePicker.setIs24HourView(true);
timePicker.setOnTimeChangedListener(this);
tv_dialog_cancel.setOnClickListener(this);
tv_dialog_commit.setOnClickListener(this);
}
public DateTimeMinutePickDialog(Context context, Calendar calendar,boolean isStartTime,DateTimeMinutePickDialog.CommitClickListener commitClickListener) {
super(context);
this.commitClickListener = commitClickListener;
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
setContentView(R.layout.layout_datetime_dialog);
Window window = getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = (getScreenWidth(context)) * 2 / 5;
window.setGravity(Gravity.CENTER);
lay_dialog_title = findViewById(R.id.lay_dialog_title);
tv_dialog_title = findViewById(R.id.dialog_title);
lay_dialog_cancel = findViewById(R.id.lay_dialog_cancel);
// lay_dialog_commit = findViewById(R.id.lay_dialog_commit);
tv_dialog_cancel = findViewById(R.id.dialog_cancel);
tv_dialog_commit = findViewById(R.id.dialog_commit);
datePicker = findViewById(R.id.datePicker);
timePicker = findViewById(R.id.timePicker);
this.calendar=calendar;
if (calendar != null) {
if(isStartTime){
initDateTime(datePicker, timePicker, calendar,true);
}else{
initDateTime(datePicker, timePicker, calendar,false);
}
}
timePicker.setIs24HourView(true);
timePicker.setOnTimeChangedListener(this);
tv_dialog_cancel.setOnClickListener(this);
tv_dialog_commit.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.dialog_cancel:
dismiss();
break;
case R.id.dialog_commit:
commitClickListener.confirm(outPutDateTime, outPutDateTime1,outPutDateTime2,calendar);
dismiss();
break;
}
}
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
onDateChanged(null, 0, 0, 0);
}
/**
*
*
* @param view
* @param year
* @param monthOfYear
* @param dayOfMonth
*/
public void onDateChanged(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
tempCalendar.set(datePicker.getYear(), datePicker.getMonth(),
datePicker.getDayOfMonth(), timePicker.getCurrentHour(),
timePicker.getCurrentMinute(),0);
/**
*
*/
// if (nowCalendar.getTimeInMillis() > tempCalendar.getTimeInMillis()) {
// changeDateTime(datePicker, timePicker, nowCalendar);
// } else {
calendar = tempCalendar;
dateTime = simpleDateFormat1.format(calendar.getTime());
tv_dialog_title.setText(dateTime);
outPutDateTime = simpleDateFormat2.format(calendar.getTime());
outPutDateTime1 = simpleDateFormat3.format(calendar.getTime());
outPutDateTime2 = simpleDateFormat4.format(calendar.getTime());
// }
}
/**
*
*
* @param datePicker
* @param timePicker
* @param calendar
*/
private void changeDateTime(DatePicker datePicker, TimePicker timePicker, Calendar calendar) {
datePicker.init(calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH), this);
//设置不显示年
if (datePicker != null) {
((ViewGroup) ((ViewGroup) datePicker.getChildAt(0)).getChildAt(0)).getChildAt(0).setVisibility(View.GONE);
}
tv_dialog_title.setText(simpleDateFormat1.format(calendar.getTime()));
//设置显示时分
timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY));
timePicker.setCurrentMinute(calendar.get(Calendar.MINUTE));
}
/**
*
*
* @param datePicker
* @param timePicker
* @param calendar
*/
private void initDateTime(DatePicker datePicker, TimePicker timePicker, Calendar calendar) {
// calendar.add(Calendar.DATE, 1);
datePicker.init(calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH), this);
// 设置不显示年
if (datePicker != null) {
((ViewGroup) ((ViewGroup) datePicker.getChildAt(0)).getChildAt(0)).getChildAt(0).setVisibility(View.GONE);
}
calendar.set(datePicker.getYear(), datePicker.getMonth(),
datePicker.getDayOfMonth(), timePicker.getCurrentHour(),
timePicker.getCurrentMinute(),0);
tv_dialog_title.setText(simpleDateFormat1.format(calendar.getTime()));
//设置显示时分
timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY));
timePicker.setCurrentMinute(calendar.get(Calendar.MINUTE));
tempCalendar = calendar;
outPutDateTime = simpleDateFormat2.format(calendar.getTime());
outPutDateTime1 = simpleDateFormat3.format(calendar.getTime());
outPutDateTime2 = simpleDateFormat4.format(calendar.getTime());
}
/**
*
*
* @param datePicker
* @param timePicker
* @param calendar
*/
private void initDateTime(DatePicker datePicker, TimePicker timePicker, Calendar calendar,boolean isStartTime) {
// calendar.add(Calendar.DATE, 1);
datePicker.init(calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH), this);
// 设置不显示年
if (datePicker != null) {
((ViewGroup) ((ViewGroup) datePicker.getChildAt(0)).getChildAt(0)).getChildAt(0).setVisibility(View.GONE);
}
if(isStartTime){
calendar.set(datePicker.getYear(), datePicker.getMonth(),
datePicker.getDayOfMonth(), 9,
0,0);
}else{
calendar.set(datePicker.getYear(), datePicker.getMonth(),
datePicker.getDayOfMonth(), 16,
0,0);
}
tv_dialog_title.setText(simpleDateFormat1.format(calendar.getTime()));
//设置显示时分
timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY));
timePicker.setCurrentMinute(calendar.get(Calendar.MINUTE));
tempCalendar = calendar;
outPutDateTime = simpleDateFormat2.format(calendar.getTime());
outPutDateTime1 = simpleDateFormat3.format(calendar.getTime());
outPutDateTime2 = simpleDateFormat4.format(calendar.getTime());
}
public interface CommitClickListener {
/**
* @param outPutDate
* @param outPutDate1
* @param outPutDate2
*/
void confirm(String outPutDate, String outPutDate1, String outPutDate2,Calendar calendarCallBack);
}
//获取屏幕宽度
public static int getScreenWidth(Context context) {
WindowManager manager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
return display.getWidth();
}
}

@ -0,0 +1,248 @@
package com.rehome.meetingbook.weiget;
/**
* Create By HuangWenFei
* 2022-12-09 15:10
*
*/
import android.content.Context;
import android.content.res.TypedArray;
import androidx.annotation.Nullable;
import android.graphics.Color;
import android.text.Html;
import android.text.InputType;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
import com.rehome.meetingbook.R;
import com.zhy.autolayout.AutoLinearLayout;
import com.zhy.autolayout.utils.AutoUtils;
/**
* Created by Rehome-rjb1 on 2017/5/9.
* <p>
*
* <declare-styleable name="InputLayout">
* <attr name="tv_title" format="string" /><!-- -->
* <attr name="isShowSelect" format="boolean" /><!-- -->
* <attr name="isShowTextView" format="boolean" /><!-- -->
* <attr name="isShowNumSubView" format="boolean" /><!-- -->
* <attr name="minValue" format="integer" /><!-- -->
* <attr name="hintText" format="string" /><!-- -->
* <attr name="must" format="boolean" /><!-- * -->
* </declare-styleable>
*/
public class InputLayout extends AutoLinearLayout {
TextView tvTitle;
ClearEditText etContent;
TextView tvContent;
NumAddSubView numAddSubView;
ImageButton ibtnSelect;
private View view;
public InputLayout(Context context) {
super(context, null);
initView();
}
public InputLayout(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
initView();
if (attrs != null) {
TypedArray type = context.obtainStyledAttributes(attrs, R.styleable.InputLayout);
String title = type.getString(R.styleable.InputLayout_tv_title);
Boolean isShowSelect = type.getBoolean(R.styleable.InputLayout_isShowSelect, false);
Boolean isShowTextView = type.getBoolean(R.styleable.InputLayout_isShowTextView, false);
Boolean isShowNumSubView = type.getBoolean(R.styleable.InputLayout_isShowNumSubView, false);
String hintText = type.getString(R.styleable.InputLayout_hintText);
Boolean must = type.getBoolean(R.styleable.InputLayout_must, false);
int minValue = type.getInt(R.styleable.InputLayout_minValue, 1);
numAddSubView.setMinNum(minValue);
setHintText(hintText);
setTvTitle(title, must);
isShowIbtnSelect(isShowSelect);
isShowTextView(isShowTextView);
isShowNumSubView(isShowNumSubView);
type.recycle();
}
}
public InputLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
public void setTitleColor(){
tvTitle.setTextColor(Color.parseColor("#737373"));
}
private void initView() {
if (view == null) {
view = View.inflate(getContext(), R.layout.layout_input, this);
AutoUtils.auto(view);
tvTitle = view.findViewById(R.id.tv_title);
etContent = view.findViewById(R.id.et_content);
tvContent = view.findViewById(R.id.tv_content);
numAddSubView = view.findViewById(R.id.numAddSubView);
ibtnSelect = view.findViewById(R.id.ibtn_select);
}
etContent.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (event != null) {
return (event.getKeyCode() == KeyEvent.KEYCODE_ENTER);
} else {
return false;
}
}
});
}
public void setTvTitle(String title, boolean must) {
if (must) {
String mustTitle = title + "<font color='red'>*</font>";
tvTitle.setText(Html.fromHtml(mustTitle + ":"));
} else {
tvTitle.setText(title + ":");
}
}
public void isShowIbtnSelect(boolean isShow) {
ibtnSelect.setVisibility(isShow ? VISIBLE : GONE);
}
public void isShowTextView(boolean isShow) {
if (isShow) {
tvContent.setVisibility(VISIBLE);
etContent.setVisibility(GONE);
}
}
public void isShowNumSubView(boolean isShow) {
numAddSubView.setVisibility(isShow ? VISIBLE : GONE);
}
/**
*
*
* @param listener
*/
public void setIbtnSelectOnClickListener(OnClickListener listener) {
ibtnSelect.setOnClickListener(listener);
}
/**
*
*
* @param listener
*/
public void setTvContentOnClickListener(OnClickListener listener) {
tvContent.setOnClickListener(listener);
}
/**
*
*
* @param content
*/
public void setContent(String content) {
if (tvContent.getVisibility() == VISIBLE) {
tvContent.setText(content);
} else {
etContent.setText(content);
}
}
public void setHintText(String hintText) {
tvContent.setHint(hintText);
}
/**
*
*
* @return
*/
public String getContent() {
String content;
if (tvContent.getVisibility() == VISIBLE) {
content = tvContent.getText().toString();
} else {
content = etContent.getText().toString();
}
return content;
}
/**
* +
*/
public void setIbtnSelectIcon() {
ibtnSelect.setImageResource(R.drawable.add_gray);
}
/**
*
*
* @return
*/
public String getNum() {
return numAddSubView.getNum();
}
public void setNum(String num) {
numAddSubView.setNum(num);
}
/**
*
*
* @param enabled
*/
@Override
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
// etContent.setVisibility(VISIBLE);
// tvContent.setVisibility(VISIBLE);
etContent.setEnabled(enabled);
tvContent.setEnabled(enabled);
ibtnSelect.setEnabled(enabled);
numAddSubView.setEnabled(enabled);
}
/**
* InputType
*/
public void setEtNumInputType() {
etContent.setInputType(InputType.TYPE_CLASS_NUMBER);
}
/**
* InputType
*/
public void setNo() {
etContent.setInputType(InputType.TYPE_CLASS_PHONE);
}
}

@ -0,0 +1,128 @@
package com.rehome.meetingbook.weiget;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.text.TextUtils;
import android.view.Display;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
import android.widget.Toast;
import com.rehome.meetingbook.R;
/**
* Created by Rehome-rjb1 on 2017/5/17.
* 1
*/
public class LoadDialog extends Dialog {
private static LoadDialog loadDialog;
private final boolean cancelable;
private final String tipMsg;
public LoadDialog(final Context ctx, boolean cancelable, String tipMsg) {
super(ctx);
this.cancelable = cancelable;
this.tipMsg = tipMsg;
this.getContext().setTheme(android.R.style.Theme_DeviceDefault_Dialog_NoActionBar_MinWidth);
setContentView(R.layout.layout_dialog);
// 必须放在加载布局后
setparams();
TextView tv = findViewById(R.id.tvLoad);
if (!TextUtils.isEmpty(tipMsg)) {
tv.setVisibility(View.VISIBLE);
tv.setText(tipMsg);
}
}
private void setparams() {
this.setCancelable(cancelable);
this.setCanceledOnTouchOutside(false);
WindowManager windowManager = getWindow().getWindowManager();
Display display = windowManager.getDefaultDisplay();
WindowManager.LayoutParams lp = this.getWindow().getAttributes();
// Dialog宽度
lp.width = (int) (display.getWidth() * 0.7);
Window window = getWindow();
window.setAttributes(lp);
window.getDecorView().getBackground().setAlpha(0);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (!cancelable) {
Toast.makeText(getContext(), tipMsg, Toast.LENGTH_SHORT).show();
return true;
}
}
return super.onKeyDown(keyCode, event);
}
public static void show(Context context) {
show(context, null, true);
}
public static void show(Context context, String message) {
show(context, message, true);
}
public static void show(Context context, int resourceId) {
show(context, context.getResources().getString(resourceId), true);
}
private static void show(Context context, String message, boolean cancelable) {
if (context instanceof Activity) {
if (((Activity) context).isFinishing()) {
return;
}
}
if (loadDialog != null && loadDialog.isShowing()) {
return;
}
loadDialog = new LoadDialog(context, cancelable, message);
loadDialog.show();
}
public static void dismiss(Context context) {
try {
if (context instanceof Activity) {
if (((Activity) context).isFinishing()) {
loadDialog = null;
return;
}
}
if (loadDialog != null && loadDialog.isShowing()) {
Context loadContext = loadDialog.getContext();
if (loadContext != null && loadContext instanceof Activity) {
if (((Activity) loadContext).isFinishing()) {
loadDialog = null;
return;
}
}
loadDialog.dismiss();
loadDialog = null;
}
} catch (Exception e) {
e.printStackTrace();
loadDialog = null;
}
}
}

@ -0,0 +1,84 @@
package com.rehome.meetingbook.weiget;
/**
* Create By HuangWenFei
* 2022-12-20 11:43
*
*/
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import com.haibin.calendarview.Calendar;
import com.haibin.calendarview.MonthView;
/**
* 仿
*
*/
public class MeiZuMonthView extends MonthView {
private int mRadius;
public MeiZuMonthView(Context context) {
super(context);
}
@Override
protected void onPreviewHook() {
mRadius = Math.min(mItemWidth, mItemHeight) / 5 * 2;
//FILL 内部填充
//STROKE 描边
//FILL_AND_STROKE 内部填充+描边
mSchemePaint.setStyle(Paint.Style.FILL_AND_STROKE);
}
@Override
protected boolean onDrawSelected(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme) {
int cx = x + mItemWidth / 2;
int cy = y + mItemHeight / 2;
canvas.drawCircle(cx, cy, mRadius, mSelectedPaint);
return true;
}
@Override
protected void onDrawScheme(Canvas canvas, Calendar calendar, int x, int y) {
int cx = x + mItemWidth / 2;
int cy = y + mItemHeight / 2;
canvas.drawCircle(cx, cy, mRadius, mSchemePaint);
}
@Override
protected void onDrawText(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme, boolean isSelected) {
//建立文字原点
float baselineY = mTextBaseLine + y;
int cx = x + mItemWidth / 2;
//判断当前日期是否在本月中
boolean isInRange = isInRange(calendar);
//判断当前日期是否可用
boolean isEnable = !onCalendarIntercept(calendar);
//如果该日期被选中,添加选中样式
if (isSelected) {
canvas.drawText(String.valueOf(calendar.getDay()),
cx,
baselineY,
mSelectTextPaint);
}
//如果没被选中但是是标注日期
else if (hasScheme) {
canvas.drawText(String.valueOf(calendar.getDay()),
cx,
baselineY,
calendar.isCurrentDay() ? mCurDayTextPaint :
calendar.isCurrentMonth() && isInRange && isEnable ? mSchemeTextPaint : mOtherMonthTextPaint);
}
//其他
else {
canvas.drawText(String.valueOf(calendar.getDay()),
cx,
baselineY,
calendar.isCurrentDay() ? mCurDayTextPaint :
calendar.isCurrentMonth() && isInRange && isEnable ? mCurMonthTextPaint : mOtherMonthTextPaint);
}
}
}

@ -0,0 +1,94 @@
package com.rehome.meetingbook.weiget;
/**
* Create By HuangWenFei
* 2022-12-20 11:02
*
*/
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import com.haibin.calendarview.Calendar;
import com.haibin.calendarview.MultiMonthView;
public class MyMonthView extends MultiMonthView {
private int mRadius;
public MyMonthView(Context context) {
super(context);
}
@Override
protected void onPreviewHook() {
mRadius = Math.min(mItemWidth, mItemHeight) / 5 * 2;
//FILL 内部填充
//STROKE 描边
//FILL_AND_STROKE 内部填充+描边
mSchemePaint.setStyle(Paint.Style.FILL_AND_STROKE);
}
@Override
protected boolean onDrawSelected(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme, boolean isSelectedPre, boolean isSelectedNext) {
int cx = x + mItemWidth / 2;
int cy = y + mItemHeight / 2;
//可点开onDrawSelected自行查看参数说明
if (isSelectedPre) {
if (isSelectedNext) {
canvas.drawRect(x, cy - mRadius, x + mItemWidth, cy + mRadius, mSelectedPaint);
} else {//最后一个the last
canvas.drawRect(x, cy - mRadius, cx, cy + mRadius, mSelectedPaint);
canvas.drawCircle(cx, cy, mRadius, mSelectedPaint);
}
} else {
if (isSelectedNext) {
canvas.drawRect(cx, cy - mRadius, x + mItemWidth, cy + mRadius, mSelectedPaint);
}
canvas.drawCircle(cx, cy, mRadius, mSelectedPaint);
}
return false;
}
@Override
protected void onDrawScheme(Canvas canvas, Calendar calendar, int x, int y, boolean isSelected) {
int cx = x + mItemWidth / 2;
int cy = y + mItemHeight / 2;
canvas.drawCircle(cx, cy, mRadius, mSchemePaint);
}
@Override
protected void onDrawText(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme, boolean isSelected) {
//建立文字原点
float baselineY = mTextBaseLine + y;
int cx = x + mItemWidth / 2;
//判断当前日期是否在本月中
boolean isInRange = isInRange(calendar);
//判断当前日期是否可用
boolean isEnable = !onCalendarIntercept(calendar);
//如果该日期被选中,添加选中样式
if (isSelected) {
canvas.drawText(String.valueOf(calendar.getDay()),
cx,
baselineY,
mSelectTextPaint);
}
//如果没被选中但是是标注日期
else if (hasScheme) {
canvas.drawText(String.valueOf(calendar.getDay()),
cx,
baselineY,
calendar.isCurrentDay() ? mCurDayTextPaint :
calendar.isCurrentMonth() && isInRange && isEnable ? mSchemeTextPaint : mOtherMonthTextPaint);
}
//其他
else {
canvas.drawText(String.valueOf(calendar.getDay()),
cx,
baselineY,
calendar.isCurrentDay() ? mCurDayTextPaint :
calendar.isCurrentMonth() && isInRange && isEnable ? mCurMonthTextPaint : mOtherMonthTextPaint);
}
}
}

@ -0,0 +1,122 @@
package com.rehome.meetingbook.weiget;
/**
* Create By HuangWenFei
* 2022-12-09 15:15
*
*/
import android.content.Context;
import android.content.res.TypedArray;
import androidx.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.rehome.meetingbook.R;
/**
*
*/
public class NumAddSubView extends LinearLayout {
ImageButton ibtnSub;
TextView tvNum;
ImageButton ibtnAdd;
private View view;
private int maxNum = 100;
private int minNum = 1;
public NumAddSubView(Context context) {
super(context, null);
initView();
}
public NumAddSubView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
initView();
if (attrs != null) {
TypedArray type = context.obtainStyledAttributes(attrs, R.styleable.NumAddSubView);
maxNum = type.getInt(R.styleable.NumAddSubView_maxNum, 100);
minNum = type.getInt(R.styleable.NumAddSubView_minNum, 1);
}
}
public NumAddSubView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
private void initView() {
if (view == null) {
view = View.inflate(getContext(), R.layout.num_add_sub_layout, this);
ibtnSub = view.findViewById(R.id.ibtn_sub);
tvNum = view.findViewById(R.id.tv_num);
ibtnAdd = view.findViewById(R.id.ibtn_add);
ibtnAdd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int nowMax = getNum(tvNum) + 1;
if (nowMax <= maxNum) {
tvNum.setText(nowMax + "");
if (listener != null) {
listener.numChange(tvNum.getText().toString());
}
}
}
});
ibtnSub.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int nowMin = getNum(tvNum) - 1;
if (nowMin >= minNum) {
tvNum.setText(nowMin + "");
if (listener != null) {
listener.numChange(tvNum.getText().toString());
}
}
}
});
}
tvNum.setText("1");
}
public void setMaxNum(int maxNum) {
this.maxNum = maxNum;
}
public void setMinNum(int minNum) {
this.minNum = minNum;
}
public void setNum(String num) {
tvNum.setText(num);
}
public int getNum(TextView num) {
return Integer.parseInt(num.getText().toString());
}
public String getNum() {
return tvNum.getText().toString();
}
private NumChangeListener listener;
public void setListener(NumChangeListener listener) {
this.listener = listener;
}
public interface NumChangeListener {
void numChange(String num);
}
}

@ -0,0 +1,86 @@
package com.rehome.meetingbook.weiget;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Display;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.NonNull;
import com.rehome.meetingbook.R;
import com.rehome.meetingbook.databinding.DialogResultBinding;
/**
* Create By HuangWenFei
* 2022-12-13 11:18
*
*/
public class ResultDialog extends Dialog {
protected View mView;
protected DialogResultBinding binding;
Context context;
private ResultDialogListener listener;
public ResultDialog(@NonNull Context context, String msg, ResultDialogListener listener) {
super(context);
this.context=context;
binding = DialogResultBinding.inflate(getLayoutInflater());
mView = binding.getRoot();
binding.tvMsg.setText(msg);
binding.bottomBtnView.dialogCommit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
if (listener != null) {
listener.confirm();
}
}
});
this.listener = listener;
setCancelable(false);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(mView);
Window window = getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = (getScreenWidth(context)) / 4;
window.setGravity(Gravity.CENTER);
// Window window = this.getWindow();
// WindowManager.LayoutParams lp = window.getAttributes();
// Display d = window.getWindowManager().getDefaultDisplay();
// lp.width = (int) (d.getWidth() * 0.9F);
// window.setAttributes(lp);
}
public void setTvMsg(String msg) {
if (!TextUtils.isEmpty(msg)) {
binding.tvMsg.setText(msg);
}
}
//获取屏幕宽度
public static int getScreenWidth(Context context) {
WindowManager manager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
return display.getWidth();
}
public interface ResultDialogListener {
void confirm();
}
}

@ -0,0 +1,74 @@
package com.rehome.meetingbook.weiget;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import com.haibin.calendarview.Calendar;
import com.haibin.calendarview.MonthView;
/**
* Create By HuangWenFei
* 2022-12-22 11:34
* 仿
*/
public class SimpleMonthView extends MonthView {
private int mRadius;
public SimpleMonthView(Context context) {
super(context);
}
@Override
protected void onPreviewHook() {
mRadius = Math.min(mItemWidth, mItemHeight) / 5 * 2;
mSchemePaint.setStyle(Paint.Style.STROKE);
}
@Override
protected void onLoopStart(int x, int y) {
}
@Override
protected boolean onDrawSelected(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme) {
int cx = x + mItemWidth / 2;
int cy = y + mItemHeight / 2;
canvas.drawCircle(cx, cy, mRadius, mSelectedPaint);
return false;
}
@Override
protected void onDrawScheme(Canvas canvas, Calendar calendar, int x, int y) {
int cx = x + mItemWidth / 2;
int cy = y + mItemHeight / 2;
canvas.drawCircle(cx, cy, mRadius, mSchemePaint);
}
@Override
protected void onDrawText(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme, boolean isSelected) {
float baselineY = mTextBaseLine + y;
int cx = x + mItemWidth / 2;
if (isSelected) {
canvas.drawText(String.valueOf(calendar.getDay()),
cx,
baselineY,
mSelectTextPaint);
} else if (hasScheme) {
canvas.drawText(String.valueOf(calendar.getDay()),
cx,
baselineY,
calendar.isCurrentDay() ? mCurDayTextPaint :
calendar.isCurrentMonth() ? mSchemeTextPaint : mOtherMonthTextPaint);
} else {
canvas.drawText(String.valueOf(calendar.getDay()), cx, baselineY,
calendar.isCurrentDay() ? mCurDayTextPaint :
calendar.isCurrentMonth() ? mCurMonthTextPaint : mOtherMonthTextPaint);
}
}
}

@ -0,0 +1,67 @@
package com.rehome.meetingbook.weiget;
/**
* Create By HuangWenFei
* 2022-12-22 11:32
*
*/
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import com.haibin.calendarview.Calendar;
import com.haibin.calendarview.WeekView;
public class SimpleWeekView extends WeekView {
private int mRadius;
public SimpleWeekView(Context context) {
super(context);
}
@Override
protected void onPreviewHook() {
mRadius = Math.min(mItemWidth, mItemHeight) / 5 * 2;
mSchemePaint.setStyle(Paint.Style.STROKE);
}
@Override
protected boolean onDrawSelected(Canvas canvas, Calendar calendar, int x, boolean hasScheme) {
int cx = x + mItemWidth / 2;
int cy = mItemHeight / 2;
canvas.drawCircle(cx, cy, mRadius, mSelectedPaint);
return false;
}
@Override
protected void onDrawScheme(Canvas canvas, Calendar calendar, int x) {
int cx = x + mItemWidth / 2;
int cy = mItemHeight / 2;
canvas.drawCircle(cx, cy, mRadius, mSchemePaint);
}
@Override
protected void onDrawText(Canvas canvas, Calendar calendar, int x, boolean hasScheme, boolean isSelected) {
float baselineY = mTextBaseLine;
int cx = x + mItemWidth / 2;
if (isSelected) {
canvas.drawText(String.valueOf(calendar.getDay()),
cx,
baselineY,
mSelectTextPaint);
} else if (hasScheme) {
canvas.drawText(String.valueOf(calendar.getDay()),
cx,
baselineY,
calendar.isCurrentDay() ? mCurDayTextPaint :
calendar.isCurrentMonth() ? mSchemeTextPaint : mSchemeTextPaint);
} else {
canvas.drawText(String.valueOf(calendar.getDay()), cx, baselineY,
calendar.isCurrentDay() ? mCurDayTextPaint :
calendar.isCurrentMonth() ? mCurMonthTextPaint : mCurMonthTextPaint);
}
}
}

@ -0,0 +1,46 @@
package com.rehome.meetingbook.weiget;
import android.app.ProgressDialog;
import android.content.Context;
import android.view.Display;
import android.view.Gravity;
import android.view.Window;
import android.view.WindowManager;
/**
* Create By HuangWenFei
* 2022-11-29 15:28
*
*/
public class WaitDialog extends ProgressDialog {
public WaitDialog(Context context, String msg) {
super(context);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setCanceledOnTouchOutside(false);
setProgressStyle(STYLE_SPINNER);
setMessage(msg);
}
public WaitDialog(Context context, String msg, boolean setWidth) {
super(context);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setCanceledOnTouchOutside(false);
setProgressStyle(STYLE_SPINNER);
Window window = getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = (getScreenWidth(context)) / 5;
window.setGravity(Gravity.CENTER);
setMessage(msg);
}
//获取屏幕宽度
public static int getScreenWidth(Context context) {
WindowManager manager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
return display.getWidth();
}
}

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<set android:shareInterpolator="false" xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:interpolator="@android:anim/linear_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="0"
android:toDegrees="+360"
android:duration="1500"
android:startOffset="-1"
android:repeatMode="restart"
android:repeatCount="-1"/>
</set>

@ -0,0 +1,30 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="85.84757"
android:endY="92.4963"
android:startX="42.9492"
android:startY="49.59793"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 点击背景 -->
<item android:state_pressed="true">
<shape>
<corners android:radius="8dp" />
<solid android:color="#111176e8" />
<stroke android:width="1dp" android:color="#1176e8" />
</shape>
</item>
<!-- 默认背景 -->
<item>
<shape>
<corners android:radius="8dp" />
<solid android:color="#00000000" />
<stroke android:width="1px" android:color="#881176e8" />
</shape>
</item>
</selector>

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<solid android:color="#cfcfcf" />
</shape>
</item>
<item>
<shape>
<solid android:color="#00000000" />
</shape>
</item>
</selector>

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#fff" />
<stroke
android:width="1dip"
android:color="@color/historyBtnTextColor" />
<corners android:radius="3dp" />
</shape>

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#ffff00" />
<stroke
android:width="1dip"
android:color="@color/historyBtnTextColor" />
<corners android:radius="3dp" />
</shape>

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 正常状态 -->
<item android:drawable="@drawable/btn_normal" android:state_pressed="false"/>
<!-- 按下状态 -->
<item android:drawable="@drawable/btn_pressed" android:state_pressed="true"/>
</selector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 禁用状态 -->
<item android:color="@color/white" android:state_enabled="false" />
<!-- 按压状态 -->
<item android:color="@color/white" android:state_pressed="true" />
<!-- 焦点状态 -->
<item android:color="@color/white" android:state_focused="true" />
<!-- 默认状态 -->
<item android:color="@color/colorPrimaryDark" />
</selector>

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 禁用状态 -->
<item android:color="@color/white" android:state_enabled="false" />
<!-- 按压状态 -->
<item android:color="@color/white" android:state_pressed="true" />
<!-- 焦点状态 -->
<item android:color="@color/white" android:state_focused="true" />
<!-- 默认状态 -->
<item android:color="@color/colorAccent" />
</selector>

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 默认获取验证码按钮样式 -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 禁用状态 -->
<item android:state_enabled="false">
<shape android:shape="rectangle">
<corners android:radius="30dp" />
<solid android:color="@color/colorButtonDisable" />
</shape>
</item>
<!-- 按压状态 -->
<item android:state_pressed="true">
<shape android:shape="rectangle">
<corners android:radius="30dp" />
<solid android:color="@color/colorAccent" />
</shape>
</item>
<!-- 焦点状态 -->
<item android:state_focused="true">
<shape android:shape="rectangle">
<corners android:radius="30dp" />
<solid android:color="@color/colorAccent"/>
</shape>
</item>
<!-- 默认状态 -->
<item>
<shape android:shape="rectangle">
<corners android:radius="30dp" />
<stroke android:color="@color/colorPrimaryDark"
android:width="1dp"/>
</shape>
</item>
</selector>

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 默认获取验证码按钮样式 -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 禁用状态 -->
<item android:state_enabled="false">
<shape android:shape="rectangle">
<corners android:radius="30dp" />
<solid android:color="@color/colorButtonDisable" />
</shape>
</item>
<!-- 按压状态 -->
<item android:state_pressed="true">
<shape android:shape="rectangle">
<corners android:radius="30dp" />
<solid android:color="@color/colorAccent" />
</shape>
</item>
<!-- 焦点状态 -->
<item android:state_focused="true">
<shape android:shape="rectangle">
<corners android:radius="30dp" />
<solid android:color="@color/colorAccent"/>
</shape>
</item>
<!-- 默认状态 -->
<item>
<shape android:shape="rectangle">
<corners android:radius="30dp" />
<stroke android:color="@color/colorAccent"
android:width="1dp"/>
</shape>
</item>
</selector>

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="1dp" />
<padding
android:bottom="1dp"
android:left="1dp"
android:right="1dp"
android:top="1dp" />
<stroke
android:width="1dp"
android:color="#CCCCCC" />
</shape>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF" />
<corners android:radius="5dp" />
<padding
android:bottom="10px"
android:left="10px"
android:right="10px"
android:top="10px" />
</shape>

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 969 B

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save