diff --git a/app/build.gradle b/app/build.gradle index a65d2e3..d8dbe01 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -54,7 +54,9 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.core:core-ktx:1.2.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'com.github.doyaaaaaken:kotlin-csv-jvm:0.7.3' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + implementation 'com.google.android.material:material:1.1.0' } diff --git a/app/src/androidTest/java/com/illusionware/npsbrowser/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/illusionware/npsbrowser/ExampleInstrumentedTest.kt deleted file mode 100644 index 7dfdb97..0000000 --- a/app/src/androidTest/java/com/illusionware/npsbrowser/ExampleInstrumentedTest.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.hisoft.npsbrowser - -import androidx.test.platform.app.InstrumentationRegistry -import androidx.test.ext.junit.runners.AndroidJUnit4 - -import org.junit.Test -import org.junit.runner.RunWith - -import org.junit.Assert.* - -/** - * Instrumented test, which will execute on an Android device. - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -@RunWith(AndroidJUnit4::class) -class ExampleInstrumentedTest { - @Test - fun useAppContext() { - // Context of the app under test. - val appContext = InstrumentationRegistry.getInstrumentation().targetContext - assertEquals("com.hisoft.npsbrowser", appContext.packageName) - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c2cebff..f0e2911 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,9 @@ - + + - + diff --git a/app/src/main/java/com/illusionware/npsbrowser/MainActivity.kt b/app/src/main/java/com/illusionware/npsbrowser/MainActivity.kt deleted file mode 100644 index 4cc2734..0000000 --- a/app/src/main/java/com/illusionware/npsbrowser/MainActivity.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.illusionware.npsbrowser - -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle - -class MainActivity : AppCompatActivity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) - } -} diff --git a/app/src/main/java/com/illusionware/npsbrowser/activities/MainActivity.kt b/app/src/main/java/com/illusionware/npsbrowser/activities/MainActivity.kt new file mode 100644 index 0000000..77cc145 --- /dev/null +++ b/app/src/main/java/com/illusionware/npsbrowser/activities/MainActivity.kt @@ -0,0 +1,58 @@ +package com.illusionware.npsbrowser.activities + +import android.Manifest +import android.app.Activity +import android.content.Intent +import android.content.pm.PackageManager +import android.os.Bundle +import android.util.Log +import androidx.appcompat.app.AppCompatActivity +import androidx.core.app.ActivityCompat +import com.github.doyaaaaaken.kotlincsv.dsl.csvReader +import com.illusionware.npsbrowser.databinding.ActivityMainBinding +import java.io.InputStream + +class MainActivity : AppCompatActivity() { + + private val tsvReader = csvReader { + charset = "UTF-8" + quoteChar = '"' + delimiter = '\t' + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val binding = ActivityMainBinding.inflate(layoutInflater); + setContentView(binding.root) + + binding.tsvChooserButton.setOnClickListener { + if (!isStoragePermissionGranted()) + return@setOnClickListener + val intent = Intent(Intent.ACTION_GET_CONTENT).apply { + addCategory(Intent.CATEGORY_OPENABLE) + type = "text/tab-separated-values" + } + startActivityForResult(intent, 1) + } + } + override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) { + super.onActivityResult(requestCode, resultCode, resultData) + if (requestCode == 1 && resultCode == Activity.RESULT_OK) { + resultData?.data?.also { uri -> + val inputStream: InputStream? = contentResolver.openInputStream(uri) + val entries : List> = tsvReader.readAllWithHeader(inputStream!!) + } + } + } + + private fun isStoragePermissionGranted(): Boolean { + return if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { + Log.v("perms", "Permission is granted") + true + } else { + Log.v("perms", "Permission is revoked") + ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), 1) + false + } + } +} diff --git a/app/src/main/res/drawable/ic_add_yellow_24dp.xml b/app/src/main/res/drawable/ic_add_yellow_24dp.xml new file mode 100644 index 0000000..addf0af --- /dev/null +++ b/app/src/main/res/drawable/ic_add_yellow_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 3f64917..d8dea8a 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -4,15 +4,21 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".MainActivity"> + tools:context=".activities.MainActivity"> - - + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:maxImageSize="32dp" /> \ No newline at end of file diff --git a/app/src/test/java/com/illusionware/npsbrowser/ExampleUnitTest.kt b/app/src/test/java/com/illusionware/npsbrowser/ExampleUnitTest.kt deleted file mode 100644 index d2c1fba..0000000 --- a/app/src/test/java/com/illusionware/npsbrowser/ExampleUnitTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.hisoft.npsbrowser - -import org.junit.Test - -import org.junit.Assert.* - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -}