@@ -45,23 +45,20 @@ import androidx.navigation.ui.NavigationUI
45
45
import androidx.navigation.ui.setupWithNavController
46
46
import androidx.preference.PreferenceManager
47
47
import androidx.work.ExistingPeriodicWorkPolicy
48
- import androidx.work.PeriodicWorkRequestBuilder
49
48
import androidx.work.WorkManager
50
49
import com.djangofiles.djangofiles.databinding.ActivityMainBinding
51
50
import com.djangofiles.djangofiles.db.Server
52
51
import com.djangofiles.djangofiles.db.ServerDao
53
52
import com.djangofiles.djangofiles.db.ServerDatabase
54
53
import com.djangofiles.djangofiles.ui.home.HomeViewModel
55
54
import com.djangofiles.djangofiles.widget.WidgetProvider
56
- import com.djangofiles.djangofiles.work.DAILY_WORKER_CONSTRAINTS
57
- import com.djangofiles.djangofiles.work.DailyWorker
55
+ import com.djangofiles.djangofiles.work.enqueueWorkRequest
58
56
import kotlinx.coroutines.Dispatchers
59
57
import kotlinx.coroutines.launch
60
58
import kotlinx.coroutines.withContext
59
+ import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
61
60
import java.io.File
62
- import java.net.URL
63
61
import java.util.UUID
64
- import java.util.concurrent.TimeUnit
65
62
66
63
class MainActivity : AppCompatActivity () {
67
64
@@ -202,40 +199,34 @@ class MainActivity : AppCompatActivity() {
202
199
window.setNavigationBarContrastEnforced(false )
203
200
}
204
201
205
- // Set Nav Header Top Padding
202
+ // Update Header Padding
206
203
val headerView = binding.navView.getHeaderView(0 )
207
- ViewCompat .setOnApplyWindowInsetsListener(headerView) { v, insets ->
208
- val bars = insets.getInsets(WindowInsetsCompat .Type .statusBars())
209
- Log .d(" ViewCompat" , " top: ${bars.top} " )
210
- v.updatePadding(top = bars.top)
204
+ ViewCompat .setOnApplyWindowInsetsListener(binding.root) { _, insets ->
205
+ val bars = insets.getInsets(WindowInsetsCompat .Type .systemBars())
206
+ Log .d(" ViewCompat" , " binding.root: top: ${bars.top} " )
207
+ if (bars.top > 0 ) {
208
+ headerView.updatePadding(top = bars.top)
209
+ }
211
210
insets
212
211
}
213
212
214
213
// Update Header Text
215
- val packageInfo = packageManager.getPackageInfo(this . packageName, 0 )
214
+ val packageInfo = packageManager.getPackageInfo(packageName, 0 )
216
215
val versionName = packageInfo.versionName
217
216
Log .d(" Main[onCreate]" , " versionName: $versionName " )
218
217
val versionTextView = headerView.findViewById<TextView >(R .id.header_version)
219
218
versionTextView.text = " v${versionName} "
220
219
221
- // TODO: Improve initialization of the WorkRequest
220
+ // Work Manager
222
221
val workInterval = preferences.getString(" work_interval" , null ) ? : " 0"
223
- Log .i(" Main[onCreate]" , " workInterval: $workInterval " )
222
+ Log .d(" Main[onCreate]" , " workInterval: $workInterval " )
223
+ // NOTE: This just ensures work manager is enabled or disabled based on preference
224
224
if (workInterval != " 0" ) {
225
- val workRequest =
226
- PeriodicWorkRequestBuilder <DailyWorker >(workInterval.toLong(), TimeUnit .MINUTES )
227
- .setConstraints(DAILY_WORKER_CONSTRAINTS )
228
- .build()
229
- Log .i(" Main[onCreate]" , " workRequest: $workRequest " )
230
- WorkManager .getInstance(this ).enqueueUniquePeriodicWork(
231
- " daily_worker" ,
232
- ExistingPeriodicWorkPolicy .KEEP ,
233
- workRequest
234
- )
225
+ enqueueWorkRequest(workInterval, ExistingPeriodicWorkPolicy .KEEP )
235
226
} else {
236
227
// TODO: Confirm this is necessary...
237
228
Log .i(" Main[onCreate]" , " Ensuring Work is Disabled" )
238
- WorkManager .getInstance(this ).cancelUniqueWork(" app_worker " )
229
+ WorkManager .getInstance(this ).cancelUniqueWork(" daily_worker " )
239
230
}
240
231
241
232
// Handle Custom Navigation Items
@@ -418,8 +409,8 @@ class MainActivity : AppCompatActivity() {
418
409
Log .d(" onNewIntent" , " SEND TEXT DETECTED" )
419
410
// if (extraText.lowercase().startsWith("http")) {
420
411
// if (Patterns.WEB_URL.matcher(extraText).matches()) {
421
- if (isURL (extraText)) {
422
- Log .d (" onNewIntent" , " URL DETECTED: $extraText " )
412
+ if (isTextUrl (extraText)) {
413
+ Log .i (" onNewIntent" , " URL DETECTED: $extraText " )
423
414
val bundle = Bundle ().apply { putString(" url" , extraText) }
424
415
navController.navigate(
425
416
R .id.nav_item_short, bundle, NavOptions .Builder ()
@@ -662,6 +653,15 @@ class MainActivity : AppCompatActivity() {
662
653
}
663
654
}
664
655
656
+ private fun isTextUrl (input : String ): Boolean {
657
+ val url = input.toHttpUrlOrNull() ? : return false
658
+ if (input != url.toString()) return false
659
+ if (url.scheme !in listOf (" http" , " https" )) return false
660
+ if (url.host.isBlank()) return false
661
+ if (url.toString().length > 2048 ) return false
662
+ return true
663
+ }
664
+
665
665
fun setDrawerLockMode (enabled : Boolean ) {
666
666
Log .d(" setDrawerLockMode" , " enabled: $enabled " )
667
667
val lockMode =
@@ -709,14 +709,3 @@ fun copyToClipboard(context: Context, text: String, msg: String? = null) {
709
709
clipboard.setPrimaryClip(clip)
710
710
Toast .makeText(context, message, Toast .LENGTH_SHORT ).show()
711
711
}
712
-
713
- fun isURL (url : String ): Boolean {
714
- return try {
715
- URL (url)
716
- Log .d(" isURL" , " TRUE" )
717
- true
718
- } catch (_: Exception ) {
719
- Log .d(" isURL" , " FALSE" )
720
- false
721
- }
722
- }
0 commit comments