浏览代码

2025-07-28 修改

1. AGP更新至 8.11.1
2. Gradle 更新至 8.14.3
3. 项目构建设置语言全面适配Kotlin DSL
zhaiy 5 天之前
父节点
当前提交
d12d043c87

+ 2 - 2
.idea/deploymentTargetSelector.xml

@@ -4,10 +4,10 @@
     <selectionStates>
       <SelectionState runConfigName="app">
         <option name="selectionMode" value="DROPDOWN" />
-        <DropdownSelection timestamp="2025-05-29T08:53:25.402554900Z">
+        <DropdownSelection timestamp="2025-07-24T06:58:17.773225800Z">
           <Target type="DEFAULT_BOOT">
             <handle>
-              <DeviceId pluginId="PhysicalDevice" identifier="serial=3bb3c424" />
+              <DeviceId pluginId="Default" identifier="serial=127.0.0.1:16384;connection=1cb7ce77" />
             </handle>
           </Target>
         </DropdownSelection>

+ 0 - 3
.idea/gradle.xml

@@ -10,12 +10,9 @@
         <option name="modules">
           <set>
             <option value="$PROJECT_DIR$" />
-            <option value="$PROJECT_DIR$/MPChartLib" />
-            <option value="$PROJECT_DIR$/Matisse-master" />
             <option value="$PROJECT_DIR$/app" />
           </set>
         </option>
-        <option name="resolveExternalAnnotations" value="false" />
       </GradleProjectSettings>
     </option>
   </component>

+ 0 - 1
.idea/misc.xml

@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="EntryPointsManager">
     <list size="2">

+ 0 - 118
app/build.gradle

@@ -1,118 +0,0 @@
-plugins {
-    id 'com.android.application'
-    id 'org.jetbrains.kotlin.android'
-}
-
-android {
-    namespace 'com.pan_american.android'
-    //noinspection GradleDependency
-    compileSdk 34
-
-    buildFeatures {
-        viewBinding true
-    }
-
-    defaultConfig {
-        applicationId "com.pan_american.android"
-        minSdk 24
-        //noinspection OldTargetApi
-        targetSdk 34
-        versionCode 11
-        versionName "1.0.10"
-
-        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
-    }
-
-    signingConfigs {
-
-        release {
-            storeFile file('Pan-American KeyStore.jks')
-            storePassword('PanAmerican')
-            keyAlias('Pan-American')
-            keyPassword('PanAmerican')
-        }
-    }
-
-    buildTypes {
-        release {
-            //启用代码混淆
-//            minifyEnabled true
-            // 启用资源压缩
-//            shrinkResources true
-            //混淆规则配置文件
-            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
-
-            signingConfig signingConfigs.release
-        }
-
-    }
-
-    compileOptions {
-        sourceCompatibility JavaVersion.VERSION_17
-        targetCompatibility JavaVersion.VERSION_17
-    }
-
-    kotlinOptions {
-        jvmTarget = "17"
-    }
-
-    sourceSets {
-        main{
-            jniLibs.srcDirs = ['libs']
-        }
-    }
-}
-
-dependencies {
-
-    implementation fileTree(dir: 'libs', include: ['*.jar'])
-
-    implementation 'com.android.tools:r8:8.7.18'
-
-    implementation 'androidx.core:core-ktx:1.13.1'
-    implementation 'androidx.appcompat:appcompat:1.7.0'
-    implementation 'com.google.android.material:material:1.10.0'
-
-    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
-    implementation 'androidx.recyclerview:recyclerview:1.3.1'
-    implementation 'androidx.activity:activity:1.9.0'
-
-    testImplementation 'junit:junit:4.13.2'
-
-    androidTestImplementation 'androidx.test.ext:junit:1.2.1'
-    androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
-
-    //底部导航栏实现
-    implementation 'androidx.viewpager2:viewpager2:1.0.0'
-    implementation 'androidx.recyclerview:recyclerview:1.3.1'
-
-    //日历组件
-    implementation 'com.haibin:calendarview:3.7.1'
-
-    //Retrofit2
-    implementation 'com.squareup.retrofit2:retrofit:2.11.0'
-    implementation 'com.squareup.retrofit2:converter-gson:2.11.0'
-
-    //SmartRefreshLayout
-    implementation 'io.github.scwang90:refresh-layout-kernel:2.1.0'
-    implementation  'io.github.scwang90:refresh-header-classics:2.1.0'    //经典刷新头
-    implementation  'io.github.scwang90:refresh-footer-classics:2.1.0'    //经典加载
-
-    //EventBus
-    implementation 'org.greenrobot:eventbus:3.3.1'
-
-    //SignalR
-    implementation 'com.microsoft.signalr:signalr:6.0.1'
-
-    //表格组件
-    implementation 'com.github.huangyanbin:SmartTable:2.2.0'
-
-    //扇形图组件
-    implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
-
-    //url/uri 图片展示组件
-    implementation 'com.squareup.picasso:picasso:2.8'
-
-    //图片选择框架
-    implementation 'io.github.leavesczy:matisse:2.1.0'
-}

