Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
Hello UTS
提交
531659aa
H
Hello UTS
项目概览
DCloud
/
Hello UTS
通知
1598
Star
27
Fork
9
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
2
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
H
Hello UTS
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
2
Issue
2
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
531659aa
编写于
6月 21, 2024
作者:
dcloud_wdl
浏览文件
操作
浏览文件
下载
差异文件
merge origin/alpha
上级
2ed01041
ea020039
变更
25
展开全部
隐藏空白更改
内联
并排
Showing
25 changed file
with
23740 addition
and
635 deletion
+23740
-635
changelog.md
changelog.md
+13
-4
jest.config.js
jest.config.js
+1
-1
package.json
package.json
+4
-4
pages.json
pages.json
+8
-3
pages/SyntaxCase/utsAndroid.uvue
pages/SyntaxCase/utsAndroid.uvue
+303
-187
pages/SyntaxCase/utsAndroid.vue
pages/SyntaxCase/utsAndroid.vue
+17
-1
pages/SystemAPI/SystemAPI.uvue
pages/SystemAPI/SystemAPI.uvue
+13
-1
uni_modules/uts-nativepage/utssdk/app-android/AndroidManifest.xml
...les/uts-nativepage/utssdk/app-android/AndroidManifest.xml
+7
-2
uni_modules/uts-nativepage/utssdk/app-android/config.json
uni_modules/uts-nativepage/utssdk/app-android/config.json
+3
-1
uni_modules/uts-nativepage/utssdk/app-android/index.uts
uni_modules/uts-nativepage/utssdk/app-android/index.uts
+86
-12
uni_modules/uts-nativepage/utssdk/app-android/libs/SayHello.jar
...dules/uts-nativepage/utssdk/app-android/libs/SayHello.jar
+0
-0
uni_modules/uts-nativepage/utssdk/app-android/res/drawable-nodpi/icon_short.png
...page/utssdk/app-android/res/drawable-nodpi/icon_short.png
+0
-0
uni_modules/uts-platform-api/utssdk/app-android/index.uts
uni_modules/uts-platform-api/utssdk/app-android/index.uts
+21
-0
uni_modules/uts-platform-api/utssdk/app-ios/index.uts
uni_modules/uts-platform-api/utssdk/app-ios/index.uts
+3
-3
uni_modules/uts-syntaxcase/utssdk/index.uts
uni_modules/uts-syntaxcase/utssdk/index.uts
+254
-109
uni_modules/uts-tests/utssdk/Date.uts
uni_modules/uts-tests/utssdk/Date.uts
+16
-0
uni_modules/uts-tests/utssdk/Error.uts
uni_modules/uts-tests/utssdk/Error.uts
+5
-0
uni_modules/uts-tests/utssdk/Global.uts
uni_modules/uts-tests/utssdk/Global.uts
+16
-0
uni_modules/uts-tests/utssdk/JSON.uts
uni_modules/uts-tests/utssdk/JSON.uts
+331
-297
uni_modules/uts-tests/utssdk/JSON_large.uts
uni_modules/uts-tests/utssdk/JSON_large.uts
+22547
-0
uni_modules/uts-tests/utssdk/Math.uts
uni_modules/uts-tests/utssdk/Math.uts
+11
-5
uni_modules/uts-tests/utssdk/RegExp.uts
uni_modules/uts-tests/utssdk/RegExp.uts
+3
-0
uni_modules/uts-tests/utssdk/UTSJSONObject.uts
uni_modules/uts-tests/utssdk/UTSJSONObject.uts
+44
-0
uni_modules/uts-tests/utssdk/console.uts
uni_modules/uts-tests/utssdk/console.uts
+21
-0
uni_modules/uts-tests/utssdk/index.uts
uni_modules/uts-tests/utssdk/index.uts
+13
-5
未找到文件。
changelog.md
浏览文件 @
531659aa
## 1.
1.
6
## 1.
0.1
6
*
update 4.
15.2024050802
*
update 4.
21.2024061818-alpha
## 1.1.5
## 1.0.15
*
update 4.14.2024043008
*
update 4.19.2024060704-alpha
## 1.0.14
*
update 4.18.2024060311-alpha
## 1.0.13
*
update 4.17.2024051110-alpha
## 1.0.12
*
update 4.16.2024051009-alpha
## 1.0.11
## 1.0.11
*
update 4.14.2024042905-alpha
*
update 4.14.2024042905-alpha
...
...
jest.config.js
浏览文件 @
531659aa
...
@@ -39,7 +39,7 @@ function parseDescribes() {
...
@@ -39,7 +39,7 @@ function parseDescribes() {
};
};
module
.
exports
=
{
module
.
exports
=
{
testTimeout
:
1
0000
,
testTimeout
:
2
0000
,
reporters
:
[
reporters
:
[
'
default
'
'
default
'
],
],
...
...
package.json
浏览文件 @
531659aa
{
{
"id"
:
"hello-uts"
,
"id"
:
"hello-uts
-alpha
"
,
"name"
:
"hello-uts"
,
"name"
:
"hello-uts
-alpha
"
,
"displayName"
:
"hello-uts"
,
"displayName"
:
"hello-uts
-alpha
"
,
"version"
:
"1.
1.
6"
,
"version"
:
"1.
0.1
6"
,
"description"
:
"UTS插件示例项目"
,
"description"
:
"UTS插件示例项目"
,
"repository"
:
"https://gitcode.net/dcloud/hello-uts"
,
"repository"
:
"https://gitcode.net/dcloud/hello-uts"
,
"keywords"
:
[
"keywords"
:
[
...
...
pages.json
浏览文件 @
531659aa
...
@@ -156,7 +156,10 @@
...
@@ -156,7 +156,10 @@
"enablePullDownRefresh"
:
false
"enablePullDownRefresh"
:
false
}
}
},
}
//
#endif
//
#ifdef
APP-Android
,
{
{
"path"
:
"pages/SyntaxCase/utsAndroid"
,
"path"
:
"pages/SyntaxCase/utsAndroid"
,
"style"
:
{
"style"
:
{
...
@@ -164,14 +167,16 @@
...
@@ -164,14 +167,16 @@
"enablePullDownRefresh"
:
false
"enablePullDownRefresh"
:
false
}
}
},
}
//
#endif
//
#ifdef
APP-iOS
,
{
{
"path"
:
"pages/SyntaxCase/utsiOS"
,
"path"
:
"pages/SyntaxCase/utsiOS"
,
"style"
:
{
"style"
:
{
"navigationBarTitleText"
:
""
,
"navigationBarTitleText"
:
""
,
"enablePullDownRefresh"
:
false
"enablePullDownRefresh"
:
false
}
}
}
}
//
#endif
//
#endif
...
...
pages/SyntaxCase/utsAndroid.uvue
浏览文件 @
531659aa
<template>
<template>
<!-- #ifdef APP-ANDROID -->
<!-- #ifdef APP-ANDROID -->
<!-- #ifdef APP -->
<scroll-view style="flex: 1">
<scroll-view style="flex: 1">
<!-- #endif -->
<view>
<view>
<view class="uni-padding-wrap uni-common-mt">
<view class="uni-padding-wrap uni-common-mt">
<view class="uni-hello-text"> 逐一点击执行,观察测试反馈 </view>
<view class="uni-hello-text"> 逐一点击执行,观察测试反馈 </view>
...
@@ -18,6 +16,7 @@
...
@@ -18,6 +16,7 @@
<button @click="dispatchAsyncClick">任务分发测试</button>
<button @click="dispatchAsyncClick">任务分发测试</button>
<button @click="pathTestClick">路径转换测试</button>
<button @click="pathTestClick">路径转换测试</button>
<button @click="privacyStateClick">隐私协议状态测试</button>
<button @click="privacyStateClick">隐私协议状态测试</button>
<button @click="privacyStateCallBackClick">隐私协议回调测试</button>
<view class="uni-padding-wrap uni-common-mt">
<view class="uni-padding-wrap uni-common-mt">
<view class="uni-hello-text">
<view class="uni-hello-text">
1. 当前页面已通过initAppLifecycle函数注册了生命周期监听。
1. 当前页面已通过initAppLifecycle函数注册了生命周期监听。
...
@@ -42,229 +41,346 @@
...
@@ -42,229 +41,346 @@
</view>
</view>
<button @tap="getDeviceInfoClick">获取设备基础信息</button>
<button @tap="getDeviceInfoClick">获取设备基础信息</button>
<button @tap="getFileProviderUriClick">使用外部应用访问私有文件</button>
<button @tap="getFileProviderUriClick">使用外部应用访问私有文件</button>
<button @tap="activityCallback">注册activity 回调方法</button>
<view class="uni-padding-wrap uni-common-mt">
<view class="uni-hello-text">
点击注册activity 回调方法后,可以手动切换其他APP再返回,可在控制台和界面观察事件日志
</view>
</view>
<view class="uni-padding-wrap uni-common-mt">
<view class="text-box" scroll-y="true">
<text>{{ cbText }}</text>
</view>
</view>
<button @tap="unRegActivityCallback">取消注册activity 回调方法</button>
</view>
</view>
<!-- #ifdef APP -->
</scroll-view>
</scroll-view>
<!-- #endif -->
<!-- #endif -->
<!-- #endif -->
</template>
</template>
<script>
<script>
<!-- #ifdef APP-ANDROID -->
import {
import {
getAppContextTest,
getAppContextTest,
getUniActivityTest,
getUniActivityTest,
getJavaClassTest,
getJavaClassTest,
getAppTempPathTest,
getAppTempPathTest,
typeofClickTest,
typeofClickTest,
gotoSystemPermissionActivityTest,
gotoSystemPermissionActivityTest,
arrayPermissionFlowTest,
arrayPermissionFlowTest,
singlePermissionFlowTest,
singlePermissionFlowTest,
dispatchAsyncTest,
dispatchAsyncTest,
convert2AbsFullPathTest,
convert2AbsFullPathTest,
unRegLifecycle,
unRegLifecycle,
initAppLifecycle,
initAppLifecycle,
gotoCameraTake,
gotoCameraTake,
getDeviceInfoTest,
getDeviceInfoTest,
privacyStateTest
privacyStateTest,
} from '@/uni_modules/uts-platform-api'
} from '@/uni_modules/uts-platform-api'
// #ifdef APP-ANDROID
import File from 'java.io.File';
import {
import Intent from 'android.content.Intent';
UTSAcvitiyLifeCycleCallback,
UTSAcvitiyKeyEventCallback,
UTSActivityWindowCallback,
UTSActivityCallback,
UTSActivityComponentCallback,
onCallbackChange
} from '@/uni_modules/uts-syntaxcase'
// #endif
/**
* 测试在页面生命周期之外,使用api
*/
export default {
data() {
return {
text: '',
selectImage: '',
}
},
onLoad: function () {
let that = this
initAppLifecycle(function (eventLog) {
// 展示捕捉到的声明周期日志
let nextLine = that.text + eventLog
that.text = nextLine
let nextLineFlag = that.text + '\n'
that.text = nextLineFlag
})
},
methods: {
privacyStateClick() {
privacyStateTest(function (ret, desc) {
if (ret) {
uni.showToast({
title: '测试通过',
})
} else {
uni.showToast({
icon: 'none',
title: '失败:' + desc,
})
}
})
},
getDeviceInfoClick() {
this.text = getDeviceInfoTest()
},
testGoOtherActivity() {
var that = this
let ret = gotoCameraTake(function (file) {
// 展示捕捉到的声明周期日志
console.log(file)
that.selectImage = 'file://' + file
})
if (!ret) {
import File from 'java.io.File';
uni.showToast({
import Intent from 'android.content.Intent';
icon: 'none',
title: '测试失败',
})
}
},
testUnRegLifecycle() {
// 取消注册生命周期
unRegLifecycle()
},
getJavaClassClick() {
if (getJavaClassTest()) {
uni.showToast({
title: '测试通过'
})
} else {
uni.showToast({
icon: 'error',
title: '测试失败'
})
}
},
getAppContextClick() {
if (getAppContextTest()) {
uni.showToast({
title: '测试通过',
})
} else {
uni.showToast({
icon: 'error',
title: '测试失败',
})
}
},
getUniActivityClick() {
/**
if (getUniActivityTest()) {
* 测试在页面生命周期之外,使用api
uni.showToast({
*/
title: '测试通过',
export default {
})
data() {
} else
{
return
{
uni.showToast({
text: '',
icon: 'error
',
cbText: '
',
title: '测试失败
',
selectImage: '
',
})
callback: [] as Any[]
}
}
},
},
pathTestClick() {
unmounted() {
if (convert2AbsFullPathTest()) {
// #ifdef APP-ANDROID
uni.showToast({
this.unRegActivityCallback()
title: '测试通过',
// #endif
})
} else {
uni.showToast({
icon: 'error',
title: '测试失败',
})
}
},
},
getFileProviderUriClick() {
onLoad: function () {
let file = new File(UTSAndroid.getResourcePath("static/logo.png"))
let that = this
const uri = UTSAndroid.getFileProviderUri(file)
initAppLifecycle(function (eventLog) {
console.log("uri",uri.toString())
// 展示捕捉到的声明周期日志
const intent = new Intent(Intent.ACTION_VIEW, uri)
let nextLine = that.text + eventLog
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 添加权限标志
that.text = nextLine
const context = UTSAndroid.getUniActivity()!;
let nextLineFlag = that.text + '\n'
context.startActivity(intent);
that.text = nextLineFlag
})
},
},
getAppTempPathClick() {
methods: {
if (getAppTempPathTest()) {
privacyStateClick() {
uni.showToast({
privacyStateTest(function (ret, desc) {
title: '测试通过',
if (ret) {
uni.showToast({
title: '测试通过',
})
} else {
uni.showToast({
icon: 'none',
title: '失败:' + desc,
})
}
})
})
} else {
},
uni.showToast({
privacyStateCallBackClick() {
icon: 'error',
title: '测试失败',
let isAgree : boolean = true
const cb = (ret : PrivacyOption) => {
console.log('privacyStateCallBackTest->' + ret.isAgree)
if (ret.isAgree == isAgree) {
uni.showToast({
title: '测试通过'
})
} else {
uni.showToast({
icon: 'none',
title: '失败'
})
}
}
// 先重置用户同意状态
UTSAndroid.onPrivacyAgreeChange(cb)
UTSAndroid.setPrivacyAgree(isAgree)
UTSAndroid.offPrivacyAgreeChange(cb)
setTimeout(function () {
console.log('privacyStateCallBackTest->false')
UTSAndroid.setPrivacyAgree(false)
}, 5000);
},
getDeviceInfoClick() {
this.text = getDeviceInfoTest()
},
testGoOtherActivity() {
var that = this
let ret = gotoCameraTake(function (file) {
// 展示捕捉到的声明周期日志
console.log(file)
that.selectImage = 'file://' + file
})
})
}
},
if (!ret) {
dispatchAsyncClick() {
uni.showToast({
dispatchAsyncTest(function (ret, desc) {
icon: 'none',
if (ret) {
title: '测试失败',
})
}
},
testUnRegLifecycle() {
// 取消注册生命周期
unRegLifecycle()
},
getJavaClassClick() {
if (getJavaClassTest()) {
uni.showToast({
title: '测试通过'
})
} else {
uni.showToast({
icon: 'error',
title: '测试失败'
})
}
},
getAppContextClick() {
if (getAppContextTest()) {
uni.showToast({
uni.showToast({
title: '测试通过',
title: '测试通过',
})
})
} else {
} else {
uni.showToast({
uni.showToast({
icon: '
none
',
icon: '
error
',
title: '
失败:' + desc
,
title: '
测试失败'
,
})
})
}
}
})
},
},
typeofClick() {
if (typeofClickTest()) {
uni.showToast({
title: '测试通过',
})
} else {
uni.showToast({
icon: 'error',
title: '测试失败',
})
}
},
gotoSystemPermissionActivityClick() {
getUniActivityClick() {
gotoSystemPermissionActivityTest()
if (getUniActivityTest()) {
},
arrayPermissionFlowClick() {
arrayPermissionFlowTest(function (ret, desc) {
if (ret) {
uni.showToast({
uni.showToast({
icon: 'none',
title: '测试通过',
title: '测试通过',
})
})
} else {
} else {
uni.showToast({
uni.showToast({
icon: '
none
',
icon: '
error
',
title: '
失败:' + desc
,
title: '
测试失败'
,
})
})
}
}
})
},
},
pathTestClick() {
singlePermissionFlowClick() {
if (convert2AbsFullPathTest()) {
singlePermissionFlowTest(function (ret, desc) {
if (ret) {
uni.showToast({
uni.showToast({
icon: 'none',
title: '测试通过',
title: '测试通过',
})
})
} else {
} else {
uni.showToast({
uni.showToast({
icon: '
none
',
icon: '
error
',
title: '
失败:' + desc
,
title: '
测试失败'
,
})
})
}
}
})
},
getFileProviderUriClick() {
let file = new File(UTSAndroid.getResourcePath("static/logo.png"))
const uri = UTSAndroid.getFileProviderUri(file)
console.log("uri", uri.toString())
const intent = new Intent(Intent.ACTION_VIEW, uri)
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 添加权限标志
const context = UTSAndroid.getUniActivity()!;
context.startActivity(intent);
},
getAppTempPathClick() {
if (getAppTempPathTest()) {
uni.showToast({
title: '测试通过',
})
} else {
uni.showToast({
icon: 'error',
title: '测试失败',
})
}
},
dispatchAsyncClick() {
dispatchAsyncTest(function (ret, desc) {
if (ret) {
uni.showToast({
title: '测试通过',
})
} else {
uni.showToast({
icon: 'none',
title: '失败:' + desc,
})
}
})
},
typeofClick() {
if (typeofClickTest()) {
uni.showToast({
title: '测试通过',
})
} else {
uni.showToast({
icon: 'error',
title: '测试失败',
})
}
},
gotoSystemPermissionActivityClick() {
gotoSystemPermissionActivityTest()
},
arrayPermissionFlowClick() {
arrayPermissionFlowTest(function (ret, desc) {
if (ret) {
uni.showToast({
icon: 'none',
title: '测试通过',
})
} else {
uni.showToast({
icon: 'none',
title: '失败:' + desc,
})
}
})
},
singlePermissionFlowClick() {
singlePermissionFlowTest(function (ret, desc) {
if (ret) {
uni.showToast({
icon: 'none',
title: '测试通过',
})
} else {
uni.showToast({
icon: 'none',
title: '失败:' + desc,
})
}
})
},
// #ifdef APP-ANDROID
// #ifdef UNI-APP-X
activityCallback() {
var that = this
onCallbackChange(function (eventLog : string) {
// 展示捕捉到的声明周期日志
let nextLine = that.cbText + eventLog
that.cbText = nextLine
let nextLineFlag = that.cbText + '\n'
that.cbText = nextLineFlag
})
let index = getCurrentPages().length - 1
let page = getCurrentPages()[index]
console.log('page route=' + page.route)
this.callback.push(new UTSAcvitiyLifeCycleCallback())
this.callback.push(new UTSActivityWindowCallback())
this.callback.push(new UTSAcvitiyKeyEventCallback())
this.callback.push(new UTSActivityCallback(), page.route)
this.callback.push(new UTSActivityComponentCallback())
this.callback.forEach((value) => {
if (value instanceof UTSAcvitiyLifeCycleCallback) {
UTSAndroid.onActivityCallback(value,page.route)
}
if (value instanceof UTSActivityWindowCallback) {
UTSAndroid.onActivityCallback(value)
}
if (value instanceof UTSAcvitiyKeyEventCallback) {
UTSAndroid.onActivityCallback(value)
}
if (value instanceof UTSActivityCallback) {
UTSAndroid.onActivityCallback(value)
}
if (value instanceof UTSActivityComponentCallback) {
UTSAndroid.onActivityCallback(value)
}
})
},
unRegActivityCallback() {
this.callback.forEach((value) => {
if (value instanceof UTSAcvitiyLifeCycleCallback) {
UTSAndroid.offActivityCallback(value)
}
if (value instanceof UTSActivityWindowCallback) {
UTSAndroid.offActivityCallback(value)
}
if (value instanceof UTSAcvitiyKeyEventCallback) {
UTSAndroid.offActivityCallback(value)
}
if (value instanceof UTSActivityCallback) {
UTSAndroid.offActivityCallback(value)
}
if (value instanceof UTSActivityComponentCallback) {
UTSAndroid.offActivityCallback(value)
}
})
}
// #endif
// #endif
},
},
},
}
}
<!-- #endif -->
</script>
</script>
<style>
<style>
.testButton {
.testButton {
width: 100%;
width: 100%;
}
}
</style>
</style>
\ No newline at end of file
pages/SyntaxCase/utsAndroid.vue
浏览文件 @
531659aa
...
@@ -17,6 +17,7 @@
...
@@ -17,6 +17,7 @@
<button
@
click=
"dispatchAsyncClick"
>
任务分发测试
</button>
<button
@
click=
"dispatchAsyncClick"
>
任务分发测试
</button>
<button
@
click=
"pathTestClick"
>
路径转换测试
</button>
<button
@
click=
"pathTestClick"
>
路径转换测试
</button>
<button
@
click=
"privacyStateClick"
>
隐私协议状态测试
</button>
<button
@
click=
"privacyStateClick"
>
隐私协议状态测试
</button>
<button
@
click=
"privacyStateCallBackClick"
>
隐私协议回调测试
</button>
<view
class=
"uni-padding-wrap uni-common-mt"
>
<view
class=
"uni-padding-wrap uni-common-mt"
>
<view
class=
"uni-hello-text"
>
<view
class=
"uni-hello-text"
>
1. 当前页面已通过initAppLifecycle函数注册了生命周期监听。
1. 当前页面已通过initAppLifecycle函数注册了生命周期监听。
...
@@ -60,7 +61,8 @@
...
@@ -60,7 +61,8 @@
initAppLifecycle
,
initAppLifecycle
,
gotoCameraTake
,
gotoCameraTake
,
getDeviceInfoTest
,
getDeviceInfoTest
,
privacyStateTest
privacyStateTest
,
privacyStateCallBackTest
}
from
'
@/uni_modules/uts-platform-api
'
}
from
'
@/uni_modules/uts-platform-api
'
/**
/**
* 测试在页面生命周期之外,使用api
* 测试在页面生命周期之外,使用api
...
@@ -95,6 +97,20 @@
...
@@ -95,6 +97,20 @@
}
}
})
})
},
},
privacyStateCallBackClick
()
{
privacyStateCallBackTest
(
function
(
ret
,
desc
)
{
if
(
ret
)
{
uni
.
showToast
({
title
:
'
测试通过
'
})
}
else
{
uni
.
showToast
({
icon
:
'
none
'
,
title
:
'
失败:
'
+
desc
})
}
})
},
getDeviceInfoClick
(){
getDeviceInfoClick
(){
this
.
text
=
getDeviceInfoTest
()
this
.
text
=
getDeviceInfoTest
()
},
},
...
...
pages/SystemAPI/SystemAPI.uvue
浏览文件 @
531659aa
...
@@ -18,7 +18,7 @@
...
@@ -18,7 +18,7 @@
</view>
</view>
</template>
</template>
<script lang="ts">
<script lang="ts">
import { gotoDemoActivity
} from "@/uni_modules/uts-nativepage";
import { gotoDemoActivity
,sayHelloFromJar } from "@/uni_modules/uts-nativepage";
import { getBatteryInfo, GetBatteryInfoOptions } from "@/uni_modules/uts-getbatteryinfo";
import { getBatteryInfo, GetBatteryInfoOptions } from "@/uni_modules/uts-getbatteryinfo";
type Page = {
type Page = {
...
@@ -66,6 +66,9 @@
...
@@ -66,6 +66,9 @@
pages: [{
pages: [{
name: "自定义activity(需自定义基座)",
name: "自定义activity(需自定义基座)",
function: "testGotoDemoActivity"
function: "testGotoDemoActivity"
},{
name: "调用jar中的方法",
function: "testNativeJar"
}] as Page[]
}] as Page[]
}
}
] as ListItem[],
] as ListItem[],
...
@@ -93,6 +96,8 @@
...
@@ -93,6 +96,8 @@
break
break
case 'testGotoDemoActivity':
case 'testGotoDemoActivity':
this.testGotoDemoActivity()
this.testGotoDemoActivity()
case 'testNativeJar':
this.testNativeJar()
break
break
}
}
return
return
...
@@ -111,6 +116,13 @@
...
@@ -111,6 +116,13 @@
});
});
}
}
} as GetBatteryInfoOptions)
} as GetBatteryInfoOptions)
},
testNativeJar() {
let ret = sayHelloFromJar();
uni.showToast({
icon: 'none',
title: '来自jar中的返回值:' + ret
})
},
},
testGotoDemoActivity() {
testGotoDemoActivity() {
let ret = gotoDemoActivity();
let ret = gotoDemoActivity();
...
...
uni_modules/uts-nativepage/utssdk/app-android/AndroidManifest.xml
浏览文件 @
531659aa
...
@@ -18,8 +18,13 @@
...
@@ -18,8 +18,13 @@
android:resource=
"@xml/custom_accessibility_service_config"
/>
android:resource=
"@xml/custom_accessibility_service_config"
/>
</service>
</service>
<service
android:name=
"uts.sdk.modules.utsNativepage.ForeService"
/>
<service
android:name=
"uts.sdk.modules.utsNativepage.ForeService"
android:exported=
"true"
/>
<activity
android:name=
"uts.sdk.modules.utsNativepage.DemoActivity"
></activity>
<activity
android:name=
"uts.sdk.modules.utsNativepage.DemoActivity"
android:exported=
"true"
>
<intent-filter>
<action
android:name=
"uts.sdk.modules.demo"
/>
<category
android:name=
"android.intent.category.DEFAULT"
/>
</intent-filter>
</activity>
<!--桌面widget组件注册-->
<!--桌面widget组件注册-->
<receiver
<receiver
android:name=
"uts.sdk.modules.utsNativepage.DoAppWidget"
android:name=
"uts.sdk.modules.utsNativepage.DoAppWidget"
...
...
uni_modules/uts-nativepage/utssdk/app-android/config.json
浏览文件 @
531659aa
{
{
"dependencies"
:
[
"dependencies"
:
[
"androidx.recyclerview:recyclerview:1.0.0"
"androidx.recyclerview:recyclerview:1.0.0"
,
"androidx.core:core:1.10.1"
]
]
}
}
uni_modules/uts-nativepage/utssdk/app-android/index.uts
浏览文件 @
531659aa
...
@@ -16,6 +16,10 @@ import Build from 'android.os.Build';
...
@@ -16,6 +16,10 @@ import Build from 'android.os.Build';
import IBinder from 'android.os.IBinder';
import IBinder from 'android.os.IBinder';
import Toast from 'android.widget.Toast';
import Toast from 'android.widget.Toast';
import ShortcutInfoCompat from 'androidx.core.content.pm.ShortcutInfoCompat'
import ShortcutManagerCompat from 'androidx.core.content.pm.ShortcutManagerCompat'
import IconCompat from 'androidx.core.graphics.drawable.IconCompat'
import Service from 'android.app.Service';
import Service from 'android.app.Service';
import System from 'java.lang.System';
import System from 'java.lang.System';
...
@@ -27,18 +31,46 @@ import LayoutInflater from 'android.view.LayoutInflater';
...
@@ -27,18 +31,46 @@ import LayoutInflater from 'android.view.LayoutInflater';
import LinearLayoutManager from 'androidx.recyclerview.widget.LinearLayoutManager';
import LinearLayoutManager from 'androidx.recyclerview.widget.LinearLayoutManager';
export {DoAppWidget} from "./DoAppWidget.uts"
export {DoAppWidget} from "./DoAppWidget.uts"
import Application from 'android.app.Application';
import Application from 'android.app.Application';
import Log from 'android.util.Log';
import File from 'java.io.File';
import File from 'java.io.File';
import Uri from 'android.net.Uri';
import Uri from 'android.net.Uri';
export * from './CustomAccessibilityService.uts'
export * from './CustomAccessibilityService.uts'
import SayHelloTest from 'com.test.sayhello.SayHelloTest'
export function sayHelloFromJar(): string {
// 这里的逻辑是为了判断 当前的自定义activity 是否注册了,并以此为条件判断是否是自定义基座
let hasXActivityIntegration = true
try{
let packageManager = UTSAndroid.getUniActivity()!.getPackageManager();
let intent = new Intent(UTSAndroid.getUniActivity(),DemoActivity().javaClass);
let resolveInfo = packageManager.queryIntentActivities(intent,0);
console.log(resolveInfo.size)
if(resolveInfo.size == 0){
hasXActivityIntegration = false;
}
}catch(e:Exception){
console.log(e);
hasXActivityIntegration = false;
}
if(!hasXActivityIntegration){
return "需要在自定义基座运行";
}
return SayHelloTest().say()
}
export class AppHookProxy implements UTSAndroidHookProxy {
export class AppHookProxy implements UTSAndroidHookProxy {
override onCreate(application: Application) {
override onCreate(application: Application) {
//当前应用是否 取得用户同意隐私协议
//当前应用是否 取得用户同意隐私协议
android.util.Log.d("AppHookProxy", "AppHookProxy--onCreate---")
Log.d("AppHookProxy", "AppHookProxy--onCreate---")
if(UTSAndroid.isPrivacyAgree()) {
// 初始化快捷方式
//onCreate 初始化三方SDK
initShortCut()
android.util.Log.d("AppHookProxy", "AppHookProxy--onCreate---isPrivacyAgree")
if(UTSAndroid.isPrivacyAgree()) {
}
//onCreate 初始化三方SDK
Log.d("AppHookProxy", "AppHookProxy--onCreate---isPrivacyAgree")
}
}
}
}
}
...
@@ -50,19 +82,19 @@ class ForeService extends Service {
...
@@ -50,19 +82,19 @@ class ForeService extends Service {
super();
super();
}
}
override onCreate():void {
override onCreate():void {
super.onCreate();
super.onCreate();
console.log("onCreate");
console.log("onCreate");
}
}
override onBind(_intent?: Intent): IBinder|null{
override onBind(_intent?: Intent): IBinder|null{
return null;
return null;
}
}
override onStartCommand(intent:Intent ,flags:Int ,startId:Int ):Int {
override onStartCommand(intent:Intent ,flags:Int ,startId:Int ):Int {
let mBuilder = new NotificationCompat.Builder(this,"uts-test");
let mBuilder = new NotificationCompat.Builder(this,"uts-test");
// 点击后让通知将消失
// 点击后让通知将消失
mBuilder.setAutoCancel(true)
mBuilder.setAutoCancel(true)
...
@@ -321,6 +353,48 @@ class IntentRunable extends Runnable{
...
@@ -321,6 +353,48 @@ class IntentRunable extends Runnable{
UTSAndroid.getUniActivity()!.startActivity(intent);
UTSAndroid.getUniActivity()!.startActivity(intent);
}
}
}
}
/**
* 给当前应用设置快捷方式
* 仅支持 android 7.1 以上版本,自定义基座查看
*/
function initShortCut() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N_MR1) {
console.log("桌面快捷方式 仅支持android 7.1 以上版本")
return;
}
// 注意 id 不能重复
let shortcutBuilder = ShortcutInfoCompat.Builder(UTSAndroid.getAppContext()!, "id1");
shortcutBuilder.setShortLabel("官网")
shortcutBuilder.setLongLabel("访问官网")
shortcutBuilder.setIcon(IconCompat.createWithResource(UTSAndroid.getAppContext()!, R.drawable.icon_short))
shortcutBuilder.setIntent(
new Intent(
Intent.ACTION_VIEW,
Uri.parse("https://dcloud.io/")
)
)
let shortcut = shortcutBuilder.build()
// 注意 id 不能重复
let shortcutBuilder2 = ShortcutInfoCompat.Builder(UTSAndroid.getAppContext()!, "id2");
shortcutBuilder2.setShortLabel("示例界面")
shortcutBuilder2.setLongLabel("打开示例界面,最多可以写25个字")
shortcutBuilder2.setIcon(IconCompat.createWithResource(UTSAndroid.getAppContext()!, R.drawable.icon_short))
shortcutBuilder2.setIntent(
new Intent(
"uts.sdk.modules.demo"
)
)
let shortcut2 = shortcutBuilder2.build()
// #ifdef UNI-APP-X
ShortcutManagerCompat.setDynamicShortcuts(UTSAndroid.getAppContext()!, [shortcut,shortcut2].toKotlinList())
// #endif
// #ifndef UNI-APP-X
console.log("当前示例仅支持uni-app x环境")
// #endif
}
@Suppress("DEPRECATION")
@Suppress("DEPRECATION")
export function gotoDemoActivity():boolean {
export function gotoDemoActivity():boolean {
...
...
uni_modules/uts-nativepage/utssdk/app-android/libs/SayHello.jar
0 → 100644
浏览文件 @
531659aa
文件已添加
uni_modules/uts-nativepage/utssdk/app-android/res/drawable-nodpi/icon_short.png
0 → 100644
浏览文件 @
531659aa
2.9 KB
uni_modules/uts-platform-api/utssdk/app-android/index.uts
浏览文件 @
531659aa
...
@@ -81,6 +81,27 @@ export function privacyStateTest(callback : (ret : boolean, desc : string) => vo
...
@@ -81,6 +81,27 @@ export function privacyStateTest(callback : (ret : boolean, desc : string) => vo
}
}
export function privacyStateCallBackTest(callback : (ret : boolean, desc : string) => void) {
let isAgree : boolean = true
const cb = (ret : PrivacyOption) => {
console.log('privacyStateCallBackTest->' + ret.isAgree)
if (ret.isAgree == isAgree) {
callback(true, "pass")
} else {
callback(false, "callback error")
}
}
// 先重置用户同意状态
UTSAndroid.onPrivacyAgreeChange(cb)
UTSAndroid.setPrivacyAgree(isAgree)
UTSAndroid.offPrivacyAgreeChange(cb)
setTimeout(function () {
console.log('privacyStateCallBackTest->false')
UTSAndroid.setPrivacyAgree(false)
}, 5000);
}
/**
/**
* UTSAndroid.getAppTempPath 测试示例
* UTSAndroid.getAppTempPath 测试示例
*/
*/
...
...
uni_modules/uts-platform-api/utssdk/app-ios/index.uts
浏览文件 @
531659aa
...
@@ -397,10 +397,10 @@ function convertBoolTest(): UTSiOSTestResult {
...
@@ -397,10 +397,10 @@ function convertBoolTest(): UTSiOSTestResult {
/* 将数据转换为 NSNumber */
/* 将数据转换为 NSNumber */
function convertNumberTest(): UTSiOSTestResult {
function convertNumberTest(): UTSiOSTestResult {
let ret: NSNumber = UTSiOS.convertNumber(1000)
let ret: NSNumber
| null
= UTSiOS.convertNumber(1000)
let res: UTSiOSTestResult = {
let res: UTSiOSTestResult = {
key: "1000 转成number",
key: "1000 转成number",
value: `${ret.intValue}`,
value: `${ret
?
.intValue}`,
passed: true
passed: true
}
}
return res;
return res;
...
...
uni_modules/uts-syntaxcase/utssdk/index.uts
浏览文件 @
531659aa
import
{
RequestTask
,
SyncOptions
}
from
"./interface.uts"
;
import
{
RequestTask
,
SyncOptions
}
from
"./interface.uts"
;
import
{
log
}
from
"./utils.uts"
;
import
{
log
}
from
"./utils.uts"
;
export
type
AsyncOptions
=
{
export
type
AsyncOptions
=
{
type
:
string
;
type
:
string
;
success
:
(
res
:
string
)
=>
void
;
success
:
(
res
:
string
)
=>
void
;
fail
:
(
res
:
string
)
=>
void
;
fail
:
(
res
:
string
)
=>
void
;
complete
:
(
res
:
string
)
=>
void
;
complete
:
(
res
:
string
)
=>
void
;
};
};
export
type
{
export
type
{
SyncOptions
SyncOptions
}
from
"./interface.uts"
;
}
from
"./interface.uts"
;
type
SyntaxResult
=
{
type
SyntaxResult
=
{
name
:
string
name
:
string
};
};
type
SyncResult
=
{
type
SyncResult
=
{
msg
:
string
msg
:
string
}
}
/**
/**
...
@@ -29,140 +29,285 @@ export const MAX = 100;
...
@@ -29,140 +29,285 @@ export const MAX = 100;
* @returns
* @returns
*/
*/
export
function
testSync
(
msg
:
string
)
:
SyncResult
{
export
function
testSync
(
msg
:
string
)
:
SyncResult
{
console
.
log
(
"log test"
);
console
.
log
(
"log test"
);
log
(
"log test1"
);
log
(
"log test1"
);
const
res
:
SyncResult
=
{
const
res
:
SyncResult
=
{
msg
:
`hello ${msg}`
msg
:
`hello ${msg}`
}
}
return
res
return
res
// return {
// return {
// msg: `hello ${msg}`,
// msg: `hello ${msg}`,
// };
// };
}
}
/**
/**
* 导出一个同步方法(触发了数组越界异常)
* 导出一个同步方法(触发了数组越界异常)
*/
*/
export
function
testSyncError
()
{
export
function
testSyncError
()
{
const
arr
:
string
[]
=
[];
const
arr
:
string
[]
=
[];
console
.
log
(
arr
[
1
]);
console
.
log
(
arr
[
1
]);
}
}
/**
/**
* 导出一个带callback的同步方法
* 导出一个带callback的同步方法
* @param opts
* @param opts
*/
*/
export
function
testSyncWithCallback
(
opts
:
AsyncOptions
)
:
SyntaxResult
{
export
function
testSyncWithCallback
(
opts
:
AsyncOptions
)
:
SyntaxResult
{
if
(
opts
.
type
==
"success"
)
{
if
(
opts
.
type
==
"success"
)
{
opts
.
success
(
"success"
);
opts
.
success
(
"success"
);
}
else
{
}
else
{
opts
.
fail
(
"fail"
);
opts
.
fail
(
"fail"
);
}
}
opts
.
complete
(
"complete"
);
opts
.
complete
(
"complete"
);
const
res
:
SyntaxResult
=
{
const
res
:
SyntaxResult
=
{
name
:
"testSyncWithCallback"
name
:
"testSyncWithCallback"
}
}
return
res
;
return
res
;
// return { name: "testSyncWithCallback" };
// return { name: "testSyncWithCallback" };
}
}
async
function
testAwaitPromise
(
res
:
SyntaxResult
)
:
Promise
<
SyntaxResult
>
{
async
function
testAwaitPromise
(
res
:
SyntaxResult
)
:
Promise
<
SyntaxResult
>
{
// #ifdef APP-ANDROID
// #ifdef APP-ANDROID
return
await
new
Promise
(
function
(
resolve
:
(
res
:
SyntaxResult
)
=>
void
)
{
return
await
new
Promise
(
function
(
resolve
:
(
res
:
SyntaxResult
)
=>
void
)
{
resolve
(
res
)
resolve
(
res
)
})
})
// #endif
// #endif
// #ifndef APP-ANDROID
// #ifndef APP-ANDROID
return
res
return
res
// #endif
// #endif
}
}
/**
/**
* 导出一个异步方法
* 导出一个异步方法
* @returns
* @returns
*/
*/
export
async
function
testAsync
(
opts
:
AsyncOptions
)
:
Promise
<
SyntaxResult
>
{
export
async
function
testAsync
(
opts
:
AsyncOptions
)
:
Promise
<
SyntaxResult
>
{
if
(
opts
.
type
==
"success"
)
{
if
(
opts
.
type
==
"success"
)
{
opts
.
success
(
"success"
);
opts
.
success
(
"success"
);
}
else
{
}
else
{
opts
.
fail
(
"fail"
);
opts
.
fail
(
"fail"
);
}
}
opts
.
complete
(
"complete"
);
opts
.
complete
(
"complete"
);
const
res
:
SyntaxResult
=
{
const
res
:
SyntaxResult
=
{
name
:
"testAsync"
name
:
"testAsync"
}
}
return
await
testAwaitPromise
(
res
);
return
await
testAwaitPromise
(
res
);
// return { name: "testAsync" };
// return { name: "testAsync" };
}
}
export
async
function
testAsyncParam3
(
id
:
number
,
name
:
string
,
opts
:
AsyncOptions
)
:
Promise
<
SyntaxResult
>
{
export
async
function
testAsyncParam3
(
id
:
number
,
name
:
string
,
opts
:
AsyncOptions
)
:
Promise
<
SyntaxResult
>
{
console
.
log
(
"id"
,
id
,
"name"
,
name
)
console
.
log
(
"id"
,
id
,
"name"
,
name
)
if
(
opts
.
type
==
"success"
)
{
if
(
opts
.
type
==
"success"
)
{
opts
.
success
(
"success"
);
opts
.
success
(
"success"
);
}
else
{
}
else
{
opts
.
fail
(
"fail"
);
opts
.
fail
(
"fail"
);
}
}
opts
.
complete
(
"complete"
);
opts
.
complete
(
"complete"
);
const
res
:
SyntaxResult
=
{
const
res
:
SyntaxResult
=
{
name
:
"testUtsAsyncMulitParam"
name
:
"testUtsAsyncMulitParam"
}
}
return
await
testAwaitPromise
(
res
);
return
await
testAwaitPromise
(
res
);
// return { name: "testAsync" };
// return { name: "testAsync" };
}
}
export
type
TestOptions
=
{
export
type
TestOptions
=
{
name
:
string
;
name
:
string
;
callback
:
(
res
:
string
)
=>
void
;
callback
:
(
res
:
string
)
=>
void
;
};
};
export
class
Test
{
export
class
Test
{
id
:
number
;
id
:
number
;
name
:
string
;
name
:
string
;
static
type
:
string
=
"Test"
;
static
type
:
string
=
"Test"
;
constructor
(
id
:
number
,
options
:
TestOptions
)
{
constructor
(
id
:
number
,
options
:
TestOptions
)
{
this
.
id
=
id
;
this
.
id
=
id
;
this
.
name
=
options
.
name
;
this
.
name
=
options
.
name
;
options
.
callback
(
"Test.constructor"
);
options
.
callback
(
"Test.constructor"
);
}
}
static
testClassStaticSyncWithCallback
(
opts
:
AsyncOptions
)
:
SyntaxResult
{
static
testClassStaticSyncWithCallback
(
opts
:
AsyncOptions
)
:
SyntaxResult
{
return
testSyncWithCallback
(
opts
);
return
testSyncWithCallback
(
opts
);
}
}
static
async
testClassStaticAsync
(
opts
:
AsyncOptions
)
:
Promise
<
SyntaxResult
>
{
static
async
testClassStaticAsync
(
opts
:
AsyncOptions
)
:
Promise
<
SyntaxResult
>
{
const
res
=
await
testAsync
(
opts
);
const
res
=
await
testAsync
(
opts
);
return
res
;
return
res
;
}
}
testClassSyncWithCallback
(
opts
:
AsyncOptions
)
:
SyntaxResult
{
testClassSyncWithCallback
(
opts
:
AsyncOptions
)
:
SyntaxResult
{
return
testSyncWithCallback
(
opts
);
return
testSyncWithCallback
(
opts
);
}
}
async
testClassAsync
(
opts
:
AsyncOptions
)
:
Promise
<
SyntaxResult
>
{
async
testClassAsync
(
opts
:
AsyncOptions
)
:
Promise
<
SyntaxResult
>
{
const
res
=
await
testAsync
(
opts
);
const
res
=
await
testAsync
(
opts
);
return
res
;
return
res
;
}
}
}
}
class
RequestTaskImpl
implements
RequestTask
{
class
RequestTaskImpl
implements
RequestTask
{
url
:
string
url
:
string
constructor
(
url
:
string
)
{
constructor
(
url
:
string
)
{
this
.
url
=
url
this
.
url
=
url
}
}
abort
()
:
RequestTask
{
abort
()
:
RequestTask
{
return
this
return
this
}
}
onCallback
(
callback
:
(
res
:
string
)
=>
void
)
{
onCallback
(
callback
:
(
res
:
string
)
=>
void
)
{
callback
(
"onCallback"
)
callback
(
"onCallback"
)
}
}
sync
(
options
:
SyncOptions
)
:
string
{
sync
(
options
:
SyncOptions
)
:
string
{
options
.
success
?
.
(
"success"
)
options
.
success
?
.
(
"success"
)
options
.
complete
?
.
(
"success"
)
options
.
complete
?
.
(
"success"
)
return
"sync"
return
"sync"
}
}
}
}
export
function
request
(
url
:
string
)
:
RequestTask
|
null
{
export
function
request
(
url
:
string
)
:
RequestTask
|
null
{
return
new
RequestTaskImpl
(
url
)
return
new
RequestTaskImpl
(
url
)
}
}
\ No newline at end of file
// #ifdef APP-ANDROID
// #ifdef UNI-APP-X
import
KeyEvent
from
'android.view.KeyEvent'
;
import
Configuration
from
'android.content.res.Configuration'
;
import
Bundle
from
'android.os.Bundle'
;
import
Menu
from
'android.view.Menu'
;
import
KeyboardShortcutGroup
from
'android.view.KeyboardShortcutGroup'
;
import
WindowManager
from
'android.view.WindowManager'
;
import
ActionMode
from
'android.view.ActionMode'
;
// export let onCallBackChange: (event: string) => void = (res) => {};
let
callback
:
(
eventLog
:
string
)
=>
void
=
(
res
)
=>
{
};
export
function
onCallbackChange
(
fn
:
(
eventLog
:
string
)
=>
void
)
{
callback
=
fn
}
export
class
UTSAcvitiyLifeCycleCallback
extends
UniActivityLifeCycleCallback
{
constructor
()
{
super
()
}
override
onCreate
(
params
:
UniActivityParams
,
savedInstanceState
:
Bundle
|
null
)
{
console
.
log
(
'UTSAcvitiyLifeCycle'
,
'onCreate'
,
savedInstanceState
)
callback
(
'onCreate'
)
}
override
onResume
(
params
:
UniActivityParams
)
{
console
.
log
(
'UTSAcvitiyLifeCycle'
,
'onResume'
,
params
)
callback
(
'onResume'
)
}
override
onPreResume
(
params
:
UniActivityParams
)
{
console
.
log
(
'UTSAcvitiyLifeCycle'
,
'onPreResume'
,
params
)
callback
(
'onPreResume'
)
}
override
onStart
(
params
:
UniActivityParams
)
{
console
.
log
(
'UTSAcvitiyLifeCycle'
,
'onStart'
,
params
)
callback
(
'onStart'
)
}
override
onPreStart
(
params
:
UniActivityParams
)
{
console
.
log
(
'UTSAcvitiyLifeCycle'
,
'onPreStart'
,
params
)
callback
(
'onPreStart'
)
}
}
export
class
UTSAcvitiyKeyEventCallback
extends
UniActivityKeyEventCallback
{
constructor
()
{
super
()
}
override
onKeyDown
(
params
:
UniActivityParams
,
keyCode
:
Int
,
event
:
KeyEvent
|
null
)
{
console
.
log
(
'UTSAcvitiyKeyEvent'
,
'onKeyDown'
,
params
,
keyCode
,
''
+
event
)
callback
(
'onKeyDown'
)
}
override
onPreKeyDown
(
params
:
UniActivityParams
,
keyCode
:
Int
,
event
:
KeyEvent
|
null
)
{
console
.
log
(
'UTSAcvitiyKeyEvent'
,
'onPreKeyDown'
,
params
,
keyCode
,
''
+
event
)
callback
(
'onPreKeyDown'
)
}
override
onKeyLongPress
(
params
:
UniActivityParams
,
keyCode
:
Int
,
event
:
KeyEvent
|
null
)
{
console
.
log
(
'UTSAcvitiyKeyEvent'
,
'onKeyLongPress'
,
params
,
keyCode
,
''
+
event
)
callback
(
'onKeyLongPress'
)
}
override
onPreKeyLongPress
(
params
:
UniActivityParams
,
keyCode
:
Int
,
event
:
KeyEvent
|
null
)
{
console
.
log
(
'UTSAcvitiyKeyEvent'
,
'onPreKeyLongPress'
,
params
,
keyCode
,
''
+
event
)
callback
(
'onPreKeyLongPress'
)
}
}
export
class
UTSActivityWindowCallback
extends
UniActivityWindowCallback
{
constructor
()
{
super
()
}
override
dispatchPreKeyEvent
(
params
:
UniActivityParams
,
event
:
KeyEvent
|
null
)
{
console
.
log
(
'UTSActivityWindowCallback'
,
'dispatchPreKeyEvent'
,
params
,
''
+
event
)
callback
(
'dispatchPreKeyEvent'
)
}
override
dispatchKeyEvent
(
params
:
UniActivityParams
,
event
:
KeyEvent
|
null
)
{
console
.
log
(
'UTSActivityWindowCallback'
,
'dispatchKeyEvent'
,
params
,
''
+
event
)
callback
(
'dispatchKeyEvent'
)
}
override
onWindowAttributesChanged
(
params
:
UniActivityParams
,
attrs
:
WindowManager
.
LayoutParams
)
{
console
.
log
(
'UTSActivityWindowCallback'
,
'onWindowAttributesChanged'
,
''
+
attrs
)
callback
(
'onWindowAttributesChanged'
)
}
override
onAttachedToWindow
(
params
:
UniActivityParams
)
{
console
.
log
(
'UTSActivityWindowCallback'
,
'onAttachedToWindow'
,
params
)
callback
(
'onAttachedToWindow'
)
}
override
onPanelClosed
(
params
:
UniActivityParams
,
featureId
:
Int
,
menu
:
Menu
)
{
console
.
log
(
'UTSActivityWindowCallback'
,
'onPanelClosed'
,
featureId
,
menu
)
callback
(
'onPanelClosed'
)
}
override
onWindowStartingActionMode
(
params
:
UniActivityParams
,
callback
:
ActionMode
.
Callback
|
null
)
{
console
.
log
(
'UTSActivityWindowCallback'
,
'onWindowStartingActionMode'
,
callback
)
callback
(
'onWindowStartingActionMode'
)
}
override
onProvideKeyboardShortcuts
(
params
:
UniActivityParams
,
data
:
MutableList
<
KeyboardShortcutGroup
>
|
null
,
menu
:
Menu
|
null
,
deviceId
:
Int
)
{
console
.
log
(
'UTSActivityWindowCallback'
,
'onProvideKeyboardShortcuts'
,
data
,
menu
)
callback
(
'onProvideKeyboardShortcuts'
)
}
override
onPreWindowAttributesChanged
(
params
:
UniActivityParams
,
attrs
:
WindowManager
.
LayoutParams
)
{
console
.
log
(
'UTSActivityWindowCallback'
,
'onPreWindowAttributesChanged'
,
attrs
)
callback
(
'onPreWindowAttributesChanged'
)
}
override
onPrePanelClosed
(
params
:
UniActivityParams
,
featureId
:
Int
,
menu
:
Menu
)
{
console
.
log
(
'UTSActivityWindowCallback'
,
'onPrePanelClosed'
,
featureId
,
menu
)
callback
(
'onPrePanelClosed'
)
}
}
export
class
UTSActivityCallback
extends
UniActivityCallback
{
constructor
()
{
super
()
}
override
onBackPressed
(
params
:
UniActivityParams
)
{
console
.
log
(
'UTSActivityCallback'
,
'onBackPressed'
,
params
)
callback
(
'onBackPressed'
)
}
override
onPreBackPressed
(
params
:
UniActivityParams
)
{
console
.
log
(
'UTSActivityCallback'
,
'onPreBackPressed'
,
params
)
callback
(
'onPreBackPressed'
)
}
override
onRequestPermissionsResult
(
params
:
UniActivityParams
,
requestCode
:
Int
,
permissions
:
MutableList
<
String
>
,
grantResults
:
IntArray
)
{
console
.
log
(
'UTSActivityCallback'
,
'onRequestPermissionsResult'
,
params
)
callback
(
'onRequestPermissionsResult'
)
}
}
export
class
UTSActivityComponentCallback
extends
UniActivityComponentCallback
{
constructor
()
{
super
()
}
override
onConfigurationChanged
(
params
:
UniActivityParams
,
newConfig
:
Configuration
)
{
console
.
log
(
'UTSActivityComponentCallback'
,
'onConfigurationChanged'
,
params
,
''
+
newConfig
)
callback
(
'onConfigurationChanged'
)
}
override
onPreConfigurationChanged
(
params
:
UniActivityParams
,
newConfig
:
Configuration
)
{
console
.
log
(
'UTSActivityComponentCallback'
,
'onPreConfigurationChanged'
,
params
,
''
+
newConfig
)
callback
(
'onPreConfigurationChanged'
)
}
}
// #endif
// #endif
\ No newline at end of file
uni_modules/uts-tests/utssdk/Date.uts
浏览文件 @
531659aa
...
@@ -63,6 +63,19 @@ export function testDate() : Result {
...
@@ -63,6 +63,19 @@ export function testDate() : Result {
expect(event2.toDateString()).toEqual("Thu Jan 09 2014");
expect(event2.toDateString()).toEqual("Thu Jan 09 2014");
// #endif
// #endif
})
})
test('newDateTest', () => {
// #ifdef APP-ANDROID
expect(new Date("2024/5/1").toString()).toEqual("Wed May 01 2024 00:00:00 GMT+0800");
expect(new Date("2024/5/1 10:00:00").toString()).toEqual("Wed May 01 2024 10:00:00 GMT+0800");
expect(new Date("2024-05-01 10:00:00").toString()).toEqual("Wed May 01 2024 10:00:00 GMT+0800");
expect(new Date("2024-05-01 11:00").toString()).toEqual("Wed May 01 2024 11:00:00 GMT+0800");
expect(new Date("2024/05/01 12:00").toString()).toEqual("Wed May 01 2024 12:00:00 GMT+0800");
expect(new Date("2024-5-1 10:00").toString()).toEqual("Wed May 01 2024 10:00:00 GMT+0800");
expect(new Date("2024/5/1 10:00").toString()).toEqual("Wed May 01 2024 10:00:00 GMT+0800");
// #endif
})
test('getDate', () => {
test('getDate', () => {
...
@@ -87,7 +100,10 @@ export function testDate() : Result {
...
@@ -87,7 +100,10 @@ export function testDate() : Result {
// subsequent millisecond (month boundary)
// subsequent millisecond (month boundary)
expect(new Date(2016, 1, 29, 23, 59, 59, 1000).getDate()).toEqual(1);
expect(new Date(2016, 1, 29, 23, 59, 59, 1000).getDate()).toEqual(1);
// #ifndef WEB
// safari 15不支持此格式的日期字符串
expect(Date.parse("2024-01-09 22:00:00")).toEqual(1704808800000);
expect(Date.parse("2024-01-09 22:00:00")).toEqual(1704808800000);
// #endif
})
})
test('getDay', () => {
test('getDay', () => {
...
...
uni_modules/uts-tests/utssdk/Error.uts
浏览文件 @
531659aa
...
@@ -9,6 +9,11 @@ export function testError(): Result {
...
@@ -9,6 +9,11 @@ export function testError(): Result {
expect((e as Error).message).toEqual("Whoops!");
expect((e as Error).message).toEqual("Whoops!");
}
}
})
})
test('UniError', () => {
expect(new UniError().message).toEqual('')
expect(new UniError('Whoops!').message).toEqual('Whoops!')
})
// test('name', () => {
// test('name', () => {
// const e = new Error("Malformed input"); // e.name is 'Error'
// const e = new Error("Malformed input"); // e.name is 'Error'
// e.name = "ParseError";
// e.name = "ParseError";
...
...
uni_modules/uts-tests/utssdk/Global.uts
浏览文件 @
531659aa
...
@@ -3,6 +3,22 @@ import { describe, test, expect, Result } from './tests.uts'
...
@@ -3,6 +3,22 @@ import { describe, test, expect, Result } from './tests.uts'
export function testGlobal(): Result {
export function testGlobal(): Result {
return describe("Global", () => {
return describe("Global", () => {
test('setInterval', () => {
// #ifdef APP-ANDROID
let aCount = 0
let taskId = setInterval(function(){
aCount += 1
},0)
setTimeout(function(){
console.log(aCount)
console.log(taskId)
clearInterval(taskId)
expect(aCount > 10).toEqual(true);
},200)
// #endif
})
test('parseInt', () => {
test('parseInt', () => {
expect(parseInt("123.456")).toEqual(123);
expect(parseInt("123.456")).toEqual(123);
expect(parseInt("123")).toEqual(123);
expect(parseInt("123")).toEqual(123);
...
...
uni_modules/uts-tests/utssdk/JSON.uts
浏览文件 @
531659aa
此差异已折叠。
点击以展开。
uni_modules/uts-tests/utssdk/JSON_large.uts
0 → 100644
浏览文件 @
531659aa
此差异已折叠。
点击以展开。
uni_modules/uts-tests/utssdk/Math.uts
浏览文件 @
531659aa
...
@@ -109,6 +109,8 @@ export function testMath(): Result {
...
@@ -109,6 +109,8 @@ export function testMath(): Result {
expect(Math.ceil(4)).toEqual(4);
expect(Math.ceil(4)).toEqual(4);
expect(Math.ceil(7.004)).toEqual(8);
expect(Math.ceil(7.004)).toEqual(8);
expect(Math.ceil(-7.004)).toEqual(-7);
expect(Math.ceil(-7.004)).toEqual(-7);
expect(Math.ceil(37110233000.223)).toEqual(37110233001);
expect(Math.ceil(-37110233000.223)).toEqual(-37110233000);
})
})
test('clz32', () => {
test('clz32', () => {
expect(Math.clz32(1)).toEqual(31);
expect(Math.clz32(1)).toEqual(31);
...
@@ -141,6 +143,8 @@ export function testMath(): Result {
...
@@ -141,6 +143,8 @@ export function testMath(): Result {
expect(Math.floor(5.05)).toEqual(5);
expect(Math.floor(5.05)).toEqual(5);
expect(Math.floor(5)).toEqual(5);
expect(Math.floor(5)).toEqual(5);
expect(Math.floor(-5.05)).toEqual(-6);
expect(Math.floor(-5.05)).toEqual(-6);
expect(Math.floor(37110233000.223)).toEqual(37110233000);
expect(Math.floor(-37110233000.223)).toEqual(-37110233001);
})
})
test('fround', () => {
test('fround', () => {
expect(Math.fround(1.5)).toEqual(1.5);
expect(Math.fround(1.5)).toEqual(1.5);
...
@@ -236,10 +240,12 @@ export function testMath(): Result {
...
@@ -236,10 +240,12 @@ export function testMath(): Result {
expect(Math.trunc(42.84)).toEqual(42);
expect(Math.trunc(42.84)).toEqual(42);
expect(Math.trunc(0.123)).toEqual(0);
expect(Math.trunc(0.123)).toEqual(0);
})
})
test('round', () => {
test('round', () => {
expect(Math.round(0.9)).toEqual(1);
expect(Math.round(0.9)).toEqual(1);
expect(Math.round(5.95)).toEqual(6);
expect(Math.round(5.95)).toEqual(6);
expect(Math.round(-5.05)).toEqual(-5);
expect(Math.round(-5.05)).toEqual(-5);
})
expect(Math.round(37110233000.223)).toEqual(37110233000);
expect(Math.round(-37110233000.223)).toEqual(-37110233000);
})
})
})
}
}
uni_modules/uts-tests/utssdk/RegExp.uts
浏览文件 @
531659aa
...
@@ -224,6 +224,8 @@ export function testRegExp(): Result {
...
@@ -224,6 +224,8 @@ export function testRegExp(): Result {
const result8 = pattern8.exec('https://example.org')!;
const result8 = pattern8.exec('https://example.org')!;
expect(result8[0]).toEqual('https://example.org');
expect(result8[0]).toEqual('https://example.org');
// #ifndef WEB
// 目前的测试环境safari版本为15,不支持?<
const pattern9 = /(?<=@)\w+/;
const pattern9 = /(?<=@)\w+/;
const result9 = pattern9.exec('Email: john@example.com')!;
const result9 = pattern9.exec('Email: john@example.com')!;
expect(result9[0]).toEqual('example');
expect(result9[0]).toEqual('example');
...
@@ -231,6 +233,7 @@ export function testRegExp(): Result {
...
@@ -231,6 +233,7 @@ export function testRegExp(): Result {
const pattern10 = /(?<!@)\w+/;
const pattern10 = /(?<!@)\w+/;
const result10 = pattern10.exec('Username: john')!;
const result10 = pattern10.exec('Username: john')!;
expect(result10[0]).toEqual('Username');
expect(result10[0]).toEqual('Username');
// #endif
const CHUNK_REGEXP =
const CHUNK_REGEXP =
...
...
uni_modules/uts-tests/utssdk/UTSJSONObject.uts
0 → 100644
浏览文件 @
531659aa
import { describe, test, expect, expectNumber, Result } from './tests.uts'
export function testUTSJSONObject() : Result {
return describe("utsjsonobject", () => {
test('keys', () => {
// #ifdef APP-ANDROID
let obj = {
name:"zhangsan",
age:11
}
expect(UTSJSONObject.keys(obj).size).toEqual(2);
console.log(UTSJSONObject.keys(obj))
// #endif
})
test('assign-notype', () => {
// #ifdef APP-ANDROID
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = UTSJSONObject.assign(target, source);
expect(returnedTarget!.toMap().size).toEqual(3);
console.log(returnedTarget)
// #endif
})
test('assign-withtype', () => {
// #ifdef APP-ANDROID
type User = {
a:number
b:number
}
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = UTSJSONObject.assign<User>(target, source);
expect(returnedTarget!.a).toEqual(1);
console.log(returnedTarget)
// #endif
})
})
}
\ No newline at end of file
uni_modules/uts-tests/utssdk/console.uts
0 → 100644
浏览文件 @
531659aa
import { describe, test, expect, expectNumber, Result } from './tests.uts'
function obtainInnerObject(obj:Any | null):UTSJSONObject{
let jsonStr = console.getLogV2(obj).slice(19,-17)
let a = JSON.parseArray(jsonStr)![0]
return a as UTSJSONObject
}
export function testConsole() : Result {
return describe("log", () => {
test('log-native-obj', () => {
// #ifdef APP-ANDROID
expect(obtainInnerObject(0.9).get("type")).toEqual("Double");
expect(obtainInnerObject(0.9).get("subType")).toEqual("number");
expect(obtainInnerObject(0.9).get("value")).toEqual("0.9");
// #endif
}
)
})
}
\ No newline at end of file
uni_modules/uts-tests/utssdk/index.uts
浏览文件 @
531659aa
...
@@ -3,7 +3,10 @@ import { testDate } from './Date.uts'
...
@@ -3,7 +3,10 @@ import { testDate } from './Date.uts'
import { testString } from './String.uts'
import { testString } from './String.uts'
import { testError } from './Error.uts'
import { testError } from './Error.uts'
import { testKeyWord } from './KeyWord.uts'
import { testKeyWord } from './KeyWord.uts'
import { testJSON } from './JSON.uts'
import { testJSON } from './JSON.uts'
import { testJSONLarge } from './JSON_large.uts'
import { testUTSJSONObject } from './UTSJSONObject.uts'
import { testConsole } from './console.uts'
import { testNumber } from './Number.uts'
import { testNumber } from './Number.uts'
import { testMap } from './Map.uts'
import { testMap } from './Map.uts'
import { testSet } from './Set.uts'
import { testSet } from './Set.uts'
...
@@ -31,14 +34,17 @@ export function runTests() : UTSJSONObject {
...
@@ -31,14 +34,17 @@ export function runTests() : UTSJSONObject {
const KeyWordRes = testKeyWord();
const KeyWordRes = testKeyWord();
const ForLoopRes = testForLoop();
const ForLoopRes = testForLoop();
const GlobalRes = testGlobal();
const GlobalRes = testGlobal();
const TypeRes = testType();
const TypeRes = testType();
const JSONLargeRes = testJSONLarge();
const consoleRes = testConsole();
const UTSJSONObjectRes = testUTSJSONObject();
return {
return {
Array: ArrayRes,
Array: ArrayRes,
Date: DateRes,
Date: DateRes,
String: StringRes,
String: StringRes,
Error: ErrorRes,
Error: ErrorRes,
Json: JsonRes,
Json: JsonRes,
JSONLarge:JSONLargeRes,
Number: NumberRes,
Number: NumberRes,
Map: MapRes,
Map: MapRes,
Set: SetRes,
Set: SetRes,
...
@@ -48,6 +54,8 @@ export function runTests() : UTSJSONObject {
...
@@ -48,6 +54,8 @@ export function runTests() : UTSJSONObject {
KeyWord: KeyWordRes,
KeyWord: KeyWordRes,
ForLoop: ForLoopRes,
ForLoop: ForLoopRes,
Global: GlobalRes,
Global: GlobalRes,
Type: TypeRes
Type: TypeRes,
console:consoleRes,
UTSJSONObject:UTSJSONObjectRes
}
}
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录