Skip to content

Commit 2b1ebe0

Browse files
authored
Updates (#48)
- Add Battery Option - Add App Settings Link - Widget Update Layout - Update Info Dialog
1 parent 54ba193 commit 2b1ebe0

File tree

14 files changed

+203
-40
lines changed

14 files changed

+203
-40
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
<uses-permission android:name="android.permission.INTERNET" />
55
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
6-
<!-- <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />-->
6+
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
77

88
<application
99
android:allowBackup="true"

app/src/main/java/com/djangofiles/djangofiles/DailyWorker.kt

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class DailyWorker(appContext: Context, workerParams: WorkerParameters) :
4545
//appWidgetManager.updateAppWidget(componentName, remoteViews)
4646

4747
// Update Widget
48+
// TODO: WidgetUpdate: Consolidate to a function...
4849
Log.d("DailyWorker", "--- Update Widget")
4950
val componentName = ComponentName(applicationContext, WidgetProvider::class.java)
5051
Log.d("DailyWorker", "componentName: $componentName")
@@ -105,16 +106,17 @@ suspend fun Context.updateStats(): Boolean {
105106
)
106107
Log.d("updateStats", "dao.addOrUpdate: DONE")
107108

108-
// TODO: Make this a reusable function with an event trigger...
109-
Log.i("updateStats", "Updating Widget")
110-
val appWidgetManager = AppWidgetManager.getInstance(this)
111-
val widgetComponent = ComponentName(this, WidgetProvider::class.java)
112-
val widgetIds = appWidgetManager.getAppWidgetIds(widgetComponent)
113-
val intent = Intent(this, WidgetProvider::class.java).apply {
114-
action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
115-
putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, widgetIds)
116-
}
117-
this.sendBroadcast(intent)
109+
// TODO: WidgetUpdate: Consolidate to a function...
110+
// This seems to run a double update, disabling until turned into a function
111+
//Log.i("updateStats", "Updating Widget")
112+
//val appWidgetManager = AppWidgetManager.getInstance(this)
113+
//val widgetComponent = ComponentName(this, WidgetProvider::class.java)
114+
//val widgetIds = appWidgetManager.getAppWidgetIds(widgetComponent)
115+
//val intent = Intent(this, WidgetProvider::class.java).apply {
116+
// action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
117+
// putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, widgetIds)
118+
//}
119+
//this.sendBroadcast(intent)
118120

119121
return true
120122
}

