Skip to content

Commit e89f035

Browse files
committed
3.0.3 (50)
* 自动抢课界面更新。 * 自动抢课支持主动申请后台权限(停止电池优化、发送通知)。 * 修复通知权限无法申请的问题(用于自动抢课功能)。 * 升级构建工具版本(compile 33->34, build tools 31.0.0->34.0.0, target sdk 33->34)。 * 缩小 app logo 体积,降低空间占用约 200K。
1 parent 07dbc38 commit e89f035

10 files changed

Lines changed: 108 additions & 514 deletions

File tree

app/build.gradle

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ plugins {
44
}
55

66
android {
7-
compileSdk 33
8-
buildToolsVersion '31.0.0'
7+
compileSdk 34
8+
buildToolsVersion '34.0.0'
99

1010
defaultConfig {
1111
applicationId "com.gardilily.onedottongji"
1212
minSdkVersion 29
13-
targetSdkVersion 33
14-
versionCode 49
15-
versionName "3.0.2"
13+
targetSdkVersion 34
14+
versionCode 50
15+
versionName "3.0.3"
1616

1717
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1818
}

app/src/main/AndroidManifest.xml

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
33

4+
<uses-permission android:name="android.permission.INTERNET" />
5+
6+
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
7+
<uses-permission android:name="android.permission.WAKE_LOCK" />
8+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
9+
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
10+
411
<application
512
android:name=".OneTJApplication"
613
android:allowBackup="true"
@@ -60,7 +67,7 @@
6067
android:theme="@style/Theme.OneDotTongjiRefresh.func.LocalAttachments"/>
6168

6269
<activity android:name=".activity.func.autocourseelect.AutoCourseElect"
63-
android:theme="@style/Theme.OneDotTongjiRefresh.func.AutoCourseElect" />
70+
android:theme="@style/Theme.OneTJ.Base" />
6471

6572
<activity android:name=".activity.func.CetScore"
6673
android:theme="@style/Theme.OneTJ.Base" />
@@ -75,12 +82,4 @@
7582
<service android:name=".service.BackgroundAutoCourseElect" />
7683
</application>
7784

78-
<uses-permission android:name="android.permission.INTERNET" />
79-
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
80-
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
81-
82-
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
83-
<uses-permission android:name="android.permission.WAKE_LOCK" />
84-
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
85-
8685
</manifest>

app/src/main/java/com/gardilily/onedottongji/activity/Home.kt

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,24 @@
22
package com.gardilily.onedottongji.activity
33

44
import android.app.AlertDialog
5-
import android.content.ClipData
6-
import android.content.ClipboardManager
7-
import android.content.Context
85
import android.content.Intent
9-
import android.content.res.XmlResourceParser
106
import android.graphics.Bitmap
117
import android.graphics.BitmapFactory
12-
import android.graphics.Canvas
13-
import android.graphics.drawable.Drawable
14-
import android.graphics.drawable.VectorDrawable
158
import android.os.Build
169
import android.os.Bundle
1710
import android.text.TextUtils
18-
import android.util.Log
1911
import android.view.animation.AlphaAnimation
2012
import android.view.animation.DecelerateInterpolator
21-
import android.widget.AutoCompleteTextView
2213
import android.widget.FrameLayout
2314
import android.widget.ImageView
2415
import android.widget.LinearLayout
2516
import android.widget.RelativeLayout
2617
import android.widget.TextView
2718
import android.widget.Toast
2819
import androidx.core.view.setMargins
29-
import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat
30-
import com.caverock.androidsvg.SVG
3120
import com.caverock.androidsvg.SVGImageView
3221
import com.gardilily.onedottongji.R
3322
import com.gardilily.onedottongji.activity.func.CetScore
34-
import com.gardilily.onedottongji.activity.func.LocalAttachments
3523
import com.gardilily.onedottongji.activity.func.MyGrades
3624
import com.gardilily.onedottongji.activity.func.SportsTestData
3725
import com.gardilily.onedottongji.activity.func.StuExamEnquiries
@@ -41,24 +29,13 @@ import com.gardilily.onedottongji.activity.func.studenttimetable.SingleDay
4129
import com.gardilily.onedottongji.activity.func.studenttimetable.TermComplete
4230
import com.gardilily.onedottongji.tools.GarCloudApi
4331
import com.gardilily.onedottongji.tools.MacroDefines
44-
import com.gardilily.onedottongji.tools.Utils
45-
import com.gardilily.onedottongji.tools.Utils.Companion.REQ_RES_CHECK_NOTI_LEVEL_ALERTDIALOG
46-
import com.gardilily.onedottongji.tools.Utils.Companion.REQ_RES_CHECK_NOTI_LEVEL_TOAST
47-
import com.gardilily.onedottongji.tools.Utils.Companion.isNotReqResCorrect
48-
import com.gardilily.onedottongji.tools.Utils.Companion.isReqSessionAvailable
4932
import com.gardilily.onedottongji.tools.tongjiapi.TongjiApi
5033
import com.gardilily.onedottongji.view.FuncCardShelf
51-
import com.gardilily.onedottongji.view.HomeMsgPublishCard
5234
import com.google.android.material.card.MaterialCardView
53-
import com.google.android.material.textfield.MaterialAutoCompleteTextView
54-
import com.google.android.material.textfield.TextInputLayout
5535
import kotlinx.coroutines.runBlocking
5636
import kotlinx.coroutines.sync.Semaphore
57-
import okhttp3.FormBody
58-
import okhttp3.MediaType.Companion.toMediaType
5937
import okhttp3.OkHttpClient
6038
import okhttp3.Request
61-
import okhttp3.RequestBody.Companion.toRequestBody
6239
import okhttp3.Response
6340
import org.json.JSONObject
6441
import java.net.URLDecoder

app/src/main/java/com/gardilily/onedottongji/activity/func/autocourseelect/AutoCourseElect.kt

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,24 @@
11
// SPDX-License-Identifier: MulanPSL-2.0
22
package com.gardilily.onedottongji.activity.func.autocourseelect
33

4+
import android.Manifest
45
import android.app.Activity
56
import android.app.AlertDialog
7+
import android.content.Context
68
import android.content.Intent
9+
import android.content.SharedPreferences
710
import android.graphics.Color
11+
import android.net.Uri
12+
import android.os.Build
813
import android.os.Bundle
14+
import android.os.PowerManager
15+
import android.provider.Settings
916
import android.util.Log
1017
import android.widget.*
18+
import androidx.core.content.getSystemService
1119
import com.gardilily.common.view.card.InfoCard
1220
import com.gardilily.onedottongji.R
21+
import com.gardilily.onedottongji.activity.OneTJActivityBase
1322
import com.gardilily.onedottongji.activity.WebViewUniLogin
1423
import com.gardilily.onedottongji.service.BackgroundAutoCourseElect
1524
import com.gardilily.onedottongji.tools.MacroDefines
@@ -27,7 +36,10 @@ import kotlin.concurrent.thread
2736
* + sessionid
2837
* + studentId 学号
2938
*/
30-
class AutoCourseElect : Activity() {
39+
class AutoCourseElect : OneTJActivityBase(
40+
hasTitleBar = true,
41+
backOnTitleBar = true
42+
) {
3143

3244
companion object {
3345
const val INTENT_PARAM_SERVICE_CONTROL_ACTION = "__1"
@@ -37,6 +49,7 @@ class AutoCourseElect : Activity() {
3749
}
3850

3951
private lateinit var linearLayout: LinearLayout
52+
private lateinit var sp: SharedPreferences
4053

4154
private var roundId = ""
4255
private var calendarId = 0
@@ -50,11 +63,73 @@ class AutoCourseElect : Activity() {
5063
setContentView(R.layout.activity_autocourseelect)
5164
linearLayout = findViewById(R.id.func_autoCourseElect_linearLayout)
5265

66+
sp = getSharedPreferences("onetj.autocourseelect", MODE_PRIVATE)
67+
5368
uniHttpClient = OkHttpClient()
5469

70+
requestPermissions()
71+
72+
title = "自动抢课"
73+
5574
startActivityForResult(Intent(this, WebViewUniLogin::class.java), MacroDefines.UNILOGIN_WEBVIEW_FOR_1SESSIONID)
5675
}
5776

77+
// https://github.com/FlowerBlackG/FakeRun/blob/master/app/src/main/java/com/fakerun/fakerun/activity/Auth.kt
78+
private fun isIgnoringBatteryOptimizations() : Boolean {
79+
var isIgnoring = false
80+
val powerManager = getSystemService<PowerManager>()
81+
if (powerManager != null) {
82+
isIgnoring = powerManager.isIgnoringBatteryOptimizations(packageName)
83+
}
84+
Log.d("Auth.isIgnoringBatteryOptimizations", "res=" + if (isIgnoring) "true" else "false")
85+
return isIgnoring
86+
}
87+
88+
private fun requestIgnoreBatteryOptimizations() {
89+
try {
90+
val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)
91+
intent.data = Uri.parse("package:$packageName")
92+
startActivity(intent)
93+
} catch (e: Exception) {
94+
95+
}
96+
}
97+
98+
private fun requestPermissions() {
99+
if (!isIgnoringBatteryOptimizations()) {
100+
requestIgnoreBatteryOptimizations()
101+
}
102+
103+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
104+
105+
fun requirePostNotificationPermission() = requestPermissions(arrayOf(
106+
Manifest.permission.POST_NOTIFICATIONS
107+
), 0)
108+
109+
val POST_MSG_FIRED_KEY = "___post msg request fired"
110+
111+
if ( ! sp.getBoolean(POST_MSG_FIRED_KEY, false)) {
112+
113+
// 发送通知权限。
114+
AlertDialog.Builder(this)
115+
.setTitle("通知权限")
116+
.setMessage("抢课需要在后台运行。安卓系统后台需要通知权限。请给我权限~~")
117+
.setCancelable(false)
118+
.setPositiveButton("好的") { dialog, which ->
119+
requirePostNotificationPermission()
120+
sp.edit().putBoolean(POST_MSG_FIRED_KEY, true).apply()
121+
}
122+
.show()
123+
124+
} else {
125+
126+
requirePostNotificationPermission()
127+
128+
}
129+
130+
}
131+
}
132+
58133
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
59134
super.onActivityResult(requestCode, resultCode, data)
60135

0 commit comments

Comments
 (0)