Skip to content

Commit 5fe3cca

Browse files
committed
Add a tip for old android 12 users
1 parent fc324dd commit 5fe3cca

File tree

10 files changed

+212
-34
lines changed

10 files changed

+212
-34
lines changed

app-base/src/main/res/values-zh-rCN/strings.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
<string name="deselect">取消选择</string>
3131
<string name="share">分享</string>
3232
<string name="dismiss">关闭</string>
33+
<string name="grant">授权</string>
3334

3435
<!--App actions-->
3536
<string name="start">开始</string>
@@ -691,7 +692,10 @@
691692

692693
<string name="intro_location">你可以在“帮助与反馈”中找到该使用教程。</string>
693694

694-
<string name="missed_timer_desp"><b>计时器被非正常地停止了!</b>\n\n这很有可能是系统杀掉了在后台的应用。<b>为了解决该问题,请考虑将本应用在系统设置中白名单。</b></string>
695+
<string name="tip_missed_timer"><b>计时器被非正常地停止了!</b>\n\n这很有可能是系统杀掉了在后台的应用。<b>为了解决该问题,请考虑将本应用在系统设置中白名单。</b></string>
696+
697+
<string name="tip_android_12_phone_calls">当手机在通话时暂停计时器现需要\"获取手机信息\"的权限</string>
698+
<string name="tip_android_12_battery">Tasker支持现需要\"忽略电池优化\"的权限</string>
695699

696700
<!--Updates-->
697701
<string name="update_title">更新内容</string>

app-base/src/main/res/values-zh-rHK/strings.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
<string name="deselect">取消選擇</string>
3131
<string name="share">分享</string>
3232
<string name="dismiss">關閉</string>
33+
<string name="grant">授權</string>
3334

3435
<!--App actions-->
3536
<string name="start">開始</string>
@@ -691,7 +692,10 @@
691692

692693
<string name="intro_location">你可以在“幫助與反饋”中找到該使用教程。</string>
693694

694-
<string name="missed_timer_desp"><b>計時器被非正常地停止了!</b>\n\n這很有可能是系統殺掉了在後臺的應用。<b>爲了解決該問題,請考慮將本應用在系統設置中白名單。</b></string>
695+
<string name="tip_missed_timer"><b>計時器被非正常地停止了!</b>\n\n這很有可能是系統殺掉了在後臺的應用。<b>爲了解決該問題,請考慮將本應用在系統設置中白名單。</b></string>
696+
697+
<string name="tip_android_12_phone_calls">當手機在通話時暫停計時器現需要\"獲取手機信息\"的權限</string>
698+
<string name="tip_android_12_battery">Tasker支持現需要\"忽略電池優化\"的權限</string>
695699

696700
<!--Updates-->
697701
<string name="update_title">更新內容</string>

app-base/src/main/res/values-zh-rTW/strings.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
<string name="deselect">取消選擇</string>
3131
<string name="share">分享</string>
3232
<string name="dismiss">關閉</string>
33+
<string name="grant">授權</string>
3334

3435
<!--App actions-->
3536
<string name="start">開始</string>
@@ -691,7 +692,10 @@
691692

692693
<string name="intro_location">你可以在“幫助與反饋”中找到該使用教程。</string>
693694

694-
<string name="missed_timer_desp"><b>計時器被非正常地停止了!</b>\n\n這很有可能是系統殺掉了在後臺的應用。<b>為了解決該問題,請考慮將本應用在系統設定中白名單。</b></string>
695+
<string name="tip_missed_timer"><b>計時器被非正常地停止了!</b>\n\n這很有可能是系統殺掉了在後臺的應用。<b>為了解決該問題,請考慮將本應用在系統設定中白名單。</b></string>
696+
697+
<string name="tip_android_12_phone_calls">當手機在通話時暫停計時器現需要\"獲取手機資訊\"的許可權</string>
698+
<string name="tip_android_12_battery">Tasker支援現需要\"忽略電池最佳化\"的許可權</string>
695699

696700
<!--Updates-->
697701
<string name="update_title">更新內容</string>

app-base/src/main/res/values/strings.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
<string name="deselect">Deselect</string>
3131
<string name="share">Share</string>
3232
<string name="dismiss">Dismiss</string>
33+
<string name="grant">Grant</string>
3334

3435
<!--App actions-->
3536
<string name="start">Start</string>
@@ -811,7 +812,10 @@
811812

812813
<string name="intro_location">You can find the tutorial in \"Help &amp; Feedback.\"</string>
813814

814-
<string name="missed_timer_desp"><b>Some timers are stopped abnormally!</b>\n\nIt is probably because the system kills the app in the background. <b>To resolve this problem, please consider whitelisting this app in system settings.</b></string>
815+
<string name="tip_missed_timer"><b>Some timers are stopped abnormally!</b>\n\nIt is probably because the system kills the app in the background. <b>To resolve this problem, please consider whitelisting this app in system settings.</b></string>
816+
817+
<string name="tip_android_12_phone_calls">Pausing on phone calls now requires \"Read phone status\" permission</string>
818+
<string name="tip_android_12_battery">Tasker support now requires \"Ignore Battery Optimization\" permission</string>
815819

