王士厅
... ... @@ -55,7 +55,8 @@
"buildProfileFields": {
"BUILD_VERSION": ""
}
}
},
"strictMode": {"useNormalizedOHMUrl": true}
},
},
{
... ... @@ -69,7 +70,8 @@
"buildProfileFields": {
"BUILD_VERSION": ""
}
}
},
"strictMode": {"useNormalizedOHMUrl": true}
}
}
],
... ...
import { url } from '@kit.ArkTS'
import { RetryHolderManager } from '@ohos/imageknife/src/main/ets/components/imageknife/holder/RetryHolderManager'
import App from '@system.app'
import { Action, Params } from 'wdBean/Index'
import { ExtraDTO } from 'wdBean/src/main/ets/bean/component/extra/ExtraDTO'
... ... @@ -17,12 +18,12 @@ export class AppInnerLink {
// 内链跳转
// 内链地址例如:rmrbapp://rmrb.app/openwith?type=article&subType=h5_template_article&contentId=30000762651&relId=500000038702&skipType=1&relType=1
static jumpWithLink(innerLink: string) {
static jumpWithLink(innerLink: string) : boolean {
let params = AppInnerLink.parseParams(innerLink)
if (!params) {
Logger.info(TAG, "跳转无效的链接地址 " + innerLink)
return
return false
}
switch (params.skipType) {
... ... @@ -48,8 +49,10 @@ export class AppInnerLink {
}
default: {
Logger.info(TAG, "跳转无效的链接地址 " + innerLink)
return false
}
}
return true
}
private static jumpParams(params: InnerLinkParam) {
... ...
... ... @@ -64,7 +64,7 @@ export struct H5NewsWebPageComponent {
Stack({ alignContent: Alignment.Top }){
Stack(){
Column(){
CustomTitleUI({ titleName: this.navTitle })
CustomTitleUI({ titleName: this.navTitle ,imgBack:false})
WdWebComponent({
webviewControl: this.webviewControl,
webUrl: this.webUrl,
... ...
... ... @@ -5,7 +5,12 @@ import { promptAction } from '@kit.ArkUI';
import { image } from '@kit.ImageKit';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import fs from '@ohos.file.fs';
import { NetworkUtil } from 'wdKit';
import { DateTimeUtils, NetworkUtil, PermissionUtil } from 'wdKit';
import { PrivacySettingModel } from '../model/PrivacySettingModel';
import { TrackConstants, TrackingButton } from 'wdTracking';
import { faceDetector } from '@kit.CoreVisionKit';
import mediaLibrary from '@ohos.multimedia.mediaLibrary';
import fileIo from '@ohos.file.fs';
const PERMISSIONS: Array<Permissions> = [
'ohos.permission.READ_IMAGEVIDEO',
... ... @@ -22,6 +27,8 @@ export struct ImageDownloadComponent {
@State photoAccessHelper: photoAccessHelper.PhotoAccessHelper | undefined = undefined; // 相册模块管理实例
@State imageBuffer: ArrayBuffer | undefined = undefined; // 图片ArrayBuffer
@Prop @Watch('onChangeUrl') url: string = ''
@State isGranted: boolean = false
@State name: string = ''
build() {
Column() {
... ... @@ -34,14 +41,20 @@ export struct ImageDownloadComponent {
.backgroundColor(Color.Transparent)
.iconColor(Color.White)
.onClick(async () => {
console.info(`cj2024 onClick ${this.imageBuffer}`)
//console.info(`cj2024 onClick ${this.imageBuffer}`)
if (this.imageBuffer !== undefined) {
try {
await this.saveImage(this.imageBuffer);
promptAction.showToast({
message: $r('app.string.image_request_success'),
duration: 2000,
alignment:Alignment.Center
alignment: Alignment.Center
})
} catch (error) {
const err: BusinessError = error as BusinessError;
//console.info(`Failed to save photo. Code is ${err.code}, message is ${err.message}`);
promptAction.showToast({ message: '保存图片失败!' });
}
}
})
}
... ... @@ -55,10 +68,11 @@ export struct ImageDownloadComponent {
// 有网络
this.onChangeUrl()
}
}
async onChangeUrl(): Promise<void> {
console.info(`cj2024 图片下载 ${this.url}`)
//console.info(`cj2024 图片下载 ${this.url}`)
const context = getContext(this) as common.UIAbilityContext;
const atManager = abilityAccessCtrl.createAtManager();
await atManager.requestPermissionsFromUser(context, PERMISSIONS);
... ... @@ -73,7 +87,7 @@ export struct ImageDownloadComponent {
let httpRequest = http.createHttp();
// 用于订阅HTTP响应头事件
httpRequest.on('headersReceive', (header: Object) => {
console.info('header: ' + JSON.stringify(header));
//console.info('header: ' + JSON.stringify(header));
});
// 用于订阅HTTP流式响应数据接收事件
let res = new ArrayBuffer(0);
... ... @@ -83,18 +97,18 @@ export struct ImageDownloadComponent {
resView.set(new Uint8Array(res));
resView.set(new Uint8Array(data), res.byteLength);
res = newRes;
// console.info('dataReceive res length: ' + res.byteLength);
// //console.info('dataReceive res length: ' + res.byteLength);
});
// 用于订阅HTTP流式响应数据接收完毕事件
httpRequest.on('dataEnd', () => {
this.transcodePixelMap(res);
// 判断网络获取到的资源是否为ArrayBuffer类型
console.info(`dataEnd getPicture ${res}`)
//console.info(`dataEnd getPicture ${res}`)
if (res instanceof ArrayBuffer) {
console.info(`dataEnd getPicture`)
//console.info(`dataEnd getPicture`)
this.imageBuffer = res as ArrayBuffer;
}
console.info('No more data in response, data receive end');
//console.info('No more data in response, data receive end');
});
httpRequest.requestInStream(this.url,
(error: BusinessError, data: number) => {
... ... @@ -104,7 +118,7 @@ export struct ImageDownloadComponent {
message: $r('app.string.image_request_fail'),
duration: 2000
})
console.error(`http reqeust failed with. Code: ${error.code}, message: ${error.message}`);
//console.error(`http reqeust failed with. Code: ${error.code}, message: ${error.message}`);
return;
}
// 取消订阅HTTP响应头事件
... ... @@ -147,13 +161,39 @@ export struct ImageDownloadComponent {
* @returns
*/
async saveImage(buffer: ArrayBuffer | string): Promise<void> {
console.info(`cj2024 saveImage buffer ${buffer}`)
//console.info(`cj2024 saveImage buffer ${buffer}`)
if (!this.isGranted) {
//跳转权限设置
// const permissionUtil = new PermissionUtil();
PermissionUtil.reqPermissionsFromUser(['ohos.permission.READ_MEDIA'], this).then((res) => {
this.isGranted = res;
});
} else {
// PermissionUtil.openPermissionsInSystemSettings(this);
}
const context = getContext(this) as common.UIAbilityContext; // 获取getPhotoAccessHelper需要的context
const helper = photoAccessHelper.getPhotoAccessHelper(context); // 获取相册管理模块的实例
const uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg'); // 指定待创建的文件类型、后缀和创建选项,创建图片或视频资源
console.info(`cj2024 saveImage uri ${uri}`)
const file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
await fs.write(file.fd, buffer);
await fs.close(file.fd);
// const helper = photoAccessHelper.getPhotoAccessHelper(context); // 获取相册管理模块的实例
// const uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg'); // 指定待创建的文件类型、后缀和创建选项,创建图片或视频资源
// //console.info(`cj2024 saveImage uri ${uri}`)
// const file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
// await fs.write(file.fd, buffer);
// await fs.close(file.fd);
let media = mediaLibrary.getMediaLibrary(context);
let publicPath = await media.getPublicDirectory(mediaLibrary.DirectoryType.DIR_IMAGE);
let picName = DateTimeUtils.getCurDate(DateTimeUtils.PATTERN_DATE_TIME_DEFAULT) + '.jpg'
// //console.info(`cj2024 saveImage time ${picName}`)
let asset = await media.createAsset(mediaLibrary.MediaType.IMAGE, picName, publicPath);
if (asset) {
let fd = await asset.open('rw');
await fileIo.write(fd, buffer);
await asset.close(fd);
promptAction.showToast({ message: '已保存至相册!' });
} else {
promptAction.showToast({ message: '保存图片失败!' });
throw new Error('Failed to create asset');
}
}
}
\ No newline at end of file
... ...
... ... @@ -174,10 +174,10 @@ export struct PageComponent {
pageHornAd() {
if (this.pageAdvModel.isShowAds) {
if (this.pageAdvModel.pageCornerAdv.matInfo != null) {
if (this.pageAdvModel.pageCornerAdv.matInfo != null && this.pageAdvModel.pageCornerAdv.matInfo.linkType != '2') {
// 广告中心的挂角广告
this.drawPageCornerAdvView(1, 1 == this.pageAdvModel.isRightAdv)
} else if (this.pageAdvModel.pageCornerContentInfo.advert != null) {
} else if (this.pageAdvModel.pageCornerContentInfo.advert != null && this.pageAdvModel.pageCornerContentInfo.advert.objectType != '6') {
// 展现中心的挂角广告业务
this.drawPageCornerAdvView(2, 1 == this.pageAdvModel.isRightAdv)
}
... ...
... ... @@ -148,6 +148,7 @@ export struct PlayerTitleView {
private updateSummaryLines() {
this.summaryLines = Math.max(1, 4 - this.titleLines)
// console.info(`cj2024 titleLines = ${this.titleLines}`)
this.isOverLines = this.summary.length > this.clipText(this.summary, 14, this.summaryLines, this.windowWidth - 150 - vp2px(50)).length
}
... ... @@ -306,7 +307,9 @@ export struct PlayerTitleView {
}
}
.onAreaChange((oldArea: Area, newArea: Area) => {
this.titleLines = Math.ceil((newArea.height as number) / 20) // 20是行高
//console.info(`cj2024 titleLines = ${newArea.height as number} line = ${(newArea.height as number) / 20}`)
this.titleLines = Math.floor((newArea.height as number) / 20)// 20是行高
//console.info(`cj2024 titleLines = ${this.titleLines}`)
this.updateSummaryLines()
})
.padding({
... ...
... ... @@ -7,7 +7,7 @@
"license": "Apache-2.0",
"packageType": "InterfaceHar",
"dependencies": {
"library": "file:./src/main/ets/getuiPush/GTSDK-1.0.1.0.har",
"library": "file:./src/main/ets/getuiPush/GT-HM-1.0.4.har",
"wdConstant": "file:../../commons/wdConstant",
"wdLogin": "file:../../features/wdLogin",
"wdKit": "file:../../commons/wdKit",
... ...
... ... @@ -48,7 +48,7 @@ export class GetuiPush {
}
init(context: common.UIAbilityContext) {
Logger.debug(TAG, "个推SDK开始初始化....")
const isOnlineEnv = HostManager.getHost() === HostEnum.HOST_PRODUCT
PushManager.initialize({
... ...
... ... @@ -9,3 +9,5 @@ export { WDComp } from "./src/main/ets/layout/WDComp"
export { Lego } from "./src/main/ets/lego/LegoService"
export { PageViewModel } from "./src/main/ets/viewmodel/PageViewModel"
export * from "./src/main/etc/bean"
\ No newline at end of file
... ...
... ... @@ -5,12 +5,12 @@ import { LoginViewModel } from './LoginViewModel'
import { LoginInputComponent } from './LoginInputComponent'
import { WDRouterPage } from 'wdRouter/src/main/ets/router/WDRouterPage';
import { WDRouterRule } from 'wdRouter/src/main/ets/router/WDRouterRule';
import { Params } from '../../../../../../../commons/wdRouter/oh_modules/wdBean/src/main/ets/bean/content/Params'
import {InterestsHobbiesModel} from '../../../../../../../products/phone/src/main/ets/pages/viewModel/InterestsHobbiesModel'
import {InterestsHobbiesModel} from '../../bean/InterestsHobbiesModel'
import { TrackingPageBrowse, TrackConstants, TrackingButton, ParamType, Tracking } from 'wdTracking/Index'
import { window } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';
import { common } from '@kit.AbilityKit'
import { Params } from 'wdBean'
@Extend(Row)
function otherStyle() {
... ...
... ... @@ -5,7 +5,7 @@ import HuaweiAuth from '../../utils/HuaweiAuth'
import { BusinessError } from '@kit.BasicServicesKit'
import { Logger, ToastUtils, CustomToast, EmitterUtils, EmitterEventId } from 'wdKit/Index'
import { LoginViewModel } from './LoginViewModel'
import {InterestsHobbiesModel} from '../../../../../../../products/phone/src/main/ets/pages/viewModel/InterestsHobbiesModel'
import {InterestsHobbiesModel} from '../../bean/InterestsHobbiesModel'
import { TrackConstants, TrackingButton, TrackingPageBrowse } from 'wdTracking/Index'
import { loginComponentManager, LoginWithHuaweiIDButton } from '@kit.AccountKit'
import { JSON } from '@kit.ArkTS'
... ...
import {InterestsHobbiesModel, InterestsList} from '../viewModel/InterestsHobbiesModel'
import {InterestsHobbiesModel, InterestsList} from 'wdLogin/src/main/ets/bean/InterestsHobbiesModel'
import { WDRouterRule } from 'wdRouter';
import { WDRouterPage } from 'wdRouter';
import { NetworkUtil, SPHelper } from 'wdKit/Index';
... ...
... ... @@ -252,16 +252,18 @@ export class StartupManager {
private dealWithDeepLink(want: Want): boolean {
if (!want.parameters) {
return false
// H5换端地址
let innerLink = want["uri"] as string
if (innerLink && innerLink.length) {
return AppInnerLink.jumpWithLink(innerLink)
}
if (want.parameters) {
// 桌面组件换端
let deepLink = want.parameters[NewspaperWidgetCommon.JumpParam.DeepLinkKey] as string
if (deepLink && deepLink.length) {
AppInnerLink.jumpWithLink(deepLink)
return true
return AppInnerLink.jumpWithLink(deepLink)
}
}
return false
}
... ...
... ... @@ -29,7 +29,7 @@
"audioPlayback"
],
"skills": [
{
{ // App Linking 跳转
"entities": [
"entity.system.browsable"
],
... ... @@ -37,11 +37,6 @@
"ohos.want.action.viewData"
],
"uris": [
// { // 之前的 推送配置
// "scheme": 'rmrbapp',
// "host": 'rmrb.app',
// 'port': '8080',
// "path": 'openwith'}
{
"scheme": "https",
"host": "pd-people-uat.pdnews.cn",
... ... @@ -145,39 +140,39 @@
],
"domainVerify": true
},
{
{ // 默认的
"entities": [
"entity.system.home",
],
"actions": [
"com.test.pushaction",
"action.system.home",
],
},
{"uris": [
{ // 推送配置 - (播控中心共用)
{ // H5换端
"actions": [
"ohos.want.action.viewData"
],
"uris": [
{
"scheme": "rmrbapp",
"host": "rmrb.app",
"path": "openwith"
},
]},
{ // 推送
"actions": [
"com.test.pushaction"
],
"uris": [
{
"scheme": 'rmrbapp',
"host": 'rmrb.app',
'port': '8080',
"path": 'openwith'
}
]
},
{ // 普通配置 - 暂时无法跳转 - ??
"scheme": "rmrbapp",
"host": "rmrb.app",
"path": "openwith"
},
// { // 分享用 - 正式环境地址
// "scheme": "https",
// "host": "www.peopleapp.com",
// "pathStartWith": "column"
// },
// { // 分享用 - 测试环境地址
// "scheme": "https",
// "host": "pd-people-uat.pdnews.cn",
//// "pathStartWith": "column"
// }
]}
]
}
],
... ...