diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0d4476f..86b6547 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -95,6 +95,9 @@ dependencies { implementation("com.squareup.retrofit2:retrofit:2.9.0") implementation("com.squareup.retrofit2:converter-gson:2.6.4") implementation("com.squareup.retrofit2:converter-scalars:2.6.4") + + implementation ("me.everything:providers-android:1.0.1") + implementation ("me.everything:providers-core:1.0.1") // implementation ("androidx.window:window:1.0.0") // implementation("io.github.vaneproject:hanguleditor:1.0.0") } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fa5eb41..376c460 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -26,7 +26,8 @@ - + + diff --git a/app/src/main/kotlin/rasel/lunar/launcher/LauncherActivity.kt b/app/src/main/kotlin/rasel/lunar/launcher/LauncherActivity.kt index f46d2ec..2594988 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/LauncherActivity.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/LauncherActivity.kt @@ -108,6 +108,7 @@ import rasel.lunar.launcher.utils.beforeDay import rasel.lunar.launcher.utils.make0H import rasel.lunar.launcher.workers.AppInfoGetter import rasel.lunar.launcher.workers.ArcaGetter +import rasel.lunar.launcher.workers.CalendarGetter import rasel.lunar.launcher.workers.ClienGetter import rasel.lunar.launcher.workers.ContactInfoGetter import rasel.lunar.launcher.workers.DCGetter @@ -210,6 +211,12 @@ internal class LauncherActivity : AppCompatActivity() { }, 5, TimeUnit.SECONDS) } + fun getCal() { + Executors.newSingleThreadScheduledExecutor().schedule({ + mWorkManager?.enqueue(OneTimeWorkRequest.from(CalendarGetter::class.java)) + }, 5, TimeUnit.SECONDS) + } + fun refreshFeeds() { var delay = 5L Executors.newSingleThreadScheduledExecutor().schedule({ @@ -435,6 +442,8 @@ internal class LauncherActivity : AppCompatActivity() { private fun welcomeDialog() { var needAsk = if ( + this.checkSelfPermission(Manifest.permission.READ_CALENDAR) != PackageManager.PERMISSION_GRANTED || + this.checkSelfPermission(Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED || this.checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED || this.checkSelfPermission(Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED || this.checkSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED || @@ -473,6 +482,8 @@ internal class LauncherActivity : AppCompatActivity() { /* phone permission */ if ( + this.checkSelfPermission(Manifest.permission.READ_CALENDAR) != PackageManager.PERMISSION_GRANTED || + this.checkSelfPermission(Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED || this.checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED || this.checkSelfPermission(Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED || this.checkSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED || @@ -484,6 +495,8 @@ internal class LauncherActivity : AppCompatActivity() { this.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED ) { this.requestPermissions(arrayOf( + Manifest.permission.READ_CALENDAR, + Manifest.permission.WRITE_CALENDAR, Manifest.permission.READ_CONTACTS, Manifest.permission.READ_CALL_LOG, Manifest.permission.CALL_PHONE, diff --git a/app/src/main/kotlin/rasel/lunar/launcher/feeds/Feeds.kt b/app/src/main/kotlin/rasel/lunar/launcher/feeds/Feeds.kt index 2bc1369..d9ed7b6 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/feeds/Feeds.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/feeds/Feeds.kt @@ -58,6 +58,7 @@ import org.jsoup.Jsoup import rasel.lunar.launcher.CommadCallabck import rasel.lunar.launcher.LauncherActivity.Companion.appWidgetHost import rasel.lunar.launcher.LauncherActivity.Companion.appWidgetManager +import rasel.lunar.launcher.LauncherActivity.Companion.getCal import rasel.lunar.launcher.LauncherActivity.Companion.lActivity import rasel.lunar.launcher.LauncherActivity.Companion.refreshDeviceData import rasel.lunar.launcher.LauncherActivity.Companion.refreshFeeds @@ -282,6 +283,9 @@ internal class Feeds : Fragment() , CommadCallabck { binding.expandRss.isChecked = false } else { when (input.text.toString()) { + "cal" ->{ + getCal() + } "so" -> GlobalScope.launch { "https://kr69.sogirl.so".getJ().let { doc -> // BLog.LOGE("ogirl >>> ${doc.title()}") diff --git a/app/src/main/kotlin/rasel/lunar/launcher/home/LauncherHome.kt b/app/src/main/kotlin/rasel/lunar/launcher/home/LauncherHome.kt index d633efd..d5c9282 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/home/LauncherHome.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/home/LauncherHome.kt @@ -178,11 +178,11 @@ internal class LauncherHome : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) home = this - BLog.LOGE("${this} ::::: onCreate >>>> ") +// BLog.LOGE("${this} ::::: onCreate >>>> ") } var mWeatherResult : RealmResults? = null override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { - BLog.LOGE("${this} ::::: onCreateView >>>> ") +// BLog.LOGE("${this} ::::: onCreateView >>>> ") binding = LauncherHomeBinding.inflate(inflater, container, false) fragManager = lActivity!!.supportFragmentManager settingsPrefs = requireContext().getSharedPreferences(PREFS_SETTINGS, 0) @@ -397,7 +397,7 @@ internal class LauncherHome : Fragment() { private fun queryNotice() { var mWorkManager = WorkManager.getInstance(requireContext()) Executors.newSingleThreadScheduledExecutor().schedule({ - mWorkManager.enqueue(OneTimeWorkRequest.from(TelegramBotGetter::class.java)) +// mWorkManager.enqueue(OneTimeWorkRequest.from(TelegramBotGetter::class.java)) }, 5, TimeUnit.SECONDS) try { noticeJob?.cancel() } catch (e:Exception) {e.printStackTrace()} mNotificationResult = null @@ -483,7 +483,7 @@ internal class LauncherHome : Fragment() { }} var rQ = WorkersDb.getRealm().query().query("pubDate > $0", beforeDay(Date(),3)) if(keyword.length > 0) { - BLog.LOGE("queryInfos it >>> ${keyword}") +// BLog.LOGE("queryInfos it >>> ${keyword}") if (JamoUtils.CHOSUNG.contains(keyword.split("")[0])) { rQ = rQ.query( "title CONTAINS $0 OR chosung CONTAINS $1 ", @@ -580,7 +580,7 @@ internal class LauncherHome : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - BLog.LOGE("${this} ::::: onViewCreated >>>> ") +// BLog.LOGE("${this} ::::: onViewCreated >>>> ") rootViewGestures() batteryProgressGestures() @@ -804,7 +804,7 @@ internal class LauncherHome : Fragment() { } override fun onResume() { super.onResume() - BLog.LOGE("${this} ::::: onResume >>>> ") +// BLog.LOGE("${this} ::::: onResume >>>> ") if (shouldResume) { /* register battery changes */ diff --git a/app/src/main/kotlin/rasel/lunar/launcher/settings/SettingsActivity.kt b/app/src/main/kotlin/rasel/lunar/launcher/settings/SettingsActivity.kt index 5dc8867..8b4d2c5 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/settings/SettingsActivity.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/settings/SettingsActivity.kt @@ -117,17 +117,17 @@ internal class SettingsActivity : AppCompatActivity() { /* source code at github */ aboutBinding.sourceCode.setOnClickListener { bottomSheetDialog.dismiss() - startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(sourceCode))) +// startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(sourceCode))) } /* wiki at github */ aboutBinding.wiki.setOnClickListener { bottomSheetDialog.dismiss() - startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("$sourceCode/wiki"))) +// startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("$sourceCode/wiki"))) } /* telegram community */ aboutBinding.telegramGroup.setOnClickListener { bottomSheetDialog.dismiss() - startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://t.me/LunarLauncher_chats"))) +// startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://t.me/LunarLauncher_chats"))) } } @@ -138,15 +138,15 @@ internal class SettingsActivity : AppCompatActivity() { .setMessage(R.string.support_message) /* star button */ .setNeutralButton(R.string.star) { _, _ -> - startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(sourceCode))) +// startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(sourceCode))) } /* affiliate button */ .setNegativeButton(R.string.amazon) { _, _ -> - startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://amzn.to/44krAw9"))) +// startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://amzn.to/44krAw9"))) } /* donate button */ .setPositiveButton(R.string.donate) { _, _ -> - startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://iamrasel.github.io/donate"))) +// startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://iamrasel.github.io/donate"))) } .show() } diff --git a/app/src/main/kotlin/rasel/lunar/launcher/workers/CalendarGetter.kt b/app/src/main/kotlin/rasel/lunar/launcher/workers/CalendarGetter.kt new file mode 100644 index 0000000..b31482d --- /dev/null +++ b/app/src/main/kotlin/rasel/lunar/launcher/workers/CalendarGetter.kt @@ -0,0 +1,149 @@ +package rasel.lunar.launcher.workers + +import android.content.Context +import android.net.Uri +import androidx.work.WorkerParameters +import rasel.lunar.launcher.LauncherActivity.Companion.lActivity +import rasel.lunar.launcher.utils.BLog + + +class CalendarGetter : BaseGetter { + companion object { + val TAG = "DCGetter" + } + constructor(context: Context, workerParams: WorkerParameters) : super(context, workerParams) { + + } + override fun realWork(): Result { + setCalendar() + return Result.success().apply { + + } + } + + fun setCalendar() { + + + val calendars = Uri.parse("content://com.android.calendar/events") + + val projection = arrayOf( + "calendar_id", +// "htmlUri", + "title", +// "eventLocation", + "description", +// "eventStatus", +// "selfAttendeeStatus", +// "commentsUri", + "dtstart", + "dtend", +// "eventTimezone", +// "duration", +// "allDay", +// "visibility", +// "transparency", +// "hasAlarm", +// "hasExtendedProperties", +// "rrule", + "rdate", +// "exrule", +// "exdate", +// "originalEvent", +// "originalInstanceTime", +// "originalAllDay", +// "lastDate", +// "hasAttendeeData", +// "guestsCanModify", +// "guestsCanInviteOthers", +// "guestsCanSeeGuests", +// "organizer", +// "deleted" + ) +// val managedCursor: Cursor = + lActivity?.contentResolver?.query(calendars, projection, null, null, null)?.let { managedCursor -> + if (managedCursor.moveToFirst()) { + val calendar_id = IntArray(managedCursor.count) + +// val htmlUri = arrayOfNulls(managedCursor.count) + val title = arrayOfNulls(managedCursor.count) +// val eventLocation = arrayOfNulls(managedCursor.count) + val description = arrayOfNulls(managedCursor.count) +// val eventStatus = IntArray(managedCursor.count) +// val selfAttendeeStatus = IntArray(managedCursor.count) +// val commentsUri = arrayOfNulls(managedCursor.count) + val dtstart = arrayOfNulls(managedCursor.count) + val dtend = arrayOfNulls(managedCursor.count) +// val eventTimezone = arrayOfNulls(managedCursor.count) +// val duration = arrayOfNulls(managedCursor.count) +// val allDay = IntArray(managedCursor.count) +// val visibility = IntArray(managedCursor.count) +// val transparency = IntArray(managedCursor.count) +// val hasAlarm = IntArray(managedCursor.count) +// val hasExtendedProperties = IntArray(managedCursor.count) +// val rrule = arrayOfNulls(managedCursor.count) + val rdate = arrayOfNulls(managedCursor.count) +// val exrule = arrayOfNulls(managedCursor.count) +// val exdate = arrayOfNulls(managedCursor.count) +// val originalEvent = arrayOfNulls(managedCursor.count) +// val originalInstanceTime = IntArray(managedCursor.count) +// val originalAllDay = IntArray(managedCursor.count) +// val lastDate = IntArray(managedCursor.count) +// val hasAttendeeData = IntArray(managedCursor.count) +// val guestsCanModify = IntArray(managedCursor.count) +// val guestsCanInviteOthers = IntArray(managedCursor.count) +// val guestsCanSeeGuests = IntArray(managedCursor.count) +// val organizer = arrayOfNulls(managedCursor.count) +// val deleted = IntArray(managedCursor.count) + + for (i in title.indices) { + calendar_id[i] = managedCursor.getInt(0) + BLog.LOGE("Calendar ID : " + calendar_id[i]) +// htmlUri[i] = managedCursor.getString(1) +// Log.i("Calendar", "htmlUri : " + htmlUri[i]) + title[i] = managedCursor.getString(1) + BLog.LOGE("Calendar title : " + title[i]) +// eventLocation[i] = managedCursor.getString(3) +// Log.i("Calendar", "eventLocation : " + eventLocation[i]) + description[i] = managedCursor.getString(2) +// eventStatus[i] = managedCursor.getInt(5) +// selfAttendeeStatus[i] = managedCursor.getInt(6) +// commentsUri[i] = managedCursor.getString(7) + dtstart[i] = managedCursor.getString(3) + BLog.LOGE("Calendar dtstart : " + rdate[i]) + dtend[i] = managedCursor.getString(4) + BLog.LOGE("Calendar dtend : " + rdate[i]) +// eventTimezone[i] = managedCursor.getString(10) +// duration[i] = managedCursor.getString(11) +// allDay[i] = managedCursor.getInt(12) +// visibility[i] = managedCursor.getInt(13) +// transparency[i] = managedCursor.getInt(14) +// hasAlarm[i] = managedCursor.getInt(15) +// hasExtendedProperties[i] = managedCursor.getInt(16) +// rrule[i] = managedCursor.getString(17) + rdate[i] = managedCursor.getString(5) + BLog.LOGE("Calendar rdate : " + rdate[i]) +// exrule[i] = managedCursor.getString(19) +// exdate[i] = managedCursor.getString(20) +// originalEvent[i] = managedCursor.getString(21) +// originalInstanceTime[i] = managedCursor.getInt(22) +// originalAllDay[i] = managedCursor.getInt(23) +// lastDate[i] = managedCursor.getInt(24) +// hasAttendeeData[i] = managedCursor.getInt(25) +// guestsCanModify[i] = managedCursor.getInt(26) +// guestsCanInviteOthers[i] = managedCursor.getInt(27) +// guestsCanSeeGuests[i] = managedCursor.getInt(28) +// organizer[i] = managedCursor.getString(29) +// deleted[i] = managedCursor.getInt(30) + + if (title[i] != null) { + BLog.LOGE("title[i] ${title[i]}") + } + + managedCursor.moveToNext() + } + } + managedCursor.close() + } + } + +} \ No newline at end of file