提交 4881020e 编写于 作者: M mamingshuai

update openharmony 1.0.1

上级 5f159aea
### 该问题是怎么引起的?
### 重现步骤
### 报错信息
### 相关的Issue
### 原因(目的、解决的问题等)
### 描述(做了什么,变更了什么)
### 测试用例(新增、改动、可能影响的功能)
communication
screensaver
\ No newline at end of file
此差异已折叠。
# CAMERA\_SAMPLE\_APP<a name="EN-US_TOPIC_0000001080462608"></a>
- [Introduction](#section11660541593)
- [Directory Structure](#section176641621345)
- [Usage](#section1648194512427)
- [Constraints](#section722512541395)
- [Repositories Involved](#section16511040154318)
## Introduction<a name="section11660541593"></a>
This repository provides media-related applications, such as the home screen and settings.
**Figure 1** Position of this repository \(in the dotted blue box\) in the multimedia subsystem<a name="fig189881143114217"></a>
![](figures/position-of-this-repository-(in-the-dotted-blue-box)-in-the-multimedia-subsystem.png "position-of-this-repository-(in-the-dotted-blue-box)-in-the-multimedia-subsystem")
## Directory Structure<a name="section176641621345"></a>
```
applications/sample/camera
├── cameraApp # Camera app
├── gallery # Photo gallery
├── launcher # Home screen
├── media # Apps of photographing, video recording, and audio and video playback
└── setting # Settings
```
## Usage<a name="section1648194512427"></a>
Build a single repository in the root directory.
```
# Select the development board.
hb set
# Build this repository.
hb build camera_lite
```
## Constraints<a name="section722512541395"></a>
C++ 11 or later
## Repositories Involved<a name="section16511040154318"></a>
/hmf/multimedia/camera\_lite
/hmf/multimedia/audio\_lite
/hmf/multimedia/media\_lite
/hmf/multimedia/utils\_lite
/hmf/multimedia/service\_lite
# 媒体子系统CAMERA\_SAMPLE\_APP组件<a name="ZH-CN_TOPIC_0000001080462608"></a>
- [简介](#section11660541593)
- [目录](#section176641621345)
- [使用说明](#section1648194512427)
- [约束](#section722512541395)
- [相关仓](#section16511040154318)
## 简介<a name="section11660541593"></a>
CAMERA\_SAMPLE\_APP组件,提供媒体能力开发的相关应用,提供桌面应用和设置应用。
**图 1** 媒体子系统架构(蓝色虚线框是sample\_app)<a name="fig189881143114217"></a>
![](figures/媒体子系统架构(蓝色虚线框是sample_app).png "媒体子系统架构(蓝色虚线框是sample_app)")
## 目录<a name="section176641621345"></a>
```
applications/sample/camera
├── cameraApp 相机应用
├── gallery 图库应用
├── launcher 桌面应用
├── media 拍照录像应用和音视频播放应用
└── setting 设置
```
## 使用说明<a name="section1648194512427"></a>
单仓的编译构建,在根目录下进行单仓的构建和编译
```
# 开发板选择
hb set
# 单仓构建和编译
hb build camera_lite
```
## 约束<a name="section722512541395"></a>
C++11版本或以上
## 相关仓<a name="section16511040154318"></a>
/hmf/multimedia/camera\_lite
/hmf/multimedia/audio\_lite
/hmf/multimedia/media\_lite
/hmf/multimedia/utils\_lite
/hmf/multimedia/service\_lite
# Copyright (c) 2020 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//build/lite/config/component/lite_component.gni")
import("//build/lite/ndk/ndk.gni")
static_library("hello_world") {
sources = [
"src/helloworld.c",
"src/los_sample.c"
]
include_dirs = [
"include",
]
}
lite_component("camera_app") {
target_type = "executable"
features = [
":hello_world",
]
}
ndk_lib("app_sample") {
deps = [
":hello_world"
]
head_files = [
"include"
]
}
/*
* Copyright (c) 2020 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _LOS_SAMPLE_H
#define _LOS_SAMPLE_H
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
extern int g_num;
extern void LOS_Sample(int param);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _LOS_SAMPLE_H */
\ No newline at end of file
/*
* Copyright (c) 2020 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <stdio.h>
#include "los_sample.h"
int main(int argc, char **argv)
{
printf("\n************************************************\n");
printf("\n\t\tHello OHOS!\n");
printf("\n************************************************\n\n");
LOS_Sample(g_num);
return 0;
}
/*
* Copyright (c) 2020 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <stdio.h>
int g_num = 81;
void LOS_Sample(int param)
{
printf("This is a sample: Param = %d\n", param);
}
......@@ -11,68 +11,59 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import("//build/lite/config/component/lite_component.gni")
import("//build/lite/config/hap_pack.gni")
shared_library("cameraApp") {
sources = [
"cameraApp/src/main/cpp/camera_ability.cpp",
"cameraApp/src/main/cpp/camera_ability_slice.cpp",
"cameraApp/src/main/cpp/camera_manager.cpp"
]
sources = [
"cameraApp/src/main/cpp/camera_ability.cpp",
"cameraApp/src/main/cpp/camera_ability_slice.cpp",
"cameraApp/src/main/cpp/camera_manager.cpp",
]
deps = [
"//foundation/aafwk/frameworks/ability_lite:aafwk_abilitykit_lite",
"//foundation/appexecfwk/frameworks/bundle_lite:bundle",
"//foundation/communication/frameworks/ipc_lite:liteipc_adapter",
"//foundation/distributedschedule/services/samgr_lite/samgr:samgr",
"//utils/native/lite/kv_store:kv_store",
"//foundation/graphic/lite/frameworks/ui:ui",
"//foundation/graphic/lite/utils:graphic_utils",
"//foundation/graphic/lite/frameworks/surface",
"//foundation/multimedia/frameworks/camera_lite:camera",
"//foundation/multimedia/frameworks/recorder_lite:recorder",
]
deps = [
"${aafwk_lite_path}/frameworks/ability_lite:aafwk_abilitykit_lite",
"${appexecfwk_lite_path}/frameworks/bundle_lite:bundle",
"//foundation/communication/ipc_lite:liteipc_adapter",
"//foundation/distributedschedule/samgr_lite/samgr:samgr",
"//foundation/graphic/surface",
"//foundation/graphic/ui:lite_ui",
"//foundation/graphic/utils:lite_graphic_utils",
"//foundation/multimedia/camera_lite/frameworks:camera_lite",
"//foundation/multimedia/media_lite/frameworks/recorder_lite:recorder_lite",
"//utils/native/lite/kv_store:kv_store",
]
include_dirs = [
"cameraApp/src/main/cpp",
"//foundation/aafwk/interfaces/kits/ability_lite",
"//foundation/graphic/lite/interfaces/kits/ui/components",
"//foundation/graphic/lite/interfaces/kits/ui",
"//foundation/graphic/lite/interfaces/kits/utils",
"//foundation/graphic/lite/interfaces/kits/config",
"//foundation/appexecfwk/interfaces/kits/bundle_lite",
"//foundation/aafwk/interfaces/kits/want_lite",
"//base/startup/interfaces/kits/syspara_lite",
"//foundation/multimedia/interfaces/kits/camera_lite",
"//foundation/multimedia/interfaces/kits/camera_lite"
]
ldflags = [
"-L$ohos_root_path/sysroot/usr/lib",
"-Wl,-rpath-link=$ohos_root_path/sysroot/usr/lib",
"-lstdc++", "-lcamera", "-lsurface", "-lrecorder"
]
defines = [
"ENABLE_WINDOW=1",
"ABILITY_WINDOW_SUPPORT"
]
include_dirs = [
"cameraApp/src/main/cpp",
"${aafwk_lite_path}/interfaces/kits/ability_lite",
"${appexecfwk_lite_path}/interfaces/kits/bundle_lite",
"${aafwk_lite_path}/interfaces/kits/want_lite",
"//base/startup/syspara_lite/interfaces/kits",
"//foundation/multimedia/camera_lite/interfaces/kits",
"//foundation/multimedia/camera_lite/interfaces/kits",
]
ldflags = [
"-L$ohos_root_path/sysroot/usr/lib",
"-Wl,-rpath-link=$ohos_root_path/sysroot/usr/lib",
"-lstdc++",
"-lcamera_lite",
"-lsurface",
"-lrecorder_lite",
]
defines = [
"ENABLE_WINDOW=1",
"ABILITY_WINDOW_SUPPORT",
]
}
lite_component("cameraApp_component") {
features = [
":cameraApp",
]
}
hap_pack("cameraApp_hap")
{
deps = [":cameraApp"]
mode = "hap"
json_path = "cameraApp/src/main/config.json"
ability_so_path = "$root_out_dir/libcameraApp.so"
force = "true"
cert_profile = "cert/camera_HarmonyAppProvision_Release.p7b"
resources_path = "cameraApp/src/main/resources"
hap_name = "cameraApp"
hap_pack("cameraApp_hap") {
deps = [ ":cameraApp" ]
mode = "hap"
json_path = "cameraApp/src/main/config.json"
ability_so_path = "$root_out_dir/libcameraApp.so"
force = "true"
cert_profile = "cert/camera_HarmonyAppProvision_Release.p7b"
resources_path = "cameraApp/src/main/resources"
hap_name = "cameraApp"
privatekey = "HOS Application Provision Release"
}
{
"app": {
"bundleName": "com.huawei.camera",
"vendor": "huawei",
"version": {
"code": 2,
"name": "2"
},
"apiVersion": {
"compatible": 3,
"target": 4
}
},
"deviceConfig": {
"default": {
}
},
"module": {
"package": "com.huawei.camera",
"name": ".MyHarmonyAbilityPackage",
"deviceType": [
"phone",
"tv",
"tablet",
"pc",
"car",
"smartWatch",
"sportsWatch",
"smartVision"
],
"distro": {
"deliveryWithInstall": true,
"moduleName": "cameraApp",
"moduleType": "entry"
},
"abilities": [
{
"name": "CameraAbility",
"icon": "assets/cameraApp/resources/base/media/camera.png",
"label": "test app 1",
"launchType": "standard",
"type": "page",
"visible": true
}
],
"reqPermissions": [
{
"name": "ohos.permission.CAMERA",
"reason": "USER_GRANT",
"usedScene": {
"ability": [
".FormAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.MODIFY_AUDIO_SETTINGS",
"reason": "SYSTEM_GRANT",
"usedScene": {
"ability": [
".FormAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.READ_MEDIA",
"reason": "USER_GRANT",
"usedScene": {
"ability": [
".FormAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.MICROPHONE",
"reason": "USER_GRANT",
"usedScene": {
"ability": [
".FormAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.WRITE_MEDIA",
"reason": "USER_GRANT",
"usedScene": {
"ability": [
".FormAbility"
],
"when": "inuse"
}
}
]
}
}
{
"app": {
"bundleName": "com.huawei.camera",
"vendor": "huawei",
"version": {
"code": 2,
"name": "2"
},
"apiVersion": {
"compatible": 3,
"target": 4
}
},
"deviceConfig": {
"default": {
}
},
"module": {
"package": "com.huawei.camera",
"name": ".MyHarmonyAbilityPackage",
"deviceType": [
"phone",
"tv",
"tablet",
"pc",
"car",
"smartWatch",
"sportsWatch",
"smartVision"
],
"distro": {
"deliveryWithInstall": true,
"moduleName": "cameraApp",
"moduleType": "entry"
},
"abilities": [
{
"name": "CameraAbility",
"icon": "assets/cameraApp/resources/base/media/camera.png",
"label": "test app 1",
"launchType": "standard",
"type": "page",
"visible": true
}
],
"reqPermissions": [
{
"name": "ohos.permission.CAMERA",
"reason": "USER_GRANT",
"usedScene": {
"ability": [
".FormAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.MODIFY_AUDIO_SETTINGS",
"reason": "SYSTEM_GRANT",
"usedScene": {
"ability": [
".FormAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.READ_MEDIA",
"reason": "USER_GRANT",
"usedScene": {
"ability": [
".FormAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.MICROPHONE",
"reason": "USER_GRANT",
"usedScene": {
"ability": [
".FormAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.WRITE_MEDIA",
"reason": "USER_GRANT",
"usedScene": {
"ability": [
".FormAbility"
],
"when": "inuse"
}
}
]
}
}
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
......@@ -36,8 +36,8 @@ class SliderAnimator : public Animator, public AnimatorCallback {
public:
explicit SliderAnimator(UISlider *slider, UIImageView *backview, UISurfaceView *surface,
SampleCameraManager *cManager, uint16_t duration)
: Animator(this, slider, duration, true), slider_(slider), backgroundView_(backview), mSurfaceview(surface),
camManager(cManager), duration_(duration) {}
: Animator(this, slider, duration, true), backgroundView_(backview), mSurfaceview(surface),
camManager(cManager), ss(0), runType_(0), camRestart(false) {}
virtual ~SliderAnimator() {}
void Callback(UIView *view) override
......@@ -92,12 +92,10 @@ public:
}
private:
UIImageView *backgroundView_;
UISlider *slider_;
UISurfaceView *mSurfaceview;
SampleCameraManager *camManager;
uint32_t duration_;
uint32_t ss = 0;
uint32_t runType_ = 0;
uint32_t ss;
uint32_t runType_;
bool camRestart;
void BackViewSetImage(const char *image)
......@@ -115,7 +113,7 @@ private:
scaleHeight = static_cast<float>(SCREEN_HEIGHT) / imageHeight;
float scale = (scaleWidth < scaleHeight) ? scaleWidth : scaleHeight;
transMap.Scale(Vector2<float>(scale, scale), Vector2<int16_t>(0, 0));
transMap.Scale(Vector2<float>(scale, scale), Vector2<float>(0, 0));
backgroundView_->SetTransformMap(transMap);
backgroundView_->SetTransformAlgorithm(TransformAlgorithm::NEAREST_NEIGHBOR);
imageWidth = imageWidth * scale;
......@@ -131,13 +129,16 @@ class CameraImageButtonOnClickListener : public UIView::OnClickListener {
public:
CameraImageButtonOnClickListener(UIView *uiView, UISurfaceView *surface,
UIImageView *iamgeview, TaskView *taskView, SliderAnimator *animator) : uiView_(uiView),
mSurfaceview(surface), backgroundView_(iamgeview), gTaskView_(taskView), animator_(animator)
backgroundView_(iamgeview), mSurfaceview(surface), animator_(animator), gTaskView_(taskView)
{
cManager_ = nullptr;
bttnLeft = nullptr;
bttnRight = nullptr;
bttnMidle = nullptr;
bttnRecord = nullptr;
recordImage = nullptr;
tmLabel = nullptr;
bttnIdx_ = 0;
}
virtual ~CameraImageButtonOnClickListener(){}
......@@ -221,6 +222,7 @@ private:
UIImageView *backgroundView_;
UISurfaceView *mSurfaceview;
SliderAnimator *animator_;
TaskView *gTaskView_;
int16_t bttnIdx_;
SampleCameraManager *cManager_;
......@@ -230,7 +232,6 @@ private:
UIImageView *bttnRecord;
UIImageView *recordImage;
UILabel *tmLabel;
TaskView *gTaskView_;
void StartGallery(void)
{
Want want1 = { nullptr };
......@@ -327,7 +328,7 @@ private:
scaleHeight = static_cast<float>(SCREEN_HEIGHT) / imageHeight;
float scale = (scaleWidth < scaleHeight) ? scaleWidth : scaleHeight;
transMap.Scale(Vector2<float>(scale, scale), Vector2<int16_t>(0, 0));
transMap.Scale(Vector2<float>(scale, scale), Vector2<float>(0, 0));
backgroundView_->SetTransformMap(transMap);
backgroundView_->SetTransformAlgorithm(TransformAlgorithm::NEAREST_NEIGHBOR);
imageWidth = imageWidth * scale;
......@@ -498,8 +499,8 @@ void CameraAbilitySlice::OnStart(const Want &want)
background_->SetVisible(true);
background_->Invalidate();
cam_manager = new SampleCameraManager(0);
cam_manager->SampleCameraCreate(0);
cam_manager = new SampleCameraManager();
cam_manager->SampleCameraCreate();
SetHead();
......
文件模式从 100644 更改为 100755
......@@ -30,13 +30,15 @@ static constexpr int TEMP_BUF_LEN = 8;
static constexpr int MAX_THM_SIZE = (64 * PAGE_SIZE);
static constexpr int FILE_NAME_LEN = 128;
static constexpr int MILLI_SECONDS = 1000;
static constexpr int PIC_WIDTH = 1920;
static constexpr int PIC_HEIGHT = 1080;
char* g_dstBuf = nullptr;
static int32_t SampleDealThumb(char* psrc, uint32_t srcSize, uint32_t* dstSize, uint16_t u16THMLen)
{
int32_t endpos = 0;
int32_t s32I = 0;
uint32_t s32I = 0;
int32_t startpos = 0;
char tempbuf[TEMP_BUF_LEN] = { 0 };
int32_t bufpos = 0;
......@@ -44,6 +46,9 @@ static int32_t SampleDealThumb(char* psrc, uint32_t srcSize, uint32_t* dstSize,
char endflag[2] = { 0xff, 0xd9 };
while (s32I < srcSize) {
if (bufpos >= TEMP_BUF_LEN) {
break;
}
tempbuf[bufpos] = psrc[s32I++];
if (bufpos > 0) {
if (0 == memcmp(tempbuf + bufpos - 1, startflag, sizeof(startflag))) {
......@@ -55,15 +60,13 @@ static int32_t SampleDealThumb(char* psrc, uint32_t srcSize, uint32_t* dstSize,
if (0 == memcmp(tempbuf + bufpos - 1, endflag, sizeof(endflag))) {
if (u16THMLen == s32I) {
endpos = s32I;
break;
} else {
endpos = s32I;
break;
}
break;
}
}
bufpos++;
if (bufpos == (TEMP_BUF_LEN - 1)) {
if (++bufpos == (TEMP_BUF_LEN - 1)) {
if (tempbuf[bufpos - 1] != 0xFF) {
bufpos = 0;
}
......@@ -72,7 +75,7 @@ static int32_t SampleDealThumb(char* psrc, uint32_t srcSize, uint32_t* dstSize,
}
}
if ((endpos - startpos <= 0) || (endpos - startpos >= srcSize)) {
if ((endpos - startpos <= 0) || (static_cast<uint32_t>(endpos - startpos) >= srcSize)) {
return -1;
}
......@@ -93,9 +96,8 @@ static int32_t SampleDealThumb(char* psrc, uint32_t srcSize, uint32_t* dstSize,
return 0;
}
static int32_t SampleGetThmFromJpg(char* jpegPath, uint32_t* dstSize)
static int32_t SampleGetThmFromJpg(const char* jpegPath, uint32_t* dstSize)
{
int32_t s32RtnVal = 0;
FILE* fpJpg = nullptr;
fpJpg = fopen(jpegPath, "rb");
char* pszFile = nullptr;
......@@ -111,6 +113,10 @@ static int32_t SampleGetThmFromJpg(char* jpegPath, uint32_t* dstSize)
pszFile = (char*)malloc(stStat.st_size);
if ((pszFile == nullptr) || (stStat.st_size < 6)) { /* 6 min size of thumb head */
fclose(fpJpg);
if (pszFile) {
free(pszFile);
pszFile = nullptr;
}
printf("memory malloc fail!\n");
return -1;
}
......@@ -124,7 +130,8 @@ static int32_t SampleGetThmFromJpg(char* jpegPath, uint32_t* dstSize)
fclose(fpJpg);
// The fourth byte is shifted to the left by eight bits then the fifth byte is added.
uint16_t u16THMLen = (pszFile[4] << 8) + pszFile[5];
// the 4 byte is the length high 8 bit, and byte 5 is low 8bit;
uint16_t u16THMLen = (static_cast<uint16_t>(pszFile[4]) << 8) + pszFile[5];
if (SampleDealThumb(pszFile, stStat.st_size, dstSize, u16THMLen) < 0) {
printf("get jpg thumb failed! \n");
free(pszFile);
......@@ -146,7 +153,7 @@ int32_t SampleGetdcfinfo(const char* srcJpgPath, const char* dstThmPath)
if (sprintf_s(jpegDesPath, sizeof(jpegDesPath), "%s", dstThmPath) < 0) {
return -1;
}
s32RtnVal = SampleGetThmFromJpg(jpegSrcPath, &dstSize);
s32RtnVal = SampleGetThmFromJpg(static_cast<const char *>(jpegSrcPath), &dstSize);
if ((s32RtnVal != 0) || (dstSize == 0)) {
printf("fail to get thm\n");
return -1;
......@@ -156,7 +163,7 @@ int32_t SampleGetdcfinfo(const char* srcJpgPath, const char* dstThmPath)
printf("file to create file %s\n", jpegDesPath);
return -1;
}
int32_t u32WritenSize = 0;
uint32_t u32WritenSize = 0;
while (u32WritenSize < dstSize) {
s32RtnVal = fwrite(g_dstBuf + u32WritenSize, 1, dstSize, fpTHM);
if (s32RtnVal <= 0) {
......@@ -176,12 +183,11 @@ int32_t SampleGetdcfinfo(const char* srcJpgPath, const char* dstThmPath)
return 0;
}
static void SampleSaveCapture(const char* p, uint32_t size, int type, char *timeStamp, int length)
static void SampleSaveCapture(const char* p, uint32_t size, int type, const char *timeStamp, int length)
{
char acFileDcf[FILE_NAME_LEN] = {0};
FILE *fp = nullptr;
char acFile[FILE_NAME_LEN] = { 0 };
int ws = 0;
if (type == 0) {
char tmpFile[FILE_NAME_LEN] = {0};
......@@ -190,7 +196,7 @@ static void SampleSaveCapture(const char* p, uint32_t size, int type, char *time
}
fp = fopen(tmpFile, "w+");
if (fp) {
ws = fwrite(p, 1, size, fp);
fwrite(p, 1, size, fp);
fclose(fp);
}
}
......@@ -204,7 +210,7 @@ static void SampleSaveCapture(const char* p, uint32_t size, int type, char *time
if (fp == NULL) {
return;
}
ws = fwrite(p, 1, size, fp);
fwrite(p, 1, size, fp);
fclose(fp);
if (type == 0) {
......@@ -222,12 +228,16 @@ static void SampleSaveCapture(const char* p, uint32_t size, int type, char *time
SampleGetdcfinfo(static_cast<char *>(acFile), static_cast<char *>(acFileDcf));
}
static int CameraGetRecordFd(char* p)
static int CameraGetRecordFd(const char* p)
{
int fd = -1;
char pname[128] = {0};
char *pe = strrchr(p, '.');
char *ps = strrchr(p, '/');
char *ptr = const_cast<char *>(p);
char *pe = strrchr(ptr, '.');
char *ps = strrchr(ptr, '/');
if (pe == nullptr || ps == nullptr) {
return -1;
}
if (strcpy_s(static_cast<char *>(pname), sizeof(pname), VIDEO_PATH) != 0) {
return -1;
......@@ -240,9 +250,8 @@ static int CameraGetRecordFd(char* p)
if (strcat_s(pname, sizeof(pname), ".mp4") < 0) {
return -1;
}
fd = open(pname, O_RDWR | O_CREAT | O_CLOEXEC | O_TRUNC, S_IRUSR | S_IWUSR);
if (fd <= 0) {
fd = open(pname, O_RDWR | O_CREAT | O_CLOEXEC | O_TRUNC, S_IROTH | S_IRUSR | S_IWUSR);
if (fd < 0) {
return -1;
}
......@@ -318,7 +327,8 @@ void TestFrameStateCallback::OnFrameFinished(Camera &camera, FrameConfig &fc, Fr
if (buffer != nullptr) {
char *virtAddr = static_cast<char *>(buffer->GetVirAddr());
if (virtAddr != nullptr) {
SampleSaveCapture(virtAddr, buffer->GetSize(), gPhotoType_, timeStamp_, sizeof(timeStamp_));
SampleSaveCapture(virtAddr, buffer->GetSize(),
gPhotoType_, static_cast<const char *>(timeStamp_), sizeof(timeStamp_));
}
surface->ReleaseBuffer(buffer);
} else {
......@@ -345,7 +355,7 @@ bool TestFrameStateCallback::IsFinish(void)
return gIsFinished_;
}
void TestFrameStateCallback::GetVideoName(char *pName, int length)
void TestFrameStateCallback::GetVideoName(char *pName, size_t length) const
{
if (strlen(videoName_) <= 0)
return;
......@@ -575,10 +585,9 @@ SampleCameraManager::~SampleCameraManager()
}
}
int SampleCameraManager::SampleCameraCreate(int picMode)
int SampleCameraManager::SampleCameraCreate()
{
int retval = 0;
int timeout = 0;
printf("camera start init!!! \n");
camKit = CameraKit::GetInstance();
if (camKit == nullptr) {
......@@ -592,9 +601,11 @@ int SampleCameraManager::SampleCameraCreate(int picMode)
const CameraAbility *ability = camKit->GetCameraAbility(cam);
/* find camera which fits user's ability */
list<CameraPicSize> sizeList = ability->GetSupportedSizes(0);
if (find(sizeList.begin(), sizeList.end(), CAM_PIC_1080P) != sizeList.end()) {
camId = cam;
break;
for (auto &pic : sizeList) {
if (pic.width == PIC_WIDTH && pic.height == PIC_HEIGHT) {
camId = cam;
break;
}
}
}
......@@ -614,13 +625,13 @@ int SampleCameraManager::SampleCameraCreate(int picMode)
camKit->CreateCamera(camId, *CamStateMng, eventHdlr_);
printf("after CreateCamera \n");
if (!access("/userdata/", F_OK | R_OK | W_OK)) {
if (access(PHOTO_PATH, F_OK)) {
if (access(PHOTO_PATH, F_OK) != 0) {
mkdir(PHOTO_PATH, FILE_MODE);
}
if (access(THUMB_PATH, F_OK)) {
if (access(THUMB_PATH, F_OK) != 0) {
mkdir(THUMB_PATH, FILE_MODE);
}
if (access(VIDEO_PATH, F_OK)) {
if (access(VIDEO_PATH, F_OK) != 0) {
mkdir(VIDEO_PATH, FILE_MODE);
}
}
......
......@@ -48,26 +48,34 @@ typedef enum {
class TestFrameStateCallback : public FrameStateCallback {
public:
TestFrameStateCallback(){}
TestFrameStateCallback() : gPhotoType_(0), gIsFinished_(false) {}
~TestFrameStateCallback(){}
void OnFrameFinished(Camera &camera, FrameConfig &fc, FrameResult &result) override;
void SetPhotoType(int type);
bool IsFinish(void);
void GetVideoName(char *pName, int length);
void GetVideoName(char *pName, size_t length) const;
void InitVideoName();
void InitTimeStamp();
private:
int gPhotoType_;
bool gIsFinished_;
char videoName_[256];
char timeStamp_[256];
char videoName_[256] = {0};
char timeStamp_[256] = {0};
};
class SampleCameraStateMng : public CameraStateCallback {
public:
SampleCameraStateMng() = delete;
SampleCameraStateMng(EventHandler &eventHdlr) : eventHdlr_(eventHdlr) {}
SampleCameraStateMng(EventHandler &eventHdlr) : eventHdlr_(eventHdlr)
{
gRecordSta_ = 0;
gPreviewSta_ = 0;
gRecFd_ = -1;
cam_ = nullptr;
recorder_ = nullptr;
fc_ = nullptr;
}
~SampleCameraStateMng();
void OnCreated(Camera &c) override;
......@@ -84,23 +92,27 @@ public:
bool IsCaptureOver(void);
private:
int gRecordSta_ = 0;
int gPreviewSta_ = 0;
int gRecFd_ = -1;
int gRecordSta_;
int gPreviewSta_;
int gRecFd_;
EventHandler &eventHdlr_;
Camera *cam_ = nullptr;
Recorder *recorder_ = nullptr;
Camera *cam_;
Recorder *recorder_;
TestFrameStateCallback fsCb_;
FrameConfig *fc_ = nullptr;
FrameConfig *fc_;
};
class SampleCameraManager {
public:
SampleCameraManager() = delete;
SampleCameraManager(int mode) : picMode(mode) {}
SampleCameraManager()
{
camKit = nullptr;
camId = "";
CamStateMng = nullptr;
}
~SampleCameraManager();
int SampleCameraCreate(int picMode);
int SampleCameraCreate();
bool SampleCameraExist(void);
int SampleCameraStart(Surface *surface);
int SampleCameraStop(void);
......@@ -116,7 +128,6 @@ private:
CameraKit *camKit;
string camId;
SampleCameraStateMng *CamStateMng;
int picMode = 0;
EventHandler eventHdlr_;
};
......
......@@ -36,20 +36,28 @@ public:
onLongPress_ = std::move(onLongPress);
}
bool OnClick(UIView &view, const ClickEvent &event) override
bool OnClick(UIView& view, const ClickEvent &event) override
{
if (!onClick_) {
return false;
}
return onClick_(view, event);
UIView *currentView = &view;
if (currentView == nullptr) {
return false;
}
return onClick_(*currentView, event);
}
bool OnLongPress(UIView &view, const LongPressEvent &event) override
bool OnLongPress(UIView& view, const LongPressEvent &event) override
{
if (!onLongPress_) {
return false;
}
return onLongPress_(view, event);
UIView *currentView = &view;
if (currentView == nullptr) {
return false;
}
return onLongPress_(*currentView, event);
}
private:
......
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
# Copyright (c) 2020 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//build/lite/config/component/lite_component.gni")
lite_component("sample") {
features = [
]
}
generate_notice_file("communication_sample") {
module_name = "communication_sample"
module_source_dir_list = [
"//third_party/wpa_supplicant/wpa_supplicant-2.9/hostapd",
"//third_party/wpa_supplicant/wpa_supplicant-2.9/wpa_supplicant",
]
}
# Copyright (c) 2020 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//build/lite/config/component/lite_component.gni")
sample_sources = [
"src/hostapd_sample.c",
]
config_file = [
"config/hostapd.conf"
]
executable("hostapd_sample_exe") {
output_name = "hostapd"
sources = sample_sources
}
group("hostapd_sample") {
deps = [
":hostapd_sample_exe",
]
}
copy("config") {
sources = config_file
outputs = [
"$root_out_dir/etc/hostapd.conf"
]
}
interface=wlan0
driver=hdf wifi
ctrl_interface=udp
ssid=testap
hw_mode=g
channel=1
ignore_broadcast_ssid=0
/*
* Copyright (c) 2020 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <dlfcn.h>
#include <pthread.h>
#include <stdio.h>
#include <string.h>
pthread_t g_apThread;
char* g_apArg[20] = {0};
int g_apArgc = 0;
static void* ThreadMain()
{
printf("[HostapdSample]init hostapd.\n");
void *handleLibWpa = dlopen("/usr/lib/libwpa.so", RTLD_NOW | RTLD_LOCAL);
if (handleLibWpa == NULL) {
printf("[HostapdSample]dlopen libwpa failed.\n");
return NULL;
}
int (*func)(int, char **) = NULL;
func = dlsym(handleLibWpa, "ap_main");
if (func == NULL) {
dlclose(handleLibWpa);
printf("[HostapdSample]dlsym ap_main failed.\n");
return NULL;
}
int ret = func(g_apArgc, g_apArg);
printf("[HostapdSample]run ap_main failed, ret:%d.\n", ret);
for (int i = 0; i < g_apArgc; i++) {
printf("[HostapdSample]arg %d:%s.\n", i, g_apArg[i]);
}
if (dlclose(handleLibWpa) != 0) {
printf("[HostapdSample]dlclose libwpa failed.\n");
return NULL;
}
return NULL;
}
int main(int argc, char *argv[])
{
g_apArgc = argc;
for (int i = 0; i < g_apArgc; i++) {
g_apArg[i] = argv[i];
}
int ret = pthread_create(&g_apThread, NULL, ThreadMain, NULL);
if (ret != 0) {
printf("[HostapdSample]create thread failed error:%s.\n", strerror(ret));
return 1;
}
pthread_join(g_apThread, NULL);
return 0;
}
# Copyright (c) 2020 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//build/lite/config/component/lite_component.gni")
sample_sources = [
"src/wpa_cli_sample.c",
]
sample_include_dirs = [
"//third_party/wpa_supplicant/wpa_supplicant-2.9/src/",
"//third_party/bounds_checking_function:libsec_shared/include/"
]
executable("wpa_cli_exe") {
output_name = "wpa_cli"
sources = sample_sources
include_dirs = sample_include_dirs
out_dir = rebase_path(root_build_dir)
deps = [
"//third_party/wpa_supplicant/wpa_supplicant-2.9:wpa_supplicant",
"//third_party/bounds_checking_function:libsec_shared"
]
ldflags = [
"-L${out_dir}",
"-lwpa_client"
]
}
group("wpa_cli_sample") {
deps = [
":wpa_cli_exe",
]
}
/*
* Copyright (c) 2020 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "utils/includes.h"
#include "pthread.h"
#include "common/wpa_ctrl.h"
#include "securec.h"
#define WPA_IFACE_NAME "wlan0"
#define WIFI_AUTH_FAILED_REASON_STR "WRONG_KEY"
#define WIFI_AUTH_FAILED_REASON_CODE "reason=2"
#define WPA_CTRL_REQUEST_OK "OK"
#define WPA_CTRL_REQUEST_FAIL "FAIL"
#define SAMPLE_INFO(format, args...) \
do { \
fprintf(stderr, "\033[1;32m WpaCliSample(%s:%d):\t\033[0m" format, __func__, __LINE__, ##args); \
printf("\n"); \
} while (0)
#define SAMPLE_ERROR(format, args...) \
do { \
fprintf(stderr, "\033[1;31m WpaCliSample(%s:%d):\t\033[0m" format, __func__, __LINE__, ##args); \
printf("\n"); \
} while (0)
static struct wpa_ctrl *g_monitorConn;
static struct wpa_ctrl *g_ctrlConn;
static pthread_t g_wpaThreadId;
static int g_scanAvailable = 0;
static void DumpString(const char *buf, int len, const char *tag)
{
SAMPLE_INFO("%s dump start.", tag);
for (int i = 0; i < len; i++) {
printf("%c", buf[i]);
}
printf("\n");
SAMPLE_INFO("%s dump end.", tag);
}
static int StrMatch(const char *a, const char *b)
{
return strncmp(a, b, strlen(b)) == 0;
}
static void WifiEventHandler(char *rawEvent, int len)
{
char *pos = rawEvent;
if (*pos == '<') {
pos = strchr(pos, '>');
if (pos) {
pos++;
} else {
pos = rawEvent;
}
}
if (StrMatch(pos, WPA_EVENT_CONNECTED)) {
SAMPLE_INFO("WIFI_EVENT_CONNECTED");
return;
}
if (StrMatch(pos, WPA_EVENT_SCAN_RESULTS)) {
SAMPLE_INFO("WIFI_EVENT_SCAN_DONE");
g_scanAvailable = 1;
return;
}
if (StrMatch(pos, WPA_EVENT_TEMP_DISABLED) && strstr(pos, WIFI_AUTH_FAILED_REASON_STR)) {
SAMPLE_INFO("WIFI_EVENT_WRONG_KEY");
return;
}
if (StrMatch(pos, WPA_EVENT_DISCONNECTED) && !strstr(pos, WIFI_AUTH_FAILED_REASON_CODE)) {
SAMPLE_INFO("WIFI_EVENT_DISCONNECTED");
return;
}
}
static void CliRecvPending(void)
{
while (wpa_ctrl_pending(g_monitorConn)) {
char buf[4096];
size_t len = sizeof(buf) - 1;
if (wpa_ctrl_recv(g_monitorConn, buf, &len) == 0) {
buf[len] = '\0';
SAMPLE_INFO("event received %s", buf);
WifiEventHandler(buf, len);
} else {
SAMPLE_INFO("could not read pending message.");
break;
}
}
}
static void* MonitorTask(void *args)
{
(void)args;
int fd, ret;
fd_set rfd;
while (1) {
fd = wpa_ctrl_get_fd(g_monitorConn);
FD_ZERO(&rfd);
FD_SET(fd, &rfd);
ret = select(fd + 1, &rfd, NULL, NULL, NULL);
if (ret <= 0) {
SAMPLE_INFO("select failed ret = %d\n", ret);
break;
}
CliRecvPending();
sleep(1);
}
return NULL;
}
static int SendCtrlCommand(const char *cmd, char *reply, size_t *replyLen)
{
size_t len = *replyLen - 1;
wpa_ctrl_request(g_ctrlConn, cmd, strlen(cmd), reply, &len, 0);
DumpString(reply, len, "SendCtrlCommand raw return");
if (len != 0 && !StrMatch(reply, WPA_CTRL_REQUEST_FAIL)) {
*replyLen = len;
return 0;
}
SAMPLE_ERROR("send ctrl request [%s] failed.", cmd);
return -1;
}
static void TestNetworkConfig(void)
{
char networkId[20] = {0};
size_t networkIdLen = sizeof(networkId);
int ret = SendCtrlCommand("DISCONNECT", networkId, &networkIdLen);
ret += SendCtrlCommand("ADD_NETWORK", networkId, &networkIdLen);
if (ret != 0) {
SAMPLE_ERROR("add network failed.");
return;
}
SAMPLE_INFO("add network success, network id [%.*s]", networkIdLen, networkId);
char reply[100] = {0};
size_t replyLen = sizeof(reply);
char cmd[200] = {0};
sprintf_s(cmd, sizeof(cmd), "SET_NETWORK %.*s ssid \"example\"", networkIdLen, networkId);
ret += SendCtrlCommand(cmd, reply, &replyLen);
replyLen = sizeof(reply);
sprintf_s(cmd, sizeof(cmd), "SET_NETWORK %.*s psk \"012345678\"", networkIdLen, networkId);
ret += SendCtrlCommand(cmd, reply, &replyLen);
replyLen = sizeof(reply);
sprintf_s(cmd, sizeof(cmd), "ENABLE_NETWORK %.*s", networkIdLen, networkId);
ret += SendCtrlCommand(cmd, reply, &replyLen);
replyLen = sizeof(reply);
ret += SendCtrlCommand("RECONNECT", reply, &replyLen);
replyLen = sizeof(reply);
if (ret == 0) {
SAMPLE_INFO("network config success.");
return;
}
sprintf_s(cmd, sizeof(cmd), "REMOVE_NETWORK %.*s", networkIdLen, networkId);
SendCtrlCommand(cmd, reply, &replyLen);
SAMPLE_ERROR("network config failed remove network [%.*s].", networkIdLen, networkId);
}
static void TestCliConnection(void)
{
char reply[100] = {0};
size_t replyLen = sizeof(reply);
int ret = SendCtrlCommand("PING", reply, &replyLen);
if (ret == 0 && StrMatch(reply, "PONG")) {
SAMPLE_INFO("connect to wpa success.");
return;
}
SAMPLE_INFO("connect to wpa failed, err = %s.", reply);
}
static void TestScan()
{
char reply[100] = {0};
size_t replyLen = sizeof(reply);
g_scanAvailable = 0;
SendCtrlCommand("SCAN", reply, &replyLen);
while (1) {
sleep(1);
if (g_scanAvailable == 1) {
SAMPLE_INFO("scan result received.");
break;
}
SAMPLE_INFO("waiting scan result.");
}
char scanResult[4096] = {0};
size_t scanLen = sizeof(scanResult);
int ret = SendCtrlCommand("SCAN_RESULTS", scanResult, &scanLen);
if (ret != 0) {
SAMPLE_ERROR("request scan results failed.");
return;
}
DumpString(scanResult, scanLen, "scan results");
}
static void StartTest()
{
TestCliConnection(); // test if wpa control interface connected successfully
TestScan(); // test scan and get scan results
TestNetworkConfig(); // test config network and connect
}
int InitControlInterface()
{
g_ctrlConn = wpa_ctrl_open(WPA_IFACE_NAME); // create control interface for send cmd
g_monitorConn = wpa_ctrl_open(WPA_IFACE_NAME); // create control interface for event monitor
if (!g_ctrlConn || !g_monitorConn) {
SAMPLE_ERROR("open wpa control interface failed.");
return -1;
}
if (wpa_ctrl_attach(g_monitorConn) == 0) { // start monitor
pthread_create(&g_wpaThreadId, NULL, MonitorTask, NULL); // create thread for read event
return 0;
}
return -1;
}
int main()
{
if (InitControlInterface() != 0) {
SAMPLE_ERROR("control interface init failed, exit client.");
return -1;
}
SAMPLE_INFO("control interface init success.");
StartTest();
pthread_join(g_wpaThreadId, NULL);
SAMPLE_INFO("test finished, exit client.");
}
# Copyright (c) 2020 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//build/lite/config/component/lite_component.gni")
sample_sources = [
"src/wpa_sample.c",
]
config_file = [
"config/wpa_supplicant.conf"
]
executable("wpa_sample_exe") {
output_name = "wpa_supplicant"
sources = sample_sources
}
group("wpa_sample") {
deps = [
":wpa_sample_exe",
]
}
copy("config") {
sources = config_file
outputs = [
"$root_out_dir/etc/wpa_supplicant.conf"
]
}
/*
* Copyright (c) 2020 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <dlfcn.h>
#include <pthread.h>
#include <stdio.h>
#include <string.h>
pthread_t g_wpaThread;
char* g_wpaArg[20] = {0};
int g_wpaArgc = 0;
static void* ThreadMain()
{
printf("[WpaSample]init wpa_supplicant.\n");
void *handleLibWpa = dlopen("/usr/lib/libwpa.so", RTLD_NOW | RTLD_LOCAL);
if (handleLibWpa == NULL) {
printf("[WpaSample]dlopen libwpa failed.\n");
return NULL;
}
int (*func)(int, char **) = NULL;
func = dlsym(handleLibWpa, "wpa_main");
if (func == NULL) {
dlclose(handleLibWpa);
printf("[WpaSample]dlsym wpa_main failed.\n");
return NULL;
}
int ret = func(g_wpaArgc, g_wpaArg);
printf("[WpaSample]run wpa_main failed, ret:%d.\n", ret);
for (int i = 0; i < g_wpaArgc; i++) {
printf("[WpaSample]arg %d:%s.\n", i, g_wpaArg[i]);
}
if (dlclose(handleLibWpa) != 0) {
printf("[WpaSample]dlclose libwpa failed.\n");
return NULL;
}
return NULL;
}
int main(int argc, char *argv[])
{
g_wpaArgc = argc;
for (int i = 0; i < g_wpaArgc; i++) {
g_wpaArg[i] = argv[i];
}
int ret = pthread_create(&g_wpaThread, NULL, ThreadMain, NULL);
if (ret != 0) {
printf("[WpaSample]create thread failed error:%s.\n", strerror(ret));
return 1;
}
pthread_join(g_wpaThread, NULL);
return 0;
}
# Copyright (c) 2020 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//build/lite/config/component/lite_component.gni")
lite_component("service_example") {
features = [
"consumer:consumer_service",
"provider:provider_service",
]
}
# Copyright (c) 2020 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//build/lite/config/component/lite_component.gni")
executable("consumer_proc") {
sources = [
"proc.c",
"client_example.c",
"default_call_test.c",
"feature_call_test.c",
]
ldflags = [
"-Wl,-Map=consumer_proc.map",
]
include_dirs = [
"include",
"//kernel/liteos_a/kernel/include",
"//kernel/liteos_a/kernel/common",
"//third_party/bounds_checking_function/include",
"//kernel/liteos_a/kernel/include",
"//kernel/liteos_a/kernel/common",
"//utils/native/lite/include",
"//foundation/distributedschedule/interfaces/kits/samgr_lite/registry",
"//foundation/distributedschedule/interfaces/kits/samgr_lite/samgr",
"//foundation/distributedschedule/interfaces/kits/samgr_lite/communication/broadcast",
]
deps = [
"//foundation/distributedschedule/services/samgr_lite/samgr:samgr",
]
}
lite_component("consumer_service") {
features = [
":consumer_proc",
]
}
/*
* Copyright (c) 2020 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "example.h"
#include <pthread.h>
#include <securec.h>
#include <ohos_errno.h>
#include <log.h>
#include <iproxy_client.h>
#define MAX_DATA_LEN 0x100
enum FUNCID {
ID_ASYNCALL = 0,
ID_ASYNTIMECALL,
ID_SYNCCALL,
ID_ASYNCCALLBACK
};
typedef struct DemoClientProxy {
INHERIT_CLIENT_IPROXY;
BOOL (*AsyncCall)(IUnknown *iUnknown, const char *buff);
BOOL (*AsyncTimeCall)(IUnknown *iUnknown);
BOOL (*SyncCall)(IUnknown *iUnknown, struct Payload *payload);
BOOL (*AsyncCallBack)(IUnknown *iUnknown, const char *buff, IOwner notify, INotifyFunc handler);
} DemoClientProxy;
typedef struct DemoClientEntry {
INHERIT_IUNKNOWNENTRY(DemoClientProxy);
} DemoClientEntry;
static BOOL AsyncCall(IUnknown *iUnknown, const char *buff);
static BOOL AsyncTimeCall(IUnknown *iUnknown);
static BOOL SyncCall(IUnknown *iUnknown, struct Payload *payload);
static BOOL AsyncCallBack(IUnknown *iUnknown, const char *buff, IOwner notify, INotifyFunc handler);
void *DEMO_CreatClient(const char *service, const char *feature, uint32 size)
{
(void)service;
(void)feature;
uint32 len = size + sizeof(DemoClientEntry);
uint8 *client = malloc(len);
if (client == NULL) {
return NULL;
}
(void)memset_s(client, len, 0, len);
DemoClientEntry *entry = (DemoClientEntry *)&client[size];
entry->ver = ((uint16)CLIENT_PROXY_VER | (uint16)DEFAULT_VERSION);
entry->ref = 1;
entry->iUnknown.QueryInterface = IUNKNOWN_QueryInterface;
entry->iUnknown.AddRef = IUNKNOWN_AddRef;
entry->iUnknown.Release = IUNKNOWN_Release;
entry->iUnknown.Invoke = NULL;
entry->iUnknown.AsyncCall = AsyncCall;
entry->iUnknown.AsyncTimeCall = AsyncTimeCall;
entry->iUnknown.SyncCall = SyncCall;
entry->iUnknown.AsyncCallBack = AsyncCallBack;
return client;
}
void DEMO_DestroyClient(const char *service, const char *feature, void *iproxy)
{
free(iproxy);
}
static BOOL AsyncCall(IUnknown *iUnknown, const char *buff)
{
DemoClientProxy *proxy = (DemoClientProxy *)iUnknown;
IpcIo request;
char data[MAX_DATA_LEN];
IpcIoInit(&request, data, MAX_DATA_LEN, 0);
IpcIoPushString(&request, buff);
int ret = proxy->Invoke((IClientProxy *)proxy, ID_ASYNCALL, &request, NULL, NULL);
return ret == EC_SUCCESS;
}
static BOOL AsyncTimeCall(IUnknown *iUnknown)
{
DemoClientProxy *proxy = (DemoClientProxy *)iUnknown;
IpcIo request;
char data[MAX_DATA_LEN];
IpcIoInit(&request, data, MAX_DATA_LEN, 0);
int ret = proxy->Invoke((IClientProxy *)proxy, ID_ASYNTIMECALL, &request, NULL, NULL);
return ret == EC_SUCCESS;
}
static int Callback(IOwner owner, int code, IpcIo *reply)
{
size_t len = 0;
char *src = (char *)IpcIoPopString(reply, &len);
if (src == NULL) {
return EC_BADPTR;
}
return strcpy_s(owner, MAX_DATA_LEN, src);
}
static BOOL SyncCall(IUnknown *iUnknown, struct Payload *payload)
{
DemoClientProxy *proxy = (DemoClientProxy *)iUnknown;
IpcIo request;
char data[MAX_DATA_LEN];
IpcIoInit(&request, data, MAX_DATA_LEN, 0);
IpcIoPushInt32(&request, payload->id);
IpcIoPushInt32(&request, payload->value);
IpcIoPushString(&request, payload->name);
int ret = proxy->Invoke((IClientProxy *)proxy, ID_SYNCCALL, &request, data, Callback);
data[MAX_DATA_LEN - 1] = 0;
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]Remote response is %s!", (unsigned long)pthread_self(), data);
return ret == EC_SUCCESS;
}
struct CurrentNotify {
IOwner notify;
INotifyFunc handler;
};
static int CurrentCallback(IOwner owner, int code, IpcIo *reply)
{
struct CurrentNotify *notify = (struct CurrentNotify *)owner;
size_t len = 0;
char *response = (char *)IpcIoPopString(reply, &len);
if (response == NULL) {
return EC_BADPTR;
}
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]Notify Remote response is %s!", (unsigned long)pthread_self(), response);
notify->handler(notify->notify, response);
return EC_SUCCESS;
}
static BOOL AsyncCallBack(IUnknown *iUnknown, const char *buff, IOwner notify, INotifyFunc handler)
{
struct CurrentNotify owner = {notify, handler};
DemoClientProxy *proxy = (DemoClientProxy *)iUnknown;
IpcIo request;
char data[MAX_DATA_LEN];
IpcIoInit(&request, data, MAX_DATA_LEN, 0);
IpcIoPushString(&request, buff);
int ret = proxy->Invoke((IClientProxy *)proxy, ID_ASYNCCALLBACK, &request, &owner, CurrentCallback);
return ret == EC_SUCCESS;
}
/*
* Copyright (c) 2020 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "example.h"
#include <iproxy_client.h>
#include <samgr_lite.h>
#include <log.h>
#include <pthread.h>
#define MAX_DATA_LEN 250
static IClientProxy *CASE_GetRemoteIUnknown(void)
{
IClientProxy *demoApi = NULL;
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx][GetDefaultFeatureApi S:%s]: BEGIN",
(unsigned long)pthread_self(), EXAMPLE_SERVICE);
IUnknown *iUnknown = SAMGR_GetInstance()->GetDefaultFeatureApi(EXAMPLE_SERVICE);
if (iUnknown == NULL) {
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx][GetDefaultFeatureApi S:%s]: error is NULL",
(unsigned long)pthread_self(), EXAMPLE_SERVICE);
return NULL;
}
(void)iUnknown->QueryInterface(iUnknown, CLIENT_PROXY_VER, (void **)&demoApi);
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx][QueryInterface CLIENT_PROXY_VER S:%s]: is %p",
(unsigned long)pthread_self(), EXAMPLE_SERVICE, demoApi);
return demoApi;
}
static void CASE_SyncCall(IClientProxy *defaultApi)
{
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx][CASE_SyncCall api S:%s]: is %p",
(unsigned long)pthread_self(), EXAMPLE_SERVICE, defaultApi);
if (defaultApi == NULL) {
return;
}
IpcIo request;
char data[MAX_DATA_LEN];
IpcIoInit(&request, data, sizeof(data), 0);
defaultApi->Invoke(defaultApi, 0, &request, NULL, NULL);
}
static void CASE_ReleaseIUnknown(IUnknown *demoApi)
{
if (demoApi == NULL) {
return;
}
int32 ref = demoApi->Release((IUnknown *)demoApi);
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx][Release api S:%s]: is %p ref:%d",
(unsigned long)pthread_self(), EXAMPLE_SERVICE, demoApi, ref);
}
void RunServiceTestCase(void)
{
IClientProxy *remoteApi = CASE_GetRemoteIUnknown();
CASE_SyncCall(remoteApi);
CASE_ReleaseIUnknown((IUnknown *)remoteApi);
}
/*
* Copyright (c) 2020 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef LITE_EXAMPLE_H
#define LITE_EXAMPLE_H
#include <iunknown.h>
#include <iproxy_server.h>
#include <iproxy_client.h>
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif
#define EXAMPLE_SERVICE "ex_service"
#define EXAMPLE_FEATURE "ex_feature"
typedef struct DefaultFeatureApi {
INHERIT_SERVER_IPROXY;
void (*SyncCall)(IUnknown *iUnknown);
} DefaultFeatureApi;
struct Payload {
int id;
const char *name;
int value;
};
typedef void *IOwner;
typedef void (*INotifyFunc)(IOwner owner, const char *resp);
typedef struct ClientDemo {
INHERIT_CLIENT_IPROXY;
BOOL (*AsyncCall)(IUnknown *iUnknown, const char *buff);
BOOL (*AsyncTimeCall)(IUnknown *iUnknown);
BOOL (*SyncCall)(IUnknown *iUnknown, struct Payload *payload);
BOOL (*AsyncCallBack)(IUnknown *iUnknown, const char *buff, IOwner notify, INotifyFunc handler);
} ClientDemo;
void DEMO_DestroyClient(const char *service, const char *feature, void *iproxy);
void *DEMO_CreatClient(const char *service, const char *feature, uint32 size);
void RunServiceTestCase(void);
void RunFeatureTestCase(void);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
#endif // LITE_EXAMPLE_H
/*
* Copyright (c) 2020 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "example.h"
#include <log.h>
#include <pthread.h>
#include <samgr_lite.h>
static ClientDemo *CASE_GetIUnknown(void)
{
ClientDemo *demoApi = NULL;
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx][GetFeatureApi S:%s F:%s]: BEGIN\n",
(unsigned long)pthread_self(), EXAMPLE_SERVICE, EXAMPLE_FEATURE);
IUnknown *iUnknown = SAMGR_GetInstance()->GetFeatureApi(EXAMPLE_SERVICE, EXAMPLE_FEATURE);
if (iUnknown == NULL) {
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx][GetFeatureApi S:%s F:%s]: error is NULL\n",
(unsigned long)pthread_self(), EXAMPLE_SERVICE, EXAMPLE_FEATURE);
return NULL;
}
(void)iUnknown->QueryInterface(iUnknown, DEFAULT_VERSION, (void **)&demoApi);
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx][QueryInterface DEFAULT_VERSION S:%s, F:%s]: is %p\n",
(unsigned long)pthread_self(), EXAMPLE_SERVICE, EXAMPLE_FEATURE, demoApi);
return demoApi;
}
static void CASE_SyncCall(ClientDemo *demoApi)
{
if (demoApi == NULL || demoApi->SyncCall == NULL) {
return;
}
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]SyncCall BEGIN\n", (unsigned long)pthread_self());
struct Payload payload = {
.id = 0,
.name = "I wanna sync call good result!",
.value = 1
};
BOOL ret = demoApi->SyncCall((IUnknown *)demoApi, &payload);
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]SyncCall End(%d)\n", (unsigned long)pthread_self(), ret);
}
static void CASE_AsyncCall(ClientDemo *demoApi)
{
if (demoApi == NULL || demoApi->AsyncCall == NULL) {
return;
}
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]AsyncCall BEGIN\n", (unsigned long)pthread_self());
BOOL ret = demoApi->AsyncCall((IUnknown *)demoApi, "I wanna async call good result!");
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]AsyncCall End(%d)\n", (unsigned long)pthread_self(), ret);
}
static void CASE_AsyncTimeCall(ClientDemo *demoApi)
{
if (demoApi == NULL || demoApi->AsyncTimeCall == NULL) {
return;
}
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]AsyncTimeCall BEGIN\n", (unsigned long)pthread_self());
BOOL ret = demoApi->AsyncTimeCall((IUnknown *)demoApi);
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]AsyncTimeCall End(%d)\n", (unsigned long)pthread_self(), ret);
}
void AsyncHandler(IOwner owner, const char *resp)
{
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]AsyncCallBack Owner:%p, Response:%s\n",
(unsigned long)pthread_self(), owner, resp);
}
static void CASE_AsyncCallBack(ClientDemo *demoApi)
{
if (demoApi == NULL || demoApi->AsyncCallBack == NULL) {
return;
}
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]AsyncCallBack BEGIN\n", (unsigned long)pthread_self());
BOOL ret = demoApi->AsyncCallBack((IUnknown *)demoApi,
"I wanna async call callback good result!", NULL, AsyncHandler);
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]AsyncCallBack End(%d)\n", (unsigned long)pthread_self(), ret);
}
static void CASE_ReleaseIUnknown(ClientDemo *demoApi)
{
if (demoApi == NULL) {
return;
}
int32 ref = demoApi->Release((IUnknown *)demoApi);
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx][Release api S:%s, F:%s]: is %p ref:%d\n",
(unsigned long)pthread_self(), EXAMPLE_SERVICE, EXAMPLE_FEATURE, demoApi, ref);
}
void RunFeatureTestCase(void)
{
ClientDemo *demoApi = CASE_GetIUnknown();
CASE_AsyncCall(demoApi);
CASE_AsyncTimeCall(demoApi);
CASE_SyncCall(demoApi);
CASE_AsyncCallBack(demoApi);
CASE_ReleaseIUnknown(demoApi);
}
/*
* Copyright (c) 2020 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <unistd.h>
#include <securec.h>
#include "samgr_lite.h"
#include "registry.h"
#include "example.h"
const char FUN_ARG_S[] = "0123456I";
#define DEFAULT 0
#define INTERVAL 10
#define MAX_LEN 0x100
#define MAX_TEST_TIMES 3600
void __attribute__((weak)) OHOS_SystemInit(void)
{
SAMGR_Bootstrap();
};
void HiLogPrintf(unsigned char module, unsigned char level, const char *nums, const char *fmt, ...);
int main()
{
HiLogPrintf(DEFAULT, DEFAULT, NULL, "Start Consumer System Start");
SAMGR_RegisterFactory(EXAMPLE_SERVICE, EXAMPLE_FEATURE, DEMO_CreatClient, DEMO_DestroyClient);
OHOS_SystemInit();
HiLogPrintf(DEFAULT, DEFAULT, NULL, "Start Consumer System End");
int times = 0;
while (times < MAX_TEST_TIMES) {
sleep(INTERVAL);
RunServiceTestCase();
RunFeatureTestCase();
++times;
}
}
void __attribute__((weak)) HiLogPrintf(unsigned char module, unsigned char level,
const char *nums, const char *fmt, ...)
{
static char buf[MAX_LEN] = {0};
va_list args;
va_start(args, fmt);
int ret = vsprintf_s(buf, sizeof(buf), fmt, args);
va_end(args);
if (ret < 0) {
printf("Consumer fmt failed(%d)", ret);
}
printf("Consumer M:%d l:%d %s\n", module, level, buf);
}
# Copyright (c) 2020 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//build/lite/config/component/lite_component.gni")
executable("server_proc") {
sources = [
"proc.c",
]
ldflags = [
"-Wl,-Map=server_proc.map",
]
include_dirs = [
"include",
"//third_party/bounds_checking_function/include",
"//utils/native/lite/include",
"//foundation/distributedschedule/interfaces/kits/samgr_lite/samgr",
]
deps = [
"//foundation/distributedschedule/services/samgr_lite/samgr_server:server",
]
}
lite_component("samgr_server") {
features = [
":server_proc",
]
}
/*
* Copyright (c) 2020 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <unistd.h>
#include <securec.h>
#include "samgr_lite.h"
const char FUN_ARG_S[] = "0123456I";
#define DEFAULT 0
#define MAX_LEN 0x100
void __attribute__((weak)) OHOS_SystemInit(void)
{
SAMGR_Bootstrap();
};
void HiLogPrintf(unsigned char module, unsigned char level, const char *nums, const char *fmt, ...);
int main()
{
HiLogPrintf(DEFAULT, DEFAULT, NULL, "Start Server System Start");
OHOS_SystemInit();
HiLogPrintf(DEFAULT, DEFAULT, NULL, "Start Server System End");
pause();
}
void __attribute__((weak)) HiLogPrintf(unsigned char module, unsigned char level,
const char *nums, const char *fmt, ...)
{
static char buf[MAX_LEN] = {0};
va_list args;
va_start(args, fmt);
int ret = vsprintf_s(buf, sizeof(buf), fmt, args);
va_end(args);
if (ret < 0) {
printf("Server fmt failed(%d)", ret);
}
printf("Server M:%d l:%d %s\n", module, level, buf);
}
# Copyright (c) 2020 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//build/lite/config/component/lite_component.gni")
executable("provider_proc") {
sources = [
"proc.c",
"feature_example.c",
"service_example.c",
]
ldflags = [
"-Wl,-Map=provider_proc.map",
]
include_dirs = [
"include",
"//third_party/bounds_checking_function/include",
"//kernel/liteos_a/kernel/include",
"//kernel/liteos_a/kernel/common",
"//utils/native/lite/include",
"//kernel/liteos_a/kernel/include",
"//kernel/liteos_a/kernel/common",
"//foundation/distributedschedule/interfaces/kits/samgr_lite/registry",
"//foundation/distributedschedule/interfaces/kits/samgr_lite/samgr",
"//foundation/distributedschedule/interfaces/kits/samgr_lite/communication/broadcast",
"//foundation/distributedschedule/services/samgr_lite/samgr/source",
]
deps = [
"//foundation/distributedschedule/services/samgr_lite/samgr:samgr",
]
}
lite_component("provider_service") {
features = [
":provider_proc",
]
}
/*
* Copyright (c) 2020 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef LITE_EXAMPLE_H
#define LITE_EXAMPLE_H
#include <iunknown.h>
#include <iproxy_server.h>
#include <iproxy_client.h>
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif
#define EXAMPLE_SERVICE "ex_service"
#define EXAMPLE_FEATURE "ex_feature"
typedef struct DefaultFeatureApi {
INHERIT_SERVER_IPROXY;
void (*SyncCall)(IUnknown *iUnknown);
} DefaultFeatureApi;
struct Payload {
int id;
const char *name;
int value;
};
typedef void *IOwner;
typedef void (*INotifyFunc)(IOwner owner, const char *resp);
typedef struct ClientDemo {
INHERIT_CLIENT_IPROXY;
BOOL (*AsyncCall)(IUnknown *iUnknown, const char *buff);
BOOL (*AsyncTimeCall)(IUnknown *iUnknown);
BOOL (*SyncCall)(IUnknown *iUnknown, struct Payload *payload);
BOOL (*AsyncCallBack)(IUnknown *iUnknown, const char *buff, IOwner notify, INotifyFunc handler);
} ClientDemo;
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
#endif // LITE_EXAMPLE_H
/*
* Copyright (c) 2020 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "example.h"
#include <ohos_init.h>
#include <securec.h>
#include <samgr_maintenance.h>
#include <log.h>
#include <unistd.h>
#include <pthread.h>
#include <ohos_errno.h>
#include "feature.h"
#include "service.h"
#include "samgr_lite.h"
#define WAIT_FEATURE_PROC 1000
enum MessageId {
MSG_PROC,
MSG_TIME_PROC,
};
typedef struct DemoFeatureApi {
INHERIT_SERVER_IPROXY;
BOOL (*AsyncCall)(IUnknown *iUnknown, const char *buff);
BOOL (*AsyncTimeCall)(IUnknown *iUnknown);
BOOL (*SyncCall)(IUnknown *iUnknown, struct Payload *payload);
BOOL (*AsyncCallBack)(IUnknown *iUnknown, const char *buff, IOwner notify, INotifyFunc handler);
} DemoFeatureApi;
typedef struct DemoFeature {
INHERIT_FEATURE;
INHERIT_IUNKNOWNENTRY(DemoFeatureApi);
Identity identity;
} DemoFeature;
static BOOL AsyncCall(IUnknown *iUnknown, const char *body);
static BOOL AsyncTimeCall(IUnknown *iUnknown);
static BOOL SyncCall(IUnknown *iUnknown, struct Payload *payload);
static BOOL AsyncCallBack(IUnknown *iUnknown, const char *body, IOwner notify, INotifyFunc handler);
static const char *FEATURE_GetName(Feature *feature);
static void FEATURE_OnInitialize(Feature *feature, Service *parent, Identity identity);
static void FEATURE_OnStop(Feature *feature, Identity identity);
static BOOL FEATURE_OnMessage(Feature *feature, Request *request);
static int32 Invoke(IServerProxy *iProxy, int funcId, void *origin, IpcIo *req, IpcIo *reply);
static DemoFeature g_example = {
.GetName = FEATURE_GetName,
.OnInitialize = FEATURE_OnInitialize,
.OnStop = FEATURE_OnStop,
.OnMessage = FEATURE_OnMessage,
SERVER_IPROXY_IMPL_BEGIN,
.Invoke = Invoke,
.AsyncCall = AsyncCall,
.AsyncTimeCall = AsyncTimeCall,
.SyncCall = SyncCall,
.AsyncCallBack = AsyncCallBack,
IPROXY_END,
.identity = {-1, -1, NULL},
};
static const char *FEATURE_GetName(Feature *feature)
{
(void)feature;
return EXAMPLE_FEATURE;
}
static void FEATURE_OnInitialize(Feature *feature, Service *parent, Identity identity)
{
DemoFeature *demoFeature = (DemoFeature *)feature;
demoFeature->identity = identity;
}
static void FEATURE_OnStop(Feature *feature, Identity identity)
{
(void)feature;
(void)identity;
g_example.identity.queueId = NULL;
g_example.identity.featureId = -1;
g_example.identity.serviceId = -1;
}
static BOOL FEATURE_OnMessage(Feature *feature, Request *msg)
{
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]OnMessage(%s)! Request<%d, %d, %p>",
(unsigned long)pthread_self(), feature->GetName(feature), msg->msgId, msg->msgValue, msg->data);
if (msg->msgId == MSG_PROC) {
Response response;
response.data = "Yes, you did!";
response.len = 0;
SAMGR_SendResponse(msg, &response);
return TRUE;
}
if (msg->msgId == MSG_TIME_PROC) {
if (msg->msgValue) {
SAMGR_PrintServices();
} else {
SAMGR_PrintOperations();
}
return TRUE;
}
return FALSE;
}
static BOOL SyncCall(IUnknown *iUnknown, struct Payload *payload)
{
(void)iUnknown;
if (payload != NULL && payload->name != NULL) {
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]SyncCall[%p, %p]! Payload<%s, %d, %d>",
(unsigned long)pthread_self(), iUnknown, payload, payload->name, payload->id, payload->value);
return TRUE;
}
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]SyncCall[%p, %p]!", (unsigned long)pthread_self(), iUnknown, payload);
return FALSE;
}
static BOOL AsyncCall(IUnknown *iUnknown, const char *body)
{
Request request;
request.msgId = MSG_PROC;
request.msgValue = 0;
request.len = (uint32_t)(strlen(body) + 1);
request.data = malloc(request.len);
if (request.data == NULL) {
return FALSE;
}
if (strcpy_s(request.data, request.len, body) != EOK) {
free(request.data);
return FALSE;
}
DemoFeature *feature = GET_OBJECT(iUnknown, DemoFeature, iUnknown);
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]AsyncCall[%p, %s]!", (unsigned long)pthread_self(), iUnknown, body);
return SAMGR_SendRequest(&feature->identity, &request, NULL);
}
static BOOL AsyncTimeCall(IUnknown *iUnknown)
{
static BOOL cnt = FALSE;
cnt = !cnt;
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]AsyncTimeCall[%p] MSG_TIME_PROC count=%d!",
(unsigned long)pthread_self(), iUnknown, cnt);
Request request;
request.msgId = MSG_TIME_PROC;
request.msgValue = cnt;
request.len = 0;
request.data = NULL;
DemoFeature *feature = GET_OBJECT(iUnknown, DemoFeature, iUnknown);
return SAMGR_SendRequest(&feature->identity, &request, NULL);
}
typedef struct AsyncBody {
IOwner owner;
INotifyFunc handler;
char body[0];
} AsyncBody;
static void LocalHandler(const Request *request, const Response *response)
{
AsyncBody *body = (AsyncBody *)request->data;
body->handler(body->owner, response->data);
}
static BOOL AsyncCallBack(IUnknown *iUnknown, const char *body, IOwner notify, INotifyFunc handler)
{
int len = strlen(body) + 1;
Request request;
request.msgId = MSG_PROC;
request.msgValue = 0;
request.len = (uint32_t)(sizeof(struct AsyncBody) + len);
request.data = malloc(request.len);
if (request.data == NULL) {
return FALSE;
}
if (strcpy_s(((AsyncBody *)request.data)->body, len, body) != EOK) {
free(request.data);
return FALSE;
}
((AsyncBody *)request.data)->owner = notify;
((AsyncBody *)request.data)->handler = handler;
DemoFeature *feature = GET_OBJECT(iUnknown, DemoFeature, iUnknown);
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]AsyncCallBack[%p, %s, %p, %p]!",
(unsigned long)pthread_self(), iUnknown, body, notify, handler);
return SAMGR_SendRequest(&feature->identity, &request, LocalHandler);
}
enum FUNCID {
ID_ASYNCALL = 0,
ID_ASYNTIMECALL,
ID_SYNCCALL,
ID_ASYNCCALLBACK
};
static int32 Invoke(IServerProxy *iProxy, int funcId, void *origin, IpcIo *req, IpcIo *reply)
{
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]Feature Remote Invoke is called! <%p, %d, %p, %p, %p>",
(unsigned long)pthread_self(), iProxy, funcId, origin, req, reply);
DemoFeatureApi *api = (DemoFeatureApi *)iProxy;
BOOL ret;
size_t len = 0;
switch (funcId) {
case ID_ASYNCALL:
ret = api->AsyncCall((IUnknown *)iProxy, (char *)IpcIoPopString(req, &len));
IpcIoPushBool(reply, ret);
break;
case ID_ASYNTIMECALL:
ret = api->AsyncTimeCall((IUnknown *)iProxy);
IpcIoPushBool(reply, ret);
break;
case ID_SYNCCALL: {
struct Payload payload;
payload.id = IpcIoPopInt32(req);
payload.value = IpcIoPopInt32(req);
payload.name = (char *)IpcIoPopString(req, &len);
ret = api->SyncCall((IUnknown *)iProxy, &payload);
IpcIoPushString(reply, ret ? "TRUE" : "FALSE");
}
break;
case ID_ASYNCCALLBACK: { // convert to sync proxy
IpcIoPushString(reply, "Yes, you did!");
IpcIoPushBool(reply, TRUE);
}
break;
default:
IpcIoPushBool(reply, FALSE);
break;
}
return EC_SUCCESS;
}
static void Init(void)
{
SAMGR_GetInstance()->RegisterFeature(EXAMPLE_SERVICE, (Feature *)&g_example);
SAMGR_GetInstance()->RegisterFeatureApi(EXAMPLE_SERVICE, EXAMPLE_FEATURE, GET_IUNKNOWN(g_example));
}
SYSEX_FEATURE_INIT(Init);
/*
* Copyright (c) 2020 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <unistd.h>
#include <securec.h>
#include "samgr_lite.h"
const char FUN_ARG_S[] = "0123456I";
#define DEFAULT 0
#define MAX_LEN 0x100
void __attribute__((weak)) OHOS_SystemInit(void)
{
SAMGR_Bootstrap();
};
void HiLogPrintf(unsigned char module, unsigned char level, const char *nums, const char *fmt, ...);
int main()
{
HiLogPrintf(DEFAULT, DEFAULT, NULL, "Start Provider System Start");
OHOS_SystemInit();
HiLogPrintf(DEFAULT, DEFAULT, NULL, "Start Provider System End");
pause();
}
void __attribute__((weak)) HiLogPrintf(unsigned char module, unsigned char level,
const char *nums, const char *fmt, ...)
{
static char buf[MAX_LEN] = {0};
va_list args;
va_start(args, fmt);
int ret = vsprintf_s(buf, sizeof(buf), fmt, args);
va_end(args);
if (ret < 0) {
printf("Provider fmt failed(%d)", ret);
}
printf("Provider M:%d l:%d %s\n", module, level, buf);
}
\ No newline at end of file
/*
* Copyright (c) 2020 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "example.h"
#include <ohos_init.h>
#include <pthread.h>
#include <log.h>
#include <ohos_errno.h>
#include "iproxy_server.h"
#include "feature.h"
#include "service.h"
#include "samgr_lite.h"
typedef struct ExampleService {
INHERIT_SERVICE;
INHERIT_IUNKNOWNENTRY(DefaultFeatureApi);
Identity identity;
} ExampleService;
static const char *GetName(Service *service)
{
(void)service;
return EXAMPLE_SERVICE;
}
static BOOL Initialize(Service *service, Identity identity)
{
ExampleService *example = (ExampleService *)service;
example->identity = identity;
HILOG_DEBUG(HILOG_MODULE_APP, "[TID:0x%lx]Initialize(%s)! Identity<%d, %d, %p>", (unsigned long)pthread_self(),
EXAMPLE_SERVICE, identity.serviceId, identity.featureId, identity.queueId);
return TRUE;
}
static BOOL MessageHandle(Service *service, Request *msg)
{
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]MessageHandle(%s)! Request<%d, %d, %p>",
(unsigned long)pthread_self(), service->GetName(service), msg->msgId, msg->msgValue, msg->data);
return FALSE;
}
static TaskConfig GetTaskConfig(Service *service)
{
(void)service;
TaskConfig config = {LEVEL_HIGH, PRI_BELOW_NORMAL, 0x800, 20, SHARED_TASK};
return config;
}
static void SyncCall(IUnknown *iUnknown)
{
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]SyncCall is called! iUnknown[%p]",
(unsigned long)pthread_self(), iUnknown);
}
static int32 Invoke(IServerProxy *iProxy, int funcId, void *origin, IpcIo *req, IpcIo *reply)
{
HILOG_INFO(HILOG_MODULE_APP, "[TID:0x%lx]Service Remote Invoke is called! <%p, %d, %p, %p, %p>",
(unsigned long)pthread_self(), iProxy, funcId, origin, req, reply);
DefaultFeatureApi *defaultApi = (DefaultFeatureApi *)iProxy;
if (funcId == 0) {
defaultApi->SyncCall((IUnknown *)iProxy);
}
return EC_SUCCESS;
}
static ExampleService g_example = {
.GetName = GetName,
.Initialize = Initialize,
.MessageHandle = MessageHandle,
.GetTaskConfig = GetTaskConfig,
SERVER_IPROXY_IMPL_BEGIN,
.Invoke = Invoke,
.SyncCall = SyncCall,
IPROXY_END,
};
static void Init(void)
{
SAMGR_GetInstance()->RegisterService((Service *)&g_example);
SAMGR_GetInstance()->RegisterDefaultFeatureApi(EXAMPLE_SERVICE, GET_IUNKNOWN(g_example));
}
SYSEX_SERVICE_INIT(Init);
......@@ -11,79 +11,66 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import("//build/lite/config/component/lite_component.gni")
import("//build/lite/config/hap_pack.gni")
shared_library("gallery") {
sources = [
"src/gallery_ability.cpp",
"src/gallery_ability_slice.cpp",
"src/picture_ability_slice.cpp",
"src/player_ability_slice.cpp",
]
sources = [
"src/gallery_ability.cpp",
"src/gallery_ability_slice.cpp",
"src/picture_ability_slice.cpp",
"src/player_ability_slice.cpp",
]
include_dirs = [
"include",
"//foundation/aafwk/interfaces/kits/ability_lite",
"//foundation/graphic/lite/interfaces/kits/ui/components",
"//foundation/graphic/lite/interfaces/kits/ui",
"//foundation/graphic/lite/interfaces/kits/utils",
"//foundation/graphic/lite/interfaces/kits/config",
"//foundation/appexecfwk/interfaces/kits/bundle_lite",
"//foundation/aafwk/interfaces/kits/want_lite",
"//foundation/multimedia/interfaces/kits/player_lite",
"//base/startup/interfaces/kits/syspara_lite"
]
include_dirs = [
"include",
"${aafwk_lite_path}/interfaces/kits/ability_lite",
"${appexecfwk_lite_path}/interfaces/kits/bundle_lite",
"${aafwk_lite_path}/interfaces/kits/want_lite",
"//foundation/multimedia/media_lite/interfaces/kits/player_lite",
"//base/startup/syspara_lite/interfaces/kits",
]
deps = [
"//foundation/aafwk/frameworks/ability_lite:aafwk_abilitykit_lite",
"//foundation/appexecfwk/frameworks/bundle_lite:bundle",
"//foundation/communication/frameworks/ipc_lite:liteipc_adapter",
"//foundation/distributedschedule/services/samgr_lite/samgr:samgr",
"//utils/native/lite/kv_store:kv_store",
"//foundation/graphic/lite/frameworks/ui:ui",
"//foundation/graphic/lite/frameworks/surface",
"//foundation/graphic/lite/utils:graphic_utils",
"//foundation/multimedia/frameworks/recorder_lite:recorder",
"//foundation/multimedia/frameworks/player_lite:player"
]
deps = [
"${aafwk_lite_path}/frameworks/ability_lite:aafwk_abilitykit_lite",
"${appexecfwk_lite_path}/frameworks/bundle_lite:bundle",
"//foundation/communication/ipc_lite:liteipc_adapter",
"//foundation/distributedschedule/samgr_lite/samgr:samgr",
"//foundation/graphic/surface",
"//foundation/graphic/ui:lite_ui",
"//foundation/graphic/utils:lite_graphic_utils",
"//foundation/multimedia/media_lite/frameworks/player_lite:player_lite",
"//foundation/multimedia/media_lite/frameworks/recorder_lite:recorder_lite",
"//utils/native/lite/kv_store:kv_store",
]
ldflags = [
"-shared",
]
ldflags = [ "-shared" ]
ldflags += ["-lstdc++"]
ldflags += ["-lpthread"]
ldflags += ["-L$ohos_root_path/sysroot/usr/lib"]
ldflags += ["-Wl,-rpath-link=$ohos_root_path/sysroot/usr/lib"]
ldflags += ["-lui",
"-lsurface",
"-lplayer",
"-lability"
]
ldflags += [ "-lstdc++" ]
ldflags += [ "-lpthread" ]
ldflags += [ "-L$ohos_root_path/sysroot/usr/lib" ]
ldflags += [ "-Wl,-rpath-link=$ohos_root_path/sysroot/usr/lib" ]
ldflags += [
"-lui",
"-lsurface",
"-lplayer_lite",
"-lability",
]
defines = [
"OHOS_APPEXECFWK_BMS_BUNDLEMANAGER",
"ENABLE_WINDOW=1",
"ABILITY_WINDOW_SUPPORT"
]
defines = [
"OHOS_APPEXECFWK_BMS_BUNDLEMANAGER",
"ENABLE_WINDOW=1",
"ABILITY_WINDOW_SUPPORT",
]
}
lite_component("gallery_component") {
features = [
":gallery",
]
}
hap_pack("gallery_hap")
{
deps = [":gallery"]
mode = "hap"
json_path = "config.json"
ability_so_path = "$root_out_dir/libgallery.so"
force = "true"
cert_profile = "cert/gallery_HarmonyAppProvision_Release.p7b"
resources_path = "resources"
hap_name = "gallery"
hap_pack("gallery_hap") {
deps = [ ":gallery" ]
mode = "hap"
json_path = "config.json"
ability_so_path = "$root_out_dir/libgallery.so"
force = "true"
cert_profile = "cert/gallery_HarmonyAppProvision_Release.p7b"
resources_path = "resources"
hap_name = "gallery"
privatekey = "HOS Application Provision Release"
}
文件模式从 100644 更改为 100755
{
"app": {
"bundleName": "com.huawei.gallery",
"vendor": "huawei",
"version": {
"code": 1,
"name": "1.0"
},
"apiVersion": {
"compatible": 3,
"target": 4
}
},
"deviceConfig": {
"default": {
}
},
"module": {
"package": "com.huawei.gallery",
"name": ".MyHarmonyAbilityPackage",
"deviceType": [
"phone",
"tv",
"tablet",
"pc",
"car",
"smartWatch",
"sportsWatch",
"smartVision"
],
"distro": {
"deliveryWithInstall": true,
"moduleName": "gallery",
"moduleType": "entry"
},
"abilities": [
{
"name": "GalleryAbility",
"icon": "assets/gallery/resources/drawable/com.huawei.photos.png",
"label": "test app 1",
"launchType": "standard",
"type": "page",
"visible": true
}
],
"reqPermissions": [
{
"name": "ohos.permission.MODIFY_AUDIO_SETTINGS",
"reason": "SYSTEM_GRANT",
"usedScene": {
"ability": [
".FormAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.READ_MEDIA",
"reason": "USER_GRANT",
"usedScene": {
"ability": [
".FormAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.READ_MEDIA_AUDIO",
"reason": "USER_GRANT",
"usedScene": {
"ability": [
".FormAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.READ_MEDIA_IMAGES",
"reason": "USER_GRANT",
"usedScene": {
"ability": [
".FormAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.READ_MEDIA_VIDEO",
"reason": "USER_GRANT",
"usedScene": {
"ability": [
".FormAbility"
],
"when": "inuse"
}
}
]
}
{
"app": {
"bundleName": "com.huawei.gallery",
"vendor": "huawei",
"version": {
"code": 1,
"name": "1.0"
},
"apiVersion": {
"compatible": 3,
"target": 4
}
},
"deviceConfig": {
"default": {
}
},
"module": {
"package": "com.huawei.gallery",
"name": ".MyHarmonyAbilityPackage",
"deviceType": [
"phone",
"tv",
"tablet",
"pc",
"car",
"smartWatch",
"sportsWatch",
"smartVision"
],
"distro": {
"deliveryWithInstall": true,
"moduleName": "gallery",
"moduleType": "entry"
},
"abilities": [
{
"name": "GalleryAbility",
"icon": "assets/gallery/resources/drawable/com.huawei.photos.png",
"label": "test app 1",
"launchType": "standard",
"type": "page",
"visible": true
}
],
"reqPermissions": [
{
"name": "ohos.permission.MODIFY_AUDIO_SETTINGS",
"reason": "SYSTEM_GRANT",
"usedScene": {
"ability": [
".FormAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.READ_MEDIA",
"reason": "USER_GRANT",
"usedScene": {
"ability": [
".FormAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.READ_MEDIA_AUDIO",
"reason": "USER_GRANT",
"usedScene": {
"ability": [
".FormAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.READ_MEDIA_IMAGES",
"reason": "USER_GRANT",
"usedScene": {
"ability": [
".FormAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.READ_MEDIA_VIDEO",
"reason": "USER_GRANT",
"usedScene": {
"ability": [
".FormAbility"
],
"when": "inuse"
}
}
]
}
}
\ No newline at end of file
......@@ -36,20 +36,28 @@ public:
onLongPress_ = std::move(onLongPress);
}
bool OnClick(UIView &view, const ClickEvent &event) override
bool OnClick(UIView& view, const ClickEvent &event) override
{
if (!onClick_) {
return false;
}
return onClick_(view, event);
UIView *currentView = &view;
if (currentView == nullptr) {
return false;
}
return onClick_(*currentView, event);
}
bool OnLongPress(UIView &view, const LongPressEvent &event) override
bool OnLongPress(UIView& view, const LongPressEvent &event) override
{
if (!onLongPress_) {
return false;
}
return onLongPress_(view, event);
UIView *currentView = &view;
if (currentView == nullptr) {
return false;
}
return onLongPress_(*currentView, event);
}
private:
......
文件模式从 100644 更改为 100755
......@@ -59,6 +59,8 @@ private:
UIScrollView* picContainer_ { nullptr };
UIViewGroup* picList_ { nullptr };
char* pictureName_[MAX_PICTURE_COUNT] = { nullptr };
char backIconAbsolutePath[MAX_PATH_LENGTH] = { 0 };
char videoTagIconAbsolutePath[MAX_PATH_LENGTH] = { 0 };
uint16_t pictureOnClickListenerCount_ { 0 };
EventListener* pictureOnClickListener_[MAX_PICTURE_COUNT] = { nullptr };
};
......
......@@ -25,8 +25,6 @@ static const char* const VIDEO_PAUSE_PATH = "/gallery/assets/gallery/resources/d
static constexpr int16_t MAX_PICTURE_COUNT = 256;
static constexpr uint16_t MAX_PATH_LENGTH = 512;
static char g_backIconAbsolutePath[MAX_PATH_LENGTH] = {0};
static char g_videoTagIconAbsolutePath[MAX_PATH_LENGTH] = {0};
/** thumb, photo, and video folder path */
static const char* const THUMBNAIL_DIRECTORY = "/userdata/thumb";
......@@ -69,10 +67,6 @@ static const char* const PHOTO_PREFIX = "photo";
static const char* const AVAILABEL_SOURCE_TYPE = ".mp4";
static const char* const AVAILABEL_SOURCE_TYPE_MP4 = ".MP4";
/** player */
static char g_videoPlayAbsolutePath[MAX_PATH_LENGTH] = {0};
static char g_videoPauseAbsolutePath[MAX_PATH_LENGTH] = {0};
/** playback status bar */
static constexpr uint16_t STATUS_BAR_GROUP_HEIGHT = 96;
static constexpr uint16_t TOGGLE_BUTTON_OFFSET_X = 36;
......
......@@ -20,6 +20,7 @@
#include "components/ui_image_view.h"
#include "components/ui_view_group.h"
#include "event_listener.h"
#include "gallery_config.h"
namespace OHOS {
class PictureAbilitySlice : public AbilitySlice {
......@@ -43,6 +44,7 @@ private:
UIImageView* backIcon_ { nullptr };
EventListener* backIconListener_ { nullptr };
UIImageView* picture_ { nullptr };
char backIconAbsolutePath[MAX_PATH_LENGTH] = { 0 };
};
}
......
......@@ -52,7 +52,7 @@ public:
virtual ~ToggleBtnListener() {}
bool OnClick(UIView& view, const ClickEvent& event) override;
bool OnClick(UIView &view, const ClickEvent& event) override;
void SetCompleteFlag(bool state)
{
......@@ -145,6 +145,9 @@ private:
UISlider* slider_ { nullptr };
UILabel* totalTimeLabel_ { nullptr };
UILabel* errorTips_ { nullptr };
char backIconAbsolutePath[MAX_PATH_LENGTH] = { 0 };
char videoPlayAbsolutePath[MAX_PATH_LENGTH] = { 0 };
char videoPauseAbsolutePath[MAX_PATH_LENGTH] = { 0 };
};
} // namespace OHOS
#endif // OHOS_PLAYER_ABILITY_SLICE_H
\ No newline at end of file
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
......@@ -121,7 +121,7 @@ void GalleryAbilitySlice::InitTitle()
printf("GalleryAbilitySlice::InitTitle | start \n");
backIcon_ = new UIImageView();
backIcon_->SetPosition(BACK_ICON_POSITION_X, BACK_ICON_POSITION_Y);
backIcon_->SetSrc(g_backIconAbsolutePath);
backIcon_->SetSrc(backIconAbsolutePath);
backIcon_->SetTouchable(true);
backArea_ = new UIViewGroup();
......@@ -198,19 +198,19 @@ void GalleryAbilitySlice::AddAllPictures(const Point& pos, int16_t numInLine)
{
printf("GalleryAbilitySlice::AddAllPictures | start | %d\n", numInLine);
Point imagePos = pos;
void* drip = FileOpenDir(THUMBNAIL_DIRECTORY);
DIR* drip = opendir(THUMBNAIL_DIRECTORY);
if (drip == nullptr) {
return;
}
FileDirentInfo* info = new FileDirentInfo();
while (FileReadDir(drip, info) >= 0 && pictureCount_ < MAX_PICTURE_COUNT) {
uint16_t imageNameLen = static_cast<uint16_t>(strlen(info->name));
if (imageNameLen > MAX_PATH_LENGTH) {
struct dirent* info = nullptr;
while ((info = readdir(drip)) != nullptr && pictureCount_ < MAX_PICTURE_COUNT) {
uint16_t imageNameLen = static_cast<uint16_t>(strlen(info->d_name));
if (imageNameLen > MAX_PATH_LENGTH || (strcmp(info->d_name, ".") == 0) || (strcmp(info->d_name, "..") == 0)) {
printf("GalleryAbilitySlice::AddAllPictures | imageNameLen > MAX_PATH_LENGTH | %d\n", imageNameLen);
continue;
}
char* imageName = new char[imageNameLen + 1]();
memcpy_s(imageName, imageNameLen + 1, info->name, imageNameLen + 1);
memcpy_s(imageName, imageNameLen + 1, info->d_name, imageNameLen + 1);
pictureName_[pictureCount_] = imageName;
pictureCount_++;
......@@ -220,7 +220,7 @@ void GalleryAbilitySlice::AddAllPictures(const Point& pos, int16_t numInLine)
continue;
}
char* imagePath = new char[pathLen + 1]();
if (sprintf_s(imagePath, pathLen + 1, "%s/%s", THUMBNAIL_DIRECTORY, info->name) < 0) {
if (sprintf_s(imagePath, pathLen + 1, "%s/%s", THUMBNAIL_DIRECTORY, info->d_name) < 0) {
printf("GalleryAbilitySlice::AddAllPictures | sprintf_s error\n");
delete[] imagePath;
continue;
......@@ -237,7 +237,7 @@ void GalleryAbilitySlice::AddAllPictures(const Point& pos, int16_t numInLine)
}
}
delete info;
FileCloseDir(drip);
closedir(drip);
}
UIView* GalleryAbilitySlice::CreateImageItem(const Point& pos, const char* imageName, const char* imagePath)
......@@ -264,7 +264,7 @@ UIView* GalleryAbilitySlice::CreateImageItem(const Point& pos, const char* image
UIImageView* videoTag = new UIImageView();
videoTag->SetPosition(VIDEO_TAG_POSITION_X, VIDEO_TAG_POSITION_Y);
videoTag->SetSrc(g_videoTagIconAbsolutePath);
videoTag->SetSrc(videoTagIconAbsolutePath);
videoTag->SetTouchable(true);
videoTag->SetOnClickListener(imageView->GetOnClickListener());
......@@ -319,31 +319,31 @@ void GalleryAbilitySlice::DeleteAllData()
void GalleryAbilitySlice::DeleteAllFilesInDir(const char* path)
{
void* drip = FileOpenDir(path);
DIR* drip = opendir(path);
if (drip == nullptr) {
return;
}
FileDirentInfo* info = new FileDirentInfo();
while (FileReadDir(drip, info) >= 0) {
uint16_t fileNameLen = static_cast<uint16_t>(strlen(info->name));
struct dirent* info = nullptr;
while ((info = readdir(drip)) != nullptr) {
uint16_t fileNameLen = static_cast<uint16_t>(strlen(info->d_name));
uint16_t pathLen = static_cast<uint16_t>(strlen(path)) + fileNameLen + 1;
if (pathLen > MAX_PATH_LENGTH) {
printf("GalleryAbilitySlice::AddAllPictures | pathLen > MAX_PATH_LENGTH | %d\n", pathLen);
continue;
}
char* filePath = new char[pathLen + 1]();
if (sprintf_s(filePath, pathLen + 1, "%s/%s", path, info->name) < 0) {
if (sprintf_s(filePath, pathLen + 1, "%s/%s", path, info->d_name) < 0) {
printf("GalleryAbilitySlice::AddAllPictures | sprintf_s error\n");
delete[] filePath;
continue;
}
if (FileUnlink(filePath) != 0) {
if (unlink(filePath) != 0) {
printf("unlink file error | %s\n", filePath);
}
delete[] filePath;
}
delete info;
FileCloseDir(drip);
closedir(drip);
printf("GalleryAbilitySlice::DeleteAllFilesInDir() | success | %s\n", path);
}
......@@ -357,12 +357,12 @@ void GalleryAbilitySlice::OnStart(const Want &want)
rootView_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
const char* pathHeader = GetSrcPath();
if (sprintf_s(g_backIconAbsolutePath, MAX_PATH_LENGTH, "%s%s", pathHeader, BACK_ICON_PATH) < 0) {
printf("GalleryAbilitySlice::OnStart | g_backIconAbsolutePath error");
if (sprintf_s(backIconAbsolutePath, MAX_PATH_LENGTH, "%s%s", pathHeader, BACK_ICON_PATH) < 0) {
printf("GalleryAbilitySlice::OnStart | backIconAbsolutePath error");
return;
}
if (sprintf_s(g_videoTagIconAbsolutePath, MAX_PATH_LENGTH, "%s%s", pathHeader, VIDEO_TAG_ICON_PATH) < 0) {
printf("GalleryAbilitySlice::OnStart | g_videoTagIconAbsolutePath error");
if (sprintf_s(videoTagIconAbsolutePath, MAX_PATH_LENGTH, "%s%s", pathHeader, VIDEO_TAG_ICON_PATH) < 0) {
printf("GalleryAbilitySlice::OnStart | videoTagIconAbsolutePath error");
return;
}
......
......@@ -58,7 +58,7 @@ void PictureAbilitySlice::InitTitle()
printf("PictureAbilitySlice::InitTitle | start \n");
backIcon_ = new UIImageView();
backIcon_->SetPosition(BACK_ICON_POSITION_X, BACK_ICON_POSITION_Y);
backIcon_->SetSrc(g_backIconAbsolutePath);
backIcon_->SetSrc(backIconAbsolutePath);
backIcon_->SetTouchable(true);
backArea_ = new UIViewGroup();
......@@ -101,7 +101,7 @@ void PictureAbilitySlice::InitPicture(const char* path)
}
float scale = (scaleWidth < scaleHeight) ? scaleWidth : scaleHeight;
printf("########## scale: %f \n", scale);
transMap.Scale(Vector2<float>(scale, scale), Vector2<int16_t>(0, 0));
transMap.Scale(Vector2<float>(scale, scale), Vector2<float>(0, 0));
picture_->SetTransformMap(transMap);
picture_->SetTransformAlgorithm(TransformAlgorithm::NEAREST_NEIGHBOR);
imageWidth = imageWidth * scale;
......@@ -134,12 +134,16 @@ void PictureAbilitySlice::OnStart(const Want &want)
char* imagePath = new char[imagePathLen + 1]();
if (sprintf_s(imagePath, imagePathLen + 1, "%s/%s", PHOTO_DIRECTORY, reinterpret_cast<char*>(want.data)) < 0) {
printf("PictureAbilitySlice::OnStart | imagePath\n");
delete[] imagePath;
imagePath = nullptr;
return;
}
const char* pathHeader = GetSrcPath();
if (sprintf_s(g_backIconAbsolutePath, MAX_PATH_LENGTH, "%s%s", pathHeader, BACK_ICON_PATH) < 0) {
printf("PictureAbilitySlice::OnStart | g_backIconAbsolutePath\n");
if (sprintf_s(backIconAbsolutePath, MAX_PATH_LENGTH, "%s%s", pathHeader, BACK_ICON_PATH) < 0) {
printf("PictureAbilitySlice::OnStart | backIconAbsolutePath\n");
delete[] imagePath;
imagePath = nullptr;
return;
}
......@@ -174,4 +178,4 @@ void PictureAbilitySlice::OnStop()
AbilitySlice::OnStop();
Clear();
}
}
\ No newline at end of file
}
......@@ -134,11 +134,11 @@ void PlayerAbilitySlice::SetUpBackArea(const char* pathHeader)
backIcon_ = new UIImageView();
backIcon_->SetPosition(BACK_ICON_POSITION_X, BACK_ICON_POSITION_Y);
if (sprintf_s(g_backIconAbsolutePath, MAX_PATH_LENGTH, "%s%s", pathHeader, BACK_ICON_PATH) < 0) {
printf("PlayerAbilitySlice::OnStart | g_backIconAbsolutePath | %s\n", pathHeader);
if (sprintf_s(backIconAbsolutePath, MAX_PATH_LENGTH, "%s%s", pathHeader, BACK_ICON_PATH) < 0) {
printf("PlayerAbilitySlice::OnStart | backIconAbsolutePath | %s\n", pathHeader);
return;
}
backIcon_->SetSrc(g_backIconAbsolutePath);
backIcon_->SetSrc(backIconAbsolutePath);
backIcon_->SetTouchable(true);
backIconListener_ = new EventListener(onClick, nullptr);
backIcon_->SetOnClickListener(backIconListener_);
......@@ -303,20 +303,19 @@ void PlayerAbilitySlice::SetUpToggleButton(const char* pathHeader)
TOGGLE_BUTTON_WIDTH, TOGGLE_BUTTON_HEIGHT);
toggleButton_->SetState(true);
if (sprintf_s(g_videoPlayAbsolutePath, MAX_PATH_LENGTH, "%s%s", pathHeader, VIDEO_PALY_PATH) < 0) {
printf("PlayerAbilitySlice::OnStart | g_videoPlayAbsolutePath\n");
if (sprintf_s(videoPlayAbsolutePath, MAX_PATH_LENGTH, "%s%s", pathHeader, VIDEO_PALY_PATH) < 0) {
printf("PlayerAbilitySlice::OnStart | videoPlayAbsolutePath\n");
return;
}
if (sprintf_s(g_videoPauseAbsolutePath, MAX_PATH_LENGTH, "%s%s", pathHeader, VIDEO_PAUSE_PATH) < 0) {
printf("PlayerAbilitySlice::OnStart | g_videoPauseAbsolutePath\n");
if (sprintf_s(videoPauseAbsolutePath, MAX_PATH_LENGTH, "%s%s", pathHeader, VIDEO_PAUSE_PATH) < 0) {
printf("PlayerAbilitySlice::OnStart | videoPauseAbsolutePath\n");
return;
}
toggleButton_->SetImages(g_videoPauseAbsolutePath, g_videoPlayAbsolutePath);
toggleButton_->SetImages(videoPauseAbsolutePath, videoPlayAbsolutePath);
onClickListener_ = new ToggleBtnListener(toggleButton_, videoPlayer_, animator_, surfaceView_);
toggleButtonArea_ = new UIViewGroup();
toggleButtonArea_->SetStyle(STYLE_BACKGROUND_OPA, 0);
toggleButtonArea_->SetPosition(0, 0, TOGGLE_BUTTON_OFFSET_X + TOGGLE_BUTTON_WIDTH, STATUS_BAR_GROUP_HEIGHT);
toggleButtonArea_->SetTouchable(true);
toggleButtonArea_->SetOnClickListener(onClickListener_);
......@@ -428,7 +427,7 @@ void SliderAnimator::Callback(UIView* view)
}
}
bool ToggleBtnListener::OnClick(UIView& view, const ClickEvent& event)
bool ToggleBtnListener::OnClick(UIView &view, const ClickEvent& event)
{
button_->OnClickEvent(event);
if (completeFlag_) {
......
......@@ -10,66 +10,55 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//build/lite/config/component/lite_component.gni")
import("//build/lite/config/hap_pack.gni")
shared_library("launcher") {
sources = [
"launcher/src/main/cpp/main_ability.cpp",
"launcher/src/main/cpp/main_ability_slice.cpp",
"launcher/src/main/cpp/swipe_view.cpp",
"launcher/src/main/cpp/app_info.cpp",
"launcher/src/main/cpp/long_press_view.cpp",
"launcher/src/main/cpp/app_manage.cpp",
"launcher/src/main/cpp/view_group_page.cpp",
"launcher/src/main/cpp/time_weather_view.cpp"
]
deps = [
"//foundation/aafwk/frameworks/ability_lite:aafwk_abilitykit_lite",
"//foundation/appexecfwk/frameworks/bundle_lite:bundle",
"//foundation/communication/frameworks/ipc_lite:liteipc_adapter",
"//foundation/distributedschedule/services/samgr_lite/samgr:samgr",
"//utils/native/lite/kv_store:kv_store",
"//foundation/graphic/lite/frameworks/ui:ui",
"//foundation/graphic/lite/utils:graphic_utils",
"//foundation/graphic/lite/frameworks/surface",
]
sources = [
"launcher/src/main/cpp/app_info.cpp",
"launcher/src/main/cpp/app_manage.cpp",
"launcher/src/main/cpp/long_press_view.cpp",
"launcher/src/main/cpp/main_ability.cpp",
"launcher/src/main/cpp/main_ability_slice.cpp",
"launcher/src/main/cpp/swipe_view.cpp",
"launcher/src/main/cpp/time_weather_view.cpp",
"launcher/src/main/cpp/view_group_page.cpp",
]
include_dirs = [
"launcher/src/main/cpp",
"//foundation/aafwk/interfaces/kits/ability_lite",
"//foundation/graphic/lite/interfaces/kits/ui/components",
"//foundation/graphic/lite/interfaces/kits/ui",
"//foundation/graphic/lite/interfaces/kits/utils",
"//foundation/graphic/lite/interfaces/kits/config",
"//foundation/appexecfwk/interfaces/kits/bundle_lite",
"//foundation/aafwk/interfaces/kits/want_lite",
"//base/startup/interfaces/kits/syspara_lite",
]
defines = [
"ENABLE_WINDOW=1",
"ABILITY_WINDOW_SUPPORT",
"OHOS_APPEXECFWK_BMS_BUNDLEMANAGER"
]
}
deps = [
"${aafwk_lite_path}/frameworks/ability_lite:aafwk_abilitykit_lite",
"${appexecfwk_lite_path}/frameworks/bundle_lite:bundle",
"//foundation/communication/ipc_lite:liteipc_adapter",
"//foundation/distributedschedule/samgr_lite/samgr:samgr",
"//foundation/graphic/surface",
"//foundation/graphic/ui:lite_ui",
"//foundation/graphic/utils:lite_graphic_utils",
"//utils/native/lite/kv_store:kv_store",
]
lite_component("launcher_component") {
include_dirs = [
"launcher/src/main/cpp",
"${aafwk_lite_path}/interfaces/kits/ability_lite",
"${appexecfwk_lite_path}/interfaces/kits/bundle_lite",
"${aafwk_lite_path}/interfaces/kits/want_lite",
"//base/startup/syspara_lite/interfaces/kits",
]
features = [
":launcher",
]
defines = [
"ENABLE_WINDOW=1",
"ABILITY_WINDOW_SUPPORT",
"OHOS_APPEXECFWK_BMS_BUNDLEMANAGER",
]
}
hap_pack("launcher_hap")
{
deps = [":launcher"]
mode = "hap"
json_path = "launcher/src/main/config.json"
ability_so_path = "$root_out_dir/liblauncher.so"
force = "true"
cert_profile = "cert/com.huawei.launcher_HarmonyAppProvision_release.p7b"
resources_path = "launcher/src/main/resources"
hap_name = "launcher"
hap_pack("launcher_hap") {
deps = [ ":launcher" ]
mode = "hap"
json_path = "launcher/src/main/config.json"
ability_so_path = "$root_out_dir/liblauncher.so"
force = "true"
cert_profile = "cert/com.huawei.launcher_HarmonyAppProvision_release.p7b"
resources_path = "launcher/src/main/resources"
hap_name = "launcher"
privatekey = "HOS Application Provision Release"
}
{
"app": {
"bundleName": "com.huawei.launcher",
"vendor": "huawei",
"version": {
"code": 1,
"name": "1.0"
},
"apiVersion": {
"compatible": 3,
"target": 4
}
},
"deviceConfig": {
"default": {
"keepAlive": true
},
"smartCamera": {
"keepAlive": true
}
},
"module": {
"package": "com.huawei.launcher",
"name": ".MyHarmonyAbilityPackage",
"deviceType": [
"phone", "tv","tablet", "pc","car","smartWatch","sportsWatch","smartVision"
],
"distro": {
"deliveryWithInstall": true,
"moduleName": "launcher",
"moduleType": "entry"
},
"abilities": [{
"name": "MainAbility",
"icon": "assets/launcher/resources/base/media/background.png",
"label": "launcher",
"launchType": "standard",
"type": "page",
"visible":true
}
]
}
}
{
"app": {
"bundleName": "com.huawei.launcher",
"vendor": "huawei",
"version": {
"code": 1,
"name": "1.0"
},
"apiVersion": {
"compatible": 3,
"target": 4
}
},
"deviceConfig": {
"default": {
"keepAlive": true
},
"smartCamera": {
"keepAlive": true
}
},
"module": {
"package": "com.huawei.launcher",
"name": ".MyHarmonyAbilityPackage",
"deviceType": [
"phone", "tv","tablet", "pc","car","smartWatch","sportsWatch","smartVision"
],
"distro": {
"deliveryWithInstall": true,
"moduleName": "launcher",
"moduleType": "entry"
},
"abilities": [{
"name": "MainAbility",
"icon": "assets/launcher/resources/base/media/background.png",
"label": "launcher",
"launchType": "standard",
"type": "page",
"visible":true
}
]
}
}
......@@ -39,10 +39,6 @@ void AppInfo::Release()
delete appLpListener_;
appLpListener_ = nullptr;
}
if (appDListener_) {
delete appDListener_;
appDListener_ = nullptr;
}
}
AppInfo::~AppInfo()
......@@ -56,7 +52,6 @@ void AppInfo::ReSet()
lable_ = nullptr;
appClickListener_ = nullptr;
appLpListener_ = nullptr;
appDListener_ = nullptr;
}
void AppInfo::SetButton(UILabelButton* button)
......@@ -92,16 +87,13 @@ void AppInfo::SetLable(UILabel* lable)
void AppInfo::SetListener(AppInfo* app)
{
AppClickListener* appClickListener = new AppClickListener(app->funcclick_, this);
button_->SetOnClickListener(appClickListener);
appClickListener_ = static_cast<UIView::OnClickListener*>(appClickListener);
AppLongPressListener* appLpListener = new AppLongPressListener(app->funclPress_, this);
button_->SetOnLongPressListener(appLpListener);
appLpListener_ = static_cast<UIView::OnLongPressListener*>(appLpListener);
AppDragListener* appDListener = new AppDragListener(this);
AppClickListener* clickListener = new AppClickListener(app->funcclick_, this);
button_->SetOnClickListener(clickListener);
appClickListener_ = static_cast<UIView::OnClickListener*>(clickListener);
AppLongPressListener* lPListener = new AppLongPressListener(app->funclPress_, this);
button_->SetOnLongPressListener(lPListener);
appLpListener_ = static_cast<UIView::OnLongPressListener*>(lPListener);
button_->SetDraggable(true);
button_->SetOnDragListener(appDListener);
appDListener_ = static_cast<UIView::OnDragListener*>(appDListener);
}
void AppInfo::SetLocation(int16_t r, int16_t c)
......
......@@ -26,10 +26,10 @@
namespace OHOS {
class AppInfo;
typedef bool (*funcLongPress)(AppInfo *app);
typedef bool (*funcClick)(AppInfo *app);
typedef bool (*UninstallApp)(AppInfo *app);
typedef bool (*AddApp)(AppInfo *app);
using funcLongPress = bool (*)(AppInfo *app);
using funcClick = bool (*)(AppInfo *app);
using UninstallApp = bool (*)(AppInfo *app);
using AddApp = bool (*)(AppInfo *app);
struct MyPoint {
int16_t x; // the x coordinate of the point
......@@ -51,7 +51,6 @@ public:
UILabel* lable_ { nullptr };
UIView::OnLongPressListener* appLpListener_ { nullptr };
UIView::OnDragListener* appDListener_ { nullptr };
UIView::OnClickListener* appClickListener_ { nullptr };
funcClick funcclick_ { nullptr };
......@@ -61,30 +60,9 @@ public:
MyPoint buttonXY_ { 0 };
MyPoint buttonHV_ { 0 };
MyPoint row_col_ { 0 };
char appName_[TMP_BUF_SIZE];
char abilityName_[TMP_BUF_SIZE];
char appIconDir_[TMP_BUF_SIZE];
};
class AppDragListener : public UIView::OnDragListener {
public:
AppDragListener(AppInfo* app) : appInfo_(app) {}
virtual ~AppDragListener() {}
bool OnDrag(UIView &view, const DragEvent &event) override
{
return true;
}
bool OnDragEnd(UIView& view, const DragEvent& event) override
{
return true;
}
bool OnDragStart(UIView& view, const DragEvent& event) override
{
return true;
}
private:
AppInfo* appInfo_ { nullptr };
char appName_[TMP_BUF_SIZE] = { 0 };
char abilityName_[TMP_BUF_SIZE] = { 0 };
char appIconDir_[TMP_BUF_SIZE] = { 0 };
};
class AppClickListener : public UIView::OnClickListener {
......
......@@ -13,7 +13,7 @@
* limitations under the License.
*/
#include <stdio.h>
#include <cstdio>
#include <securec.h>
#include "app_manage.h"
......@@ -96,9 +96,10 @@ void AppManage::MyBundleStateCallback(
if (installType == 0) { // install update
if (resultCode == 0 && bundleName != nullptr) {
char tmpName[TMP_BUF_SIZE] = {0};
memcpy_s(tmpName, sizeof(tmpName), bundleName, strlen(bundleName));
tmpName[strlen(bundleName)] = 0;
GetAppInstallInfo(tmpName);
if (memcpy_s(tmpName, sizeof(tmpName), bundleName, strlen(bundleName)) == LAUNCHER_SUCCESS) {
tmpName[strlen(bundleName)] = 0;
GetAppInstallInfo(tmpName);
}
}
}
}
......
文件模式从 100644 更改为 100755
......@@ -39,7 +39,11 @@ public:
if (!onClick_) {
return false;
}
return onClick_(view, event);
UIView *currentView = &view;
if (currentView == nullptr) {
return false;
}
return onClick_(*currentView, event);
}
bool OnLongPress(UIView& view, const LongPressEvent& event) override
......@@ -47,7 +51,11 @@ public:
if (!onLongPress_) {
return false;
}
return onLongPress_(view, event);
UIView *currentView = &view;
if (currentView == nullptr) {
return false;
}
return onLongPress_(*currentView, event);
}
private:
......
......@@ -88,12 +88,16 @@ void LongPressView::Show(UIViewGroup* viewParent, AppInfo* pApp)
bool LongPressView::OnClick(UIView& view, const ClickEvent& event)
{
UIView *currentView = &view;
if (currentView == nullptr) {
return false;
}
UILabelButton* lbutt = nullptr;
lbutt = static_cast<UILabelButton*>(&view);
lbutt = static_cast<UILabelButton*>(currentView);
RemoveLview();
if (&view == buttUninstall_) {
if (currentView == buttUninstall_) {
uninstall_(app_);
}
return true;
}
} // namespace OHOS
\ No newline at end of file
} // namespace OHOS
......@@ -23,9 +23,9 @@
namespace OHOS {
class LongPressView : public UIView::OnClickListener, public NativeBase {
public:
LongPressView(UninstallApp uninstall);
explicit LongPressView(UninstallApp uninstall);
virtual ~LongPressView();
bool OnClick(UIView &view, const ClickEvent& event) override;
bool OnClick(UIView& view, const ClickEvent& event) override;
void RemoveLview();
void Show(UIViewGroup* viewParent, AppInfo* pApp);
void SetStatus(bool status)
......@@ -33,7 +33,7 @@ public:
bStatus_ = status;
}
bool GetStatus()
bool GetStatus() const
{
return bStatus_;
}
......
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
......@@ -58,7 +58,7 @@ void MainAbilitySlice::SetHead()
sprintf_s(tmp, sizeof(tmp), "%02d : %02d", st->tm_hour, st->tm_min);
UILabel* label = new UILabel();
rootview_->Add(label);
label->SetPosition(0, 0, LA_HORIZONTAL_RESOLUTION, LABLE_TITLE_HEIGHT);
label->SetPosition(0, 0, Screen::GetInstance().GetWidth(), LABLE_TITLE_HEIGHT);
label->SetText(tmp);
label->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_TOP);
label->SetFont(FOND_PATH, LAUNCHER_FOND_ID);
......@@ -72,7 +72,8 @@ void MainAbilitySlice::SetTail()
{
UILabel* label = new UILabel();
rootview_->Add(label);
label->SetPosition(0, LA_VERTICAL_RESOLUTION - LABLE_TAIL_HEIGHT, LA_HORIZONTAL_RESOLUTION, LABLE_TAIL_HEIGHT);
label->SetPosition(0, Screen::GetInstance().GetHeight() - LABLE_TAIL_HEIGHT,
Screen::GetInstance().GetWidth(), LABLE_TAIL_HEIGHT);
char buf[TMP_BUF_SIZE] = { 0 };
sprintf_s(buf, sizeof(buf), ".%d.", 1);
label->SetText(buf);
......@@ -89,7 +90,7 @@ void MainAbilitySlice::SetImageView()
uiImageView_ = new UIImageView();
// modify image view height
uiImageView_->SetPosition(0, 0, LA_HORIZONTAL_RESOLUTION, LA_VERTICAL_RESOLUTION);
uiImageView_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
uiImageView_->SetStyle(STYLE_BACKGROUND_COLOR, Color::ColorTo32(Color::White()));
uiImageView_->SetSrc(TABLE_BACKGROUND);
uiImageView_->SetStyle(STYLE_BACKGROUND_OPA, UN_OPACITY);
......@@ -106,11 +107,9 @@ void MainAbilitySlice::SetSwipe()
void MainAbilitySlice::OnStart(const Want& want)
{
AbilitySlice::OnStart(want);
LA_HORIZONTAL_RESOLUTION = Screen::GetInstance().GetWidth();
LA_VERTICAL_RESOLUTION = Screen::GetInstance().GetHeight();
rootview_ = RootView::GetWindowRootView();
rootview_->SetPosition(0, 0);
rootview_->Resize(LA_HORIZONTAL_RESOLUTION, LA_VERTICAL_RESOLUTION);
rootview_->Resize(Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
rootview_->SetStyle(STYLE_BACKGROUND_OPA, UN_OPACITY);
rootview_->SetStyle(STYLE_BACKGROUND_COLOR, Color::ColorTo32(Color::GetColorFromRGB(0x30, 0x30, 0x30)));
......
文件模式从 100644 更改为 100755
......@@ -21,6 +21,8 @@
namespace OHOS {
class NativeBase : public HeapBase {
public:
NativeBase() {}
virtual ~NativeBase() {}
void DeleteChildren(UIView *view)
{
if (view == nullptr) {
......
......@@ -45,11 +45,9 @@ SwipeView::~SwipeView()
void SwipeView::SetUpSwipe()
{
LA_HORIZONTAL_RESOLUTION = Screen::GetInstance().GetWidth();
LA_VERTICAL_RESOLUTION = Screen::GetInstance().GetHeight();
swipe_ = new UISwipeView();
swipe_->SetPosition(0, LABLE_TITLE_HEIGHT, LA_HORIZONTAL_RESOLUTION,
LA_VERTICAL_RESOLUTION - LABLE_TITLE_HEIGHT - LABLE_TAIL_HEIGHT);
swipe_->SetPosition(0, LABLE_TITLE_HEIGHT, Screen::GetInstance().GetWidth(),
Screen::GetInstance().GetHeight() - LABLE_TITLE_HEIGHT - LABLE_TAIL_HEIGHT);
swipe_->SetStyle(STYLE_BACKGROUND_OPA, TOTAL_OPACITY);
swipe_->SetLoopState(true);
swipe_->SetAnimatorTime(20); // set swipe view animator time 20s
......@@ -61,8 +59,8 @@ UIViewGroup* SwipeView::AddViewGroup()
return nullptr;
}
UIViewGroup* viewGroup = new UIViewGroup();
viewGroup->SetPosition(0, LABLE_TITLE_HEIGHT, LA_HORIZONTAL_RESOLUTION,
LA_VERTICAL_RESOLUTION - LABLE_TITLE_HEIGHT - LABLE_TAIL_HEIGHT);
viewGroup->SetPosition(0, LABLE_TITLE_HEIGHT, Screen::GetInstance().GetWidth(),
Screen::GetInstance().GetHeight() - LABLE_TITLE_HEIGHT - LABLE_TAIL_HEIGHT);
viewGroup->SetStyle(STYLE_BACKGROUND_OPA, TOTAL_OPACITY);
groupCount_++;
ViewGroupPage* page = new ViewGroupPage(viewGroup);
......@@ -74,8 +72,8 @@ UIViewGroup* SwipeView::AddViewGroup()
UIViewGroup* SwipeView::AddFirstViewGroup()
{
UIViewGroup* firstView = new UIViewGroup();
firstView->SetPosition(0, LABLE_TITLE_HEIGHT, LA_HORIZONTAL_RESOLUTION,
LA_VERTICAL_RESOLUTION - LABLE_TITLE_HEIGHT - LABLE_TAIL_HEIGHT);
firstView->SetPosition(0, LABLE_TITLE_HEIGHT, Screen::GetInstance().GetWidth(),
Screen::GetInstance().GetHeight() - LABLE_TITLE_HEIGHT - LABLE_TAIL_HEIGHT);
firstView->SetStyle(STYLE_BACKGROUND_OPA, TOTAL_OPACITY);
UIViewGroup* viewTimeWeather = new UIViewGroup();
......@@ -129,6 +127,10 @@ void SwipeView::OnSetUpView()
if (memcmp(LAUNCHER_BUNDLE_NAME, pBundleInfos[j].bundleName, strlen(pBundleInfos[j].bundleName)) == 0) {
break;
}
if (memcmp(SCREENSAVER_BUNDLE_NAME, pBundleInfos[j].bundleName, strlen(pBundleInfos[j].bundleName)) == 0) {
break;
}
AppInfo* app = new AppInfo();
app->funcclick_ = AppEvent::ClickEvent;
app->funclPress_ = AppEvent::LongPressEvent;
......@@ -188,13 +190,21 @@ void SwipeView::InstallApp(AppInfo* app)
{
appManage_->InstallApp(app);
AppInfo* pApp = new AppInfo();
if (pApp == nullptr) {
return;
}
app->funcclick_ = AppEvent::ClickEvent;
app->funclPress_ = AppEvent::LongPressEvent;
for (int16_t i = 0; i < groupCount_; i++) {
int16_t i;
for (i = 0; i < groupCount_; i++) {
if (arrPage_[i]->AddApp(pApp)) {
break;
}
}
if (i == groupCount_) {
delete pApp;
pApp = nullptr;
}
}
void SwipeView::OnStop()
......
......@@ -16,7 +16,7 @@
#ifndef OHOS_SWIPE_VIEW_H
#define OHOS_SWIPE_VIEW_H
#include <stdio.h>
#include <cstdio>
#include <securec.h>
#include <components/ui_label_button.h>
#include <components/ui_label.h>
......@@ -36,7 +36,7 @@
namespace OHOS {
class ViewPageListener : public UIView::OnClickListener {
public:
ViewPageListener(LongPressView* view) : view_(view) {}
explicit ViewPageListener(LongPressView* view) : view_(view) {}
virtual ~ViewPageListener() {}
bool OnClick(UIView& view, const ClickEvent& event) override
{
......@@ -62,9 +62,9 @@ public:
}
private:
LongPressView* view_ { nullptr };
UISwipeView* swipe_ { nullptr };
UILabel* lable_ { nullptr };
LongPressView* view_ { nullptr };
};
class SwipeView : public Task, public NativeBase {
......@@ -82,12 +82,16 @@ public:
char tmp[TMP_BUF_SIZE] = { 0 };
time_t t = time(nullptr);
struct tm* st = localtime(&t);
sprintf_s(tmp, sizeof(tmp), "%02d : %02d", st->tm_hour, st->tm_min);
lableTitle_->SetText(tmp);
timeWeatherView_->SetUpTimeView();
if (st != nullptr) {
int ret = sprintf_s(tmp, sizeof(tmp), "%02d : %02d", st->tm_hour, st->tm_min);
if (ret != LAUNCHER_PARAMERROR) {
lableTitle_->SetText(tmp);
timeWeatherView_->SetUpTimeView();
}
}
}
UISwipeView* GetSwipeView()
UISwipeView* GetSwipeView() const
{
return swipe_;
}
......
......@@ -13,7 +13,7 @@
* limitations under the License.
*/
#include <time.h>
#include <ctime>
#include <securec.h>
#include "time_weather_view.h"
......@@ -27,6 +27,7 @@ static constexpr int16_t BIGLABEL_H = 100;
static constexpr int16_t SMALLLABEL_H = 35;
static constexpr int16_t IMAGE_H = 40;
static constexpr int16_t IMAGE_W = 40;
const char* g_weekDate[WEEK_DAY_MAX] = {"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
TimeWeatherView::TimeWeatherView(UIViewGroup* viewGroup)
{
......@@ -65,10 +66,22 @@ void TimeWeatherView::SetUpTimeView()
const int16_t commonYear = 1970;
time_t t = time(nullptr);
struct tm* st = localtime(&t);
sprintf_s(hour_min, sizeof(hour_min), "%02d : %02d", st->tm_hour, st->tm_min);
sprintf_s(mont_day, sizeof(mont_day), "%02d月%02d日", st->tm_mon + january, st->tm_mday);
if (st == nullptr) {
return;
}
int ret = sprintf_s(hour_min, sizeof(hour_min), "%02d : %02d", st->tm_hour, st->tm_min);
if (ret == LAUNCHER_PARAMERROR) {
return;
}
ret = sprintf_s(mont_day, sizeof(mont_day), "%02d月%02d日", st->tm_mon + january, st->tm_mday);
if (ret == LAUNCHER_PARAMERROR) {
return;
}
GetWeekdayByYearday(st->tm_year + commonYear, st->tm_mon + january, st->tm_mday, week_day, sizeof(week_day));
sprintf_s(date, sizeof(date), "%s %s", mont_day, week_day);
ret = sprintf_s(date, sizeof(date), "%s %s", mont_day, week_day);
if (ret == LAUNCHER_PARAMERROR) {
return;
}
if (viewTime_ == nullptr) {
viewTime_ = new UIViewGroup();
viewTime_->SetPosition(BLANK_TW, BLANK_H, viewGroup_->GetWidth() - BLANK_W,
......@@ -99,14 +112,24 @@ void TimeWeatherView::SetUpTimeView()
viewTime_->Add(lable2);
viewGroup_->Add(viewTime_);
} else {
static_cast<UILabel*>(viewTime_->GetChildById("labletime"))->SetText(hour_min);
static_cast<UILabel*>(viewTime_->GetChildById("labledate"))->SetText(date);
UILabel* label = nullptr;
label = static_cast<UILabel*>(viewTime_->GetChildById("labletime"));
if (label) {
label->SetText(hour_min);
}
label = static_cast<UILabel*>(viewTime_->GetChildById("labledate"));
if (label) {
label->SetText(date);
}
viewTime_->Invalidate();
}
}
void TimeWeatherView::GetWeekdayByYearday(int iY, int iM, int iD, char* date, int size)
{
if (date == nullptr) {
return;
}
const int16_t months = 12;
const int16_t january = 1;
const int16_t february = 2;
......@@ -119,39 +142,13 @@ void TimeWeatherView::GetWeekdayByYearday(int iY, int iM, int iD, char* date, in
}
// 1 : MONDAY_LAUNCHER, 2 : TUESDAY_LAUNCHER, 3 : WEDNESDAY_LAUNCHER, 4 : , 5 : ect
iWeekDay = (iD + 1 + 2 * iM + 3 * (iM + 1) / 5 + iY + iY / 4 - iY / oneHundred + iY / fourHundred) % WEEKEND_LAUNCHER;
switch (iWeekDay) {
case SUNDAY_LAUNCHER:
memcpy_s(date, size, "星期天", strlen("星期天"));
date[strlen("星期天")] = 0;
break;
case MONDAY_LAUNCHER:
memcpy_s(date, size, "星期一", strlen("星期一"));
date[strlen("星期一")] = 0;
break;
case TUESDAY_LAUNCHER:
memcpy_s(date, size, "星期二", strlen("星期二"));
date[strlen("星期二")] = 0;
break;
case WEDNESDAY_LAUNCHER:
memcpy_s(date, size, "星期三", strlen("星期三"));
date[strlen("星期三")] = 0;
break;
case THURSDAY_LAUNCHER:
memcpy_s(date, size, "星期四", strlen("星期四"));
date[strlen("星期四")] = 0;
break;
case FRIDAY_LAUNCHER:
memcpy_s(date, size, "星期五", strlen("星期五"));
date[strlen("星期五")] = 0;
break;
case STAURDAY_LAUNCHER:
memcpy_s(date, size, "星期六", strlen("星期六"));
date[strlen("星期六")] = 0;
break;
default:
memcpy_s(date, size, "星期天", strlen("星期天"));
date[strlen("星期天")] = 0;
break;
for (int i = 0; i < WEEK_DAY_MAX; i++) {
if (iWeekDay == i) {
if (memcpy_s(date, size, g_weekDate[i], strlen(g_weekDate[i])) == LAUNCHER_SUCCESS) {
date[strlen(g_weekDate[i])] = 0;
break;
}
}
}
return;
}
......
......@@ -40,7 +40,7 @@ enum DATE_LAUNCHER {
class TimeWeatherView : public NativeBase {
public:
TimeWeatherView() = delete;
TimeWeatherView(UIViewGroup* viewGroup);
explicit TimeWeatherView(UIViewGroup* viewGroup);
virtual ~TimeWeatherView();
void SetStyle(Style sty);
void SetPosion(int16_t width, int16_t height, int16_t x, int16_t y);
......
......@@ -17,10 +17,9 @@
#define OHOS_UI_CONFIG_H
#include <cstdint>
#include <securec.h>
namespace OHOS {
static int16_t LA_HORIZONTAL_RESOLUTION = 960; // launcher table width
static int16_t LA_VERTICAL_RESOLUTION = 480; // launcher table height
static constexpr int16_t LABLE_TITLE_HEIGHT = 30; // tail lable height
static constexpr int16_t LABLE_TAIL_HEIGHT = 30;
static constexpr int16_t APP_WIDTH_COUNT = 7; // blank + app + blank + app + blank
......@@ -38,11 +37,28 @@ static constexpr int16_t BUTTON_RADIUS = 20; // app icon radius
static constexpr int16_t LABLE_RADIUS = 0; // lable icon radius
static constexpr int16_t TITLE_LABLE_OPACITY = 255; // translucent
static constexpr int16_t GROUP_VIEW_RADIUS = 20; // view radius
#ifndef TMP_BUF_SIZE
#define TMP_BUF_SIZE 128
#endif
#define LAUNCHER_BUNDLE_NAME "com.huawei.launcher"
#define SCREENSAVER_BUNDLE_NAME "com.huawei.screensaver"
#define TABLE_BACKGROUND \
"/storage/app/run/com.huawei.launcher/launcher/assets/launcher/resources/base/media/background.png"
#define RES_WEATHER "/storage/app/run/com.huawei.launcher/launcher/assets/launcher/resources/base/media/weather.png"
#define FOND_PATH "SourceHanSansSC-Regular.otf"
#ifndef LAUNCHER_SUCCESS
#define LAUNCHER_SUCCESS 0
#endif
#ifndef LAUNCHER_PARAMERROR
#define LAUNCHER_PARAMERROR (-1)
#endif
#ifndef WEEK_DAY_MAX
#define WEEK_DAY_MAX 7
#endif
} // namespace OHOS
#endif
......@@ -77,7 +77,6 @@ void ViewGroupPage::SetMatrix(int16_t rows, int16_t cols)
void ViewGroupPage::CalculateAppPosition(AppInfo* pAppInfo, int16_t row, int16_t col)
{
int16_t h = viewGroup_->GetHeight();
int16_t w = viewGroup_->GetWidth();
const double scale = scale_;
......
此差异已折叠。
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
此差异已折叠。
此差异已折叠。
此差异已折叠。
文件模式从 100644 更改为 100755
此差异已折叠。
此差异已折叠。
文件模式从 100644 更改为 100755
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
文件模式从 100644 更改为 100755
此差异已折叠。
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
此差异已折叠。
文件模式从 100644 更改为 100755
此差异已折叠。
此差异已折叠。
此差异已折叠。
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册