app更新

This commit is contained in:
flowerstonezl
2026-01-20 17:24:15 +08:00
parent 182520f858
commit adc8f0569a
829 changed files with 421 additions and 78849 deletions

View File

@@ -1,2 +0,0 @@
#Mon Jan 19 13:51:26 CST 2026
gradle.version=9.0-milestone-1

View File

@@ -1,2 +0,0 @@
#Mon Jan 19 13:52:42 CST 2026
java.home=D\:\\app\\android studio\\studio\\jbr

View File

@@ -1,3 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml

View File

@@ -1 +0,0 @@
SkyLink

View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AndroidProjectSystem">
<option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
</component>
</project>

View File

@@ -1,123 +0,0 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<JetCodeStyleSettings>
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings>
<codeStyleSettings language="XML">
<option name="FORCE_REARRANGE_MODE" value="1" />
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>ANDROID_ATTRIBUTE_ORDER</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
<codeStyleSettings language="kotlin">
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</codeStyleSettings>
</code_scheme>
</component>

View File

@@ -1,5 +0,0 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>

View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="21" />
</component>
</project>

View File

@@ -1,18 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetSelector">
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2026-01-19T06:23:10.188259200Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="PhysicalDevice" identifier="serial=6fa5a382" />
</handle>
</Target>
</DropdownSelection>
<DialogSelection />
</SelectionState>
</selectionStates>
</component>
</project>

View File

@@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DeviceTable">
<option name="columnSorters">
<list>
<ColumnSorterState>
<option name="column" value="Name" />
<option name="order" value="ASCENDING" />
</ColumnSorterState>
</list>
</option>
</component>
</project>

View File

@@ -1,19 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="CHOOSE_PER_TEST" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>

View File

@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectMigrations">
<option name="MigrateToGradleLocalJavaHome">
<set>
<option value="$PROJECT_DIR$" />
</set>
</option>
</component>
</project>

View File

@@ -1,9 +0,0 @@
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>

View File

@@ -1,43 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="navEditor-manualLayoutAlgorithm2">
<option name="myPositions">
<map>
<entry key="nav_graph.xml">
<value>
<LayoutPositions>
<option name="myPositions">
<map>
<entry key="homeFragment">
<value>
<LayoutPositions>
<option name="myPosition">
<Point>
<option name="x" value="12" />
<option name="y" value="12" />
</Point>
</option>
</LayoutPositions>
</value>
</entry>
<entry key="settingsFragment">
<value>
<LayoutPositions>
<option name="myPosition">
<Point>
<option name="x" value="256" />
<option name="y" value="12" />
</Point>
</option>
</LayoutPositions>
</value>
</entry>
</map>
</option>
</LayoutPositions>
</value>
</entry>
</map>
</option>
</component>
</project>

View File

@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" />
<option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" />
<option value="com.intellij.execution.junit.PatternConfigurationProducer" />
<option value="com.intellij.execution.junit.TestInClassConfigurationProducer" />
<option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" />
<option value="com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinJUnitRunConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinPatternConfigurationProducer" />
</set>
</option>
</component>
</project>

View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>

View File

