update OpenHarmony 2.0 Canary
15
.gitattributes
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||
*.trp filter=lfs diff=lfs merge=lfs -text
|
||||
*.apk filter=lfs diff=lfs merge=lfs -text
|
||||
*.jar filter=lfs diff=lfs merge=lfs -text
|
||||
*.mp4 filter=lfs diff=lfs merge=lfs -text
|
||||
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||
*.asm filter=lfs diff=lfs merge=lfs -text
|
||||
*.8svn filter=lfs diff=lfs merge=lfs -text
|
||||
*.9svn filter=lfs diff=lfs merge=lfs -text
|
||||
*.dylib filter=lfs diff=lfs merge=lfs -text
|
||||
*.exe filter=lfs diff=lfs merge=lfs -text
|
||||
*.a filter=lfs diff=lfs merge=lfs -text
|
||||
*.so filter=lfs diff=lfs merge=lfs -text
|
||||
*.bin filter=lfs diff=lfs merge=lfs -text
|
||||
*.dll filter=lfs diff=lfs merge=lfs -text
|
176
LICENSE
Executable file
@ -0,0 +1,176 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
36
README.en.md
@ -1,36 +0,0 @@
|
||||
# applications_launcher
|
||||
|
||||
#### Description
|
||||
Launcher system app | 系统桌面
|
||||
|
||||
#### Software Architecture
|
||||
Software architecture description
|
||||
|
||||
#### Installation
|
||||
|
||||
1. xxxx
|
||||
2. xxxx
|
||||
3. xxxx
|
||||
|
||||
#### Instructions
|
||||
|
||||
1. xxxx
|
||||
2. xxxx
|
||||
3. xxxx
|
||||
|
||||
#### Contribution
|
||||
|
||||
1. Fork the repository
|
||||
2. Create Feat_xxx branch
|
||||
3. Commit your code
|
||||
4. Create Pull Request
|
||||
|
||||
|
||||
#### Gitee Feature
|
||||
|
||||
1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
|
||||
2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
|
||||
3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
|
||||
4. The most valuable open source project [GVP](https://gitee.com/gvp)
|
||||
5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
|
||||
6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
|
56
README.md
Normal file → Executable file
@ -1,37 +1,43 @@
|
||||
# applications_launcher
|
||||
# Launcher<a name="EN-US_TOPIC_0000001103554544"></a>
|
||||
|
||||
#### 介绍
|
||||
Launcher system app | 系统桌面
|
||||
- [Introduction](#section11660541593)
|
||||
- [Architecture](#section78574815486)
|
||||
|
||||
#### 软件架构
|
||||
软件架构说明
|
||||
- [Directory Structure](#section161941989596)
|
||||
- [Repositories Involved](#section1371113476307)
|
||||
|
||||
## Introduction<a name="section11660541593"></a>
|
||||
|
||||
#### 安装教程
|
||||
The home screen launcher provides a main entry to human-machine interactions. It displays app icons for users to start or uninstall the apps, and allows users to set the home screen layout and manage recent tasks.
|
||||
|
||||
1. xxxx
|
||||
2. xxxx
|
||||
3. xxxx
|
||||
### Architecture<a name="section78574815486"></a>
|
||||
|
||||
#### 使用说明
|
||||
![](figures/launcherl2-en.png)
|
||||
|
||||
1. xxxx
|
||||
2. xxxx
|
||||
3. xxxx
|
||||
## Directory Structure<a name="section161941989596"></a>
|
||||
|
||||
#### 参与贡献
|
||||
```
|
||||
/applications/standard/launcher/
|
||||
├── figures # Architecture figures
|
||||
├── launcher # Main ability of the home screen, which provides the functions of displaying app icons, starting and uninstalling apps, and setting the home screen layout.
|
||||
│ └── src
|
||||
│ └── main
|
||||
│ ├── config.json # Global configuration files
|
||||
│ ├── js # JavaScript code
|
||||
│ └── resources # Resource configuration files
|
||||
├── recents # Ability for managing recent tasks
|
||||
│ └── src
|
||||
│ └── main
|
||||
│ ├── config.json # Global configuration files
|
||||
│ ├── js # JavaScript code
|
||||
│ └── resources # Resource configuration files
|
||||
├── signature # Certificate files
|
||||
├── LICENSE # License files
|
||||
```
|
||||
|
||||
1. Fork 本仓库
|
||||
2. 新建 Feat_xxx 分支
|
||||
3. 提交代码
|
||||
4. 新建 Pull Request
|
||||
## Repositories Involved<a name="section1371113476307"></a>
|
||||
|
||||
System apps
|
||||
|
||||
#### 特技
|
||||
**applications\_standard\_launcher**
|
||||
|
||||
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
|
||||
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
|
||||
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
|
||||
4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
|
||||
5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
|
||||
6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
|
||||
|
42
README_zh.md
Executable file
@ -0,0 +1,42 @@
|
||||
# 桌面<a name="ZH-CN_TOPIC_0000001103554544"></a>
|
||||
|
||||
- [简介](#section11660541593)
|
||||
- [架构图](#section78574815486)
|
||||
|
||||
- [目录](#section161941989596)
|
||||
- [相关仓](#section1371113476307)
|
||||
|
||||
## 简介<a name="section11660541593"></a>
|
||||
|
||||
桌面作为系统人机交互的首要入口,提供应用图标的显示、点击启动、卸载应用,以及桌面布局设置、最近任务管理等功能。
|
||||
|
||||
### 架构图<a name="section78574815486"></a>
|
||||
|
||||
![](figures/launcherl2-en.png)
|
||||
|
||||
## 目录<a name="section161941989596"></a>
|
||||
|
||||
```
|
||||
/applications/standard/launcher/
|
||||
├── figures # 架构图目录
|
||||
├── launcher # 桌面主Ability,提供应用图标的显示、点击启动、卸载应用、桌面布局设置
|
||||
│ └── src
|
||||
│ └── main
|
||||
│ ├── config.json # 全局配置文件
|
||||
│ ├── js # js代码目录
|
||||
│ └── resources # 资源配置文件存放目录
|
||||
├── recents # 最近任务Ability,提供最近任务管理
|
||||
│ └── src
|
||||
│ └── main
|
||||
│ ├── config.json # 全局配置文件
|
||||
│ ├── js # js代码目录
|
||||
│ └── resources # 资源配置文件存放目录
|
||||
├── signature # 证书文件目录
|
||||
├── LICENSE # 许可文件
|
||||
```
|
||||
|
||||
## 相关仓<a name="section1371113476307"></a>
|
||||
|
||||
系统应用
|
||||
|
||||
**applications\_standard\_launcher**
|
39
build.gradle
Normal file
@ -0,0 +1,39 @@
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
apply plugin: 'com.huawei.ohos.app'
|
||||
|
||||
ohos {
|
||||
compileSdkVersion 6
|
||||
defaultConfig {
|
||||
compatibleSdkVersion 6
|
||||
}
|
||||
}
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
maven {
|
||||
url 'https://mirrors.huaweicloud.com/repository/maven/'
|
||||
}
|
||||
maven {
|
||||
url 'https://developer.huawei.com/repo/'
|
||||
}
|
||||
maven {
|
||||
url 'http://repo.ark.tools.huawei.com/artifactory/maven-public/'
|
||||
}
|
||||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.huawei.ohos:hap:2.4.4.3-RC'
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
maven {
|
||||
url 'https://mirrors.huaweicloud.com/repository/maven/'
|
||||
}
|
||||
maven {
|
||||
url 'https://developer.huawei.com/repo/'
|
||||
}
|
||||
jcenter()
|
||||
}
|
||||
}
|
BIN
figures/launcherl2-en.png
Executable file
After Width: | Height: | Size: 21 KiB |
25
gradle.properties
Executable file
@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
|
||||
# Project-wide Gradle settings.
|
||||
# IDE (e.g. DevEco Studio) users:
|
||||
# Gradle settings configured through the IDE *will override*
|
||||
# any settings specified in this file.
|
||||
# For more details on how to configure your build environment visit
|
||||
# http://www.gradle.org/docs/current/userguide/build_environment.html
|
||||
# Specifies the JVM arguments used for the daemon process.
|
||||
# The setting is particularly useful for tweaking memory settings.
|
||||
# If the Chinese output is garbled, please configure the following parameter.
|
||||
# org.gradle.jvmargs=-Dfile.encoding=GBK
|
183
gradlew
vendored
Normal file
@ -0,0 +1,183 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
#
|
||||
# Copyright 2015 the original author or authors.
|
||||
#
|
||||
# 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
|
||||
#
|
||||
# https://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.
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
##
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
# Need this for relative symlinks.
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG=`dirname "$PRG"`"/$link"
|
||||
fi
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >/dev/null
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
NONSTOP* )
|
||||
nonstop=true
|
||||
;;
|
||||
esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD="java"
|
||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
MAX_FD="$MAX_FD_LIMIT"
|
||||
fi
|
||||
ulimit -n $MAX_FD
|
||||
if [ $? -ne 0 ] ; then
|
||||
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||
fi
|
||||
else
|
||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||
fi
|
||||
fi
|
||||
|
||||
# For Darwin, add options to specify how the application appears in the dock
|
||||
if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||
SEP=""
|
||||
for dir in $ROOTDIRSRAW ; do
|
||||
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||
SEP="|"
|
||||
done
|
||||
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||
# Add a user-defined pattern to the cygpath arguments
|
||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||
fi
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
i=0
|
||||
for arg in "$@" ; do
|
||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||
|
||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=`expr $i + 1`
|
||||
done
|
||||
case $i in
|
||||
0) set -- ;;
|
||||
1) set -- "$args0" ;;
|
||||
2) set -- "$args0" "$args1" ;;
|
||||
3) set -- "$args0" "$args1" "$args2" ;;
|
||||
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Escape application args
|
||||
save () {
|
||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
}
|
||||
APP_ARGS=`save "$@"`
|
||||
|
||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||
|
||||
exec "$JAVACMD" "$@"
|
103
gradlew.bat
vendored
Normal file
@ -0,0 +1,103 @@
|
||||
@rem
|
||||
@rem Copyright 2015 the original author or authors.
|
||||
@rem
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@rem you may not use this file except in compliance with the License.
|
||||
@rem You may obtain a copy of the License at
|
||||
@rem
|
||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||
@rem
|
||||
@rem Unless required by applicable law or agreed to in writing, software
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windows variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
1
launcher/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/build
|
11
launcher/build.gradle
Normal file
@ -0,0 +1,11 @@
|
||||
apply plugin: 'com.huawei.ohos.hap'
|
||||
ohos {
|
||||
compileSdkVersion 6
|
||||
defaultConfig {
|
||||
compatibleSdkVersion 6
|
||||
}
|
||||
supportSystem "standard"
|
||||
}
|
||||
|
||||
dependencies {
|
||||
}
|
1
launcher/package.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
71
launcher/src/main/config.json
Normal file
@ -0,0 +1,71 @@
|
||||
{
|
||||
"app": {
|
||||
"bundleName": "com.ohos.launcher",
|
||||
"vendor": "ohos",
|
||||
"version": {
|
||||
"code": 1,
|
||||
"name": "1.0"
|
||||
},
|
||||
"apiVersion": {
|
||||
"compatible": 3,
|
||||
"target": 3
|
||||
}
|
||||
},
|
||||
"deviceConfig": {},
|
||||
"module": {
|
||||
"package": "com.ohos.launcher",
|
||||
"name": ".MyApplication",
|
||||
"deviceType": [
|
||||
"phone"
|
||||
],
|
||||
"distro": {
|
||||
"deliveryWithInstall": true,
|
||||
"moduleName": "launcher",
|
||||
"moduleType": "entry"
|
||||
},
|
||||
"abilities": [
|
||||
{
|
||||
"skills": [
|
||||
{
|
||||
"entities": [
|
||||
"entity.system.home",
|
||||
"flag.home.intent.from.system"
|
||||
],
|
||||
"actions": [
|
||||
"action.system.home",
|
||||
"com.ohos.action.main"
|
||||
]
|
||||
}
|
||||
],
|
||||
"name": "com.ohos.launcher.MainAbility",
|
||||
"icon": "$media:icon",
|
||||
"description": "$string:mainability_description",
|
||||
"label": "$string:app_name",
|
||||
"type": "page",
|
||||
"launchType": "singleton",
|
||||
"metaData": {
|
||||
"customizeData": [
|
||||
{
|
||||
"name": "hwc-theme"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"js": [
|
||||
{
|
||||
"pages": [
|
||||
"pages/EntryView/EntryView",
|
||||
"pages/AppGridView/AppGridView",
|
||||
"pages/AppListView/AppListView",
|
||||
"pages/SettingsView/SettingsView"
|
||||
],
|
||||
"name": "default",
|
||||
"window": {
|
||||
"designWidth": 720,
|
||||
"autoDesignWidth": false
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
32
launcher/src/main/js/default/app.js
Normal file
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 AppModel from './common/model/AppModel.js'
|
||||
import SettingsModel from './common/model/SettingsModel.js'
|
||||
|
||||
export default {
|
||||
data: {
|
||||
appModel: new AppModel(),
|
||||
settingsModel: new SettingsModel()
|
||||
},
|
||||
|
||||
onCreate() {
|
||||
console.info("Application onCreate");
|
||||
},
|
||||
|
||||
onDestroy() {
|
||||
console.info("Application onDestroy");
|
||||
}
|
||||
};
|
23
launcher/src/main/js/default/common/colors/Colors.js
Normal file
@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
|
||||
var Colors = {
|
||||
bgSelectedColor: "#FF008000",
|
||||
bgUnselectedColor: "white",
|
||||
fontSelectedColor: "white",
|
||||
fontUnselectedColor: "black"
|
||||
}
|
||||
|
||||
export default Colors;
|
@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 '../../css/CommonPageStyle.css';
|
||||
.image-box{
|
||||
height: 110px;
|
||||
width: 110px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,20 @@
|
||||
<!--
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
-->
|
||||
|
||||
<div class="image-box">
|
||||
<image class="app-icon-img" src="{{appIcon}}"></image>
|
||||
</div>
|
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 ResourceManager from '../../model/ResourceManager.js';
|
||||
|
||||
var mResourceManager;
|
||||
|
||||
export default {
|
||||
props: ['itemAppId', 'itemAppIcon', 'itemBundleName'],
|
||||
|
||||
data() {
|
||||
return {
|
||||
bundleName: this.itemBundleName,
|
||||
appId: this.itemAppId,
|
||||
appIcon: ""
|
||||
};
|
||||
},
|
||||
|
||||
onInit() {
|
||||
this.$watch('itemBundleName','appIconWatcher');
|
||||
mResourceManager = new ResourceManager();
|
||||
mResourceManager.getAppIcon(this.itemAppIcon, this.itemBundleName, this.iconLoadCallback);
|
||||
},
|
||||
|
||||
onShow() {
|
||||
},
|
||||
|
||||
appIconWatcher(newV, oldV) {
|
||||
if (newV != null && newV != undefined) {
|
||||
mResourceManager.getAppIcon(this.itemAppIcon, this.itemBundleName, this.iconLoadCallback);
|
||||
}
|
||||
},
|
||||
|
||||
iconLoadCallback(image) {
|
||||
this.appIcon = image;
|
||||
},
|
||||
|
||||
updateIcon() {
|
||||
console.info("Launcher AppIcon updateIcon in bundleName = " + this.itemBundleName);
|
||||
mResourceManager.getAppIcon(this.itemAppIcon, this.itemBundleName, this.iconLoadCallback);
|
||||
}
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 '../../css/CommonPageStyle.css';
|
||||
|
||||
.app-name {
|
||||
text-align: center;
|
||||
width: 110px;
|
||||
height: 60px;
|
||||
color: white;
|
||||
font-size: 27px;
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
<!--
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
-->
|
||||
|
||||
<text class="app-name">
|
||||
{{appName}}
|
||||
</text>
|
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 ResourceManager from '../../model/ResourceManager.js';
|
||||
|
||||
var mResourceManager;
|
||||
|
||||
export default {
|
||||
props: ['itemAppId', 'itemLabelId', 'itemBundleName', 'itemAppName'],
|
||||
|
||||
data() {
|
||||
return {
|
||||
labelId: this.itemLabelId,
|
||||
bundleName: this.itemBundleName,
|
||||
appId: this.itemAppId,
|
||||
appName: ""
|
||||
};
|
||||
},
|
||||
|
||||
onInit() {
|
||||
this.$watch('itemBundleName','appIconWatcher');
|
||||
mResourceManager = new ResourceManager();
|
||||
mResourceManager.getAppName(this.itemLabelId, this.itemBundleName, this.itemAppName, this.iconLoadCallback);
|
||||
},
|
||||
|
||||
onShow() {
|
||||
},
|
||||
|
||||
appIconWatcher(newV, oldV) {
|
||||
if (newV != null && newV != undefined) {
|
||||
mResourceManager.getAppName(this.itemLabelId, this.itemBundleName, this.itemAppName, this.iconLoadCallback);
|
||||
}
|
||||
},
|
||||
|
||||
iconLoadCallback(name) {
|
||||
this.appName = name;
|
||||
},
|
||||
|
||||
updateName() {
|
||||
console.info("Launcher AppIcon updateIcon in bundleName = " + this.itemBundleName);
|
||||
mResourceManager.getAppName(this.itemLabelId, this.itemBundleName, this.itemAppName, this.iconLoadCallback);
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 '../../css/CommonPageStyle.css';
|
||||
.appitem {
|
||||
height: 110px;
|
||||
width: 90%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.app-name {
|
||||
margin-left: 30px;
|
||||
width: 300px;
|
||||
color: white;
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
<!--
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
-->
|
||||
|
||||
<text class="app-name">
|
||||
{{appName}}
|
||||
</text>
|
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 ResourceManager from '../../model/ResourceManager.js';
|
||||
|
||||
var mResourceManager;
|
||||
|
||||
export default {
|
||||
props: ['itemAppId', 'itemLabelId', 'itemBundleName', 'itemAppName'],
|
||||
|
||||
data() {
|
||||
return {
|
||||
labelId: this.itemLabelId,
|
||||
bundleName: this.itemBundleName,
|
||||
appId: this.itemAppId,
|
||||
appName: ""
|
||||
};
|
||||
},
|
||||
|
||||
onInit() {
|
||||
this.$watch('itemBundleName','appIconWatcher');
|
||||
mResourceManager = new ResourceManager();
|
||||
mResourceManager.getAppName(this.itemLabelId, this.itemBundleName, this.itemAppName, this.iconLoadCallback);
|
||||
},
|
||||
|
||||
onShow() {
|
||||
},
|
||||
|
||||
appIconWatcher(newV, oldV) {
|
||||
if (newV != null && newV != undefined) {
|
||||
mResourceManager.getAppName(this.itemLabelId, this.itemBundleName, this.itemAppName, this.iconLoadCallback);
|
||||
}
|
||||
},
|
||||
|
||||
iconLoadCallback(name) {
|
||||
this.appName = name;
|
||||
},
|
||||
|
||||
updateName() {
|
||||
console.info("Launcher AppIcon updateIcon in bundleName = " + this.itemBundleName);
|
||||
mResourceManager.getAppName(this.itemLabelId, this.itemBundleName, this.itemAppName, this.iconLoadCallback);
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
|
||||
var DefaultLayoutConfig = {
|
||||
DefaultAppPageStartConfig: 'Grid',
|
||||
DefaultGridConfig: 0,
|
||||
DefaultRecentProcessLimit: 6
|
||||
}
|
||||
|
||||
export default DefaultLayoutConfig;
|
@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
|
||||
var GridLayoutConfigs = {
|
||||
GridLayoutTable: [
|
||||
{id:0, layout:'5X4', row:5, column:4},
|
||||
{id:1, layout:'4X4', row:4, column:4},
|
||||
{id:2, layout:'6X4', row:6, column:4},
|
||||
]
|
||||
}
|
||||
|
||||
export default GridLayoutConfigs;
|
@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
|
||||
var SystemApplication = {
|
||||
SystemApplicationName: 'com.ohos.launcher,com.ohos.systemui'
|
||||
}
|
||||
|
||||
export default SystemApplication;
|
@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
|
||||
var LayoutContants = {
|
||||
Grid: "Grid",
|
||||
List: "List"
|
||||
}
|
||||
|
||||
export default LayoutContants;
|
21
launcher/src/main/js/default/common/constants/PageData.js
Normal file
@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
|
||||
var PageData = {
|
||||
GRID_APP_PAGE: 'pages/AppGridView/AppGridView',
|
||||
LIST_APP_PAGE: 'pages/AppListView/AppListView'
|
||||
}
|
||||
|
||||
export default PageData;
|
38
launcher/src/main/js/default/common/css/CommonPageStyle.css
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
|
||||
.container {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.app-icon-img{
|
||||
border-radius: 20px;
|
||||
width: 110px;
|
||||
height: 110px;
|
||||
}
|
||||
|
||||
.app-icon-img:active{
|
||||
width: 105px;
|
||||
height: 105px;
|
||||
}
|
||||
|
||||
.app-name{
|
||||
color: black;
|
||||
}
|
199
launcher/src/main/js/default/common/model/AppModel.js
Normal file
@ -0,0 +1,199 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 bundle_mgr from '@ohos.bundle_mgr';
|
||||
import feature_ability from '@ohos.feature_ability';
|
||||
import Subscriber from '@ohos.commonevent';
|
||||
import SystemApplication from '../../common/configs/SystemApplication.js';
|
||||
|
||||
var mBundleInfoList = [];
|
||||
var mGridBootAppList = [];
|
||||
const DEFAULT_ICON_URL = 'common/pics/icon_default.png';
|
||||
var mAppUninstallListener = null;
|
||||
var mAppInstallListeners = [];
|
||||
var gridListCallback;
|
||||
var systemApplicationName = SystemApplication.SystemApplicationName;
|
||||
var mCommonEventSubscriber = null;
|
||||
var mCommonEventSubscribeInfo = {
|
||||
events: ["usual.event.PACKAGE_ADDED", "usual.event.PACKAGE_CHANGED", "usual.event.PACKAGE_REMOVED"]
|
||||
};
|
||||
|
||||
export default class AppModel {
|
||||
getAppList(callback) {
|
||||
mBundleInfoList = [];
|
||||
console.info('Launcher getAppIcon getAppList');
|
||||
bundle_mgr.getApplicationInfos().then((data) => {
|
||||
console.info('Launcher getApplicationInfos >' + JSON.stringify(data));
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (systemApplicationName.indexOf(data[i].bundleName) > -1) {
|
||||
} else {
|
||||
mBundleInfoList.push(
|
||||
{
|
||||
System: data[i].isSystemApp,
|
||||
AppName: data[i].label,
|
||||
AppId: data[i].name,
|
||||
AppIcon: data[i].iconId,
|
||||
bundleName: data[i].bundleName,
|
||||
labelId: data[i].labelId,
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
let appArrayLength = mBundleInfoList.length;
|
||||
for (let i = 0; i < appArrayLength; i++) {
|
||||
var iconUrl = mBundleInfoList[i].AppIcon;
|
||||
if (iconUrl == null || iconUrl == "" || iconUrl == "undefined") {
|
||||
mBundleInfoList[i].AppIcon = DEFAULT_ICON_URL;
|
||||
}
|
||||
}
|
||||
console.info('Launcher mBundleInfoList' + JSON.stringify(mBundleInfoList));
|
||||
callback(mBundleInfoList);
|
||||
});
|
||||
}
|
||||
|
||||
installApp() {
|
||||
}
|
||||
|
||||
uninstallApp(appId, callback) {
|
||||
console.info('Launcher uninstallApp appId' + appId);
|
||||
var result = bundle_mgr.uninstall(appId).then((data) => {
|
||||
console.info("Launcher uninstall data [" + data + "]");
|
||||
callback(true);
|
||||
}).catch(error =>
|
||||
console.info("Launcher uninstall err " + error));
|
||||
}
|
||||
|
||||
getGridBootAppList() {
|
||||
return mGridBootAppList;
|
||||
}
|
||||
|
||||
getGridPagesAppList(callback) {
|
||||
gridListCallback = callback;
|
||||
this.getAppList(this.getGridlist.bind(this));
|
||||
}
|
||||
|
||||
getGridlist(list) {
|
||||
gridListCallback(this.dealList(list));
|
||||
}
|
||||
|
||||
dealList(appList) {
|
||||
var gridPagesList = [];
|
||||
var bootListLength = mGridBootAppList.length;
|
||||
var appArrayLength = appList.length;
|
||||
for (var i = 0; i < appArrayLength; i++) {
|
||||
gridPagesList.push(appList[i]);
|
||||
for (var j = 0; j < bootListLength; j++) {
|
||||
if (appList[i].AppName === mGridBootAppList[j].AppName) {
|
||||
gridPagesList.pop();
|
||||
}
|
||||
}
|
||||
}
|
||||
return gridPagesList;
|
||||
}
|
||||
|
||||
openApplication(bundleName) {
|
||||
this.getAbilityName(bundleName, this.startApplication)
|
||||
}
|
||||
|
||||
getAbilityName(bundleName, callback) {
|
||||
console.info('Launcher getAbilityName bundleName' + bundleName);
|
||||
bundle_mgr.getBundleInfo(bundleName).then(data => {
|
||||
console.info('Launcher getBundleInfo ' + data);
|
||||
callback(data.abilityInfos[0].name, bundleName);
|
||||
});
|
||||
}
|
||||
|
||||
startApplication(abilityname, bundleName) {
|
||||
let paramBundleName = bundleName;
|
||||
let paramAbilityname = abilityname;
|
||||
// promise
|
||||
console.info('Launcher startApplication abilityname' + abilityname);
|
||||
var result = feature_ability.startAbility({
|
||||
bundleName: paramBundleName,
|
||||
abilityName: paramAbilityname,
|
||||
requestCode: 1,
|
||||
abilityType: "PageAbility",
|
||||
want: {
|
||||
action: "action1",
|
||||
entities: ["entity1"],
|
||||
type: "PageAbility",
|
||||
flags: 2,
|
||||
elementName: {
|
||||
deviceId: "deviceId",
|
||||
bundleName: paramBundleName,
|
||||
abilityName: paramAbilityname,
|
||||
},
|
||||
},
|
||||
syncOption: 1,
|
||||
}).then(data =>
|
||||
console.info("Launcher promise::then : " + JSON.stringify(data))
|
||||
).catch(error =>
|
||||
console.info("Launcher promise::catch : " + JSON.stringify(error))
|
||||
);
|
||||
console.info("Launcher AceApplication : startAbility : " + result);
|
||||
}
|
||||
|
||||
reportAppInstallEvent() {
|
||||
console.info("Launcher AppModel reportAppInstallEvent");
|
||||
for (let i = 0; i < mAppInstallListeners.length; i++) {
|
||||
let listener = mAppInstallListeners[i];
|
||||
if (listener != undefined && listener != null) {
|
||||
listener();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
reportAppUninstallEvent(appId) {
|
||||
if (mAppUninstallListener != null) {
|
||||
mAppUninstallListener(appId);
|
||||
}
|
||||
}
|
||||
|
||||
registerAppUninstallListener(listener) {
|
||||
mAppUninstallListener = listener;
|
||||
}
|
||||
|
||||
registerAppInstallListener(listener) {
|
||||
console.info("Launcher AppModel registerAppInstallListener");
|
||||
if (mAppInstallListeners.indexOf(listener) == -1) {
|
||||
mAppInstallListeners.push(listener);
|
||||
}
|
||||
Subscriber.createSubscriber(
|
||||
mCommonEventSubscribeInfo,
|
||||
this.createInstallationSubscriberCallBack.bind(this)
|
||||
);
|
||||
}
|
||||
|
||||
unregisterAppInstallListener(listener) {
|
||||
Subscriber.unsubscribe(mCommonEventSubscriber, () => {
|
||||
console.info("Launcher AppModel unsubscribe app install listener");
|
||||
let index = mAppInstallListeners.indexOf(listener);
|
||||
if (index != -1) {
|
||||
mAppInstallListeners.splice(index, 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
createInstallationSubscriberCallBack(err, data) {
|
||||
console.info("Launcher AppModel createInstallationSubscriberCallBack");
|
||||
mCommonEventSubscriber = data;
|
||||
Subscriber.subscribe(mCommonEventSubscriber, this.installationSubscriberCallBack.bind(this));
|
||||
}
|
||||
|
||||
installationSubscriberCallBack(err, data) {
|
||||
console.info("Launcher AppModel installationSubscriberCallBack");
|
||||
this.reportAppInstallEvent();
|
||||
}
|
||||
}
|
61
launcher/src/main/js/default/common/model/ILayoutConfig.js
Normal file
@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
|
||||
export default class ILayoutConfig {
|
||||
constructor() {
|
||||
}
|
||||
|
||||
getAppPageStartConfig() {
|
||||
return this.loadAppPageStartConfig();
|
||||
}
|
||||
|
||||
setAppPageStartConfig(type) {
|
||||
this.saveAppPageStartConfig(type);
|
||||
}
|
||||
|
||||
getGridConfig() {
|
||||
return this.loadGridConfig();
|
||||
}
|
||||
|
||||
setGridConfig(id) {
|
||||
this.saveGridConfig(id);
|
||||
}
|
||||
|
||||
getRecentProcessLimit() {
|
||||
return this.loadRecentProcessLimit();
|
||||
}
|
||||
|
||||
setRecentProcessLimit(num) {
|
||||
this.saveRecentProcessLimit(num);
|
||||
}
|
||||
|
||||
loadAppPageStartConfig() {
|
||||
}
|
||||
|
||||
saveAppPageStartConfig(type) {
|
||||
}
|
||||
|
||||
loadGridConfig() {
|
||||
}
|
||||
|
||||
saveGridConfig(id) {
|
||||
}
|
||||
|
||||
loadRecentProcessLimit() {
|
||||
}
|
||||
|
||||
saveRecentProcessLimit(num) {
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 StorageLayoutConfig from './StorageLayoutConfig.js'
|
||||
|
||||
export function getLayoutConfig() {
|
||||
return new StorageLayoutConfig();
|
||||
}
|
57
launcher/src/main/js/default/common/model/ResourceManager.js
Normal file
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 resmgr from '@ohos.resmgr';
|
||||
|
||||
const DEFAULT_ICON_URL = 'common/pics/icon_default.png';
|
||||
|
||||
export default class ResourceManager {
|
||||
ResourceManager() {
|
||||
}
|
||||
|
||||
getAppIcon(path, bundleName, callback) {
|
||||
if (path == null || path == undefined || path == "" || path <= 0) {
|
||||
console.info('Launcher getAppIcon iconid > ' + DEFAULT_ICON_URL);
|
||||
callback(DEFAULT_ICON_URL);
|
||||
} else {
|
||||
resmgr.getResourceManager(bundleName).then(item => {
|
||||
console.info('Launcher getResourceManager data>' + item);
|
||||
item.getMediaBase64(path, (error, value) => {
|
||||
console.info('Launcher getMediaBase64 value>' + value);
|
||||
if (value != null) {
|
||||
callback(value);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
getAppName(labelId, bundleName, appName, callback) {
|
||||
if (labelId == null || labelId == undefined || labelId == "" || labelId <= 0) {
|
||||
console.info('Launcher getAppName callback ' + appName);
|
||||
callback(appName);
|
||||
} else {
|
||||
resmgr.getResourceManager(bundleName).then(item => {
|
||||
console.info('Launcher getResourceManager labelId' + labelId);
|
||||
item.getString(labelId, (error, value) => {
|
||||
console.info('Launcher getString value>' + value);
|
||||
if (value != null) {
|
||||
callback(value);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
52
launcher/src/main/js/default/common/model/SettingsModel.js
Normal file
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 GridLayoutConfigs from '../../common/configs/GridLayoutConfigs.js';
|
||||
import {getLayoutConfig} from './LayoutConfigManager.js';
|
||||
|
||||
var mLayoutConfig = getLayoutConfig();
|
||||
var mGridConfig = 0;
|
||||
var gridLayoutTable = GridLayoutConfigs.GridLayoutTable;
|
||||
|
||||
export default class SettingsModel {
|
||||
getGridLayoutTable() {
|
||||
return gridLayoutTable;
|
||||
}
|
||||
|
||||
getGridConfig() {
|
||||
mGridConfig = mLayoutConfig.getGridConfig();
|
||||
return gridLayoutTable[mGridConfig];
|
||||
}
|
||||
|
||||
setGridConfig(id) {
|
||||
mLayoutConfig.setGridConfig(id);
|
||||
}
|
||||
|
||||
getRecentProcessLimit() {
|
||||
return mLayoutConfig.getRecentProcessLimit();
|
||||
}
|
||||
|
||||
setRecentProcessLimit(num) {
|
||||
mLayoutConfig.setRecentProcessLimit(num);
|
||||
}
|
||||
|
||||
getAppPageStartConfig() {
|
||||
return mLayoutConfig.getAppPageStartConfig();
|
||||
}
|
||||
|
||||
setAppPageStartConfig(type) {
|
||||
mLayoutConfig.setAppPageStartConfig(type);
|
||||
}
|
||||
}
|
72
launcher/src/main/js/default/common/model/StorageLayoutConfig.js
Executable file
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 ILayoutConfig from './ILayoutConfig.js';
|
||||
import DefaultLayoutConfig from '../../common/configs/DefaultLayoutConfig.js';
|
||||
import storage from '@ohos.data.storage';
|
||||
|
||||
const APP_PAGE_START_CONFIG = 'AppStartPageType';
|
||||
const GRID_CONFIG = "GridConfig";
|
||||
const RECENT_PROCESS_LIMIT = "RecentProcessLimit";
|
||||
const PREFERENCES_PATH = '/data/accounts/account_0/appdata/com.ohos.launcher/sharedPreference/LauncherPreference';
|
||||
var mPreferences = storage.getStorageSync(PREFERENCES_PATH);
|
||||
|
||||
export default class StorageLayoutConfig extends ILayoutConfig {
|
||||
constructor() {
|
||||
super();
|
||||
}
|
||||
|
||||
loadAppPageStartConfig() {
|
||||
console.info('Launcher mPreferences get APP_PAGE_START_CONFIG');
|
||||
var data = mPreferences.getSync(APP_PAGE_START_CONFIG, DefaultLayoutConfig.DefaultAppPageStartConfig);
|
||||
console.info('Launcher mPreferences get' + data);
|
||||
return data;
|
||||
}
|
||||
|
||||
saveAppPageStartConfig(type) {
|
||||
console.info('Launcher mPreferences put type' + type);
|
||||
mPreferences.putSync(APP_PAGE_START_CONFIG, type);
|
||||
mPreferences.flushSync();
|
||||
console.info('Launcher mPreferences put type flush');
|
||||
}
|
||||
|
||||
loadGridConfig() {
|
||||
console.info('Launcher mPreferences get GRID_CONFIG');
|
||||
var data = mPreferences.getSync(GRID_CONFIG, DefaultLayoutConfig.DefaultGridConfig);
|
||||
console.info('Launcher mPreferences get' + data);
|
||||
return data;
|
||||
}
|
||||
|
||||
saveGridConfig(id) {
|
||||
console.info('Launcher mPreferences put id' + id);
|
||||
mPreferences.putSync(GRID_CONFIG, id);
|
||||
mPreferences.flushSync();
|
||||
console.info('Launcher mPreferences put id flush');
|
||||
}
|
||||
|
||||
loadRecentProcessLimit() {
|
||||
console.info('Launcher mPreferences get');
|
||||
var data = mPreferences.getSync(RECENT_PROCESS_LIMIT, DefaultLayoutConfig.DefaultRecentProcessLimit);
|
||||
console.info('Launcher mPreferences get' + data);
|
||||
return data;
|
||||
}
|
||||
|
||||
saveRecentProcessLimit(num) {
|
||||
console.info('Launcher mPreferences put num' + num);
|
||||
mPreferences.putSync(RECENT_PROCESS_LIMIT, num);
|
||||
mPreferences.flushSync();
|
||||
console.info('Launcher mPreferences put num flush');
|
||||
}
|
||||
}
|
BIN
launcher/src/main/js/default/common/pics/icon_default.png
Normal file
After Width: | Height: | Size: 5.8 KiB |
After Width: | Height: | Size: 1.6 MiB |
38
launcher/src/main/js/default/common/utils/RouterUtil.js
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 router from '@system.router';
|
||||
|
||||
var Router = function () {
|
||||
return {
|
||||
push: function (uri, papams) {
|
||||
router.push({
|
||||
uri: uri,
|
||||
params: papams
|
||||
})
|
||||
}, replace: function (uri, papams) {
|
||||
router.replace({
|
||||
uri: uri,
|
||||
params: papams
|
||||
})
|
||||
}, back: function () {
|
||||
router.back();
|
||||
}, clear: function () {
|
||||
router.clear();
|
||||
}
|
||||
}
|
||||
}();
|
||||
|
||||
export default Router;
|
18
launcher/src/main/js/default/i18n/en-US.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"strings": {
|
||||
"loading": "Loading...",
|
||||
"cancelled": "Cancelled",
|
||||
"uninstall_succeeded": "Successfully uninstalled",
|
||||
"uninstall": "Uninstall",
|
||||
"cancel": "Cancel",
|
||||
"prohibited": "Uninstall prohibited ",
|
||||
"settings": "Settings",
|
||||
"carry_out": "Finish",
|
||||
"do_you_want_to_uninstall_start": "Are you sure uninstall",
|
||||
"do_you_want_to_uninstall_end": "?",
|
||||
"launcher_settings": "Launcher settings",
|
||||
"uninstall_app": "Uninstall App",
|
||||
"layout": "Layout",
|
||||
"recent_tasks_settings": "Recent tasks settings"
|
||||
}
|
||||
}
|
18
launcher/src/main/js/default/i18n/zh-CN.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"strings": {
|
||||
"loading": "加载中...",
|
||||
"cancelled": "已取消",
|
||||
"uninstall_succeeded": "卸载成功",
|
||||
"uninstall": "卸载",
|
||||
"cancel": "取消",
|
||||
"prohibited": "禁止卸载",
|
||||
"settings": "设置",
|
||||
"carry_out": "完成",
|
||||
"do_you_want_to_uninstall_start": "确定卸载",
|
||||
"do_you_want_to_uninstall_end": "吗?",
|
||||
"launcher_settings": "桌面设置",
|
||||
"uninstall_app": "应用卸载",
|
||||
"layout": "布局",
|
||||
"recent_tasks_settings": "最近任务设置"
|
||||
}
|
||||
}
|
118
launcher/src/main/js/default/pages/AppGridView/AppGridView.css
Normal file
@ -0,0 +1,118 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 '../../common/css/CommonPageStyle.css';
|
||||
|
||||
.container {
|
||||
background-image: url("common/pics/img_wallpaper_default.jpg");
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
.body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: space-around;
|
||||
}
|
||||
|
||||
.row {
|
||||
justify-content: space-around;
|
||||
height: 180px;
|
||||
width: 920px;
|
||||
}
|
||||
|
||||
.app-box {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
height: 170px;
|
||||
width: 110px;
|
||||
margin-top: 10px;
|
||||
border-radius: 20px;
|
||||
}
|
||||
|
||||
.image-box {
|
||||
height: 110px;
|
||||
width: 110px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.app-name {
|
||||
text-align: center;
|
||||
width: 110px;
|
||||
height: 60px;
|
||||
color: white;
|
||||
font-size: 27px;
|
||||
}
|
||||
|
||||
.pageView {
|
||||
height: 85%;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.systemApp {
|
||||
height: 15%;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: space-around;
|
||||
}
|
||||
|
||||
.txt {
|
||||
color: #000000;
|
||||
font-weight: bold;
|
||||
font-size: 39px;
|
||||
}
|
||||
|
||||
.dialog-main {
|
||||
width: 500px;
|
||||
}
|
||||
|
||||
.dialog-div {
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.inner-txt {
|
||||
width: 400px;
|
||||
height: 160px;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: space-around;
|
||||
}
|
||||
|
||||
.inner-btn {
|
||||
width: 400px;
|
||||
height: 120px;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.btn-txt {
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,65 @@
|
||||
<!--
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
-->
|
||||
|
||||
<element src="../../common/component/AppIcon/AppIcon.hml" name="appicon"></element>
|
||||
<element src="../../common/component/GridName/GridName.hml" name="appName"></element>
|
||||
|
||||
<div class="container" onlongpress="intoSetting()">
|
||||
<swiper class="pageView" loop="false" index="{{ index }}" onchange="pageChange">
|
||||
<div class="body" for="{{ appArray }}">
|
||||
<div for="{{ $item }}" class="row">
|
||||
<div for="{{ $item }}" style="visibility : {{ $item.visibility }};" class="app-box"
|
||||
onclick="openApplication({{ $item.bundleName }})"
|
||||
onlongpress="longPress({{ $item.AppId }},{{ $item.bundleName }},{{ $item.System }})">
|
||||
<appicon id="icon-{{ $item.bundleName }}" item-app-icon="{{ $item.AppIcon }}"
|
||||
item-app-id="{{ $item.AppId }}" item-bundle-name="{{ $item.bundleName }}">
|
||||
</appicon>
|
||||
<appname id="name-{{ $item.bundleName }}" item-app-id="{{ $item.AppId }}"
|
||||
item-label-id="{{ $item.labelId }}"
|
||||
item-bundle-name="{{ $item.bundleName }}" item-app-name="{{ $item.AppName }}">
|
||||
</appname>
|
||||
</div>
|
||||
</div>
|
||||
<div style="height : 30px;"></div>
|
||||
</div>
|
||||
</swiper>
|
||||
<div class="systemApp">
|
||||
<div class="app-box" for="{{ bottomBar }}" onclick="openApplication({{ $item.AppId }})">
|
||||
<div class="image-box">
|
||||
<image class="app-icon-img" src="{{ $item.AppIcon }}"></image>
|
||||
</div>
|
||||
<text class="app-name">
|
||||
{{ $item.AppName }}
|
||||
</text>
|
||||
</div>
|
||||
</div>
|
||||
<dialog id="simpleDialog" class="dialog-main" oncancel="cancelDialog">
|
||||
<div class="dialog-div">
|
||||
<div class="inner-txt">
|
||||
<text class="txt">{{ $t('strings.do_you_want_to_uninstall_start') }}{{ uninstallAppName }}{{
|
||||
$t('strings.do_you_want_to_uninstall_end') }}
|
||||
</text>
|
||||
</div>
|
||||
<div class="inner-btn">
|
||||
<button type="capsule" value="{{ $t('strings.cancel') }}" onclick="cancelSchedule"
|
||||
class="btn-txt"></button>
|
||||
<button type="capsule" value="{{ $t('strings.uninstall') }}" onclick="uninstallApplication"
|
||||
class="btn-txt"></button>
|
||||
</div>
|
||||
</div>
|
||||
</dialog>
|
||||
</div>
|
137
launcher/src/main/js/default/pages/AppGridView/AppGridView.js
Normal file
@ -0,0 +1,137 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 AppGridPresenter from '../../presenter/app/AppGridPresenter.js';
|
||||
import prompt from '@system.prompt';
|
||||
|
||||
var mAppGridPresenter;
|
||||
const APP_INFO_REFRESH_DELAY = 500;
|
||||
|
||||
export default {
|
||||
data: {
|
||||
index: 0,
|
||||
uninstallAppName: "",
|
||||
uninstallAppId: "",
|
||||
uninstallSystem: "",
|
||||
appArray: [[[]]],
|
||||
bottomBar: [],
|
||||
},
|
||||
|
||||
onInit() {
|
||||
console.info("Launcher AppGridView onInit");
|
||||
mAppGridPresenter = new AppGridPresenter(this.$app.$def.data.appModel, this.$app.$def.data.settingsModel);
|
||||
mAppGridPresenter.registerAppUninstallListener(this.onAppUninstallCallback.bind(this));
|
||||
mAppGridPresenter.registerAppInstallListener(this.onAppInstallCallback.bind(this));
|
||||
},
|
||||
|
||||
onShow() {
|
||||
console.info("Launcher AppGridView onShow");
|
||||
mAppGridPresenter.clearRouter();
|
||||
this.index = mAppGridPresenter.getGridIndex();
|
||||
mAppGridPresenter.getGridList(this.getGridListCallback.bind(this));
|
||||
this.bottomBar = mAppGridPresenter.getBootAppList();
|
||||
},
|
||||
|
||||
onDestory() {
|
||||
mAppGridPresenter.unregisterAppInstallListener(this.onAppInstallCallback.bind(this));
|
||||
},
|
||||
|
||||
openApplication(bundleName) {
|
||||
mAppGridPresenter.jumpTo(bundleName);
|
||||
},
|
||||
|
||||
longPress(appId, appName, system) {
|
||||
this.uninstallAppName = appName;
|
||||
this.uninstallAppId = appId;
|
||||
this.uninstallSystem = system;
|
||||
if (system == 0) {
|
||||
this.$element('simpleDialog').show()
|
||||
} else{
|
||||
prompt.showToast({
|
||||
message: this.$t('strings.prohibited')
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
intoSetting() {
|
||||
mAppGridPresenter.jumpToSetting();
|
||||
},
|
||||
|
||||
cancelDialog(e) {
|
||||
prompt.showToast({
|
||||
message: 'Dialog cancelled'
|
||||
})
|
||||
},
|
||||
|
||||
cancelSchedule(e) {
|
||||
this.$element('simpleDialog').close();
|
||||
prompt.showToast({
|
||||
message: this.$t('strings.cancelled')
|
||||
})
|
||||
},
|
||||
|
||||
uninstallApplication(e) {
|
||||
this.$element('simpleDialog').close()
|
||||
mAppGridPresenter.uninstallApp(this.uninstallAppId);
|
||||
prompt.showToast({
|
||||
message: this.$t('strings.uninstall_succeeded')
|
||||
})
|
||||
},
|
||||
|
||||
pageChange(e) {
|
||||
this.index = e.index;
|
||||
mAppGridPresenter.setGridIndex(e.index);
|
||||
},
|
||||
|
||||
getGridListCallback(callbackDate) {
|
||||
this.appArray = callbackDate;
|
||||
console.info("Launcher AppGridView getGridListCallback this.appList.length = " + this.appArray.length);
|
||||
},
|
||||
|
||||
onAppUninstallCallback(appId) {
|
||||
mAppGridPresenter.getGridList(this.getGridListCallback.bind(this));
|
||||
},
|
||||
|
||||
onAppInstallCallback(appId) {
|
||||
console.info("Launcher AppGridView onAppInstallCallback start");
|
||||
mAppGridPresenter.getGridList(this.applicationInstallCallback.bind(this));
|
||||
},
|
||||
|
||||
updateAppInfos() {
|
||||
setTimeout(() => {
|
||||
console.info("Launcher AppGridView getGridListCallback setTimeout this.appList.length = " + this.appArray.length);
|
||||
for (let i = 0; i < this.appArray.length; i++) {
|
||||
let page = this.appArray[i];
|
||||
console.info("Launcher AppGridView getGridListCallback setTimeout page = " + i);
|
||||
for (let j = 0; j < page.length; j++) {
|
||||
let row = page[j];
|
||||
console.info("Launcher AppGridView getGridListCallback setTimeout row = " + j);
|
||||
for (let k = 0; k < row.length; k++) {
|
||||
let element = row[k];
|
||||
console.info("Launcher AppGridView getGridListCallback setTimeout in page = " + i + " row = " + j + " column = " + k);
|
||||
this.$child('icon-' + element.bundleName).updateIcon();
|
||||
this.$child('name-' + element.bundleName).updateName();
|
||||
}
|
||||
}
|
||||
}
|
||||
}, APP_INFO_REFRESH_DELAY);
|
||||
},
|
||||
|
||||
applicationInstallCallback(callbackData) {
|
||||
this.appArray = callbackData;
|
||||
console.info("Launcher AppGridView applicationIntallCallback this.appList.length = " + this.appArray.length);
|
||||
this.updateAppInfos();
|
||||
}
|
||||
}
|
@ -0,0 +1,82 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 '../../common/css/CommonPageStyle.css';
|
||||
|
||||
.container {
|
||||
background-image: url("common/pics/img_wallpaper_default.jpg");
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
.list {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.list-item {
|
||||
width: 100%;
|
||||
height: 130px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.appitem {
|
||||
height: 110px;
|
||||
width: 90%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.app-name {
|
||||
margin-left: 30px;
|
||||
width: 300px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.txt {
|
||||
color: #000000;
|
||||
font-weight: bold;
|
||||
font-size: 39px;
|
||||
}
|
||||
|
||||
.dialog-main {
|
||||
width: 500px;
|
||||
}
|
||||
|
||||
.dialog-div {
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.inner-txt {
|
||||
width: 400px;
|
||||
height: 160px;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: space-around;
|
||||
}
|
||||
|
||||
.inner-btn {
|
||||
width: 400px;
|
||||
height: 120px;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.btn-txt {
|
||||
height: 50px;
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
<!--
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
-->
|
||||
|
||||
<element src="../../common/component/AppIcon/AppIcon.hml" name="appicon"></element>
|
||||
<element src="../../common/component/ListName/AppName.hml" name="appName"></element>
|
||||
|
||||
<div class="container">
|
||||
<list class="list" onlongpress="toSetting">
|
||||
<list-item class="list-item" for="{{ appList }}" focusable="true" onfocus="focus({{ $idx }})"
|
||||
onkey="onAppListKeyEvent"
|
||||
onlongpress="longPress({{ $item.AppId }},{{ $item.bundleName }},{{ $item.System }})">
|
||||
<div class="appitem" focusable="true" onclick="openApplication({{ $item.bundleName }})">
|
||||
<appicon id="icon{{ $idx }}" item-app-icon="{{ $item.AppIcon }}" item-app-id="{{ $item.AppId }}"
|
||||
item-bundle-name="{{ $item.bundleName }}">
|
||||
</appicon>
|
||||
<appname id="name{{ $idx }}" item-app-id="{{ $item.AppId }}" item-label-id="{{ $item.labelId }}"
|
||||
item-bundle-name="{{ $item.bundleName }}" item-app-name="{{ $item.AppName }}">
|
||||
</appname>
|
||||
</div>
|
||||
</list-item>
|
||||
</list>
|
||||
<dialog id="chooseDialog" class="dialog-main">
|
||||
<div class="dialog-div">
|
||||
<div class="inner-btn">
|
||||
<button type="capsule" value="{{ $t('strings.launcher_settings') }}" onclick="chooseSettings"
|
||||
class="btn-txt"></button>
|
||||
<button type="capsule" value="{{ $t('strings.uninstall_app') }}" onclick="chooseUninstall"
|
||||
class="btn-txt"></button>
|
||||
</div>
|
||||
</div>
|
||||
</dialog>
|
||||
<dialog id="simpleDialog" class="dialog-main" oncancel="cancelDialog">
|
||||
<div class="dialog-div">
|
||||
<div class="inner-txt">
|
||||
<text class="txt">{{ $t('strings.do_you_want_to_uninstall_start') }}{{ uninstallAppName }}{{
|
||||
$t('strings.do_you_want_to_uninstall_end') }}
|
||||
</text>
|
||||
</div>
|
||||
<div class="inner-btn">
|
||||
<button type="capsule" value="{{ $t('strings.cancel') }}" onclick="cancelSchedule"
|
||||
class="btn-txt"></button>
|
||||
<button type="capsule" value="{{ $t('strings.uninstall') }}" onclick="uninstallApplication"
|
||||
class="btn-txt"></button>
|
||||
</div>
|
||||
</div>
|
||||
</dialog>
|
||||
</div>
|
144
launcher/src/main/js/default/pages/AppListView/AppListView.js
Normal file
@ -0,0 +1,144 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 AppListPresenter from '../../presenter/app/AppListPresenter.js';
|
||||
import prompt from '@system.prompt';
|
||||
|
||||
var mAppListPresenter;
|
||||
|
||||
const APP_INFO_REFRESH_DELAY = 500;
|
||||
|
||||
export default {
|
||||
data: {
|
||||
appList: [],
|
||||
uninstallAppId: null,
|
||||
uninstallAppName: null,
|
||||
ifSystem: true,
|
||||
},
|
||||
|
||||
onInit() {
|
||||
mAppListPresenter = new AppListPresenter(this.$app.$def.data.appModel);
|
||||
mAppListPresenter.registerAppUninstallListener(this.onAppUninstallCallback);
|
||||
mAppListPresenter.registerAppInstallListener(this.onAppInstallCallback);
|
||||
},
|
||||
|
||||
onShow() {
|
||||
mAppListPresenter.clearRouter();
|
||||
mAppListPresenter.getAppList(this.getListCallback.bind(this));
|
||||
},
|
||||
|
||||
onDestory() {
|
||||
mAppListPresenter.unregisterAppInstallListener(this.onAppInstallCallback.bind(this));
|
||||
},
|
||||
|
||||
getListCallback(list) {
|
||||
if (list == undefined || list == null) {
|
||||
this.appList = [];
|
||||
return;
|
||||
}
|
||||
this.appList = list;
|
||||
},
|
||||
|
||||
openApplication(bundleName) {
|
||||
mAppListPresenter.jumpTo(bundleName);
|
||||
},
|
||||
|
||||
longPress(appId, bundleName, System) {
|
||||
this.uninstallAppId = appId;
|
||||
this.uninstallAppName = bundleName;
|
||||
this.ifSystem = System;
|
||||
this.$element('chooseDialog').show();
|
||||
},
|
||||
|
||||
toSetting() {
|
||||
mAppListPresenter.jumpToSetting();
|
||||
},
|
||||
|
||||
chooseUninstall() {
|
||||
this.$element('simpleDialog').show();
|
||||
},
|
||||
|
||||
chooseSettings() {
|
||||
this.$element('chooseDialog').close();
|
||||
mAppListPresenter.jumpToSetting();
|
||||
},
|
||||
|
||||
cancelDialog(e) {
|
||||
this.$element('chooseDialog').close();
|
||||
prompt.showToast({
|
||||
message: 'Dialog cancelled'
|
||||
})
|
||||
},
|
||||
|
||||
cancelSchedule(e) {
|
||||
this.$element('chooseDialog').close();
|
||||
this.$element('simpleDialog').close();
|
||||
prompt.showToast({
|
||||
message: this.$t('strings.cancelled')
|
||||
})
|
||||
},
|
||||
|
||||
uninstallApplication(e) {
|
||||
this.$element('chooseDialog').close();
|
||||
this.$element('simpleDialog').close();
|
||||
if (this.uninstallAppName != null) {
|
||||
mAppListPresenter.uninstallApp(this.uninstallAppName,this.ifSystem,this.getUninstallApp.bind(this));
|
||||
}
|
||||
},
|
||||
|
||||
getUninstallApp(callback) {
|
||||
var success = callback;
|
||||
if (!success) {
|
||||
prompt.showToast({
|
||||
message: this.$t('strings.prohibited')
|
||||
})
|
||||
} else if (success) {
|
||||
prompt.showToast({
|
||||
message: this.$t('strings.uninstall_succeeded')
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
onAppUninstallCallback(appId) {
|
||||
},
|
||||
|
||||
onAppInstallCallback(appId) {
|
||||
console.info("Launcher AppListView onAppInstallCallback start");
|
||||
mAppListPresenter.getAppList(this.applicationInstallCallback.bind(this));
|
||||
console.info("Launcher AppListView onAppInstallCallback end");
|
||||
},
|
||||
|
||||
updateAppInfos() {
|
||||
console.info("Launcher AppListView getListCallback setTimeout this.appList.length = " + this.appList.length);
|
||||
setTimeout(() => {
|
||||
for (let i = 0; i < this.appList.length; i++) {
|
||||
console.info("Launcher AppListView getListCallback setTimeout in i = " + i);
|
||||
this.$child('icon' + i).updateIcon();
|
||||
this.$child('name' + i).updateName();
|
||||
}
|
||||
}, APP_INFO_REFRESH_DELAY);
|
||||
},
|
||||
|
||||
applicationInstallCallback(list) {
|
||||
console.info("Launcher AppListView applicationInstallCallback in ");
|
||||
if (list == undefined || list == null) {
|
||||
this.appList = [];
|
||||
return;
|
||||
}
|
||||
this.appList = list;
|
||||
this.initListFocus();
|
||||
this.updateAppInfos();
|
||||
}
|
||||
}
|
30
launcher/src/main/js/default/pages/EntryView/EntryView.css
Normal file
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
|
||||
.container {
|
||||
background-image: url("common/pics/img_wallpaper_default.jpg");
|
||||
background-size: cover;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
text {
|
||||
color: white;
|
||||
font-size: 30px;
|
||||
}
|
20
launcher/src/main/js/default/pages/EntryView/EntryView.hml
Normal file
@ -0,0 +1,20 @@
|
||||
<!--
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
-->
|
||||
|
||||
<div class="container">
|
||||
<text>{{$t('strings.loading')}}</text>
|
||||
</div>
|
38
launcher/src/main/js/default/pages/EntryView/EntryView.js
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 EntryPresenter from '../../presenter/entry/EntryPresenter.js'
|
||||
|
||||
var mEntryPresenter;
|
||||
const timeout = 1000;
|
||||
|
||||
export default {
|
||||
onInit() {
|
||||
console.info("Launcher EntryView onInit start");
|
||||
mEntryPresenter = new EntryPresenter(this.$app.$def.data.settingsModel);
|
||||
console.info("Launcher EntryView onInit end");
|
||||
},
|
||||
|
||||
onShow() {
|
||||
setTimeout(() => {
|
||||
console.info("Launcher EntryView onShow start");
|
||||
mEntryPresenter.startAppListView();
|
||||
console.info("Launcher EntryView onShow end");
|
||||
}, timeout);
|
||||
|
||||
},
|
||||
|
||||
fun(){}
|
||||
}
|
119
launcher/src/main/js/default/pages/SettingsView/SettingsView.css
Executable file
@ -0,0 +1,119 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
|
||||
.container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.top-bar {
|
||||
top:0;
|
||||
height: 100px;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background-color: #F0EEEE;
|
||||
}
|
||||
|
||||
.settings-box {
|
||||
height: 100%;
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
text {
|
||||
font-size: 40px;
|
||||
}
|
||||
|
||||
list {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.list-bar {
|
||||
background-color: white;
|
||||
border-bottom-width: 3px;
|
||||
border-color: black;
|
||||
}
|
||||
|
||||
list-item {
|
||||
height: 100px;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.item-box {
|
||||
width: 95%;
|
||||
height: 100%;
|
||||
border-bottom-width: 3px;
|
||||
border-color: #ACABAB;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content:space-around;
|
||||
}
|
||||
|
||||
.layout, .recentProcessLimit {
|
||||
width: 70%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.switch, .select {
|
||||
width: 30%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.over {
|
||||
height: 100px;
|
||||
width: 70%;
|
||||
background-color: #BE008000;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 20px;
|
||||
}
|
||||
|
||||
.over:active {
|
||||
background-color: green;
|
||||
}
|
||||
|
||||
.layoutButton {
|
||||
background-color: green;
|
||||
height: 50%;
|
||||
width: 15%;
|
||||
border-radius: 30px;
|
||||
border-color: #A0A0A0;
|
||||
border-width: 2px;
|
||||
margin:3px ;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
@ -0,0 +1,88 @@
|
||||
<!--
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
-->
|
||||
|
||||
<div class="container">
|
||||
<div class = "top-bar">
|
||||
<text>
|
||||
{{$t('strings.settings')}}
|
||||
</text>
|
||||
</div>
|
||||
<div class = "settings-box">
|
||||
<list>
|
||||
<list-item-group>
|
||||
<list-item class= "list-bar">
|
||||
<text>
|
||||
{{$t('strings.layout')}}
|
||||
</text>
|
||||
</list-item>
|
||||
<list-item>
|
||||
<div class="item-box">
|
||||
<div class = "layout">
|
||||
<text>
|
||||
{{layout}}
|
||||
</text>
|
||||
</div>
|
||||
<div class = "switch">
|
||||
<switch checked = "{{checked}}" onchange="changeSwitch"></switch>
|
||||
</div>
|
||||
</div>
|
||||
</list-item>
|
||||
<list-item if = '{{!checked}}'>
|
||||
<div class="item-box">
|
||||
<div for = "{{gridLayoutTable}}" onclick="changeLayout({{$item.id}})" class = "layoutButton" style="background-color: {{layoutButtonStyle[$item.id].color}};">
|
||||
<text style="font-size: 30px; color:{{layoutButtonStyle[$item.id].fontColor}}" >{{$item.layout}}</text>
|
||||
</div>
|
||||
</div>
|
||||
</list-item>
|
||||
</list-item-group>
|
||||
<list-item-group>
|
||||
<list-item class= "list-bar">
|
||||
<text>
|
||||
{{$t('strings.recent_tasks_settings')}}
|
||||
</text>
|
||||
</list-item>
|
||||
<list-item>
|
||||
<div class="item-box" >
|
||||
<div class = "recentProcessLimit">
|
||||
<text>
|
||||
{{recentProcessLimit}}
|
||||
</text>
|
||||
</div>
|
||||
<div class = "select">
|
||||
<select onchange="changeSelect" focusable="true">
|
||||
<option value= "2">2</option>
|
||||
<option value= "3">3</option>
|
||||
<option value= "4">4</option>
|
||||
<option value= "5">5</option>
|
||||
<option value= "6">6</option>
|
||||
<option value= "7">7</option>
|
||||
<option value= "8">8</option>
|
||||
<option value= "9">9</option>
|
||||
<option value= "10">10</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</list-item>
|
||||
</list-item-group>
|
||||
</list>
|
||||
</div>
|
||||
<div class = "over" onclick="submit">
|
||||
<text>
|
||||
{{$t('strings.carry_out')}}
|
||||
</text>
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,98 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 SettingsPresenter from '../../presenter/settings/SettingsPresenter.js';
|
||||
import Colors from '../../common/colors/Colors.js'
|
||||
import LayoutConstants from '../../common/constants/LayoutConstants.js'
|
||||
|
||||
var mSettingsPresenter;
|
||||
var mGridConfig;
|
||||
|
||||
export default {
|
||||
data: {
|
||||
layout: "",
|
||||
checked: false,
|
||||
layoutButtonStyle: [],
|
||||
gridLayoutTable: [],
|
||||
recentProcessLimit: ''
|
||||
},
|
||||
|
||||
onInit() {
|
||||
mSettingsPresenter = new SettingsPresenter(this.$app.$def.data.settingsModel);
|
||||
mGridConfig = mSettingsPresenter.getGridConfig();
|
||||
this.gridLayoutTable = mSettingsPresenter.getGridLayoutTable()
|
||||
this.recentProcessLimit = mSettingsPresenter.getRecentProcessLimit();
|
||||
for (let i = 0; i < this.gridLayoutTable.length; i++) {
|
||||
this.layoutButtonStyle.push({
|
||||
color: "",
|
||||
fontColor: ""
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
onShow() {
|
||||
this.layout = mSettingsPresenter.getAppPageStartConfig();
|
||||
if (this.layout == LayoutConstants.Grid) {
|
||||
this.checked = false;
|
||||
this.layout = LayoutConstants.Grid;
|
||||
} else {
|
||||
this.checked = true;
|
||||
this.layout = LayoutConstants.List;
|
||||
}
|
||||
for (let i = 0; i < this.gridLayoutTable.length; i++) {
|
||||
if (i == mGridConfig.id) {
|
||||
this.layoutButtonStyle[i].color = Colors.bgSelectedColor;
|
||||
this.layoutButtonStyle[i].fontColor = Colors.fontSelectedColor;
|
||||
} else {
|
||||
this.layoutButtonStyle[i].color = Colors.bgUnselectedColor;
|
||||
this.layoutButtonStyle[i].fontColor = Colors.fontUnselectedColor;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
changeSwitch() {
|
||||
if (this.checked) {
|
||||
this.checked = false;
|
||||
this.layout = LayoutConstants.Grid;
|
||||
} else {
|
||||
this.checked = true;
|
||||
this.layout = LayoutConstants.List;
|
||||
}
|
||||
},
|
||||
|
||||
changeSelect(selected) {
|
||||
this.recentProcessLimit = Number(selected.newValue)
|
||||
mSettingsPresenter.setRecentProcessLimit(this.recentProcessLimit);
|
||||
},
|
||||
|
||||
submit() {
|
||||
mSettingsPresenter.setAppPageStartConfig(this.layout);
|
||||
mSettingsPresenter.settingUpdate();
|
||||
mSettingsPresenter.setRecentProcessLimit(this.recentProcessLimit);
|
||||
},
|
||||
|
||||
changeLayout(id) {
|
||||
for (let i = 0; i < this.gridLayoutTable.length; i++) {
|
||||
if (i == id) {
|
||||
this.layoutButtonStyle[i].color = Colors.bgSelectedColor;
|
||||
this.layoutButtonStyle[i].fontColor = Colors.fontSelectedColor;
|
||||
} else {
|
||||
this.layoutButtonStyle[i].color = Colors.bgUnselectedColor;
|
||||
this.layoutButtonStyle[i].fontColor = Colors.fontUnselectedColor;
|
||||
}
|
||||
}
|
||||
mSettingsPresenter.setGridConfig(id);
|
||||
}
|
||||
}
|
@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 BaseAppPresenter from './base/BaseAppPresenter.js';
|
||||
|
||||
var mSettingsModel;
|
||||
var mGridConfig;
|
||||
var mAppGridList = [];
|
||||
var viewCallback;
|
||||
var mIndex = 0;
|
||||
|
||||
export default class AppGridPresenter extends BaseAppPresenter {
|
||||
constructor(AppModel, SettingsModel) {
|
||||
super(AppModel);
|
||||
this.appModel = AppModel;
|
||||
mSettingsModel = SettingsModel;
|
||||
mGridConfig = mSettingsModel.getGridConfig();
|
||||
}
|
||||
|
||||
pagingFiltering(mblist) {
|
||||
mAppGridList = [];
|
||||
var listLength = mblist.length;
|
||||
var column = mGridConfig.column;
|
||||
var row = mGridConfig.row;
|
||||
var page = Math.ceil(listLength / column / row);
|
||||
for (var k = 0; k < page; k++) {
|
||||
var appPageList = [];
|
||||
for (var i = 0; i < row; i++) {
|
||||
var appRowList = [];
|
||||
for (var j = 0; j < column; j++) {
|
||||
if ((i * column) + j + k * column * row >= listLength) {
|
||||
var appInfo = {
|
||||
System: false,
|
||||
AppName: '',
|
||||
AppId: '',
|
||||
AppIcon: '',
|
||||
bundleName: '',
|
||||
labelId: '',
|
||||
visibility: 'hidden'
|
||||
};
|
||||
appRowList.push(appInfo);
|
||||
} else {
|
||||
var tmp ={
|
||||
System: mblist[(i * column) + j + k * column * row].System,
|
||||
AppName: mblist[(i * column) + j + k * column * row].AppName,
|
||||
AppId: mblist[(i * column) + j + k * column * row].AppId,
|
||||
AppIcon: mblist[(i * column) + j + k * column * row].AppIcon,
|
||||
bundleName: mblist[(i * column) + j + k * column * row].bundleName,
|
||||
labelId: mblist[(i * column) + j + k * column * row].labelId,
|
||||
visibility:'visible'
|
||||
};
|
||||
appRowList.push(tmp);
|
||||
}
|
||||
}
|
||||
appPageList.push(appRowList);
|
||||
}
|
||||
mAppGridList.push(appPageList);
|
||||
}
|
||||
return mAppGridList;
|
||||
}
|
||||
|
||||
getGridList(callback) {
|
||||
viewCallback = callback;
|
||||
this.appModel.getGridPagesAppList(this.getGridListCallback.bind(this));
|
||||
}
|
||||
|
||||
getGridListCallback(list) {
|
||||
let callbackList = this.pagingFiltering(list);
|
||||
viewCallback(callbackList);
|
||||
}
|
||||
|
||||
getGridIndex() {
|
||||
return mIndex;
|
||||
}
|
||||
|
||||
setGridIndex(index) {
|
||||
mIndex = index
|
||||
}
|
||||
|
||||
getBootAppList() {
|
||||
return this.appModel.getGridBootAppList();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 BaseAppPresenter from './base/BaseAppPresenter.js';
|
||||
|
||||
export default class AppListPresenter extends BaseAppPresenter {
|
||||
constructor(AppModel) {
|
||||
super(AppModel);
|
||||
}
|
||||
}
|
@ -0,0 +1,83 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 RouterUtil from '../../../common/utils/RouterUtil.js';
|
||||
|
||||
const JUMPSETTING='pages/SettingsView/SettingsView';
|
||||
var viewCallback;
|
||||
var uninstallCallback;
|
||||
|
||||
export default class BaseAppPresenter {
|
||||
constructor(AppModel) {
|
||||
this.appModel = AppModel;
|
||||
}
|
||||
|
||||
getAppList(callback) {
|
||||
viewCallback = callback;
|
||||
this.appModel.getAppList(this.getListCallback.bind(this));
|
||||
}
|
||||
|
||||
getListCallback(list) {
|
||||
let callbacklist = list.sort(
|
||||
function compareFunction(param1, param2) {
|
||||
return param1.AppName.localeCompare(param2.AppName, "zh");
|
||||
}
|
||||
);
|
||||
|
||||
viewCallback(callbacklist);
|
||||
}
|
||||
|
||||
uninstallApp(uninstallAppName, ifSystem, callback) {
|
||||
uninstallCallback = callback;
|
||||
if (ifSystem == true) {
|
||||
callback(false);
|
||||
} else {
|
||||
this.appModel.uninstallApp(uninstallAppName, this.uninstallAppCallback.bind(this));
|
||||
}
|
||||
}
|
||||
|
||||
uninstallAppCallback(callback) {
|
||||
uninstallCallback(callback);
|
||||
}
|
||||
|
||||
jumpTo(bundleName) {
|
||||
this.appModel.openApplication(bundleName);
|
||||
}
|
||||
|
||||
jumpToSetting() {
|
||||
RouterUtil.push(JUMPSETTING);
|
||||
}
|
||||
|
||||
back() {
|
||||
RouterUtil.back();
|
||||
}
|
||||
|
||||
clearRouter() {
|
||||
RouterUtil.clear();
|
||||
}
|
||||
|
||||
registerAppUninstallListener(listener) {
|
||||
this.appModel.registerAppUninstallListener(listener);
|
||||
}
|
||||
|
||||
registerAppInstallListener(listener) {
|
||||
console.info("Launcher BaseAppPresenter registerAppInstallListener start");
|
||||
this.appModel.registerAppInstallListener(listener);
|
||||
}
|
||||
|
||||
unregisterAppInstallListener(listener) {
|
||||
this.appModel.unregisterAppInstallListener(listener);
|
||||
}
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 RouterUtil from '../../common/utils/RouterUtil.js';
|
||||
import LayoutConstants from '../../common/constants/LayoutConstants.js'
|
||||
import PageData from '../../common/constants/PageData.js';
|
||||
|
||||
const GRID = LayoutConstants.Grid;
|
||||
const GRID_APP_VIEW = PageData.GRID_APP_PAGE;
|
||||
const LIST_APP_VIEW = PageData.LIST_APP_PAGE;
|
||||
var mSettingsModel;
|
||||
|
||||
export default class EntryPresenter {
|
||||
constructor(settingsModel) {
|
||||
mSettingsModel = settingsModel;
|
||||
}
|
||||
|
||||
startAppListView() {
|
||||
console.info("Launcher EntryPresenter startAppListView start");
|
||||
let data = mSettingsModel.getAppPageStartConfig();
|
||||
if (data == GRID) {
|
||||
RouterUtil.replace(GRID_APP_VIEW);
|
||||
} else {
|
||||
RouterUtil.replace(LIST_APP_VIEW);
|
||||
}
|
||||
console.info("Launcher EntryPresenter startAppListView end");
|
||||
}
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 RouterUtil from '../../common/utils/RouterUtil.js';
|
||||
import LayoutConstants from '../../common/constants/LayoutConstants.js'
|
||||
import PageData from '../../common/constants/PageData.js';
|
||||
|
||||
const GRID = LayoutConstants.Grid;
|
||||
const GRID_APP_VIEW = PageData.GRID_APP_PAGE;
|
||||
const LIST_APP_VIEW = PageData.LIST_APP_PAGE;
|
||||
var mSettingsModel;
|
||||
|
||||
export default class SettingsPresenter {
|
||||
constructor(settingsModel) {
|
||||
mSettingsModel = settingsModel;
|
||||
}
|
||||
|
||||
getAppPageStartConfig() {
|
||||
return mSettingsModel.getAppPageStartConfig();
|
||||
}
|
||||
|
||||
setAppPageStartConfig(type) {
|
||||
mSettingsModel.setAppPageStartConfig(type);
|
||||
}
|
||||
|
||||
settingUpdate() {
|
||||
if (mSettingsModel.getAppPageStartConfig() == GRID) {
|
||||
RouterUtil.replace(GRID_APP_VIEW);
|
||||
} else {
|
||||
RouterUtil.replace(LIST_APP_VIEW);
|
||||
}
|
||||
}
|
||||
|
||||
getGridConfig() {
|
||||
return mSettingsModel.getGridConfig();
|
||||
}
|
||||
|
||||
setGridConfig(id) {
|
||||
mSettingsModel.setGridConfig(id);
|
||||
}
|
||||
|
||||
getGridLayoutTable() {
|
||||
return mSettingsModel.getGridLayoutTable();
|
||||
}
|
||||
|
||||
getRecentProcessLimit() {
|
||||
return mSettingsModel.getRecentProcessLimit();
|
||||
}
|
||||
|
||||
setRecentProcessLimit(num) {
|
||||
mSettingsModel.setRecentProcessLimit(num)
|
||||
}
|
||||
|
||||
/**
|
||||
* Back to the desktop interface
|
||||
*/
|
||||
backToTheDesktop() {
|
||||
this.settingUpdate();
|
||||
}
|
||||
}
|
12
launcher/src/main/resources/base/element/string.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"string": [
|
||||
{
|
||||
"name": "app_name",
|
||||
"value": "Launcher"
|
||||
},
|
||||
{
|
||||
"name": "mainability_description",
|
||||
"value": "JS_Phone_Empty Feature Ability"
|
||||
}
|
||||
]
|
||||
}
|
BIN
launcher/src/main/resources/base/media/icon.png
Normal file
After Width: | Height: | Size: 6.6 KiB |
BIN
launcher/src/main/resources/base/media/icon_small.png
Normal file
After Width: | Height: | Size: 5.8 KiB |
25
local.properties
Executable file
@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
|
||||
## This file must *NOT* be checked into Version Control Systems,
|
||||
# as it contains information specific to your local configuration.
|
||||
#
|
||||
# Location of the SDK. This is only used by Gradle.
|
||||
# For customization when using a Version Control System, please read the
|
||||
# header note.
|
||||
#Thu Mar 18 17:01:34 CST 2021
|
||||
hwsdk.dir=XXX
|
||||
native.dir=XXX
|
||||
nodejs.dir=XXX
|
22
recents/build.gradle
Normal file
@ -0,0 +1,22 @@
|
||||
apply plugin: 'com.huawei.ohos.hap'
|
||||
ohos {
|
||||
compileSdkVersion 6
|
||||
defaultConfig {
|
||||
compatibleSdkVersion 6
|
||||
}
|
||||
supportSystem "standard"
|
||||
buildTypes {
|
||||
release {
|
||||
proguardOpt {
|
||||
proguardEnabled false
|
||||
rulesFiles 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
}
|
||||
entryModules "launcher"
|
||||
}
|
||||
|
||||
dependencies {
|
||||
entryImplementation project(':launcher')
|
||||
}
|
||||
|
1
recents/package.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
59
recents/src/main/config.json
Normal file
@ -0,0 +1,59 @@
|
||||
{
|
||||
"app": {
|
||||
"bundleName": "com.ohos.launcher",
|
||||
"vendor": "ohos",
|
||||
"version": {
|
||||
"code": 1,
|
||||
"name": "1.0"
|
||||
},
|
||||
"apiVersion": {
|
||||
"compatible": 5,
|
||||
"target": 5,
|
||||
"releaseType": "Beta1"
|
||||
}
|
||||
},
|
||||
"deviceConfig": {},
|
||||
"module": {
|
||||
"package": "com.ohos.launcher.recents",
|
||||
"name": ".MyApplication",
|
||||
"deviceType": [
|
||||
"phone"
|
||||
],
|
||||
"distro": {
|
||||
"deliveryWithInstall": true,
|
||||
"moduleName": "recents",
|
||||
"moduleType": "feature",
|
||||
"installationFree": true
|
||||
},
|
||||
"abilities": [
|
||||
{
|
||||
"visible": true,
|
||||
"name": "com.ohos.launcher.recents.MainAbility",
|
||||
"icon": "$media:icon",
|
||||
"description": "$string:mainability_description",
|
||||
"label": "$string:app_name",
|
||||
"type": "page",
|
||||
"launchType": "singleton",
|
||||
"metaData": {
|
||||
"customizeData": [
|
||||
{
|
||||
"name": "hwc-theme"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"js": [
|
||||
{
|
||||
"pages": [
|
||||
"pages/recent/recent"
|
||||
],
|
||||
"name": "default",
|
||||
"window": {
|
||||
"designWidth": 720,
|
||||
"autoDesignWidth": false
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
28
recents/src/main/js/default/app.js
Normal file
@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 RecentsModel from './common/model/RecentsModel.js'
|
||||
|
||||
export default {
|
||||
data: {
|
||||
recentsModel: new RecentsModel(),
|
||||
},
|
||||
onCreate() {
|
||||
console.info('Launcher recents AceApplication onCreate');
|
||||
},
|
||||
onDestroy() {
|
||||
console.info('Launcher recents AceApplication onDestroy');
|
||||
}
|
||||
};
|
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 '../../css/CommonPageStyle.css';
|
||||
|
||||
.image-box {
|
||||
height: 80px;
|
||||
width: 80px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,20 @@
|
||||
<!--
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
-->
|
||||
|
||||
<div class="image-box">
|
||||
<image class="app-icon-img" src="{{ appIcon }}"></image>
|
||||
</div>
|
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 ResourceManager from '../../model/ResourceManager.js';
|
||||
|
||||
var mResourceManager;
|
||||
|
||||
export default {
|
||||
props: ['itemAppId', 'itemAppIcon', 'itemBundleName'],
|
||||
data() {
|
||||
return {
|
||||
bundleName: this.itemBundleName,
|
||||
appId: this.itemAppId,
|
||||
appIcon: ""
|
||||
};
|
||||
},
|
||||
onInit() {
|
||||
console.info("Launcher recents AppIcon onInit start")
|
||||
this.$watch('itemAppIcon', 'appIconWatcher');
|
||||
mResourceManager = new ResourceManager();
|
||||
mResourceManager.getAppIcon(this.itemAppIcon, this.itemBundleName, this.iconLoadCallback);
|
||||
console.info("Launcher recents AppIcon onInit end")
|
||||
},
|
||||
onShow() {
|
||||
|
||||
},
|
||||
appIconWatcher(newV, oldV) {
|
||||
if (newV != null && newV != undefined) {
|
||||
mResourceManager.getAppIcon(this.itemAppIcon, this.itemBundleName, this.iconLoadCallback);
|
||||
}
|
||||
},
|
||||
iconLoadCallback(image) {
|
||||
this.appIcon = image;
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 '../../css/CommonPageStyle.css';
|
||||
|
||||
.app-name {
|
||||
color: black;
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
<!--
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
-->
|
||||
|
||||
<text class="app-name">
|
||||
{{ appName }}
|
||||
</text>
|
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 ResourceManager from '../../model/ResourceManager.js';
|
||||
|
||||
var mResourceManager;
|
||||
|
||||
export default {
|
||||
props: ['itemAppId', 'itemLabelId', 'itemBundleName', 'itemAppName'],
|
||||
data() {
|
||||
return {
|
||||
labelId: this.itemLabelId,
|
||||
bundleName: this.itemBundleName,
|
||||
appId: this.itemAppId,
|
||||
appName: ""
|
||||
};
|
||||
},
|
||||
onInit() {
|
||||
this.$watch('itemLabelId', 'appIconWatcher');
|
||||
mResourceManager = new ResourceManager();
|
||||
mResourceManager.getAppName(this.itemLabelId, this.itemBundleName, this.itemAppName, this.iconLoadCallback);
|
||||
},
|
||||
onShow() {
|
||||
|
||||
},
|
||||
appIconWatcher(newV, oldV) {
|
||||
if (newV != null && newV != undefined) {
|
||||
mResourceManager.getAppName(this.itemLabelId, this.itemBundleName, this.itemAppName, this.iconLoadCallback);
|
||||
}
|
||||
},
|
||||
iconLoadCallback(name) {
|
||||
this.appName = name;
|
||||
}
|
||||
}
|
38
recents/src/main/js/default/common/css/CommonPageStyle.css
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
|
||||
.container {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.app-icon-img {
|
||||
border-radius: 20px;
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
}
|
||||
|
||||
.app-icon-img:active {
|
||||
width: 75px;
|
||||
height: 75px;
|
||||
}
|
||||
|
||||
.app-name {
|
||||
color: black;
|
||||
}
|
160
recents/src/main/js/default/common/model/RecentsModel.js
Normal file
@ -0,0 +1,160 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 napiAbilityManager from '@ohos.napi_ability_manager';
|
||||
import featureAbility from '@ohos.feature_ability';
|
||||
import storage from '@ohos.data.storage';
|
||||
import bundle_mgr from '@ohos.bundle_mgr';
|
||||
import feature_ability from '@ohos.feature_ability';
|
||||
|
||||
var RECENT_PROCESS_LIMIT_KEY = 'RecentProcessLimit';
|
||||
const PREFERENCES_PATH = '/data/accounts/account_0/appdata/com.ohos.launcher/sharedPreference/LauncherPreference';
|
||||
var mRecentList = [];
|
||||
var DEFAULT_RECENT_PROCESS_LIMIT = 10;
|
||||
var INCLUDE_SYSTEM_APP = 0;
|
||||
var EXCLUDE_SYSTEM_APP = 1;
|
||||
var mIconResultCount = 0;
|
||||
var mPreferences = storage.getStorageSync(PREFERENCES_PATH);
|
||||
|
||||
export default class RecentsModel {
|
||||
getRecentProcessList(callback) {
|
||||
console.info("Launcher recents RecentsModel getRecentProcessList start")
|
||||
mRecentList = [];
|
||||
mIconResultCount = 0;
|
||||
console.info("Launcher recents RecentsModel napiAbilityManager.queryRecentAbilityMissionInfos start")
|
||||
napiAbilityManager.queryRecentAbilityMissionInfos().then((data) => {
|
||||
console.info("Launcher recents RecentsModel napiAbilityManager.queryRecentAbilityMissionInfos() callback")
|
||||
console.info('Launcher recents queryRecentAbilityMissionInfos data length [' + data.length + ']');
|
||||
console.info('Launcher recents queryRecentAbilityMissionInfos data = ' + JSON.stringify(data));
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
let recentTaskInfo = {
|
||||
AppName: data[i].missionDescription.label,
|
||||
AppId: data[i].topAbility.bundleName,
|
||||
bundleName: data[i].topAbility.bundleName,
|
||||
abilityName: data[i].topAbility.abilityName,
|
||||
iconId: '',
|
||||
labelId: '',
|
||||
missionId: data[i].id
|
||||
}
|
||||
mRecentList.push(recentTaskInfo);
|
||||
}
|
||||
console.info('Launcher recents RecentsModel queryRecentAbilityMissionInfos mRecentList = ' + JSON.stringify(mRecentList));
|
||||
for (let element of mRecentList) {
|
||||
console.info('Launcher recents RecentsModel bundle_mgr.getApplicationInfo element of mRecentList = ' + JSON.stringify(element));
|
||||
bundle_mgr.getApplicationInfo(element.AppId).then(data => {
|
||||
console.info('Launcher recents bundle_mgr.getApplicationInfo data = ' + JSON.stringify(data));
|
||||
let recentTaskInfo = mRecentList.find((recentItem) => {
|
||||
if (recentItem.AppId == data.bundleName) return recentItem;
|
||||
});
|
||||
recentTaskInfo.iconId = data.iconId;
|
||||
recentTaskInfo.labelId = data.labelId;
|
||||
mIconResultCount++;
|
||||
console.info('Launcher recents getApplicationInfo mIconResultCount = ' + mIconResultCount);
|
||||
console.info('Launcher recents getApplicationInfo mRecentList.length = ' + mRecentList.length);
|
||||
if (mIconResultCount == mRecentList.length) {
|
||||
callback(mRecentList);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
console.info("Launcher recents RecentsModel getRecentProcessList end")
|
||||
}
|
||||
|
||||
clearRecentProcess() {
|
||||
console.info("Launcher recents RecentsModel clearRecentProcess start")
|
||||
while (mRecentList.length > 0) {
|
||||
mRecentList.pop();
|
||||
}
|
||||
console.info("Launcher recents RecentsModel napiAbilityManager.removeStack start")
|
||||
napiAbilityManager.removeStack(EXCLUDE_SYSTEM_APP).then((data) => {
|
||||
console.info('Launcher recents removeStack data [' + data + ']');
|
||||
});
|
||||
|
||||
setTimeout(() => {
|
||||
console.info("Launcher recents RecentsModel feature_ability.terminateAbility start")
|
||||
feature_ability.terminateAbility()
|
||||
.then(data => console.info("Launcher recents terminateAbility promise::then : " + data))
|
||||
.catch(error => console.info("Launcher recents terminateAbility promise::catch : " + error));
|
||||
}, 1000);
|
||||
|
||||
console.info("Launcher recents RecentsModel clearRecentProcess end")
|
||||
}
|
||||
|
||||
removeRecentProcess(missionId) {
|
||||
console.info("Launcher recents RecentsModel removeRecentProcess start")
|
||||
for (var idx = 0; idx < mRecentList.length; idx++) {
|
||||
if (mRecentList[idx].missionId == missionId) {
|
||||
mRecentList.splice(idx, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
console.info("Launcher recents RecentsModel napiAbilityManager.removeMission start")
|
||||
napiAbilityManager.removeMission(missionId).then((data) => {
|
||||
console.info('removeMission data [' + data + ']');
|
||||
});
|
||||
|
||||
if (mRecentList.length == 0) {
|
||||
setTimeout(() => {
|
||||
console.info("Launcher recents RecentsModel feature_ability.terminateAbility start")
|
||||
feature_ability.terminateAbility()
|
||||
.then(data => console.info("Launcher recents terminateAbility promise::then : " + data))
|
||||
.catch(error => console.info("Launcher recents terminateAbility promise::catch : " + error));
|
||||
}, 1000);
|
||||
}
|
||||
console.info("Launcher recents RecentsModel removeRecentProcess end")
|
||||
}
|
||||
|
||||
getRecentProcessLimit() {
|
||||
console.info("Launcher recents RecentsModel getRecentProcessLimit start");
|
||||
let limit = DEFAULT_RECENT_PROCESS_LIMIT;
|
||||
if (mPreferences != null && mPreferences != undefined) {
|
||||
limit = mPreferences.getSync(RECENT_PROCESS_LIMIT_KEY, DEFAULT_RECENT_PROCESS_LIMIT);
|
||||
}
|
||||
console.info("Launcher recents RecentsModel getRecentProcessLimit end limit = " + limit);
|
||||
return limit;
|
||||
}
|
||||
|
||||
hotStartUpApp(appInfo) {
|
||||
console.info('Launcher recents hotStartUpApp start');
|
||||
this.startAbility(appInfo);
|
||||
console.info('Launcher recents hotStartUpApp end');
|
||||
}
|
||||
|
||||
startAbility(appInfo) {
|
||||
console.info("Launcher recents startAbility start");
|
||||
console.info("Launcher recents featureAbility.startAbility appId = " + JSON.stringify(appInfo));
|
||||
featureAbility.startAbility({
|
||||
bundleName: appInfo.AppId,
|
||||
abilityName: appInfo.abilityName,
|
||||
requestCode: 1,
|
||||
abilityType: "PageAbility",
|
||||
want: {
|
||||
action: "action1",
|
||||
entities: ["entity1"],
|
||||
type: "PageAbility",
|
||||
flags: 2,
|
||||
elementName: {
|
||||
deviceId: "deviceId",
|
||||
bundleName: appInfo.AppId,
|
||||
abilityName: appInfo.abilityName,
|
||||
},
|
||||
},
|
||||
syncOption: 1
|
||||
}).then(data =>
|
||||
console.info("Launcher recents promise::then : " + data)).catch(error =>
|
||||
console.info("Launcher recents promise::catch : " + error));
|
||||
console.info("Launcher recents startAbility end");
|
||||
}
|
||||
}
|
62
recents/src/main/js/default/common/model/ResourceManager.js
Normal file
@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 resmgr from '@ohos.resmgr';
|
||||
|
||||
const DEFAULT_ICON_URL = 'common/pics/icon_default.png';
|
||||
|
||||
export default class ResourceManager {
|
||||
ResourceManager() {
|
||||
}
|
||||
|
||||
getAppIcon(path, bundleName, callback) {
|
||||
console.info("Launcher recents ResourceManager getAppIcon start path = " + path + " bundleName = " + bundleName);
|
||||
if (path == null || path == undefined || path == "") {
|
||||
console.info("Launcher recents ResourceManager defaultIcon callback ");
|
||||
callback(DEFAULT_ICON_URL)
|
||||
} else {
|
||||
console.info("Launcher recents ResourceManager resmgr.getResourceManager called");
|
||||
resmgr.getResourceManager(bundleName).then(item => {
|
||||
console.info("Launcher recents ResourceManager item.getMediaBase64 called");
|
||||
item.getMediaBase64(path, (error, value) => {
|
||||
console.info("Launcher recents ResourceManager item.getMediaBase64 callback value = " + value);
|
||||
if (value != null) {
|
||||
callback(value);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
console.info("Launcher recents ResourceManager getAppIcon end");
|
||||
}
|
||||
|
||||
getAppName(labelId, bundleName, appName, callback) {
|
||||
console.info("Launcher recents ResourceManager getAppName start labelId = " + labelId
|
||||
+ " bundleName = " + bundleName + " appName = " + appName);
|
||||
if (labelId <= 0) {
|
||||
callback(appName);
|
||||
} else {
|
||||
console.info("Launcher recents ResourceManager resmgr.getResourceManager ");
|
||||
resmgr.getResourceManager(bundleName).then(item => {
|
||||
console.info("Launcher recents ResourceManager item.getString " + JSON.stringify(item));
|
||||
item.getString(labelId, (error, value) => {
|
||||
if (value != null) {
|
||||
console.info("Launcher recents ResourceManager item.getString callback value = " + value);
|
||||
callback(value);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
BIN
recents/src/main/js/default/common/pics/ic_recent_delete.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
recents/src/main/js/default/common/pics/ic_wallpaper_recent.jpg
Normal file
After Width: | Height: | Size: 239 KiB |
BIN
recents/src/main/js/default/common/pics/img_app_default.png
Normal file
After Width: | Height: | Size: 8.1 KiB |
4
recents/src/main/js/default/i18n/en-US.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"strings": {
|
||||
}
|
||||
}
|
4
recents/src/main/js/default/i18n/zh-CN.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"strings": {
|
||||
}
|
||||
}
|
95
recents/src/main/js/default/pages/recent/recent.css
Normal file
@ -0,0 +1,95 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 '../../common/css/CommonPageStyle.css';
|
||||
|
||||
.container {
|
||||
background-image: url("common/pics/ic_wallpaper_recent.jpg");
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
.body {
|
||||
height: 80%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.list {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.list-item {
|
||||
height: 100%;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.app-item {
|
||||
margin-right: 10px;
|
||||
margin-left: 10px;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.app-icon {
|
||||
width: 100%;
|
||||
height: 20%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.app-img {
|
||||
background-size: auto;
|
||||
width: 100%;
|
||||
height: 60%;
|
||||
border-radius: 25px;
|
||||
}
|
||||
|
||||
.piece {
|
||||
height: 20%;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.clear {
|
||||
background-color: black;
|
||||
opacity: 0.4;
|
||||
border-radius: 40px;
|
||||
height: 80px;
|
||||
width: 80px;
|
||||
}
|
||||
|
||||
.clear:active {
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.clear-img {
|
||||
border-radius: 40px;
|
||||
}
|
||||
|
||||
.message {
|
||||
width: 90%;
|
||||
height: 60px;
|
||||
background-color: black;
|
||||
opacity: 0.4;
|
||||
border-radius: 20px;
|
||||
}
|
47
recents/src/main/js/default/pages/recent/recent.hml
Normal file
@ -0,0 +1,47 @@
|
||||
<!--
|
||||
/*
|
||||
* Copyright (c) 2021 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.
|
||||
*/
|
||||
-->
|
||||
|
||||
<element src="../../common/component/AppIcon/AppIcon.hml" name="appIcon"></element>
|
||||
<element src="../../common/component/AppName/AppName.hml" name="appName"></element>
|
||||
<div class="container">
|
||||
<div class="body">
|
||||
<list class="list">
|
||||
<list-item class="list-item" for="{{ recentProcessList }}">
|
||||
<div class="app-item">
|
||||
<div class="app-icon">
|
||||
<appicon item-app-icon="{{ $item.iconId }}" item-app-id="{{ $item.AppId }}"
|
||||
item-bundle-name="{{ $item.bundleName }}">
|
||||
</appicon>
|
||||
<appname item-app-id="{{ $item.AppId }}" item-label-id="{{ $item.labelId }}"
|
||||
item-bundle-name="{{ $item.bundleName }}" item-app-name="{{ $item.AppName }}">
|
||||
</appname>
|
||||
</div>
|
||||
<image class="app-img" src="/common/pics/img_app_default.png"
|
||||
onswipe="clearApp({{ $item.missionId }})" direction="up" onclick="startUp({{ $item }})">
|
||||
</image>
|
||||
</div>
|
||||
</list-item>
|
||||
</list>
|
||||
</div>
|
||||
<div class="piece">
|
||||
<div class="clear" onclick="clearAll">
|
||||
<image class="clear-img" src="common/pics/ic_recent_delete.png">
|
||||
</image>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
69
recents/src/main/js/default/pages/recent/recent.js
Normal file
@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 RecentsPresenter from '../../presenter/recent/RecentsPresenter.js';
|
||||
|
||||
var mRecentsPresenter;
|
||||
|
||||
export default {
|
||||
data: {
|
||||
recentProcessList: []
|
||||
},
|
||||
onInit() {
|
||||
console.info("Launcher recents onInit start");
|
||||
console.info("Launcher recents onInit end");
|
||||
},
|
||||
|
||||
onShow() {
|
||||
console.info("Launcher recents onShow start");
|
||||
mRecentsPresenter = new RecentsPresenter(this.$app.$def.data.recentsModel);
|
||||
mRecentsPresenter.getRecentProcessList((data) => {
|
||||
this.recentProcessList = data;
|
||||
console.info("Launcher recents onShow getRecentProcessList this.recentProcessList = " + JSON.stringify(this.recentProcessList));
|
||||
});
|
||||
console.info("Launcher recents onShow end");
|
||||
},
|
||||
|
||||
onHide() {
|
||||
console.info("Launcher recents onHide start");
|
||||
this.recentProcessList = [];
|
||||
console.info("Launcher recents onHide end");
|
||||
},
|
||||
|
||||
clearAll() {
|
||||
console.info("Launcher recents clearAll start");
|
||||
mRecentsPresenter.clearRecentProcess();
|
||||
setTimeout(() => {
|
||||
console.info("Launcher recents clearAll mRecentsPresenter.back()");
|
||||
mRecentsPresenter.back();
|
||||
}, 1500);
|
||||
console.info("Launcher recents clearAll end");
|
||||
},
|
||||
|
||||
clearApp(missionId, e) {
|
||||
console.info("Launcher recents clearApp start missionId = " + missionId + " e.direction = " + e.direction);
|
||||
if (e.direction == "up") {
|
||||
console.info(" mRecentsPresenter.removeRecentProcess missionId = " + missionId);
|
||||
mRecentsPresenter.removeRecentProcess(missionId);
|
||||
}
|
||||
console.info("Launcher recents clearApp end");
|
||||
},
|
||||
|
||||
startUp(appInfo) {
|
||||
console.info("Launcher recents startUp start appInfo = " + JSON.stringify(appInfo));
|
||||
mRecentsPresenter.startUpApp(appInfo);
|
||||
console.info("Launcher recents startUp end");
|
||||
}
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 router from '@system.router';
|
||||
|
||||
var mRecentsModel;
|
||||
var mRecentsLimit;
|
||||
|
||||
export default class RecentsPresenter {
|
||||
constructor(recentsModel) {
|
||||
console.info("Launcher recents RecentsPresenter constructor start");
|
||||
mRecentsModel = recentsModel;
|
||||
mRecentsLimit = mRecentsModel.getRecentProcessLimit();
|
||||
console.info("Launcher recents RecentsPresenter constructor end");
|
||||
}
|
||||
|
||||
getRecentProcessList(callback) {
|
||||
console.info("Launcher recents RecentsPresenter getRecentProcessList start")
|
||||
mRecentsModel.getRecentProcessList((data) => {
|
||||
console.info("Launcher recents RecentsPresenter mRecentsModel.getRecentProcessList data = " + JSON.stringify(data));
|
||||
let recentProcessList = data;
|
||||
if (recentProcessList.length > mRecentsLimit) {
|
||||
recentProcessList.splice(0, recentProcessList.length - mRecentsLimit);
|
||||
}
|
||||
console.info("Launcher recents RecentsPresenter mRecentsModel.getRecentProcessList getRecentProcessList recentProcessList = " + JSON.stringify(recentProcessList));
|
||||
callback(recentProcessList);
|
||||
});
|
||||
console.info("Launcher recents RecentsPresenter getRecentProcessList end")
|
||||
}
|
||||
|
||||
clearRecentProcess() {
|
||||
console.info("Launcher recents RecentsPresenter clearRecentProcess start");
|
||||
mRecentsModel.clearRecentProcess();
|
||||
console.info("Launcher recents RecentsPresenter clearRecentProcess end");
|
||||
}
|
||||
|
||||
removeRecentProcess(missionId) {
|
||||
console.info("Launcher recents RecentsPresenter removeRecentProcess start missionId = " + missionId);
|
||||
mRecentsModel.removeRecentProcess(missionId);
|
||||
console.info("Launcher recents RecentsPresenter removeRecentProcess end");
|
||||
}
|
||||
|
||||
back() {
|
||||
console.info("Launcher recents RecentsPresenter back start");
|
||||
router.back();
|
||||
console.info("Launcher recents RecentsPresenter back end");
|
||||
}
|
||||
|
||||
startUpApp(appInfo) {
|
||||
console.info("Launcher recents RecentsPresenter startUpApp start appInfo = " + JSON.stringify(appInfo));
|
||||
mRecentsModel.hotStartUpApp(appInfo);
|
||||
console.info("Launcher recents RecentsPresenter startUpApp end ");
|
||||
}
|
||||
}
|
12
recents/src/main/resources/base/element/string.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"string": [
|
||||
{
|
||||
"name": "app_name",
|
||||
"value": "Recents"
|
||||
},
|
||||
{
|
||||
"name": "mainability_description",
|
||||
"value": "JS_Phone_Empty Feature Ability"
|
||||
}
|
||||
]
|
||||
}
|
BIN
recents/src/main/resources/base/media/icon.png
Normal file
After Width: | Height: | Size: 6.6 KiB |
17
settings.gradle
Executable file
@ -0,0 +1,17 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 ':launcher', ':recents'
|
||||
|