6.6.3 - Alpha4 - 意图相关操作 (编辑/查看/安装/发送/播放等) 增加操作异常提示
This commit is contained in:
@@ -32,6 +32,7 @@
|
|||||||
"设置页面对话框相关设置支持 \"使用默认值\" 菜单选项",
|
"设置页面对话框相关设置支持 \"使用默认值\" 菜单选项",
|
||||||
"文件管理器浮动按钮展开后点击其他区域可自动隐藏",
|
"文件管理器浮动按钮展开后点击其他区域可自动隐藏",
|
||||||
"打包单文件时自动读取并勾选已安装应用的声明权限 _[`issue #362`](http://issues.autojs6.com/362)_",
|
"打包单文件时自动读取并勾选已安装应用的声明权限 _[`issue #362`](http://issues.autojs6.com/362)_",
|
||||||
|
"意图相关操作 (编辑/查看/安装/发送/播放等) 增加操作异常提示",
|
||||||
"已忽略更新记录及客户端模式连接地址记录支持清空操作",
|
"已忽略更新记录及客户端模式连接地址记录支持清空操作",
|
||||||
"版本更新信息支持多语言显示 (与当前显示语言同步)",
|
"版本更新信息支持多语言显示 (与当前显示语言同步)",
|
||||||
"使用异步加载方式一定程度提升文件管理器列表滑动流畅性",
|
"使用异步加载方式一定程度提升文件管理器列表滑动流畅性",
|
||||||
|
|||||||
@@ -389,7 +389,7 @@ SDK Tools (أدوات SDK) (في النافذة اليمنى)
|
|||||||
|
|
||||||
يعتمد مشروع AutoJs6 على إصدار `JDK (مجموعة تطوير جافا)` بإصدار لا يقل عن `17`، ولكن يفضل الإصدار الذي لا يقل عن `19`.
|
يعتمد مشروع AutoJs6 على إصدار `JDK (مجموعة تطوير جافا)` بإصدار لا يقل عن `17`، ولكن يفضل الإصدار الذي لا يقل عن `19`.
|
||||||
|
|
||||||
اعتبارًا من 14 May 2025، الإصدار الأقصى المدعوم من JDK لمشروع AutoJs6 هو `24`.
|
اعتبارًا من 15 May 2025، الإصدار الأقصى المدعوم من JDK لمشروع AutoJs6 هو `24`.
|
||||||
|
|
||||||
> ملاحظة: إذا كان نظام الكمبيوتر يحتوي على JDK والإصدار يفي بالمتطلبات المذكورة أعلاه، فيمكنك تخطي هذا القسم.
|
> ملاحظة: إذا كان نظام الكمبيوتر يحتوي على JDK والإصدار يفي بالمتطلبات المذكورة أعلاه، فيمكنك تخطي هذا القسم.
|
||||||
|
|
||||||
|
|||||||
@@ -389,7 +389,7 @@ Check `Show Package Details`, click NDK and CMake respectively to ensure the cor
|
|||||||
|
|
||||||
The `JDK (Java Development Kit)` version required for the AutoJs6 project should be at least `17`, but `19` or higher is recommended.
|
The `JDK (Java Development Kit)` version required for the AutoJs6 project should be at least `17`, but `19` or higher is recommended.
|
||||||
|
|
||||||
As of May 14, 2025, AutoJs6 supports up to version `24` of the JDK.
|
As of May 15, 2025, AutoJs6 supports up to version `24` of the JDK.
|
||||||
|
|
||||||
> Note: If the JDK is already installed on the computer system and the version meets the above requirements, this section can be skipped.
|
> Note: If the JDK is already installed on the computer system and the version meets the above requirements, this section can be skipped.
|
||||||
|
|
||||||
|
|||||||
@@ -389,7 +389,7 @@ Marca `Show Package Details (Mostrar detalles del paquete)`, haz clic en NDK y C
|
|||||||
|
|
||||||
La versión mínima requerida del `JDK (Kit de Desarrollo de Java)` para el proyecto AutoJs6 es `17`, pero se recomienda usar una versión no inferior a `19`.
|
La versión mínima requerida del `JDK (Kit de Desarrollo de Java)` para el proyecto AutoJs6 es `17`, pero se recomienda usar una versión no inferior a `19`.
|
||||||
|
|
||||||
Hasta el 14 de May de 2025, AutoJs6 soporta hasta la versión `24` de JDK.
|
Hasta el 15 de May de 2025, AutoJs6 soporta hasta la versión `24` de JDK.
|
||||||
|
|
||||||
> Nota: Si el sistema ya tiene instalado JDK y cumple con los requisitos anteriores, puedes omitir esta sección.
|
> Nota: Si el sistema ya tiene instalado JDK y cumple con los requisitos anteriores, puedes omitir esta sección.
|
||||||
|
|
||||||
|
|||||||
@@ -389,7 +389,7 @@ Cochez `Show Package Details (afficher les détails du package)`, puis cliquez r
|
|||||||
|
|
||||||
La version de JDK (Kit de développement Java) requise pour le projet AutoJs6 doit être au moins `17`, mais il est recommandé d'avoir au moins `19`.
|
La version de JDK (Kit de développement Java) requise pour le projet AutoJs6 doit être au moins `17`, mais il est recommandé d'avoir au moins `19`.
|
||||||
|
|
||||||
À partir du 14 May 2025, AutoJs6 prend en charge la version maximale de JDK `24`.
|
À partir du 15 May 2025, AutoJs6 prend en charge la version maximale de JDK `24`.
|
||||||
|
|
||||||
> Note : Si le JDK est déjà installé sur le système informatique et que la version répond aux exigences ci-dessus, vous pouvez ignorer cette section.
|
> Note : Si le JDK est déjà installé sur le système informatique et que la version répond aux exigences ci-dessus, vous pouvez ignorer cette section.
|
||||||
|
|
||||||
|
|||||||
@@ -389,7 +389,7 @@ SDK Tools (SDK ツール) (右側のウィンドウにあります)
|
|||||||
|
|
||||||
AutoJs6プロジェクトが依存する `JDK (Java開発キット)` のリリースバージョンは少なくとも `17` で, それ以下のバージョンは推奨されませんが, 最低でも `19` の使用を推奨します.
|
AutoJs6プロジェクトが依存する `JDK (Java開発キット)` のリリースバージョンは少なくとも `17` で, それ以下のバージョンは推奨されませんが, 最低でも `19` の使用を推奨します.
|
||||||
|
|
||||||
2025 年 5 月 14 日 現在, AutoJs6がサポートする最大のJDKバージョンは `24` です.
|
2025 年 5 月 15 日 現在, AutoJs6がサポートする最大のJDKバージョンは `24` です.
|
||||||
|
|
||||||
> 注: コンピュータシステムに適切なバージョンのJDKがインストールされている場合, この節の内容をスキップできます.
|
> 注: コンピュータシステムに適切なバージョンのJDKがインストールされている場合, この節の内容をスキップできます.
|
||||||
|
|
||||||
|
|||||||
@@ -389,7 +389,7 @@ SDK Tools (SDK 도구) (오른쪽 창에 위치)
|
|||||||
|
|
||||||
AutoJs6 프로젝트는 `JDK (Java 개발 도구 키트)` 버전이 `17` 이상이어야 하지만, `19` 이상을 권장합니다.
|
AutoJs6 프로젝트는 `JDK (Java 개발 도구 키트)` 버전이 `17` 이상이어야 하지만, `19` 이상을 권장합니다.
|
||||||
|
|
||||||
2025 년 5 월 14 일 기준으로, AutoJs6이 지원하는 최대 JDK 버전은 `24` 입니다.
|
2025 년 5 월 15 일 기준으로, AutoJs6이 지원하는 최대 JDK 버전은 `24` 입니다.
|
||||||
|
|
||||||
> 메모: 시스템에 JDK가 설치되어 있고, 버전이 위의 요구 사항을 충족하는 경우, 이 섹션을 건너뛸 수 있습니다.
|
> 메모: 시스템에 JDK가 설치되어 있고, 버전이 위의 요구 사항을 충족하는 경우, 이 섹션을 건너뛸 수 있습니다.
|
||||||
|
|
||||||
|
|||||||
@@ -389,7 +389,7 @@ SDK Tools (SDK Инструменты) (находится в правом ок
|
|||||||
|
|
||||||
Для проекта AutoJs6 требуется версия `JDK (Java Development Kit)` не ниже `17`, но рекомендуется не ниже `19`.
|
Для проекта AutoJs6 требуется версия `JDK (Java Development Kit)` не ниже `17`, но рекомендуется не ниже `19`.
|
||||||
|
|
||||||
По состоянию на 14 May 2025 года AutoJs6 поддерживает JDK максимальной версии `24`.
|
По состоянию на 15 May 2025 года AutoJs6 поддерживает JDK максимальной версии `24`.
|
||||||
|
|
||||||
> Примечание: Если на компьютере уже установлен JDK и версия соответствует указанным требованиям, этот раздел можно пропустить.
|
> Примечание: Если на компьютере уже установлен JDK и версия соответствует указанным требованиям, этот раздел можно пропустить.
|
||||||
|
|
||||||
|
|||||||
@@ -184,6 +184,7 @@ AutoJs6 在 Auto.js 最终项目的基础上, 于 `2021/12/01` 进行二次开
|
|||||||
* `优化` 设置页面对话框相关设置支持 "使用默认值" 菜单选项
|
* `优化` 设置页面对话框相关设置支持 "使用默认值" 菜单选项
|
||||||
* `优化` 文件管理器浮动按钮展开后点击其他区域可自动隐藏
|
* `优化` 文件管理器浮动按钮展开后点击其他区域可自动隐藏
|
||||||
* `优化` 打包单文件时自动读取并勾选已安装应用的声明权限 _[`issue #362`](http://issues.autojs6.com/362)_
|
* `优化` 打包单文件时自动读取并勾选已安装应用的声明权限 _[`issue #362`](http://issues.autojs6.com/362)_
|
||||||
|
* `优化` 意图相关操作 (编辑/查看/安装/发送/播放等) 增加操作异常提示
|
||||||
* `优化` 已忽略更新记录及客户端模式连接地址记录支持清空操作
|
* `优化` 已忽略更新记录及客户端模式连接地址记录支持清空操作
|
||||||
* `优化` 版本更新信息支持多语言显示 (与当前显示语言同步)
|
* `优化` 版本更新信息支持多语言显示 (与当前显示语言同步)
|
||||||
* `优化` 使用异步加载方式一定程度提升文件管理器列表滑动流畅性
|
* `优化` 使用异步加载方式一定程度提升文件管理器列表滑动流畅性
|
||||||
@@ -334,7 +335,7 @@ SDK Tools (SDK 工具) (位于右侧窗口)
|
|||||||
|
|
||||||
AutoJs6 项目依赖的 `JDK (Java 开发工具包)` 发行版本不低于 `17`, 但建议不低于 `19`.
|
AutoJs6 项目依赖的 `JDK (Java 开发工具包)` 发行版本不低于 `17`, 但建议不低于 `19`.
|
||||||
|
|
||||||
截至 2025 年 5 月 14 日, AutoJs6 可支持 JDK 最高版本为 `24`.
|
截至 2025 年 5 月 15 日, AutoJs6 可支持 JDK 最高版本为 `24`.
|
||||||
|
|
||||||
> 注: 如果计算机系统已安装 JDK 且版本满足上述要求, 则可跳过此小节内容.
|
> 注: 如果计算机系统已安装 JDK 且版本满足上述要求, 则可跳过此小节内容.
|
||||||
|
|
||||||
|
|||||||
@@ -389,7 +389,7 @@ SDK Tools (SDK 工具) (位於右側窗口)
|
|||||||
|
|
||||||
AutoJs6 項目依賴的 `JDK (Java 開發工具包)` 發行版本不低於 `17`, 但建議不低於 `19`.
|
AutoJs6 項目依賴的 `JDK (Java 開發工具包)` 發行版本不低於 `17`, 但建議不低於 `19`.
|
||||||
|
|
||||||
截至 2025 年 5 月 14 日, AutoJs6 可支持 JDK 最高版本為 `24`.
|
截至 2025 年 5 月 15 日, AutoJs6 可支持 JDK 最高版本為 `24`.
|
||||||
|
|
||||||
> 注: 如果計算機系統已安裝 JDK 且版本滿足上述要求, 則可跳過此小節內容.
|
> 注: 如果計算機系統已安裝 JDK 且版本滿足上述要求, 則可跳過此小節內容.
|
||||||
|
|
||||||
|
|||||||
@@ -389,7 +389,7 @@ SDK Tools (SDK 工具) (位於右側視窗)
|
|||||||
|
|
||||||
AutoJs6 專案依賴的 `JDK (Java 開發工具包)` 發行版本不低於 `17`, 但建議不低於 `19`.
|
AutoJs6 專案依賴的 `JDK (Java 開發工具包)` 發行版本不低於 `17`, 但建議不低於 `19`.
|
||||||
|
|
||||||
截至 2025 年 5 月 14 日, AutoJs6 可支援 JDK 最高版本為 `24`.
|
截至 2025 年 5 月 15 日, AutoJs6 可支援 JDK 最高版本為 `24`.
|
||||||
|
|
||||||
> 注: 如果計算機系統已安裝 JDK 且版本滿足上述要求, 則可跳過此小節內容.
|
> 注: 如果計算機系統已安裝 JDK 且版本滿足上述要求, 則可跳過此小節內容.
|
||||||
|
|
||||||
|
|||||||
@@ -184,6 +184,7 @@ AutoJs6 在 Auto.js 最终项目的基础上, 于 `2021/12/01` 进行二次开
|
|||||||
* `优化` 设置页面对话框相关设置支持 "使用默认值" 菜单选项
|
* `优化` 设置页面对话框相关设置支持 "使用默认值" 菜单选项
|
||||||
* `优化` 文件管理器浮动按钮展开后点击其他区域可自动隐藏
|
* `优化` 文件管理器浮动按钮展开后点击其他区域可自动隐藏
|
||||||
* `优化` 打包单文件时自动读取并勾选已安装应用的声明权限 _[`issue #362`](http://issues.autojs6.com/362)_
|
* `优化` 打包单文件时自动读取并勾选已安装应用的声明权限 _[`issue #362`](http://issues.autojs6.com/362)_
|
||||||
|
* `优化` 意图相关操作 (编辑/查看/安装/发送/播放等) 增加操作异常提示
|
||||||
* `优化` 已忽略更新记录及客户端模式连接地址记录支持清空操作
|
* `优化` 已忽略更新记录及客户端模式连接地址记录支持清空操作
|
||||||
* `优化` 版本更新信息支持多语言显示 (与当前显示语言同步)
|
* `优化` 版本更新信息支持多语言显示 (与当前显示语言同步)
|
||||||
* `优化` 使用异步加载方式一定程度提升文件管理器列表滑动流畅性
|
* `优化` 使用异步加载方式一定程度提升文件管理器列表滑动流畅性
|
||||||
@@ -334,7 +335,7 @@ SDK Tools (SDK 工具) (位于右侧窗口)
|
|||||||
|
|
||||||
AutoJs6 项目依赖的 `JDK (Java 开发工具包)` 发行版本不低于 `17`, 但建议不低于 `19`.
|
AutoJs6 项目依赖的 `JDK (Java 开发工具包)` 发行版本不低于 `17`, 但建议不低于 `19`.
|
||||||
|
|
||||||
截至 2025 年 5 月 14 日, AutoJs6 可支持 JDK 最高版本为 `24`.
|
截至 2025 年 5 月 15 日, AutoJs6 可支持 JDK 最高版本为 `24`.
|
||||||
|
|
||||||
> 注: 如果计算机系统已安装 JDK 且版本满足上述要求, 则可跳过此小节内容.
|
> 注: 如果计算机系统已安装 JDK 且版本满足上述要求, 则可跳过此小节内容.
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
* `优化` 设置页面对话框相关设置支持 "使用默认值" 菜单选项
|
* `优化` 设置页面对话框相关设置支持 "使用默认值" 菜单选项
|
||||||
* `优化` 文件管理器浮动按钮展开后点击其他区域可自动隐藏
|
* `优化` 文件管理器浮动按钮展开后点击其他区域可自动隐藏
|
||||||
* `优化` 打包单文件时自动读取并勾选已安装应用的声明权限 _[`issue #362`](http://issues.autojs6.com/362)_
|
* `优化` 打包单文件时自动读取并勾选已安装应用的声明权限 _[`issue #362`](http://issues.autojs6.com/362)_
|
||||||
|
* `优化` 意图相关操作 (编辑/查看/安装/发送/播放等) 增加操作异常提示
|
||||||
* `优化` 已忽略更新记录及客户端模式连接地址记录支持清空操作
|
* `优化` 已忽略更新记录及客户端模式连接地址记录支持清空操作
|
||||||
* `优化` 版本更新信息支持多语言显示 (与当前显示语言同步)
|
* `优化` 版本更新信息支持多语言显示 (与当前显示语言同步)
|
||||||
* `优化` 使用异步加载方式一定程度提升文件管理器列表滑动流畅性
|
* `优化` 使用异步加载方式一定程度提升文件管理器列表滑动流畅性
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
* `优化` 设置页面对话框相关设置支持 "使用默认值" 菜单选项
|
* `优化` 设置页面对话框相关设置支持 "使用默认值" 菜单选项
|
||||||
* `优化` 文件管理器浮动按钮展开后点击其他区域可自动隐藏
|
* `优化` 文件管理器浮动按钮展开后点击其他区域可自动隐藏
|
||||||
* `优化` 打包单文件时自动读取并勾选已安装应用的声明权限 _[`issue #362`](http://issues.autojs6.com/362)_
|
* `优化` 打包单文件时自动读取并勾选已安装应用的声明权限 _[`issue #362`](http://issues.autojs6.com/362)_
|
||||||
|
* `优化` 意图相关操作 (编辑/查看/安装/发送/播放等) 增加操作异常提示
|
||||||
* `优化` 已忽略更新记录及客户端模式连接地址记录支持清空操作
|
* `优化` 已忽略更新记录及客户端模式连接地址记录支持清空操作
|
||||||
* `优化` 版本更新信息支持多语言显示 (与当前显示语言同步)
|
* `优化` 版本更新信息支持多语言显示 (与当前显示语言同步)
|
||||||
* `优化` 使用异步加载方式一定程度提升文件管理器列表滑动流畅性
|
* `优化` 使用异步加载方式一定程度提升文件管理器列表滑动流畅性
|
||||||
|
|||||||
@@ -1,14 +1,18 @@
|
|||||||
package org.autojs.autojs.model.explorer;
|
package org.autojs.autojs.model.explorer;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.view.View;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import org.autojs.autojs.external.fileprovider.AppFileProvider;
|
import org.autojs.autojs.external.fileprovider.AppFileProvider;
|
||||||
import org.autojs.autojs.model.script.ScriptFile;
|
import org.autojs.autojs.model.script.ScriptFile;
|
||||||
import org.autojs.autojs.runtime.api.Mime;
|
import org.autojs.autojs.runtime.api.Mime;
|
||||||
import org.autojs.autojs.util.FileUtils;
|
import org.autojs.autojs.util.FileUtils;
|
||||||
import org.autojs.autojs.util.IntentUtils;
|
import org.autojs.autojs.util.IntentUtils;
|
||||||
|
import org.autojs.autojs.util.IntentUtils.SnackExceptionHolder;
|
||||||
|
import org.autojs.autojs.util.IntentUtils.ToastExceptionHolder;
|
||||||
|
import org.autojs.autojs6.R;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public interface ExplorerItem {
|
public interface ExplorerItem {
|
||||||
|
|
||||||
@@ -64,11 +68,37 @@ public interface ExplorerItem {
|
|||||||
return getType().isMediaMenu();
|
return getType().isMediaMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
default void install(Context context) {
|
default boolean install(@NotNull View view) {
|
||||||
IntentUtils.installApk(context, getPath());
|
return IntentUtils.installApk(view.getContext(), getPath(), AppFileProvider.AUTHORITY, new SnackExceptionHolder(view));
|
||||||
}
|
}
|
||||||
|
|
||||||
default void play(Context context) {
|
default boolean install(Context context) {
|
||||||
|
return IntentUtils.installApk(context, getPath(), AppFileProvider.AUTHORITY, new ToastExceptionHolder(context));
|
||||||
|
}
|
||||||
|
|
||||||
|
default boolean play(@NotNull View view) {
|
||||||
|
String mimeType = determineMimeTypeForPlay();
|
||||||
|
return IntentUtils.viewFile(
|
||||||
|
view.getContext(),
|
||||||
|
getPath(),
|
||||||
|
mimeType,
|
||||||
|
AppFileProvider.AUTHORITY,
|
||||||
|
new SnackExceptionHolder(view, R.string.error_no_applications_available_for_playing_this_file)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
default boolean play(Context context) {
|
||||||
|
String mimeType = determineMimeTypeForPlay();
|
||||||
|
return IntentUtils.viewFile(
|
||||||
|
context,
|
||||||
|
getPath(),
|
||||||
|
mimeType,
|
||||||
|
AppFileProvider.AUTHORITY,
|
||||||
|
new ToastExceptionHolder(context, R.string.error_no_applications_available_for_playing_this_file)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private @NotNull String determineMimeTypeForPlay() {
|
||||||
String mimeType;
|
String mimeType;
|
||||||
FileUtils.TypeData typeData = getType().getTypeData();
|
FileUtils.TypeData typeData = getType().getTypeData();
|
||||||
if (typeData == FileUtils.TypeDataHolder.INSTANCE.getVIDEO() || typeData == FileUtils.TypeDataHolder.INSTANCE.getVIDEO_PLAYLIST()) {
|
if (typeData == FileUtils.TypeDataHolder.INSTANCE.getVIDEO() || typeData == FileUtils.TypeDataHolder.INSTANCE.getVIDEO_PLAYLIST()) {
|
||||||
@@ -78,11 +108,23 @@ public interface ExplorerItem {
|
|||||||
} else {
|
} else {
|
||||||
mimeType = Mime.WILDCARD;
|
mimeType = Mime.WILDCARD;
|
||||||
}
|
}
|
||||||
IntentUtils.viewFile(context, getPath(), mimeType, AppFileProvider.AUTHORITY);
|
return mimeType;
|
||||||
}
|
}
|
||||||
|
|
||||||
default void view(Context context) {
|
default boolean view(@NotNull View view) {
|
||||||
IntentUtils.viewFile(context, getPath(), Mime.WILDCARD, AppFileProvider.AUTHORITY);
|
return IntentUtils.viewFile(view.getContext(), getPath(), null, AppFileProvider.AUTHORITY, new SnackExceptionHolder(view));
|
||||||
|
}
|
||||||
|
|
||||||
|
default boolean view(Context context) {
|
||||||
|
return IntentUtils.viewFile(context, getPath(), null, AppFileProvider.AUTHORITY, new ToastExceptionHolder(context));
|
||||||
|
}
|
||||||
|
|
||||||
|
default boolean edit(@NotNull View view) {
|
||||||
|
return IntentUtils.editFile(view.getContext(), getPath(), AppFileProvider.AUTHORITY, new SnackExceptionHolder(view));
|
||||||
|
}
|
||||||
|
|
||||||
|
default boolean edit(Context context) {
|
||||||
|
return IntentUtils.editFile(context, getPath(), AppFileProvider.AUTHORITY, new ToastExceptionHolder(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import org.autojs.autojs.script.ScriptSource
|
|||||||
import org.autojs.autojs.ui.edit.EditActivity
|
import org.autojs.autojs.ui.edit.EditActivity
|
||||||
import org.autojs.autojs.util.FileUtils
|
import org.autojs.autojs.util.FileUtils
|
||||||
import org.autojs.autojs.util.IntentUtils
|
import org.autojs.autojs.util.IntentUtils
|
||||||
|
import org.autojs.autojs.util.IntentUtils.ToastExceptionHolder
|
||||||
import org.autojs.autojs.util.ViewUtils
|
import org.autojs.autojs.util.ViewUtils
|
||||||
import org.autojs.autojs.util.WorkingDirectoryUtils
|
import org.autojs.autojs.util.WorkingDirectoryUtils
|
||||||
import org.autojs.autojs6.R
|
import org.autojs.autojs6.R
|
||||||
@@ -77,7 +78,13 @@ object Scripts {
|
|||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun openByOtherApps(uri: Uri) {
|
fun openByOtherApps(uri: Uri) {
|
||||||
IntentUtils.viewFile(globalAppContext, uri, "text/plain", AppFileProvider.AUTHORITY)
|
IntentUtils.viewFile(
|
||||||
|
globalAppContext,
|
||||||
|
uri,
|
||||||
|
"text/plain",
|
||||||
|
AppFileProvider.AUTHORITY,
|
||||||
|
ToastExceptionHolder(globalAppContext),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@@ -159,15 +166,12 @@ object Scripts {
|
|||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun send(context: Context, file: ScriptFile) {
|
fun send(context: Context, file: ScriptFile) {
|
||||||
Intent(Intent.ACTION_SEND)
|
IntentUtils.sendFile(
|
||||||
.setType("text/plain")
|
context,
|
||||||
.putExtra(
|
file.path,
|
||||||
Intent.EXTRA_STREAM,
|
AppFileProvider.AUTHORITY,
|
||||||
IntentUtils.getUriOfFile(context, file.path, AppFileProvider.AUTHORITY)
|
ToastExceptionHolder(context),
|
||||||
)
|
)
|
||||||
.let { Intent.createChooser(it, context.getString(R.string.text_send)) }
|
|
||||||
.apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) }
|
|
||||||
.let { context.startActivity(it) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import org.autojs.autojs.annotation.Lazy;
|
|||||||
import org.autojs.autojs.core.pref.Language;
|
import org.autojs.autojs.core.pref.Language;
|
||||||
import org.autojs.autojs.core.pref.Pref;
|
import org.autojs.autojs.core.pref.Pref;
|
||||||
import org.autojs.autojs.core.ui.widget.CustomSnackbar;
|
import org.autojs.autojs.core.ui.widget.CustomSnackbar;
|
||||||
|
import org.autojs.autojs.external.fileprovider.AppFileProvider;
|
||||||
import org.autojs.autojs.network.api.StreamingUrlApi;
|
import org.autojs.autojs.network.api.StreamingUrlApi;
|
||||||
import org.autojs.autojs.network.download.DownloadManager;
|
import org.autojs.autojs.network.download.DownloadManager;
|
||||||
import org.autojs.autojs.network.entity.ExtendedVersionInfo;
|
import org.autojs.autojs.network.entity.ExtendedVersionInfo;
|
||||||
@@ -31,6 +32,7 @@ import org.autojs.autojs.tool.SimpleObserver;
|
|||||||
import org.autojs.autojs.ui.settings.DisplayVersionHistoriesActivity;
|
import org.autojs.autojs.ui.settings.DisplayVersionHistoriesActivity;
|
||||||
import org.autojs.autojs.util.AndroidUtils;
|
import org.autojs.autojs.util.AndroidUtils;
|
||||||
import org.autojs.autojs.util.IntentUtils;
|
import org.autojs.autojs.util.IntentUtils;
|
||||||
|
import org.autojs.autojs.util.IntentUtils.ToastExceptionHolder;
|
||||||
import org.autojs.autojs.util.TextUtils;
|
import org.autojs.autojs.util.TextUtils;
|
||||||
import org.autojs.autojs.util.UpdateUtils;
|
import org.autojs.autojs.util.UpdateUtils;
|
||||||
import org.autojs.autojs.util.ViewUtils;
|
import org.autojs.autojs.util.ViewUtils;
|
||||||
@@ -241,7 +243,12 @@ public class UpdateChecker {
|
|||||||
private void download(Context context, VersionInfo versionInfo) {
|
private void download(Context context, VersionInfo versionInfo) {
|
||||||
Consumer<File> onNext = file -> {
|
Consumer<File> onNext = file -> {
|
||||||
mUpdateDialog = null;
|
mUpdateDialog = null;
|
||||||
IntentUtils.installApk(context, file.getPath());
|
IntentUtils.installApk(
|
||||||
|
context,
|
||||||
|
file.getPath(),
|
||||||
|
AppFileProvider.AUTHORITY,
|
||||||
|
new ToastExceptionHolder(context)
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
Consumer<Throwable> onError = e -> {
|
Consumer<Throwable> onError = e -> {
|
||||||
|
|||||||
@@ -5,11 +5,14 @@ import android.content.Context
|
|||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.ApplicationInfo
|
import android.content.pm.ApplicationInfo
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.content.pm.PackageManager.*
|
import android.content.pm.PackageManager.ApplicationInfoFlags
|
||||||
|
import android.content.pm.PackageManager.GET_META_DATA
|
||||||
|
import android.content.pm.PackageManager.NameNotFoundException
|
||||||
|
import android.content.pm.PackageManager.PackageInfoFlags
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.net.Uri
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import androidx.core.net.toUri
|
||||||
import org.autojs.autojs.annotation.ScriptInterface
|
import org.autojs.autojs.annotation.ScriptInterface
|
||||||
import org.autojs.autojs.app.GlobalAppContext
|
import org.autojs.autojs.app.GlobalAppContext
|
||||||
import org.autojs.autojs.external.fileprovider.AppFileProvider
|
import org.autojs.autojs.external.fileprovider.AppFileProvider
|
||||||
@@ -33,7 +36,7 @@ import org.autojs.autojs.runtime.api.augment.app.App as AugmentableApp
|
|||||||
* Created by Stardust on Apr 2, 2017.
|
* Created by Stardust on Apr 2, 2017.
|
||||||
* Modified by SuperMonster003 as of Jul 13, 2022.
|
* Modified by SuperMonster003 as of Jul 13, 2022.
|
||||||
*/
|
*/
|
||||||
class AppUtils(context: Context, @get:ScriptInterface val fileProviderAuthority: String? = AppFileProvider.AUTHORITY) {
|
class AppUtils(context: Context, @get:ScriptInterface val fileProviderAuthority: String = AppFileProvider.AUTHORITY) {
|
||||||
|
|
||||||
private val mContext: Context = context
|
private val mContext: Context = context
|
||||||
private val mPackageManager = mContext.packageManager
|
private val mPackageManager = mContext.packageManager
|
||||||
@@ -155,16 +158,27 @@ class AppUtils(context: Context, @get:ScriptInterface val fileProviderAuthority:
|
|||||||
|
|
||||||
@ScriptInterface
|
@ScriptInterface
|
||||||
fun uninstall(packageName: String) {
|
fun uninstall(packageName: String) {
|
||||||
Intent(Intent.ACTION_DELETE, Uri.parse("package:$packageName"))
|
Intent(Intent.ACTION_DELETE, "package:$packageName".toUri())
|
||||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
.let { mContext.startActivity(it) }
|
.let { mContext.startActivity(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ScriptInterface
|
@ScriptInterface
|
||||||
fun viewFile(path: String) = IntentUtils.viewFile(mContext, path, fileProviderAuthority)
|
fun viewFile(path: String) = IntentUtils.viewFile(
|
||||||
|
context = mContext,
|
||||||
|
path = path,
|
||||||
|
mimeType = null,
|
||||||
|
fileProviderAuthority = fileProviderAuthority,
|
||||||
|
exceptionHolder = IntentUtils.ToastExceptionHolder(mContext),
|
||||||
|
)
|
||||||
|
|
||||||
@ScriptInterface
|
@ScriptInterface
|
||||||
fun editFile(path: String) = IntentUtils.editFile(mContext, path, fileProviderAuthority)
|
fun editFile(path: String) = IntentUtils.editFile(
|
||||||
|
context = mContext,
|
||||||
|
path = path,
|
||||||
|
fileProviderAuthority = fileProviderAuthority,
|
||||||
|
exceptionHolder = IntentUtils.ToastExceptionHolder(mContext),
|
||||||
|
)
|
||||||
|
|
||||||
@ScriptInterface
|
@ScriptInterface
|
||||||
fun openUrl(url: String) {
|
fun openUrl(url: String) {
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import android.graphics.Paint;
|
|||||||
import android.media.Image;
|
import android.media.Image;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
import android.os.Looper;
|
||||||
import android.util.Base64;
|
import android.util.Base64;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
@@ -190,7 +191,7 @@ public class Images {
|
|||||||
public ScriptPromiseAdapter requestScreenCapture(int orientation, int width, int height, boolean isAsync) {
|
public ScriptPromiseAdapter requestScreenCapture(int orientation, int width, int height, boolean isAsync) {
|
||||||
ScriptPromiseAdapter promiseAdapter = new ScriptPromiseAdapter();
|
ScriptPromiseAdapter promiseAdapter = new ScriptPromiseAdapter();
|
||||||
if (mScreenCapturer == null) {
|
if (mScreenCapturer == null) {
|
||||||
Handler handler = isAsync ? new Handler() : new Handler(mScriptRuntime.loopers.getServantLooper());
|
Handler handler = isAsync ? new Handler(Looper.getMainLooper()) : new Handler(mScriptRuntime.loopers.getServantLooper());
|
||||||
Context contextForRequest = mScriptRuntime.app.getCurrentActivity();
|
Context contextForRequest = mScriptRuntime.app.getCurrentActivity();
|
||||||
if (contextForRequest == null) contextForRequest = mContext;
|
if (contextForRequest == null) contextForRequest = mContext;
|
||||||
mScreenCaptureRequester = new ScreenCaptureRequester();
|
mScreenCaptureRequester = new ScreenCaptureRequester();
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import org.autojs.autojs.ui.project.BuildActivity;
|
|||||||
import org.autojs.autojs.util.ClipboardUtils;
|
import org.autojs.autojs.util.ClipboardUtils;
|
||||||
import org.autojs.autojs.util.ConsoleUtils;
|
import org.autojs.autojs.util.ConsoleUtils;
|
||||||
import org.autojs.autojs.util.IntentUtils;
|
import org.autojs.autojs.util.IntentUtils;
|
||||||
|
import org.autojs.autojs.util.IntentUtils.ToastExceptionHolder;
|
||||||
import org.autojs.autojs.util.ViewUtils;
|
import org.autojs.autojs.util.ViewUtils;
|
||||||
import org.autojs.autojs6.R;
|
import org.autojs.autojs6.R;
|
||||||
|
|
||||||
@@ -198,7 +199,11 @@ public class EditorMenu {
|
|||||||
var executionInfo = JavaScriptFileSource.parseExecutionMode(mEditor.getText());
|
var executionInfo = JavaScriptFileSource.parseExecutionMode(mEditor.getText());
|
||||||
mEditor.insert(executionInfo.getLineno(), item.getImportText() + ";\n");
|
mEditor.insert(executionInfo.getLineno(), item.getImportText() + ";\n");
|
||||||
})
|
})
|
||||||
.onNeutral((ignored, which) -> IntentUtils.browse(mContext, item.getUrl()))
|
.onNeutral((ignored, which) -> IntentUtils.browse(
|
||||||
|
mContext,
|
||||||
|
item.getUrl(),
|
||||||
|
new ToastExceptionHolder(mContext)
|
||||||
|
))
|
||||||
.onAny((ignored, which) -> dialog.dismiss())
|
.onAny((ignored, which) -> dialog.dismiss())
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import io.reactivex.Completable
|
|||||||
import io.reactivex.Observable
|
import io.reactivex.Observable
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.schedulers.Schedulers
|
import io.reactivex.schedulers.Schedulers
|
||||||
import org.autojs.autojs.app.GlobalAppContext
|
|
||||||
import org.autojs.autojs.core.pref.Pref.getInt
|
import org.autojs.autojs.core.pref.Pref.getInt
|
||||||
import org.autojs.autojs.core.pref.Pref.getLinkedList
|
import org.autojs.autojs.core.pref.Pref.getLinkedList
|
||||||
import org.autojs.autojs.core.pref.Pref.getStringOrNull
|
import org.autojs.autojs.core.pref.Pref.getStringOrNull
|
||||||
@@ -30,7 +29,6 @@ import org.autojs.autojs.core.pref.Pref.putLinkedList
|
|||||||
import org.autojs.autojs.core.pref.Pref.putString
|
import org.autojs.autojs.core.pref.Pref.putString
|
||||||
import org.autojs.autojs.core.pref.Pref.remove
|
import org.autojs.autojs.core.pref.Pref.remove
|
||||||
import org.autojs.autojs.extension.ViewExtensions.setForceShowIconCompat
|
import org.autojs.autojs.extension.ViewExtensions.setForceShowIconCompat
|
||||||
import org.autojs.autojs.external.fileprovider.AppFileProvider
|
|
||||||
import org.autojs.autojs.groundwork.WrapContentGridLayoutManger
|
import org.autojs.autojs.groundwork.WrapContentGridLayoutManger
|
||||||
import org.autojs.autojs.model.explorer.Explorer
|
import org.autojs.autojs.model.explorer.Explorer
|
||||||
import org.autojs.autojs.model.explorer.ExplorerChangeEvent
|
import org.autojs.autojs.model.explorer.ExplorerChangeEvent
|
||||||
@@ -65,7 +63,6 @@ import org.autojs.autojs.ui.widget.FirstCharView
|
|||||||
import org.autojs.autojs.util.ColorUtils
|
import org.autojs.autojs.util.ColorUtils
|
||||||
import org.autojs.autojs.util.EnvironmentUtils.externalStoragePath
|
import org.autojs.autojs.util.EnvironmentUtils.externalStoragePath
|
||||||
import org.autojs.autojs.util.FileUtils
|
import org.autojs.autojs.util.FileUtils
|
||||||
import org.autojs.autojs.util.IntentUtils
|
|
||||||
import org.autojs.autojs.util.Observers
|
import org.autojs.autojs.util.Observers
|
||||||
import org.autojs.autojs.util.ViewUtils.showSnack
|
import org.autojs.autojs.util.ViewUtils.showSnack
|
||||||
import org.autojs.autojs.util.WorkingDirectoryUtils
|
import org.autojs.autojs.util.WorkingDirectoryUtils
|
||||||
@@ -669,8 +666,6 @@ open class ExplorerView : ThemeColorSwipeRefreshLayout, SwipeRefreshLayout.OnRef
|
|||||||
|
|
||||||
internal inner class ExplorerItemViewHolder(itemView: View) : BindableViewHolder<Any>(itemView) {
|
internal inner class ExplorerItemViewHolder(itemView: View) : BindableViewHolder<Any>(itemView) {
|
||||||
|
|
||||||
private val globalAppContext by lazy { GlobalAppContext.get() }
|
|
||||||
|
|
||||||
private val mFirstChar: FirstCharView
|
private val mFirstChar: FirstCharView
|
||||||
|
|
||||||
private val mName: TextView
|
private val mName: TextView
|
||||||
@@ -841,7 +836,7 @@ open class ExplorerView : ThemeColorSwipeRefreshLayout, SwipeRefreshLayout.OnRef
|
|||||||
notifyItemOperated()
|
notifyItemOperated()
|
||||||
}
|
}
|
||||||
mExplorerItem.isMediaPlayable -> {
|
mExplorerItem.isMediaPlayable -> {
|
||||||
mExplorerItem.play(context)
|
mExplorerItem.play(this@ExplorerView)
|
||||||
notifyItemOperated()
|
notifyItemOperated()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -854,7 +849,7 @@ open class ExplorerView : ThemeColorSwipeRefreshLayout, SwipeRefreshLayout.OnRef
|
|||||||
notifyItemOperated()
|
notifyItemOperated()
|
||||||
}
|
}
|
||||||
mExplorerItem.isExternalEditable -> {
|
mExplorerItem.isExternalEditable -> {
|
||||||
IntentUtils.editFile(globalAppContext, mExplorerItem.path, AppFileProvider.AUTHORITY)
|
mExplorerItem.edit(this@ExplorerView)
|
||||||
notifyItemOperated()
|
notifyItemOperated()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -876,11 +871,11 @@ open class ExplorerView : ThemeColorSwipeRefreshLayout, SwipeRefreshLayout.OnRef
|
|||||||
private fun install() {
|
private fun install() {
|
||||||
when {
|
when {
|
||||||
mExplorerItem.isInstallable -> {
|
mExplorerItem.isInstallable -> {
|
||||||
mExplorerItem.install(context)
|
mExplorerItem.install(this@ExplorerView)
|
||||||
notifyItemOperated()
|
notifyItemOperated()
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
IntentUtils.viewFile(globalAppContext, mExplorerItem.path)
|
mExplorerItem.view(this@ExplorerView)
|
||||||
notifyItemOperated()
|
notifyItemOperated()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,9 +20,11 @@ import net.dongliu.apk.parser.ApkFile
|
|||||||
import org.autojs.autojs.extension.MaterialDialogExtensions.makeSettingsLaunchable
|
import org.autojs.autojs.extension.MaterialDialogExtensions.makeSettingsLaunchable
|
||||||
import org.autojs.autojs.extension.MaterialDialogExtensions.makeTextCopyable
|
import org.autojs.autojs.extension.MaterialDialogExtensions.makeTextCopyable
|
||||||
import org.autojs.autojs.extension.MaterialDialogExtensions.setCopyableTextIfAbsent
|
import org.autojs.autojs.extension.MaterialDialogExtensions.setCopyableTextIfAbsent
|
||||||
|
import org.autojs.autojs.external.fileprovider.AppFileProvider
|
||||||
import org.autojs.autojs.pio.PFiles
|
import org.autojs.autojs.pio.PFiles
|
||||||
import org.autojs.autojs.runtime.api.AppUtils
|
import org.autojs.autojs.runtime.api.AppUtils
|
||||||
import org.autojs.autojs.util.IntentUtils
|
import org.autojs.autojs.util.IntentUtils
|
||||||
|
import org.autojs.autojs.util.IntentUtils.ToastExceptionHolder
|
||||||
import org.autojs.autojs6.R
|
import org.autojs.autojs6.R
|
||||||
import org.autojs.autojs6.databinding.ApkFileInfoDialogListItemBinding
|
import org.autojs.autojs6.databinding.ApkFileInfoDialogListItemBinding
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@@ -49,7 +51,12 @@ object ApkInfoDialogManager {
|
|||||||
.positiveColorRes(R.color.dialog_button_attraction)
|
.positiveColorRes(R.color.dialog_button_attraction)
|
||||||
.onPositive { materialDialog, _ ->
|
.onPositive { materialDialog, _ ->
|
||||||
materialDialog.dismiss()
|
materialDialog.dismiss()
|
||||||
IntentUtils.installApk(context, apkFilePath)
|
IntentUtils.installApk(
|
||||||
|
context = context,
|
||||||
|
path = apkFilePath,
|
||||||
|
fileProviderAuthority = AppFileProvider.AUTHORITY,
|
||||||
|
exceptionHolder = ToastExceptionHolder(context),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
.negativeText(R.string.text_cancel)
|
.negativeText(R.string.text_cancel)
|
||||||
.negativeColorRes(R.color.dialog_button_default)
|
.negativeColorRes(R.color.dialog_button_default)
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton
|
|||||||
import com.google.android.material.tabs.TabLayout
|
import com.google.android.material.tabs.TabLayout
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
import org.autojs.autojs.app.GlobalAppContext
|
import org.autojs.autojs.app.GlobalAppContext
|
||||||
|
import org.autojs.autojs.external.fileprovider.AppFileProvider
|
||||||
import org.autojs.autojs.model.explorer.ExplorerItem
|
import org.autojs.autojs.model.explorer.ExplorerItem
|
||||||
import org.autojs.autojs.model.script.Scripts
|
import org.autojs.autojs.model.script.Scripts
|
||||||
import org.autojs.autojs.tool.SimpleObserver
|
import org.autojs.autojs.tool.SimpleObserver
|
||||||
@@ -29,6 +30,8 @@ import org.autojs.autojs.ui.main.ViewStatesManageable
|
|||||||
import org.autojs.autojs.ui.project.ProjectConfigActivity
|
import org.autojs.autojs.ui.project.ProjectConfigActivity
|
||||||
import org.autojs.autojs.ui.widget.ScrollAwareFABBehavior
|
import org.autojs.autojs.ui.widget.ScrollAwareFABBehavior
|
||||||
import org.autojs.autojs.util.IntentUtils
|
import org.autojs.autojs.util.IntentUtils
|
||||||
|
import org.autojs.autojs.util.IntentUtils.SnackExceptionHolder
|
||||||
|
import org.autojs.autojs.util.IntentUtils.ToastExceptionHolder
|
||||||
import org.autojs.autojs.util.ViewUtils
|
import org.autojs.autojs.util.ViewUtils
|
||||||
import org.autojs.autojs6.R
|
import org.autojs.autojs6.R
|
||||||
import org.autojs.autojs6.databinding.FragmentExplorerBinding
|
import org.autojs.autojs6.databinding.FragmentExplorerBinding
|
||||||
@@ -103,7 +106,17 @@ class ExplorerFragment : ViewPagerFragment(0), OnFloatingActionButtonClickListen
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun viewFile(item: ExplorerItem) = IntentUtils.viewFile(GlobalAppContext.get(), item.path)
|
private fun viewFile(item: ExplorerItem): Boolean {
|
||||||
|
val context = context ?: GlobalAppContext.get()
|
||||||
|
val exceptionHolder = view?.let { SnackExceptionHolder(it) } ?: ToastExceptionHolder(context)
|
||||||
|
return IntentUtils.viewFile(
|
||||||
|
context = context,
|
||||||
|
path = item.path,
|
||||||
|
mimeType = null,
|
||||||
|
fileProviderAuthority = AppFileProvider.AUTHORITY,
|
||||||
|
exceptionHolder = exceptionHolder,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
override fun onFabClick(fab: FloatingActionButton) {
|
override fun onFabClick(fab: FloatingActionButton) {
|
||||||
// initFloatingActionMenuIfNeeded(fab).run { if (isExpanded) collapse() else expand() }
|
// initFloatingActionMenuIfNeeded(fab).run { if (isExpanded) collapse() else expand() }
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import org.autojs.autojs.apkbuilder.ApkBuilder;
|
|||||||
import org.autojs.autojs.apkbuilder.keystore.KeyStore;
|
import org.autojs.autojs.apkbuilder.keystore.KeyStore;
|
||||||
import org.autojs.autojs.core.pref.Language;
|
import org.autojs.autojs.core.pref.Language;
|
||||||
import org.autojs.autojs.extension.MaterialDialogExtensions;
|
import org.autojs.autojs.extension.MaterialDialogExtensions;
|
||||||
|
import org.autojs.autojs.external.fileprovider.AppFileProvider;
|
||||||
import org.autojs.autojs.model.explorer.Explorers;
|
import org.autojs.autojs.model.explorer.Explorers;
|
||||||
import org.autojs.autojs.model.script.ScriptFile;
|
import org.autojs.autojs.model.script.ScriptFile;
|
||||||
import org.autojs.autojs.project.ProjectConfig;
|
import org.autojs.autojs.project.ProjectConfig;
|
||||||
@@ -56,6 +57,7 @@ import org.autojs.autojs.util.AndroidUtils.Abi;
|
|||||||
import org.autojs.autojs.util.BitmapUtils;
|
import org.autojs.autojs.util.BitmapUtils;
|
||||||
import org.autojs.autojs.util.EnvironmentUtils;
|
import org.autojs.autojs.util.EnvironmentUtils;
|
||||||
import org.autojs.autojs.util.IntentUtils;
|
import org.autojs.autojs.util.IntentUtils;
|
||||||
|
import org.autojs.autojs.util.IntentUtils.ToastExceptionHolder;
|
||||||
import org.autojs.autojs.util.ViewUtils;
|
import org.autojs.autojs.util.ViewUtils;
|
||||||
import org.autojs.autojs.util.WorkingDirectoryUtils;
|
import org.autojs.autojs.util.WorkingDirectoryUtils;
|
||||||
import org.autojs.autojs6.R;
|
import org.autojs.autojs6.R;
|
||||||
@@ -987,7 +989,12 @@ public class BuildActivity extends BaseActivity implements ApkBuilder.ProgressCa
|
|||||||
.content(getString(R.string.format_build_succeeded, outApk.getPath()))
|
.content(getString(R.string.format_build_succeeded, outApk.getPath()))
|
||||||
.positiveText(R.string.text_install)
|
.positiveText(R.string.text_install)
|
||||||
.positiveColorRes(R.color.dialog_button_attraction)
|
.positiveColorRes(R.color.dialog_button_attraction)
|
||||||
.onPositive((dialog, which) -> IntentUtils.installApk(BuildActivity.this, outApk.getPath()))
|
.onPositive((dialog, which) -> IntentUtils.installApk(
|
||||||
|
BuildActivity.this,
|
||||||
|
outApk.getPath(),
|
||||||
|
AppFileProvider.AUTHORITY,
|
||||||
|
new ToastExceptionHolder(BuildActivity.this)
|
||||||
|
))
|
||||||
.negativeText(R.string.text_cancel)
|
.negativeText(R.string.text_cancel)
|
||||||
.negativeColorRes(R.color.dialog_button_default)
|
.negativeColorRes(R.color.dialog_button_default)
|
||||||
.neutralText(R.string.dialog_button_file_information)
|
.neutralText(R.string.dialog_button_file_information)
|
||||||
|
|||||||
@@ -5,7 +5,10 @@ import android.content.Context
|
|||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
|
import android.view.View
|
||||||
import androidx.core.content.FileProvider
|
import androidx.core.content.FileProvider
|
||||||
|
import androidx.core.net.toUri
|
||||||
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import org.autojs.autojs.external.fileprovider.AppFileProvider
|
import org.autojs.autojs.external.fileprovider.AppFileProvider
|
||||||
import org.autojs.autojs.runtime.api.Mime
|
import org.autojs.autojs.runtime.api.Mime
|
||||||
import org.autojs.autojs6.R
|
import org.autojs.autojs6.R
|
||||||
@@ -17,7 +20,7 @@ object IntentUtils {
|
|||||||
true.also {
|
true.also {
|
||||||
@Suppress("SpellCheckingInspection")
|
@Suppress("SpellCheckingInspection")
|
||||||
val url = "mqqwpa://im/chat?chat_type=wpa&uin=$qq"
|
val url = "mqqwpa://im/chat?chat_type=wpa&uin=$qq"
|
||||||
Intent(Intent.ACTION_VIEW, Uri.parse(url))
|
Intent(Intent.ACTION_VIEW, url.toUri())
|
||||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
.let { context.startActivity(it) }
|
.let { context.startActivity(it) }
|
||||||
}
|
}
|
||||||
@@ -29,7 +32,7 @@ object IntentUtils {
|
|||||||
true.also {
|
true.also {
|
||||||
@Suppress("SpellCheckingInspection")
|
@Suppress("SpellCheckingInspection")
|
||||||
val url = "mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26k%3D$key"
|
val url = "mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26k%3D$key"
|
||||||
Intent(Intent.ACTION_VIEW, Uri.parse(url))
|
Intent(Intent.ACTION_VIEW, url.toUri())
|
||||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
.let { context.startActivity(it) }
|
.let { context.startActivity(it) }
|
||||||
}
|
}
|
||||||
@@ -40,7 +43,7 @@ object IntentUtils {
|
|||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
fun sendMailTo(context: Context, sendTo: String, title: String? = null, content: String? = null) = try {
|
fun sendMailTo(context: Context, sendTo: String, title: String? = null, content: String? = null) = try {
|
||||||
true.also {
|
true.also {
|
||||||
Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:$sendTo")).apply {
|
Intent(Intent.ACTION_SENDTO, "mailto:$sendTo".toUri()).apply {
|
||||||
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
putExtra(Intent.EXTRA_CC, /* email */ arrayOf(sendTo))
|
putExtra(Intent.EXTRA_CC, /* email */ arrayOf(sendTo))
|
||||||
title?.let { putExtra(Intent.EXTRA_SUBJECT, it) }
|
title?.let { putExtra(Intent.EXTRA_SUBJECT, it) }
|
||||||
@@ -52,17 +55,18 @@ object IntentUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun browse(context: Context, link: String?) = try {
|
@JvmOverloads
|
||||||
|
fun browse(context: Context, link: String, exceptionHolder: ExceptionHolder? = null) = try {
|
||||||
true.also {
|
true.also {
|
||||||
Intent(Intent.ACTION_VIEW, Uri.parse(link))
|
Intent(Intent.ACTION_VIEW, link.toUri())
|
||||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
.let { context.startActivity(it) }
|
.let { context.startActivity(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (ignored: ActivityNotFoundException) {
|
} catch (e: ActivityNotFoundException) {
|
||||||
false.also {
|
exceptionHolder?.show(R.string.error_no_applications_available_for_browsing_this_link)
|
||||||
ViewUtils.showToast(context, R.string.text_no_browser, true)
|
// ViewUtils.showToast(context, R.string.text_no_browser, true)
|
||||||
}
|
false.also { e.printStackTrace() }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun shareText(context: Context, text: String?) = try {
|
fun shareText(context: Context, text: String?) = try {
|
||||||
@@ -73,9 +77,7 @@ object IntentUtils {
|
|||||||
.let { context.startActivity(it) }
|
.let { context.startActivity(it) }
|
||||||
}
|
}
|
||||||
} catch (e: ActivityNotFoundException) {
|
} catch (e: ActivityNotFoundException) {
|
||||||
false.also {
|
false.also { e.printStackTrace() }
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
@@ -84,16 +86,21 @@ object IntentUtils {
|
|||||||
Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
|
Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
|
||||||
addCategory(Intent.CATEGORY_DEFAULT)
|
addCategory(Intent.CATEGORY_DEFAULT)
|
||||||
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
data = Uri.parse("package:$packageName")
|
data = "package:$packageName".toUri()
|
||||||
}.let { context.startActivity(it) }
|
}.let { context.startActivity(it) }
|
||||||
}
|
}
|
||||||
} catch (ignored: ActivityNotFoundException) {
|
} catch (_: ActivityNotFoundException) {
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
fun installApk(context: Context, path: String, fileProviderAuthority: String? = AppFileProvider.AUTHORITY) = try {
|
fun installApk(
|
||||||
|
context: Context,
|
||||||
|
path: String,
|
||||||
|
fileProviderAuthority: String = AppFileProvider.AUTHORITY,
|
||||||
|
exceptionHolder: ExceptionHolder? = null,
|
||||||
|
) = try {
|
||||||
Intent(Intent.ACTION_VIEW)
|
Intent(Intent.ACTION_VIEW)
|
||||||
.setDataAndType(
|
.setDataAndType(
|
||||||
getUriOfFile(context, path, fileProviderAuthority),
|
getUriOfFile(context, path, fileProviderAuthority),
|
||||||
@@ -105,8 +112,9 @@ object IntentUtils {
|
|||||||
.let { context.startActivity(it) }
|
.let { context.startActivity(it) }
|
||||||
true
|
true
|
||||||
} catch (e: ActivityNotFoundException) {
|
} catch (e: ActivityNotFoundException) {
|
||||||
|
exceptionHolder?.show(R.string.error_no_applications_available_for_installing_this_file)
|
||||||
|
// ViewUtils.showToast(context, R.string.text_activity_not_found_for_apk_installing)
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
ViewUtils.showToast(context, R.string.text_activity_not_found_for_apk_installing)
|
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,51 +124,70 @@ object IntentUtils {
|
|||||||
fun getUriOfFile(context: Context, path: String?, fileProviderAuthority: String? = AppFileProvider.AUTHORITY): Uri {
|
fun getUriOfFile(context: Context, path: String?, fileProviderAuthority: String? = AppFileProvider.AUTHORITY): Uri {
|
||||||
return fileProviderAuthority?.let {
|
return fileProviderAuthority?.let {
|
||||||
FileProvider.getUriForFile(context, it, File(path ?: ""))
|
FileProvider.getUriForFile(context, it, File(path ?: ""))
|
||||||
} ?: Uri.parse("file://$path")
|
} ?: "file://$path".toUri()
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun viewFile(context: Context, path: String, fileProviderAuthority: String? = AppFileProvider.AUTHORITY): Boolean {
|
fun viewFile(context: Context, path: String, fileProviderAuthority: String = AppFileProvider.AUTHORITY): Boolean {
|
||||||
return viewFile(context, path, Mime.fromFileOr(path, Mime.WILDCARD), fileProviderAuthority)
|
return viewFile(context, path, Mime.fromFileOr(path, Mime.WILDCARD), fileProviderAuthority)
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
fun viewFile(context: Context, uri: Uri, mimeType: String?, fileProviderAuthority: String? = AppFileProvider.AUTHORITY): Boolean {
|
fun viewFile(
|
||||||
if (uri.scheme == "file") {
|
context: Context,
|
||||||
return uri.path?.let { viewFile(context, it, mimeType, fileProviderAuthority) } ?: false
|
uri: Uri,
|
||||||
}
|
mimeType: String? = null,
|
||||||
return try {
|
fileProviderAuthority: String = AppFileProvider.AUTHORITY,
|
||||||
true.also {
|
exceptionHolder: ExceptionHolder? = null,
|
||||||
Intent(Intent.ACTION_VIEW)
|
): Boolean = when (uri.scheme) {
|
||||||
.setDataAndType(uri, mimeType)
|
uri.scheme -> {
|
||||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
uri.path?.let { viewFile(context, it, mimeType, fileProviderAuthority) } ?: false
|
||||||
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
|
||||||
.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
|
|
||||||
.let { context.startActivity(it) }
|
|
||||||
}
|
|
||||||
} catch (e: Exception) {
|
|
||||||
false.also { e.printStackTrace() }
|
|
||||||
}
|
}
|
||||||
|
else -> launchViewIntent(context, uri, mimeType, exceptionHolder)
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun viewFile(context: Context, path: String, mimeType: String?, fileProviderAuthority: String? = AppFileProvider.AUTHORITY) = try {
|
fun viewFile(
|
||||||
|
context: Context,
|
||||||
|
path: String,
|
||||||
|
mimeType: String? = null,
|
||||||
|
fileProviderAuthority: String = AppFileProvider.AUTHORITY,
|
||||||
|
exceptionHolder: ExceptionHolder? = null,
|
||||||
|
) = launchViewIntent(
|
||||||
|
context = context,
|
||||||
|
uri = getUriOfFile(context, path, fileProviderAuthority),
|
||||||
|
mimeType = mimeType ?: Mime.fromFileOrWildcard(path),
|
||||||
|
exceptionHolder = exceptionHolder,
|
||||||
|
)
|
||||||
|
|
||||||
|
private fun launchViewIntent(
|
||||||
|
context: Context,
|
||||||
|
uri: Uri,
|
||||||
|
mimeType: String?,
|
||||||
|
exceptionHolder: ExceptionHolder? = null,
|
||||||
|
) = try {
|
||||||
true.also {
|
true.also {
|
||||||
Intent(Intent.ACTION_VIEW)
|
Intent(Intent.ACTION_VIEW)
|
||||||
.setDataAndType(getUriOfFile(context, path, fileProviderAuthority), mimeType)
|
.setDataAndType(uri, mimeType)
|
||||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||||
.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
|
.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
|
||||||
.let { context.startActivity(it) }
|
.let { context.startActivity(it) }
|
||||||
}
|
}
|
||||||
} catch (e: ActivityNotFoundException) {
|
} catch (e: Exception) {
|
||||||
|
exceptionHolder?.show(R.string.error_no_applications_available_for_viewing_this_file)
|
||||||
false.also { e.printStackTrace() }
|
false.also { e.printStackTrace() }
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
fun editFile(context: Context, path: String, fileProviderAuthority: String? = AppFileProvider.AUTHORITY) = try {
|
fun editFile(
|
||||||
|
context: Context,
|
||||||
|
path: String,
|
||||||
|
fileProviderAuthority: String = AppFileProvider.AUTHORITY,
|
||||||
|
exceptionHolder: ExceptionHolder? = null,
|
||||||
|
) = try {
|
||||||
true.also {
|
true.also {
|
||||||
Intent(Intent.ACTION_EDIT)
|
Intent(Intent.ACTION_EDIT)
|
||||||
.setDataAndType(
|
.setDataAndType(
|
||||||
@@ -173,6 +200,28 @@ object IntentUtils {
|
|||||||
.let { context.startActivity(it) }
|
.let { context.startActivity(it) }
|
||||||
}
|
}
|
||||||
} catch (e: ActivityNotFoundException) {
|
} catch (e: ActivityNotFoundException) {
|
||||||
|
exceptionHolder?.show(R.string.error_no_applications_available_for_editing_this_file)
|
||||||
|
false.also { e.printStackTrace() }
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
@JvmOverloads
|
||||||
|
fun sendFile(
|
||||||
|
context: Context,
|
||||||
|
path: String,
|
||||||
|
fileProviderAuthority: String = AppFileProvider.AUTHORITY,
|
||||||
|
exceptionHolder: ExceptionHolder? = null,
|
||||||
|
) = try {
|
||||||
|
true.also {
|
||||||
|
Intent(Intent.ACTION_SEND)
|
||||||
|
.setType("text/plain")
|
||||||
|
.putExtra(Intent.EXTRA_STREAM, getUriOfFile(context, path, fileProviderAuthority))
|
||||||
|
.let { Intent.createChooser(it, context.getString(R.string.text_send)) }
|
||||||
|
.apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) }
|
||||||
|
.let { context.startActivity(it) }
|
||||||
|
}
|
||||||
|
} catch (e: ActivityNotFoundException) {
|
||||||
|
exceptionHolder?.show(R.string.error_no_applications_available_for_sending_this_file)
|
||||||
false.also { e.printStackTrace() }
|
false.also { e.printStackTrace() }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,4 +233,61 @@ object IntentUtils {
|
|||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data class SnackExceptionHolder @JvmOverloads constructor(
|
||||||
|
private val view: View,
|
||||||
|
private val overriddenMessage: String? = null,
|
||||||
|
private val duration: Int = Snackbar.LENGTH_LONG,
|
||||||
|
) : ExceptionHolder {
|
||||||
|
|
||||||
|
@JvmOverloads
|
||||||
|
constructor(
|
||||||
|
view: View,
|
||||||
|
overriddenMessageRes: Int,
|
||||||
|
duration: Int = Snackbar.LENGTH_LONG,
|
||||||
|
) : this(
|
||||||
|
view = view,
|
||||||
|
overriddenMessage = view.context.getString(overriddenMessageRes),
|
||||||
|
duration = duration,
|
||||||
|
)
|
||||||
|
|
||||||
|
override fun show(message: String?) {
|
||||||
|
ViewUtils.showSnack(view, overriddenMessage ?: message ?: "Failed to start an activity", duration)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun show(messageRes: Int) {
|
||||||
|
show(view.context.getString(messageRes))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data class ToastExceptionHolder @JvmOverloads constructor(
|
||||||
|
private val context: Context,
|
||||||
|
private val overriddenMessage: String? = null,
|
||||||
|
private val isLong: Boolean = true,
|
||||||
|
) : ExceptionHolder {
|
||||||
|
|
||||||
|
@JvmOverloads
|
||||||
|
constructor(
|
||||||
|
context: Context,
|
||||||
|
overriddenMessageRes: Int,
|
||||||
|
isLong: Boolean = true,
|
||||||
|
) : this(
|
||||||
|
context = context,
|
||||||
|
overriddenMessage = context.getString(overriddenMessageRes),
|
||||||
|
isLong = isLong,
|
||||||
|
)
|
||||||
|
|
||||||
|
override fun show(message: String?) {
|
||||||
|
ViewUtils.showToast(context, overriddenMessage ?: message ?: "Failed to start an activity", isLong)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun show(messageRes: Int) {
|
||||||
|
show(context.getString(messageRes))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ExceptionHolder {
|
||||||
|
fun show(message: String? = null)
|
||||||
|
fun show(messageRes: Int)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1042,5 +1042,11 @@
|
|||||||
<string name="text_write_system_settings">كتابة إعدادات النظام</string>
|
<string name="text_write_system_settings">كتابة إعدادات النظام</string>
|
||||||
<string name="text_hide_node">إخفاء هذه العقدة</string>
|
<string name="text_hide_node">إخفاء هذه العقدة</string>
|
||||||
<string name="text_hide_same_frame_nodes">إخفاء العقدة ذات الإطار المماثل</string>
|
<string name="text_hide_same_frame_nodes">إخفاء العقدة ذات الإطار المماثل</string>
|
||||||
|
<string name="error_no_applications_available_for_editing_this_file">لا توجد تطبيقات متاحة لتحرير هذا الملف</string>
|
||||||
|
<string name="error_no_applications_available_for_browsing_this_link">لا توجد تطبيقات متاحة لاستعراض هذا الرابط</string>
|
||||||
|
<string name="error_no_applications_available_for_installing_this_file">لا توجد تطبيقات متاحة لتثبيت هذا الملف</string>
|
||||||
|
<string name="error_no_applications_available_for_viewing_this_file">لا توجد تطبيقات متاحة لعرض هذا الملف</string>
|
||||||
|
<string name="error_no_applications_available_for_sending_this_file">لا توجد تطبيقات متاحة لإرسال هذا الملف</string>
|
||||||
|
<string name="error_no_applications_available_for_playing_this_file">لا توجد تطبيقات متاحة لتشغيل هذا الملف</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1037,5 +1037,11 @@
|
|||||||
<string name="text_write_system_settings">Write system settings</string>
|
<string name="text_write_system_settings">Write system settings</string>
|
||||||
<string name="text_hide_node">Hide this node</string>
|
<string name="text_hide_node">Hide this node</string>
|
||||||
<string name="text_hide_same_frame_nodes">Hide same frame nodes</string>
|
<string name="text_hide_same_frame_nodes">Hide same frame nodes</string>
|
||||||
|
<string name="error_no_applications_available_for_editing_this_file">No applications available for editing this file</string>
|
||||||
|
<string name="error_no_applications_available_for_browsing_this_link">No applications available for browsing this link</string>
|
||||||
|
<string name="error_no_applications_available_for_installing_this_file">No applications available for installing this file</string>
|
||||||
|
<string name="error_no_applications_available_for_viewing_this_file">No applications available for viewing this file</string>
|
||||||
|
<string name="error_no_applications_available_for_sending_this_file">No applications available for sending this file</string>
|
||||||
|
<string name="error_no_applications_available_for_playing_this_file">No applications available for playing this file</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1040,5 +1040,11 @@
|
|||||||
<string name="text_write_system_settings">Escribir la configuración del sistema</string>
|
<string name="text_write_system_settings">Escribir la configuración del sistema</string>
|
||||||
<string name="text_hide_node">Ocultar este nodo</string>
|
<string name="text_hide_node">Ocultar este nodo</string>
|
||||||
<string name="text_hide_same_frame_nodes">Ocultar nodo del mismo marco</string>
|
<string name="text_hide_same_frame_nodes">Ocultar nodo del mismo marco</string>
|
||||||
|
<string name="error_no_applications_available_for_editing_this_file">No hay aplicaciones disponibles para editar este archivo</string>
|
||||||
|
<string name="error_no_applications_available_for_browsing_this_link">No hay aplicaciones disponibles para abrir este enlace</string>
|
||||||
|
<string name="error_no_applications_available_for_installing_this_file">No hay aplicaciones disponibles para instalar este archivo</string>
|
||||||
|
<string name="error_no_applications_available_for_viewing_this_file">No hay aplicaciones disponibles para ver este archivo</string>
|
||||||
|
<string name="error_no_applications_available_for_sending_this_file">No hay aplicaciones disponibles para enviar este archivo</string>
|
||||||
|
<string name="error_no_applications_available_for_playing_this_file">No hay aplicaciones disponibles para reproducir este archivo</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1040,5 +1040,11 @@
|
|||||||
<string name="text_write_system_settings">Écrire les paramètres système</string>
|
<string name="text_write_system_settings">Écrire les paramètres système</string>
|
||||||
<string name="text_hide_node">Masquer ce nœud</string>
|
<string name="text_hide_node">Masquer ce nœud</string>
|
||||||
<string name="text_hide_same_frame_nodes">Masquer le nœud du même cadre</string>
|
<string name="text_hide_same_frame_nodes">Masquer le nœud du même cadre</string>
|
||||||
|
<string name="error_no_applications_available_for_editing_this_file">Aucune application disponible pour modifier ce fichier</string>
|
||||||
|
<string name="error_no_applications_available_for_browsing_this_link">Aucune application disponible pour parcourir ce lien</string>
|
||||||
|
<string name="error_no_applications_available_for_installing_this_file">Aucune application disponible pour installer ce fichier</string>
|
||||||
|
<string name="error_no_applications_available_for_viewing_this_file">Aucune application disponible pour afficher ce fichier</string>
|
||||||
|
<string name="error_no_applications_available_for_sending_this_file">Aucune application disponible pour envoyer ce fichier</string>
|
||||||
|
<string name="error_no_applications_available_for_playing_this_file">Aucune application disponible pour lire ce fichier</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1041,5 +1041,11 @@
|
|||||||
<string name="text_write_system_settings">システム設定の書き込み</string>
|
<string name="text_write_system_settings">システム設定の書き込み</string>
|
||||||
<string name="text_hide_node">このノードを隠す</string>
|
<string name="text_hide_node">このノードを隠す</string>
|
||||||
<string name="text_hide_same_frame_nodes">同じフレームのノードを隠す</string>
|
<string name="text_hide_same_frame_nodes">同じフレームのノードを隠す</string>
|
||||||
|
<string name="error_no_applications_available_for_editing_this_file">このファイルを編集できるアプリがありません</string>
|
||||||
|
<string name="error_no_applications_available_for_browsing_this_link">このリンクを閲覧できるアプリがありません</string>
|
||||||
|
<string name="error_no_applications_available_for_installing_this_file">このファイルをインストールできるアプリがありません</string>
|
||||||
|
<string name="error_no_applications_available_for_viewing_this_file">このファイルを表示できるアプリがありません</string>
|
||||||
|
<string name="error_no_applications_available_for_sending_this_file">このファイルを送信できるアプリがありません</string>
|
||||||
|
<string name="error_no_applications_available_for_playing_this_file">このファイルを再生できるアプリがありません</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1042,5 +1042,11 @@
|
|||||||
<string name="text_write_system_settings">시스템 설정을 작성하십시오</string>
|
<string name="text_write_system_settings">시스템 설정을 작성하십시오</string>
|
||||||
<string name="text_hide_node">이 노드를 숨기기</string>
|
<string name="text_hide_node">이 노드를 숨기기</string>
|
||||||
<string name="text_hide_same_frame_nodes">동일 프레임의 노드를 숨기기</string>
|
<string name="text_hide_same_frame_nodes">동일 프레임의 노드를 숨기기</string>
|
||||||
|
<string name="error_no_applications_available_for_editing_this_file">이 파일을 편집할 수 있는 앱이 없습니다</string>
|
||||||
|
<string name="error_no_applications_available_for_browsing_this_link">이 링크를 탐색할 수 있는 앱이 없습니다</string>
|
||||||
|
<string name="error_no_applications_available_for_installing_this_file">이 파일을 설치할 수 있는 앱이 없습니다</string>
|
||||||
|
<string name="error_no_applications_available_for_viewing_this_file">이 파일을 볼 수 있는 앱이 없습니다</string>
|
||||||
|
<string name="error_no_applications_available_for_sending_this_file">이 파일을 전송할 수 있는 앱이 없습니다</string>
|
||||||
|
<string name="error_no_applications_available_for_playing_this_file">이 파일을 재생할 수 있는 앱이 없습니다</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1040,5 +1040,11 @@
|
|||||||
<string name="text_write_system_settings">Запись системных настроек</string>
|
<string name="text_write_system_settings">Запись системных настроек</string>
|
||||||
<string name="text_hide_node">Скрыть этот узел</string>
|
<string name="text_hide_node">Скрыть этот узел</string>
|
||||||
<string name="text_hide_same_frame_nodes">Скрыть узел того же фрейма</string>
|
<string name="text_hide_same_frame_nodes">Скрыть узел того же фрейма</string>
|
||||||
|
<string name="error_no_applications_available_for_editing_this_file">Нет приложений для редактирования этого файла</string>
|
||||||
|
<string name="error_no_applications_available_for_browsing_this_link">Нет приложений для просмотра этой ссылки</string>
|
||||||
|
<string name="error_no_applications_available_for_installing_this_file">Нет приложений для установки этого файла</string>
|
||||||
|
<string name="error_no_applications_available_for_viewing_this_file">Нет приложений для просмотра этого файла</string>
|
||||||
|
<string name="error_no_applications_available_for_sending_this_file">Нет приложений для отправки этого файла</string>
|
||||||
|
<string name="error_no_applications_available_for_playing_this_file">Нет приложений для воспроизведения этого файла</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1038,5 +1038,11 @@
|
|||||||
<string name="text_write_system_settings">修改系統設置</string>
|
<string name="text_write_system_settings">修改系統設置</string>
|
||||||
<string name="text_hide_node">隱藏此節點</string>
|
<string name="text_hide_node">隱藏此節點</string>
|
||||||
<string name="text_hide_same_frame_nodes">隱藏同框節點</string>
|
<string name="text_hide_same_frame_nodes">隱藏同框節點</string>
|
||||||
|
<string name="error_no_applications_available_for_editing_this_file">未找到用於編輯該文件的應用</string>
|
||||||
|
<string name="error_no_applications_available_for_browsing_this_link">未找到用於瀏覽該鏈接的應用</string>
|
||||||
|
<string name="error_no_applications_available_for_installing_this_file">未找到用於安裝該文件的應用</string>
|
||||||
|
<string name="error_no_applications_available_for_viewing_this_file">未找到用於查看該文件的應用</string>
|
||||||
|
<string name="error_no_applications_available_for_sending_this_file">未找到用於發送該文件的應用</string>
|
||||||
|
<string name="error_no_applications_available_for_playing_this_file">未找到用於播放該文件的應用</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1038,5 +1038,11 @@
|
|||||||
<string name="text_write_system_settings">修改系統設定</string>
|
<string name="text_write_system_settings">修改系統設定</string>
|
||||||
<string name="text_hide_node">隱藏此節點</string>
|
<string name="text_hide_node">隱藏此節點</string>
|
||||||
<string name="text_hide_same_frame_nodes">隱藏同框節點</string>
|
<string name="text_hide_same_frame_nodes">隱藏同框節點</string>
|
||||||
|
<string name="error_no_applications_available_for_editing_this_file">未找到用於編輯該檔案的應用</string>
|
||||||
|
<string name="error_no_applications_available_for_browsing_this_link">未找到用於瀏覽該連結的應用</string>
|
||||||
|
<string name="error_no_applications_available_for_installing_this_file">未找到用於安裝該檔案的應用</string>
|
||||||
|
<string name="error_no_applications_available_for_viewing_this_file">未找到用於檢視該檔案的應用</string>
|
||||||
|
<string name="error_no_applications_available_for_sending_this_file">未找到用於傳送該檔案的應用</string>
|
||||||
|
<string name="error_no_applications_available_for_playing_this_file">未找到用於播放該檔案的應用</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1038,5 +1038,11 @@
|
|||||||
<string name="text_write_system_settings">修改系统设置</string>
|
<string name="text_write_system_settings">修改系统设置</string>
|
||||||
<string name="text_hide_node">隐藏此节点</string>
|
<string name="text_hide_node">隐藏此节点</string>
|
||||||
<string name="text_hide_same_frame_nodes">隐藏同框节点</string>
|
<string name="text_hide_same_frame_nodes">隐藏同框节点</string>
|
||||||
|
<string name="error_no_applications_available_for_editing_this_file">未找到用于编辑该文件的应用</string>
|
||||||
|
<string name="error_no_applications_available_for_browsing_this_link">未找到用于浏览该链接的应用</string>
|
||||||
|
<string name="error_no_applications_available_for_installing_this_file">未找到用于安装该文件的应用</string>
|
||||||
|
<string name="error_no_applications_available_for_viewing_this_file">未找到用于查看该文件的应用</string>
|
||||||
|
<string name="error_no_applications_available_for_sending_this_file">未找到用于发送该文件的应用</string>
|
||||||
|
<string name="error_no_applications_available_for_playing_this_file">未找到用于播放该文件的应用</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1268,5 +1268,11 @@
|
|||||||
<string name="text_write_system_settings">Write system settings</string>
|
<string name="text_write_system_settings">Write system settings</string>
|
||||||
<string name="text_hide_node">Hide this node</string>
|
<string name="text_hide_node">Hide this node</string>
|
||||||
<string name="text_hide_same_frame_nodes">Hide same frame nodes</string>
|
<string name="text_hide_same_frame_nodes">Hide same frame nodes</string>
|
||||||
|
<string name="error_no_applications_available_for_editing_this_file">No applications available for editing this file</string>
|
||||||
|
<string name="error_no_applications_available_for_browsing_this_link">No applications available for browsing this link</string>
|
||||||
|
<string name="error_no_applications_available_for_installing_this_file">No applications available for installing this file</string>
|
||||||
|
<string name="error_no_applications_available_for_viewing_this_file">No applications available for viewing this file</string>
|
||||||
|
<string name="error_no_applications_available_for_sending_this_file">No applications available for sending this file</string>
|
||||||
|
<string name="error_no_applications_available_for_playing_this_file">No applications available for playing this file</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#Wed May 14 23:13:52 CST 2025
|
#Thu May 15 15:32:42 CST 2025
|
||||||
BUILD_TIME=1747235632440
|
BUILD_TIME=1747294362850
|
||||||
COMPILE_SDK_VERSION=35
|
COMPILE_SDK_VERSION=35
|
||||||
JAVA_VERSION=24
|
JAVA_VERSION=24
|
||||||
JAVA_VERSION_MIN_RADICAL=0
|
JAVA_VERSION_MIN_RADICAL=0
|
||||||
@@ -17,6 +17,6 @@ RAPID_OCR_OPENCV_MOBILE_LABEL_VERSION=13
|
|||||||
RAPID_OCR_OPENCV_MOBILE_VERSION=4.5.3
|
RAPID_OCR_OPENCV_MOBILE_VERSION=4.5.3
|
||||||
TARGET_SDK_VERSION=35
|
TARGET_SDK_VERSION=35
|
||||||
TARGET_SDK_VERSION_INRT=29
|
TARGET_SDK_VERSION_INRT=29
|
||||||
VERSION_BUILD=3220
|
VERSION_BUILD=3223
|
||||||
VERSION_NAME=6.6.3 Alpha4
|
VERSION_NAME=6.6.3 Alpha4
|
||||||
VSCODE_EXT_REQUIRED_VERSION=1.0.8
|
VSCODE_EXT_REQUIRED_VERSION=1.0.8
|
||||||
|
|||||||
Reference in New Issue
Block a user