@@ -1,310 +0,0 @@
# ✅ 项目完成清单
## 📦 所有新增/修改文件一览
### 🔵 Kotlin 源代码文件 (3 个)
**app/src/main/java/com/skylink/app/ui/HomeFragment.kt**
- 首页 Fragment显示视频、GPS、统计信息
- 175 行代码
- 地址: `d:\code\skyLink\skylink_android_app\app\src\main\java\com\skylink\app\ui\HomeFragment.kt`
**app/src/main/java/com/skylink/app/ui/SettingsFragment.kt**
- 设置 Fragment包含 Ping 诊断工具
- 220 行代码
- 地址: `d:\code\skyLink\skylink_android_app\app\src\main\java\com\skylink\app\ui\SettingsFragment.kt`
**app/src/main/java/com/skylink/app/utils/PingUtil.kt**
- 网络诊断工具类
- 130 行代码
- 地址: `d:\code\skyLink\skylink_android_app\app\src\main\java\com\skylink\app\utils\PingUtil.kt`
### 🔵 XML 布局文件 (2 个)
**app/src/main/res/layout/fragment_home.xml**
- 首页 Fragment 的布局文件
- 地址: `d:\code\skyLink\skylink_android_app\app\src\main\res\layout\fragment_home.xml`
**app/src/main/res/layout/fragment_settings.xml**
- 设置页面的布局文件(包含 Ping 诊断 UI
- 200 行 XML
- 地址: `d:\code\skyLink\skylink_android_app\app\src\main\res\layout\fragment_settings.xml`
### 🔵 Navigation 配置 (1 个)
**app/src/main/res/navigation/nav_graph.xml**
- Navigation 图表,定义 Fragment 路由
- 地址: `d:\code\skyLink\skylink_android_app\app\src\main\res\navigation\nav_graph.xml`
### 🔵 菜单定义 (2 个)
**app/src/main/res/menu/bottom_nav_menu.xml**
- 底部导航菜单(首页、设置)
- 地址: `d:\code\skyLink\skylink_android_app\app\src\main\res\menu\bottom_nav_menu.xml`
**app/src/main/res/menu/activity_main_menu.xml**
- 顶部菜单(设置选项)
- 地址: `d:\code\skyLink\skylink_android_app\app\src\main\res\menu\activity_main_menu.xml`
### 🔵 样式和资源 (2 个)
**app/src/main/res/drawable/settings_result_bg.xml**
- Ping 结果显示区的背景样式
- 地址: `d:\code\skyLink\skylink_android_app\app\src\main\res\drawable\settings_result_bg.xml`
**app/src/main/res/color/bottom_nav_color.xml**
- 底部导航栏颜色状态定义
- 地址: `d:\code\skyLink\skylink_android_app\app\src\main\res\color\bottom_nav_color.xml`
### 🟠 修改的现有文件 (3 个)
**app/build.gradle.kts**
- 添加 Navigation、Fragment 依赖
- 变更: 添加 3 个新的 implementation 依赖
- 地址: `d:\code\skyLink\skylink_android_app\app\build.gradle.kts`
**app/src/main/java/com/skylink/app/MainActivity.kt**
- 重构为 Navigation 容器
- 变更: 完全重写,从 Activity 改为 Navigation 管理器
- 地址: `d:\code\skyLink\skylink_android_app\app\src\main\java\com\skylink\app\MainActivity.kt`
**app/src/main/res/layout/activity_main.xml**
- 改为 Navigation 布局结构
- 变更: 添加 NavHostFragment 和 BottomNavigationView
- 地址: `d:\code\skyLink\skylink_android_app\app\src\main\res\layout\activity_main.xml`
### 🔵 文档文件 (7 个)
**QUICK_START.md** ⭐ 推荐首先阅读
- 5 分钟快速开始指南
- ~10 页
- 地址: `d:\code\skyLink\skylink_android_app\QUICK_START.md`
**BUILD_AND_RUN.md**
- 构建和运行详细指南
- ~12 页
- 地址: `d:\code\skyLink\skylink_android_app\BUILD_AND_RUN.md`
**NAVIGATION_SETTINGS_GUIDE.md**
- 详细功能说明和 API 参考
- ~15 页
- 地址: `d:\code\skyLink\skylink_android_app\NAVIGATION_SETTINGS_GUIDE.md`
**IMPLEMENTATION_SUMMARY.md**
- 实现总结和技术细节
- ~16 页
- 地址: `d:\code\skyLink\skylink_android_app\IMPLEMENTATION_SUMMARY.md`
**FILE_MANIFEST.md**
- 完整文件清单和索引
- ~14 页
- 地址: `d:\code\skyLink\skylink_android_app\FILE_MANIFEST.md`
**FINAL_REPORT.md**
- 项目完成报告
- ~18 页
- 地址: `d:\code\skyLink\skylink_android_app\FINAL_REPORT.md`
**INDEX.md** 🗺️ 文档导航
- 文档索引和导航指南
- ~8 页
- 地址: `d:\code\skyLink\skylink_android_app\INDEX.md`
### 🔵 项目总结文件 (2 个)
**PROJECT_COMPLETION_SUMMARY.md**
- 项目完成总结
- 地址: `d:\code\skyLink\skylink_android_app\PROJECT_COMPLETION_SUMMARY.md`
**ANDROID_APP_UPDATE.md** (在主项目目录)
- Android 应用更新说明
- 地址: `d:\code\skyLink\ANDROID_APP_UPDATE.md`
---
## 📊 统计数据
### 代码统计
| 类型 | 数量 | 行数 |
|------|------|------|
| Kotlin 文件 | 3 | 525 |
| XML 布局 | 2 | 280 |
| XML 配置 | 7 | 80 |
| **总代码** | **12** | **~900** |
### 文档统计
| 类型 | 数量 | 页数 | 字数 |
|------|------|------|------|
| 功能指南 | 7 | ~90 | ~8000 |
| **总文档** | **7** | **~90** | **~8000** |
### 文件总计
| 类别 | 数量 |
|------|------|
| 新增 Kotlin | 3 |
| 新增 XML | 9 |
| 新增文档 | 9 |
| 修改现有 | 3 |
| **总计** | **24** |
---
## 🎯 快速检查表
### ✅ 功能实现
- [x] Navigation 导航系统
- [x] 首页 Fragment
- [x] 设置 Fragment
- [x] 网络 Ping 工具
- [x] 单个 Ping 功能
- [x] 批量 Ping 功能
- [x] 结果显示
- [x] UI 布局
### ✅ 技术实现
- [x] Coroutines 异步处理
- [x] Fragment 管理
- [x] Navigation 框架
- [x] Material Design
- [x] 异常处理
- [x] 内存管理
### ✅ 文档完整性
- [x] 快速开始指南
- [x] 详细功能说明
- [x] 构建运行指南
- [x] API 参考文档
- [x] 实现总结报告
- [x] 文件清单索引
- [x] 项目完成报告
- [x] 文档导航索引
### ✅ 质量保证
- [x] 代码规范
- [x] 无编译错误
- [x] 无运行异常
- [x] 功能测试完成
- [x] 文档完整
### ✅ 交付准备
- [x] 所有文件创建
- [x] 所有文件修改
- [x] 所有文档编写
- [x] 所有测试完成
- [x] 可投入使用
---
## 📂 文件位置快速导航
### Kotlin 源代码
```
d:\code\skyLink\skylink_android_app\app\src\main\java\com\skylink\app\
├── ui\HomeFragment.kt
├── ui\SettingsFragment.kt
└── utils\PingUtil.kt
```
### XML 布局和配置
```
d:\code\skyLink\skylink_android_app\app\src\main\res\
├── layout\
│ ├── fragment_home.xml
│ └── fragment_settings.xml
├── navigation\
│ └── nav_graph.xml
├── menu\
│ ├── bottom_nav_menu.xml
│ └── activity_main_menu.xml
├── drawable\
│ └── settings_result_bg.xml
└── color\
└── bottom_nav_color.xml
```
### 文档
```
d:\code\skyLink\skylink_android_app\
├── QUICK_START.md ⭐
├── BUILD_AND_RUN.md
├── NAVIGATION_SETTINGS_GUIDE.md
├── IMPLEMENTATION_SUMMARY.md
├── FILE_MANIFEST.md
├── FINAL_REPORT.md
├── INDEX.md 🗺️
└── PROJECT_COMPLETION_SUMMARY.md
```
---
## 🚀 下一步操作
### 立即使用
1. 👉 打开 Android Studio
2. 👉 打开项目:`d:\code\skyLink\skylink_android_app`
3. 👉 点击 Sync Now
4. 👉 连接设备或启动模拟器
5. 👉 点击 Run
### 学习文档
1. 👉 从 `QUICK_START.md` 开始
2. 👉 查看 `INDEX.md` 了解所有文档
3. 👉 根据需要阅读其他文档
### 探索代码
1. 👉 查看 `HomeFragment.kt`
2. 👉 查看 `SettingsFragment.kt`
3. 👉 查看 `PingUtil.kt`
4. 👉 查看 `nav_graph.xml`
---
## 📞 帮助资源
### 快速问题查阅
| 问题 | 查看文档 |
|------|---------|
| 如何快速上手? | QUICK_START.md |
| 如何构建应用? | BUILD_AND_RUN.md |
| Ping 如何使用? | NAVIGATION_SETTINGS_GUIDE.md |
| 文件在哪里? | FILE_MANIFEST.md |
| 如何故障排查? | BUILD_AND_RUN.md |
| 文档有哪些? | INDEX.md |
---
## ✨ 项目成就
| 项 | 成果 |
|----|------|
| 功能完成度 | ✅ 100% |
| 代码质量 | ✅ 优秀 |
| 文档完整度 | ✅ 100% |
| 测试覆盖 | ✅ 完整 |
| 生产就绪 | ✅ 完全就绪 |
---
## 🎊 完成信息
| 项 | 信息 |
|----|------|
| 项目完成日期 | 2026-01-19 |
| 版本号 | 1.1.0 |
| 开发状态 | ✅ 完成 |
| 测试状态 | ✅ 全部通过 |
| 文档状态 | ✅ 完整 |
| 交付状态 | ✅ 完全就绪 |
---
**所有文件均已创建和配置完成。**
**应用已可投入生产使用。** 🚀
**祝您使用愉快!** 🎉
---
*最后更新: 2026-01-19*
*项目状态: 完全就绪*

View File

@@ -1,81 +0,0 @@
// Generated by view binder compiler. Do not edit!
package com.skylink.app.databinding;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentContainerView;
import androidx.viewbinding.ViewBinding;
import androidx.viewbinding.ViewBindings;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.skylink.app.R;
import java.lang.NullPointerException;
import java.lang.Override;
import java.lang.String;
public final class ActivityMainBinding implements ViewBinding {
@NonNull
private final LinearLayout rootView;
@NonNull
public final BottomNavigationView bottomNavigation;
@NonNull
public final FragmentContainerView navHostFragment;
private ActivityMainBinding(@NonNull LinearLayout rootView,
@NonNull BottomNavigationView bottomNavigation,
@NonNull FragmentContainerView navHostFragment) {
this.rootView = rootView;
this.bottomNavigation = bottomNavigation;
this.navHostFragment = navHostFragment;
}
@Override
@NonNull
public LinearLayout getRoot() {
return rootView;
}
@NonNull
public static ActivityMainBinding inflate(@NonNull LayoutInflater inflater) {
return inflate(inflater, null, false);
}
@NonNull
public static ActivityMainBinding inflate(@NonNull LayoutInflater inflater,
@Nullable ViewGroup parent, boolean attachToParent) {
View root = inflater.inflate(R.layout.activity_main, parent, false);
if (attachToParent) {
parent.addView(root);
}
return bind(root);
}
@NonNull
public static ActivityMainBinding bind(@NonNull View rootView) {
// The body of this method is generated in a way you would not otherwise write.
// This is done to optimize the compiled bytecode for size and performance.
int id;
missingId: {
id = R.id.bottom_navigation;
BottomNavigationView bottomNavigation = ViewBindings.findChildViewById(rootView, id);
if (bottomNavigation == null) {
break missingId;
}
id = R.id.nav_host_fragment;
FragmentContainerView navHostFragment = ViewBindings.findChildViewById(rootView, id);
if (navHostFragment == null) {
break missingId;
}
return new ActivityMainBinding((LinearLayout) rootView, bottomNavigation, navHostFragment);
}
String missingId = rootView.getResources().getResourceName(id);
throw new NullPointerException("Missing required view with ID: ".concat(missingId));
}
}

View File

@@ -1,123 +0,0 @@
// Generated by view binder compiler. Do not edit!
package com.skylink.app.databinding;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewbinding.ViewBinding;
import androidx.viewbinding.ViewBindings;
import com.skylink.app.R;
import java.lang.NullPointerException;
import java.lang.Override;
import java.lang.String;
public final class FragmentHomeBinding implements ViewBinding {
@NonNull
private final LinearLayout rootView;
@NonNull
public final TextView gpsText;
@NonNull
public final Button recordButton;
@NonNull
public final Button saveButton;
@NonNull
public final TextView statsText;
@NonNull
public final TextView statusText;
@NonNull
public final ImageView videoImage;
private FragmentHomeBinding(@NonNull LinearLayout rootView, @NonNull TextView gpsText,
@NonNull Button recordButton, @NonNull Button saveButton, @NonNull TextView statsText,
@NonNull TextView statusText, @NonNull ImageView videoImage) {
this.rootView = rootView;
this.gpsText = gpsText;
this.recordButton = recordButton;
this.saveButton = saveButton;
this.statsText = statsText;
this.statusText = statusText;
this.videoImage = videoImage;
}
@Override
@NonNull
public LinearLayout getRoot() {
return rootView;
}
@NonNull
public static FragmentHomeBinding inflate(@NonNull LayoutInflater inflater) {
return inflate(inflater, null, false);
}
@NonNull
public static FragmentHomeBinding inflate(@NonNull LayoutInflater inflater,
@Nullable ViewGroup parent, boolean attachToParent) {
View root = inflater.inflate(R.layout.fragment_home, parent, false);
if (attachToParent) {
parent.addView(root);
}
return bind(root);
}
@NonNull
public static FragmentHomeBinding bind(@NonNull View rootView) {
// The body of this method is generated in a way you would not otherwise write.
// This is done to optimize the compiled bytecode for size and performance.
int id;
missingId: {
id = R.id.gps_text;
TextView gpsText = ViewBindings.findChildViewById(rootView, id);
if (gpsText == null) {
break missingId;
}
id = R.id.record_button;
Button recordButton = ViewBindings.findChildViewById(rootView, id);
if (recordButton == null) {
break missingId;
}
id = R.id.save_button;
Button saveButton = ViewBindings.findChildViewById(rootView, id);
if (saveButton == null) {
break missingId;
}
id = R.id.stats_text;
TextView statsText = ViewBindings.findChildViewById(rootView, id);
if (statsText == null) {
break missingId;
}
id = R.id.status_text;
TextView statusText = ViewBindings.findChildViewById(rootView, id);
if (statusText == null) {
break missingId;
}
id = R.id.video_image;
ImageView videoImage = ViewBindings.findChildViewById(rootView, id);
if (videoImage == null) {
break missingId;
}
return new FragmentHomeBinding((LinearLayout) rootView, gpsText, recordButton, saveButton,
statsText, statusText, videoImage);
}
String missingId = rootView.getResources().getResourceName(id);
throw new NullPointerException("Missing required view with ID: ".concat(missingId));
}
}

View File

@@ -1,158 +0,0 @@
// Generated by view binder compiler. Do not edit!
package com.skylink.app.databinding;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.ScrollView;
import android.widget.Spinner;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewbinding.ViewBinding;
import androidx.viewbinding.ViewBindings;
import com.skylink.app.R;
import java.lang.NullPointerException;
import java.lang.Override;
import java.lang.String;
public final class FragmentSettingsBinding implements ViewBinding {
@NonNull
private final ScrollView rootView;
@NonNull
public final Button clearButton;
@NonNull
public final EditText hostInput;
@NonNull
public final Button multiplePingButton;
@NonNull
public final Spinner pingCountSpinner;
@NonNull
public final ProgressBar pingProgress;
@NonNull
public final TextView resultText;
@NonNull
public final Button singlePingButton;
@NonNull
public final Spinner timeoutSpinner;
@NonNull
public final EditText udpPortInput;
private FragmentSettingsBinding(@NonNull ScrollView rootView, @NonNull Button clearButton,
@NonNull EditText hostInput, @NonNull Button multiplePingButton,
@NonNull Spinner pingCountSpinner, @NonNull ProgressBar pingProgress,
@NonNull TextView resultText, @NonNull Button singlePingButton,
@NonNull Spinner timeoutSpinner, @NonNull EditText udpPortInput) {
this.rootView = rootView;
this.clearButton = clearButton;
this.hostInput = hostInput;
this.multiplePingButton = multiplePingButton;
this.pingCountSpinner = pingCountSpinner;
this.pingProgress = pingProgress;
this.resultText = resultText;
this.singlePingButton = singlePingButton;
this.timeoutSpinner = timeoutSpinner;
this.udpPortInput = udpPortInput;
}
@Override
@NonNull
public ScrollView getRoot() {
return rootView;
}
@NonNull
public static FragmentSettingsBinding inflate(@NonNull LayoutInflater inflater) {
return inflate(inflater, null, false);
}
@NonNull
public static FragmentSettingsBinding inflate(@NonNull LayoutInflater inflater,
@Nullable ViewGroup parent, boolean attachToParent) {
View root = inflater.inflate(R.layout.fragment_settings, parent, false);
if (attachToParent) {
parent.addView(root);
}
return bind(root);
}
@NonNull
public static FragmentSettingsBinding bind(@NonNull View rootView) {
// The body of this method is generated in a way you would not otherwise write.
// This is done to optimize the compiled bytecode for size and performance.
int id;
missingId: {
id = R.id.clear_button;
Button clearButton = ViewBindings.findChildViewById(rootView, id);
if (clearButton == null) {
break missingId;
}
id = R.id.host_input;
EditText hostInput = ViewBindings.findChildViewById(rootView, id);
if (hostInput == null) {
break missingId;
}
id = R.id.multiple_ping_button;
Button multiplePingButton = ViewBindings.findChildViewById(rootView, id);
if (multiplePingButton == null) {
break missingId;
}
id = R.id.ping_count_spinner;
Spinner pingCountSpinner = ViewBindings.findChildViewById(rootView, id);
if (pingCountSpinner == null) {
break missingId;
}
id = R.id.ping_progress;
ProgressBar pingProgress = ViewBindings.findChildViewById(rootView, id);
if (pingProgress == null) {
break missingId;
}
id = R.id.result_text;
TextView resultText = ViewBindings.findChildViewById(rootView, id);
if (resultText == null) {
break missingId;
}
id = R.id.single_ping_button;
Button singlePingButton = ViewBindings.findChildViewById(rootView, id);
if (singlePingButton == null) {
break missingId;
}
id = R.id.timeout_spinner;
Spinner timeoutSpinner = ViewBindings.findChildViewById(rootView, id);
if (timeoutSpinner == null) {
break missingId;
}
id = R.id.udp_port_input;
EditText udpPortInput = ViewBindings.findChildViewById(rootView, id);
if (udpPortInput == null) {
break missingId;
}
return new FragmentSettingsBinding((ScrollView) rootView, clearButton, hostInput,
multiplePingButton, pingCountSpinner, pingProgress, resultText, singlePingButton,
timeoutSpinner, udpPortInput);
}
String missingId = rootView.getResources().getResourceName(id);
throw new NullPointerException("Missing required view with ID: ".concat(missingId));
}
}

View File

@@ -1,20 +0,0 @@
{
"version": 3,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "com.skylink.app",
"variantName": "debug",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 1,
"versionName": "1.0.0",
"outputFile": "app-debug.apk"
}
],
"elementType": "File"
}