+ 84 - 0
app/build.gradle.kts

@@ -0,0 +1,84 @@
+plugins {
+    alias(libs.plugins.android.application)
+    alias(libs.plugins.kotlin.android)
+}
+
+android {
+    namespace = "com.pan_american.android"
+    compileSdk = 36
+
+    buildFeatures {
+        viewBinding = true
+    }
+
+    defaultConfig {
+        applicationId = "com.pan_american.android"
+        minSdk = 26
+        targetSdk = 36
+        versionCode = 12
+        versionName = "1.0.11"
+
+        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+    }
+
+    buildTypes {
+        release {
+            isMinifyEnabled = false
+            proguardFiles(
+                    getDefaultProguardFile("proguard-android-optimize.txt"),
+                    "proguard-rules.pro"
+            )
+        }
+    }
+
+    compileOptions {
+        sourceCompatibility = JavaVersion.VERSION_17
+        targetCompatibility = JavaVersion.VERSION_17
+    }
+
+    kotlin {
+        compilerOptions {
+            jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17)
+        }
+    }
+}
+
+dependencies {
+
+    implementation(libs.androidx.core.ktx)
+    implementation(libs.androidx.appcompat)
+    implementation(libs.material)
+    implementation(libs.androidx.activity)
+    implementation(libs.androidx.constraintlayout)
+    implementation(libs.androidx.recyclerview)
+    testImplementation(libs.junit)
+    androidTestImplementation(libs.androidx.junit)
+    androidTestImplementation(libs.androidx.espresso.core)
+
+    //底部导航栏实现
+    implementation(libs.androidx.viewpager2)
+
+    //Retrofit2
+    implementation(libs.bundles.retrofit2)
+
+    //SmartRefreshLayout
+    implementation(libs.bundles.smartRefreshLayout)
+
+    //EventBus
+    implementation(libs.eventbus)
+
+    //SignalR
+    implementation(libs.signalr)
+
+    //表格组件
+    implementation(libs.smartTable)
+
+    //扇形图组件
+    implementation(libs.mpAndroidChart)
+
+    //url&uri 图片展示组件
+    implementation(libs.picasso)
+
+    //图片选择框架
+    implementation(libs.matisse)
+}

+ 1 - 1
app/proguard-rules.pro

@@ -1,6 +1,6 @@
 # Add project specific ProGuard rules here.
 # You can control the set of applied configuration files using the
-# proguardFiles setting in build.gradle.
+# proguardFiles setting in build.gradle.kts
 #
 # For more details, see
 #   http://developer.android.com/guide/developing/tools/proguard.html

+ 0 - 29
app/src/main/java/com/pan_american/android/ui/efficiency_tools/itinerary/AddItineraryActivity.kt

