fixed issue 152: ask write permissions (#154)
This commit is contained in:
parent
c4946dd61c
commit
b2842b8abe
@ -58,7 +58,7 @@ dependencies {
|
||||
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
||||
implementation 'androidx.navigation:navigation-fragment:2.2.2'
|
||||
implementation 'androidx.navigation:navigation-ui:2.2.2'
|
||||
implementation "com.squareup.okhttp3:okhttp:4.4.1"
|
||||
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
|
||||
implementation 'com.squareup.retrofit2:retrofit:2.8.1'
|
||||
implementation 'com.squareup.retrofit2:converter-gson:2.8.1'
|
||||
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.8.1'
|
||||
@ -95,7 +95,7 @@ dependencies {
|
||||
testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0"
|
||||
testImplementation 'junit:junit:4.13'
|
||||
|
||||
androidTestImplementation("com.squareup.okhttp3:mockwebserver:4.4.1")
|
||||
androidTestImplementation('com.squareup.okhttp3:mockwebserver:4.6.0')
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
|
||||
androidTestImplementation 'androidx.test:runner:1.2.0'
|
||||
androidTestImplementation 'androidx.test:rules:1.2.0'
|
||||
@ -111,6 +111,7 @@ dependencies {
|
||||
def fragment_version = '1.2.4'
|
||||
debugImplementation "androidx.fragment:fragment-testing:$fragment_version"
|
||||
|
||||
implementation 'com.karumi:dexter:6.1.0'
|
||||
}
|
||||
|
||||
tasks.withType(Test) {
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.h.pixeldroid
|
||||
|
||||
import android.Manifest
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.graphics.drawable.Drawable
|
||||
@ -11,10 +12,15 @@ import android.view.ViewGroup
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.ImageView
|
||||
import android.widget.PopupMenu
|
||||
import android.widget.Toast
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.RequestBuilder
|
||||
import com.h.pixeldroid.utils.ImageConverter
|
||||
import com.h.pixeldroid.utils.ImageUtils
|
||||
import com.karumi.dexter.Dexter
|
||||
import com.karumi.dexter.listener.PermissionDeniedResponse
|
||||
import com.karumi.dexter.listener.PermissionGrantedResponse
|
||||
import com.karumi.dexter.listener.single.BasePermissionListener
|
||||
import kotlinx.android.synthetic.main.post_fragment.view.*
|
||||
import java.io.Serializable
|
||||
|
||||
@ -48,11 +54,31 @@ class ImageFragment : Fragment() {
|
||||
setOnMenuItemClickListener { item ->
|
||||
when (item.itemId) {
|
||||
R.id.image_popup_menu_save_to_gallery -> {
|
||||
ImageUtils.downloadImage(requireActivity(), view.context, imgUrl)
|
||||
Dexter.withContext(view.context)
|
||||
.withPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||
.withListener(object: BasePermissionListener() {
|
||||
override fun onPermissionDenied(p0: PermissionDeniedResponse?) {
|
||||
Toast.makeText(view.context, "You need to grant write permission to download pictures!", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
|
||||
override fun onPermissionGranted(p0: PermissionGrantedResponse?) {
|
||||
ImageUtils.downloadImage(requireActivity(), imgUrl)
|
||||
}
|
||||
}).check()
|
||||
true
|
||||
}
|
||||
R.id.image_popup_menu_share_picture -> {
|
||||
ImageUtils.downloadImage(requireActivity(), view.context, imgUrl, share = true)
|
||||
Dexter.withContext(view.context)
|
||||
.withPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||
.withListener(object: BasePermissionListener() {
|
||||
override fun onPermissionDenied(p0: PermissionDeniedResponse?) {
|
||||
Toast.makeText(view.context, "You need to grant write permission to share pictures!", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
|
||||
override fun onPermissionGranted(p0: PermissionGrantedResponse?) {
|
||||
ImageUtils.downloadImage(requireActivity(), imgUrl, share = true)
|
||||
}
|
||||
}).check()
|
||||
true
|
||||
}
|
||||
else -> false
|
||||
|
@ -24,14 +24,14 @@ class PostFragment : Fragment() {
|
||||
inflater: LayoutInflater, container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
val status = arguments?.getSerializable(POST_TAG) as Status?
|
||||
val current_status = arguments?.getSerializable(POST_TAG) as Status?
|
||||
val domain = arguments?.getString(DOMAIN_TAG)!!
|
||||
val root = inflater.inflate(R.layout.post_fragment, container, false)
|
||||
val root: View = inflater.inflate(R.layout.post_fragment, container, false)
|
||||
val picRequest = Glide.with(this)
|
||||
.asDrawable().fitCenter()
|
||||
.placeholder(ColorDrawable(Color.GRAY))
|
||||
|
||||
status?.setupPost(root, picRequest, this, domain, true)
|
||||
current_status?.setupPost(root, picRequest, this, domain, true)
|
||||
|
||||
//Setup arguments needed for the onclicklisteners
|
||||
val holder = PostViewHolder(root, requireContext())
|
||||
@ -42,14 +42,15 @@ class PostFragment : Fragment() {
|
||||
val accessToken = preferences.getString("accessToken", "")
|
||||
val api = PixelfedAPI.create("${preferences.getString("domain", "")}")
|
||||
|
||||
status?.setDescription(root, api, "Bearer $accessToken")
|
||||
current_status?.setDescription(root, api, "Bearer $accessToken")
|
||||
|
||||
//Activate onclickListeners
|
||||
status?.activateLiker(holder, api, "Bearer $accessToken", status.favourited)
|
||||
status?.activateReblogger(holder, api, "Bearer $accessToken", status.reblogged)
|
||||
status?.activateCommenter(holder, api, "Bearer $accessToken")
|
||||
status?.showComments(holder, api, "Bearer $accessToken")
|
||||
current_status?.activateLiker(holder, api, "Bearer $accessToken", current_status!!.favourited)
|
||||
current_status?.activateReblogger(holder, api, "Bearer $accessToken", current_status!!.reblogged)
|
||||
current_status?.activateCommenter(holder, api, "Bearer $accessToken")
|
||||
current_status?.showComments(holder, api, "Bearer $accessToken")
|
||||
|
||||
return root
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
package com.h.pixeldroid.objects
|
||||
|
||||
import android.Manifest
|
||||
import android.content.Context
|
||||
import android.content.pm.PackageManager
|
||||
import android.graphics.Typeface
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.text.Spanned
|
||||
@ -16,6 +18,7 @@ import android.widget.Toast
|
||||
import android.widget.PopupMenu
|
||||
import android.widget.ImageView
|
||||
import android.widget.FrameLayout
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||
@ -36,6 +39,13 @@ import com.h.pixeldroid.utils.PostUtils.Companion.retrieveComments
|
||||
import com.h.pixeldroid.utils.PostUtils.Companion.toggleCommentInput
|
||||
import com.h.pixeldroid.utils.PostUtils.Companion.unLikePostCall
|
||||
import com.h.pixeldroid.utils.PostUtils.Companion.undoReblogPost
|
||||
import com.karumi.dexter.Dexter
|
||||
import com.karumi.dexter.PermissionToken
|
||||
import com.karumi.dexter.listener.PermissionDeniedResponse
|
||||
import com.karumi.dexter.listener.PermissionGrantedResponse
|
||||
import com.karumi.dexter.listener.PermissionRequest
|
||||
import com.karumi.dexter.listener.single.BasePermissionListener
|
||||
import com.karumi.dexter.listener.single.PermissionListener
|
||||
import kotlinx.android.synthetic.main.post_fragment.view.postDate
|
||||
import kotlinx.android.synthetic.main.post_fragment.view.postDomain
|
||||
import java.io.Serializable
|
||||
@ -91,6 +101,7 @@ data class Status(
|
||||
{
|
||||
|
||||
companion object {
|
||||
const val SAVE_TO_GALLERY_WRITE_PERMISSION = 1
|
||||
const val POST_TAG = "postTag"
|
||||
const val POST_FRAG_TAG = "postFragTag"
|
||||
const val DOMAIN_TAG = "domainTag"
|
||||
@ -356,11 +367,31 @@ data class Status(
|
||||
setOnMenuItemClickListener { item ->
|
||||
when (item.itemId) {
|
||||
R.id.image_popup_menu_save_to_gallery -> {
|
||||
downloadImage(activity, view.context, getPostUrl()!!)
|
||||
Dexter.withContext(view.context)
|
||||
.withPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||
.withListener(object: BasePermissionListener() {
|
||||
override fun onPermissionDenied(p0: PermissionDeniedResponse?) {
|
||||
Toast.makeText(view.context, "You need to grant write permission to download pictures!", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
|
||||
override fun onPermissionGranted(p0: PermissionGrantedResponse?) {
|
||||
downloadImage(activity, getPostUrl()!!)
|
||||
}
|
||||
}).check()
|
||||
true
|
||||
}
|
||||
R.id.image_popup_menu_share_picture -> {
|
||||
downloadImage(activity, view.context, getPostUrl()!!, share = true)
|
||||
Dexter.withContext(view.context)
|
||||
.withPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||
.withListener(object: BasePermissionListener() {
|
||||
override fun onPermissionDenied(p0: PermissionDeniedResponse?) {
|
||||
Toast.makeText(view.context, "You need to grant write permission to share pictures!", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
|
||||
override fun onPermissionGranted(p0: PermissionGrantedResponse?) {
|
||||
downloadImage(activity, getPostUrl()!!, share = true)
|
||||
}
|
||||
}).check()
|
||||
true
|
||||
}
|
||||
else -> false
|
||||
|
@ -18,7 +18,8 @@ import java.io.File
|
||||
|
||||
class ImageUtils {
|
||||
companion object {
|
||||
fun downloadImage(activity: FragmentActivity, context: Context, url: String, share: Boolean = false) {
|
||||
fun downloadImage(activity: FragmentActivity, url: String, share: Boolean = false) {
|
||||
val context = activity.applicationContext
|
||||
var msg = ""
|
||||
var lastMsg = ""
|
||||
val directory = File(Environment.DIRECTORY_PICTURES)
|
||||
@ -88,7 +89,7 @@ class ImageUtils {
|
||||
e.printStackTrace()
|
||||
}
|
||||
intentShare.putExtra(Intent.EXTRA_STREAM, uri)
|
||||
context.startActivity(Intent.createChooser(intentShare, "Share Image"))
|
||||
activity.startActivity(Intent.createChooser(intentShare, "Share Image"))
|
||||
}
|
||||
cursor.close()
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user