View File

@@ -1,2 +0,0 @@
#- File Locator -
listingFile=../../apk/debug/output-metadata.json

View File

@@ -1,2 +0,0 @@
appMetadataVersion=1.1
androidGradlePluginVersion=8.2.0

View File

@@ -1,10 +0,0 @@
{
"version": 3,
"artifactType": {
"type": "COMPATIBLE_SCREEN_MANIFEST",
"kind": "Directory"
},
"applicationId": "com.skylink.app",
"variantName": "debug",
"elements": []
}

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_main" modulePackage="com.skylink.app" filePath="app\src\main\res\layout\activity_main.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.LinearLayout"><Targets><Target tag="layout/activity_main_0" view="LinearLayout"><Expressions/><location startLine="1" startOffset="0" endLine="34" endOffset="14"/></Target><Target id="@+id/nav_host_fragment" view="androidx.fragment.app.FragmentContainerView"><Expressions/><location startLine="15" startOffset="8" endLine="21" endOffset="50"/></Target><Target id="@+id/bottom_navigation" view="com.google.android.material.bottomnavigation.BottomNavigationView"><Expressions/><location startLine="25" startOffset="4" endLine="32" endOffset="42"/></Target></Targets></Layout>

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="fragment_home" modulePackage="com.skylink.app" filePath="app\src\main\res\layout\fragment_home.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.LinearLayout"><Targets><Target tag="layout/fragment_home_0" view="LinearLayout"><Expressions/><location startLine="1" startOffset="0" endLine="74" endOffset="14"/></Target><Target id="@+id/status_text" view="TextView"><Expressions/><location startLine="10" startOffset="4" endLine="17" endOffset="43"/></Target><Target id="@+id/video_image" view="ImageView"><Expressions/><location startLine="20" startOffset="4" endLine="27" endOffset="55"/></Target><Target id="@+id/gps_text" view="TextView"><Expressions/><location startLine="30" startOffset="4" endLine="37" endOffset="43"/></Target><Target id="@+id/stats_text" view="TextView"><Expressions/><location startLine="40" startOffset="4" endLine="46" endOffset="43"/></Target><Target id="@+id/save_button" view="Button"><Expressions/><location startLine="56" startOffset="8" endLine="62" endOffset="43"/></Target><Target id="@+id/record_button" view="Button"><Expressions/><location startLine="64" startOffset="8" endLine="70" endOffset="45"/></Target></Targets></Layout>

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="fragment_settings" modulePackage="com.skylink.app" filePath="app\src\main\res\layout\fragment_settings.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.ScrollView"><Targets><Target tag="layout/fragment_settings_0" view="ScrollView"><Expressions/><location startLine="1" startOffset="0" endLine="213" endOffset="12"/></Target><Target id="@+id/udp_port_input" view="EditText"><Expressions/><location startLine="38" startOffset="12" endLine="45" endOffset="75"/></Target><Target id="@+id/host_input" view="EditText"><Expressions/><location startLine="79" startOffset="12" endLine="86" endOffset="75"/></Target><Target id="@+id/ping_count_spinner" view="Spinner"><Expressions/><location startLine="103" startOffset="12" endLine="107" endOffset="75"/></Target><Target id="@+id/timeout_spinner" view="Spinner"><Expressions/><location startLine="124" startOffset="12" endLine="128" endOffset="75"/></Target><Target id="@+id/single_ping_button" view="Button"><Expressions/><location startLine="140" startOffset="12" endLine="147" endOffset="73"/></Target><Target id="@+id/multiple_ping_button" view="Button"><Expressions/><location startLine="149" startOffset="12" endLine="156" endOffset="74"/></Target><Target id="@+id/ping_progress" view="ProgressBar"><Expressions/><location startLine="160" startOffset="8" endLine="165" endOffset="42"/></Target><Target id="@+id/clear_button" view="Button"><Expressions/><location startLine="191" startOffset="16" endLine="197" endOffset="43"/></Target><Target id="@+id/result_text" view="TextView"><Expressions/><location startLine="200" startOffset="12" endLine="208" endOffset="53"/></Target></Targets></Layout>

Some files were not shown because too many files have changed in this diff Show More