diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c5c244d9..35c7a2db 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,48 +1,57 @@ + xmlns:tools="http://schemas.android.com/tools"> - - + + + android:name=".NotifyApplication" + android:allowBackup="true" + android:dataExtractionRules="@xml/data_extraction_rules" + android:enableOnBackInvokedCallback="true" + android:fullBackupContent="@xml/backup_rules" + android:icon="@drawable/notify_logo" + android:label="@string/app_name" + android:roundIcon="@drawable/notify_logo" + android:supportsRtl="true" + android:theme="@style/Theme.Notify" + tools:targetApi="33"> + android:name="androidx.core.content.FileProvider" + android:authorities="${applicationId}.provider" + android:exported="false" + android:grantUriPermissions="true"> + android:name="android.support.FILE_PROVIDER_PATHS" + android:resource="@xml/file_provider_paths" /> + android:name=".ui.screens.MainActivity" + android:exported="true" + android:launchMode="singleTask" + android:theme="@style/Theme.MyApp.Splash" + android:windowSoftInputMode="adjustResize"> + + + + + diff --git a/app/src/main/java/com/aritra/notify/NotifyApplication.kt b/app/src/main/java/com/aritra/notify/NotifyApplication.kt index c4468710..26979ba0 100644 --- a/app/src/main/java/com/aritra/notify/NotifyApplication.kt +++ b/app/src/main/java/com/aritra/notify/NotifyApplication.kt @@ -2,12 +2,19 @@ package com.aritra.notify import android.app.Application import com.aritra.notify.services.notification.createNotificationChannel +import com.aritra.notify.utils.AppShortcuts import dagger.hilt.android.HiltAndroidApp @HiltAndroidApp class NotifyApplication : Application() { + override fun onCreate() { super.onCreate() + + // creates the notification channel createNotificationChannel(this) + + // Adds the shortcuts + AppShortcuts.showShortCuts(this) } } diff --git a/app/src/main/java/com/aritra/notify/components/appbar/AddEditBottomBar.kt b/app/src/main/java/com/aritra/notify/components/appbar/AddEditBottomBar.kt index 252f704a..62f38950 100644 --- a/app/src/main/java/com/aritra/notify/components/appbar/AddEditBottomBar.kt +++ b/app/src/main/java/com/aritra/notify/components/appbar/AddEditBottomBar.kt @@ -105,8 +105,11 @@ fun AddEditBottomBar( onDismissRequest = { showSheet = false }, sheetState = sheetState, dragHandle = { BottomSheetDefaults.DragHandle() }, - windowInsets = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) WindowInsets.ime - else WindowInsets(0,0,0,0), + windowInsets = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) { + WindowInsets.ime + } else { + WindowInsets(0, 0, 0, 0) + }, content = { Column( modifier = Modifier diff --git a/app/src/main/java/com/aritra/notify/navigation/NavDeepLinks.kt b/app/src/main/java/com/aritra/notify/navigation/NavDeepLinks.kt new file mode 100644 index 00000000..92e14905 --- /dev/null +++ b/app/src/main/java/com/aritra/notify/navigation/NavDeepLinks.kt @@ -0,0 +1,12 @@ +package com.aritra.notify.navigation + +import androidx.core.net.toUri + +object NavDeepLinks { + + private const val BASE_URI = "app://com.aritra.notify" + + // deeplinks for add notes screen set to -1 means only to add note + val addNotesUriPattern = BASE_URI + NotifyScreens.AddEditNotes.name + "/{noteId}" + val addNotesUri = (BASE_URI + NotifyScreens.AddEditNotes.name + "/-1").toUri() +} diff --git a/app/src/main/java/com/aritra/notify/navigation/NotifyApp.kt b/app/src/main/java/com/aritra/notify/navigation/NotifyApp.kt index 97024a83..df021b9e 100644 --- a/app/src/main/java/com/aritra/notify/navigation/NotifyApp.kt +++ b/app/src/main/java/com/aritra/notify/navigation/NotifyApp.kt @@ -1,5 +1,6 @@ package com.aritra.notify.navigation +import android.content.Intent import android.widget.Toast import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding @@ -31,6 +32,7 @@ import androidx.navigation.compose.composable import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController import androidx.navigation.navArgument +import androidx.navigation.navDeepLink import com.aritra.notify.R import com.aritra.notify.ui.screens.notes.addEditScreen.route.AddEditRoute import com.aritra.notify.ui.screens.notes.homeScreen.NoteScreen @@ -101,7 +103,17 @@ fun NotifyApp(navController: NavHostController = rememberNavController()) { composable( route = "${NotifyScreens.AddEditNotes.name}/{noteId}", - arguments = listOf(navArgument("noteId") { type = IntType }) + arguments = listOf( + navArgument("noteId") { + type = IntType + } + ), + deepLinks = listOf( + navDeepLink { + uriPattern = NavDeepLinks.addNotesUriPattern + action = Intent.ACTION_VIEW + } + ) ) { backStack -> AddEditRoute( navController = navController, diff --git a/app/src/main/java/com/aritra/notify/ui/screens/MainActivity.kt b/app/src/main/java/com/aritra/notify/ui/screens/MainActivity.kt index c29a96d7..5fc699f1 100644 --- a/app/src/main/java/com/aritra/notify/ui/screens/MainActivity.kt +++ b/app/src/main/java/com/aritra/notify/ui/screens/MainActivity.kt @@ -10,6 +10,8 @@ import androidx.fragment.app.FragmentActivity import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle +import androidx.navigation.NavHostController +import androidx.navigation.compose.rememberNavController import com.aritra.notify.components.biometric.AppBioMetricManager import com.aritra.notify.navigation.NotifyApp import com.aritra.notify.ui.theme.NotifyTheme @@ -35,6 +37,8 @@ class MainActivity : FragmentActivity() { private lateinit var appUpdateManager: AppUpdateManager private val updateType = AppUpdateType.IMMEDIATE + private lateinit var navController: NavHostController + @Inject lateinit var appBioMetricManager: AppBioMetricManager @@ -54,14 +58,22 @@ class MainActivity : FragmentActivity() { } } setContent { + navController = rememberNavController() + NotifyTheme { - NotifyApp() + NotifyApp(navController = navController) } } setObservers() } + override fun onNewIntent(intent: Intent) { + super.onNewIntent(intent) + // handle deeplinks + navController.handleDeepLink(intent) + } + private val installStateUpdatedListener = InstallStateUpdatedListener { state -> if (state.installStatus() == InstallStatus.DOWNLOADED) { Toast.makeText( diff --git a/app/src/main/java/com/aritra/notify/ui/screens/notes/addEditScreen/AddEditScreen.kt b/app/src/main/java/com/aritra/notify/ui/screens/notes/addEditScreen/AddEditScreen.kt index 5490430e..1310d57c 100644 --- a/app/src/main/java/com/aritra/notify/ui/screens/notes/addEditScreen/AddEditScreen.kt +++ b/app/src/main/java/com/aritra/notify/ui/screens/notes/addEditScreen/AddEditScreen.kt @@ -313,11 +313,12 @@ fun AddEditScreen( ) DateTimeDialog( - isOpen = shouldShowDialogDateTime, isEdit = isEditDateTime, + isOpen = shouldShowDialogDateTime, + isEdit = isEditDateTime, onDateTimeUpdated = { onUpdateReminderDateTime(it) shouldShowDialogDateTime = false - }, + } ) { shouldShowDialogDateTime = false isEditDateTime = false diff --git a/app/src/main/java/com/aritra/notify/utils/AppShortcuts.kt b/app/src/main/java/com/aritra/notify/utils/AppShortcuts.kt new file mode 100644 index 00000000..5110a847 --- /dev/null +++ b/app/src/main/java/com/aritra/notify/utils/AppShortcuts.kt @@ -0,0 +1,37 @@ +package com.aritra.notify.utils + +import android.content.Context +import android.content.Intent +import android.util.Log +import androidx.core.content.pm.ShortcutInfoCompat +import androidx.core.content.pm.ShortcutManagerCompat +import androidx.core.graphics.drawable.IconCompat +import com.aritra.notify.R +import com.aritra.notify.navigation.NavDeepLinks +import com.aritra.notify.ui.screens.MainActivity + +object AppShortcuts { + + private fun createNoteShortCut(context: Context): ShortcutInfoCompat = + ShortcutInfoCompat.Builder(context, "add_new_note") + .setShortLabel(context.getString(R.string.add_new_note_shortcut_label)) + .setIcon(IconCompat.createWithResource(context, R.drawable.shortcut_add_icon)) + .setIntent( + Intent(context, MainActivity::class.java).apply { + // opens create note screen + data = NavDeepLinks.addNotesUri + action = Intent.ACTION_VIEW + } + ) + .build() + + fun showShortCuts(context: Context) { + val shortcut1 = createNoteShortCut(context) + try { + val isSuccess = ShortcutManagerCompat.addDynamicShortcuts(context, listOf(shortcut1)) + Log.d("SHORTCUTS", "CREATED $isSuccess") + } catch (e: Exception) { + Log.e("SHORTCUTS", "ERROR IN LAYING SHORTCUTS", e) + } + } +} diff --git a/app/src/main/res/drawable/shortcut_add_icon.xml b/app/src/main/res/drawable/shortcut_add_icon.xml new file mode 100644 index 00000000..d5395c15 --- /dev/null +++ b/app/src/main/res/drawable/shortcut_add_icon.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 10a3706a..87836548 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -42,14 +42,12 @@ Rate us on Google Play https://play.google.com/store/apps/details?id=com.aritra.notify Image - No Clicked Photos Clear Image Speech to Text Drawing Add image Take Photo Add Box - notify Request permission Notification permission The notification permission is important for this app. Please grant the permission. @@ -61,4 +59,5 @@ Set Reminder General By Aritra Das 💙 + Add New Note \ No newline at end of file