@@ -6,24 +6,28 @@ import android.os.Bundle
66import android.view.Menu
77import android.view.MenuItem
88import com.google.gson.Gson
9+ import com.google.gson.reflect.TypeToken
10+ import com.simplemobiletools.commons.dialogs.FilePickerDialog
911import 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.*
1313import com.simplemobiletools.commons.interfaces.RefreshRecyclerViewListener
1414import com.simplemobiletools.keyboard.R
1515import com.simplemobiletools.keyboard.adapters.ClipsActivityAdapter
1616import com.simplemobiletools.keyboard.dialogs.AddOrEditClipDialog
1717import com.simplemobiletools.keyboard.dialogs.ExportClipsDialog
1818import com.simplemobiletools.keyboard.extensions.clipsDB
1919import com.simplemobiletools.keyboard.extensions.config
20+ import com.simplemobiletools.keyboard.helpers.ClipsHelper
2021import com.simplemobiletools.keyboard.models.Clip
2122import kotlinx.android.synthetic.main.activity_manage_clipboard_items.*
2223import java.io.File
24+ import java.io.InputStream
2325import java.io.OutputStream
26+ import java.util.*
2427
2528class 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