From db56c1c6fcc094785784096d36aa1ffff75e7b71 Mon Sep 17 00:00:00 2001 From: dhruvanand24 Date: Tue, 21 Jan 2025 13:37:29 +0530 Subject: [PATCH 1/6] Changed Package Name --- app/build.gradle.kts | 4 ++-- .../{iris => irisGPT}/ChatScreen.kt | 16 ++++++++-------- .../{iris => irisGPT}/Downloadable.kt | 2 +- .../{iris => irisGPT}/MainActivity.kt | 6 +++--- .../{iris => irisGPT}/MainViewModel.kt | 4 ++-- .../data/UserPreferencesRespository.kt | 2 +- .../{iris => irisGPT}/ui/AboutScreen.kt | 2 +- .../{iris => irisGPT}/ui/BenchMarkScreen.kt | 4 ++-- .../{iris => irisGPT}/ui/MainChatScreen.kt | 18 +++++++++--------- .../{iris => irisGPT}/ui/ModelsScreen.kt | 10 +++++----- .../{iris => irisGPT}/ui/ParametersScreen.kt | 6 +++--- .../{iris => irisGPT}/ui/SearchResultScreen.kt | 12 ++++++------ .../{iris => irisGPT}/ui/SettingsScreen.kt | 4 ++-- .../ui/components/ChatSection.kt | 6 +++--- .../ui/components/DownloadInfoModal.kt | 2 +- .../ui/components/DownloadModal.kt | 6 +++--- .../ui/components/LoadingModal.kt | 4 ++-- .../ui/components/ModelCard.kt | 6 +++--- .../{iris => irisGPT}/ui/theme/Color.kt | 2 +- .../{iris => irisGPT}/ui/theme/Theme.kt | 2 +- .../{iris => irisGPT}/ui/theme/Type.kt | 2 +- 21 files changed, 60 insertions(+), 60 deletions(-) rename app/src/main/java/com/nervesparks/{iris => irisGPT}/ChatScreen.kt (97%) rename app/src/main/java/com/nervesparks/{iris => irisGPT}/Downloadable.kt (99%) rename app/src/main/java/com/nervesparks/{iris => irisGPT}/MainActivity.kt (99%) rename app/src/main/java/com/nervesparks/{iris => irisGPT}/MainViewModel.kt (99%) rename app/src/main/java/com/nervesparks/{iris => irisGPT}/data/UserPreferencesRespository.kt (96%) rename app/src/main/java/com/nervesparks/{iris => irisGPT}/ui/AboutScreen.kt (99%) rename app/src/main/java/com/nervesparks/{iris => irisGPT}/ui/BenchMarkScreen.kt (98%) rename app/src/main/java/com/nervesparks/{iris => irisGPT}/ui/MainChatScreen.kt (99%) rename app/src/main/java/com/nervesparks/{iris => irisGPT}/ui/ModelsScreen.kt (96%) rename app/src/main/java/com/nervesparks/{iris => irisGPT}/ui/ParametersScreen.kt (98%) rename app/src/main/java/com/nervesparks/{iris => irisGPT}/ui/SearchResultScreen.kt (97%) rename app/src/main/java/com/nervesparks/{iris => irisGPT}/ui/SettingsScreen.kt (98%) rename app/src/main/java/com/nervesparks/{iris => irisGPT}/ui/components/ChatSection.kt (97%) rename app/src/main/java/com/nervesparks/{iris => irisGPT}/ui/components/DownloadInfoModal.kt (98%) rename app/src/main/java/com/nervesparks/{iris => irisGPT}/ui/components/DownloadModal.kt (95%) rename app/src/main/java/com/nervesparks/{iris => irisGPT}/ui/components/LoadingModal.kt (96%) rename app/src/main/java/com/nervesparks/{iris => irisGPT}/ui/components/ModelCard.kt (98%) rename app/src/main/java/com/nervesparks/{iris => irisGPT}/ui/theme/Color.kt (86%) rename app/src/main/java/com/nervesparks/{iris => irisGPT}/ui/theme/Theme.kt (98%) rename app/src/main/java/com/nervesparks/{iris => irisGPT}/ui/theme/Type.kt (95%) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a4087cb3..b28d067c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -4,13 +4,13 @@ plugins { } android { - namespace = "com.nervesparks.iris" + namespace = "com.nervesparks.irisGPT" compileSdk = 35 ndkVersion = "26.1.10909125" defaultConfig { - applicationId = "com.nervesparks.iris" + applicationId = "com.nervesparks.irisGPT" minSdk = 28 targetSdk = 34 versionCode = 1 diff --git a/app/src/main/java/com/nervesparks/iris/ChatScreen.kt b/app/src/main/java/com/nervesparks/irisGPT/ChatScreen.kt similarity index 97% rename from app/src/main/java/com/nervesparks/iris/ChatScreen.kt rename to app/src/main/java/com/nervesparks/irisGPT/ChatScreen.kt index a771f61a..15308dab 100644 --- a/app/src/main/java/com/nervesparks/iris/ChatScreen.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ChatScreen.kt @@ -1,4 +1,4 @@ -package com.nervesparks.iris +package com.nervesparks.irisGPT import android.annotation.SuppressLint import android.app.DownloadManager @@ -53,13 +53,13 @@ import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController -import com.nervesparks.iris.ui.AboutScreen -import com.nervesparks.iris.ui.BenchMarkScreen -import com.nervesparks.iris.ui.MainChatScreen -import com.nervesparks.iris.ui.ModelsScreen -import com.nervesparks.iris.ui.ParametersScreen -import com.nervesparks.iris.ui.SearchResultScreen -import com.nervesparks.iris.ui.SettingsScreen +import com.nervesparks.irisGPT.ui.AboutScreen +import com.nervesparks.irisGPT.ui.BenchMarkScreen +import com.nervesparks.irisGPT.ui.MainChatScreen +import com.nervesparks.irisGPT.ui.ModelsScreen +import com.nervesparks.irisGPT.ui.ParametersScreen +import com.nervesparks.irisGPT.ui.SearchResultScreen +import com.nervesparks.irisGPT.ui.SettingsScreen import java.io.File diff --git a/app/src/main/java/com/nervesparks/iris/Downloadable.kt b/app/src/main/java/com/nervesparks/irisGPT/Downloadable.kt similarity index 99% rename from app/src/main/java/com/nervesparks/iris/Downloadable.kt rename to app/src/main/java/com/nervesparks/irisGPT/Downloadable.kt index 5e7626dc..3e6645dc 100644 --- a/app/src/main/java/com/nervesparks/iris/Downloadable.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/Downloadable.kt @@ -1,4 +1,4 @@ -package com.nervesparks.iris +package com.nervesparks.irisGPT import android.app.DownloadManager import android.net.Uri diff --git a/app/src/main/java/com/nervesparks/iris/MainActivity.kt b/app/src/main/java/com/nervesparks/irisGPT/MainActivity.kt similarity index 99% rename from app/src/main/java/com/nervesparks/iris/MainActivity.kt rename to app/src/main/java/com/nervesparks/irisGPT/MainActivity.kt index ca2f03ee..3d8d0f70 100644 --- a/app/src/main/java/com/nervesparks/iris/MainActivity.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/MainActivity.kt @@ -1,4 +1,4 @@ -package com.nervesparks.iris +package com.nervesparks.irisGPT import android.app.DownloadManager import android.content.ClipboardManager @@ -62,8 +62,8 @@ import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.border import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider -import com.nervesparks.iris.data.UserPreferencesRepository -import com.nervesparks.iris.ui.SettingsBottomSheet +import com.nervesparks.irisGPT.data.UserPreferencesRepository +import com.nervesparks.irisGPT.ui.SettingsBottomSheet class MainViewModelFactory( diff --git a/app/src/main/java/com/nervesparks/iris/MainViewModel.kt b/app/src/main/java/com/nervesparks/irisGPT/MainViewModel.kt similarity index 99% rename from app/src/main/java/com/nervesparks/iris/MainViewModel.kt rename to app/src/main/java/com/nervesparks/irisGPT/MainViewModel.kt index dfbe2de9..2e69e6bf 100644 --- a/app/src/main/java/com/nervesparks/iris/MainViewModel.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/MainViewModel.kt @@ -1,4 +1,4 @@ -package com.nervesparks.iris +package com.nervesparks.irisGPT import android.content.Context import android.llama.cpp.LLamaAndroid @@ -14,7 +14,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.lifecycle.ViewModel -import com.nervesparks.iris.data.UserPreferencesRepository +import com.nervesparks.irisGPT.data.UserPreferencesRepository import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay diff --git a/app/src/main/java/com/nervesparks/iris/data/UserPreferencesRespository.kt b/app/src/main/java/com/nervesparks/irisGPT/data/UserPreferencesRespository.kt similarity index 96% rename from app/src/main/java/com/nervesparks/iris/data/UserPreferencesRespository.kt rename to app/src/main/java/com/nervesparks/irisGPT/data/UserPreferencesRespository.kt index 5e38ced1..416ec368 100644 --- a/app/src/main/java/com/nervesparks/iris/data/UserPreferencesRespository.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/data/UserPreferencesRespository.kt @@ -1,4 +1,4 @@ -package com.nervesparks.iris.data +package com.nervesparks.irisGPT.data import android.content.Context diff --git a/app/src/main/java/com/nervesparks/iris/ui/AboutScreen.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/AboutScreen.kt similarity index 99% rename from app/src/main/java/com/nervesparks/iris/ui/AboutScreen.kt rename to app/src/main/java/com/nervesparks/irisGPT/ui/AboutScreen.kt index 5bcc8169..b1b5e276 100644 --- a/app/src/main/java/com/nervesparks/iris/ui/AboutScreen.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/AboutScreen.kt @@ -1,4 +1,4 @@ -package com.nervesparks.iris.ui +package com.nervesparks.irisGPT.ui import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box diff --git a/app/src/main/java/com/nervesparks/iris/ui/BenchMarkScreen.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/BenchMarkScreen.kt similarity index 98% rename from app/src/main/java/com/nervesparks/iris/ui/BenchMarkScreen.kt rename to app/src/main/java/com/nervesparks/irisGPT/ui/BenchMarkScreen.kt index 008ac463..84ca1cd3 100644 --- a/app/src/main/java/com/nervesparks/iris/ui/BenchMarkScreen.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/BenchMarkScreen.kt @@ -1,4 +1,4 @@ -package com.nervesparks.iris.ui +package com.nervesparks.irisGPT.ui import android.os.Build import android.widget.Toast @@ -15,7 +15,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp -import com.nervesparks.iris.MainViewModel +import com.nervesparks.irisGPT.MainViewModel import kotlinx.coroutines.launch data class BenchmarkState( diff --git a/app/src/main/java/com/nervesparks/iris/ui/MainChatScreen.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/MainChatScreen.kt similarity index 99% rename from app/src/main/java/com/nervesparks/iris/ui/MainChatScreen.kt rename to app/src/main/java/com/nervesparks/irisGPT/ui/MainChatScreen.kt index bfe09baf..787d7fa4 100644 --- a/app/src/main/java/com/nervesparks/iris/ui/MainChatScreen.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/MainChatScreen.kt @@ -1,4 +1,4 @@ -package com.nervesparks.iris.ui +package com.nervesparks.irisGPT.ui import android.app.Activity import android.app.DownloadManager @@ -108,14 +108,14 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.toSize import androidx.compose.ui.window.Dialog -import com.nervesparks.iris.Downloadable -import com.nervesparks.iris.LinearGradient -import com.nervesparks.iris.MainViewModel - -import com.nervesparks.iris.R -import com.nervesparks.iris.ui.components.ChatMessageList -import com.nervesparks.iris.ui.components.DownloadModal -import com.nervesparks.iris.ui.components.LoadingModal +import com.nervesparks.irisGPT.Downloadable +import com.nervesparks.irisGPT.LinearGradient +import com.nervesparks.irisGPT.MainViewModel + +import com.nervesparks.irisGPT.R +import com.nervesparks.irisGPT.ui.components.ChatMessageList +import com.nervesparks.irisGPT.ui.components.DownloadModal +import com.nervesparks.irisGPT.ui.components.LoadingModal import kotlinx.coroutines.launch import java.io.File diff --git a/app/src/main/java/com/nervesparks/iris/ui/ModelsScreen.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/ModelsScreen.kt similarity index 96% rename from app/src/main/java/com/nervesparks/iris/ui/ModelsScreen.kt rename to app/src/main/java/com/nervesparks/irisGPT/ui/ModelsScreen.kt index d6d514ad..ad15c99f 100644 --- a/app/src/main/java/com/nervesparks/iris/ui/ModelsScreen.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/ModelsScreen.kt @@ -1,4 +1,4 @@ -package com.nervesparks.iris.ui +package com.nervesparks.irisGPT.ui import android.app.DownloadManager import androidx.compose.foundation.clickable @@ -23,10 +23,10 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import com.nervesparks.iris.MainViewModel -import com.nervesparks.iris.R -import com.nervesparks.iris.ui.components.LoadingModal -import com.nervesparks.iris.ui.components.ModelCard +import com.nervesparks.irisGPT.MainViewModel +import com.nervesparks.irisGPT.R +import com.nervesparks.irisGPT.ui.components.LoadingModal +import com.nervesparks.irisGPT.ui.components.ModelCard import java.io.File @Composable diff --git a/app/src/main/java/com/nervesparks/iris/ui/ParametersScreen.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/ParametersScreen.kt similarity index 98% rename from app/src/main/java/com/nervesparks/iris/ui/ParametersScreen.kt rename to app/src/main/java/com/nervesparks/irisGPT/ui/ParametersScreen.kt index df97933d..4d6c7ca2 100644 --- a/app/src/main/java/com/nervesparks/iris/ui/ParametersScreen.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/ParametersScreen.kt @@ -1,4 +1,4 @@ -package com.nervesparks.iris.ui +package com.nervesparks.irisGPT.ui import android.widget.Toast import androidx.compose.foundation.layout.Arrangement @@ -28,8 +28,8 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp -import com.nervesparks.iris.MainViewModel -import com.nervesparks.iris.ui.components.LoadingModal +import com.nervesparks.irisGPT.MainViewModel +import com.nervesparks.irisGPT.ui.components.LoadingModal @Composable diff --git a/app/src/main/java/com/nervesparks/iris/ui/SearchResultScreen.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/SearchResultScreen.kt similarity index 97% rename from app/src/main/java/com/nervesparks/iris/ui/SearchResultScreen.kt rename to app/src/main/java/com/nervesparks/irisGPT/ui/SearchResultScreen.kt index 593a9696..7002d481 100644 --- a/app/src/main/java/com/nervesparks/iris/ui/SearchResultScreen.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/SearchResultScreen.kt @@ -1,4 +1,4 @@ -package com.nervesparks.iris.ui +package com.nervesparks.irisGPT.ui import android.app.DownloadManager import android.util.Log @@ -45,11 +45,11 @@ import androidx.compose.ui.text.TextRange import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import com.nervesparks.iris.MainViewModel -import com.nervesparks.iris.R -import com.nervesparks.iris.ui.components.InfoModal -import com.nervesparks.iris.ui.components.LoadingModal -import com.nervesparks.iris.ui.components.ModelCard +import com.nervesparks.irisGPT.MainViewModel +import com.nervesparks.irisGPT.R +import com.nervesparks.irisGPT.ui.components.InfoModal +import com.nervesparks.irisGPT.ui.components.LoadingModal +import com.nervesparks.irisGPT.ui.components.ModelCard import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext diff --git a/app/src/main/java/com/nervesparks/iris/ui/SettingsScreen.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/SettingsScreen.kt similarity index 98% rename from app/src/main/java/com/nervesparks/iris/ui/SettingsScreen.kt rename to app/src/main/java/com/nervesparks/irisGPT/ui/SettingsScreen.kt index 4230e580..c9f85dfe 100644 --- a/app/src/main/java/com/nervesparks/iris/ui/SettingsScreen.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/SettingsScreen.kt @@ -1,4 +1,4 @@ -package com.nervesparks.iris.ui +package com.nervesparks.irisGPT.ui import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -15,7 +15,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import com.nervesparks.iris.R +import com.nervesparks.irisGPT.R @Composable fun SettingsScreen( diff --git a/app/src/main/java/com/nervesparks/iris/ui/components/ChatSection.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/components/ChatSection.kt similarity index 97% rename from app/src/main/java/com/nervesparks/iris/ui/components/ChatSection.kt rename to app/src/main/java/com/nervesparks/irisGPT/ui/components/ChatSection.kt index eecd27f2..edb9b210 100644 --- a/app/src/main/java/com/nervesparks/iris/ui/components/ChatSection.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/components/ChatSection.kt @@ -1,4 +1,4 @@ -package com.nervesparks.iris.ui.components +package com.nervesparks.irisGPT.ui.components import android.content.ClipboardManager import android.content.Context @@ -28,8 +28,8 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp -import com.nervesparks.iris.MainViewModel -import com.nervesparks.iris.R +import com.nervesparks.irisGPT.MainViewModel +import com.nervesparks.irisGPT.R @Composable diff --git a/app/src/main/java/com/nervesparks/iris/ui/components/DownloadInfoModal.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/components/DownloadInfoModal.kt similarity index 98% rename from app/src/main/java/com/nervesparks/iris/ui/components/DownloadInfoModal.kt rename to app/src/main/java/com/nervesparks/irisGPT/ui/components/DownloadInfoModal.kt index c1b61666..d9006432 100644 --- a/app/src/main/java/com/nervesparks/iris/ui/components/DownloadInfoModal.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/components/DownloadInfoModal.kt @@ -1,4 +1,4 @@ -package com.nervesparks.iris.ui.components +package com.nervesparks.irisGPT.ui.components import androidx.compose.foundation.background import androidx.compose.foundation.layout.* diff --git a/app/src/main/java/com/nervesparks/iris/ui/components/DownloadModal.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/components/DownloadModal.kt similarity index 95% rename from app/src/main/java/com/nervesparks/iris/ui/components/DownloadModal.kt rename to app/src/main/java/com/nervesparks/irisGPT/ui/components/DownloadModal.kt index 0b061c5d..ef1527fc 100644 --- a/app/src/main/java/com/nervesparks/iris/ui/components/DownloadModal.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/components/DownloadModal.kt @@ -1,4 +1,4 @@ -package com.nervesparks.iris.ui.components +package com.nervesparks.irisGPT.ui.components import android.app.DownloadManager import androidx.compose.foundation.layout.* @@ -13,8 +13,8 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog -import com.nervesparks.iris.Downloadable -import com.nervesparks.iris.MainViewModel +import com.nervesparks.irisGPT.Downloadable +import com.nervesparks.irisGPT.MainViewModel @Composable fun DownloadModal(viewModel: MainViewModel, dm: DownloadManager, models: List) { diff --git a/app/src/main/java/com/nervesparks/iris/ui/components/LoadingModal.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/components/LoadingModal.kt similarity index 96% rename from app/src/main/java/com/nervesparks/iris/ui/components/LoadingModal.kt rename to app/src/main/java/com/nervesparks/irisGPT/ui/components/LoadingModal.kt index 10e3bb77..c9b6947a 100644 --- a/app/src/main/java/com/nervesparks/iris/ui/components/LoadingModal.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/components/LoadingModal.kt @@ -1,4 +1,4 @@ -package com.nervesparks.iris.ui.components +package com.nervesparks.irisGPT.ui.components import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -18,7 +18,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog -import com.nervesparks.iris.MainViewModel +import com.nervesparks.irisGPT.MainViewModel @Composable fun LoadingModal(viewModel: MainViewModel){ diff --git a/app/src/main/java/com/nervesparks/iris/ui/components/ModelCard.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/components/ModelCard.kt similarity index 98% rename from app/src/main/java/com/nervesparks/iris/ui/components/ModelCard.kt rename to app/src/main/java/com/nervesparks/irisGPT/ui/components/ModelCard.kt index 5de92e72..1dc8353b 100644 --- a/app/src/main/java/com/nervesparks/iris/ui/components/ModelCard.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/components/ModelCard.kt @@ -1,4 +1,4 @@ -package com.nervesparks.iris.ui.components +package com.nervesparks.irisGPT.ui.components import android.app.DownloadManager import android.net.Uri @@ -15,8 +15,8 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import com.nervesparks.iris.Downloadable -import com.nervesparks.iris.MainViewModel +import com.nervesparks.irisGPT.Downloadable +import com.nervesparks.irisGPT.MainViewModel import kotlinx.coroutines.launch import java.io.File diff --git a/app/src/main/java/com/nervesparks/iris/ui/theme/Color.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/theme/Color.kt similarity index 86% rename from app/src/main/java/com/nervesparks/iris/ui/theme/Color.kt rename to app/src/main/java/com/nervesparks/irisGPT/ui/theme/Color.kt index 0b4d0883..f6442671 100644 --- a/app/src/main/java/com/nervesparks/iris/ui/theme/Color.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/theme/Color.kt @@ -1,4 +1,4 @@ -package com.nervesparks.iris.ui.theme +package com.nervesparks.irisGPT.ui.theme // //import androidx.compose.ui.graphics.Color // diff --git a/app/src/main/java/com/nervesparks/iris/ui/theme/Theme.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/theme/Theme.kt similarity index 98% rename from app/src/main/java/com/nervesparks/iris/ui/theme/Theme.kt rename to app/src/main/java/com/nervesparks/irisGPT/ui/theme/Theme.kt index 8f2d2b6f..7ca92e54 100644 --- a/app/src/main/java/com/nervesparks/iris/ui/theme/Theme.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/theme/Theme.kt @@ -1,4 +1,4 @@ -package com.nervesparks.iris.ui.theme +package com.nervesparks.irisGPT.ui.theme // //import android.app.Activity //import android.os.Build diff --git a/app/src/main/java/com/nervesparks/iris/ui/theme/Type.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/theme/Type.kt similarity index 95% rename from app/src/main/java/com/nervesparks/iris/ui/theme/Type.kt rename to app/src/main/java/com/nervesparks/irisGPT/ui/theme/Type.kt index 0a5bed8e..547f1fc5 100644 --- a/app/src/main/java/com/nervesparks/iris/ui/theme/Type.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/theme/Type.kt @@ -1,4 +1,4 @@ -package com.nervesparks.iris.ui.theme +package com.nervesparks.irisGPT.ui.theme import androidx.compose.material3.Typography import androidx.compose.ui.text.TextStyle From 942e77690c763a4121a9397e674cce4ce5c1534f Mon Sep 17 00:00:00 2001 From: dhruvanand24 Date: Mon, 27 Jan 2025 19:35:37 +0530 Subject: [PATCH 2/6] Added Report Feature --- app/.gitignore | 1 + app/build.gradle.kts | 10 +- .../nervesparks/irisGPT/ui/MainChatScreen.kt | 92 +++++++++++++++++-- build.gradle.kts | 1 + 4 files changed, 95 insertions(+), 9 deletions(-) diff --git a/app/.gitignore b/app/.gitignore index 796b96d1..cccc2074 100644 --- a/app/.gitignore +++ b/app/.gitignore @@ -1 +1,2 @@ /build +./google-services.json \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index b28d067c..cfdfd9ef 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,6 +1,8 @@ plugins { id("com.android.application") id("org.jetbrains.kotlin.android") + id("com.google.gms.google-services") + } android { @@ -13,8 +15,8 @@ android { applicationId = "com.nervesparks.irisGPT" minSdk = 28 targetSdk = 34 - versionCode = 1 - versionName = "1.0" + versionCode = 2 + versionName = "1.1" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { @@ -94,6 +96,10 @@ dependencies { implementation("androidx.core:core-splashscreen:1.0.1") implementation("com.squareup.okhttp3:okhttp:4.10.0") implementation("androidx.datastore:datastore-preferences:1.1.1") + implementation(platform("com.google.firebase:firebase-bom:33.8.0")) + implementation("com.google.firebase:firebase-firestore") + + diff --git a/app/src/main/java/com/nervesparks/irisGPT/ui/MainChatScreen.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/MainChatScreen.kt index 787d7fa4..3dc8b7e6 100644 --- a/app/src/main/java/com/nervesparks/irisGPT/ui/MainChatScreen.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/MainChatScreen.kt @@ -1,13 +1,17 @@ package com.nervesparks.irisGPT.ui +import android.annotation.SuppressLint import android.app.Activity import android.app.DownloadManager import android.content.ClipboardManager import android.content.Context import android.content.Intent import android.net.Uri +import android.os.Build import android.speech.RecognizerIntent +import android.util.Log import android.widget.Toast +import androidx.activity.compose.ReportDrawn import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.animation.AnimatedVisibility @@ -66,7 +70,6 @@ import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.OutlinedTextFieldDefaults import androidx.compose.material3.SheetState -import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.material3.TextField @@ -107,17 +110,20 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.toSize -import androidx.compose.ui.window.Dialog +import com.google.firebase.Firebase +import com.google.firebase.firestore.FirebaseFirestore +import com.google.firebase.firestore.firestore import com.nervesparks.irisGPT.Downloadable import com.nervesparks.irisGPT.LinearGradient import com.nervesparks.irisGPT.MainViewModel - import com.nervesparks.irisGPT.R -import com.nervesparks.irisGPT.ui.components.ChatMessageList import com.nervesparks.irisGPT.ui.components.DownloadModal import com.nervesparks.irisGPT.ui.components.LoadingModal - +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.coroutines.tasks.await +import kotlinx.coroutines.withContext import java.io.File @@ -1062,7 +1068,6 @@ fun MessageBottomSheet( .fillMaxWidth() .fillMaxWidth() .padding(vertical = 5.dp) - ) { // Copy Text Button TextButton( @@ -1116,6 +1121,46 @@ fun MessageBottomSheet( ) } + // Report Content Button +// TextButton( +// colors = ButtonDefaults.buttonColors(Color(0xFF171E2C)), +// modifier = Modifier +// .fillMaxWidth() +// .padding(vertical = 8.dp), +// onClick = { +// val deviceName = Build.MODEL +// +// // Create report data +// val reportData = ReportContent( +// message = message, +// modelName = viewModel.loadedModelName.value, +// deviceName = deviceName, +// topP = viewModel.topP, +// topK = viewModel.topK, +// temperature = viewModel.temp, +// chatHistory = viewModel.messages, +// timestamp = System.currentTimeMillis() +// ) +// +// // Send to MongoDB +// CoroutineScope(Dispatchers.IO).launch { +// try { +// sendReportToFirebase(reportData) +// withContext(Dispatchers.Main) { +// Toast.makeText(context, "Report submitted successfully", Toast.LENGTH_SHORT).show() +// } +// } catch (e: Exception) { +// withContext(Dispatchers.Main) { +// Toast.makeText(context, "Failed to submit report", Toast.LENGTH_SHORT).show() +// } +// } +// } +// onDismiss() +// } +// ) { +// Text(text = "Report Content", color = Color(0xFFA0A0A5)) +// } + // Selection Container LazyColumn(state = sheetScrollState) { item { @@ -1141,4 +1186,37 @@ fun MessageBottomSheet( } } -} \ No newline at end of file +} + +//data class ReportContent( +// val message: String, +// val modelName: String, +// val deviceName: String, +// val topP: Float, +// val topK: Int, +// val temperature: Float, +// val chatHistory: List>, +// val timestamp: Long +//) +// +// +//// Function to send report to MongoDB +//suspend fun sendReportToFirebase(reportContent: ReportContent) { +// try { +// // Initialize Firestore +// val db = Firebase.firestore +// +// // Add the ReportContent object to the "reports" collection in Firestore +// db.collection("reports") +// .add(reportContent) +// .addOnSuccessListener { documentReference -> +// Log.d("Firebase", "DocumentSnapshot added with ID: ${documentReference.id}") +// } +// .addOnFailureListener { e -> +// Log.w("Firebase", "Error adding document", e) +// } +// } catch (e: Exception) { +// e.printStackTrace() +// Log.e("Firebase", "Failed to send report to Firebase Firestore: ${e.message}") +// } +//} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 48190392..f6cb9864 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,4 +3,5 @@ plugins { id("com.android.application") version "8.5.2" apply false id("org.jetbrains.kotlin.android") version "1.9.0" apply false id("com.android.library") version "8.5.2" apply false + id("com.google.gms.google-services") version "4.4.2" apply false } From a6a3975d54ac195521cea15ef18b09a2897012a7 Mon Sep 17 00:00:00 2001 From: dhruvanand24 Date: Tue, 28 Jan 2025 12:18:25 +0530 Subject: [PATCH 3/6] Added Instructions to report content and added Loader animation --- .../com/nervesparks/irisGPT/MainViewModel.kt | 8 +- .../com/nervesparks/irisGPT/ui/AboutScreen.kt | 12 +- .../nervesparks/irisGPT/ui/MainChatScreen.kt | 214 ++++++++++++------ 3 files changed, 156 insertions(+), 78 deletions(-) diff --git a/app/src/main/java/com/nervesparks/irisGPT/MainViewModel.kt b/app/src/main/java/com/nervesparks/irisGPT/MainViewModel.kt index 2e69e6bf..c9a083a4 100644 --- a/app/src/main/java/com/nervesparks/irisGPT/MainViewModel.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/MainViewModel.kt @@ -14,6 +14,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewmodel.compose.viewModel import com.nervesparks.irisGPT.data.UserPreferencesRepository import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -98,7 +99,7 @@ class MainViewModel(private val llamaAndroid: LLamaAndroid = LLamaAndroid.instan private set var eot_str = "" - + var showLoader = false var refresh by mutableStateOf(false) @@ -253,6 +254,7 @@ class MainViewModel(private val llamaAndroid: LLamaAndroid = LLamaAndroid.instan } fun send() { + showLoader = true val userMessage = removeExtraWhiteSpaces(message) message = "" @@ -278,15 +280,18 @@ class MainViewModel(private val llamaAndroid: LLamaAndroid = LLamaAndroid.instan .collect { response -> // Create a new assistant message with the response if (getIsMarked()) { + showLoader = false addMessage("codeBlock", response) } else { + showLoader = false addMessage("assistant", response) } } } finally { if (!getIsCompleteEOT()) { + showLoader = false trimEOT() } } @@ -487,6 +492,7 @@ class MainViewModel(private val llamaAndroid: LLamaAndroid = LLamaAndroid.instan } fun stop() { + showLoader = false llamaAndroid.stopTextGeneration() } diff --git a/app/src/main/java/com/nervesparks/irisGPT/ui/AboutScreen.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/AboutScreen.kt index b1b5e276..255e1f33 100644 --- a/app/src/main/java/com/nervesparks/irisGPT/ui/AboutScreen.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/AboutScreen.kt @@ -182,5 +182,13 @@ private val faqs = listOf( "\n" + "Go to Settings > Models.\n" + "Select the model you want to delete.\n" + - "Click the Delete button." -) \ No newline at end of file + "Click the Delete button.", + "How do I report inappropriate content?" to "Models sometimes may generate inappropriate content, If you encounter content that seems inappropriate or concerning, you can report it in a few simple steps:\n" + + "\n" + + "Ensure your device is connected to the internet\n"+ + "Press and hold (long press) on the message or generated content you want to report\n"+ + "When the menu appears, select the 'Report Content' button\n"+ + "\n \nOur team reviews all reports to help maintain a safe environment for all users. Thank you for helping us improve our service." +) + + diff --git a/app/src/main/java/com/nervesparks/irisGPT/ui/MainChatScreen.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/MainChatScreen.kt index 3dc8b7e6..103bd063 100644 --- a/app/src/main/java/com/nervesparks/irisGPT/ui/MainChatScreen.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/MainChatScreen.kt @@ -1,6 +1,5 @@ package com.nervesparks.irisGPT.ui -import android.annotation.SuppressLint import android.app.Activity import android.app.DownloadManager import android.content.ClipboardManager @@ -11,10 +10,14 @@ import android.os.Build import android.speech.RecognizerIntent import android.util.Log import android.widget.Toast -import androidx.activity.compose.ReportDrawn import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.core.LinearEasing +import androidx.compose.animation.core.animateFloat +import androidx.compose.animation.core.infiniteRepeatable +import androidx.compose.animation.core.keyframes +import androidx.compose.animation.core.rememberInfiniteTransition import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.foundation.BorderStroke @@ -37,6 +40,7 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.ime +import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width @@ -122,7 +126,6 @@ import com.nervesparks.irisGPT.ui.components.LoadingModal import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import kotlinx.coroutines.tasks.await import kotlinx.coroutines.withContext import java.io.File @@ -158,8 +161,9 @@ fun MainChatScreen ( val allModelsExist = models.all { model -> model.destination.exists() } val Prompts_Home = listOf( "Explains complex topics simply.", - "Remembers previous inputs.", - "May sometimes be inaccurate." + "May sometimes be inaccurate.", + "Long Press on messages to report.", + ) var recognizedText by remember { mutableStateOf("") } val speechRecognizerLauncher = rememberLauncherForActivityResult(contract = ActivityResultContracts.StartActivityForResult()) { @@ -512,6 +516,12 @@ fun MainChatScreen ( } } } + item { + Box (modifier = Modifier.padding(start = 10.dp)) { if(viewModel.showLoader){ + DotsTyping() + } } + + } item { Spacer(modifier = Modifier .height(1.dp) @@ -1122,44 +1132,44 @@ fun MessageBottomSheet( } // Report Content Button -// TextButton( -// colors = ButtonDefaults.buttonColors(Color(0xFF171E2C)), -// modifier = Modifier -// .fillMaxWidth() -// .padding(vertical = 8.dp), -// onClick = { -// val deviceName = Build.MODEL -// -// // Create report data -// val reportData = ReportContent( -// message = message, -// modelName = viewModel.loadedModelName.value, -// deviceName = deviceName, -// topP = viewModel.topP, -// topK = viewModel.topK, -// temperature = viewModel.temp, -// chatHistory = viewModel.messages, -// timestamp = System.currentTimeMillis() -// ) -// -// // Send to MongoDB -// CoroutineScope(Dispatchers.IO).launch { -// try { -// sendReportToFirebase(reportData) -// withContext(Dispatchers.Main) { -// Toast.makeText(context, "Report submitted successfully", Toast.LENGTH_SHORT).show() -// } -// } catch (e: Exception) { -// withContext(Dispatchers.Main) { -// Toast.makeText(context, "Failed to submit report", Toast.LENGTH_SHORT).show() -// } -// } -// } -// onDismiss() -// } -// ) { -// Text(text = "Report Content", color = Color(0xFFA0A0A5)) -// } + TextButton( + colors = ButtonDefaults.buttonColors(Color(0xFF171E2C)), + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 8.dp), + onClick = { + val deviceName = Build.MODEL + + // Create report data + val reportData = ReportContent( + message = message, + modelName = viewModel.loadedModelName.value, + deviceName = deviceName, + topP = viewModel.topP, + topK = viewModel.topK, + temperature = viewModel.temp, + chatHistory = viewModel.messages, + timestamp = System.currentTimeMillis() + ) + + // Send to MongoDB + CoroutineScope(Dispatchers.IO).launch { + try { + sendReportToFirebase(reportData) + withContext(Dispatchers.Main) { + Toast.makeText(context, "Report submitted successfully", Toast.LENGTH_SHORT).show() + } + } catch (e: Exception) { + withContext(Dispatchers.Main) { + Toast.makeText(context, "Failed to submit report", Toast.LENGTH_SHORT).show() + } + } + } + onDismiss() + } + ) { + Text(text = "Report Content", color = Color(0xFFA0A0A5)) + } // Selection Container LazyColumn(state = sheetScrollState) { @@ -1188,35 +1198,89 @@ fun MessageBottomSheet( } -//data class ReportContent( -// val message: String, -// val modelName: String, -// val deviceName: String, -// val topP: Float, -// val topK: Int, -// val temperature: Float, -// val chatHistory: List>, -// val timestamp: Long -//) -// -// -//// Function to send report to MongoDB -//suspend fun sendReportToFirebase(reportContent: ReportContent) { -// try { -// // Initialize Firestore -// val db = Firebase.firestore -// -// // Add the ReportContent object to the "reports" collection in Firestore -// db.collection("reports") -// .add(reportContent) -// .addOnSuccessListener { documentReference -> -// Log.d("Firebase", "DocumentSnapshot added with ID: ${documentReference.id}") -// } -// .addOnFailureListener { e -> -// Log.w("Firebase", "Error adding document", e) -// } -// } catch (e: Exception) { -// e.printStackTrace() -// Log.e("Firebase", "Failed to send report to Firebase Firestore: ${e.message}") -// } -//} \ No newline at end of file +data class ReportContent( + val message: String, + val modelName: String, + val deviceName: String, + val topP: Float, + val topK: Int, + val temperature: Float, + val chatHistory: List>, + val timestamp: Long +) + + +// Function to send report to MongoDB +suspend fun sendReportToFirebase(reportContent: ReportContent) { + try { + // Initialize Firestore + val db = Firebase.firestore + + // Add the ReportContent object to the "reports" collection in Firestore + db.collection("reports") + .add(reportContent) + .addOnSuccessListener { documentReference -> + Log.d("Firebase", "DocumentSnapshot added with ID: ${documentReference.id}") + } + .addOnFailureListener { e -> + Log.w("Firebase", "Error adding document", e) + } + } catch (e: Exception) { + e.printStackTrace() + Log.e("Firebase", "Failed to send report to Firebase Firestore: ${e.message}") + } +} + +@Composable +fun DotsTyping() { + val dotSize = 8.dp // made it bigger for demo + val delayUnit = 300 // you can change delay to change animation speed + val maxOffset = 10f + + @Composable + fun Dot( + offset: Float + ) = Spacer( + Modifier + .size(dotSize) + .offset(y = -offset.dp) + .background( + color = Color.LightGray, + shape = CircleShape + ) + ) + + val infiniteTransition = rememberInfiniteTransition() + + @Composable + fun animateOffsetWithDelay(delay: Int) = infiniteTransition.animateFloat( + initialValue = 0f, + targetValue = 0f, + animationSpec = infiniteRepeatable( + animation = keyframes { + durationMillis = delayUnit * 4 + 0f at delay with LinearEasing + maxOffset at delay + delayUnit with LinearEasing + 0f at delay + delayUnit * 2 + } + ) + ) + + val offset1 by animateOffsetWithDelay(0) + val offset2 by animateOffsetWithDelay(delayUnit) + val offset3 by animateOffsetWithDelay(delayUnit * 2) + + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center, + modifier = Modifier.padding(top = maxOffset.dp) + ) { + val spaceSize = 2.dp + + Dot(offset1) + Spacer(Modifier.width(spaceSize)) + Dot(offset2) + Spacer(Modifier.width(spaceSize)) + Dot(offset3) + } +} \ No newline at end of file From d3ae2ae7e05f7b006140f61846b2169ee4f83da9 Mon Sep 17 00:00:00 2001 From: dhruvanand24 Date: Tue, 28 Jan 2025 16:51:44 +0530 Subject: [PATCH 4/6] Improved Report handling logic and added report page --- app/build.gradle.kts | 2 +- .../com/nervesparks/irisGPT/ChatScreen.kt | 8 + .../nervesparks/irisGPT/ui/MainChatScreen.kt | 42 +++- .../java/com/nervesparks/irisGPT/ui/Report.kt | 217 ++++++++++++++++++ .../nervesparks/irisGPT/ui/SettingsScreen.kt | 8 + .../main/res/drawable/report_svgrepo_com.xml | 12 + app/src/main/res/values/strings.xml | 1 + 7 files changed, 280 insertions(+), 10 deletions(-) create mode 100644 app/src/main/java/com/nervesparks/irisGPT/ui/Report.kt create mode 100644 app/src/main/res/drawable/report_svgrepo_com.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index cfdfd9ef..98b4b5ef 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -15,7 +15,7 @@ android { applicationId = "com.nervesparks.irisGPT" minSdk = 28 targetSdk = 34 - versionCode = 2 + versionCode = 3 versionName = "1.1" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/com/nervesparks/irisGPT/ChatScreen.kt b/app/src/main/java/com/nervesparks/irisGPT/ChatScreen.kt index 15308dab..79c7557d 100644 --- a/app/src/main/java/com/nervesparks/irisGPT/ChatScreen.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ChatScreen.kt @@ -58,6 +58,7 @@ import com.nervesparks.irisGPT.ui.BenchMarkScreen import com.nervesparks.irisGPT.ui.MainChatScreen import com.nervesparks.irisGPT.ui.ModelsScreen import com.nervesparks.irisGPT.ui.ParametersScreen +import com.nervesparks.irisGPT.ui.ReportScreen import com.nervesparks.irisGPT.ui.SearchResultScreen import com.nervesparks.irisGPT.ui.SettingsScreen import java.io.File @@ -71,6 +72,7 @@ enum class ChatScreen(@StringRes val title: Int) { ParamsScreen(title = R.string.parameters_screen_title), AboutScreen(title = R.string.about_screen_title), BenchMarkScreen(title = R.string.benchmark_screen_title), + ReportScreen(title = R.string.report_screen_title) } @@ -291,6 +293,9 @@ fun ChatScreen( }, onBenchMarkScreenButtonClicked = { navController.navigate((ChatScreen.BenchMarkScreen.name)) + }, + onReportScreenButtonClicked = { + navController.navigate((ChatScreen.ReportScreen.name)) } ) @@ -317,6 +322,9 @@ fun ChatScreen( composable(route = ChatScreen.BenchMarkScreen.name){ BenchMarkScreen(viewModel) } + composable(route = ChatScreen.ReportScreen.name){ + ReportScreen(viewModel) + } } } } diff --git a/app/src/main/java/com/nervesparks/irisGPT/ui/MainChatScreen.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/MainChatScreen.kt index 103bd063..c8b172cc 100644 --- a/app/src/main/java/com/nervesparks/irisGPT/ui/MainChatScreen.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/MainChatScreen.kt @@ -5,6 +5,8 @@ import android.app.DownloadManager import android.content.ClipboardManager import android.content.Context import android.content.Intent +import android.net.ConnectivityManager +import android.net.NetworkCapabilities import android.net.Uri import android.os.Build import android.speech.RecognizerIntent @@ -128,6 +130,8 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.io.File +import kotlin.coroutines.resume +import kotlin.coroutines.suspendCoroutine @OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class) @@ -1137,7 +1141,12 @@ fun MessageBottomSheet( modifier = Modifier .fillMaxWidth() .padding(vertical = 8.dp), - onClick = { + onClick = onClick@{ + if (!isInternetAvailableMain(context)) { + Toast.makeText(context, "Internet connection required", Toast.LENGTH_LONG).show() + return@onClick + } + val deviceName = Build.MODEL // Create report data @@ -1152,20 +1161,23 @@ fun MessageBottomSheet( timestamp = System.currentTimeMillis() ) - // Send to MongoDB CoroutineScope(Dispatchers.IO).launch { try { - sendReportToFirebase(reportData) + val success = sendReportToFirebase(reportData) withContext(Dispatchers.Main) { - Toast.makeText(context, "Report submitted successfully", Toast.LENGTH_SHORT).show() + if (success) { + Toast.makeText(context, "Report submitted successfully", Toast.LENGTH_SHORT).show() + onDismiss() + } else { + Toast.makeText(context, "Failed to submit report", Toast.LENGTH_SHORT).show() + } } } catch (e: Exception) { withContext(Dispatchers.Main) { - Toast.makeText(context, "Failed to submit report", Toast.LENGTH_SHORT).show() + Toast.makeText(context, "Failed to submit report: ${e.message}", Toast.LENGTH_SHORT).show() } } } - onDismiss() } ) { Text(text = "Report Content", color = Color(0xFFA0A0A5)) @@ -1211,23 +1223,24 @@ data class ReportContent( // Function to send report to MongoDB -suspend fun sendReportToFirebase(reportContent: ReportContent) { +suspend fun sendReportToFirebase(reportContent: ReportContent): Boolean = suspendCoroutine { continuation -> try { - // Initialize Firestore val db = Firebase.firestore - // Add the ReportContent object to the "reports" collection in Firestore db.collection("reports") .add(reportContent) .addOnSuccessListener { documentReference -> Log.d("Firebase", "DocumentSnapshot added with ID: ${documentReference.id}") + continuation.resume(true) } .addOnFailureListener { e -> Log.w("Firebase", "Error adding document", e) + continuation.resume(false) } } catch (e: Exception) { e.printStackTrace() Log.e("Firebase", "Failed to send report to Firebase Firestore: ${e.message}") + continuation.resume(false) } } @@ -1283,4 +1296,15 @@ fun DotsTyping() { Spacer(Modifier.width(spaceSize)) Dot(offset3) } +} +fun isInternetAvailableMain(context: Context): Boolean { + val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + val network = connectivityManager.activeNetwork ?: return false + val capabilities = connectivityManager.getNetworkCapabilities(network) ?: return false + return capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + } else { + val networkInfo = connectivityManager.activeNetworkInfo ?: return false + return networkInfo.isConnected + } } \ No newline at end of file diff --git a/app/src/main/java/com/nervesparks/irisGPT/ui/Report.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/Report.kt new file mode 100644 index 00000000..5f212d7f --- /dev/null +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/Report.kt @@ -0,0 +1,217 @@ +package com.nervesparks.irisGPT.ui + +import android.app.ActivityManager +import android.content.Context +import android.net.ConnectivityManager +import android.net.NetworkCapabilities +import android.os.Build +import android.util.Log +import android.widget.Toast +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.unit.dp +import com.google.firebase.Firebase +import com.google.firebase.firestore.firestore +import com.nervesparks.irisGPT.MainViewModel +import kotlinx.coroutines.launch +import kotlin.coroutines.resume +import kotlin.coroutines.suspendCoroutine + +data class DeviceInfo( + val manufacturer: String = Build.MANUFACTURER, + val model: String = Build.MODEL, + val processor: String = Build.HARDWARE, + val totalRam: Long = 0, + val availableRam: Long = 0 +) + +data class ReportContentNew( + val reportText: String = "", + val deviceInfo: DeviceInfo = DeviceInfo(), + val modelTemp: Float = 0f, + val modelTopP: Float = 0f, + val modelTopK: Int = 0, + val modelHistory: List> = emptyList() +) + +fun isInternetAvailable(context: Context): Boolean { + val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + val network = connectivityManager.activeNetwork ?: return false + val capabilities = connectivityManager.getNetworkCapabilities(network) ?: return false + return capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + } else { + val networkInfo = connectivityManager.activeNetworkInfo ?: return false + return networkInfo.isConnected + } +} + +@Composable +fun ReportScreen( + viewModel: MainViewModel, + modifier: Modifier = Modifier +) { + val context = LocalContext.current + val scope = rememberCoroutineScope() + var reportText by remember { mutableStateOf("") } + var isSending by remember { mutableStateOf(false) } + var showError by remember { mutableStateOf(false) } + var errorMessage by remember { mutableStateOf("") } + + Column( + modifier = modifier + .fillMaxSize() + .padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + OutlinedTextField( + value = reportText, + onValueChange = { reportText = it }, + label = { Text("Report Content") }, + modifier = Modifier + .fillMaxWidth() + .weight(1f), + enabled = !isSending, + colors = OutlinedTextFieldDefaults.colors( + unfocusedBorderColor = Color(0xFF666666), + focusedBorderColor = Color(0xFFcfcfd1), + unfocusedLabelColor = Color(0xFF666666), + focusedLabelColor = Color(0xFFcfcfd1), + unfocusedTextColor = Color(0xFFf5f5f5), + focusedTextColor = Color(0xFFf7f5f5), + ) + ) + + if (showError) { + Text( + text = errorMessage, + color = Color.Red, + modifier = Modifier.padding(vertical = 8.dp) + ) + } + + Button( + modifier = Modifier + .fillMaxWidth() + .height(56.dp), + colors = ButtonDefaults.buttonColors( + containerColor = Color(0xFF2563EB), + contentColor = Color.White, + disabledContainerColor = Color(0xFF2563EB).copy(alpha = 0.6f), + disabledContentColor = Color.White.copy(alpha = 0.6f) + ), + shape = RoundedCornerShape(8.dp), + elevation = ButtonDefaults.buttonElevation( + defaultElevation = 2.dp, + pressedElevation = 1.dp + ), + onClick = { + scope.launch { + if (!isInternetAvailable(context)) { + showError = true + errorMessage = "Internet connection required" + Toast.makeText(context, "No internet connection", Toast.LENGTH_LONG).show() + return@launch + } + + isSending = true + showError = false + try { + val reportContent = createReportContent( + context, + reportText, + viewModel + ) + val success = sendReportToFirebaseNew(reportContent) + if (success) { + reportText = "" + Toast.makeText(context, "Report sent successfully", Toast.LENGTH_SHORT).show() + } else { + showError = true + errorMessage = "Failed to send report" + Toast.makeText(context, "Failed to send report", Toast.LENGTH_LONG).show() + } + } catch (e: Exception) { + Log.e("ReportScreen", "Error sending report", e) + showError = true + errorMessage = e.message ?: "Unknown error occurred" + Toast.makeText(context, "Error: ${e.message}", Toast.LENGTH_LONG).show() + } finally { + isSending = false + } + } + }, + enabled = reportText.isNotBlank() && !isSending, + ) { + Row( + horizontalArrangement = Arrangement.Center, + modifier = Modifier.fillMaxWidth() + ) { + if (isSending) { + CircularProgressIndicator( + modifier = Modifier.size(24.dp), + color = Color.White, + strokeWidth = 2.dp + ) + } else { + Text( + "Send Report", + style = MaterialTheme.typography.bodyLarge + ) + } + } + } + } +} + +suspend fun sendReportToFirebaseNew(reportContent: ReportContentNew): Boolean = suspendCoroutine { continuation -> + try { + val db = Firebase.firestore + db.collection("reports") + .add(reportContent) + .addOnSuccessListener { documentReference -> + Log.d("Firebase", "DocumentSnapshot added with ID: ${documentReference.id}") + continuation.resume(true) + } + .addOnFailureListener { e -> + Log.w("Firebase", "Error adding document", e) + continuation.resume(false) + } + } catch (e: Exception) { + e.printStackTrace() + Log.e("Firebase", "Failed to send report to Firebase Firestore: ${e.message}") + continuation.resume(false) + } +} + +private fun createReportContent( + context: Context, + reportText: String, + viewModel: MainViewModel +): ReportContentNew { + val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager + val memoryInfo = ActivityManager.MemoryInfo() + activityManager.getMemoryInfo(memoryInfo) + + val deviceInfo = DeviceInfo( + manufacturer = Build.MANUFACTURER, + model = Build.MODEL, + processor = Build.HARDWARE, + totalRam = memoryInfo.totalMem, + availableRam = memoryInfo.availMem + ) + + return ReportContentNew( + reportText = reportText, + deviceInfo = deviceInfo, + modelTemp = viewModel.temp, + modelTopP = viewModel.topP, + modelTopK = viewModel.topK, + modelHistory = viewModel.messages + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/nervesparks/irisGPT/ui/SettingsScreen.kt b/app/src/main/java/com/nervesparks/irisGPT/ui/SettingsScreen.kt index c9f85dfe..b21342e2 100644 --- a/app/src/main/java/com/nervesparks/irisGPT/ui/SettingsScreen.kt +++ b/app/src/main/java/com/nervesparks/irisGPT/ui/SettingsScreen.kt @@ -23,6 +23,7 @@ fun SettingsScreen( onModelsScreenButtonClicked: () -> Unit, onAboutScreenButtonClicked: () -> Unit, onBenchMarkScreenButtonClicked: () -> Unit, + onReportScreenButtonClicked: () -> Unit, ) { Box(modifier = Modifier.fillMaxSize()) { LazyColumn( @@ -68,6 +69,13 @@ fun SettingsScreen( iconRes = R.drawable.information_outline_svgrepo_com, onClick = onAboutScreenButtonClicked ) + SettingsDivider() + + SettingsRow( + text = "Report", + iconRes = R.drawable.report_svgrepo_com, + onClick = onReportScreenButtonClicked + ) } } } diff --git a/app/src/main/res/drawable/report_svgrepo_com.xml b/app/src/main/res/drawable/report_svgrepo_com.xml new file mode 100644 index 00000000..508b4a04 --- /dev/null +++ b/app/src/main/res/drawable/report_svgrepo_com.xml @@ -0,0 +1,12 @@ + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bec1d898..69de2126 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,5 +8,6 @@ Setting About BenchMark + Report Refresh From a92dc83309ea9b29962140e54f9e6ead9d7984c7 Mon Sep 17 00:00:00 2001 From: VarunWeb6 Date: Fri, 31 Jan 2025 13:01:31 +0530 Subject: [PATCH 5/6] changes in ui scroll cards and download text in modal --- .../com/nervesparks/iris/ui/MainChatScreen.kt | 18 +++++++++--------- .../iris/ui/components/DownloadModal.kt | 19 +++++++++++++++++-- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/nervesparks/iris/ui/MainChatScreen.kt b/app/src/main/java/com/nervesparks/iris/ui/MainChatScreen.kt index bfe09baf..a0f78815 100644 --- a/app/src/main/java/com/nervesparks/iris/ui/MainChatScreen.kt +++ b/app/src/main/java/com/nervesparks/iris/ui/MainChatScreen.kt @@ -137,16 +137,16 @@ fun MainChatScreen ( val focusManager = LocalFocusManager.current println("Thread started: ${Thread.currentThread().name}") val Prompts = listOf( - "Explain the strategic turning points of the Battle of Midway during World War II", - "Describe the innovative technologies that are transforming renewable energy production", - "Outline the core consulting services provided by management consulting firms like McKinsey", - "Walk me through a systematic approach to debugging a complex software issue", - "Trace the architectural and cultural evolution of Paris from medieval times to the modern era", - "Highlight the architectural marvels of Paris, from the Eiffel Tower to the hidden gems of Montmartre", - "Recommend a targeted 15-minute daily routine to improve posture and reduce back pain", + "Explain how to develop a consistent reading habit.", + "Write an email to your manager requesting work-from-home approval for a day.", + "Suggest time management strategies for handling multiple deadlines effectively.", + "Draft a professional LinkedIn message to connect with a recruiter.", + "Suggest ways to practice mindfulness in a busy daily schedule.", + "Recommend a 15-minute daily workout routine to stay fit with a busy schedule.", + "Provide a simple and polite Spanish translation of 'Excuse me, can you help me?' with explanation.", "List the top 5 science fiction novels that have most influenced modern technological thinking", - "Provide a precise Spanish translation of 'Innovation drives progress' with grammatical explanations", - "Analyze the impact of artificial intelligence on global economic and social landscapes in 2024" + "List security tips to protect personal information online.", + "Recommend three books that can improve communication skills." ) val allModelsExist = models.all { model -> model.destination.exists() } diff --git a/app/src/main/java/com/nervesparks/iris/ui/components/DownloadModal.kt b/app/src/main/java/com/nervesparks/iris/ui/components/DownloadModal.kt index 0b061c5d..50aede09 100644 --- a/app/src/main/java/com/nervesparks/iris/ui/components/DownloadModal.kt +++ b/app/src/main/java/com/nervesparks/iris/ui/components/DownloadModal.kt @@ -12,10 +12,13 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import androidx.compose.ui.window.Dialog import com.nervesparks.iris.Downloadable import com.nervesparks.iris.MainViewModel + + @Composable fun DownloadModal(viewModel: MainViewModel, dm: DownloadManager, models: List) { Dialog(onDismissRequest = {}) { @@ -33,7 +36,7 @@ fun DownloadModal(viewModel: MainViewModel, dm: DownloadManager, models: List Date: Fri, 31 Jan 2025 18:04:18 +0530 Subject: [PATCH 6/6] changes in ui scroll cards and download text in modal --- app/src/main/java/com/nervesparks/iris/ui/MainChatScreen.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/nervesparks/iris/ui/MainChatScreen.kt b/app/src/main/java/com/nervesparks/iris/ui/MainChatScreen.kt index a0f78815..ca47278e 100644 --- a/app/src/main/java/com/nervesparks/iris/ui/MainChatScreen.kt +++ b/app/src/main/java/com/nervesparks/iris/ui/MainChatScreen.kt @@ -138,7 +138,7 @@ fun MainChatScreen ( println("Thread started: ${Thread.currentThread().name}") val Prompts = listOf( "Explain how to develop a consistent reading habit.", - "Write an email to your manager requesting work-from-home approval for a day.", + "Write an email to your manager requesting leave for a day.", "Suggest time management strategies for handling multiple deadlines effectively.", "Draft a professional LinkedIn message to connect with a recruiter.", "Suggest ways to practice mindfulness in a busy daily schedule.", @@ -153,7 +153,8 @@ fun MainChatScreen ( val Prompts_Home = listOf( "Explains complex topics simply.", "Remembers previous inputs.", - "May sometimes be inaccurate." + "May sometimes be inaccurate.", + "Unable to provide current affairs due to no internet connectivity." ) var recognizedText by remember { mutableStateOf("") } val speechRecognizerLauncher = rememberLauncherForActivityResult(contract = ActivityResultContracts.StartActivityForResult()) {