mirror of
https://gitea.winboll.cc/ZhanGSKen/MyWinBoLL.git
synced 2026-08-17 23:12:09 +08:00
添加“./StallHelper_Bck20260515_150311_246/stallhelper/”源码
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
# StallHelper
|
||||
# 排档辅助管理工具
|
||||
|
||||
## LargeStall Stand Auxiliary Management Tool.
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
apply plugin: 'com.android.application'
|
||||
apply from: '../.winboll/winboll_app_build.gradle'
|
||||
apply from: '../.winboll/winboll_lint_build.gradle'
|
||||
|
||||
def genVersionName(def versionName){
|
||||
// 检查编译标志位配置
|
||||
assert (winbollBuildProps['stageCount'] != null)
|
||||
assert (winbollBuildProps['baseVersion'] != null)
|
||||
// 保存基础版本号
|
||||
winbollBuildProps.setProperty("baseVersion", "${versionName}");
|
||||
//保存编译标志配置
|
||||
FileOutputStream fos = new FileOutputStream(winbollBuildPropsFile)
|
||||
winbollBuildProps.store(fos, "${winbollBuildPropsDesc}");
|
||||
fos.close();
|
||||
|
||||
// 返回编译版本号
|
||||
return "${versionName}." + winbollBuildProps['stageCount']
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion 30
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_7
|
||||
targetCompatibility JavaVersion.VERSION_1_7
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
applicationId "cc.winboll.studio.stallhelper"
|
||||
minSdkVersion 26
|
||||
targetSdkVersion 30
|
||||
versionCode 1
|
||||
// versionName 更新后需要手动设置
|
||||
// .winboll/winbollBuildProps.properties 文件的 stageCount=0
|
||||
// Gradle编译环境下合起来的 versionName 就是 "${versionName}.0"
|
||||
versionName "15.20"
|
||||
if(true) {
|
||||
versionName = genVersionName("${versionName}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
// 下拉控件
|
||||
api 'com.baoyz.pullrefreshlayout:library:1.2.0'
|
||||
// 拼音搜索
|
||||
// https://mvnrepository.com/artifact/com.github.open-android/pinyin4j
|
||||
api 'com.github.open-android:pinyin4j:2.5.0'
|
||||
// SSH
|
||||
api 'com.jcraft:jsch:0.1.55'
|
||||
// Html 解析
|
||||
api 'org.jsoup:jsoup:1.13.1'
|
||||
// 二维码类库
|
||||
api 'com.google.zxing:core:3.4.1'
|
||||
api 'com.journeyapps:zxing-android-embedded:3.6.0'
|
||||
// 应用介绍页类库
|
||||
api 'io.github.medyo:android-about-page:2.0.0'
|
||||
// 网络连接类库
|
||||
api 'com.squareup.okhttp3:okhttp:4.4.1'
|
||||
// AndroidX 类库
|
||||
api 'androidx.appcompat:appcompat:1.1.0'
|
||||
api 'androidx.cardview:cardview:1.0.0'
|
||||
//api 'com.google.android.material:material:1.4.0'
|
||||
//api 'androidx.viewpager:viewpager:1.0.0'
|
||||
//api 'androidx.vectordrawable:vectordrawable:1.1.0'
|
||||
//api 'androidx.vectordrawable:vectordrawable-animated:1.1.0'
|
||||
//api 'androidx.fragment:fragment:1.1.0'
|
||||
|
||||
//注意:以下5个库必须要引入
|
||||
//implementation 'androidx.appcompat:appcompat:1.4.1'
|
||||
api 'androidx.recyclerview:recyclerview:1.0.0'
|
||||
api 'com.google.code.gson:gson:2.8.5'
|
||||
api 'com.github.bumptech.glide:glide:4.9.0'
|
||||
//annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
|
||||
|
||||
// WinBoLL库 nexus.winboll.cc 地址
|
||||
api 'cc.winboll.studio:libaes:15.20.3'
|
||||
api 'cc.winboll.studio:libappbase:15.20.9'
|
||||
|
||||
api fileTree(dir: 'libs', include: ['*.jar'])
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
#Created by .winboll/winboll_app_build.gradle
|
||||
#Wed May 13 02:22:06 HKT 2026
|
||||
stageCount=2
|
||||
libraryProject=
|
||||
baseVersion=15.20
|
||||
publishVersion=15.20.1
|
||||
buildCount=0
|
||||
baseBetaVersion=15.20.2
|
||||
Vendored
+143
@@ -0,0 +1,143 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# By default, the flags in this file are appended to flags specified
|
||||
# in C:\tools\adt-bundle-windows-x86_64-20131030\sdk/tools/proguard/proguard-android.txt
|
||||
# You can edit the include path and order by changing the proguardFiles
|
||||
# directive in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# Add any project specific keep options here:
|
||||
|
||||
# ============================== 基础通用规则 ==============================
|
||||
# 保留系统组件
|
||||
-keep public class * extends android.app.Activity
|
||||
-keep public class * extends android.app.Service
|
||||
-keep public class * extends android.content.BroadcastReceiver
|
||||
-keep public class * extends android.content.ContentProvider
|
||||
-keep public class * extends android.app.backup.BackupAgentHelper
|
||||
-keep public class * extends android.preference.Preference
|
||||
|
||||
# 保留 WinBoLL 核心包及子类(合并简化规则)
|
||||
-keep class cc.winboll.studio.** { *; }
|
||||
-keepclassmembers class cc.winboll.studio.** { *; }
|
||||
|
||||
# 保留所有类中的 public static final String TAG 字段(便于日志定位)
|
||||
-keepclassmembers class * {
|
||||
public static final java.lang.String TAG;
|
||||
}
|
||||
|
||||
# 保留序列化类(避免Parcelable/Gson解析异常)
|
||||
-keep class * implements android.os.Parcelable {
|
||||
public static final android.os.Parcelable$Creator *;
|
||||
}
|
||||
-keepclassmembers class * implements java.io.Serializable {
|
||||
static final long serialVersionUID;
|
||||
private static final java.io.ObjectStreamField[] serialPersistentFields;
|
||||
private void writeObject(java.io.ObjectOutputStream);
|
||||
private void readObject(java.io.ObjectInputStream);
|
||||
java.lang.Object writeReplace();
|
||||
java.lang.Object readResolve();
|
||||
}
|
||||
|
||||
# 保留 R 文件(避免资源ID混淆)
|
||||
-keepclassmembers class **.R$* {
|
||||
public static <fields>;
|
||||
}
|
||||
|
||||
# 保留 native 方法(避免JNI调用失败)
|
||||
-keepclasseswithmembernames class * {
|
||||
native <methods>;
|
||||
}
|
||||
|
||||
# 保留注解和泛型(避免反射/序列化异常)
|
||||
-keepattributes *Annotation*
|
||||
-keepattributes Signature
|
||||
|
||||
# 屏蔽 Java 8+ 警告(适配 Java 7 语法)
|
||||
-dontwarn java.lang.invoke.*
|
||||
-dontwarn android.support.v8.renderscript.*
|
||||
-dontwarn java.util.function.**
|
||||
|
||||
# ============================== 第三方框架专项规则 ==============================
|
||||
# OkHttp 4.4.1(米盟广告请求依赖,完善Lambda兼容)
|
||||
-keep class okhttp3.** { *; }
|
||||
-keep interface okhttp3.** { *; }
|
||||
-keep class okhttp3.internal.** { *; }
|
||||
-keep class okio.** { *; }
|
||||
-dontwarn okhttp3.internal.platform.**
|
||||
-dontwarn okio.**
|
||||
# ============================== 必要补充规则 ==============================
|
||||
# OkHttp 4.4.1 补充规则(Java 7 兼容)
|
||||
-keep class okhttp3.internal.concurrent.** { *; }
|
||||
-keep class okhttp3.internal.connection.** { *; }
|
||||
-dontwarn okhttp3.internal.concurrent.TaskRunner
|
||||
-dontwarn okhttp3.internal.connection.RealCall
|
||||
|
||||
# Glide 4.9.0(米盟广告图片加载依赖)
|
||||
-keep public class * implements com.bumptech.glide.module.GlideModule
|
||||
-keep public class * extends com.bumptech.glide.module.AppGlideModule
|
||||
-keep public enum com.bumptech.glide.load.ImageHeaderParser$ImageType {
|
||||
**[] $VALUES;
|
||||
public *;
|
||||
}
|
||||
-keepclassmembers class * implements com.bumptech.glide.module.AppGlideModule {
|
||||
<init>();
|
||||
}
|
||||
-dontwarn com.bumptech.glide.**
|
||||
|
||||
# Gson 2.8.5(米盟广告数据序列化依赖)
|
||||
-keep class com.google.gson.** { *; }
|
||||
-keep interface com.google.gson.** { *; }
|
||||
-keepclassmembers class * {
|
||||
@com.google.gson.annotations.SerializedName <fields>;
|
||||
}
|
||||
|
||||
# 米盟 SDK(核心广告组件,完整保留避免加载失败)
|
||||
-keep class com.miui.zeus.** { *; }
|
||||
-keep interface com.miui.zeus.** { *; }
|
||||
# 保留米盟日志字段(便于广告加载失败排查)
|
||||
-keepclassmembers class com.miui.zeus.mimo.sdk.** {
|
||||
public static final java.lang.String TAG;
|
||||
}
|
||||
|
||||
# RecyclerView 1.0.0(米盟广告布局渲染依赖)
|
||||
-keep class androidx.recyclerview.** { *; }
|
||||
-keep interface androidx.recyclerview.** { *; }
|
||||
-keepclassmembers class androidx.recyclerview.widget.RecyclerView$Adapter {
|
||||
public *;
|
||||
}
|
||||
|
||||
# 其他第三方框架(按引入依赖保留,无则可删除)
|
||||
# XXPermissions 18.63
|
||||
-keep class com.hjq.permissions.** { *; }
|
||||
-keep interface com.hjq.permissions.** { *; }
|
||||
|
||||
# ZXing 二维码(核心解析组件)
|
||||
-keep class com.google.zxing.** { *; }
|
||||
-keep class com.journeyapps.zxing.** { *; }
|
||||
|
||||
# Jsoup HTML解析
|
||||
-keep class org.jsoup.** { *; }
|
||||
|
||||
# Pinyin4j 拼音搜索
|
||||
-keep class net.sourceforge.pinyin4j.** { *; }
|
||||
|
||||
# JSch SSH组件
|
||||
-keep class com.jcraft.jsch.** { *; }
|
||||
|
||||
# AndroidX 基础组件
|
||||
-keep class androidx.appcompat.** { *; }
|
||||
-keep interface androidx.appcompat.** { *; }
|
||||
|
||||
# ============================== 优化与调试配置 ==============================
|
||||
# 优化级别(平衡混淆效果与性能)
|
||||
-optimizationpasses 5
|
||||
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
|
||||
|
||||
# 调试辅助(保留行号便于崩溃定位)
|
||||
-verbose
|
||||
-dontpreverify
|
||||
-dontusemixedcaseclassnames
|
||||
-keepattributes SourceFile,LineNumberTable
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools" >
|
||||
|
||||
<application
|
||||
|
||||
tools:replace="android:icon"
|
||||
android:icon="@drawable/ic_stall_beta">
|
||||
|
||||
<!-- Put flavor specific code here -->
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<string name="app_name">排档辅助管理工具+</string>
|
||||
|
||||
</resources>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<string name="app_name">StallHelper+</string>
|
||||
|
||||
</resources>
|
||||
@@ -0,0 +1,49 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<manifest
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="cc.winboll.studio.stallhelper">
|
||||
|
||||
<!-- 拥有完全的网络访问权限 -->
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
|
||||
<application
|
||||
android:name=".App"
|
||||
android:allowBackup="true"
|
||||
android:icon="@drawable/ic_stall"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/MyStallHelperTheme"
|
||||
android:supportsRtl="true">
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:label="@string/app_name"
|
||||
android:launchMode="standard"
|
||||
android:exported="true">
|
||||
|
||||
<intent-filter>
|
||||
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
|
||||
</intent-filter>
|
||||
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name=".activities.AboutActivity"
|
||||
android:label="AboutActivity"/>
|
||||
|
||||
<activity
|
||||
android:name="cc.winboll.studio.stallhelper.activities.PreNullDiningTableActivity"
|
||||
android:windowSoftInputMode="adjustResize"/>
|
||||
|
||||
<activity
|
||||
android:name="cc.winboll.studio.stallhelper.activities.CompleteDiningTableActivity"
|
||||
android:windowSoftInputMode="adjustResize"/>
|
||||
|
||||
<activity android:name="cc.winboll.studio.stallhelper.activities.NoteRecordHelperActivity"/>
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
@@ -0,0 +1,34 @@
|
||||
package cc.winboll.studio.stallhelper;
|
||||
|
||||
/**
|
||||
* @Author ZhanGSKen@QQ.COM
|
||||
* @Date 2025/01/22 00:11:41
|
||||
* @Describe 全局应用类
|
||||
*/
|
||||
import cc.winboll.studio.libaes.utils.WinBoLLActivityManager;
|
||||
import cc.winboll.studio.libappbase.GlobalApplication;
|
||||
import cc.winboll.studio.libappbase.ToastUtils;
|
||||
|
||||
public class App extends GlobalApplication {
|
||||
|
||||
public static final String TAG = "App";
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
|
||||
super.onCreate();
|
||||
setIsDebugging(BuildConfig.DEBUG);
|
||||
//setIsDebugging(false);
|
||||
WinBoLLActivityManager.init(this);
|
||||
|
||||
// 初始化 Toast 框架
|
||||
ToastUtils.init(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTerminate() {
|
||||
super.onTerminate();
|
||||
ToastUtils.release();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
package cc.winboll.studio.stallhelper;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import cc.winboll.studio.libappbase.LogUtils;
|
||||
import cc.winboll.studio.stallhelper.R;
|
||||
import cc.winboll.studio.stallhelper.activities.AboutActivity;
|
||||
import cc.winboll.studio.stallhelper.activities.CompleteDiningTableActivity;
|
||||
import cc.winboll.studio.stallhelper.activities.NoteRecordHelperActivity;
|
||||
import cc.winboll.studio.stallhelper.activities.PreNullDiningTableActivity;
|
||||
import cc.winboll.studio.stallhelper.activities.WinBoLLActivity;
|
||||
|
||||
final public class MainActivity extends WinBoLLActivity {
|
||||
|
||||
public static final String TAG = "MainActivity";
|
||||
|
||||
public static final int REQUEST_HOME_ACTIVITY = 0;
|
||||
public static final int REQUEST_ABOUT_ACTIVITY = 1;
|
||||
Context mContext;
|
||||
private Toolbar mToolbar;
|
||||
|
||||
// @Override
|
||||
// protected boolean isEnableDisplayHomeAsUp() {
|
||||
// return false;
|
||||
// }
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_main);
|
||||
mContext = getApplicationContext();
|
||||
|
||||
mToolbar = findViewById(R.id.toolbar);
|
||||
setSupportActionBar(mToolbar);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTag() {
|
||||
return TAG;
|
||||
}
|
||||
|
||||
|
||||
// @Override
|
||||
// protected boolean isAddWinBoLLToolBar() {
|
||||
// return true;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// protected Toolbar initToolBar() {
|
||||
// return findViewById(R.id.activitymainToolbar1);
|
||||
// }
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.toolbar_main, menu);
|
||||
return super.onCreateOptionsMenu(menu);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
if (item.getItemId() == R.id.action_about) {
|
||||
startActivity(new Intent(this, AboutActivity.class));
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
void openAboutActivity() {
|
||||
Intent intent = new Intent(getApplicationContext(), AboutActivity.class);
|
||||
startActivity(intent);
|
||||
//App.getWinBoLLActivityManager().startWinBoLLActivity(getApplicationContext(), AboutActivity.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
switch (resultCode) {
|
||||
case REQUEST_HOME_ACTIVITY : {
|
||||
LogUtils.d(TAG, "REQUEST_HOME_ACTIVITY");
|
||||
break;
|
||||
}
|
||||
case REQUEST_ABOUT_ACTIVITY : {
|
||||
LogUtils.d(TAG, "REQUEST_ABOUT_ACTIVITY");
|
||||
break;
|
||||
}
|
||||
default : {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void onPreNullDiningTable(View view) {
|
||||
//ToastUtils.show("onDiningTable");
|
||||
Intent intent = new Intent(getApplicationContext(), PreNullDiningTableActivity.class);
|
||||
startActivity(intent);
|
||||
//App.getWinBoLLActivityManager().startWinBoLLActivity(mContext, PreNullDiningTableActivity.class);
|
||||
// try {
|
||||
// WinBoLLActivity clazzActivity = PreNullDiningTableActivity.class.newInstance();
|
||||
// String tag = clazzActivity.getTag();
|
||||
// LogUtils.d(TAG, "String tag = clazzActivity.getTag(); tag " + tag);
|
||||
// Intent intent = new Intent(getApplicationContext(), PreNullDiningTableActivity.class);
|
||||
// startWinBoLLActivity(intent, tag);
|
||||
// } catch (IllegalAccessException e) {} catch (InstantiationException e) {}
|
||||
}
|
||||
|
||||
public void onCompleteDiningTable(View view) {
|
||||
//ToastUtils.show("onDiningTable");
|
||||
Intent intent = new Intent(getApplicationContext(), CompleteDiningTableActivity.class);
|
||||
startActivity(intent);
|
||||
//App.getWinBoLLActivityManager().startWinBoLLActivity(mContext, CompleteDiningTableActivity.class);
|
||||
// try {
|
||||
// WinBoLLActivity clazzActivity = CompleteDiningTableActivity.class.newInstance();
|
||||
// String tag = clazzActivity.getTag();
|
||||
// LogUtils.d(TAG, "String tag = clazzActivity.getTag(); tag " + tag);
|
||||
// Intent intent = new Intent(getApplicationContext(), CompleteDiningTableActivity.class);
|
||||
// startWinBoLLActivity(intent, tag);
|
||||
// } catch (IllegalAccessException e) {} catch (InstantiationException e) {}
|
||||
}
|
||||
|
||||
public void onNoteRecordHelper(View view) {
|
||||
Intent intent = new Intent(getApplicationContext(), NoteRecordHelperActivity.class);
|
||||
startActivity(intent);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package cc.winboll.studio.stallhelper.activities;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import cc.winboll.studio.stallhelper.R;
|
||||
import cc.winboll.studio.libappbase.LogUtils;
|
||||
import cc.winboll.studio.libappbase.models.APPInfo;
|
||||
import cc.winboll.studio.libappbase.views.AboutView;
|
||||
|
||||
/**
|
||||
* @Author 豆包&ZhanGSKen<zhangsken@qq.com>
|
||||
* @Date 2026/01/11 12:55
|
||||
* @Describe AboutActivity
|
||||
*/
|
||||
public class AboutActivity extends AppCompatActivity {
|
||||
|
||||
public static final String TAG = "AboutActivity";
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_about);
|
||||
|
||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
AboutView aboutView = findViewById(R.id.aboutview);
|
||||
aboutView.setAPPInfo(genDefaultAppInfo());
|
||||
}
|
||||
|
||||
private APPInfo genDefaultAppInfo() {
|
||||
LogUtils.d(TAG, "genDefaultAppInfo() 调用");
|
||||
String branchName = "stallhelper";
|
||||
APPInfo appInfo = new APPInfo();
|
||||
appInfo.setAppName("StallHelper");
|
||||
appInfo.setAppIcon(R.drawable.ic_winboll);
|
||||
appInfo.setAppDescription(getString(R.string.app_description));
|
||||
appInfo.setAppGitName("StallHelper");
|
||||
appInfo.setAppGitOwner("ZhanGSKen");
|
||||
appInfo.setAppGitAPPBranch(branchName);
|
||||
appInfo.setAppGitAPPSubProjectFolder(branchName);
|
||||
appInfo.setAppHomePage("http://10.8.0.4:9876/apks/index-manager.php?project=StallHelper");
|
||||
appInfo.setAppAPKName("StallHelper");
|
||||
appInfo.setAppAPKFolderName("StallHelper");
|
||||
LogUtils.d(TAG, "genDefaultAppInfo: 应用信息已生成");
|
||||
return appInfo;
|
||||
}
|
||||
}
|
||||
+371
@@ -0,0 +1,371 @@
|
||||
package cc.winboll.studio.stallhelper.activities;
|
||||
|
||||
/**
|
||||
* @Author ZhanGSKen@QQ.COM
|
||||
* @Date 2024/10/29 09:22:24
|
||||
* @Describe 餐桌表补全窗口
|
||||
*/
|
||||
import android.content.ClipData;
|
||||
import android.content.ClipboardManager;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ScrollView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import cc.winboll.studio.libappbase.ToastUtils;
|
||||
import cc.winboll.studio.stallhelper.App;
|
||||
import cc.winboll.studio.stallhelper.R;
|
||||
import cc.winboll.studio.stallhelper.beans.DiningTableBean;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import cc.winboll.studio.libaes.utils.WinBoLLActivityManager;
|
||||
|
||||
public class CompleteDiningTableActivity extends WinBoLLActivity {
|
||||
|
||||
public static final String TAG = "CompleteDiningTableActivity";
|
||||
|
||||
// 某一号晚上的餐桌预定补全列表
|
||||
ArrayList<DiningTableBean> mCompleteTableInfoList;
|
||||
// 原始预定信息内容输入框
|
||||
EditText metOriginBookText;
|
||||
EditText metPreBookList;
|
||||
EditText metCompleteDate;
|
||||
ScrollView mScrollView;
|
||||
|
||||
ArrayList<String> mszOriginBookList;
|
||||
|
||||
@Override
|
||||
public String getTag() {
|
||||
return TAG;
|
||||
}
|
||||
|
||||
// @Override
|
||||
// protected boolean isEnableDisplayHomeAsUp() {
|
||||
// return true;
|
||||
// }
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_completediningtable);
|
||||
setTitle("餐桌表补全");
|
||||
|
||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
StringBuilder sbDateNow = new StringBuilder("当前日期:");
|
||||
Date now = new Date();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
String timeString = sdf.format(now);
|
||||
sbDateNow.append(timeString);
|
||||
TextView tvDateNow = findViewById(R.id.activitycompletediningtableTextView2);
|
||||
tvDateNow.setText(sbDateNow.toString());
|
||||
|
||||
|
||||
metOriginBookText = findViewById(R.id.activitycompletediningtableEditText1);
|
||||
metPreBookList = findViewById(R.id.activitycompletediningtableEditText2);
|
||||
metCompleteDate = findViewById(R.id.activitycompletediningtableEditText3);
|
||||
mScrollView = findViewById(R.id.activitycompletediningtableScrollView1);
|
||||
}
|
||||
|
||||
// @Override
|
||||
// protected Toolbar initToolBar() {
|
||||
// return findViewById(R.id.activitycompletediningtableToolbar1);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// protected boolean isAddWinBoLLToolBar() {
|
||||
// return false;
|
||||
// }
|
||||
|
||||
boolean isInCompleteRule(DiningTableBean item) {
|
||||
String szCompleteDate = metCompleteDate.getText().toString() + "号";
|
||||
if (item.getDate().equals(szCompleteDate) && item.getDinnerType() == DiningTableBean.DinnerType.Evening) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
if (item.getItemId() == android.R.id.home) {
|
||||
WinBoLLActivityManager.getInstance().finish(this);
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
void createNullCompleteTableInfoList() {
|
||||
mCompleteTableInfoList = new ArrayList<DiningTableBean>();
|
||||
String szCompleteDate = metCompleteDate.getText().toString() + "号";
|
||||
|
||||
mCompleteTableInfoList.add(new DiningTableBean("201", 18, true, szCompleteDate));
|
||||
mCompleteTableInfoList.add(new DiningTableBean("202", 8, true, szCompleteDate));
|
||||
mCompleteTableInfoList.add(new DiningTableBean("203", 8, true, szCompleteDate));
|
||||
mCompleteTableInfoList.add(new DiningTableBean("205", 10, true, szCompleteDate));
|
||||
mCompleteTableInfoList.add(new DiningTableBean("206", 0, true, szCompleteDate));
|
||||
mCompleteTableInfoList.add(new DiningTableBean("207", 0, true, szCompleteDate));
|
||||
mCompleteTableInfoList.add(new DiningTableBean("208", 8, true, szCompleteDate));
|
||||
mCompleteTableInfoList.add(new DiningTableBean("209", 10, true, szCompleteDate));
|
||||
mCompleteTableInfoList.add(new DiningTableBean("210", 8, true, szCompleteDate));
|
||||
mCompleteTableInfoList.add(new DiningTableBean("211", 12, true, szCompleteDate));
|
||||
mCompleteTableInfoList.add(new DiningTableBean("212", 8, true, szCompleteDate));
|
||||
mCompleteTableInfoList.add(new DiningTableBean("213", 9, true, szCompleteDate));
|
||||
mCompleteTableInfoList.add(new DiningTableBean("666", 14, true, szCompleteDate));
|
||||
mCompleteTableInfoList.add(new DiningTableBean("888", 20, true, szCompleteDate));
|
||||
|
||||
for (int i = 1; i < 23; i++) {
|
||||
DiningTableBean tempBean = new DiningTableBean(Integer.toString(i), 0, true, szCompleteDate);
|
||||
tempBean.setDinnerType(DiningTableBean.DinnerType.Evening);
|
||||
tempBean.setTableType(DiningTableBean.TableType.Table);
|
||||
tempBean.setIsSelected(false);
|
||||
mCompleteTableInfoList.add(tempBean);
|
||||
}
|
||||
|
||||
//DiningTableBean.saveBeanListToFile(getApplicationContext().getExternalFilesDir("temp") + "/1.json", mCompleteTableInfoList);
|
||||
//ToastUtils.show("Test");
|
||||
}
|
||||
|
||||
ArrayList<DiningTableBean> getOriginBookList() {
|
||||
//ToastUtils.show(metOriginBookText.getText().toString());
|
||||
ArrayList<DiningTableBean> listReturn = new ArrayList<DiningTableBean>();
|
||||
String[] szOriginBookText = metOriginBookText.getText().toString().split("\\r?\\n");
|
||||
for (String szTemp : szOriginBookText) {
|
||||
String szTemp2 = szTemp.replace(" ", "");
|
||||
DiningTableBean bean = format2DiningTableBean(szTemp2);
|
||||
if (bean != null) {
|
||||
listReturn.add(bean);
|
||||
// 更新补全列表
|
||||
updateCompleteTableInfoList(bean);
|
||||
}
|
||||
}
|
||||
//ToastUtils.show("szOriginBookText : " + Integer.toString(szOriginBookText.length));
|
||||
//ToastUtils.show("listReturn : " + Integer.toString(listReturn.size()));
|
||||
return listReturn;
|
||||
}
|
||||
|
||||
//
|
||||
// 如果补全列表某一项时间和房号与指定项一致,
|
||||
// 就把指定项信息更新至补全列表中。
|
||||
//
|
||||
void updateCompleteTableInfoList(DiningTableBean beanNew) {
|
||||
for (DiningTableBean completeTableInfo : mCompleteTableInfoList) {
|
||||
if (completeTableInfo.getDate().equals(beanNew.getDate())
|
||||
&& completeTableInfo.getDinnerType() == beanNew.getDinnerType()
|
||||
&& completeTableInfo.getTableNumber().equals(beanNew.getTableNumber())) {
|
||||
completeTableInfo.setBookDesc(beanNew.getBookDesc());
|
||||
completeTableInfo.setIsSelected(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// 检验每一个数据行的日期格式,
|
||||
// 如果出现(x号/x月x号)以外的日期标注,
|
||||
// 则提示有数据行日期标识不清晰的情况。
|
||||
//
|
||||
boolean checkLinesDateValidAndShow() {
|
||||
boolean checkResult = true;
|
||||
String[] szLines = metOriginBookText.getText().toString().split("\\r?\\n");
|
||||
if (szLines.length < 1) {
|
||||
ToastUtils.show("没有数据行。");
|
||||
checkResult = false;
|
||||
} else {
|
||||
StringBuilder sb = new StringBuilder("日期标识不清晰,在");
|
||||
for (int i = 0; i < szLines.length; i++) {
|
||||
Pattern pattern = Pattern.compile("(\\d*[月]{0,1}\\d+号)\\s*([晚|午]{0,1}).*");
|
||||
Matcher matcher = pattern.matcher(szLines[i]);
|
||||
if (!matcher.find()) {
|
||||
sb.append("(");
|
||||
sb.append(Integer.toString(i + 1));
|
||||
sb.append(")");
|
||||
checkResult = false;
|
||||
}
|
||||
}
|
||||
sb.append("行。");
|
||||
if (checkResult == false) {
|
||||
ToastUtils.show(sb.toString());
|
||||
}
|
||||
}
|
||||
return checkResult;
|
||||
}
|
||||
|
||||
//
|
||||
// 获取指定日期的第一条数据的位置
|
||||
// 返回 -1 表示所有数据都没有该日期
|
||||
//
|
||||
int getFirstIndexOfDate(ArrayList<DiningTableBean> originBookList, String szDate) {
|
||||
int nResult = -1;
|
||||
//ToastUtils.show("szDate " + szDate);
|
||||
for (int i = originBookList.size() - 1 ; i > 0; i--) {
|
||||
//LogUtils.d(TAG, "originBookList.get(i).getDate() " + originBookList.get(i).getDate());
|
||||
if (originBookList.get(i).isDiningTableBean()) {
|
||||
if (originBookList.get(i).getDate().equals(szDate)) {
|
||||
nResult = i;
|
||||
continue;
|
||||
} else {
|
||||
return nResult;
|
||||
}
|
||||
} else {
|
||||
nResult = i;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
return nResult;
|
||||
}
|
||||
|
||||
DiningTableBean format2DiningTableBean(String szBookInfo) {
|
||||
if (!szBookInfo.trim().equals("")) {
|
||||
//String sz = "29号晚 201房 123456";
|
||||
// 定义正则表达式模式
|
||||
Pattern pattern = Pattern.compile("(\\d*[月]{0,1}\\d+号)\\s*([晚|午]{0,1})\\s*(\\d+)([房|桌])[-\\s]*(.*)");
|
||||
Matcher matcher = pattern.matcher(szBookInfo);
|
||||
if (matcher.find()) {
|
||||
String date = matcher.group(1);
|
||||
String szDinnerType = matcher.group(2);
|
||||
String tableNumber = matcher.group(3);
|
||||
String szTableType = matcher.group(4);
|
||||
String bookDesc = matcher.group(5);
|
||||
|
||||
DiningTableBean.DinnerType dinnerType = DiningTableBean.DinnerType.Evening;
|
||||
if (szDinnerType.equals("午")) {
|
||||
dinnerType = DiningTableBean.DinnerType.Noon;
|
||||
}
|
||||
DiningTableBean.TableType tableType = DiningTableBean.TableType.Room;
|
||||
if (szTableType.equals("桌")) {
|
||||
tableType = DiningTableBean.TableType.Table;
|
||||
}
|
||||
return new DiningTableBean(tableNumber, 0, true, dinnerType, bookDesc, date, tableType);
|
||||
} else {
|
||||
return new DiningTableBean(true, false, szBookInfo);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
void checkAndAddCompleteTableInfoList(ArrayList<DiningTableBean> originBookList) {
|
||||
boolean isAddCompleteTableInfoList = false;
|
||||
for (int i = 0; i < originBookList.size(); i++) {
|
||||
DiningTableBean item = originBookList.get(i);
|
||||
// 循环读取原始 Bean 列表,
|
||||
// 如果遇到第一个匹配指定日期号,
|
||||
// 就不显示 item 项,并且添加预制好的补全表(一次性添加,后续再遇到同类 item 项则不添加补全表。)。
|
||||
if (isInCompleteRule(item)) {
|
||||
// 设置不显示 item 项
|
||||
item.setIsSelected(false);
|
||||
|
||||
// 添加补全列表(一次性添加,后续再遇到同类 item 项则不添加补全表。)
|
||||
if (isAddCompleteTableInfoList == false) {
|
||||
originBookList.addAll(i, mCompleteTableInfoList);
|
||||
// 设置后续遇到同类项时,不再添加补全列表
|
||||
isAddCompleteTableInfoList = true;
|
||||
i = i + mCompleteTableInfoList.size();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 如果遍历完原始 Bean 表后还未添加补全表,
|
||||
// 就添加一次补全表
|
||||
if (isAddCompleteTableInfoList == false) {
|
||||
int nInsertPost = getFirstIndexOfDate(originBookList, metCompleteDate.getText().toString() + "号");
|
||||
//ToastUtils.show("nInsertPost " + Integer.toString(nInsertPost));
|
||||
if (nInsertPost == -1) {
|
||||
originBookList.addAll(mCompleteTableInfoList);
|
||||
} else {
|
||||
originBookList.addAll(nInsertPost, mCompleteTableInfoList);
|
||||
}
|
||||
// 设置后续遇到同类项时,不再添加补全列表
|
||||
isAddCompleteTableInfoList = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void onCopyResultText(View view) {
|
||||
// Gets a handle to the clipboard service.
|
||||
ClipboardManager clipboard = (ClipboardManager) getApplicationContext().getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
// Creates a new text clip to put on the clipboard
|
||||
ClipData clip = ClipData.newPlainText("simple text", metPreBookList.getText());
|
||||
// Set the clipboard's primary clip.
|
||||
clipboard.setPrimaryClip(clip);
|
||||
Toast.makeText(getApplicationContext(), "Copy to clipboard.", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
public void onCleanResultText(View view) {
|
||||
metPreBookList.setText("");
|
||||
}
|
||||
|
||||
public void onCreatePreBookList(View view) {
|
||||
if(metCompleteDate.getText().toString().trim().equals("")) {
|
||||
ToastUtils.show("没有填写补全日期");
|
||||
return;
|
||||
}
|
||||
|
||||
//checkLinesDateValidAndShow();
|
||||
createNullCompleteTableInfoList();
|
||||
ArrayList<DiningTableBean> originBookList = getOriginBookList();
|
||||
checkAndAddCompleteTableInfoList(originBookList);
|
||||
|
||||
StringBuilder sbPreBookList = new StringBuilder();
|
||||
for (int i = 0; i < originBookList.size(); i++) {
|
||||
DiningTableBean item = originBookList.get(i);
|
||||
if (item.isDiningTableBean()) {
|
||||
if (item.getIsSelected()) {
|
||||
String szDinnerTyp = "";
|
||||
if (item.getDinnerType() == DiningTableBean.DinnerType.Evening) {
|
||||
szDinnerTyp = "晚";
|
||||
}
|
||||
|
||||
if (item.getDinnerType() == DiningTableBean.DinnerType.Noon) {
|
||||
szDinnerTyp = "午";
|
||||
}
|
||||
|
||||
String szTableType = "";
|
||||
if (item.getTableType() == DiningTableBean.TableType.Room) {
|
||||
szTableType = "房";
|
||||
}
|
||||
|
||||
if (item.getTableType() == DiningTableBean.TableType.Table) {
|
||||
szTableType = "桌";
|
||||
}
|
||||
|
||||
sbPreBookList.append(item.getDate());
|
||||
//sbPreBookList.append("号");
|
||||
sbPreBookList.append(szDinnerTyp);
|
||||
//sbPreBookList.append(" ");
|
||||
sbPreBookList.append(item.getTableNumber());
|
||||
sbPreBookList.append(szTableType);
|
||||
sbPreBookList.append("-");
|
||||
sbPreBookList.append(item.getBookDesc());
|
||||
sbPreBookList.append("\n");
|
||||
}
|
||||
} else {
|
||||
sbPreBookList.append(item.getOriginDesc());
|
||||
sbPreBookList.append("\n");
|
||||
}
|
||||
|
||||
// 不同日期间隔行排版
|
||||
if (i + 1 != originBookList.size()) {
|
||||
if (!originBookList.get(i + 1).getDate().equals(originBookList.get(i).getDate())) {
|
||||
sbPreBookList.append("\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//metPreBookList.append("\n");
|
||||
metPreBookList.append(sbPreBookList.toString());
|
||||
|
||||
mScrollView.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mScrollView.fullScroll(ScrollView.FOCUS_DOWN);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
+226
@@ -0,0 +1,226 @@
|
||||
package cc.winboll.studio.stallhelper.activities;
|
||||
|
||||
import android.graphics.Color;
|
||||
import android.os.Bundle;
|
||||
import android.text.Spannable;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.style.BackgroundColorSpan;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import cc.winboll.studio.libappbase.LogUtils;
|
||||
import cc.winboll.studio.stallhelper.R;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* @Author 豆包&ZhanGSKen<zhangsken@qq.com>
|
||||
* @CreateTime 2026-03-31 00:20:00
|
||||
* @ModifyTime 2026-03-31 14:47:00
|
||||
* @Describe 订单笔录辅助窗口,支持房号、桌号、多房间号(含"号"字)、手机号尾4位及'-'后文本高亮,原文完整输出
|
||||
*/
|
||||
public class NoteRecordHelperActivity extends AppCompatActivity {
|
||||
|
||||
public static final String TAG = "NoteRecordHelperActivity";
|
||||
|
||||
// 高亮颜色数组
|
||||
private final int[] highlightColors = {
|
||||
Color.parseColor("#4CAF50"),
|
||||
Color.parseColor("#FF9800"),
|
||||
Color.parseColor("#E91E63"),
|
||||
Color.parseColor("#F44336"),
|
||||
Color.parseColor("#FFC107"),
|
||||
Color.parseColor("#2196F3")
|
||||
};
|
||||
|
||||
// 正则匹配
|
||||
// 匹配多房间号(包含后面的"号"字):11-16-17号
|
||||
private final Pattern PATTERN_MULTI_ROOM = Pattern.compile("(\\d+(?:-\\d+)+\\s*号)");
|
||||
// 匹配手机号(连续11位或带分隔符)
|
||||
private final Pattern PATTERN_PHONE = Pattern.compile("(?:\\d{11}|(?:\\d{3,4}[\\s-]?){3,4})");
|
||||
|
||||
// 控件
|
||||
private EditText etContent;
|
||||
private Button btnHighlight;
|
||||
private TextView tvHighlightResult;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_noterecordhelper);
|
||||
LogUtils.i(TAG, "onCreate: 页面初始化");
|
||||
|
||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||
setSupportActionBar(toolbar);
|
||||
setTitle("订单笔录辅助");
|
||||
|
||||
initViews();
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化控件
|
||||
*/
|
||||
private void initViews() {
|
||||
etContent = findViewById(R.id.et_content);
|
||||
btnHighlight = findViewById(R.id.btn_highlight);
|
||||
tvHighlightResult = findViewById(R.id.tv_highlight_result);
|
||||
|
||||
btnHighlight.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
LogUtils.i(TAG, "onClick: 点击高亮按钮");
|
||||
highlightContent();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析并高亮内容
|
||||
*/
|
||||
private void highlightContent() {
|
||||
LogUtils.i(TAG, "highlightContent: 开始处理高亮");
|
||||
|
||||
String raw = etContent.getText().toString();
|
||||
if (raw.isEmpty()) {
|
||||
LogUtils.i(TAG, "highlightContent: 输入内容为空,直接返回");
|
||||
return;
|
||||
}
|
||||
|
||||
String[] lines = raw.split("\\n");
|
||||
SpannableStringBuilder ssb = new SpannableStringBuilder();
|
||||
|
||||
for (int i = 0; i < lines.length; i++) {
|
||||
String line = lines[i];
|
||||
// 空行也完整保留
|
||||
if (line.isEmpty()) {
|
||||
ssb.append("\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
int colorIndex = i % highlightColors.length;
|
||||
int color = highlightColors[colorIndex];
|
||||
|
||||
LogUtils.d(TAG, "highlightContent: 处理第" + (i + 1) + "行,颜色索引=" + colorIndex);
|
||||
processLine(line, ssb, color);
|
||||
|
||||
if (i != lines.length - 1) {
|
||||
ssb.append("\n");
|
||||
}
|
||||
}
|
||||
|
||||
tvHighlightResult.setText(ssb);
|
||||
LogUtils.i(TAG, "highlightContent: 高亮处理完成");
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理单行高亮(原文完整保留)
|
||||
* @param line 单行文本
|
||||
* @param ssb 富文本构建器
|
||||
* @param color 高亮颜色
|
||||
*/
|
||||
private void processLine(String line, SpannableStringBuilder ssb, int color) {
|
||||
LogUtils.d(TAG, "processLine: line=" + line + ", color=" + Integer.toHexString(color));
|
||||
|
||||
// 1. 先把原文完整追加到 ssb,不会丢失任何字符
|
||||
int start = ssb.length();
|
||||
ssb.append(line);
|
||||
|
||||
// 2. 高亮多房间号(包含"号"字):11-16-17号
|
||||
Matcher mMulti = PATTERN_MULTI_ROOM.matcher(line);
|
||||
if (mMulti.find()) {
|
||||
int s = start + mMulti.start(1);
|
||||
int e = start + mMulti.end(1);
|
||||
ssb.setSpan(new BackgroundColorSpan(color), s, e, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
}
|
||||
|
||||
// 3. 高亮房号 / 桌号
|
||||
int roomIdx = line.indexOf("房");
|
||||
int tableIdx = line.indexOf("号桌");
|
||||
|
||||
if (roomIdx != -1) {
|
||||
int s = findNumberStart(line, roomIdx);
|
||||
int e = roomIdx + 1;
|
||||
ssb.setSpan(new BackgroundColorSpan(color), start + s, start + e, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
} else if (tableIdx != -1) {
|
||||
int s = findNumberStart(line, tableIdx);
|
||||
int e = tableIdx + 2;
|
||||
ssb.setSpan(new BackgroundColorSpan(color), start + s, start + e, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
}
|
||||
|
||||
// 4. 处理'-'后的内容:优先高亮手机号尾4位,否则高亮全部文本
|
||||
int dashIndex = line.indexOf("-");
|
||||
if (dashIndex != -1) {
|
||||
String afterDash = line.substring(dashIndex + 1);
|
||||
Matcher phoneMatcher = PATTERN_PHONE.matcher(afterDash);
|
||||
boolean foundPhone = false;
|
||||
|
||||
// 尝试匹配手机号并高亮尾4位
|
||||
while (phoneMatcher.find()) {
|
||||
String phone = phoneMatcher.group();
|
||||
if (phone != null) {
|
||||
foundPhone = true;
|
||||
// 提取纯数字
|
||||
String pureNumber = phone.replaceAll("[^0-9]", "");
|
||||
if (pureNumber.length() >= 4) {
|
||||
String last4 = pureNumber.substring(pureNumber.length() - 4);
|
||||
// 在原行中定位尾4位(从 dashIndex+1 开始查找,避免匹配前面的数字)
|
||||
int tailStart = line.indexOf(last4, dashIndex + 1);
|
||||
if (tailStart != -1) {
|
||||
int s = start + tailStart;
|
||||
int e = s + 4;
|
||||
ssb.setSpan(new BackgroundColorSpan(color), s, e, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 没有手机号,则高亮'-'后的全部文本
|
||||
if (!foundPhone) {
|
||||
int s = start + dashIndex + 1;
|
||||
int e = start + line.length();
|
||||
ssb.setSpan(new BackgroundColorSpan(color), s, e, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
}
|
||||
} else {
|
||||
// 无'-'的行,尝试匹配并高亮手机号尾4位
|
||||
Matcher phoneMatcher = PATTERN_PHONE.matcher(line);
|
||||
while (phoneMatcher.find()) {
|
||||
String phone = phoneMatcher.group();
|
||||
if (phone != null) {
|
||||
String pureNumber = phone.replaceAll("[^0-9]", "");
|
||||
if (pureNumber.length() >= 4) {
|
||||
String last4 = pureNumber.substring(pureNumber.length() - 4);
|
||||
int tailStart = line.indexOf(last4);
|
||||
if (tailStart != -1) {
|
||||
int s = start + tailStart;
|
||||
int e = s + 4;
|
||||
ssb.setSpan(new BackgroundColorSpan(color), s, e, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查找数字起始位置
|
||||
* @param line 文本行
|
||||
* @param endIdx 结束位置
|
||||
* @return 数字起始下标
|
||||
*/
|
||||
private int findNumberStart(String line, int endIdx) {
|
||||
LogUtils.d(TAG, "findNumberStart: endIdx=" + endIdx);
|
||||
|
||||
for (int i = endIdx - 1; i >= 0; i--) {
|
||||
char c = line.charAt(i);
|
||||
if (!Character.isDigit(c) && c != ' ') {
|
||||
return i + 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+264
@@ -0,0 +1,264 @@
|
||||
package cc.winboll.studio.stallhelper.activities;
|
||||
|
||||
/**
|
||||
* @Author ZhanGSKen@QQ.COM
|
||||
* @Date 2024/10/16 05:13:42
|
||||
* @Describe 餐桌空白预定表生成窗口
|
||||
*/
|
||||
import android.content.ClipData;
|
||||
import android.content.ClipboardManager;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.EditText;
|
||||
import android.widget.RadioButton;
|
||||
import android.widget.ScrollView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import cc.winboll.studio.libaes.utils.WinBoLLActivityManager;
|
||||
import cc.winboll.studio.libappbase.ToastUtils;
|
||||
import cc.winboll.studio.stallhelper.R;
|
||||
import cc.winboll.studio.stallhelper.beans.DiningTableBean;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
|
||||
public class PreNullDiningTableActivity extends WinBoLLActivity {
|
||||
|
||||
public static final String TAG = "DiningTableActivity";
|
||||
|
||||
ArrayList<DiningTableBean> mListTableInfo;
|
||||
DiningTableBeanListAdapter mDiningTableBeanListAdapter;
|
||||
EditText metPreBookList;
|
||||
ScrollView mScrollView;
|
||||
RadioButton mrbDinnerTypeNoon;
|
||||
RadioButton mrbDinnerTypeEvening;
|
||||
|
||||
|
||||
@Override
|
||||
public String getTag() {
|
||||
return TAG;
|
||||
}
|
||||
|
||||
// @Override
|
||||
// protected boolean isEnableDisplayHomeAsUp() {
|
||||
// return true;
|
||||
// }
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_prenulldiningtable);
|
||||
setTitle("餐桌空白预定表制作");
|
||||
|
||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
StringBuilder sbDateNow = new StringBuilder("当前日期:");
|
||||
Date now = new Date();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
String timeString = sdf.format(now);
|
||||
sbDateNow.append(timeString);
|
||||
TextView tvDateNow = findViewById(R.id.activityprenulldiningtableTextView2);
|
||||
tvDateNow.setText(sbDateNow.toString());
|
||||
|
||||
LocalDate currentDate = LocalDate.now();
|
||||
int dayOfMonth = currentDate.getDayOfMonth();
|
||||
EditText etDateNow = findViewById(R.id.activityprenulldiningtableEditText1);
|
||||
etDateNow.setText(Integer.toString(dayOfMonth));
|
||||
|
||||
|
||||
mListTableInfo = new ArrayList<DiningTableBean>();
|
||||
addTable();
|
||||
RecyclerView recyclerView = findViewById(R.id.activityprenulldiningtableRecyclerView1);
|
||||
recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.HORIZONTAL, false));
|
||||
mDiningTableBeanListAdapter = new DiningTableBeanListAdapter(mListTableInfo);
|
||||
// 设置 RecyclerView 的适配器
|
||||
recyclerView.setAdapter(mDiningTableBeanListAdapter);
|
||||
|
||||
metPreBookList = findViewById(R.id.activityprenulldiningtableEditText2);
|
||||
mScrollView = findViewById(R.id.activityprenulldiningtableScrollView1);
|
||||
|
||||
mrbDinnerTypeNoon = findViewById(R.id.activityprenulldiningtableRadioButton1);
|
||||
mrbDinnerTypeEvening = findViewById(R.id.activityprenulldiningtableRadioButton2);
|
||||
mrbDinnerTypeEvening.setChecked(true);
|
||||
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// @Override
|
||||
// protected Toolbar initToolBar() {
|
||||
// return findViewById(R.id.activityprenulldiningtableToolbar1);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// protected boolean isAddWinBoLLToolBar() {
|
||||
// return false;
|
||||
// }
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
if (item.getItemId() == android.R.id.home) {
|
||||
WinBoLLActivityManager.getInstance().finish(this);
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
void addTable() {
|
||||
mListTableInfo.add(new DiningTableBean("201", 18, false));
|
||||
mListTableInfo.add(new DiningTableBean("202", 8, false));
|
||||
mListTableInfo.add(new DiningTableBean("203", 8, false));
|
||||
mListTableInfo.add(new DiningTableBean("205", 10, false));
|
||||
mListTableInfo.add(new DiningTableBean("206", 0, false));
|
||||
mListTableInfo.add(new DiningTableBean("207", 0, false));
|
||||
mListTableInfo.add(new DiningTableBean("208", 8, false));
|
||||
mListTableInfo.add(new DiningTableBean("209", 10, false));
|
||||
mListTableInfo.add(new DiningTableBean("210", 8, false));
|
||||
mListTableInfo.add(new DiningTableBean("211", 12, false));
|
||||
mListTableInfo.add(new DiningTableBean("212", 8, false));
|
||||
mListTableInfo.add(new DiningTableBean("213", 9, false));
|
||||
mListTableInfo.add(new DiningTableBean("666", 14, false));
|
||||
mListTableInfo.add(new DiningTableBean("888", 20, false));
|
||||
}
|
||||
|
||||
public void onDinnerType(View view) {
|
||||
RadioButton rb = (RadioButton)view;
|
||||
if (rb.getId() == mrbDinnerTypeNoon.getId()) {
|
||||
ToastUtils.show("午餐");
|
||||
mrbDinnerTypeEvening.setChecked(false);
|
||||
} else {
|
||||
ToastUtils.show("晚餐");
|
||||
mrbDinnerTypeNoon.setChecked(false);
|
||||
}
|
||||
}
|
||||
|
||||
public void onCopyResultText(View view) {
|
||||
// Gets a handle to the clipboard service.
|
||||
ClipboardManager clipboard = (ClipboardManager) getApplicationContext().getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
// Creates a new text clip to put on the clipboard
|
||||
ClipData clip = ClipData.newPlainText("simple text", metPreBookList.getText());
|
||||
// Set the clipboard's primary clip.
|
||||
clipboard.setPrimaryClip(clip);
|
||||
Toast.makeText(getApplicationContext(), "Copy to clipboard.", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
public void onCleanResultText(View view) {
|
||||
metPreBookList.setText("");
|
||||
}
|
||||
|
||||
public void onCreatePreBookList(View view) {
|
||||
String szDinnerTyp = mrbDinnerTypeEvening.isChecked() ?"晚": "午";
|
||||
|
||||
EditText etDate = findViewById(R.id.activityprenulldiningtableEditText1);
|
||||
|
||||
StringBuilder sbPreBookList = new StringBuilder();
|
||||
for (DiningTableBean item : mListTableInfo) {
|
||||
if (item.getIsSelected()) {
|
||||
/*sbPreBookList.append(etDate.getText());
|
||||
sbPreBookList.append("号 ");
|
||||
sbPreBookList.append(szDinnerTyp);
|
||||
sbPreBookList.append(" ");
|
||||
sbPreBookList.append(item.getTableNumber());
|
||||
sbPreBookList.append("房-\n");*/
|
||||
|
||||
|
||||
String szTableType = "";
|
||||
if (item.getTableType() == DiningTableBean.TableType.Room) {
|
||||
szTableType = "房";
|
||||
}
|
||||
|
||||
if (item.getTableType() == DiningTableBean.TableType.Table) {
|
||||
szTableType = "桌";
|
||||
}
|
||||
|
||||
sbPreBookList.append(etDate.getText());
|
||||
sbPreBookList.append("号 ");
|
||||
sbPreBookList.append(szDinnerTyp);
|
||||
sbPreBookList.append(" ");
|
||||
sbPreBookList.append(item.getTableNumber());
|
||||
sbPreBookList.append(szTableType);
|
||||
sbPreBookList.append("-");
|
||||
sbPreBookList.append(item.getBookDesc());
|
||||
sbPreBookList.append("\n");
|
||||
}
|
||||
}
|
||||
|
||||
//metPreBookList.append("\n");
|
||||
metPreBookList.append(sbPreBookList.toString());
|
||||
|
||||
mScrollView.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mScrollView.fullScroll(ScrollView.FOCUS_DOWN);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void onSelectALLTable(View view) {
|
||||
boolean isSelectAll =((CheckBox)findViewById(R.id.activityprenulldiningtableCheckBox1)).isChecked();
|
||||
for (DiningTableBean item : mListTableInfo) {
|
||||
item.setIsSelected(isSelectAll);
|
||||
}
|
||||
//ToastUtils.show(Boolean.toString(isSelectAll));
|
||||
mDiningTableBeanListAdapter.notifyDataSetChanged();
|
||||
|
||||
}
|
||||
|
||||
class DiningTableBeanListAdapter extends RecyclerView.Adapter {
|
||||
|
||||
ArrayList<DiningTableBean> mDataList;
|
||||
public DiningTableBeanListAdapter(ArrayList<DiningTableBean> listInfo) {
|
||||
mDataList = listInfo;
|
||||
}
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return mDataList.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
|
||||
final DiningTableBean item = mDataList.get(position);
|
||||
if (holder.getItemViewType() == 0) {
|
||||
final SimpleViewHolder viewHolder = (SimpleViewHolder) holder;
|
||||
viewHolder.mcbTable.setText(item.getTableNumber() + "房(" + Integer.toString(item.getMaxPersonCount()) + "人)");
|
||||
viewHolder.mcbTable.setChecked(item.getIsSelected());
|
||||
viewHolder.mcbTable.setOnClickListener(new View.OnClickListener(){
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
item.setIsSelected(viewHolder.mcbTable.isChecked());
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
if (viewType == 0) {
|
||||
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.listview_tableinfo, parent, false);
|
||||
return new SimpleViewHolder(view);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
class SimpleViewHolder extends RecyclerView.ViewHolder {
|
||||
CheckBox mcbTable;
|
||||
SimpleViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
mcbTable = itemView.findViewById(R.id.listviewtableinfoCheckBox1);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
package cc.winboll.studio.stallhelper.activities;
|
||||
|
||||
/**
|
||||
* @Author ZhanGSKen@AliYun.Com
|
||||
* @Date 2025/03/28 15:34:16
|
||||
* @Describe 应用活动窗口基类
|
||||
*/
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.os.PersistableBundle;
|
||||
import android.view.MenuItem;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import cc.winboll.studio.libaes.dialogs.YesNoAlertDialog;
|
||||
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
|
||||
import cc.winboll.studio.libaes.utils.WinBoLLActivityManager;
|
||||
import cc.winboll.studio.libappbase.GlobalApplication;
|
||||
import cc.winboll.studio.stallhelper.App;
|
||||
import cc.winboll.studio.stallhelper.R;
|
||||
|
||||
public class WinBoLLActivity extends AppCompatActivity implements IWinBoLLActivity {
|
||||
|
||||
public static final String TAG = "WinBoLLActivityBase";
|
||||
|
||||
@Override
|
||||
public Activity getActivity() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTag() {
|
||||
return TAG;
|
||||
}
|
||||
|
||||
WinBoLLActivityManager getWinBoLLActivityManager() {
|
||||
return WinBoLLActivityManager.getInstance();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
getWinBoLLActivityManager().add(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPostCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
|
||||
super.onPostCreate(savedInstanceState, persistentState);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
// if (item.getItemId() == cc.winboll.studio.appbase.R.id.item_log) {
|
||||
// GlobalApplication.getWinBoLLActivityManager().startLogActivity(this);
|
||||
// return true;
|
||||
// } else if(item.getItemId() == cc.winboll.studio.appbase.R.id.item_minimal) {
|
||||
// //moveTaskToBack(true);
|
||||
// exit();
|
||||
// }
|
||||
// 在switch语句中处理每个ID,并在处理完后返回true,未处理的情况返回false。
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
void exit() {
|
||||
YesNoAlertDialog.show(this, "Exit " + getString(R.string.app_name), "Close all activity and exit?", new YesNoAlertDialog.OnDialogResultListener(){
|
||||
|
||||
@Override
|
||||
public void onYes() {
|
||||
WinBoLLActivityManager.getInstance().finishAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNo() {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
getWinBoLLActivityManager().registeRemove(this);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,216 @@
|
||||
package cc.winboll.studio.stallhelper.beans;
|
||||
|
||||
/**
|
||||
* @Author ZhanGSKen@QQ.COM
|
||||
* @Date 2024/10/16 06:09:54
|
||||
* @Describe 餐桌
|
||||
*/
|
||||
import android.util.JsonReader;
|
||||
import android.util.JsonWriter;
|
||||
import cc.winboll.studio.libappbase.BaseBean;
|
||||
import java.io.IOException;
|
||||
|
||||
public class DiningTableBean extends BaseBean {
|
||||
|
||||
public static final String TAG = "AuthenticationBean";
|
||||
|
||||
public enum DinnerType { Noon, Evening };
|
||||
public enum TableType { Room, Table };
|
||||
|
||||
// 餐桌号
|
||||
String tableNumber;
|
||||
// 最大就餐人数
|
||||
int maxPersonCount;
|
||||
// 是否选取了这张桌号
|
||||
boolean isSelected;
|
||||
// 预定时间类型
|
||||
DinnerType dinnerType;
|
||||
// 预定信息
|
||||
String bookDesc;
|
||||
// 预定时间
|
||||
String date;
|
||||
// 餐桌类型
|
||||
TableType tableType;
|
||||
// 是否被识别为 DiningTableBean
|
||||
boolean isDiningTableBean;
|
||||
// 或者是无法识别为 DiningTableBean 的原始信息。
|
||||
String originDesc;
|
||||
|
||||
public DiningTableBean(String tableNumber, int maxPersonCount, boolean isSelected) {
|
||||
this.tableNumber = tableNumber;
|
||||
this.maxPersonCount = maxPersonCount;
|
||||
this.isSelected = isSelected;
|
||||
this.dinnerType = DinnerType.Evening;
|
||||
this.bookDesc = "";
|
||||
this.date = "";
|
||||
this.tableType = TableType.Room;
|
||||
this.isDiningTableBean = true;
|
||||
this.originDesc = "";
|
||||
}
|
||||
|
||||
public DiningTableBean(String tableNumber, int maxPersonCount, boolean isSelected, String date) {
|
||||
this.tableNumber = tableNumber;
|
||||
this.maxPersonCount = maxPersonCount;
|
||||
this.isSelected = isSelected;
|
||||
this.dinnerType = DinnerType.Evening;
|
||||
this.bookDesc = "";
|
||||
this.date = date;
|
||||
this.tableType = TableType.Room;
|
||||
this.isDiningTableBean = true;
|
||||
this.originDesc = "";
|
||||
}
|
||||
|
||||
public DiningTableBean(String tableNumber, int maxPersonCount, boolean isSelected, DinnerType dinnerType, String bookDesc, String date, TableType tableType) {
|
||||
this.tableNumber = tableNumber;
|
||||
this.maxPersonCount = maxPersonCount;
|
||||
this.isSelected = isSelected;
|
||||
this.dinnerType = dinnerType;
|
||||
this.bookDesc = bookDesc;
|
||||
this.date = date;
|
||||
this.tableType = tableType;
|
||||
this.isDiningTableBean = true;
|
||||
this.originDesc = "";
|
||||
}
|
||||
|
||||
public DiningTableBean(boolean isSelected, boolean isDiningTableBean, String originDesc) {
|
||||
this.tableNumber = "";
|
||||
this.maxPersonCount = 0;
|
||||
this.isSelected = isSelected;
|
||||
this.dinnerType = DinnerType.Evening;
|
||||
this.bookDesc = "";
|
||||
this.date = "";
|
||||
this.tableType = TableType.Room;
|
||||
this.isDiningTableBean = isDiningTableBean;
|
||||
this.originDesc = originDesc;
|
||||
}
|
||||
|
||||
public void setOriginDesc(String originDesc) {
|
||||
this.originDesc = originDesc;
|
||||
}
|
||||
|
||||
public String getOriginDesc() {
|
||||
return originDesc;
|
||||
}
|
||||
|
||||
public void setIsDiningTableBean(boolean isDiningTableBean) {
|
||||
this.isDiningTableBean = isDiningTableBean;
|
||||
}
|
||||
|
||||
public boolean isDiningTableBean() {
|
||||
return isDiningTableBean;
|
||||
}
|
||||
|
||||
public void setTableType(TableType tableType) {
|
||||
this.tableType = tableType;
|
||||
}
|
||||
|
||||
public TableType getTableType() {
|
||||
return tableType;
|
||||
}
|
||||
|
||||
public void setDate(String date) {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
public String getDate() {
|
||||
return date;
|
||||
}
|
||||
|
||||
public void setDinnerType(DinnerType dinnerType) {
|
||||
this.dinnerType = dinnerType;
|
||||
}
|
||||
|
||||
public DinnerType getDinnerType() {
|
||||
return dinnerType;
|
||||
}
|
||||
|
||||
|
||||
public void setBookDesc(String bookDesc) {
|
||||
this.bookDesc = bookDesc;
|
||||
}
|
||||
|
||||
public String getBookDesc() {
|
||||
return bookDesc;
|
||||
}
|
||||
|
||||
public void setIsSelected(boolean isSelected) {
|
||||
this.isSelected = isSelected;
|
||||
}
|
||||
|
||||
public boolean getIsSelected() {
|
||||
return isSelected;
|
||||
}
|
||||
|
||||
public void setTableNumber(String tableNumber) {
|
||||
this.tableNumber = tableNumber;
|
||||
}
|
||||
|
||||
public String getTableNumber() {
|
||||
return tableNumber;
|
||||
}
|
||||
|
||||
public void setMaxPersonCount(int maxPersonCount) {
|
||||
this.maxPersonCount = maxPersonCount;
|
||||
}
|
||||
|
||||
public int getMaxPersonCount() {
|
||||
return maxPersonCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return DiningTableBean.class.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException {
|
||||
super.writeThisToJsonWriter(jsonWriter);
|
||||
DiningTableBean bean = this;
|
||||
jsonWriter.name("tableNumber").value(bean.getTableNumber());
|
||||
jsonWriter.name("maxPersonCount").value(bean.getMaxPersonCount());
|
||||
jsonWriter.name("isSelected").value(bean.getTableNumber());
|
||||
jsonWriter.name("dinnerType").value(bean.getDinnerType().ordinal());
|
||||
jsonWriter.name("bookDesc").value(bean.getBookDesc());
|
||||
jsonWriter.name("date").value(bean.getDate());
|
||||
jsonWriter.name("tableType").value(bean.getTableType().ordinal());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException {
|
||||
if (super.initObjectsFromJsonReader(jsonReader, name)) { return true; } else {
|
||||
if (name.equals("tableNumber")) {
|
||||
setTableNumber(jsonReader.nextString());
|
||||
} else if (name.equals("maxPersonCount")) {
|
||||
setMaxPersonCount(jsonReader.nextInt());
|
||||
} else if (name.equals("isSelected")) {
|
||||
setIsSelected(jsonReader.nextBoolean());
|
||||
} else if (name.equals("dinnerType")) {
|
||||
setDinnerType(DinnerType.values()[jsonReader.nextInt()]);
|
||||
} else if (name.equals("bookDesc")) {
|
||||
setBookDesc(jsonReader.nextString());
|
||||
} else if (name.equals("date")) {
|
||||
setDate(jsonReader.nextString());
|
||||
} else if (name.equals("tableType")) {
|
||||
setTableType(TableType.values()[jsonReader.nextInt()]);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseBean readBeanFromJsonReader(JsonReader jsonReader) throws IOException {
|
||||
jsonReader.beginObject();
|
||||
while (jsonReader.hasNext()) {
|
||||
String name = jsonReader.nextName();
|
||||
if (!initObjectsFromJsonReader(jsonReader, name)) {
|
||||
jsonReader.skipValue();
|
||||
}
|
||||
}
|
||||
// 结束 JSON 对象
|
||||
jsonReader.endObject();
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<!-- 阴影部分 -->
|
||||
<!-- 个人觉得更形象的表达:top代表下边的阴影高度,left代表右边的阴影宽度。其实也就是相对应的offset,solid中的颜色是阴影的颜色,也可以设置角度等等 -->
|
||||
<item
|
||||
android:left="2dp"
|
||||
android:top="2dp"
|
||||
android:right="2dp"
|
||||
android:bottom="2dp">
|
||||
<shape android:shape="rectangle" >
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:endColor="#0F000000"
|
||||
android:startColor="#0F000000" />
|
||||
<corners
|
||||
android:bottomLeftRadius="6dip"
|
||||
android:bottomRightRadius="6dip"
|
||||
android:topLeftRadius="6dip"
|
||||
android:topRightRadius="6dip" />
|
||||
</shape>
|
||||
</item>
|
||||
<!-- 背景部分 -->
|
||||
<!-- 形象的表达:bottom代表背景部分在上边缘超出阴影的高度,right代表背景部分在左边超出阴影的宽度(相对应的offset) -->
|
||||
<item
|
||||
android:left="3dp"
|
||||
android:top="3dp"
|
||||
android:right="3dp"
|
||||
android:bottom="5dp">
|
||||
<shape android:shape="rectangle" >
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:endColor="#0FFFFFFF"
|
||||
android:startColor="#FFFFFFFF" />
|
||||
<corners
|
||||
android:bottomLeftRadius="6dip"
|
||||
android:bottomRightRadius="6dip"
|
||||
android:topLeftRadius="6dip"
|
||||
android:topRightRadius="6dip" />
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<!-- 阴影部分 -->
|
||||
<!-- 个人觉得更形象的表达:top代表下边的阴影高度,left代表右边的阴影宽度。其实也就是相对应的offset,solid中的颜色是阴影的颜色,也可以设置角度等等 -->
|
||||
<item
|
||||
android:left="2dp"
|
||||
android:top="2dp"
|
||||
android:right="2dp"
|
||||
android:bottom="2dp">
|
||||
<shape android:shape="rectangle" >
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:endColor="#0F000000"
|
||||
android:startColor="#0F000000" />
|
||||
<corners
|
||||
android:bottomLeftRadius="6dip"
|
||||
android:bottomRightRadius="6dip"
|
||||
android:topLeftRadius="6dip"
|
||||
android:topRightRadius="6dip" />
|
||||
</shape>
|
||||
</item>
|
||||
<!-- 背景部分 -->
|
||||
<!-- 形象的表达:bottom代表背景部分在上边缘超出阴影的高度,right代表背景部分在左边超出阴影的宽度(相对应的offset) -->
|
||||
<item
|
||||
android:left="3dp"
|
||||
android:top="3dp"
|
||||
android:right="3dp"
|
||||
android:bottom="5dp">
|
||||
<shape android:shape="rectangle" >
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:endColor="#AF000000"
|
||||
android:startColor="#AF000000" />
|
||||
<corners
|
||||
android:bottomLeftRadius="6dip"
|
||||
android:bottomRightRadius="6dip"
|
||||
android:topLeftRadius="6dip"
|
||||
android:topRightRadius="6dip" />
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<!-- 阴影部分 -->
|
||||
<!-- 个人觉得更形象的表达:top代表下边的阴影高度,left代表右边的阴影宽度。其实也就是相对应的offset,solid中的颜色是阴影的颜色,也可以设置角度等等 -->
|
||||
<item
|
||||
android:left="2dp"
|
||||
android:top="2dp"
|
||||
android:right="2dp"
|
||||
android:bottom="2dp">
|
||||
<shape android:shape="rectangle" >
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:endColor="#0FFFFFFF"
|
||||
android:startColor="#0FFFFFFF" />
|
||||
<corners
|
||||
android:bottomLeftRadius="6dip"
|
||||
android:bottomRightRadius="6dip"
|
||||
android:topLeftRadius="6dip"
|
||||
android:topRightRadius="6dip" />
|
||||
</shape>
|
||||
</item>
|
||||
<!-- 背景部分 -->
|
||||
<!-- 形象的表达:bottom代表背景部分在上边缘超出阴影的高度,right代表背景部分在左边超出阴影的宽度(相对应的offset) -->
|
||||
<item
|
||||
android:left="3dp"
|
||||
android:top="3dp"
|
||||
android:right="3dp"
|
||||
android:bottom="5dp">
|
||||
<shape android:shape="rectangle" >
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:endColor="#CFFFFFFF"
|
||||
android:startColor="#CFFFFFFF" />
|
||||
<corners
|
||||
android:bottomLeftRadius="6dip"
|
||||
android:bottomRightRadius="6dip"
|
||||
android:topLeftRadius="6dip"
|
||||
android:topRightRadius="6dip" />
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<!-- 阴影部分 -->
|
||||
<!-- 个人觉得更形象的表达:top代表下边的阴影高度,left代表右边的阴影宽度。其实也就是相对应的offset,solid中的颜色是阴影的颜色,也可以设置角度等等 -->
|
||||
<item
|
||||
android:left="2dp"
|
||||
android:top="2dp"
|
||||
android:right="2dp"
|
||||
android:bottom="2dp">
|
||||
<shape android:shape="rectangle" >
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:endColor="#0F000000"
|
||||
android:startColor="#0F000000" />
|
||||
<corners
|
||||
android:bottomLeftRadius="6dip"
|
||||
android:bottomRightRadius="6dip"
|
||||
android:topLeftRadius="6dip"
|
||||
android:topRightRadius="6dip" />
|
||||
</shape>
|
||||
</item>
|
||||
<!-- 背景部分 -->
|
||||
<!-- 形象的表达:bottom代表背景部分在上边缘超出阴影的高度,right代表背景部分在左边超出阴影的宽度(相对应的offset) -->
|
||||
<item
|
||||
android:left="3dp"
|
||||
android:top="3dp"
|
||||
android:right="3dp"
|
||||
android:bottom="5dp">
|
||||
<shape android:shape="rectangle" >
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:endColor="@color/colorAccent"
|
||||
android:startColor="@color/colorAccent" />
|
||||
<corners
|
||||
android:bottomLeftRadius="6dip"
|
||||
android:bottomRightRadius="6dip"
|
||||
android:topLeftRadius="6dip"
|
||||
android:topRightRadius="6dip" />
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
||||
@@ -0,0 +1,69 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="256dp"
|
||||
android:height="256dp"
|
||||
android:viewportWidth="256"
|
||||
android:viewportHeight="256">
|
||||
<path
|
||||
android:fillColor="#FF977A1F"
|
||||
android:strokeColor="#FF977A1F"
|
||||
android:strokeWidth="2.0"
|
||||
android:strokeLineCap="round"
|
||||
android:strokeMiterLimit="10"
|
||||
android:pathData="M67.56 132.48C67.56 132.48 196.61 132.48 196.61 132.48 196.61 132.48 196.61 140.79 196.61 140.79 196.61 140.79 67.56 140.79 67.56 140.79 67.56 140.79 67.56 132.48 67.56 132.48"/>
|
||||
<path
|
||||
android:fillColor="#FF977A1F"
|
||||
android:strokeColor="#FF977A1F"
|
||||
android:strokeWidth="2.0"
|
||||
android:strokeLineCap="round"
|
||||
android:strokeMiterLimit="10"
|
||||
android:pathData="M100.51 140.79C100.51 140.79 108.38 140.79 108.38 140.79 108.38 140.79 108.38 211.22 108.38 211.22 108.38 211.22 100.51 211.22 100.51 211.22 100.51 211.22 100.51 140.79 100.51 140.79"/>
|
||||
<path
|
||||
android:fillColor="#FF977A1F"
|
||||
android:strokeColor="#FF977A1F"
|
||||
android:strokeWidth="2.0"
|
||||
android:strokeLineCap="round"
|
||||
android:strokeMiterLimit="10"
|
||||
android:pathData="M157.4 140.79C157.4 140.79 165.72 140.79 165.72 140.79 165.72 140.79 165.72 211.22 165.72 211.22 165.72 211.22 157.4 211.22 157.4 211.22 157.4 211.22 157.4 140.79 157.4 140.79"/>
|
||||
<path
|
||||
android:fillColor="#FF977A1F"
|
||||
android:strokeColor="#FF977A1F"
|
||||
android:strokeWidth="2.0"
|
||||
android:strokeLineCap="round"
|
||||
android:strokeMiterLimit="10"
|
||||
android:pathData="M32.05 85.46C32.05 85.46 38.61 85.46 38.61 85.46 38.61 85.46 38.61 211.22 38.61 211.22 38.61 211.22 32.05 211.22 32.05 211.22 32.05 211.22 32.05 85.46 32.05 85.46"/>
|
||||
<path
|
||||
android:fillColor="#FF977A1F"
|
||||
android:strokeColor="#FF977A1F"
|
||||
android:strokeWidth="2.0"
|
||||
android:strokeLineCap="round"
|
||||
android:strokeMiterLimit="10"
|
||||
android:pathData="M38.61 160.26C38.61 160.26 77.24 160.26 77.24 160.26 77.24 160.26 77.24 165.51 77.24 165.51 77.24 165.51 38.61 165.51 38.61 165.51 38.61 165.51 38.61 160.26 38.61 160.26"/>
|
||||
<path
|
||||
android:fillColor="#FF977A1F"
|
||||
android:strokeColor="#FF977A1F"
|
||||
android:strokeWidth="2.0"
|
||||
android:strokeLineCap="round"
|
||||
android:strokeMiterLimit="10"
|
||||
android:pathData="M73.52 160.26C73.52 160.26 80.96 160.26 80.96 160.26 80.96 160.26 80.96 211.22 80.96 211.22 80.96 211.22 73.52 211.22 73.52 211.22 73.52 211.22 73.52 160.26 73.52 160.26"/>
|
||||
<path
|
||||
android:fillColor="#FF977A1F"
|
||||
android:strokeColor="#FF977A1F"
|
||||
android:strokeWidth="2.0"
|
||||
android:strokeLineCap="round"
|
||||
android:strokeMiterLimit="10"
|
||||
android:pathData="M226.71 85.46C226.71 85.46 233.27 85.46 233.27 85.46 233.27 85.46 233.27 211.22 233.27 211.22 233.27 211.22 226.71 211.22 226.71 211.22 226.71 211.22 226.71 85.46 226.71 85.46"/>
|
||||
<path
|
||||
android:fillColor="#FF977A1F"
|
||||
android:strokeColor="#FF977A1F"
|
||||
android:strokeWidth="2.0"
|
||||
android:strokeLineCap="round"
|
||||
android:strokeMiterLimit="10"
|
||||
android:pathData="M188.08 157.64C188.08 157.64 226.71 157.64 226.71 157.64 226.71 157.64 226.71 162.89 226.71 162.89 226.71 162.89 188.08 162.89 188.08 162.89 188.08 162.89 188.08 157.64 188.08 157.64"/>
|
||||
<path
|
||||
android:fillColor="#FF977A1F"
|
||||
android:strokeColor="#FF977A1F"
|
||||
android:strokeWidth="2.0"
|
||||
android:strokeLineCap="round"
|
||||
android:strokeMiterLimit="10"
|
||||
android:pathData="M188.08 157.64C188.08 157.64 195.52 157.64 195.52 157.64 195.52 157.64 195.52 208.59 195.52 208.59 195.52 208.59 188.08 208.59 188.08 208.59 188.08 208.59 188.08 157.64 188.08 157.64"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:clickable="true">
|
||||
<item android:drawable="@drawable/ic_launcher_background"/>
|
||||
<item
|
||||
android:left="15dp"
|
||||
android:top="15dp"
|
||||
android:right="15dp"
|
||||
android:bottom="15dp"
|
||||
android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</layer-list>
|
||||
@@ -0,0 +1,170 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path
|
||||
android:fillColor="@color/colorPrimary"
|
||||
android:pathData="M0,0h108v108h-108z" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M9,0L9,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,0L19,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M29,0L29,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M39,0L39,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M49,0L49,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M59,0L59,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M69,0L69,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M79,0L79,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M89,0L89,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M99,0L99,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,9L108,9"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,19L108,19"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,29L108,29"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,39L108,39"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,49L108,49"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,59L108,59"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,69L108,69"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,79L108,79"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,89L108,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,99L108,99"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,29L89,29"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,39L89,39"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,49L89,49"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,59L89,59"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,69L89,69"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,79L89,79"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M29,19L29,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M39,19L39,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M49,19L49,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M59,19L59,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M69,19L69,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M79,19L79,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
</vector>
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportHeight="24"
|
||||
android:viewportWidth="24">
|
||||
<path
|
||||
android:fillColor="#FFFFFFFF"
|
||||
android:pathData="M16.61,15.15C16.15,15.15 15.77,14.78 15.77,14.32S16.15,13.5 16.61,13.5H16.61C17.07,13.5 17.45,13.86 17.45,14.32C17.45,14.78 17.07,15.15 16.61,15.15M7.41,15.15C6.95,15.15 6.57,14.78 6.57,14.32C6.57,13.86 6.95,13.5 7.41,13.5H7.41C7.87,13.5 8.24,13.86 8.24,14.32C8.24,14.78 7.87,15.15 7.41,15.15M16.91,10.14L18.58,7.26C18.67,7.09 18.61,6.88 18.45,6.79C18.28,6.69 18.07,6.75 18,6.92L16.29,9.83C14.95,9.22 13.5,8.9 12,8.91C10.47,8.91 9,9.24 7.73,9.82L6.04,6.91C5.95,6.74 5.74,6.68 5.57,6.78C5.4,6.87 5.35,7.08 5.44,7.25L7.1,10.13C4.25,11.69 2.29,14.58 2,18H22C21.72,14.59 19.77,11.7 16.91,10.14H16.91Z"/>
|
||||
</vector>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.1 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 269 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 226 KiB |
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<gradient
|
||||
android:angle="180"
|
||||
android:endColor="#FFFFFFFF"
|
||||
android:startColor="#FFFFFFFF"
|
||||
android:type="linear" />
|
||||
|
||||
<corners android:radius="10dp" />
|
||||
</shape>
|
||||
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/activityBackgroundColor">
|
||||
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/toolbarBackgroundColor"
|
||||
android:id="@+id/toolbar"/>
|
||||
|
||||
<cc.winboll.studio.libappbase.views.AboutView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1.0"
|
||||
android:id="@+id/aboutview"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/activityBackgroundColor">
|
||||
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/toolbarBackgroundColor"
|
||||
android:id="@+id/toolbar"/>
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="当前日期:"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:id="@+id/activitycompletediningtableTextView2"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="补全设置:"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"/>
|
||||
|
||||
<EditText
|
||||
android:layout_width="wrap_content"
|
||||
android:ems="10"
|
||||
android:hint="输入(N或N月N)号"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/activitycompletediningtableEditText3"
|
||||
android:layout_weight="1.0"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="号晚"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<Button
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="清空"
|
||||
android:layout_toLeftOf="@id/activitycompletediningtableButton2"
|
||||
android:id="@+id/activitycompletediningtableButton3"
|
||||
android:onClick="onCleanResultText"/>
|
||||
|
||||
<Button
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="复制"
|
||||
android:layout_toLeftOf="@id/activitycompletediningtableButton1"
|
||||
android:id="@+id/activitycompletediningtableButton2"
|
||||
android:onClick="onCopyResultText"/>
|
||||
|
||||
<Button
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="补全订餐列表"
|
||||
android:id="@+id/activitycompletediningtableButton1"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:onClick="onCreatePreBookList"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:id="@+id/activitycompletediningtableScrollView2"
|
||||
android:layout_weight="1.0">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<EditText
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="top"
|
||||
android:id="@+id/activitycompletediningtableEditText1"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="5dp"
|
||||
android:background="#ccc"/>
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:id="@+id/activitycompletediningtableScrollView1"
|
||||
android:layout_weight="1.0">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<EditText
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="top"
|
||||
android:id="@+id/activitycompletediningtableEditText2"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/activityBackgroundColor">
|
||||
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/toolbarBackgroundColor"
|
||||
android:id="@+id/toolbar"/>
|
||||
|
||||
<LinearLayout
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1.0">
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:background="@drawable/bg_frame"
|
||||
android:onClick="onPreNullDiningTable">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:background="@color/colorPreNullBackgroung"
|
||||
android:src="@drawable/diningtable"
|
||||
android:layout_margin="10dp"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="餐桌空白预定表制作"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:background="@drawable/bg_frame"
|
||||
android:onClick="onCompleteDiningTable">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:background="@color/colorCompleteBackgroung"
|
||||
android:src="@drawable/diningtable"
|
||||
android:layout_margin="10dp"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="订餐列表补全"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:background="@drawable/bg_frame"
|
||||
android:onClick="onNoteRecordHelper">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:background="@color/colorCompleteBackgroung"
|
||||
android:src="@drawable/ic_noterecordhelper"
|
||||
android:layout_margin="10dp"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="订单笔录辅助"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:background="?attr/activityBackgroundColor">
|
||||
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/toolbarBackgroundColor"
|
||||
android:id="@+id/toolbar"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="16dp">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="订单笔录辅助"
|
||||
android:textSize="20sp"
|
||||
android:textStyle="bold"
|
||||
android:gravity="center"
|
||||
android:paddingBottom="16dp"/>
|
||||
|
||||
<!-- 输入区域 -->
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1.0"
|
||||
android:fillViewport="true">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/et_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:hint="请输入订单内容,每行一条记录"
|
||||
android:gravity="top|start"
|
||||
android:background="@android:color/white"
|
||||
android:textColor="@android:color/black"
|
||||
android:textSize="18sp"
|
||||
android:padding="12dp"
|
||||
android:inputType="textMultiLine|textNoSuggestions"
|
||||
android:minLines="10"
|
||||
android:scrollbars="vertical"/>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_highlight"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="一键高亮标记"
|
||||
android:layout_marginTop="12dp"/>
|
||||
|
||||
<!-- 结果区域:关键是 fillViewport -->
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1.0"
|
||||
android:layout_marginTop="12dp"
|
||||
android:fillViewport="true">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_highlight_result"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@android:color/white"
|
||||
android:padding="12dp"
|
||||
android:textSize="18sp"
|
||||
android:gravity="top|start"
|
||||
android:scrollbars="vertical"/>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@@ -0,0 +1,160 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/activityBackgroundColor">
|
||||
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/toolbarBackgroundColor"
|
||||
android:id="@+id/toolbar"/>
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="当前日期:"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:id="@+id/activityprenulldiningtableTextView2"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="订餐日期:"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:id="@+id/activityprenulldiningtableTextView1"
|
||||
android:layout_centerVertical="true"/>
|
||||
|
||||
<EditText
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:inputType="number"
|
||||
android:ems="10"
|
||||
android:layout_toRightOf="@+id/activityprenulldiningtableTextView1"
|
||||
android:id="@+id/activityprenulldiningtableEditText1"
|
||||
android:layout_centerVertical="true"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="号"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:layout_toRightOf="@id/activityprenulldiningtableEditText1"
|
||||
android:layout_centerVertical="true"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<RadioButton
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="午餐"
|
||||
android:id="@+id/activityprenulldiningtableRadioButton1"
|
||||
android:onClick="onDinnerType"/>
|
||||
|
||||
<RadioButton
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="晚餐"
|
||||
android:id="@+id/activityprenulldiningtableRadioButton2"
|
||||
android:onClick="onDinnerType"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical">
|
||||
|
||||
<CheckBox
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/activityprenulldiningtableCheckBox1"
|
||||
android:text="全选"
|
||||
android:layout_marginRight="10dp"
|
||||
android:onClick="onSelectALLTable"/>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/bg_shadow"
|
||||
android:padding="10dp"
|
||||
android:id="@+id/activityprenulldiningtableRecyclerView1"/>
|
||||
|
||||
</LinearLayout>
|
||||
<RelativeLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<Button
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="清空"
|
||||
android:layout_toLeftOf="@id/activityprenulldiningtableButton2"
|
||||
android:id="@+id/activityprenulldiningtableButton3"
|
||||
android:onClick="onCleanResultText"/>
|
||||
|
||||
<Button
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="复制"
|
||||
android:layout_toLeftOf="@id/activityprenulldiningtableButton1"
|
||||
android:id="@+id/activityprenulldiningtableButton2"
|
||||
android:onClick="onCopyResultText"/>
|
||||
|
||||
<Button
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="制作订餐列表"
|
||||
android:id="@+id/activityprenulldiningtableButton1"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:onClick="onCreatePreBookList"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:id="@+id/activityprenulldiningtableScrollView1"
|
||||
android:layout_weight="1.0">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<EditText
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="top"
|
||||
android:id="@+id/activityprenulldiningtableEditText2"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.cardview.widget.CardView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:cardBackgroundColor="#F5F5F5"
|
||||
app:cardElevation="4dp"
|
||||
app:cardCornerRadius="4dp"
|
||||
android:layout_marginLeft="10dp"
|
||||
android:layout_marginRight="10dp">
|
||||
|
||||
<CheckBox
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/listviewtableinfoCheckBox1"/>
|
||||
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/shape_gradient"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical"
|
||||
android:padding="10dp">
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:src="@drawable/ic_launcher"/>
|
||||
|
||||
<TextView
|
||||
android:id="@android:id/message"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="10dp"
|
||||
android:textColor="#FF000000"
|
||||
android:textSize="16sp"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/action_about"
|
||||
android:title="About"
|
||||
android:icon="@android:drawable/ic_menu_info_details"
|
||||
app:showAsAction="ifRoom"/>
|
||||
</menu>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<string name="app_name">排档辅助管理工具</string>
|
||||
|
||||
</resources>
|
||||
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- WinBoLL 默认方案 -->
|
||||
<color name="colorPrimary">#FF196ABC</color>
|
||||
<color name="colorPrimaryDark">#FF002B57</color>
|
||||
<color name="colorAccent">#FF80BFFF</color>
|
||||
<color name="colorToastFrame">#FFA9A9A9</color>
|
||||
<color name="colorToastShadow">#FF000000</color>
|
||||
<color name="colorToastBackgroung">#FFFFFFFF</color>
|
||||
<color name="colorPreNullBackgroung">#FF31D423</color>
|
||||
<color name="colorCompleteBackgroung">#FF34E4E7</color>
|
||||
|
||||
<!-- APPBase 主题必需颜色 -->
|
||||
<color name="mainWindowBackgroundColor">#FFF5F5F5</color>
|
||||
<color name="mainWindowTextColor">#FF000000</color>
|
||||
<color name="toolbarTextColor">#FFFFFFFF</color>
|
||||
<color name="toolbarBackgroundColor">#FF196ABC</color>
|
||||
<color name="debugTextColor">#FF808080</color>
|
||||
|
||||
<!-- 基础颜色 -->
|
||||
<color name="white">#FFFFFF</color>
|
||||
<color name="black">#000000</color>
|
||||
</resources>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<string name="app_name">StallHelper</string>
|
||||
<string name="app_description">LargeStall Stand Auxiliary Management Tool.</string>
|
||||
|
||||
</resources>
|
||||
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<style name="MyStallHelperTheme" parent="Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="themeDebug">@style/MyDebugActivityTheme</item>
|
||||
<item name="aboutViewBackgroundColor">?attr/mainWindowBackgroundColor</item>
|
||||
<item name="aboutViewTextColor">?attr/mainWindowTextColor</item>
|
||||
<item name="aboutViewTitleColor">?attr/mainWindowTextColor</item>
|
||||
<item name="aboutViewDividerColor">?attr/mainWindowDarkTextColor</item>
|
||||
|
||||
<item name="dialogBackgroundColor">?attr/mainWindowBackgroundColor</item>
|
||||
<item name="dialogTextColor">?attr/mainWindowTextColor</item>
|
||||
<item name="toolbarBackgroundColor">@color/toolbarBackgroundColor</item>
|
||||
<item name="toolbarTextColor">@color/toolbarTextColor</item>
|
||||
<item name="textViewBackgroundColor">?attr/mainWindowBackgroundColor</item>
|
||||
<item name="textViewTextColor">?attr/mainWindowTextColor</item>
|
||||
<item name="editTextBackgroundColor">?attr/mainWindowBackgroundColor</item>
|
||||
<item name="editTextTextColor">?attr/mainWindowTextColor</item>
|
||||
<item name="scrollViewBackgroundColor">?attr/mainWindowBackgroundColor</item>
|
||||
<item name="activityBackgroundColor">?attr/mainWindowBackgroundColor</item>
|
||||
<item name="activityTextColor">?attr/mainWindowTextColor</item>
|
||||
<item name="mainWindowBackgroundColor">@color/mainWindowBackgroundColor</item>
|
||||
<item name="mainWindowTextColor">@color/mainWindowTextColor</item>
|
||||
<item name="mainWindowDarkBackgroundColor">@color/mainWindowBackgroundColor</item>
|
||||
<item name="mainWindowDarkTextColor">@color/mainWindowTextColor</item>
|
||||
</style>
|
||||
|
||||
<style name="MyDebugActivityTheme" parent="Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:statusBarColor">@color/toolbarBackgroundColor</item>
|
||||
<item name="colorTittle">?attr/mainWindowTextColor</item>
|
||||
<item name="colorTittleBackgound">@color/toolbarBackgroundColor</item>
|
||||
<item name="colorText">?attr/debugTextColor</item>
|
||||
<item name="colorTextBackgound">?attr/mainWindowBackgroundColor</item>
|
||||
<item name="debugTextColor">@color/debugTextColor</item>
|
||||
<item name="toolbarTextColor">@color/toolbarTextColor</item>
|
||||
</style>
|
||||
</resources>
|
||||
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools" >
|
||||
|
||||
<application>
|
||||
|
||||
<!-- Put flavor specific code here -->
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<!-- Put flavor specific strings here -->
|
||||
|
||||
</resources>
|
||||
Reference in New Issue
Block a user