11package com.lassi.presentation.docs
22
3+ import android.Manifest
34import android.app.Activity
45import android.content.Intent
6+ import android.content.pm.PackageManager
57import android.graphics.PorterDuff
8+ import android.net.Uri
9+ import android.os.Build
610import android.os.Bundle
11+ import android.provider.Settings
712import android.view.Menu
13+ import androidx.appcompat.app.AlertDialog
14+ import androidx.core.app.ActivityCompat
815import androidx.lifecycle.ViewModelProviders
916import androidx.recyclerview.widget.GridLayoutManager
1017import com.lassi.R
@@ -44,6 +51,35 @@ class DocsFragment : LassiBaseViewModelFragment<DocsViewModel>() {
4451 mediaPickerConfig.progressBarColor,
4552 PorterDuff .Mode .MULTIPLY
4653 )
54+ checkPermission()
55+ }
56+
57+ private fun checkPermission () {
58+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .M ) {
59+ if (ActivityCompat .checkSelfPermission(
60+ requireContext()
61+ , Manifest .permission.READ_EXTERNAL_STORAGE
62+ ) != PackageManager .PERMISSION_GRANTED
63+ && ActivityCompat .checkSelfPermission(
64+ requireContext()
65+ , Manifest .permission.WRITE_EXTERNAL_STORAGE
66+ ) != PackageManager .PERMISSION_GRANTED
67+ ) {
68+ this .requestPermissions(
69+ arrayOf(
70+ Manifest .permission.READ_EXTERNAL_STORAGE ,
71+ Manifest .permission.WRITE_EXTERNAL_STORAGE
72+ )
73+ , KeyUtils .REQUEST_PERMISSIONS_REQUEST_CODE
74+ )
75+ return
76+ }
77+ }
78+ fetchDocs()
79+ }
80+
81+ private fun fetchDocs () {
82+ viewModel.fetchDocs()
4783 }
4884
4985 override fun initLiveDataObservers () {
@@ -62,7 +98,6 @@ class DocsFragment : LassiBaseViewModelFragment<DocsViewModel>() {
6298 }
6399 }
64100
65-
66101 private fun setImageAdapter () {
67102 rvMedia.layoutManager = GridLayoutManager (context, mediaPickerConfig.gridSize)
68103 rvMedia.adapter = mediaAdapter
@@ -97,4 +132,36 @@ class DocsFragment : LassiBaseViewModelFragment<DocsViewModel>() {
97132 activity?.setResult(Activity .RESULT_OK , intent)
98133 activity?.finish()
99134 }
135+
136+ override fun onRequestPermissionsResult (
137+ requestCode : Int , permissions : Array <out String >,
138+ grantResults : IntArray
139+ ) {
140+ if (requestCode == KeyUtils .REQUEST_PERMISSIONS_REQUEST_CODE
141+ && grantResults[0 ] == PackageManager .PERMISSION_GRANTED
142+ ) {
143+ fetchDocs()
144+ } else {
145+ showPermissionDisableAlert()
146+ }
147+ }
148+
149+ private fun showPermissionDisableAlert () {
150+ val alertDialog = AlertDialog .Builder (requireContext())
151+ alertDialog.setMessage(R .string.storage_permission_rational)
152+ alertDialog.setCancelable(false )
153+ alertDialog.setPositiveButton(R .string.ok) { _, _ ->
154+ val intent = Intent ().apply {
155+ action = Settings .ACTION_APPLICATION_DETAILS_SETTINGS
156+ data = Uri .fromParts(" package" , activity?.packageName, null )
157+ }
158+ startActivityForResult(intent, KeyUtils .SETTINGS_REQUEST_CODE )
159+ }
160+ alertDialog.setNegativeButton(R .string.cancel) { _, _ ->
161+ activity?.onBackPressed()
162+ }
163+ val permissionDialog = alertDialog.create()
164+ permissionDialog.setCancelable(false )
165+ permissionDialog.show()
166+ }
100167}
0 commit comments