Skip to content

Commit 890a790

Browse files
feat(widget): add traffic detail app widget
1 parent 83ca6d2 commit 890a790

9 files changed

Lines changed: 798 additions & 0 deletions

File tree

MikuRay/app/src/main/AndroidManifest.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1578,6 +1578,19 @@
15781578
<action android:name="${applicationId}.action.activity" />
15791579
</intent-filter>
15801580
</receiver>
1581+
<receiver
1582+
android:name=".receiver.TrafficDetailWidgetProvider"
1583+
android:exported="true"
1584+
android:label="@string/app_widget_traffic_detail_name">
1585+
<meta-data
1586+
android:name="android.appwidget.provider"
1587+
android:resource="@xml/app_widget_traffic_detail_provider" />
1588+
<intent-filter>
1589+
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
1590+
<action android:name="${applicationId}.action.activity" />
1591+
<action android:name="${applicationId}.action.traffic_widget_refresh" />
1592+
</intent-filter>
1593+
</receiver>
15811594
<receiver
15821595
android:name=".receiver.BootReceiver"
15831596
android:exported="true"

MikuRay/app/src/main/java/com/miku/ray/AppConfig.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,8 @@ object AppConfig {
300300
const val BROADCAST_ACTION_SERVICE = "$ANG_PACKAGE.action.service"
301301
const val BROADCAST_ACTION_ACTIVITY = "$ANG_PACKAGE.action.activity"
302302
const val BROADCAST_ACTION_WIDGET_CLICK = "$ANG_PACKAGE.action.widget.click"
303+
const val BROADCAST_ACTION_TRAFFIC_WIDGET_REFRESH = "$ANG_PACKAGE.action.traffic_widget_refresh"
304+
const val EXTRA_SHOW_TOTAL_TRAFFIC_DETAIL = "extra_show_total_traffic_detail"
303305
const val BROADCAST_ACTION_ICON_SHAPE_CHANGED = "$ANG_PACKAGE.action.icon_shape_changed"
304306
const val BROADCAST_ACTION_ARROW_SHAPE_CHANGED = "$ANG_PACKAGE.action.arrow_shape_changed"
305307
const val BROADCAST_ACTION_PROFILE_BANNER_CHANGED = "$ANG_PACKAGE.action.profile_banner_changed"

MikuRay/app/src/main/java/com/miku/ray/receiver/TrafficDetailWidgetProvider.kt

Lines changed: 439 additions & 0 deletions
Large diffs are not rendered by default.

MikuRay/app/src/main/java/com/miku/ray/ui/main/MainActivity.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,20 @@ class MainActivity : HelperBaseActivity(),
196196
refreshGroupTabTitles(true)
197197

198198
checkAndRequestPermission(PermissionType.POST_NOTIFICATIONS) {}
199+
maybeShowTrafficDetailFromIntent(intent)
200+
}
201+
202+
override fun onNewIntent(intent: Intent) {
203+
super.onNewIntent(intent)
204+
setIntent(intent)
205+
maybeShowTrafficDetailFromIntent(intent)
206+
}
207+
208+
private fun maybeShowTrafficDetailFromIntent(intent: Intent?) {
209+
val launchIntent = intent ?: return
210+
if (!launchIntent.getBooleanExtra(AppConfig.EXTRA_SHOW_TOTAL_TRAFFIC_DETAIL, false)) return
211+
launchIntent.removeExtra(AppConfig.EXTRA_SHOW_TOTAL_TRAFFIC_DETAIL)
212+
window.decorView.post { showTotalTrafficDetailDialog(this) }
199213
}
200214

201215
private fun showTestBuildInfoIfNeeded() {

MikuRay/app/src/main/java/com/miku/ray/ui/preference/activity/UiSettingsActivity.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package com.miku.ray.ui.preference.activity
44
import com.miku.ray.remixicon.R as RemixR
55
import android.app.Activity
66
import android.Manifest
7+
import android.content.Intent
78
import android.content.pm.PackageManager
89
import android.graphics.Color
910
import android.net.Uri
@@ -940,6 +941,10 @@ class UiSettingsActivity : BaseActivity() {
940941
if (newTag.isEmpty()) LocaleListCompat.getEmptyLocaleList()
941942
else LocaleListCompat.forLanguageTags(newTag)
942943
)
944+
requireContext().sendBroadcast(
945+
Intent(AppConfig.BROADCAST_ACTION_TRAFFIC_WIDGET_REFRESH)
946+
.setPackage(requireContext().packageName)
947+
)
943948
summary = labelFor(newTag)
944949
value = newTag
945950
true

MikuRay/app/src/main/java/com/miku/ray/util/TotalTrafficDetailDialogUtils.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ package com.miku.ray.util
22

33
import android.content.Context
44
import android.content.DialogInterface
5+
import android.content.Intent
56
import android.view.LayoutInflater
67
import androidx.core.view.isVisible
78
import com.google.android.material.dialog.MaterialAlertDialogBuilder
9+
import com.miku.ray.AppConfig
810
import com.miku.ray.R
911
import com.miku.ray.databinding.DialogTotalTrafficDetailBinding
1012
import com.miku.ray.extension.snackbarSuccess
@@ -63,6 +65,9 @@ private fun showClearTotalTrafficConfirmDialog(context: Context, onCleared: () -
6365
.setMessage(R.string.confirm_clear_total_traffic)
6466
.setPositiveButton(android.R.string.ok) { _, _ ->
6567
MmkvManager.clearTotalTrafficDataAndHistory()
68+
context.sendBroadcast(
69+
Intent(AppConfig.BROADCAST_ACTION_TRAFFIC_WIDGET_REFRESH).setPackage(context.packageName)
70+
)
6671
onCleared()
6772
context.snackbarSuccess(
6873
context.getString(R.string.toast_total_traffic_cleared),

0 commit comments

Comments
 (0)