app/src/main/java/com/djangofiles/djangofiles/MainActivity.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,6 +666,7 @@ fun Context.updateWidget() {
666666
//appWidgetManager.notifyAppWidgetViewDataChanged(ids, R.id.widget_list_view)
667667
//WidgetProvider().onUpdate(this, appWidgetManager, ids)
668668

669+
// TODO: WidgetUpdate: Consolidate to a function...
669670
val appWidgetManager = AppWidgetManager.getInstance(this)
670671
val componentName = ComponentName(this, WidgetProvider::class.java)
671672
val ids = appWidgetManager.getAppWidgetIds(componentName)

app/src/main/java/com/djangofiles/djangofiles/WidgetProvider.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class WidgetProvider : AppWidgetProvider() {
4040
Log.d("Widget[onReceive]", "GlobalScope.launch: START")
4141
GlobalScope.launch(Dispatchers.IO) {
4242
context.updateStats()
43+
// TODO: WidgetUpdate: Consolidate to a function...
4344
val appWidgetManager = AppWidgetManager.getInstance(context)
4445
onUpdate(context, appWidgetManager, intArrayOf(appWidgetId))
4546
Log.d("Widget[onReceive]", "GlobalScope.launch: DONE")
@@ -131,6 +132,11 @@ class WidgetProvider : AppWidgetProvider() {
131132
Log.d("Widget[onUpdate]", "humanSize: $humanSize")
132133
views.setTextViewText(R.id.files_size, humanSize)
133134
}
135+
136+
val time = java.time.LocalTime.now().format(java.time.format.DateTimeFormatter.ofPattern("HH:mm"))
137+
Log.d("Widget[onUpdate]", "time: $time")
138+
views.setTextViewText(R.id.update_time, time)
139+
134140
Log.d("Widget[onUpdate]", "updateAppWidget")
135141
appWidgetManager.updateAppWidget(appWidgetId, views)
136142
Log.d("Widget[onUpdate]", "updateAppWidget: DONE")

app/src/main/java/com/djangofiles/djangofiles/ui/settings/SettingsFragment.kt

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
package com.djangofiles.djangofiles.ui.settings
22

3+
import android.annotation.SuppressLint
34
import android.content.Context
5+
import android.content.Intent
6+
import android.net.Uri
47
import android.os.Bundle
8+
import android.os.PowerManager
9+
import android.provider.Settings
510
import android.text.Html
611
import android.text.method.LinkMovementMethod
712
import android.util.Log
@@ -10,6 +15,7 @@ import android.widget.EditText
1015
import android.widget.TextView
1116
import android.widget.Toast
1217
import androidx.appcompat.app.AlertDialog
18+
import androidx.core.net.toUri
1319
import androidx.lifecycle.lifecycleScope
1420
import androidx.navigation.NavOptions
1521
import androidx.navigation.fragment.findNavController
@@ -40,6 +46,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
4046

4147
private lateinit var dao: ServerDao
4248

49+
@SuppressLint("BatteryLife")
4350
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
4451
preferenceManager.sharedPreferencesName = "AppPreferences"
4552
setPreferencesFromResource(R.xml.preferences, rootKey)
@@ -100,6 +107,36 @@ class SettingsFragment : PreferenceFragmentCompat() {
100107
}
101108
}
102109

110+
// Background Restriction
111+
val packageName = requireContext().packageName
112+
Log.i("onCreatePreferences", "packageName: $packageName")
113+
val pm = requireContext().getSystemService(PowerManager::class.java)
114+
val batteryRestrictedButton = findPreference<Preference>("battery_unrestricted")
115+
fun checkBackground(): Boolean {
116+
val isIgnoring = pm.isIgnoringBatteryOptimizations(packageName)
117+
Log.i("onCreatePreferences", "isIgnoring: $isIgnoring")
118+
if (isIgnoring) {
119+
Log.i("onCreatePreferences", "DISABLING BACKGROUND BUTTON")
120+
batteryRestrictedButton?.setSummary("Permission Already Granted")
121+
batteryRestrictedButton?.isEnabled = false
122+
}
123+
return isIgnoring
124+
}
125+
checkBackground()
126+
batteryRestrictedButton?.setOnPreferenceClickListener {
127+
Log.d("onCreatePreferences", "batteryRestrictedButton?.setOnPreferenceClickListener")
128+
if (!checkBackground()) {
129+
val uri = "package:$packageName".toUri()
130+
Log.d("onCreatePreferences", "uri: $uri")
131+
val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply {
132+
data = uri
133+
}
134+
Log.d("onCreatePreferences", "intent: $intent")
135+
startActivity(intent)
136+
}
137+
false
138+
}
139+
103140
// Add Server Button
104141
findPreference<Preference>("add_server_btn")?.setOnPreferenceClickListener {
105142
Log.d("onCreatePreferences", "addServerBtn: $it")
@@ -128,6 +165,16 @@ class SettingsFragment : PreferenceFragmentCompat() {
128165
requireContext().showAppInfoDialog()
129166
false
130167
}
168+
169+
// Open App Settings
170+
findPreference<Preference>("android_settings")?.setOnPreferenceClickListener {
171+
Log.d("android_settings", "setOnPreferenceClickListener")
172+
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
173+
data = Uri.fromParts("package", packageName, null)
174+
}
175+
startActivity(intent)
176+
false
177+
}
131178
}
132179

133180
private fun buildServerList() {
@@ -272,6 +319,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
272319
val appVersion = view.findViewById<TextView>(R.id.app_version)
273320
val sourceLink = view.findViewById<TextView>(R.id.source_link)
274321
val websiteLink = view.findViewById<TextView>(R.id.website_link)
322+
//val appInfo = view.findViewById<TextView>(R.id.open_app_info)
275323

276324
val sourceText = getString(R.string.github_link, sourceLink.tag)
277325
Log.d("showAppInfoDialog", "sourceText: $sourceText")
@@ -299,6 +347,14 @@ class SettingsFragment : PreferenceFragmentCompat() {
299347
sourceLink.movementMethod = LinkMovementMethod.getInstance()
300348
websiteLink.text = Html.fromHtml(websiteText, Html.FROM_HTML_MODE_LEGACY)
301349
websiteLink.movementMethod = LinkMovementMethod.getInstance()
350+
351+
//appInfo.setOnClickListener {
352+
// Log.d("appInfo", "setOnClickListener")
353+
// val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
354+
// data = Uri.fromParts("package", packageName, null)
355+
// }
356+
// startActivity(intent)
357+
//}
302358
}
303359
dialog.show()
304360
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="960"
5+
android:viewportHeight="960"
6+
android:tint="?attr/colorControlNormal">
7+
<path
8+
android:fillColor="@android:color/white"
9+
android:pathData="M360,800L360,800L360,800L360,800Q360,800 360,800Q360,800 360,800Q360,800 360,800Q360,800 360,800ZM320,880Q303,880 291.5,868.5Q280,857 280,840L280,200Q280,183 291.5,171.5Q303,160 320,160L400,160L400,80L560,80L560,160L640,160Q657,160 668.5,171.5Q680,183 680,200L680,400Q659,400 639,403Q619,406 600,412L600,240L360,240L360,800L428,800Q439,823 453,843Q467,863 485,880L320,880ZM640,880L628,820Q616,815 605.5,809Q595,803 585,795L527,815L487,746L532,706Q530,691 530,680.5Q530,670 532,655L487,615L527,546L585,566Q595,558 605.5,551.5Q616,545 628,540L640,480L720,480L732,540Q744,545 754.5,551Q765,557 775,565L833,545L873,614L828,654Q830,669 830,679.5Q830,690 828,705L873,745L833,814L775,795Q765,803 754.5,809Q744,815 732,820L720,880L640,880ZM680,760Q713,760 736.5,736.5Q760,713 760,680Q760,647 736.5,623.5Q713,600 680,600Q647,600 623.5,623.5Q600,647 600,680Q600,713 623.5,736.5Q647,760 680,760Z"/>
10+
</vector>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="960"
5+
android:viewportHeight="960"
6+
android:tint="?attr/colorControlNormal"
7+
android:autoMirrored="true">
8+
<path
9+
android:fillColor="@android:color/white"
10+
android:pathData="M320,680Q337,680 348.5,668.5Q360,657 360,640Q360,623 348.5,611.5Q337,600 320,600Q303,600 291.5,611.5Q280,623 280,640Q280,657 291.5,668.5Q303,680 320,680ZM320,520Q337,520 348.5,508.5Q360,497 360,480Q360,463 348.5,451.5Q337,440 320,440Q303,440 291.5,451.5Q280,463 280,480Q280,497 291.5,508.5Q303,520 320,520ZM320,360Q337,360 348.5,348.5Q360,337 360,320Q360,303 348.5,291.5Q337,280 320,280Q303,280 291.5,291.5Q280,303 280,320Q280,337 291.5,348.5Q303,360 320,360ZM440,680L680,680L680,600L440,600L440,680ZM440,520L680,520L680,440L440,440L440,520ZM440,360L680,360L680,280L440,280L440,360ZM200,840Q167,840 143.5,816.5Q120,793 120,760L120,200Q120,167 143.5,143.5Q167,120 200,120L760,120Q793,120 816.5,143.5Q840,167 840,200L840,760Q840,793 816.5,816.5Q793,840 760,840L200,840ZM200,760L760,760Q760,760 760,760Q760,760 760,760L760,200Q760,200 760,200Q760,200 760,200L200,200Q200,200 200,200Q200,200 200,200L200,760Q200,760 200,760Q200,760 200,760ZM200,200L200,200Q200,200 200,200Q200,200 200,200L200,760Q200,760 200,760Q200,760 200,760L200,760Q200,760 200,760Q200,760 200,760L200,200Q200,200 200,200Q200,200 200,200Z"/>
11+
</vector>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="960"
5+
android:viewportHeight="960"
6+
android:tint="?attr/colorControlNormal">
7+
<path
8+
android:fillColor="@android:color/white"
9+
android:pathData="M280,920Q247,920 223.5,896.5Q200,873 200,840L200,120Q200,87 223.5,63.5Q247,40 280,40L680,40Q713,40 736.5,63.5Q760,87 760,120L760,244Q778,251 789,266Q800,281 800,300L800,380Q800,399 789,414Q778,429 760,436L760,840Q760,873 736.5,896.5Q713,920 680,920L280,920ZM280,840L680,840Q680,840 680,840Q680,840 680,840L680,120Q680,120 680,120Q680,120 680,120L280,120Q280,120 280,120Q280,120 280,120L280,840Q280,840 280,840Q280,840 280,840ZM280,840Q280,840 280,840Q280,840 280,840L280,120Q280,120 280,120Q280,120 280,120L280,120Q280,120 280,120Q280,120 280,120L280,840Q280,840 280,840Q280,840 280,840ZM440,640L520,640L526,590Q534,587 540,583.5Q546,580 552,574L598,594L638,524L598,494Q600,486 600,479Q600,472 598,464L638,434L596,366L552,384Q546,379 540,376Q534,373 526,370L520,320L440,320L434,370Q426,373 420,376Q414,379 408,384L364,366L322,434L362,464Q360,472 360,479Q360,486 362,494L322,524L362,594L408,574Q414,580 420,583.5Q426,587 434,590L440,640ZM480,540Q454,540 437,523Q420,506 420,480Q420,454 437,437Q454,420 480,420Q506,420 523,437Q540,454 540,480Q540,506 523,523Q506,540 480,540Z"/>
10+
</vector>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="960"
5+
android:viewportHeight="960"
6+
android:tint="?attr/colorControlNormal">
7+
<path
8+
android:fillColor="@android:color/white"
9+
android:pathData="M440,560L440,394L376,458L320,400L480,240L640,400L584,458L520,394L520,560L440,560ZM200,840Q167,840 143.5,816.5Q120,793 120,760L120,200Q120,167 143.5,143.5Q167,120 200,120L760,120Q793,120 816.5,143.5Q840,167 840,200L840,760Q840,793 816.5,816.5Q793,840 760,840L200,840ZM200,760L760,760Q760,760 760,760Q760,760 760,760L760,640L640,640Q610,678 568.5,699Q527,720 480,720Q433,720 391.5,699Q350,678 320,640L200,640L200,760Q200,760 200,760Q200,760 200,760ZM480,640Q518,640 549,618Q580,596 592,560L760,560L760,200Q760,200 760,200Q760,200 760,200L200,200Q200,200 200,200Q200,200 200,200L200,560L368,560Q380,596 411,618Q442,640 480,640ZM200,760Q200,760 200,760Q200,760 200,760L200,760L320,760Q350,760 391.5,760Q433,760 480,760Q527,760 568.5,760Q610,760 640,760L760,760L760,760Q760,760 760,760Q760,760 760,760L200,760Z"/>
10+
</vector>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="960"
5+
android:viewportHeight="960"
6+
android:tint="?attr/colorControlNormal">
7+
<path
8+
android:fillColor="@android:color/white"
9+
android:pathData="M720,840L280,840L280,320L560,40L610,90Q617,97 621.5,109Q626,121 626,132L626,146L582,320L840,320Q872,320 896,344Q920,368 920,400L920,480Q920,487 918,495Q916,503 914,510L794,792Q785,812 764,826Q743,840 720,840ZM360,760L720,760Q720,760 720,760Q720,760 720,760L840,480L840,400Q840,400 840,400Q840,400 840,400L480,400L534,180L360,354L360,760ZM360,354L360,354L360,400L360,400Q360,400 360,400Q360,400 360,400L360,480L360,760Q360,760 360,760Q360,760 360,760L360,760L360,354ZM280,320L280,400L160,400L160,760L280,760L280,840L80,840L80,320L280,320Z"/>
10+
</vector>

0 commit comments

Comments
 (0)