Merge branch 'appbase' into webpagesources
This commit is contained in:
		| @@ -115,6 +115,7 @@ | |||||||
| # 本项目要实际运用需要注意以下几个步骤: | # 本项目要实际运用需要注意以下几个步骤: | ||||||
| # 在项目根目录下: | # 在项目根目录下: | ||||||
| ## ★. 项目模块编译环境设置(必须),settings.gradle-demo 要复制为 settings.gradle,并取消相应项目模块的注释。 | ## ★. 项目模块编译环境设置(必须),settings.gradle-demo 要复制为 settings.gradle,并取消相应项目模块的注释。 | ||||||
|  | ## ★. 项目模块编译环境设置(必须) 在根目录拷贝 gradle.properties-androidx-demo 或者 gradle.properties-android-demo 文件为 gradle.properties。 | ||||||
| ## ★. 项目 Android SDK 编译环境设置(可选),local.properties-demo 要复制为 local.properties,并按需要设置 Android SDK 目录。 | ## ★. 项目 Android SDK 编译环境设置(可选),local.properties-demo 要复制为 local.properties,并按需要设置 Android SDK 目录。 | ||||||
| ## ★. 应用签名密钥 keystore 设置问题。一般调试编译只需用【Termux】cd 进 GenKeyStore 目录执行 $ bash gen_debug_keystore.sh 命令即可完成设置。 | ## ★. 应用签名密钥 keystore 设置问题。一般调试编译只需用【Termux】cd 进 GenKeyStore 目录执行 $ bash gen_debug_keystore.sh 命令即可完成设置。 | ||||||
| ## ☆. 应用 WiBoLL 签名密钥配置问题<非必须考虑>。设置时需要 clone 【keystore】模块源码并拷贝模块目录的 appkey.jks 与 appkey.keystore 到项目根目录即可。 | ## ☆. 应用 WiBoLL 签名密钥配置问题<非必须考虑>。设置时需要 clone 【keystore】模块源码并拷贝模块目录的 appkey.jks 与 appkey.keystore 到项目根目录即可。 | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| #Created by .winboll/winboll_app_build.gradle | #Created by .winboll/winboll_app_build.gradle | ||||||
| #Mon Jun 09 01:44:28 HKT 2025 | #Sat Jun 28 12:59:51 HKT 2025 | ||||||
| stageCount=1 | stageCount=3 | ||||||
| libraryProject=libaes | libraryProject=libaes | ||||||
| baseVersion=15.9 | baseVersion=15.9 | ||||||
| publishVersion=15.9.0 | publishVersion=15.9.2 | ||||||
| buildCount=0 | buildCount=0 | ||||||
| baseBetaVersion=15.9.1 | baseBetaVersion=15.9.3 | ||||||
|   | |||||||
| @@ -83,7 +83,7 @@ public class AboutActivity extends AppCompatActivity implements IWinBoLLActivity | |||||||
|         appInfo.setAppGitOwner("Studio"); |         appInfo.setAppGitOwner("Studio"); | ||||||
|         appInfo.setAppGitAPPBranch(szBranchName); |         appInfo.setAppGitAPPBranch(szBranchName); | ||||||
|         appInfo.setAppGitAPPSubProjectFolder(szBranchName); |         appInfo.setAppGitAPPSubProjectFolder(szBranchName); | ||||||
|         appInfo.setAppHomePage("https://discuz.winboll.cc/forum.php?mod=viewthread&tid=2&fromuid=1"); |         appInfo.setAppHomePage("https://discuz.winboll.cc/forum.php?mod=viewthread&tid=3&extra=page%3D1"); | ||||||
|         appInfo.setAppAPKName("AES"); |         appInfo.setAppAPKName("AES"); | ||||||
|         appInfo.setAppAPKFolderName("AES"); |         appInfo.setAppAPKFolderName("AES"); | ||||||
|         //appInfo.setIsAddDebugTools(false); |         //appInfo.setIsAddDebugTools(false); | ||||||
|   | |||||||
| @@ -67,7 +67,7 @@ dependencies { | |||||||
|     //api 'androidx.vectordrawable:vectordrawable-animated:1.1.0' |     //api 'androidx.vectordrawable:vectordrawable-animated:1.1.0' | ||||||
|     //api 'androidx.fragment:fragment:1.1.0' |     //api 'androidx.fragment:fragment:1.1.0' | ||||||
|      |      | ||||||
|     api 'cc.winboll.studio:libaes:15.8.0' |     api 'cc.winboll.studio:libaes:15.9.2' | ||||||
|     api 'cc.winboll.studio:libapputils:15.8.2' |     api 'cc.winboll.studio:libapputils:15.8.4' | ||||||
|     api 'cc.winboll.studio:libappbase:15.8.2' |     api 'cc.winboll.studio:libappbase:15.8.4' | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| #Created by .winboll/winboll_app_build.gradle | #Created by .winboll/winboll_app_build.gradle | ||||||
| #Sun Jun 01 08:03:56 GMT 2025 | #Sat Jun 28 05:02:54 GMT 2025 | ||||||
| stageCount=0 | stageCount=0 | ||||||
| libraryProject= | libraryProject= | ||||||
| baseVersion=15.0 | baseVersion=15.0 | ||||||
| publishVersion=15.0.0 | publishVersion=15.0.0 | ||||||
| buildCount=24 | buildCount=27 | ||||||
| baseBetaVersion=15.0.1 | baseBetaVersion=15.0.1 | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ android { | |||||||
|         // versionName 更新后需要手动设置  |         // versionName 更新后需要手动设置  | ||||||
|         // .winboll/winbollBuildProps.properties 文件的 stageCount=0 |         // .winboll/winbollBuildProps.properties 文件的 stageCount=0 | ||||||
|         // Gradle编译环境下合起来的 versionName 就是 "${versionName}.0" |         // Gradle编译环境下合起来的 versionName 就是 "${versionName}.0" | ||||||
|         versionName "15.8" |         versionName "15.9" | ||||||
|         if(true) { |         if(true) { | ||||||
|             versionName = genVersionName("${versionName}") |             versionName = genVersionName("${versionName}") | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| #Created by .winboll/winboll_app_build.gradle | #Created by .winboll/winboll_app_build.gradle | ||||||
| #Mon Jun 09 09:38:19 HKT 2025 | #Mon Aug 18 03:56:26 HKT 2025 | ||||||
| stageCount=9 | stageCount=6 | ||||||
| libraryProject=libappbase | libraryProject=libappbase | ||||||
| baseVersion=15.8 | baseVersion=15.9 | ||||||
| publishVersion=15.8.8 | publishVersion=15.9.5 | ||||||
| buildCount=0 | buildCount=0 | ||||||
| baseBetaVersion=15.8.9 | baseBetaVersion=15.9.6 | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| #Created by .winboll/winboll_app_build.gradle | #Created by .winboll/winboll_app_build.gradle | ||||||
| #Sun May 04 05:32:00 GMT 2025 | #Tue Jun 24 09:54:47 HKT 2025 | ||||||
| stageCount=1 | stageCount=3 | ||||||
| libraryProject= | libraryProject= | ||||||
| baseVersion=15.2 | baseVersion=15.2 | ||||||
| publishVersion=15.2.0 | publishVersion=15.2.2 | ||||||
| buildCount=74 | buildCount=0 | ||||||
| baseBetaVersion=15.2.1 | baseBetaVersion=15.2.3 | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ | |||||||
| https://github.com/aJIEw/PhoneCallApp.git | https://github.com/aJIEw/PhoneCallApp.git | ||||||
|  |  | ||||||
| #### 介绍 | #### 介绍 | ||||||
| 通讯录与拨号 | 这是可以根据正则表达式匹配拦截骚扰电话的手机拨号应用。 | ||||||
|  |  | ||||||
| #### 软件架构 | #### 软件架构 | ||||||
| 适配安卓应用 [AIDE Pro] 的 Gradle 编译结构。 | 适配安卓应用 [AIDE Pro] 的 Gradle 编译结构。 | ||||||
|   | |||||||
| @@ -45,9 +45,9 @@ android { | |||||||
|  |  | ||||||
| dependencies { | dependencies { | ||||||
|     api fileTree(dir: 'libs', include: ['*.jar']) |     api fileTree(dir: 'libs', include: ['*.jar']) | ||||||
|     api 'cc.winboll.studio:libaes:15.8.0' |     api 'cc.winboll.studio:libaes:15.9.2' | ||||||
|     api 'cc.winboll.studio:libapputils:15.8.1' |     api 'cc.winboll.studio:libapputils:15.8.4' | ||||||
|     api 'cc.winboll.studio:libappbase:15.8.1' |     api 'cc.winboll.studio:libappbase:15.8.4' | ||||||
|      |      | ||||||
|     // 权限请求框架:https://github.com/getActivity/XXPermissions |     // 权限请求框架:https://github.com/getActivity/XXPermissions | ||||||
|     api 'com.github.getActivity:XXPermissions:18.63' |     api 'com.github.getActivity:XXPermissions:18.63' | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| #Created by .winboll/winboll_app_build.gradle | #Created by .winboll/winboll_app_build.gradle | ||||||
| #Tue May 20 13:02:18 HKT 2025 | #Thu Jul 17 09:57:24 HKT 2025 | ||||||
| stageCount=3 | stageCount=12 | ||||||
| libraryProject= | libraryProject= | ||||||
| baseVersion=15.3 | baseVersion=15.3 | ||||||
| publishVersion=15.3.2 | publishVersion=15.3.11 | ||||||
| buildCount=0 | buildCount=0 | ||||||
| baseBetaVersion=15.3.3 | baseBetaVersion=15.3.12 | ||||||
|   | |||||||
| @@ -79,12 +79,12 @@ public class AboutActivity extends AppCompatActivity implements IWinBoLLActivity | |||||||
|         APPInfo appInfo = new APPInfo(); |         APPInfo appInfo = new APPInfo(); | ||||||
|         appInfo.setAppName("Contacts"); |         appInfo.setAppName("Contacts"); | ||||||
|         appInfo.setAppIcon(cc.winboll.studio.libaes.R.drawable.ic_winboll); |         appInfo.setAppIcon(cc.winboll.studio.libaes.R.drawable.ic_winboll); | ||||||
|         appInfo.setAppDescription("通讯录与拨号"); |         appInfo.setAppDescription("这是可以根据正则表达式匹配拦截骚扰电话的手机拨号应用。"); | ||||||
|         appInfo.setAppGitName("APP"); |         appInfo.setAppGitName("APPBase"); | ||||||
|         appInfo.setAppGitOwner("Studio"); |         appInfo.setAppGitOwner("Studio"); | ||||||
|         appInfo.setAppGitAPPBranch(szBranchName); |         appInfo.setAppGitAPPBranch(szBranchName); | ||||||
|         appInfo.setAppGitAPPSubProjectFolder(szBranchName); |         appInfo.setAppGitAPPSubProjectFolder(szBranchName); | ||||||
|         appInfo.setAppHomePage("https://www.winboll.cc/studio/details.php?app=Contacts"); |         appInfo.setAppHomePage("https://discuz.winboll.cc/forum.php?mod=viewthread&tid=4&extra=page%3D1"); | ||||||
|         appInfo.setAppAPKName("Contacts"); |         appInfo.setAppAPKName("Contacts"); | ||||||
|         appInfo.setAppAPKFolderName("Contacts"); |         appInfo.setAppAPKFolderName("Contacts"); | ||||||
|         return new AboutView(mContext, appInfo); |         return new AboutView(mContext, appInfo); | ||||||
|   | |||||||
| @@ -198,6 +198,9 @@ public class SettingsActivity extends AppCompatActivity implements IWinBoLLActiv | |||||||
|             settingsModel.setDunTotalCount(Integer.parseInt(etDunTotalCount.getText().toString())); |             settingsModel.setDunTotalCount(Integer.parseInt(etDunTotalCount.getText().toString())); | ||||||
|             settingsModel.setDunResumeSecondCount(Integer.parseInt(etDunResumeSecondCount.getText().toString())); |             settingsModel.setDunResumeSecondCount(Integer.parseInt(etDunResumeSecondCount.getText().toString())); | ||||||
|             settingsModel.setDunResumeCount(Integer.parseInt(etDunResumeCount.getText().toString())); |             settingsModel.setDunResumeCount(Integer.parseInt(etDunResumeCount.getText().toString())); | ||||||
|  | 			 | ||||||
|  | 			// 应用效果提示 | ||||||
|  | 			ToastUtils.show((settingsModel.getDunTotalCount() == 1)?"电话骚扰防御力几乎为0。":String.format("以下设置将在连拨%d次后接通电话。", settingsModel.getDunTotalCount())); | ||||||
|         } |         } | ||||||
|         settingsModel.setIsEnableDun(isEnableDun); |         settingsModel.setIsEnableDun(isEnableDun); | ||||||
|         Rules.getInstance(this).saveDun(); |         Rules.getInstance(this).saveDun(); | ||||||
| @@ -207,6 +210,7 @@ public class SettingsActivity extends AppCompatActivity implements IWinBoLLActiv | |||||||
|         etDunTotalCount.setText(Integer.toString(settingsModel.getDunTotalCount())); |         etDunTotalCount.setText(Integer.toString(settingsModel.getDunTotalCount())); | ||||||
|         etDunResumeSecondCount.setText(Integer.toString(settingsModel.getDunResumeSecondCount())); |         etDunResumeSecondCount.setText(Integer.toString(settingsModel.getDunResumeSecondCount())); | ||||||
|         etDunResumeCount.setText(Integer.toString(settingsModel.getDunResumeCount())); |         etDunResumeCount.setText(Integer.toString(settingsModel.getDunResumeCount())); | ||||||
|  | 		 | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     void updateStreamVolumeTextView() { |     void updateStreamVolumeTextView() { | ||||||
| @@ -243,6 +247,9 @@ public class SettingsActivity extends AppCompatActivity implements IWinBoLLActiv | |||||||
|         Rules.getInstance(this).resetDefaultBoBullToonURL(); |         Rules.getInstance(this).resetDefaultBoBullToonURL(); | ||||||
|         EditText etBoBullToonURL = findViewById(R.id.bobulltoonurl_et); |         EditText etBoBullToonURL = findViewById(R.id.bobulltoonurl_et); | ||||||
|         etBoBullToonURL.setText(Rules.getInstance(this).getBoBullToonURL()); |         etBoBullToonURL.setText(Rules.getInstance(this).getBoBullToonURL()); | ||||||
|  | 		 | ||||||
|  | 		final TomCat tomCat = TomCat.getInstance(this); | ||||||
|  | 		tomCat.cleanBoBullToon(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void onDownloadBoBullToon(View view) { |     public void onDownloadBoBullToon(View view) { | ||||||
| @@ -330,4 +337,8 @@ public class SettingsActivity extends AppCompatActivity implements IWinBoLLActiv | |||||||
|     public void onAbout(View view) { |     public void onAbout(View view) { | ||||||
|         App.getWinBoLLActivityManager().startWinBoLLActivity(this, AboutActivity.class); |         App.getWinBoLLActivityManager().startWinBoLLActivity(this, AboutActivity.class); | ||||||
|     } |     } | ||||||
|  | 	 | ||||||
|  | 	public void onLogView(View view) { | ||||||
|  |         App.getWinBoLLActivityManager().startLogActivity(this); | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -5,13 +5,18 @@ package cc.winboll.studio.contacts.adapters; | |||||||
|  * @Date 2025/02/26 13:09:32 |  * @Date 2025/02/26 13:09:32 | ||||||
|  * @Describe CallLogAdapter |  * @Describe CallLogAdapter | ||||||
|  */ |  */ | ||||||
|  | import android.content.ClipData; | ||||||
|  | import android.content.ClipboardManager; | ||||||
| import android.content.Context; | import android.content.Context; | ||||||
| import android.content.Intent; | import android.content.Intent; | ||||||
| import android.view.LayoutInflater; | import android.view.LayoutInflater; | ||||||
|  | import android.view.MenuItem; | ||||||
| import android.view.View; | import android.view.View; | ||||||
| import android.view.ViewGroup; | import android.view.ViewGroup; | ||||||
| import android.widget.Button; | import android.widget.Button; | ||||||
|  | import android.widget.PopupMenu; | ||||||
| import android.widget.TextView; | import android.widget.TextView; | ||||||
|  | import android.widget.Toast; | ||||||
| import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||||
| import androidx.recyclerview.widget.RecyclerView; | import androidx.recyclerview.widget.RecyclerView; | ||||||
| import cc.winboll.studio.contacts.R; | import cc.winboll.studio.contacts.R; | ||||||
| @@ -47,6 +52,38 @@ public class CallLogAdapter extends RecyclerView.Adapter<CallLogAdapter.CallLogV | |||||||
|     public void onBindViewHolder(@NonNull CallLogViewHolder holder, int position) { |     public void onBindViewHolder(@NonNull CallLogViewHolder holder, int position) { | ||||||
|         final CallLogModel callLog = callLogList.get(position); |         final CallLogModel callLog = callLogList.get(position); | ||||||
|         holder.phoneNumber.setText(callLog.getPhoneNumber() + "☎" + mContactUtils.getContactsName(callLog.getPhoneNumber())); |         holder.phoneNumber.setText(callLog.getPhoneNumber() + "☎" + mContactUtils.getContactsName(callLog.getPhoneNumber())); | ||||||
|  | 		holder.phoneNumber.setOnLongClickListener(new View.OnLongClickListener() { | ||||||
|  | 				@Override | ||||||
|  | 				public boolean onLongClick(View p1) { | ||||||
|  | 					// 弹出复制菜单 | ||||||
|  | 					PopupMenu menu = new PopupMenu(mContext, holder.phoneNumber); | ||||||
|  | 					//加载菜单资源 | ||||||
|  | 					menu.getMenuInflater().inflate(R.menu.toolbar_calllog_phonenumber, menu.getMenu()); | ||||||
|  | 					//设置点击事件的响应 | ||||||
|  | 					menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { | ||||||
|  | 							@Override | ||||||
|  | 							public boolean onMenuItemClick(MenuItem menuItem) { | ||||||
|  | 								int nItemId = menuItem.getItemId(); | ||||||
|  | 								if (nItemId == R.id.item_calllog_phonenumber_copy) { | ||||||
|  | 									// Gets a handle to the clipboard service. | ||||||
|  | 									ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE); | ||||||
|  | 									// Creates a new text clip to put on the clipboard | ||||||
|  | 									ClipData clip = ClipData.newPlainText("simple text", callLog.getPhoneNumber()); | ||||||
|  | 									// Set the clipboard's primary clip. | ||||||
|  | 									clipboard.setPrimaryClip(clip); | ||||||
|  | 									Toast.makeText(mContext, "Copy to clipboard.", Toast.LENGTH_SHORT).show(); | ||||||
|  | 								} | ||||||
|  |  | ||||||
|  | 								return true; | ||||||
|  | 							} | ||||||
|  | 						}); | ||||||
|  | 					//一定要调用show()来显示弹出式菜单 | ||||||
|  | 					menu.show(); | ||||||
|  |  | ||||||
|  | 					return true; | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		 | ||||||
|         holder.callStatus.setText(callLog.getCallStatus()); |         holder.callStatus.setText(callLog.getCallStatus()); | ||||||
|         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); |         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); | ||||||
|         holder.callDate.setText(dateFormat.format(callLog.getCallDate())); |         holder.callDate.setText(dateFormat.format(callLog.getCallDate())); | ||||||
|   | |||||||
| @@ -5,19 +5,25 @@ package cc.winboll.studio.contacts.adapters; | |||||||
|  * @Date 2025/02/26 13:35:44 |  * @Date 2025/02/26 13:35:44 | ||||||
|  * @Describe ContactAdapter |  * @Describe ContactAdapter | ||||||
|  */ |  */ | ||||||
|  | import android.content.ClipData; | ||||||
|  | import android.content.ClipboardManager; | ||||||
|  | import android.content.Context; | ||||||
| import android.content.Intent; | import android.content.Intent; | ||||||
| import android.view.LayoutInflater; | import android.view.LayoutInflater; | ||||||
|  | import android.view.MenuItem; | ||||||
| import android.view.View; | import android.view.View; | ||||||
| import android.view.ViewGroup; | import android.view.ViewGroup; | ||||||
| import android.widget.Button; | import android.widget.LinearLayout; | ||||||
|  | import android.widget.PopupMenu; | ||||||
| import android.widget.TextView; | import android.widget.TextView; | ||||||
|  | import android.widget.Toast; | ||||||
| import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||||
| import androidx.recyclerview.widget.RecyclerView; | import androidx.recyclerview.widget.RecyclerView; | ||||||
| import cc.winboll.studio.contacts.R; | import cc.winboll.studio.contacts.R; | ||||||
| import cc.winboll.studio.contacts.beans.ContactModel; | import cc.winboll.studio.contacts.beans.ContactModel; | ||||||
|  | import cc.winboll.studio.libaes.views.AOHPCTCSeekBar; | ||||||
| import com.hjq.toast.ToastUtils; | import com.hjq.toast.ToastUtils; | ||||||
| import java.util.List; | import java.util.List; | ||||||
| import cc.winboll.studio.libaes.views.AOHPCTCSeekBar; |  | ||||||
|  |  | ||||||
| public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ContactViewHolder> { | public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ContactViewHolder> { | ||||||
|  |  | ||||||
| @@ -26,8 +32,10 @@ public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ContactV | |||||||
|     private static final int REQUEST_CALL_PHONE = 1; |     private static final int REQUEST_CALL_PHONE = 1; | ||||||
|  |  | ||||||
|     private List<ContactModel> contactList; |     private List<ContactModel> contactList; | ||||||
|  | 	Context mContext; | ||||||
|  |  | ||||||
|     public ContactAdapter(List<ContactModel> contactList) { |     public ContactAdapter(Context context, List<ContactModel> contactList) { | ||||||
|  | 		mContext = context; | ||||||
|         this.contactList = contactList; |         this.contactList = contactList; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -41,6 +49,37 @@ public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ContactV | |||||||
|     @Override |     @Override | ||||||
|     public void onBindViewHolder(@NonNull ContactViewHolder holder, int position) { |     public void onBindViewHolder(@NonNull ContactViewHolder holder, int position) { | ||||||
|         final ContactModel contact = contactList.get(position); |         final ContactModel contact = contactList.get(position); | ||||||
|  | 		holder.llPhoneNumberMain.setOnLongClickListener(new View.OnLongClickListener() { | ||||||
|  | 				@Override | ||||||
|  | 				public boolean onLongClick(View p1) { | ||||||
|  | 					// 弹出复制菜单 | ||||||
|  | 					PopupMenu menu = new PopupMenu(mContext, holder.llPhoneNumberMain); | ||||||
|  | 					//加载菜单资源 | ||||||
|  | 					menu.getMenuInflater().inflate(R.menu.toolbar_contact_phonenumber, menu.getMenu()); | ||||||
|  | 					//设置点击事件的响应 | ||||||
|  | 					menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { | ||||||
|  | 							@Override | ||||||
|  | 							public boolean onMenuItemClick(MenuItem menuItem) { | ||||||
|  | 								int nItemId = menuItem.getItemId(); | ||||||
|  | 								if (nItemId == R.id.item_contact_phonenumber_copy) { | ||||||
|  | 									// Gets a handle to the clipboard service. | ||||||
|  | 									ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE); | ||||||
|  | 									// Creates a new text clip to put on the clipboard | ||||||
|  | 									ClipData clip = ClipData.newPlainText("simple text", contact.getNumber()); | ||||||
|  | 									// Set the clipboard's primary clip. | ||||||
|  | 									clipboard.setPrimaryClip(clip); | ||||||
|  | 									Toast.makeText(mContext, "Copy to clipboard.", Toast.LENGTH_SHORT).show(); | ||||||
|  | 								} | ||||||
|  |  | ||||||
|  | 								return true; | ||||||
|  | 							} | ||||||
|  | 						}); | ||||||
|  | 					//一定要调用show()来显示弹出式菜单 | ||||||
|  | 					menu.show(); | ||||||
|  |  | ||||||
|  | 					return true; | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|         holder.contactName.setText(contact.getName()); |         holder.contactName.setText(contact.getName()); | ||||||
|         holder.contactNumber.setText(contact.getNumber()); |         holder.contactNumber.setText(contact.getNumber()); | ||||||
|  |  | ||||||
| @@ -69,12 +108,14 @@ public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ContactV | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public class ContactViewHolder extends RecyclerView.ViewHolder { |     public class ContactViewHolder extends RecyclerView.ViewHolder { | ||||||
|  | 		LinearLayout llPhoneNumberMain; | ||||||
|         TextView contactName; |         TextView contactName; | ||||||
|         TextView contactNumber; |         TextView contactNumber; | ||||||
|         AOHPCTCSeekBar dialAOHPCTCSeekBar; |         AOHPCTCSeekBar dialAOHPCTCSeekBar; | ||||||
|          |          | ||||||
|         public ContactViewHolder(@NonNull View itemView) { |         public ContactViewHolder(@NonNull View itemView) { | ||||||
|             super(itemView); |             super(itemView); | ||||||
|  | 			llPhoneNumberMain = itemView.findViewById(R.id.itemcontactLinearLayout1); | ||||||
|             contactName = itemView.findViewById(R.id.contact_name); |             contactName = itemView.findViewById(R.id.contact_name); | ||||||
|             contactNumber = itemView.findViewById(R.id.contact_number); |             contactNumber = itemView.findViewById(R.id.contact_number); | ||||||
|             dialAOHPCTCSeekBar = itemView.findViewById(R.id.aohpctcseekbar_dial); |             dialAOHPCTCSeekBar = itemView.findViewById(R.id.aohpctcseekbar_dial); | ||||||
|   | |||||||
| @@ -7,6 +7,7 @@ package cc.winboll.studio.contacts.adapters; | |||||||
|  */ |  */ | ||||||
| import android.content.Context; | import android.content.Context; | ||||||
| import android.view.LayoutInflater; | import android.view.LayoutInflater; | ||||||
|  | import android.view.MotionEvent; | ||||||
| import android.view.View; | import android.view.View; | ||||||
| import android.view.ViewGroup; | import android.view.ViewGroup; | ||||||
| import android.widget.Button; | import android.widget.Button; | ||||||
| @@ -20,6 +21,7 @@ import cc.winboll.studio.contacts.R; | |||||||
| import cc.winboll.studio.contacts.beans.PhoneConnectRuleModel; | import cc.winboll.studio.contacts.beans.PhoneConnectRuleModel; | ||||||
| import cc.winboll.studio.contacts.dun.Rules; | import cc.winboll.studio.contacts.dun.Rules; | ||||||
| import cc.winboll.studio.contacts.views.LeftScrollView; | import cc.winboll.studio.contacts.views.LeftScrollView; | ||||||
|  | import cc.winboll.studio.libappbase.LogUtils; | ||||||
| import cc.winboll.studio.libappbase.dialogs.YesNoAlertDialog; | import cc.winboll.studio.libappbase.dialogs.YesNoAlertDialog; | ||||||
| import com.hjq.toast.ToastUtils; | import com.hjq.toast.ToastUtils; | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
| @@ -60,6 +62,10 @@ public class PhoneConnectRuleAdapter extends RecyclerView.Adapter<RecyclerView.V | |||||||
|             final SimpleViewHolder simpleViewHolder = (SimpleViewHolder) holder; |             final SimpleViewHolder simpleViewHolder = (SimpleViewHolder) holder; | ||||||
|             String szView = model.getRuleText().trim().equals("") ?"[NULL]": model.getRuleText(); |             String szView = model.getRuleText().trim().equals("") ?"[NULL]": model.getRuleText(); | ||||||
|             simpleViewHolder.tvRuleText.setText(szView); |             simpleViewHolder.tvRuleText.setText(szView); | ||||||
|  |             simpleViewHolder.checkBoxAllow.setChecked(model.isAllowConnection()); | ||||||
|  | 			simpleViewHolder.checkBoxAllow.setEnabled(false); | ||||||
|  |             simpleViewHolder.checkBoxEnable.setChecked(model.isEnable()); | ||||||
|  | 			simpleViewHolder.checkBoxEnable.setEnabled(false); | ||||||
|             simpleViewHolder.scrollView.setOnActionListener(new LeftScrollView.OnActionListener(){ |             simpleViewHolder.scrollView.setOnActionListener(new LeftScrollView.OnActionListener(){ | ||||||
|  |  | ||||||
|                     @Override |                     @Override | ||||||
| @@ -215,16 +221,22 @@ public class PhoneConnectRuleAdapter extends RecyclerView.Adapter<RecyclerView.V | |||||||
|  |  | ||||||
|         private final LeftScrollView scrollView; |         private final LeftScrollView scrollView; | ||||||
|         private final TextView tvRuleText; |         private final TextView tvRuleText; | ||||||
|  | 		CheckBox checkBoxAllow; | ||||||
|  |         CheckBox checkBoxEnable; | ||||||
|  |  | ||||||
|  |  | ||||||
|         public SimpleViewHolder(@NonNull ViewGroup parent, @NonNull View itemView) { |         public SimpleViewHolder(@NonNull ViewGroup parent, @NonNull View itemView) { | ||||||
|             super(itemView); |             super(itemView); | ||||||
|             scrollView = itemView.findViewById(R.id.scrollView); |             scrollView = itemView.findViewById(R.id.scrollView); | ||||||
|             //tvRuleText = itemView.findViewById(R.id.ruletext_tv); | 			LayoutInflater inflater = LayoutInflater.from(itemView.getContext()); | ||||||
|             tvRuleText = new TextView(itemView.getContext()); | 		    View viewContent = inflater.inflate(R.layout.view_phone_connect_rule_simple_content, parent, false); | ||||||
|  |             tvRuleText = viewContent.findViewById(R.id.ruletext_tv); | ||||||
|  |             checkBoxAllow = viewContent.findViewById(R.id.checkbox_allow); | ||||||
|  |             checkBoxEnable = viewContent.findViewById(R.id.checkbox_enable); | ||||||
|  |             //tvRuleText = new TextView(itemView.getContext()); | ||||||
|             scrollView.setContentWidth(parent.getWidth()); |             scrollView.setContentWidth(parent.getWidth()); | ||||||
|             //scrollView.setContentWidth(600); |             //scrollView.setContentWidth(600); | ||||||
|             scrollView.addContentLayout(tvRuleText); |             scrollView.addContentLayout(viewContent); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|     } |     } | ||||||
| @@ -243,5 +255,9 @@ public class PhoneConnectRuleAdapter extends RecyclerView.Adapter<RecyclerView.V | |||||||
|             buttonConfirm = itemView.findViewById(R.id.button_confirm); |             buttonConfirm = itemView.findViewById(R.id.button_confirm); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | 	private void setCheckBoxTouchListener(CheckBox checkBox) { | ||||||
|  |  | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -44,7 +44,7 @@ public class TomCat { | |||||||
|         } |         } | ||||||
|         return _TomCat; |         return _TomCat; | ||||||
|     } |     } | ||||||
|      |  | ||||||
|     public String getDefaultBobulltoonUrl() { |     public String getDefaultBobulltoonUrl() { | ||||||
|         return mContext.getString(R.string.default_bobulltoon_url); |         return mContext.getString(R.string.default_bobulltoon_url); | ||||||
|     } |     } | ||||||
| @@ -123,7 +123,7 @@ public class TomCat { | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             // 更新新文件 |             // 更新新文件 | ||||||
|             if(downloadAndExtractZip(zipUrl, destinationFolder)) { |             if (downloadAndExtractZip(zipUrl, destinationFolder)) { | ||||||
|                 LogUtils.d(TAG, "ZIP 文件下载并解压成功。"); |                 LogUtils.d(TAG, "ZIP 文件下载并解压成功。"); | ||||||
|                 return true; |                 return true; | ||||||
|             } |             } | ||||||
| @@ -155,6 +155,19 @@ public class TomCat { | |||||||
|         return mContext.getExternalFilesDir(TAG); |         return mContext.getExternalFilesDir(TAG); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | 	public void cleanBoBullToon() { | ||||||
|  | 		String destinationFolder = getWorkingFolder().getPath(); // 替换为实际的目标文件夹路径 | ||||||
|  | 		// 删除旧文件 | ||||||
|  | 		File fOldFolder = new File(destinationFolder); | ||||||
|  | 		if (fOldFolder.exists()) { | ||||||
|  | 			deleteFolderRecursive(fOldFolder); | ||||||
|  | 			fOldFolder.mkdirs(); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		ToastUtils.show("已清空 BoBullToon 数据!"); | ||||||
|  | 		LogUtils.d(TAG, "已清空 BoBullToon 数据"); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|     public boolean loadPhoneBoBullToon() { |     public boolean loadPhoneBoBullToon() { | ||||||
|         listPhoneBoBullToon.clear(); |         listPhoneBoBullToon.clear(); | ||||||
|         File fBoBullToon = new File(getWorkingFolder(), "bobulltoon"); |         File fBoBullToon = new File(getWorkingFolder(), "bobulltoon"); | ||||||
|   | |||||||
| @@ -145,6 +145,14 @@ public class Rules { | |||||||
|             LogUtils.d(TAG, String.format("isDefend == %s\nisConnect == %s", isDefend, isConnect)); |             LogUtils.d(TAG, String.format("isDefend == %s\nisConnect == %s", isDefend, isConnect)); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         // 检验拨不通号码群 | ||||||
|  |         if (!isDefend && MainService.isPhoneInBoBullToon(phoneNumber)) { | ||||||
|  |             LogUtils.d(TAG, String.format("PhoneNumber %s\n Is In BoBullToon", phoneNumber)); | ||||||
|  |             isDefend = true; | ||||||
|  |             isConnect = false; | ||||||
|  |             LogUtils.d(TAG, String.format("isDefend == %s\nisConnect == %s", isDefend, isConnect)); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         // 查询通讯录是否有该联系人 |         // 查询通讯录是否有该联系人 | ||||||
|         boolean isPhoneInContacts = ContactUtils.getInstance(mContext).isPhoneInContacts(mContext, phoneNumber); |         boolean isPhoneInContacts = ContactUtils.getInstance(mContext).isPhoneInContacts(mContext, phoneNumber); | ||||||
|         if (!isDefend) { |         if (!isDefend) { | ||||||
| @@ -158,14 +166,6 @@ public class Rules { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         // 检验拨不通号码群 |  | ||||||
|         if (!isDefend && MainService.isPhoneInBoBullToon(phoneNumber)) { |  | ||||||
|             LogUtils.d(TAG, String.format("PhoneNumber %s\n Is In BoBullToon", phoneNumber)); |  | ||||||
|             isDefend = true; |  | ||||||
|             isConnect = false; |  | ||||||
|             LogUtils.d(TAG, String.format("isDefend == %s\nisConnect == %s", isDefend, isConnect)); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         // 正则匹配规则名单校验 |         // 正则匹配规则名单校验 | ||||||
|         if (!isDefend) { |         if (!isDefend) { | ||||||
|             for (int i = 0; i < _PhoneConnectRuleModelList.size(); i++) { |             for (int i = 0; i < _PhoneConnectRuleModelList.size(); i++) { | ||||||
|   | |||||||
| @@ -73,7 +73,7 @@ public class ContactsFragment extends Fragment { | |||||||
|         super.onViewCreated(view, savedInstanceState); |         super.onViewCreated(view, savedInstanceState); | ||||||
|         recyclerView = view.findViewById(R.id.contacts_recycler_view); |         recyclerView = view.findViewById(R.id.contacts_recycler_view); | ||||||
|         recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); |         recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); | ||||||
|         contactAdapter = new ContactAdapter(contactList); |         contactAdapter = new ContactAdapter(getContext(), contactList); | ||||||
|         recyclerView.setAdapter(contactAdapter); |         recyclerView.setAdapter(contactAdapter); | ||||||
|  |  | ||||||
|         searchEditText = view.findViewById(R.id.search_edit_text); |         searchEditText = view.findViewById(R.id.search_edit_text); | ||||||
|   | |||||||
| @@ -47,8 +47,8 @@ public class LeftScrollView extends HorizontalScrollView { | |||||||
|         init(); |         init(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void addContentLayout(TextView textView) { |     public void addContentLayout(View viewContent) { | ||||||
|         contentLayout.addView(textView, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); |         contentLayout.addView(viewContent, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void setContentWidth(int contentWidth) { |     public void setContentWidth(int contentWidth) { | ||||||
|   | |||||||
| @@ -269,6 +269,19 @@ | |||||||
|  |  | ||||||
| 			</LinearLayout> | 			</LinearLayout> | ||||||
|  |  | ||||||
|  | 			<LinearLayout | ||||||
|  | 				android:orientation="horizontal" | ||||||
|  | 				android:layout_width="match_parent" | ||||||
|  | 				android:layout_height="wrap_content" | ||||||
|  | 				android:gravity="center_horizontal"> | ||||||
|  |  | ||||||
|  | 				<TextView | ||||||
|  | 					android:layout_width="wrap_content" | ||||||
|  | 					android:layout_height="wrap_content" | ||||||
|  | 					android:text="<<==向左拉动列表项可编辑内容"/> | ||||||
|  |  | ||||||
|  | 			</LinearLayout> | ||||||
|  |  | ||||||
| 			<androidx.recyclerview.widget.RecyclerView | 			<androidx.recyclerview.widget.RecyclerView | ||||||
| 				android:id="@+id/recycler_view" | 				android:id="@+id/recycler_view" | ||||||
| 				android:layout_width="match_parent" | 				android:layout_width="match_parent" | ||||||
| @@ -287,6 +300,12 @@ | |||||||
| 				android:layout_height="wrap_content" | 				android:layout_height="wrap_content" | ||||||
| 				android:gravity="right"> | 				android:gravity="right"> | ||||||
|  |  | ||||||
|  | 				<Button | ||||||
|  | 					android:layout_width="wrap_content" | ||||||
|  | 					android:layout_height="wrap_content" | ||||||
|  | 					android:text="LogView" | ||||||
|  | 					android:onClick="onLogView"/> | ||||||
|  |  | ||||||
| 				<Button | 				<Button | ||||||
| 					android:layout_width="wrap_content" | 					android:layout_width="wrap_content" | ||||||
| 					android:layout_height="wrap_content" | 					android:layout_height="wrap_content" | ||||||
|   | |||||||
| @@ -15,8 +15,10 @@ | |||||||
| 		<Button | 		<Button | ||||||
| 			android:layout_width="wrap_content" | 			android:layout_width="wrap_content" | ||||||
| 			android:layout_height="wrap_content" | 			android:layout_height="wrap_content" | ||||||
| 			android:text="Test Main" | 			android:text="Add Demo Rules(While size is 0) and Test" | ||||||
| 			android:onClick="onTestMain"/> | 			android:onClick="onTestMain" | ||||||
|  | 			android:textSize="10sp" | ||||||
|  | 			android:textAllCaps="false"/> | ||||||
|  |  | ||||||
| 	</LinearLayout> | 	</LinearLayout> | ||||||
|  |  | ||||||
| @@ -43,7 +45,8 @@ | |||||||
| 			android:layout_width="wrap_content" | 			android:layout_width="wrap_content" | ||||||
| 			android:layout_height="wrap_content" | 			android:layout_height="wrap_content" | ||||||
| 			android:text="Test Phone" | 			android:text="Test Phone" | ||||||
| 			android:onClick="onTestPhone"/> | 			android:onClick="onTestPhone" | ||||||
|  | 			android:textAllCaps="false"/> | ||||||
|  |  | ||||||
| 	</LinearLayout> | 	</LinearLayout> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -9,7 +9,8 @@ | |||||||
| 	<LinearLayout | 	<LinearLayout | ||||||
| 		android:orientation="horizontal" | 		android:orientation="horizontal" | ||||||
| 		android:layout_width="match_parent" | 		android:layout_width="match_parent" | ||||||
| 		android:layout_height="wrap_content"> | 		android:layout_height="wrap_content" | ||||||
|  | 		android:id="@+id/itemcontactLinearLayout1"> | ||||||
|  |  | ||||||
| 		<TextView | 		<TextView | ||||||
| 			android:id="@+id/contact_number" | 			android:id="@+id/contact_number" | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ | |||||||
| 			android:id="@+id/checkbox_allow" | 			android:id="@+id/checkbox_allow" | ||||||
| 			android:layout_width="wrap_content" | 			android:layout_width="wrap_content" | ||||||
| 			android:layout_height="wrap_content" | 			android:layout_height="wrap_content" | ||||||
| 			android:text="允许连接"/> | 			android:text="连接"/> | ||||||
|  |  | ||||||
|         <CheckBox |         <CheckBox | ||||||
|             android:id="@+id/checkbox_enable" |             android:id="@+id/checkbox_enable" | ||||||
|   | |||||||
| @@ -1,55 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <HorizontalScrollView |  | ||||||
|     xmlns:android="http://schemas.android.com/apk/res/android" |  | ||||||
|     xmlns:app="http://schemas.android.com/apk/res-auto" |  | ||||||
| 	android:layout_width="match_parent" |  | ||||||
|     android:layout_height="wrap_content" |  | ||||||
|     android:scrollbars="none" |  | ||||||
|     android:id="@+id/scrollView"> |  | ||||||
|  |  | ||||||
|     <LinearLayout |  | ||||||
|         android:layout_width="wrap_content" |  | ||||||
|         android:layout_height="wrap_content" |  | ||||||
|         android:orientation="horizontal"> |  | ||||||
|  |  | ||||||
|         <!-- 内容区域 --> |  | ||||||
|         <LinearLayout |  | ||||||
|             android:id="@+id/content_layout" |  | ||||||
|             android:layout_width="match_parent" |  | ||||||
|             android:layout_height="wrap_content" |  | ||||||
|             android:padding="16dp" |  | ||||||
|             android:background="@color/white"> |  | ||||||
|             <!-- 这里放置你的列表项内容 --> |  | ||||||
|  |  | ||||||
|             <TextView |  | ||||||
|                 android:id="@+id/text_view" |  | ||||||
|                 android:layout_width="0dp" |  | ||||||
|                 android:layout_height="wrap_content" |  | ||||||
|                 android:layout_weight="1" |  | ||||||
|                 android:textSize="16sp"/> |  | ||||||
|         </LinearLayout> |  | ||||||
|  |  | ||||||
|         <!-- 操作按钮 --> |  | ||||||
|         <LinearLayout |  | ||||||
|             android:id="@+id/action_layout" |  | ||||||
|             android:layout_width="wrap_content" |  | ||||||
|             android:layout_height="match_parent" |  | ||||||
|             android:orientation="horizontal" |  | ||||||
|             android:background="@color/lightgray"> |  | ||||||
|  |  | ||||||
|             <Button |  | ||||||
|                 android:id="@+id/edit_btn" |  | ||||||
|                 android:layout_width="80dp" |  | ||||||
|                 android:layout_height="match_parent" |  | ||||||
|                 android:text="编辑" |  | ||||||
|                 android:background="@color/blue" /> |  | ||||||
|  |  | ||||||
|             <Button |  | ||||||
|                 android:id="@+id/delete_btn" |  | ||||||
|                 android:layout_width="80dp" |  | ||||||
|                 android:layout_height="match_parent" |  | ||||||
|                 android:text="删除" |  | ||||||
|                 android:background="@color/red" /> |  | ||||||
|         </LinearLayout> |  | ||||||
|     </LinearLayout> |  | ||||||
| </HorizontalScrollView> |  | ||||||
| @@ -0,0 +1,35 @@ | |||||||
|  | <?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="horizontal" | ||||||
|  | 	android:layout_width="match_parent" | ||||||
|  | 	android:layout_height="wrap_content" | ||||||
|  | 	android:layout_gravity="center_vertical" | ||||||
|  | 	android:gravity="center_vertical"> | ||||||
|  |  | ||||||
|  | 	<TextView | ||||||
|  | 		android:layout_width="wrap_content" | ||||||
|  | 		android:layout_height="wrap_content" | ||||||
|  | 		android:text="Text" | ||||||
|  | 		android:layout_weight="1.0" | ||||||
|  | 		android:id="@+id/ruletext_tv"/> | ||||||
|  |  | ||||||
|  | 	<CheckBox | ||||||
|  | 		android:id="@+id/checkbox_allow" | ||||||
|  | 		android:layout_width="wrap_content" | ||||||
|  | 		android:layout_height="wrap_content" | ||||||
|  | 		android:text="连接" | ||||||
|  | 		android:clickable="false" | ||||||
|  | 		android:focusable="false"/> | ||||||
|  |  | ||||||
|  | 	<CheckBox | ||||||
|  | 		android:id="@+id/checkbox_enable" | ||||||
|  | 		android:layout_width="wrap_content" | ||||||
|  | 		android:layout_height="wrap_content" | ||||||
|  | 		android:text="启用" | ||||||
|  | 		android:clickable="false" | ||||||
|  | 		android:focusable="false"/> | ||||||
|  |  | ||||||
|  | </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/item_calllog_phonenumber_copy" | ||||||
|  |         android:title="Copy"/> | ||||||
|  |      | ||||||
|  | </menu> | ||||||
| @@ -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/item_contact_phonenumber_copy" | ||||||
|  |         android:title="Copy"/> | ||||||
|  |      | ||||||
|  | </menu> | ||||||
| @@ -2,6 +2,6 @@ | |||||||
| <resources> | <resources> | ||||||
|  |  | ||||||
|     <string name="app_name">Contacts</string> |     <string name="app_name">Contacts</string> | ||||||
|     <string name="default_bobulltoon_url">http://10.8.0.12:3000/Studio/BoBullToon/archive/main.zip</string> |     <string name="default_bobulltoon_url">https://gitea.winboll.cc/Studio/BoBullToon/archive/main.zip</string> | ||||||
|  |  | ||||||
| </resources> | </resources> | ||||||
|   | |||||||
| @@ -42,23 +42,24 @@ android { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|      |      | ||||||
|     compileOptions { |     /*compileOptions { | ||||||
|         sourceCompatibility JavaVersion.VERSION_11 |         sourceCompatibility JavaVersion.VERSION_11 | ||||||
|         targetCompatibility JavaVersion.VERSION_11 |         targetCompatibility JavaVersion.VERSION_11 | ||||||
|     } |     }*/ | ||||||
| } | } | ||||||
|  |  | ||||||
| dependencies { | dependencies { | ||||||
|  |     api fileTree(dir: 'libs', include: ['*.jar']) | ||||||
|  | 	api project(':libjc') | ||||||
|  | 	api 'cc.winboll.studio:libaes:15.9.1' | ||||||
|  | 	api 'cc.winboll.studio:libapputils:15.8.4' | ||||||
|  | 	api 'cc.winboll.studio:libappbase:15.8.4' | ||||||
|  | 	 | ||||||
|     // https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on |     // https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on | ||||||
|     //implementation 'org.bouncycastle:bcprov-jdk15on:1.70' |     //implementation 'org.bouncycastle:bcprov-jdk15on:1.70' | ||||||
|     implementation 'org.bouncycastle:bcprov-jdk15to18:1.69' |     implementation 'org.bouncycastle:bcprov-jdk15to18:1.69' | ||||||
|     implementation 'org.bouncycastle:bcpkix-jdk15to18:1.69' |     implementation 'org.bouncycastle:bcpkix-jdk15to18:1.69' | ||||||
|  |  | ||||||
| 	api project(':libjc') |  | ||||||
|     api 'androidx.appcompat:appcompat:1.0.0' |     api 'androidx.appcompat:appcompat:1.0.0' | ||||||
| 	api 'com.google.android.material:material:1.0.0' | 	api 'com.google.android.material:material:1.0.0' | ||||||
|      |  | ||||||
|     api 'cc.winboll.studio:libapputils:9.1.0' |  | ||||||
|     api 'cc.winboll.studio:libappbase:1.0.3' |  | ||||||
|     api fileTree(dir: 'libs', include: ['*.jar']) |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| #Created by .winboll/winboll_app_build.gradle | #Created by .winboll/winboll_app_build.gradle | ||||||
| #Fri Jan 10 22:03:57 GMT 2025 | #Tue Jun 24 11:17:30 GMT 2025 | ||||||
| stageCount=0 | stageCount=0 | ||||||
| libraryProject=libjc | libraryProject=libjc | ||||||
| baseVersion=1.0 | baseVersion=1.0 | ||||||
| publishVersion=1.0.0 | publishVersion=1.0.0 | ||||||
| buildCount=133 | buildCount=135 | ||||||
| baseBetaVersion=1.0.1 | baseBetaVersion=1.0.1 | ||||||
|   | |||||||
| @@ -15,10 +15,10 @@ import android.widget.LinearLayout; | |||||||
| import android.widget.ScrollView; | import android.widget.ScrollView; | ||||||
| import android.widget.TextView; | import android.widget.TextView; | ||||||
| import cc.winboll.studio.jc.R; | import cc.winboll.studio.jc.R; | ||||||
| import cc.winboll.studio.libapputils.log.LogUtils; |  | ||||||
| import cc.winboll.studio.libjc.JAR_RUNNING_MODE; |  | ||||||
| import cc.winboll.studio.libjc.JCMainThread; | import cc.winboll.studio.libjc.JCMainThread; | ||||||
| import cc.winboll.studio.libjc.net.JCSocketClient; | import cc.winboll.studio.libjc.net.JCSocketClient; | ||||||
|  | import cc.winboll.studio.libjc.util.LogUtils; | ||||||
|  | import cc.winboll.studio.libjc.Main; | ||||||
|  |  | ||||||
| final public class MainActivity extends Activity implements JCMainThread.OnMessageListener { | final public class MainActivity extends Activity implements JCMainThread.OnMessageListener { | ||||||
|  |  | ||||||
| @@ -77,7 +77,7 @@ final public class MainActivity extends Activity implements JCMainThread.OnMessa | |||||||
|         // 启动主线程 |         // 启动主线程 | ||||||
|         _JCMainThread = JCMainThread.getInstance(getPackageName()); |         _JCMainThread = JCMainThread.getInstance(getPackageName()); | ||||||
|         _JCMainThread.setOnLogListener(this); |         _JCMainThread.setOnLogListener(this); | ||||||
|         _JCMainThread.setRunningMode(JAR_RUNNING_MODE.JC); |         //_JCMainThread.setRunningMode(Main.JAR_RUNNING_MODE.JC); | ||||||
|         _JCMainThread.start(); |         _JCMainThread.start(); | ||||||
|  |  | ||||||
|         // 设置 WinBoll 应用 UI 类型 |         // 设置 WinBoll 应用 UI 类型 | ||||||
|   | |||||||
| @@ -21,8 +21,8 @@ android { | |||||||
|  |  | ||||||
| dependencies { | dependencies { | ||||||
|     api fileTree(dir: 'libs', include: ['*.jar']) |     api fileTree(dir: 'libs', include: ['*.jar']) | ||||||
|     api 'cc.winboll.studio:libapputils:15.8.2' |     api 'cc.winboll.studio:libapputils:15.8.4' | ||||||
|     api 'cc.winboll.studio:libappbase:15.8.2' |     api 'cc.winboll.studio:libappbase:15.8.4' | ||||||
|      |      | ||||||
|     // 吐司类库 |     // 吐司类库 | ||||||
|     api 'com.github.getActivity:ToastUtils:10.5' |     api 'com.github.getActivity:ToastUtils:10.5' | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| #Created by .winboll/winboll_app_build.gradle | #Created by .winboll/winboll_app_build.gradle | ||||||
| #Mon Jun 09 01:44:28 HKT 2025 | #Sat Jun 28 12:59:30 HKT 2025 | ||||||
| stageCount=1 | stageCount=3 | ||||||
| libraryProject=libaes | libraryProject=libaes | ||||||
| baseVersion=15.9 | baseVersion=15.9 | ||||||
| publishVersion=15.9.0 | publishVersion=15.9.2 | ||||||
| buildCount=0 | buildCount=0 | ||||||
| baseBetaVersion=15.9.1 | baseBetaVersion=15.9.3 | ||||||
|   | |||||||
| @@ -107,7 +107,7 @@ public class AboutView extends LinearLayout { | |||||||
|         mszAppDescription = mAPPInfo.getAppDescription(); |         mszAppDescription = mAPPInfo.getAppDescription(); | ||||||
|         mnAppIcon = mAPPInfo.getAppIcon(); |         mnAppIcon = mAPPInfo.getAppIcon(); | ||||||
|  |  | ||||||
|         mszWinBoLLServerHost = GlobalApplication.isDebuging() ?  "https://dev.winboll.cc": "https://www.winboll.cc"; |         mszWinBoLLServerHost = GlobalApplication.isDebuging() ?  "https://yun-preivew.winboll.cc": "https://yun.winboll.cc"; | ||||||
|  |  | ||||||
|         try { |         try { | ||||||
|             mszAppVersionName = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionName; |             mszAppVersionName = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionName; | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| #Created by .winboll/winboll_app_build.gradle | #Created by .winboll/winboll_app_build.gradle | ||||||
| #Mon Jun 09 09:38:19 HKT 2025 | #Mon Aug 18 03:56:26 HKT 2025 | ||||||
| stageCount=9 | stageCount=6 | ||||||
| libraryProject=libappbase | libraryProject=libappbase | ||||||
| baseVersion=15.8 | baseVersion=15.9 | ||||||
| publishVersion=15.8.8 | publishVersion=15.9.5 | ||||||
| buildCount=0 | buildCount=0 | ||||||
| baseBetaVersion=15.8.9 | baseBetaVersion=15.9.6 | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| #Created by .winboll/winboll_app_build.gradle | #Created by .winboll/winboll_app_build.gradle | ||||||
| #Fri Jan 10 22:03:57 GMT 2025 | #Tue Jun 24 11:17:30 GMT 2025 | ||||||
| stageCount=0 | stageCount=0 | ||||||
| libraryProject=libjc | libraryProject=libjc | ||||||
| baseVersion=1.0 | baseVersion=1.0 | ||||||
| publishVersion=1.0.0 | publishVersion=1.0.0 | ||||||
| buildCount=133 | buildCount=135 | ||||||
| baseBetaVersion=1.0.1 | baseBetaVersion=1.0.1 | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ public class Main { | |||||||
|     public final static int JAR_RUNNING_MODE_JCNDK_DEBUG = 4; |     public final static int JAR_RUNNING_MODE_JCNDK_DEBUG = 4; | ||||||
|     public final static int JAR_RUNNING_MODE_JC = 5; |     public final static int JAR_RUNNING_MODE_JC = 5; | ||||||
|     public final static int JAR_RUNNING_MODE_JC_DEBUG = 6; |     public final static int JAR_RUNNING_MODE_JC_DEBUG = 6; | ||||||
|     public enum JAR_RUNNING_MODE { |     public static enum JAR_RUNNING_MODE { | ||||||
|         UNKNOWN(JAR_RUNNING_MODE_UNKNOWN), |         UNKNOWN(JAR_RUNNING_MODE_UNKNOWN), | ||||||
|         CONSOLE(JAR_RUNNING_MODE_CONSOLE), |         CONSOLE(JAR_RUNNING_MODE_CONSOLE), | ||||||
|         CONSOLE_DEBUG(JAR_RUNNING_MODE_CONSOLE_DEBUG), |         CONSOLE_DEBUG(JAR_RUNNING_MODE_CONSOLE_DEBUG), | ||||||
|   | |||||||
| @@ -29,7 +29,7 @@ android { | |||||||
|         // versionName 更新后需要手动设置  |         // versionName 更新后需要手动设置  | ||||||
|         // .winboll/winbollBuildProps.properties 文件的 stageCount=0 |         // .winboll/winbollBuildProps.properties 文件的 stageCount=0 | ||||||
|         // Gradle编译环境下合起来的 versionName 就是 "${versionName}.0" |         // Gradle编译环境下合起来的 versionName 就是 "${versionName}.0" | ||||||
|         versionName "15.2"  |         versionName "15.3"  | ||||||
|         if(true) { |         if(true) { | ||||||
|             versionName = genVersionName("${versionName}") |             versionName = genVersionName("${versionName}") | ||||||
|         } |         } | ||||||
| @@ -45,9 +45,9 @@ android { | |||||||
|  |  | ||||||
| dependencies { | dependencies { | ||||||
|     api fileTree(dir: 'libs', include: ['*.jar']) |     api fileTree(dir: 'libs', include: ['*.jar']) | ||||||
|     api 'cc.winboll.studio:libaes:15.8.0' |     api 'cc.winboll.studio:libaes:15.9.2' | ||||||
|     api 'cc.winboll.studio:libapputils:15.8.1' |     api 'cc.winboll.studio:libapputils:15.8.4' | ||||||
|     api 'cc.winboll.studio:libappbase:15.8.1' |     api 'cc.winboll.studio:libappbase:15.8.4' | ||||||
|      |      | ||||||
| 	api 'io.github.medyo:android-about-page:2.0.0' | 	api 'io.github.medyo:android-about-page:2.0.0' | ||||||
|     api 'com.github.getActivity:ToastUtils:10.5' |     api 'com.github.getActivity:ToastUtils:10.5' | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| #Created by .winboll/winboll_app_build.gradle | #Created by .winboll/winboll_app_build.gradle | ||||||
| #Tue May 20 20:39:06 HKT 2025 | #Thu Jul 03 13:50:15 HKT 2025 | ||||||
| stageCount=6 | stageCount=2 | ||||||
| libraryProject= | libraryProject= | ||||||
| baseVersion=15.2 | baseVersion=15.3 | ||||||
| publishVersion=15.2.5 | publishVersion=15.3.1 | ||||||
| buildCount=0 | buildCount=0 | ||||||
| baseBetaVersion=15.2.6 | baseBetaVersion=15.3.2 | ||||||
|   | |||||||
| @@ -17,7 +17,7 @@ import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity; | |||||||
| import cc.winboll.studio.mymessagemanager.App; | import cc.winboll.studio.mymessagemanager.App; | ||||||
| import cc.winboll.studio.mymessagemanager.R; | import cc.winboll.studio.mymessagemanager.R; | ||||||
|  |  | ||||||
| public class AboutActivity extends WinBollActivity implements IWinBoLLActivity { | public class AboutActivity extends WinBoLLActivity implements IWinBoLLActivity { | ||||||
|  |  | ||||||
|     public static final String TAG = "AboutActivity"; |     public static final String TAG = "AboutActivity"; | ||||||
|  |  | ||||||
| @@ -79,11 +79,11 @@ public class AboutActivity extends WinBollActivity implements IWinBoLLActivity { | |||||||
|         appInfo.setAppName(getString(R.string.app_name)); |         appInfo.setAppName(getString(R.string.app_name)); | ||||||
|         appInfo.setAppIcon(cc.winboll.studio.libaes.R.drawable.ic_winboll); |         appInfo.setAppIcon(cc.winboll.studio.libaes.R.drawable.ic_winboll); | ||||||
|         appInfo.setAppDescription(getString(R.string.app_description)); |         appInfo.setAppDescription(getString(R.string.app_description)); | ||||||
|         appInfo.setAppGitName("APP"); |         appInfo.setAppGitName("APPBase"); | ||||||
|         appInfo.setAppGitOwner("Studio"); |         appInfo.setAppGitOwner("Studio"); | ||||||
|         appInfo.setAppGitAPPBranch(szBranchName); |         appInfo.setAppGitAPPBranch(szBranchName); | ||||||
|         appInfo.setAppGitAPPSubProjectFolder(szBranchName); |         appInfo.setAppGitAPPSubProjectFolder(szBranchName); | ||||||
|         appInfo.setAppHomePage("https://www.winboll.cc/studio/details.php?app=MyMessageManager"); |         appInfo.setAppHomePage("https://discuz.winboll.cc/forum.php?mod=viewthread&tid=5&extra=page%3D1"); | ||||||
|         appInfo.setAppAPKName("MyMessageManager"); |         appInfo.setAppAPKName("MyMessageManager"); | ||||||
|         appInfo.setAppAPKFolderName("MyMessageManager"); |         appInfo.setAppAPKFolderName("MyMessageManager"); | ||||||
|         return new AboutView(mContext, appInfo); |         return new AboutView(mContext, appInfo); | ||||||
|   | |||||||
| @@ -103,6 +103,9 @@ abstract public class BaseActivity extends AppCompatActivity { | |||||||
|         } else if (R.id.item_defaulttheme == item.getItemId()) { |         } else if (R.id.item_defaulttheme == item.getItemId()) { | ||||||
|             AESThemeUtil.saveThemeStyleID(this, R.style.MyAppTheme); |             AESThemeUtil.saveThemeStyleID(this, R.style.MyAppTheme); | ||||||
|             recreate(); |             recreate(); | ||||||
|  |         } else if (R.id.item_defaulttheme == item.getItemId()) { | ||||||
|  |             AESThemeUtil.saveThemeStyleID(this, R.style.MyAppTheme); | ||||||
|  |             recreate(); | ||||||
|         } |         } | ||||||
|         //ToastUtils.show("nThemeStyleID " + Integer.toString(nThemeStyleID)); |         //ToastUtils.show("nThemeStyleID " + Integer.toString(nThemeStyleID)); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -128,7 +128,7 @@ public class MainActivity extends BaseActivity { | |||||||
|         mToolbar = findViewById(R.id.activitymainASupportToolbar1); |         mToolbar = findViewById(R.id.activitymainASupportToolbar1); | ||||||
|         mToolbar.setSubtitle(getString(R.string.activity_name_main)); |         mToolbar.setSubtitle(getString(R.string.activity_name_main)); | ||||||
|         setSupportActionBar(mToolbar); |         setSupportActionBar(mToolbar); | ||||||
|          |  | ||||||
|         boolean isEnableService = mAppConfigUtil.mAppConfigBean.isEnableService(); |         boolean isEnableService = mAppConfigUtil.mAppConfigBean.isEnableService(); | ||||||
|         msvEnableService = findViewById(R.id.activitymainSwitchView1); |         msvEnableService = findViewById(R.id.activitymainSwitchView1); | ||||||
|         msvEnableService.setChecked(isEnableService); |         msvEnableService.setChecked(isEnableService); | ||||||
| @@ -269,17 +269,9 @@ public class MainActivity extends BaseActivity { | |||||||
|     public boolean onCreateOptionsMenu(Menu menu) { |     public boolean onCreateOptionsMenu(Menu menu) { | ||||||
|         //return super.onCreateOptionsMenu(menu); |         //return super.onCreateOptionsMenu(menu); | ||||||
|         getMenuInflater().inflate(R.menu.toolbar_main, menu); |         getMenuInflater().inflate(R.menu.toolbar_main, menu); | ||||||
|  |         super.onCreateOptionsMenu(menu); | ||||||
|         /*ThemeUtil.BaseTheme baseTheme = ThemeUtil.getTheme(mAppConfigUtil.mAppConfigBean.getAppThemeID()); | 		getMenuInflater().inflate(R.menu.toolbar_main2, menu); | ||||||
|         if (baseTheme == ThemeUtil.BaseTheme.DEFAULT) { | 		return true; | ||||||
|             menu.findItem(R.id.app_defaulttheme).setChecked(true); |  | ||||||
|         } else if (baseTheme == ThemeUtil.BaseTheme.SKY) { |  | ||||||
|             menu.findItem(R.id.app_skytheme).setChecked(true); |  | ||||||
|         } else if (baseTheme == ThemeUtil.BaseTheme.GOLDEN) { |  | ||||||
|             menu.findItem(R.id.app_goldentheme).setChecked(true); |  | ||||||
|         }*/ |  | ||||||
|  |  | ||||||
|         return super.onCreateOptionsMenu(menu); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static void reloadSMS() { |     public static void reloadSMS() { | ||||||
| @@ -306,7 +298,7 @@ public class MainActivity extends BaseActivity { | |||||||
|             i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |             i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); | ||||||
|             startActivity(i); |             startActivity(i); | ||||||
| 		} else if (nItemId ==  R.id.app_log) { | 		} else if (nItemId ==  R.id.app_log) { | ||||||
|             //App.getWinBoLLActivityManager().startLogActivity(this); |             App.getWinBoLLActivityManager().startLogActivity(this); | ||||||
|         } else if (nItemId ==  R.id.app_unittest) { |         } else if (nItemId ==  R.id.app_unittest) { | ||||||
|             Intent i = new Intent(MainActivity.this, UnitTestActivity.class); |             Intent i = new Intent(MainActivity.this, UnitTestActivity.class); | ||||||
|             i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |             i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); | ||||||
| @@ -324,7 +316,7 @@ public class MainActivity extends BaseActivity { | |||||||
|             i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |             i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); | ||||||
|             startActivity(i); |             startActivity(i); | ||||||
|         } |         } | ||||||
|          |  | ||||||
|         return super.onOptionsItemSelected(item); |         return super.onOptionsItemSelected(item); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -13,9 +13,9 @@ import cc.winboll.studio.libaes.beans.AESThemeBean; | |||||||
| import cc.winboll.studio.libaes.utils.AESThemeUtil; | import cc.winboll.studio.libaes.utils.AESThemeUtil; | ||||||
| import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity; | import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity; | ||||||
| 
 | 
 | ||||||
| public class WinBollActivity extends AppCompatActivity implements IWinBoLLActivity { | public class WinBoLLActivity extends AppCompatActivity implements IWinBoLLActivity { | ||||||
| 
 | 
 | ||||||
|     public static final String TAG = "WinBollActivity"; |     public static final String TAG = "WinBoLLActivity"; | ||||||
| 
 | 
 | ||||||
|     protected volatile AESThemeBean.ThemeType mThemeType; |     protected volatile AESThemeBean.ThemeType mThemeType; | ||||||
| 
 | 
 | ||||||
| @@ -34,7 +34,7 @@ | |||||||
|  |  | ||||||
| 	</ScrollView> | 	</ScrollView> | ||||||
|  |  | ||||||
| 	<cc.winboll.studio.shared.log.LogView | 	<cc.winboll.studio.libappbase.LogView | ||||||
| 		android:layout_width="match_parent" | 		android:layout_width="match_parent" | ||||||
| 		android:layout_height="0dp" | 		android:layout_height="0dp" | ||||||
| 		android:layout_weight="1.0" | 		android:layout_weight="1.0" | ||||||
|   | |||||||
| @@ -17,26 +17,4 @@ | |||||||
|     <item |     <item | ||||||
|         android:id="@+id/app_smsrule" |         android:id="@+id/app_smsrule" | ||||||
|         android:title="@string/text_smsrule"/> |         android:title="@string/text_smsrule"/> | ||||||
|     <item android:title="@string/app_developoptions"> |  | ||||||
|         <menu> |  | ||||||
|             <item |  | ||||||
|                 android:id="@+id/app_log" |  | ||||||
|                 android:title="@string/app_log"/> |  | ||||||
|             <item |  | ||||||
|                 android:id="@+id/app_unittest" |  | ||||||
|                 android:title="@string/app_unittest"/> |  | ||||||
|             <item |  | ||||||
|                 android:id="@+id/app_crashtest" |  | ||||||
|                 android:title="@string/app_crashtest"/> |  | ||||||
|         </menu> |  | ||||||
|     </item> |  | ||||||
|     <item |  | ||||||
|         android:id="@+id/app_appsettings" |  | ||||||
|         android:title="@string/text_appsettings"/> |  | ||||||
|     <item |  | ||||||
|         android:id="@+id/app_about" |  | ||||||
|         android:title="@string/app_about"/> |  | ||||||
|     <item |  | ||||||
|         android:id="@+id/app_smsrecycle" |  | ||||||
|         android:title="@string/app_smsrecycle"/> |  | ||||||
| </menu> | </menu> | ||||||
|   | |||||||
							
								
								
									
										26
									
								
								mymessagemanager/src/main/res/menu/toolbar_main2.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								mymessagemanager/src/main/res/menu/toolbar_main2.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | <?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:title="@string/app_developoptions"> | ||||||
|  |         <menu> | ||||||
|  |             <item | ||||||
|  |                 android:id="@+id/app_log" | ||||||
|  |                 android:title="@string/app_log"/> | ||||||
|  |             <item | ||||||
|  |                 android:id="@+id/app_unittest" | ||||||
|  |                 android:title="@string/app_unittest"/> | ||||||
|  |             <item | ||||||
|  |                 android:id="@+id/app_crashtest" | ||||||
|  |                 android:title="@string/app_crashtest"/> | ||||||
|  |         </menu> | ||||||
|  |     </item> | ||||||
|  |     <item | ||||||
|  |         android:id="@+id/app_appsettings" | ||||||
|  |         android:title="@string/text_appsettings"/> | ||||||
|  |     <item | ||||||
|  |         android:id="@+id/app_about" | ||||||
|  |         android:title="@string/app_about"/> | ||||||
|  |     <item | ||||||
|  |         android:id="@+id/app_smsrecycle" | ||||||
|  |         android:title="@string/app_smsrecycle"/> | ||||||
|  | </menu> | ||||||
| @@ -22,6 +22,7 @@ | |||||||
|  |  | ||||||
| // JC 项目编译设置 | // JC 项目编译设置 | ||||||
| //include ':jc' | //include ':jc' | ||||||
|  | //include ':libjc' | ||||||
| //rootProject.name = "jc" | //rootProject.name = "jc" | ||||||
|  |  | ||||||
| // AES 项目编译设置 | // AES 项目编译设置 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 ZhanGSKen
					ZhanGSKen