Commit 59bcf064228b3653fad24e9cfff5ee93f0f3e864

Authored by 常守达
1 parent 11c8fd00

feat(ohos): 忽略鸿蒙文件

... ... @@ -45,3 +45,4 @@ app.*.map.json
/android/app/profile
/android/app/release
/scripts/
/ohos/
... ...
/*
* // Copyright 2013 The Flutter Authors. All rights reserved.
*/
import StandardMessageCodec from '@ohos/flutter_ohos/src/main/ets/plugin/common/StandardMessageCodec';
import BasicMessageChannel, { Reply } from '@ohos/flutter_ohos/src/main/ets/plugin/common/BasicMessageChannel';
import { BinaryMessenger,TaskQueue } from '@ohos/flutter_ohos/src/main/ets/plugin/common/BinaryMessenger';
import MessageCodec from '@ohos/flutter_ohos/src/main/ets/plugin/common/MessageCodec';
import { ByteBuffer } from '@ohos/flutter_ohos/src/main/ets/util/ByteBuffer';
/** Error class for passing custom error details to Flutter via a thrown PlatformException. */
export class FlutterError implements Error {
/** The error code. */
public code: string;
/** The error name. */
public name: string;
/** The error message. */
public message: string;
/** The error stack. */
public stack?: string;
constructor(code: string, name: string, message: string, stack?: string)
{
this.code = code;
this.name = name;
this.message = message;
this.stack = stack;
}
}
function wrapError(error: Error): Array<Object> {
let errorList: Array<Object> = new Array<Object>(3);
if (error instanceof FlutterError) {
let err: FlutterError = error as FlutterError;
errorList[0] = err.code;
errorList[1] = err.name;
errorList[2] = err.message;
} else {
errorList[0] = error.toString();
errorList[1] = error.name;
errorList[2] = "Cause: " + error.message + ", Stacktrace: " + error.stack;
}
return errorList;
}
/*
* Alipay payment result codes.
*
* Generated enum from Pigeon that represents data sent in messages.
*/
export enum AliPayResultCode {
SUCCESS,
CANCEL,
ERROR,
UNSUPPORTED
}
/*
* Alipay payment result codes.
*
* Generated enum Companion class from Pigeon that represents data sent
in messages.Do not delete otherwise enum type data transfer will be failed
*/
export class AliPayResultCodeEnum {
index: string|null = null;
constructor(index: string){
this.index = index;
}
}
export class PigeonCodec extends StandardMessageCodec {
static readonly INSTANCE: PigeonCodec = new PigeonCodec();
getByte(n: number): number {
let byteArray = new Uint8Array(1);
byteArray[0] = n;
return byteArray[0] as number;
}
private constructor() {
super();
}
readValueOfType(type: number, buffer: ByteBuffer): ESObject {
switch (type) {
case this.getByte(129): {
let value: Object= super.readValue(buffer);
return value == null ? null : AliPayResultCode[value as number];
}
default:
return super.readValueOfType(type, buffer);
}
}
writeValue(stream: ByteBuffer , value: ESObject): ESObject{
if (value instanceof AliPayResultCodeEnum) {
stream.writeUint8(this.getByte(129));
this.writeValue(stream, value == null ? null : AliPayResultCode[value.index as string]);
} else {
super.writeValue(stream, value);
}
}
}
/* Generated abstract class from Pigeon that represents a handler of messages from Flutter.*/
export abstract class AlipayHostApi {
abstract launchAliPay(prepayData: string ): AliPayResultCode;
/** The codec used by AlipayHostApi. */
static getCodec(): MessageCodec<Object>{
return PigeonCodec.INSTANCE;
}
/*Sets up an instance of `AlipayHostApi` to handle messages through the `binaryMessenger`.*/
static setup(binaryMessenger: BinaryMessenger, api: AlipayHostApi | null): void {
{
let channel: BasicMessageChannel<Object> =
new BasicMessageChannel(
binaryMessenger, "dev.flutter.pigeon.doublefeel_flutter.AlipayHostApi.launchAliPay", AlipayHostApi.getCodec());
if (api != null) {
channel.setMessageHandler({
onMessage(message: Object ,reply: Reply<Object> ) {
let args: Array<Object> = message as Array<Object>;
let res: Array<Object> = [];
try {
let output: AliPayResultCodeEnum = new AliPayResultCodeEnum(api!.launchAliPay(args[0] as AliPayResultCode).toString());
res.push(output);
}
catch (error) {
let wrappedError: Array<Object> = wrapError(error);
res = wrappedError;
}
reply.reply(res);
} });
} else {
channel.setMessageHandler(null);
}
}
}
}
/*
* // Copyright 2013 The Flutter Authors. All rights reserved.
*/
import StandardMessageCodec from '@ohos/flutter_ohos/src/main/ets/plugin/common/StandardMessageCodec';
import BasicMessageChannel, { Reply } from '@ohos/flutter_ohos/src/main/ets/plugin/common/BasicMessageChannel';
import { BinaryMessenger,TaskQueue } from '@ohos/flutter_ohos/src/main/ets/plugin/common/BinaryMessenger';
import MessageCodec from '@ohos/flutter_ohos/src/main/ets/plugin/common/MessageCodec';
import { ByteBuffer } from '@ohos/flutter_ohos/src/main/ets/util/ByteBuffer';
/** Error class for passing custom error details to Flutter via a thrown PlatformException. */
export class FlutterError implements Error {
/** The error code. */
public code: string;
/** The error name. */
public name: string;
/** The error message. */
public message: string;
/** The error stack. */
public stack?: string;
constructor(code: string, name: string, message: string, stack?: string)
{
this.code = code;
this.name = name;
this.message = message;
this.stack = stack;
}
}
function wrapError(error: Error): Array<Object> {
let errorList: Array<Object> = new Array<Object>(3);
if (error instanceof FlutterError) {
let err: FlutterError = error as FlutterError;
errorList[0] = err.code;
errorList[1] = err.name;
errorList[2] = err.message;
} else {
errorList[0] = error.toString();
errorList[1] = error.name;
errorList[2] = "Cause: " + error.message + ", Stacktrace: " + error.stack;
}
return errorList;
}
/* Generated class from Pigeon that represents data sent in messages.*/
export class HealthUploadResult {
private commonUploadSuccess?: boolean;
public setCommonUploadSuccess(commonUploadSuccess:boolean):void {
this.commonUploadSuccess = commonUploadSuccess;
}
getCommonUploadSuccess(): boolean | undefined{
return this.commonUploadSuccess;
}
private sleepUploadSuccess?: boolean;
public setSleepUploadSuccess(sleepUploadSuccess:boolean):void {
this.sleepUploadSuccess = sleepUploadSuccess;
}
getSleepUploadSuccess(): boolean | undefined{
return this.sleepUploadSuccess;
}
private errorMessage?: string;
public setErrorMessage(errorMessage:string):void {
this.errorMessage = errorMessage;
}
getErrorMessage(): string | undefined{
return this.errorMessage;
}
constructor(commonUploadSuccess?: boolean, sleepUploadSuccess?: boolean, errorMessage?: string) {
this.commonUploadSuccess = commonUploadSuccess;
this.sleepUploadSuccess = sleepUploadSuccess;
this.errorMessage = errorMessage;
}
toList(): Object[] {
let arr: Object[] = new Array();
if(this.commonUploadSuccess !==undefined){
arr.push(this.commonUploadSuccess);
}
if(this.sleepUploadSuccess !==undefined){
arr.push(this.sleepUploadSuccess);
}
if(this.errorMessage !==undefined){
arr.push(this.errorMessage);
}
return arr;
}
static fromList(arr: Object[]): HealthUploadResult {
let pigeonResult: HealthUploadResult = new HealthUploadResult();
let commonUploadSuccess: Object = arr[0];
pigeonResult.setCommonUploadSuccess(commonUploadSuccess as boolean);
let sleepUploadSuccess: Object = arr[1];
pigeonResult.setSleepUploadSuccess(sleepUploadSuccess as boolean);
let errorMessage: Object = arr[2];
pigeonResult.setErrorMessage(errorMessage as string);
return pigeonResult;
}
}
export class PigeonCodec extends StandardMessageCodec {
static readonly INSTANCE: PigeonCodec = new PigeonCodec();
getByte(n: number): number {
let byteArray = new Uint8Array(1);
byteArray[0] = n;
return byteArray[0] as number;
}
private constructor() {
super();
}
readValueOfType(type: number, buffer: ByteBuffer): ESObject {
switch (type) {
case this.getByte(129):
return HealthUploadResult.fromList(super.readValue(buffer) as Object[]);
default:
return super.readValueOfType(type, buffer);
}
}
writeValue(stream: ByteBuffer , value: ESObject): ESObject{
if (value instanceof HealthUploadResult) {
stream.writeUint8(this.getByte(129));
this.writeValue(stream, (value as HealthUploadResult).toList());
} else {
super.writeValue(stream, value);
}
}
}
/* Generated abstract class from Pigeon that represents a handler of messages from Flutter.*/
export abstract class HealthKitHostApi {
abstract checkHealthAppAuthorization(): boolean;
abstract getHealthServerAuthUrl(): string;
/* Opens Huawei Health client authorization UI. Returns whether user granted.*/
abstract requestHealthClientAuthorization(): boolean;
abstract cancelHealthAppAuthorization(): boolean;
/* Runs native health read and server upload pipeline.*/
abstract performHealthUpload(): HealthUploadResult;
/** The codec used by HealthKitHostApi. */
static getCodec(): MessageCodec<Object>{
return PigeonCodec.INSTANCE;
}
/*Sets up an instance of `HealthKitHostApi` to handle messages through the `binaryMessenger`.*/
static setup(binaryMessenger: BinaryMessenger, api: HealthKitHostApi | null): void {
{
let channel: BasicMessageChannel<Object> =
new BasicMessageChannel(
binaryMessenger, "dev.flutter.pigeon.doublefeel_flutter.HealthKitHostApi.checkHealthAppAuthorization", HealthKitHostApi.getCodec());
if (api != null) {
channel.setMessageHandler({
onMessage(message: Object ,reply: Reply<Object> ) {
let res: Array<Object> = [];
try {
let output: boolean = api!.checkHealthAppAuthorization();
res.push(output);
}
catch (error) {
let wrappedError: Array<Object> = wrapError(error);
res = wrappedError;
}
reply.reply(res);
} });
} else {
channel.setMessageHandler(null);
}
}
{
let channel: BasicMessageChannel<Object> =
new BasicMessageChannel(
binaryMessenger, "dev.flutter.pigeon.doublefeel_flutter.HealthKitHostApi.getHealthServerAuthUrl", HealthKitHostApi.getCodec());
if (api != null) {
channel.setMessageHandler({
onMessage(message: Object ,reply: Reply<Object> ) {
let res: Array<Object> = [];
try {
let output: string = api!.getHealthServerAuthUrl();
res.push(output);
}
catch (error) {
let wrappedError: Array<Object> = wrapError(error);
res = wrappedError;
}
reply.reply(res);
} });
} else {
channel.setMessageHandler(null);
}
}
{
let channel: BasicMessageChannel<Object> =
new BasicMessageChannel(
binaryMessenger, "dev.flutter.pigeon.doublefeel_flutter.HealthKitHostApi.requestHealthClientAuthorization", HealthKitHostApi.getCodec());
if (api != null) {
channel.setMessageHandler({
onMessage(message: Object ,reply: Reply<Object> ) {
let res: Array<Object> = [];
try {
let output: boolean = api!.requestHealthClientAuthorization();
res.push(output);
}
catch (error) {
let wrappedError: Array<Object> = wrapError(error);
res = wrappedError;
}
reply.reply(res);
} });
} else {
channel.setMessageHandler(null);
}
}
{
let channel: BasicMessageChannel<Object> =
new BasicMessageChannel(
binaryMessenger, "dev.flutter.pigeon.doublefeel_flutter.HealthKitHostApi.cancelHealthAppAuthorization", HealthKitHostApi.getCodec());
if (api != null) {
channel.setMessageHandler({
onMessage(message: Object ,reply: Reply<Object> ) {
let res: Array<Object> = [];
try {
let output: boolean = api!.cancelHealthAppAuthorization();
res.push(output);
}
catch (error) {
let wrappedError: Array<Object> = wrapError(error);
res = wrappedError;
}
reply.reply(res);
} });
} else {
channel.setMessageHandler(null);
}
}
{
let channel: BasicMessageChannel<Object> =
new BasicMessageChannel(
binaryMessenger, "dev.flutter.pigeon.doublefeel_flutter.HealthKitHostApi.performHealthUpload", HealthKitHostApi.getCodec());
if (api != null) {
channel.setMessageHandler({
onMessage(message: Object ,reply: Reply<Object> ) {
let res: Array<Object> = [];
try {
let output: HealthUploadResult = api!.performHealthUpload();
res.push(output);
}
catch (error) {
let wrappedError: Array<Object> = wrapError(error);
res = wrappedError;
}
reply.reply(res);
} });
} else {
channel.setMessageHandler(null);
}
}
}
}
/*
* // Copyright 2013 The Flutter Authors. All rights reserved.
*/
import StandardMessageCodec from '@ohos/flutter_ohos/src/main/ets/plugin/common/StandardMessageCodec';
import BasicMessageChannel, { Reply } from '@ohos/flutter_ohos/src/main/ets/plugin/common/BasicMessageChannel';
import { BinaryMessenger,TaskQueue } from '@ohos/flutter_ohos/src/main/ets/plugin/common/BinaryMessenger';
import MessageCodec from '@ohos/flutter_ohos/src/main/ets/plugin/common/MessageCodec';
import { ByteBuffer } from '@ohos/flutter_ohos/src/main/ets/util/ByteBuffer';
/** Error class for passing custom error details to Flutter via a thrown PlatformException. */
export class FlutterError implements Error {
/** The error code. */
public code: string;
/** The error name. */
public name: string;
/** The error message. */
public message: string;
/** The error stack. */
public stack?: string;
constructor(code: string, name: string, message: string, stack?: string)
{
this.code = code;
this.name = name;
this.message = message;
this.stack = stack;
}
}
function wrapError(error: Error): Array<Object> {
let errorList: Array<Object> = new Array<Object>(3);
if (error instanceof FlutterError) {
let err: FlutterError = error as FlutterError;
errorList[0] = err.code;
errorList[1] = err.name;
errorList[2] = err.message;
} else {
errorList[0] = error.toString();
errorList[1] = error.name;
errorList[2] = "Cause: " + error.message + ", Stacktrace: " + error.stack;
}
return errorList;
}
/* Generated class from Pigeon that represents data sent in messages.*/
export class WearDeviceInfo {
private deviceId?: string;
public setDeviceId(deviceId:string):void {
this.deviceId = deviceId;
}
getDeviceId(): string | undefined{
return this.deviceId;
}
private deviceName?: string;
public setDeviceName(deviceName:string):void {
this.deviceName = deviceName;
}
getDeviceName(): string | undefined{
return this.deviceName;
}
private isConnected?: boolean;
public setIsConnected(isConnected:boolean):void {
this.isConnected = isConnected;
}
getIsConnected(): boolean | undefined{
return this.isConnected;
}
constructor(deviceId?: string, deviceName?: string, isConnected?: boolean) {
this.deviceId = deviceId;
this.deviceName = deviceName;
this.isConnected = isConnected;
}
toList(): Object[] {
let arr: Object[] = new Array();
if(this.deviceId !==undefined){
arr.push(this.deviceId);
}
if(this.deviceName !==undefined){
arr.push(this.deviceName);
}
if(this.isConnected !==undefined){
arr.push(this.isConnected);
}
return arr;
}
static fromList(arr: Object[]): WearDeviceInfo {
let pigeonResult: WearDeviceInfo = new WearDeviceInfo();
let deviceId: Object = arr[0];
pigeonResult.setDeviceId(deviceId as string);
let deviceName: Object = arr[1];
pigeonResult.setDeviceName(deviceName as string);
let isConnected: Object = arr[2];
pigeonResult.setIsConnected(isConnected as boolean);
return pigeonResult;
}
}
export class PigeonCodec extends StandardMessageCodec {
static readonly INSTANCE: PigeonCodec = new PigeonCodec();
getByte(n: number): number {
let byteArray = new Uint8Array(1);
byteArray[0] = n;
return byteArray[0] as number;
}
private constructor() {
super();
}
readValueOfType(type: number, buffer: ByteBuffer): ESObject {
switch (type) {
case this.getByte(129):
return WearDeviceInfo.fromList(super.readValue(buffer) as Object[]);
default:
return super.readValueOfType(type, buffer);
}
}
writeValue(stream: ByteBuffer , value: ESObject): ESObject{
if (value instanceof WearDeviceInfo) {
stream.writeUint8(this.getByte(129));
this.writeValue(stream, (value as WearDeviceInfo).toList());
} else {
super.writeValue(stream, value);
}
}
}
/* Generated abstract class from Pigeon that represents a handler of messages from Flutter.*/
export abstract class WearEngineHostApi {
abstract hasAvailableDevices(): boolean;
abstract checkConnectedDevice(): WearDeviceInfo;
abstract registerMessageReceiver(): boolean;
abstract sendTextMessage(message: string ): boolean;
abstract sendWatchSyncPayload(jsonPayload: string ): boolean;
/** The codec used by WearEngineHostApi. */
static getCodec(): MessageCodec<Object>{
return PigeonCodec.INSTANCE;
}
/*Sets up an instance of `WearEngineHostApi` to handle messages through the `binaryMessenger`.*/
static setup(binaryMessenger: BinaryMessenger, api: WearEngineHostApi | null): void {
{
let channel: BasicMessageChannel<Object> =
new BasicMessageChannel(
binaryMessenger, "dev.flutter.pigeon.doublefeel_flutter.WearEngineHostApi.hasAvailableDevices", WearEngineHostApi.getCodec());
if (api != null) {
channel.setMessageHandler({
onMessage(message: Object ,reply: Reply<Object> ) {
let res: Array<Object> = [];
try {
let output: boolean = api!.hasAvailableDevices();
res.push(output);
}
catch (error) {
let wrappedError: Array<Object> = wrapError(error);
res = wrappedError;
}
reply.reply(res);
} });
} else {
channel.setMessageHandler(null);
}
}
{
let channel: BasicMessageChannel<Object> =
new BasicMessageChannel(
binaryMessenger, "dev.flutter.pigeon.doublefeel_flutter.WearEngineHostApi.checkConnectedDevice", WearEngineHostApi.getCodec());
if (api != null) {
channel.setMessageHandler({
onMessage(message: Object ,reply: Reply<Object> ) {
let res: Array<Object> = [];
try {
let output: WearDeviceInfo = api!.checkConnectedDevice();
res.push(output);
}
catch (error) {
let wrappedError: Array<Object> = wrapError(error);
res = wrappedError;
}
reply.reply(res);
} });
} else {
channel.setMessageHandler(null);
}
}
{
let channel: BasicMessageChannel<Object> =
new BasicMessageChannel(
binaryMessenger, "dev.flutter.pigeon.doublefeel_flutter.WearEngineHostApi.registerMessageReceiver", WearEngineHostApi.getCodec());
if (api != null) {
channel.setMessageHandler({
onMessage(message: Object ,reply: Reply<Object> ) {
let res: Array<Object> = [];
try {
let output: boolean = api!.registerMessageReceiver();
res.push(output);
}
catch (error) {
let wrappedError: Array<Object> = wrapError(error);
res = wrappedError;
}
reply.reply(res);
} });
} else {
channel.setMessageHandler(null);
}
}
{
let channel: BasicMessageChannel<Object> =
new BasicMessageChannel(
binaryMessenger, "dev.flutter.pigeon.doublefeel_flutter.WearEngineHostApi.sendTextMessage", WearEngineHostApi.getCodec());
if (api != null) {
channel.setMessageHandler({
onMessage(message: Object ,reply: Reply<Object> ) {
let args: Array<Object> = message as Array<Object>;
let res: Array<Object> = [];
try {
let output: boolean = api!.sendTextMessage(args[0] as string);
res.push(output);
}
catch (error) {
let wrappedError: Array<Object> = wrapError(error);
res = wrappedError;
}
reply.reply(res);
} });
} else {
channel.setMessageHandler(null);
}
}
{
let channel: BasicMessageChannel<Object> =
new BasicMessageChannel(
binaryMessenger, "dev.flutter.pigeon.doublefeel_flutter.WearEngineHostApi.sendWatchSyncPayload", WearEngineHostApi.getCodec());
if (api != null) {
channel.setMessageHandler({
onMessage(message: Object ,reply: Reply<Object> ) {
let args: Array<Object> = message as Array<Object>;
let res: Array<Object> = [];
try {
let output: boolean = api!.sendWatchSyncPayload(args[0] as string);
res.push(output);
}
catch (error) {
let wrappedError: Array<Object> = wrapError(error);
res = wrappedError;
}
reply.reply(res);
} });
} else {
channel.setMessageHandler(null);
}
}
}
}
import { PlatformHostApi } from '../pigeon/PlatformApi';
import { bundleManager } from '@kit.AbilityKit';
import { deviceInfo } from '@kit.BasicServicesKit';
import { display } from '@kit.ArkUI';
import { web_webview } from '@kit.ArkWeb';
/**
* PlatformApi HarmonyOS implementation.
*
* 组装完整 User-Agent,格式与 Android 端保持一致:
* `{systemWebViewUA} doublefeel/{versionCode}({versionName})({manufacturer}##{brand}##{model}; OpenHarmony{osVersion}; {height}x{width})(huawei)`
*/
export class PlatformHostApiImpl extends PlatformHostApi {
getFullUserAgent(): string {
// 1. 系统 WebView UA
let systemUa = '';
try {
systemUa = web_webview.WebviewController.getDefaultUserAgent();
} catch (_) {
systemUa = '';
}
// 2. 版本信息(同步读取 bundleInfo)
let versionCode = 0;
let versionName = '';
try {
const bundleInfo = bundleManager.getBundleInfoForSelfSync(
bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT
);
versionCode = bundleInfo.versionCode;
versionName = bundleInfo.versionName;
} catch (_) {}
// 3. 设备信息(@ohos.deviceInfo 常量,无需异步)
const manufacturer: string = deviceInfo.manufacture ?? '';
const brand: string = deviceInfo.brand ?? '';
const model: string = deviceInfo.productModel ?? '';
// osFullName 示例:"OpenHarmony 4.1.0",取主版本号数字部分
const osVersion: string = deviceInfo.osFullName.replace(/[^0-9]/g, '') ?? '';
// 4. 屏幕物理分辨率:长边为 height,短边为 width
let screenWidth = 0;
let screenHeight = 0;
try {
const defaultDisplay = display.getDefaultDisplaySync();
const w = defaultDisplay.width;
const h = defaultDisplay.height;
screenWidth = Math.min(w, h);
screenHeight = Math.max(w, h);
} catch (_) {}
// 5. 组装 customAgent(与 Android DeviceInfoUtils.userAgent 格式一致)
const customAgent =
`doublefeel/${versionCode}(${versionName})` +
`(${manufacturer}##${brand}##${model}; OpenHarmony${osVersion}; ${screenHeight}x${screenWidth})` +
`(huawei)`;
const full = `${systemUa.trim()} ${customAgent}`.trim();
return full;
}
}