Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 9 additions & 6 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ android {
buildToolsVersion "29.0.3"
defaultConfig {
applicationId "com.vob.scanit"
minSdkVersion 21
minSdkVersion 23
targetSdkVersion 30
versionCode 3
versionName "0.2"
Expand Down Expand Up @@ -61,7 +61,7 @@ dependencies {
implementation "androidx.core:core-ktx:1.3.2"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

implementation 'com.google.android.material:material:1.2.1'
implementation 'com.google.android.material:material:1.3.0'

implementation 'com.getbase:floatingactionbutton:1.10.1'

Expand All @@ -70,7 +70,11 @@ dependencies {
implementation 'com.rmtheis:tess-two:5.4.1'

implementation 'com.google.firebase:firebase-core:15.0.2'
implementation 'com.google.firebase:firebase-ml-vision:15.0.0'

implementation 'com.google.firebase:firebase-ml-vision:24.1.0'

implementation 'com.google.android.gms:play-services-vision:20.1.1'
implementation 'com.google.android.gms:play-services-vision-common:19.1.1'

implementation 'com.budiyev.android:code-scanner:2.1.0'

Expand All @@ -81,13 +85,12 @@ dependencies {

implementation 'com.pranavpandey.android:dynamic-toasts:3.2.0'

implementation 'com.ismaeldivita.chipnavigation:chip-navigation-bar:1.3.4'

implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.2.0'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.2.0'

}
apply plugin: 'com.google.gms.google-services'
repositories {
mavenCentral()
}
6 changes: 2 additions & 4 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,15 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />

<!-- android:requestLegacyExternalStorage="true"-->

<application
android:allowBackup="true"
android:icon="@mipmap/scanit_icon"
android:label="@string/app_name"

android:requestLegacyExternalStorage="true"
android:roundIcon="@mipmap/scanit_icon_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".ui.activities.SettingsActivity"></activity>
<activity android:name=".ui.activities.SettingsActivity"/>
<activity android:name=".ui.activities.AboutAppActivity" />
<activity android:name=".ui.activities.QRBarcodeScanResultActivity" />
<activity android:name=".ui.activities.GenerateQRActivity" />
Expand Down
65 changes: 49 additions & 16 deletions app/src/main/java/com/vob/scanit/ui/activities/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.Fragment
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.firebase.FirebaseApp
import com.ismaeldivita.chipnavigation.ChipNavigationBar
import com.rbddevs.splashy.Splashy
import com.vob.scanit.R

Expand All @@ -36,6 +37,7 @@ class MainActivity : AppCompatActivity() {
var sharedPreferences: SharedPreferences? = null
private val SHARED_PREF = "APP_SHARED_PREF"

private val menu by lazy { findViewById<ChipNavigationBar>(R.id.bottom_nav_view)}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Expand All @@ -50,35 +52,66 @@ class MainActivity : AppCompatActivity() {
setContentView(R.layout.activity_main)

FirebaseApp.initializeApp(applicationContext)

bottomNavigationView = findViewById(R.id.bottom_nav_view)
//bottomNavigationView = findViewById(R.id.bottom_nav_view)
loadFragment(HomeFragment())
bottomNavigationView.setOnNavigationItemSelectedListener {
when(it.itemId)
{
R.id.home -> {

menu.setOnItemSelectedListener {id ->
when(id) {
R.id.home ->
{
R.color.home to "Home"
loadFragment(HomeFragment())
return@setOnNavigationItemSelectedListener true
return@setOnItemSelectedListener
}
R.id.ocr -> {
R.id.like -> {
R.color.like to "Like"
loadFragment(OCRFragment())
return@setOnNavigationItemSelectedListener true
return@setOnItemSelectedListener
}
R.id.qr -> {
R.id.search -> {
R.color.serach to "Search"
loadFragment(QRFragment())
return@setOnNavigationItemSelectedListener true
return@setOnItemSelectedListener
}
R.id.documents -> {
R.id.profile -> {
R.color.profile to "Profile"
loadFragment(DocumentFragment())
return@setOnNavigationItemSelectedListener true
return@setOnItemSelectedListener
}
else ->
{
else -> {
R.color.white to ""
loadFragment(HomeFragment())
return@setOnNavigationItemSelectedListener true
return@setOnItemSelectedListener
}
}

}
// bottomNavigationView.setOnNavigationItemSelectedListener {
// when(it.itemId)
// {
// R.id.home -> {
// loadFragment(HomeFragment())
// return@setOnNavigationItemSelectedListener true
// }
// R.id.ocr -> {
// loadFragment(OCRFragment())
// return@setOnNavigationItemSelectedListener true
// }
// R.id.qr -> {
// loadFragment(QRFragment())
// return@setOnNavigationItemSelectedListener true
// }
// R.id.documents -> {
// loadFragment(DocumentFragment())
// return@setOnNavigationItemSelectedListener true
// }
// else ->
// {
// loadFragment(HomeFragment())
// return@setOnNavigationItemSelectedListener true
// }
// }
// }

setupToolbar()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,10 @@ class SplashScreenActivity : AppCompatActivity() {

Splashy(this)
.setLogo(R.mipmap.scanit_icon_round)
.setTitle("ScanIt")
.setTitle("SCAN IT")
.setTitleColor("#FFFFFF")
.setSubTitle("Your All-In-One Scanner")
.setSubTitle("All-In-One Scanner")
.setSubTitleItalic(false)
.setSubTitleColor("#FFFFFF")
.setProgressColor(R.color.white)
.setBackgroundColor(R.color.colorPrimaryDark)
Expand All @@ -34,6 +35,6 @@ class SplashScreenActivity : AppCompatActivity() {
handler.postDelayed({
startActivity(Intent(this, MainActivity::class.java))
finish()
},3000)
},6000)
}
}
51 changes: 25 additions & 26 deletions app/src/main/java/com/vob/scanit/ui/fragments/OCRFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,8 @@ import android.content.pm.PackageManager
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.provider.MediaStore
import android.text.ClipboardManager
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
Expand Down Expand Up @@ -58,7 +56,7 @@ class OCRFragment : Fragment() {
val view = inflater.inflate(R.layout.fragment_o_c_r, container, false)

initialiseFields(view)
FirebaseApp.initializeApp(context)
FirebaseApp.initializeApp(requireContext())

openCameraButton.setOnClickListener { openCamera(view) }
openFilesButton.setOnClickListener { openGallery(view) }
Expand All @@ -81,12 +79,12 @@ class OCRFragment : Fragment() {
copyToClipboardBtn = view.findViewById(R.id.copy_button)
}

fun openCamera(view: View?) {
if (ContextCompat.checkSelfPermission(context!!, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(context!!, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(context!!, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
private fun openCamera(view: View?) {
if (ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(activity!!, arrayOf(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE),
ActivityCompat.requestPermissions(requireActivity(), arrayOf(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE),
2)
}
else
Expand All @@ -95,26 +93,26 @@ class OCRFragment : Fragment() {
}
}

fun openGallery(view: View?) {
if (ContextCompat.checkSelfPermission(context!!, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(context!!, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
private fun openGallery(view: View?) {
if (ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(activity!!, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE), 2)
ActivityCompat.requestPermissions(requireActivity(), arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE), 2)
}
else
{
startScan(ScanConstants.OPEN_GALERIE)
}
}

fun startScan(preference: Int) {
private fun startScan(preference: Int) {
val imagePath = DATA_PATH + "/image"
val dir = File(imagePath)
if (!dir.exists())
dir.mkdirs()
val imageFilePath = imagePath + "/ocr.jpg"
outputFileDir = Uri.fromFile(File(imageFilePath))
val intent: Intent = Intent(context!!, ScanActivity::class.java)
val intent: Intent = Intent(requireContext(), ScanActivity::class.java)
intent.putExtra(ScanConstants.OPEN_INTENT_PREFERENCE, preference)
startActivityForResult(intent, 100)
}
Expand Down Expand Up @@ -145,9 +143,9 @@ class OCRFragment : Fragment() {
//prepareTessData()
//startOCR(outputFileDir)
val imageUri: Uri = Objects.requireNonNull(data!!.extras)?.getParcelable(ScanActivity.SCAN_RESULT)!!
val imageStream: InputStream = activity!!.contentResolver.openInputStream(imageUri)!!
val imageStream: InputStream = requireActivity().contentResolver.openInputStream(imageUri)!!
val scannedImage = BitmapFactory.decodeStream(imageStream)
activity!!.contentResolver.delete(imageUri, null, null)
requireActivity().contentResolver.delete(imageUri, null, null)
detectText(scannedImage)
}
else
Expand All @@ -159,20 +157,21 @@ class OCRFragment : Fragment() {
private fun detectText(scannedImage: Bitmap?)
{
var firebaseVisionImage: FirebaseVisionImage = FirebaseVisionImage.fromBitmap(scannedImage!!)
var firebaseApp = FirebaseApp.initializeApp(context)
var firebaseVisionTextDetector = FirebaseVision.getInstance().visionTextDetector
firebaseVisionTextDetector.detectInImage(firebaseVisionImage)
var firebaseApp = FirebaseApp.initializeApp(requireContext())
var firebaseVisionTextDetector = FirebaseVision.getInstance().onDeviceTextRecognizer

firebaseVisionTextDetector.processImage(firebaseVisionImage)
.addOnSuccessListener {
displayTextFromImage(it)
firebaseVisionText -> displayTextFromImage(firebaseVisionText)
}
.addOnFailureListener {
Toast.makeText(activity, "Error: ${it.message}", Toast.LENGTH_LONG).show()
.addOnFailureListener { e ->
Toast.makeText(activity,"Error: ${e.message}", Toast.LENGTH_LONG).show()
}
}

private fun displayTextFromImage(firebaseVisionText: FirebaseVisionText) {
textView.text = ""
var blockList: List<FirebaseVisionText.Block> = firebaseVisionText.blocks
var blockList: List<FirebaseVisionText.TextBlock> = firebaseVisionText.textBlocks
if (blockList.size == 0)
{
Toast.makeText(activity, "No text found", Toast.LENGTH_SHORT).show()
Expand Down Expand Up @@ -208,14 +207,14 @@ class OCRFragment : Fragment() {
private fun copyTextToClipboard() {
if (textView.text.isEmpty())
{
DynamicToast.makeError(context!!, "Error: No text found.", Toast.LENGTH_LONG).show()
DynamicToast.makeError(requireContext(), "Error: No text found.", Toast.LENGTH_LONG).show()
return
}

var clipboard = context!!.getSystemService(Context.CLIPBOARD_SERVICE) as android.content.ClipboardManager
var clipboard = requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as android.content.ClipboardManager
var clip = ClipData.newPlainText("Copied Text", textView.text)

//clipboard.primaryClip = clip
DynamicToast.makeSuccess(context!!, "Text copied to clipboard", Toast.LENGTH_SHORT).show()
DynamicToast.makeSuccess(requireContext(), "Text copied to clipboard", Toast.LENGTH_SHORT).show()
}
}
14 changes: 14 additions & 0 deletions app/src/main/res/drawable/ic_activity.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M22,12l-4,0l-3,9l-6,-18l-3,9l-4,0"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="#000000"
android:strokeLineCap="round"/>
</vector>
21 changes: 21 additions & 0 deletions app/src/main/res/drawable/ic_home.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M3,9l9,-7 9,7v11a2,2 0,0 1,-2 2H5a2,2 0,0 1,-2 -2z"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="#000000"
android:strokeLineCap="round"/>
<path
android:pathData="M9,22l0,-10l6,0l0,10"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="#000000"
android:strokeLineCap="round"/>
</vector>
14 changes: 14 additions & 0 deletions app/src/main/res/drawable/ic_love.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M20.84,4.61a5.5,5.5 0,0 0,-7.78 0L12,5.67l-1.06,-1.06a5.5,5.5 0,0 0,-7.78 7.78l1.06,1.06L12,21.23l7.78,-7.78 1.06,-1.06a5.5,5.5 0,0 0,0 -7.78z"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="#000000"
android:strokeLineCap="round"/>
</vector>
9 changes: 9 additions & 0 deletions app/src/main/res/drawable/ic_oc_2.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M2,2L2,7L4,7L4,4L7,4L7,2L2,2zM17,2L17,4L20,4L20,7L22,7L22,2L17,2zM5.9063,8C3.3963,8 3,10.4578 3,11.3438L3,11.6563C3,12.7212 3.4653,15 5.9063,15C8.4183,15 8.8125,12.7052 8.8125,11.6563L8.8125,11.3438C8.8385,10.4268 8.4432,8 5.9063,8zM12.4375,8C10.2415,8 9.625,9.8763 9.625,11.2813L9.625,11.7188C9.625,13.0988 10.2755,15 12.4375,15C14.7285,15 15.0492,13.441 15.1563,12.625L13.7813,12.625C13.6713,13.317 13.4945,13.8438 12.4375,13.8438C11.3995,13.8438 11.0313,13.0208 11.0313,11.7188L11.0313,11.2813C11.0313,10.0583 11.3815,9.1563 12.4375,9.1563C13.3965,9.1563 13.7093,9.6412 13.7813,10.4063L15.1875,10.4063C15.0705,9.2043 14.2875,8 12.4375,8zM16.0938,8.0938L16.0938,14.9063L17.5,14.9063L17.5,12.4063L18.625,12.4063L19.875,14.9063L21.4063,14.9063L21.4063,14.8438L19.9375,12.0625C21.2015,11.4745 21.1563,10.4052 21.1563,10.1563C21.1563,9.8193 21.081,8.0938 18.625,8.0938L16.0938,8.0938zM5.9063,9.1563C7.0522,9.1563 7.375,10.2948 7.375,11.3438L7.375,11.6563C7.375,13.0013 6.9332,13.8438 5.9063,13.8438C5.2933,13.8438 4.4375,13.4552 4.4375,11.6563L4.4375,11.3438C4.4375,10.2487 4.7552,9.1563 5.9063,9.1563zM17.5,9.2188L18.625,9.2188C19.644,9.2188 19.75,9.929 19.75,10.25C19.75,10.403 19.779,11.2813 18.625,11.2813L17.5,11.2813L17.5,9.2188zM2,17L2,22L7,22L7,20L4,20L4,17L2,17zM20,17L20,20L17,20L17,22L22,22L22,17L20,17z"/>
</vector>
Loading