Skip to content

Commit 09c18aa

Browse files
committed
adding clip importing from files
1 parent 6ecbba5 commit 09c18aa

File tree

2 files changed

+55
-5
lines changed

2 files changed

+55
-5
lines changed

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ android {
6464
}
6565

6666
dependencies {
67-
implementation 'com.github.SimpleMobileTools:Simple-Commons:feb676128e'
67+
implementation 'com.github.SimpleMobileTools:Simple-Commons:3d8d8f29bb'
6868

6969
kapt 'androidx.room:room-compiler:2.3.0'
7070
implementation 'androidx.room:room-runtime:2.3.0'

app/src/main/kotlin/com/simplemobiletools/keyboard/activities/ManageClipboardItemsActivity.kt

Lines changed: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,28 @@ import android.os.Bundle
66
import android.view.Menu
77
import android.view.MenuItem
88
import com.google.gson.Gson
9+
import com.google.gson.reflect.TypeToken
10+
import com.simplemobiletools.commons.dialogs.FilePickerDialog
911
import com.simplemobiletools.commons.extensions.*
10-
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE
11-
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
12-
import com.simplemobiletools.commons.helpers.isQPlus
12+
import com.simplemobiletools.commons.helpers.*
1313
import com.simplemobiletools.commons.interfaces.RefreshRecyclerViewListener
1414
import com.simplemobiletools.keyboard.R
1515
import com.simplemobiletools.keyboard.adapters.ClipsActivityAdapter
1616
import com.simplemobiletools.keyboard.dialogs.AddOrEditClipDialog
1717
import com.simplemobiletools.keyboard.dialogs.ExportClipsDialog
1818
import com.simplemobiletools.keyboard.extensions.clipsDB
1919
import com.simplemobiletools.keyboard.extensions.config
20+
import com.simplemobiletools.keyboard.helpers.ClipsHelper
2021
import com.simplemobiletools.keyboard.models.Clip
2122
import kotlinx.android.synthetic.main.activity_manage_clipboard_items.*
2223
import java.io.File
24+
import java.io.InputStream
2325
import java.io.OutputStream
26+
import java.util.*
2427

2528
class ManageClipboardItemsActivity : SimpleActivity(), RefreshRecyclerViewListener {
2629
private val PICK_EXPORT_CLIPS_INTENT = 21
30+
private val PICK_IMPORT_CLIPS_SOURCE_INTENT = 22
2731

2832
override fun onCreate(savedInstanceState: Bundle?) {
2933
super.onCreate(savedInstanceState)
@@ -63,6 +67,9 @@ class ManageClipboardItemsActivity : SimpleActivity(), RefreshRecyclerViewListen
6367
if (requestCode == PICK_EXPORT_CLIPS_INTENT && resultCode == Activity.RESULT_OK && resultData != null && resultData.data != null) {
6468
val outputStream = contentResolver.openOutputStream(resultData.data!!)
6569
exportClipsTo(outputStream)
70+
} else if (requestCode == PICK_IMPORT_CLIPS_SOURCE_INTENT && resultCode == Activity.RESULT_OK && resultData != null && resultData.data != null) {
71+
val inputStream = contentResolver.openInputStream(resultData.data!!)
72+
parseFile(inputStream)
6673
}
6774
}
6875

@@ -140,5 +147,48 @@ class ManageClipboardItemsActivity : SimpleActivity(), RefreshRecyclerViewListen
140147
}
141148
}
142149

143-
private fun importClips() {}
150+
private fun importClips() {
151+
if (isQPlus()) {
152+
Intent(Intent.ACTION_GET_CONTENT).apply {
153+
addCategory(Intent.CATEGORY_OPENABLE)
154+
type = "text/plain"
155+
startActivityForResult(this, PICK_IMPORT_CLIPS_SOURCE_INTENT)
156+
}
157+
} else {
158+
handlePermission(PERMISSION_READ_STORAGE) {
159+
if (it) {
160+
FilePickerDialog(this) {
161+
ensureBackgroundThread {
162+
parseFile(File(it).inputStream())
163+
}
164+
}
165+
}
166+
}
167+
}
168+
}
169+
170+
private fun parseFile(inputStream: InputStream?) {
171+
if (inputStream == null) {
172+
toast(R.string.unknown_error_occurred)
173+
return
174+
}
175+
176+
var clipsImported = 0
177+
ensureBackgroundThread {
178+
val token = object : TypeToken<List<String>>() {}.type
179+
val clipValues = Gson().fromJson<ArrayList<String>>(inputStream.bufferedReader(), token) ?: ArrayList()
180+
clipValues.forEach { value ->
181+
val clip = Clip(null, value)
182+
if (ClipsHelper(this).insertClip(clip) > 0) {
183+
clipsImported++
184+
}
185+
}
186+
187+
runOnUiThread {
188+
val msg = if (clipsImported > 0) R.string.importing_successful else R.string.no_new_entries_for_importing
189+
toast(msg)
190+
updateClips()
191+
}
192+
}
193+
}
144194
}

0 commit comments

Comments
 (0)