@@ -1,29 +0,0 @@
-package com.pan_american.android.ui.efficiency_tools.itinerary
-
-import android.os.Bundle
-import com.pan_american.android.R
-import com.pan_american.android.base.BaseActivity
-import com.pan_american.android.databinding.ActivityAddItineraryBinding
-import com.pan_american.android.databinding.LayoutTitleBinding
-
-class AddItineraryActivity : BaseActivity<ActivityAddItineraryBinding>() {
-
-    private lateinit var titleBinding: LayoutTitleBinding
-
-    override fun getViewBinding() = ActivityAddItineraryBinding.inflate(layoutInflater)
-
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-
-        initTitle()
-    }
-
-    override fun initTitle() {
-        titleBinding = LayoutTitleBinding.bind(binding.root).apply {
-            titleText.text = resources.getString(R.string.add_itinerary)
-            backButton.setOnClickListener {
-                back()
-            }
-        }
-    }
-}

+ 0 - 111
app/src/main/java/com/pan_american/android/ui/efficiency_tools/itinerary/ItineraryActivity.kt

@@ -1,111 +0,0 @@
-package com.pan_american.android.ui.efficiency_tools.itinerary
-
-import android.content.Intent
-import android.os.Bundle
-import android.view.View
-import android.widget.TextView
-import com.haibin.calendarview.Calendar
-import com.haibin.calendarview.CalendarView
-import com.pan_american.android.OASystem
-import com.pan_american.android.R
-import com.pan_american.android.base.BaseActivity
-import com.pan_american.android.databinding.ActivityItineraryBinding
-import com.pan_american.android.databinding.LayoutTitleBinding
-
-class ItineraryActivity : BaseActivity<ActivityItineraryBinding>(),
-    CalendarView.OnCalendarSelectListener, CalendarView.OnYearChangeListener,
-    CalendarView.OnMonthChangeListener {
-
-    private lateinit var titleBinding: LayoutTitleBinding
-
-    //日历组件
-    private lateinit var itineraryCalendar: CalendarView
-
-    //日历组件 年月显示
-    private lateinit var yearMonthText: TextView
-
-    //日历组件 年月日
-    private var year: Int = 0
-    private var month: Int = 0
-    private var day: Int = 0
-
-    //日程标题
-    private lateinit var itineraryListTitle: TextView
-
-    override fun getViewBinding() = ActivityItineraryBinding.inflate(layoutInflater)
-
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-        screenAdaptation(binding)
-
-        initCalendar()
-        initTitle()
-        initViews()
-    }
-
-    override fun initTitle() {
-        titleBinding = LayoutTitleBinding.bind(binding.root).apply {
-            titleText.text = resources.getString(R.string.itinerary)
-
-            if (OASystem.authorization(OASystem.ITINERARY, OASystem.ADD)) {
-                addButton.apply {
-                    visibility = View.VISIBLE
-                    setOnClickListener {
-                        val intent = Intent(OASystem.context, AddItineraryActivity::class.java)
-                        startActivity(intent)
-                    }
-                }
-            }
-
-            backButton.setOnClickListener {
-                back()
-            }
-        }
-    }
-
-    override fun initViews() {
-        //日程日期显示
-        itineraryListTitle = binding.itineraryListTitle
-        itineraryListTitle.text = String.format(resources.getString(R.string.today), month, day)
-    }
-
-    private fun initCalendar() {
-        itineraryCalendar = binding.itineraryCalendar
-        yearMonthText = binding.yearMonthText
-
-        year = itineraryCalendar.curYear
-        month = itineraryCalendar.curMonth
-        day = itineraryCalendar.curDay
-
-        yearMonthText.text = String.format(resources.getString(R.string.year_month), year, month)
-
-        itineraryCalendar.setOnYearChangeListener(this)
-        itineraryCalendar.setOnMonthChangeListener(this)
-        itineraryCalendar.setOnCalendarSelectListener(this)
-    }
-
-    override fun onYearChange(year: Int) {
-        this.year = year
-        yearMonthText.text = String.format(resources.getString(R.string.year_month), year, month)
-    }
-
-    override fun onMonthChange(year: Int, month: Int) {
-        this.month = month
-        yearMonthText.text = String.format(resources.getString(R.string.year_month), year, month)
-    }
-
-    override fun onCalendarOutOfRange(calendar: Calendar?) {
-
-    }
-
-    override fun onCalendarSelect(calendar: Calendar?, isClick: Boolean) {
-        if (calendar != null) {
-            if (calendar.month == itineraryCalendar.curMonth && calendar.day == itineraryCalendar.curDay) {
-                itineraryListTitle.text =
-                    String.format(resources.getString(R.string.today), calendar.month, calendar.day)
-            } else {
-                itineraryListTitle.text = String.format(resources.getString(R.string.month_day), calendar.month, calendar.day)
-            }
-        }
-    }
-}