816820
<!--Updates-->
817821
<string name="update_title">What\'s new?</string>

app-timer-list/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,6 @@ dependencies {
1919
implementation libs.calendar_view
2020
implementation libs.chart
2121
implementation libs.material_popup_menu
22+
implementation libs.permission
2223

2324
}

app-timer-list/src/main/java/xyz/aprildown/timer/app/timer/list/TimerFragment.kt

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package xyz.aprildown.timer.app.timer.list
22

3+
import android.Manifest
34
import android.content.ComponentName
45
import android.content.Context
6+
import android.content.Intent
57
import android.content.ServiceConnection
68
import android.graphics.Typeface
79
import android.os.Bundle
810
import android.os.IBinder
11+
import android.os.PowerManager
12+
import android.provider.Settings
913
import android.text.Spanned
1014
import android.text.style.StyleSpan
11-
import android.view.LayoutInflater
1215
import android.view.Menu
1316
import android.view.MenuInflater
1417
import android.view.MenuItem
@@ -17,6 +20,8 @@ import androidx.activity.result.ActivityResult
1720
import androidx.activity.result.ActivityResultCallback
1821
import androidx.activity.result.contract.ActivityResultContracts
1922
import androidx.core.content.edit
23+
import androidx.core.content.getSystemService
24+
import androidx.core.net.toUri
2025
import androidx.core.text.buildSpannedString
2126
import androidx.core.view.isVisible
2227
import androidx.core.view.updatePadding
@@ -33,6 +38,8 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
3338
import dagger.hilt.android.AndroidEntryPoint
3439
import kotlinx.coroutines.Dispatchers
3540
import kotlinx.coroutines.asExecutor
41+
import pub.devrel.easypermissions.EasyPermissions
42+
import pub.devrel.easypermissions.PermissionRequest
3643
import xyz.aprildown.timer.app.base.data.PreferenceData
3744
import xyz.aprildown.timer.app.base.data.PreferenceData.showGridTimerList
3845
import xyz.aprildown.timer.app.base.ui.AppNavigator
@@ -45,6 +52,7 @@ import xyz.aprildown.timer.app.base.utils.ScreenWakeLock
4552
import xyz.aprildown.timer.app.base.utils.ShortcutHelper
4653
import xyz.aprildown.timer.app.base.utils.getDisplayName
4754
import xyz.aprildown.timer.app.timer.list.databinding.FragmentTimerBinding
55+
import xyz.aprildown.timer.app.timer.list.databinding.ViewTipAndroid12Binding
4856
import xyz.aprildown.timer.app.timer.list.databinding.ViewTipMissedTimerBinding
4957
import xyz.aprildown.timer.app.timer.list.databinding.ViewTipWhitelistBinding
5058
import xyz.aprildown.timer.domain.entities.FolderEntity
@@ -520,7 +528,7 @@ class TimerFragment :
520528
TipManager.TIP_WHITELIST -> {
521529
binding.viewEmpty.gone()
522530
ViewTipWhitelistBinding.inflate(
523-
LayoutInflater.from(context),
531+
layoutInflater,
524532
binding.layoutTip,
525533
true
526534
).also {
@@ -547,7 +555,7 @@ class TimerFragment :
547555
TipManager.TIP_MISSED_TIMER -> {
548556
binding.viewEmpty.gone()
549557
ViewTipMissedTimerBinding.inflate(
550-
LayoutInflater.from(context),
558+
layoutInflater,
551559
binding.layoutTip,
552560
true
553561
).also {
@@ -564,6 +572,46 @@ class TimerFragment :
564572
}
565573
}
566574
}
575+
TipManager.TIP_ANDROID_12 -> {
576+
ViewTipAndroid12Binding.inflate(
577+
layoutInflater,
578+
binding.layoutTip,
579+
true
580+
).also {
581+
it.groupPhoneCalls.isVisible = !EasyPermissions.hasPermissions(
582+
context,
583+
Manifest.permission.READ_PHONE_STATE
584+
)
585+
it.btnPhoneCalls.setOnClickListener {
586+
EasyPermissions.requestPermissions(
587+
PermissionRequest.Builder(
588+
this,
589+
0,
590+
Manifest.permission.READ_PHONE_STATE
591+
).build()
592+
)
593+
}
594+
it.groupBattery.isVisible = context.getSystemService<PowerManager>()
595+
?.isIgnoringBatteryOptimizations(context.packageName) != true
596+
it.btnBattery.setOnClickListener {
597+
context.startActivityOrNothing(
598+
Intent.createChooser(
599+
@Suppress("BatteryLife")
600+
Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)
601+
.setData("package:${context.packageName}".toUri()),
602+
null
603+
),
604+
wrongMessageRes = RBase.string.no_action_found
605+
)
606+
}
607+
it.btnDismiss.setOnClickListener {
608+
viewModel.consumeTip(tip)
609+
}
610+
if (!it.groupPhoneCalls.isVisible && !it.groupBattery.isVisible) {
611+
viewModel.consumeTip(tip)
612+
}
613+
}
614+
}
567615
TipManager.TIP_NO_MORE -> {
568616
binding.layoutTip.gone()
569617
binding.viewEmpty.isVisible = viewModel.timerInfo.value.isNullOrEmpty()
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
android:layout_width="match_parent"
5+
android:layout_height="wrap_content"
6+
app:cardCornerRadius="0dp"
7+
app:cardElevation="@dimen/elevation_timer_card"
8+
app:cardUseCompatPadding="true">
9+
10+
<androidx.constraintlayout.widget.ConstraintLayout
11+
android:layout_width="match_parent"
12+
android:layout_height="wrap_content">
13+
14+
<TextView
15+
android:id="@+id/textPhoneCalls"
16+
android:layout_width="0dp"
17+
android:layout_height="wrap_content"
18+
android:layout_marginStart="16dp"
19+
android:layout_marginTop="16dp"
20+
android:layout_marginEnd="16dp"
21+
android:text="@string/tip_android_12_phone_calls"
22+
android:textAppearance="?textAppearanceBody2"
23+
app:layout_constraintEnd_toStartOf="@id/btnPhoneCalls"
24+
app:layout_constraintStart_toStartOf="parent"
25+
app:layout_constraintTop_toTopOf="parent" />
26+
27+
<Button
28+
android:id="@+id/btnPhoneCalls"
29+
android:layout_width="wrap_content"
30+
android:layout_height="wrap_content"
31+
android:layout_gravity="end"
32+
android:layout_marginEnd="16dp"
33+
android:text="@string/grant"
34+
app:layout_constraintBottom_toBottomOf="@id/textPhoneCalls"
35+
app:layout_constraintEnd_toEndOf="parent"
36+
app:layout_constraintTop_toTopOf="@id/textPhoneCalls" />
37+
38+
<androidx.constraintlayout.widget.Group
39+
android:id="@+id/groupPhoneCalls"
40+
android:layout_width="wrap_content"
41+
android:layout_height="wrap_content"
42+
app:constraint_referenced_ids="textPhoneCalls,btnPhoneCalls" />
43+
44+
<TextView
45+
android:id="@+id/textBattery"
46+
android:layout_width="0dp"
47+
android:layout_height="wrap_content"
48+
android:layout_marginStart="16dp"
49+
android:layout_marginTop="24dp"
50+
android:layout_marginEnd="16dp"
51+
android:text="@string/tip_android_12_battery"
52+
android:textAppearance="?textAppearanceBody2"
53+
app:layout_constraintEnd_toStartOf="@id/btnBattery"
54+
app:layout_constraintStart_toStartOf="parent"
55+
app:layout_constraintTop_toBottomOf="@id/textPhoneCalls" />
56+
57+
<Button
58+
android:id="@+id/btnBattery"
59+
android:layout_width="wrap_content"
60+
android:layout_height="wrap_content"
61+
android:layout_gravity="end"
62+
android:layout_marginEnd="16dp"
63+
android:text="@string/grant"
64+
app:layout_constraintBottom_toBottomOf="@id/textBattery"
65+
app:layout_constraintEnd_toEndOf="parent"
66+
app:layout_constraintTop_toTopOf="@id/textBattery" />
67+
68+
<androidx.constraintlayout.widget.Group
69+
android:id="@+id/groupBattery"
70+
android:layout_width="wrap_content"
71+
android:layout_height="wrap_content"
72+
app:constraint_referenced_ids="textBattery,btnBattery" />
73+
74+
<Button
75+
android:id="@+id/btnDismiss"
76+
style="@style/Widget.MaterialComponents.Button.TextButton"
77+
android:layout_width="wrap_content"
78+
android:layout_height="wrap_content"
79+
android:layout_marginTop="16dp"
80+
android:layout_marginBottom="8dp"
81+
android:text="@string/dismiss"
82+
app:layout_constraintBottom_toBottomOf="parent"
83+
app:layout_constraintEnd_toEndOf="@id/btnPhoneCalls"
84+
app:layout_constraintTop_toBottomOf="@id/textBattery" />
85+
86+
</androidx.constraintlayout.widget.ConstraintLayout>
87+
88+
</com.google.android.material.card.MaterialCardView>

app-timer-list/src/main/res/layout/view_tip_missed_timer.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
android:layout_marginTop="16dp"
2020
android:layout_marginEnd="16dp"
2121
android:layout_marginBottom="4dp"
22-
android:text="@string/missed_timer_desp"
22+
android:text="@string/tip_missed_timer"
2323
android:textAppearance="?textAppearanceBody2"
2424
app:layout_constraintBottom_toTopOf="@id/btnCheck"
2525
app:layout_constraintEnd_toEndOf="parent"

0 commit comments

Comments
 (0)