+ 0 - 6
app/src/main/java/com/pan_american/android/ui/workspace/WorkspaceFragment.kt

@@ -21,7 +21,6 @@ import com.pan_american.android.ui.customer_resource.market_sales_revenue.Market
 import com.pan_american.android.ui.customer_resource.related_invitee.RelatedInviteeActivity
 import com.pan_american.android.ui.efficiency_tools.address_book.AddressBookActivity
 import com.pan_american.android.ui.efficiency_tools.exchange_tool.ExchangeToolActivity
-import com.pan_american.android.ui.efficiency_tools.itinerary.ItineraryActivity
 import com.pan_american.android.ui.efficiency_tools.require_gather.RequireGatherActivity
 import com.pan_american.android.ui.financial_module.accounts_receivable_report.AccountsReceivableReportActivity
 import com.pan_american.android.ui.financial_module.collection_bill.CollectionBillActivity
@@ -395,11 +394,6 @@ class WorkspaceFragment : BaseFragment<FragmentWorkspaceBinding>(), OnClickListe
                 startActivity(intent)
             }
 
-            binding.itinerary.id -> {
-                val intent = Intent(OASystem.context, ItineraryActivity::class.java)
-                startActivity(intent)
-            }
-
             binding.dailyPayment.id -> {
                 val intent = Intent(OASystem.context, DailyPaymentListActivity::class.java)
                 startActivity(intent)

+ 0 - 235
app/src/main/res/layout/activity_add_itinerary.xml

@@ -1,235 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/background_color"
-    android:orientation="vertical">
-
-    <include
-        layout="@layout/layout_title"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content" />
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="60dp"
-        android:background="@color/white"
-        android:gravity="center_vertical"
-        android:orientation="vertical">
-
-        <EditText
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/common_padding_huge"
-            android:layout_marginEnd="@dimen/common_padding_huge"
-            android:background="@null"
-            android:hint="@string/itinerary_title_input_hint"
-            android:importantForAutofill="no"
-            android:inputType="text"
-            android:textColorHint="@color/hint_text_color"
-            android:textSize="@dimen/text_size_large" />
-
-    </LinearLayout>
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="@dimen/common_padding"
-        android:background="@color/white"
-        android:orientation="vertical">
-
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/common_padding_huge"
-            android:layout_marginTop="@dimen/common_padding"
-            android:layout_marginEnd="@dimen/common_padding_huge">
-
-            <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:gravity="center"
-                android:text="@string/start_time"
-                android:textSize="@dimen/text_size_medium"
-                android:textStyle="bold" />
-
-            <TextView
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:gravity="end"
-                android:hint="@string/please_select"
-                android:textColorHint="@color/hint_text_color"
-                android:textSize="@dimen/text_size_medium" />
-
-        </LinearLayout>
-
-        <View
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/line"
-            android:layout_marginStart="@dimen/common_padding_huge"
-            android:layout_marginTop="@dimen/common_padding"
-            android:layout_marginEnd="@dimen/common_padding_huge"
-            android:background="@color/background_color" />
-
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/common_padding_huge"
-            android:layout_marginTop="@dimen/common_padding"
-            android:layout_marginEnd="@dimen/common_padding_huge">
-
-            <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:text="@string/duration"
-                android:textSize="@dimen/text_size_medium"
-                android:textStyle="bold" />
-
-            <TextView
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:gravity="end"
-                android:text="@string/duration_select_hint"
-                android:textSize="@dimen/text_size_medium" />
-
-        </LinearLayout>
-
-        <View
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/line"
-            android:layout_marginStart="@dimen/common_padding_huge"
-            android:layout_marginTop="@dimen/common_padding"
-            android:layout_marginEnd="@dimen/common_padding_huge"
-            android:background="@color/background_color" />
-
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/common_padding_huge"
-            android:layout_marginTop="@dimen/common_padding"
-            android:layout_marginEnd="@dimen/common_padding_huge"
-            android:orientation="horizontal">
-
-            <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:text="@string/itinerary_location"
-                android:textSize="@dimen/text_size_medium"
-                android:textStyle="bold" />
-
-            <EditText
-                android:layout_width="0dp"
-                android:layout_height="match_parent"
-                android:layout_marginStart="@dimen/common_padding"
-                android:layout_weight="1"
-                android:background="@color/white"
-                android:gravity="end"
-                android:hint="@string/itinerary_add_location"
-                android:importantForAutofill="no"
-                android:inputType="text"
-                android:textColor="@color/hint_text_color"
-                android:textSize="@dimen/text_size_medium" />
-
-        </LinearLayout>
-
-        <View
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/line"
-            android:layout_marginStart="@dimen/common_padding_huge"
-            android:layout_marginTop="@dimen/common_padding"
-            android:layout_marginEnd="@dimen/common_padding_huge"
-            android:background="@color/background_color" />
-
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/common_padding_huge"
-            android:layout_marginTop="@dimen/common_padding"
-            android:layout_marginEnd="@dimen/common_padding_huge"
-            android:orientation="horizontal"
-            tools:ignore="UseCompoundDrawables">
-
-            <TextView
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:text="@string/itinerary_add_member"
-                android:textSize="@dimen/text_size_medium"
-                android:textStyle="bold" />
-
-            <ImageView
-                android:layout_width="@dimen/common_padding_heavy"
-                android:layout_height="@dimen/common_padding_heavy"
-                android:src="@mipmap/icon_add_members"
-                tools:ignore="ContentDescription" />
-
-        </LinearLayout>
-
-        <View
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/line"
-            android:layout_marginStart="@dimen/common_padding_huge"
-            android:layout_marginTop="@dimen/common_padding"
-            android:layout_marginEnd="@dimen/common_padding_huge"
-            android:background="@color/background_color" />
-
-    </LinearLayout>
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_marginTop="@dimen/common_padding"
-        android:layout_weight="1"
-        android:background="@color/white"
-        android:orientation="vertical">
-
-        <TextView
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/common_padding_huge"
-            android:layout_marginTop="@dimen/common_padding"
-            android:layout_marginEnd="@dimen/common_padding_huge"
-            android:text="@string/itinerary_description"
-            android:textSize="@dimen/text_size_medium"
-            android:textStyle="bold" />
-
-        <com.pan_american.android.util.ScrollEditText
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:layout_marginStart="@dimen/common_padding_huge"
-            android:layout_marginTop="@dimen/common_padding"
-            android:layout_marginEnd="@dimen/common_padding_huge"
-            android:layout_marginBottom="@dimen/common_padding"
-            android:background="@drawable/shape_large_edit_text_background"
-            android:scrollbars="none"
-            android:textSize="@dimen/text_size_medium" />
-
-    </LinearLayout>
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:background="@color/white"
-        android:orientation="horizontal">
-
-        <TextView
-            android:id="@+id/login"
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/button_height"
-            android:layout_marginStart="@dimen/common_padding_huge"
-            android:layout_marginTop="@dimen/common_padding_huge"
-            android:layout_marginEnd="@dimen/common_padding_huge"
-            android:layout_marginBottom="50dp"
-            android:background="@drawable/shape_corner_solid_blue"
-            android:gravity="center"
-            android:text="@string/save_itinerary"
-            android:textColor="@color/white"
-            android:textSize="@dimen/text_size_large"
-            android:textStyle="bold" />
-
-    </LinearLayout>
-
-</LinearLayout>

+ 0 - 66
app/src/main/res/layout/activity_itinerary.xml

@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/white"
-    android:orientation="vertical">
-
-    <include
-        layout="@layout/layout_title"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content" />
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1"
-        android:background="@color/white"
-        android:orientation="vertical">
-
-        <TextView
-            android:id="@+id/year_month_text"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_margin="@dimen/common_padding"
-            android:gravity="center"
-            android:textAlignment="center"
-            android:textSize="@dimen/text_size_medium" />
-
-        <com.haibin.calendarview.CalendarView
-            android:id="@+id/itinerary_calendar"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/common_padding"
-            android:layout_marginEnd="@dimen/common_padding"
-            app:scheme_lunar_text_color="@color/white"
-            app:select_mode="single_mode"
-            app:selected_lunar_text_color="@color/white"
-            app:selected_text_color="@color/white"
-            app:selected_theme_color="@color/title_background_color" />
-
-        <View
-            android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:layout_marginStart="@dimen/common_padding"
-            android:layout_marginTop="@dimen/common_padding"
-            android:layout_marginEnd="@dimen/common_padding"
-            android:background="@color/line_color" />
-
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:orientation="vertical">
-
-            <TextView
-                android:id="@+id/itinerary_list_title"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_margin="@dimen/common_padding"
-                android:textSize="@dimen/text_size_medium" />
-
-        </LinearLayout>
-
-    </LinearLayout>
-
-</LinearLayout>

+ 0 - 6
build.gradle

@@ -1,6 +0,0 @@
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
-plugins {
-    id 'com.android.application' version '8.4.2' apply false
-    id 'com.android.library' version '8.4.2' apply false
-    id 'org.jetbrains.kotlin.android' version '2.0.0' apply false
-}

+ 5 - 0
build.gradle.kts

@@ -0,0 +1,5 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+plugins {
+    alias(libs.plugins.android.application) apply false
+    alias(libs.plugins.kotlin.android) apply false
+}

+ 2 - 2
gradle.properties

@@ -22,5 +22,5 @@ kotlin.code.style=official
 # thereby reducing the size of the R class for that library
 android.nonTransitiveRClass=true
 # use jcenter
-android.enableJetifier=true
-org.gradle.unsafe.configuration-cache=true
+#android.enableJetifier=true
+#org.gradle.unsafe.configuration-cache=true

+ 61 - 0
gradle/libs.versions.toml

@@ -0,0 +1,61 @@
+[versions]
+agp = "8.11.1"
+kotlin = "2.2.0"
+coreKtx = "1.15.0"
+junit = "4.13.2"
+junitVersion = "1.2.1"
+espressoCore = "3.6.1"
+appcompat = "1.7.0"
+material = "1.12.0"
+activity = "1.10.1"
+constraintlayout = "2.1.4"
+recyclerview = "1.3.1"
+viewpager2 = "1.0.0"
+
+retrofit2 = "3.0.0"
+smartRefreshLayout = "2.1.1"
+eventbus = "3.3.1"
+signalr = "9.0.7"
+smartTable = "2.2.0"
+mpAndroidChart = "v3.1.0"
+picasso = "2.71828"
+matisse = "2.2.0"
+
+[libraries]
+androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
+junit = { group = "junit", name = "junit", version.ref = "junit" }
+androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
+androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
+androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
+material = { group = "com.google.android.material", name = "material", version.ref = "material" }
+androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "activity" }
+androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" }
+androidx-recyclerview = { group = "androidx.recyclerview", name = "recyclerview", version.ref = "recyclerview" }
+androidx-viewpager2 = { group = "androidx.viewpager2", name = "viewpager2", version.ref = "viewpager2" }
+
+retrofit2 = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit2" }
+retrofit2-converter-gson = { group = "com.squareup.retrofit2", name = "converter-gson", version.ref = "retrofit2" }
+
+smartRefreshLayout = { group = "io.github.scwang90", name = "refresh-layout-kernel", version.ref = "smartRefreshLayout" }
+smartRefresh-header = { group = "io.github.scwang90", name = "refresh-header-classics", version.ref = "smartRefreshLayout" }
+smartRefresh-footer = { group = "io.github.scwang90", name = "refresh-footer-classics", version.ref = "smartRefreshLayout" }
+
+eventbus = { group = "org.greenrobot", name = "eventbus", version.ref = "eventbus" }
+
+signalr = { group = "com.microsoft.signalr", name = "signalr", version.ref = "signalr" }
+
+smartTable = { group = "com.github.huangyanbin", name = "SmartTable", version.ref = "smartTable" }
+
+mpAndroidChart = { group = "com.github.PhilJay", name = "MPAndroidChart", version.ref = "mpAndroidChart" }
+
+picasso = { group = "com.squareup.picasso", name = "picasso", version.ref = "picasso" }
+
+matisse = { group = "io.github.leavesczy", name = "matisse", version.ref = "matisse" }
+
+[bundles]
+retrofit2 = ["retrofit2", "retrofit2-converter-gson"]
+smartRefreshLayout = ["smartRefreshLayout", "smartRefresh-header", "smartRefresh-footer"]
+
+[plugins]
+android-application = { id = "com.android.application", version.ref = "agp" }
+kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }

+ 1 - 1
gradle/wrapper/gradle-wrapper.properties

@@ -1,6 +1,6 @@
 #Tue Jun 10 16:01:51 CST 2025
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists

+ 0 - 34
settings.gradle

@@ -1,34 +0,0 @@
-pluginManagement {
-    repositories {
-        google()
-        //noinspection JcenterRepositoryObsolete
-        jcenter()
-        mavenCentral()
-        gradlePluginPortal()
-        maven { url 'https://jitpack.io' }
-        maven { url 'https://maven.aliyun.com/repository/releases' }
-        maven { url 'https://maven.aliyun.com/repository/google' }
-        maven { url 'https://maven.aliyun.com/repository/central' }
-        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
-        maven { url 'https://maven.aliyun.com/repository/public' }
-    }
-}
-dependencyResolutionManagement {
-    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
-    repositories {
-        google()
-        //noinspection JcenterRepositoryObsolete
-        jcenter()
-        mavenCentral()
-        maven { url 'https://jitpack.io'}
-        maven { url 'https://maven.aliyun.com/repository/releases'}
-        maven { url 'https://maven.aliyun.com/repository/google' }
-        maven { url 'https://maven.aliyun.com/repository/central' }
-        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
-        maven { url 'https://maven.aliyun.com/repository/public' }
-    }
-}
-rootProject.name = "OASystem"
-include ':app'
-include ':MPChartLib'
-include ':Matisse-master'

+ 28 - 0
settings.gradle.kts

@@ -0,0 +1,28 @@
+@file:Suppress("UnstableApiUsage")
+pluginManagement {
+    repositories {
+        google {
+            content {
+                includeGroupByRegex("com\\.android.*")
+                includeGroupByRegex("com\\.google.*")
+                includeGroupByRegex("androidx.*")
+            }
+        }
+        mavenCentral()
+        gradlePluginPortal()
+
+        maven { url = uri("https://jitpack.io") }
+    }
+}
+dependencyResolutionManagement {
+    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+    repositories {
+        google()
+        mavenCentral()
+
+        maven { url = uri("https://jitpack.io") }
+    }
+}
+
+rootProject.name = "OASystem"
+include(":app")