Skip to content

Commit

Permalink
compartir multimedia hacia histories de instagram funcionando #39
Browse files Browse the repository at this point in the history
Signed-off-by: figonzal1 <[email protected]>
  • Loading branch information
figonzal1 committed Jan 7, 2024
1 parent 44c5c74 commit 180f544
Show file tree
Hide file tree
Showing 12 changed files with 106 additions and 84 deletions.
6 changes: 4 additions & 2 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ android {
//buildConfigField("String", "APPO_DEAL_KEY", getProperty("APPO_DEAL_KEY"))

//META API KEYS
//buildConfigField("String", "FB_APP_ID", getProperty("FB_APP_ID"))
//buildConfigField("String", "FB_CLIENT_ID", getProperty("FB_CLIENT_ID"))
buildConfigField("String", "FB_APP_ID", getProperty("FB_APP_ID"))
buildConfigField("String", "FB_CLIENT_ID", getProperty("FB_CLIENT_ID"))

//ADMOB MASTER KEY
buildConfigField("String", "ADMOB_MASTER_KEY", getProperty("ADMOB_MASTER_KEY"))
Expand Down Expand Up @@ -150,6 +150,8 @@ dependencies {

//Appodeal
//implementation("com.appodeal.ads:sdk:3.0.0.4")
//FAcebook
//implementation("com.facebook.android:facebook-android-sdk:latest.release")

//Google Play
implementation("com.google.android.play:app-update-ktx:2.1.0")
Expand Down
8 changes: 7 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,13 @@
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_provider" />
</provider> <!-- TODO: Habilitar para produccion -->
</provider>
<!--<provider
android:name="com.facebook.FacebookContentProvider"
android:authorities="com.facebook.app.FacebookContentProvider{fb_id}"
android:exported="true" />-->

<!-- TODO: Habilitar para produccion -->
<meta-data
android:name="firebase_performance_collection_enabled"
android:value="false" /> <!-- TODO: Habilitar para produccion -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import android.content.pm.PackageManager.ResolveInfoFlags
import android.content.res.Configuration
import android.net.Uri
import android.os.Build
import cl.figonzal.lastquakechile.BuildConfig
import cl.figonzal.lastquakechile.R
import cl.figonzal.lastquakechile.core.utils.views.configSensitive
import cl.figonzal.lastquakechile.core.utils.views.formatFilterColor
Expand All @@ -15,12 +16,14 @@ import cl.figonzal.lastquakechile.core.utils.views.formatQuakeTime
import cl.figonzal.lastquakechile.core.utils.views.getLocalBitmapUri
import cl.figonzal.lastquakechile.core.utils.views.getMagnitudeColor
import cl.figonzal.lastquakechile.core.utils.views.toast
import cl.figonzal.lastquakechile.core.utils.views.viewToBitmap
import cl.figonzal.lastquakechile.databinding.QuakeBottomSheetBinding
import cl.figonzal.lastquakechile.quake_feature.domain.model.Quake
import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.model.Circle
import com.google.android.gms.maps.model.LatLng
import com.google.android.gms.maps.model.MapStyleOptions
import com.google.android.material.card.MaterialCardView
import com.google.maps.android.ktx.addCircle
import com.google.maps.android.ktx.addMarker
import timber.log.Timber
Expand Down Expand Up @@ -111,7 +114,28 @@ fun Context.makeSnapshot(googleMap: GoogleMap, quake: Quake, callback: (Uri?) ->
Timber.e(e, "Error screenshot map: %s", e.message)
}
}
}

fun Context.igShareIntent(cvShareQuake: MaterialCardView) {

val bitmap = cvShareQuake.viewToBitmap()
val bitMapUriView = getLocalBitmapUri(bitmap)

grantUriPermission(
"com.instagram.android",
bitMapUriView,
Intent.FLAG_GRANT_READ_URI_PERMISSION
)

val intent = Intent("com.instagram.share.ADD_TO_STORY").apply {
flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
type = "image/png"
putExtra("source_application", BuildConfig.FB_APP_ID)
putExtra("interactive_asset_uri", bitMapUriView)
putExtra("top_background_color", "#006994");
putExtra("bottom_background_color", "#253561");
}
startActivity(intent)
}

private fun Context.shareQuake(quake: Quake, bitMapUri: Uri?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@ import android.content.Context
import android.content.Intent
import android.content.res.Resources
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.drawable.Drawable
import android.net.Uri
import android.os.Build
import android.util.TypedValue
import android.view.*
import android.widget.ImageView
Expand All @@ -23,6 +26,7 @@ import cl.figonzal.lastquakechile.core.data.remote.ApiError.*
import cl.figonzal.lastquakechile.core.ui.SettingsActivity
import cl.figonzal.lastquakechile.core.utils.views.*
import cl.figonzal.lastquakechile.databinding.FragmentMapsBinding
import cl.figonzal.lastquakechile.databinding.ShareQuakeBottomSheetBinding
import cl.figonzal.lastquakechile.quake_feature.domain.model.Quake
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
Expand All @@ -31,6 +35,8 @@ import com.bumptech.glide.request.transition.DrawableCrossFadeFactory
import com.google.android.gms.maps.GoogleMap
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.card.MaterialCardView
import com.google.android.material.shape.CornerFamily
import com.google.android.material.shape.ShapeAppearanceModel
import timber.log.Timber
import java.io.File
import java.io.FileOutputStream
Expand Down Expand Up @@ -175,13 +181,39 @@ fun Context.getLocalBitmapUri(bitmap: Bitmap): Uri {
else -> {
Timber.d("Share image not exist")
val out = FileOutputStream(file)
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out)
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out)
out.close()
}
}
return getUriForFile(this, "${applicationContext.packageName}.fileprovider", file)
}

fun View.viewToBitmap(): Bitmap {

val bitmap = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Bitmap.createBitmap(
width, height, Bitmap.Config.ARGB_8888, true
)
} else {
Bitmap.createBitmap(
width, height, Bitmap.Config.ARGB_8888
)
}
val canvas = Canvas(bitmap)
draw(canvas)
return bitmap
}

fun ShareQuakeBottomSheetBinding.configGoogleMapShareQuakeBorders(drawable: Drawable?) {
val shapeAppearanceModel = ShapeAppearanceModel()
.toBuilder()
.setTopLeftCorner(CornerFamily.ROUNDED, 32f)
.setTopRightCorner(CornerFamily.ROUNDED, 32f)
.build()
includeShareQuake.ivGoogleMaps.setImageDrawable(drawable)
includeShareQuake.ivGoogleMaps.shapeAppearanceModel = shapeAppearanceModel
}

/**
* Function to print change log features
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,21 @@
package cl.figonzal.lastquakechile.quake_feature.ui.dialog

import android.content.Intent
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.drawable.Drawable
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import cl.figonzal.lastquakechile.core.utils.igShareIntent
import cl.figonzal.lastquakechile.core.utils.views.configGoogleMapShareQuakeBorders
import cl.figonzal.lastquakechile.core.utils.views.configSensitive
import cl.figonzal.lastquakechile.core.utils.views.configVerified
import cl.figonzal.lastquakechile.core.utils.views.formatFilterColor
import cl.figonzal.lastquakechile.core.utils.views.formatMagnitude
import cl.figonzal.lastquakechile.core.utils.views.formatQuakeTime
import cl.figonzal.lastquakechile.core.utils.views.getLocalBitmapUri
import cl.figonzal.lastquakechile.databinding.ShareQuakeBottomSheetBinding
import cl.figonzal.lastquakechile.quake_feature.domain.model.Quake
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.google.android.material.shape.CornerFamily
import com.google.android.material.shape.ShapeAppearanceModel


class ShareQuakeBottomSheetDialog(private val quakeBitmapUri: Uri, private val quake: Quake) :
Expand All @@ -36,69 +33,27 @@ class ShareQuakeBottomSheetDialog(private val quakeBitmapUri: Uri, private val q
_binding = ShareQuakeBottomSheetBinding.inflate(layoutInflater, container, false)

val inputStream = requireContext().contentResolver.openInputStream(quakeBitmapUri)
val drawable = Drawable.createFromStream(inputStream, quakeBitmapUri.toString())
val screenshotDrawable = Drawable.createFromStream(inputStream, quakeBitmapUri.toString())

with(binding.includeShareQuake) {
with(binding) {

val shapeAppearanceModel = ShapeAppearanceModel()
.toBuilder()
.setTopLeftCorner(CornerFamily.ROUNDED, 32f)
.setTopRightCorner(CornerFamily.ROUNDED, 32f)
.build()
ivGoogleMaps.setImageDrawable(drawable)
ivGoogleMaps.shapeAppearanceModel = shapeAppearanceModel
configGoogleMapShareQuakeBorders(screenshotDrawable)

with(sheetContent) {
with(includeShareQuake.sheetContent) {
tvCity.text = quake.city
tvMagnitude.formatMagnitude(quake)
tvDate.formatQuakeTime(quake, true)
tvReference.text = quake.reference
ivMagColor.formatFilterColor(requireContext(), quake)
}
}

binding.btnShareIgStory.setOnClickListener {
instagramShareIntent()
}

return binding.root
}

private fun instagramShareIntent() {

val bitmap = viewToBitmap(binding.includeShareQuake.cvShareQuake)
val bitMapUriView = requireContext().getLocalBitmapUri(bitmap)

requireContext().grantUriPermission(
"com.instagram.android",
bitMapUriView,
Intent.FLAG_GRANT_READ_URI_PERMISSION
)

val intent = Intent("com.instagram.share.ADD_TO_STORY").apply {
ivVerified.configVerified(quake)
ivSensitive.configSensitive(quake)
}

type = "image/*"
putExtra("source_application", "740961793640508")
putExtra("interactive_asset_uri", bitMapUriView)
putExtra("top_background_color", "#006994");
putExtra("bottom_background_color", "#006994");
btnShareIgStory.setOnClickListener {
requireContext().igShareIntent(includeShareQuake.cvShareQuake)
}
return root
}
startActivity(intent)
}

private fun viewToBitmap(view: View): Bitmap {
view.setLayerType(View.LAYER_TYPE_SOFTWARE, null)
val totalHeight = view.height
val totalWidth = view.width
val percent = 1.0f //use this value to scale bitmap to specific size


val canvasBitmap = Bitmap.createBitmap(totalWidth, totalHeight, Bitmap.Config.ARGB_8888)
canvasBitmap.eraseColor(Color.RED)
val canvas = Canvas(canvasBitmap)
canvas.scale(percent, percent)
view.draw(canvas)

return canvasBitmap
}
}
6 changes: 3 additions & 3 deletions app/src/main/res/drawable/round_add_instagram_story.xml
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="@color/grey_dark"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@color/grey_dark"
android:fillColor="@color/white"
android:fillType="evenOdd"
android:pathData="M12,5.25C12.414,5.25 12.75,5.586 12.75,6V18C12.75,18.414 12.414,18.75 12,18.75C11.586,18.75 11.25,18.414 11.25,18V6C11.25,5.586 11.586,5.25 12,5.25Z" />
<path
android:fillColor="@color/grey_dark"
android:fillColor="@color/white"
android:fillType="evenOdd"
android:pathData="M5.25,12C5.25,11.586 5.586,11.25 6,11.25H18C18.414,11.25 18.75,11.586 18.75,12 18.75,12.414 18.414,12.75 18,12.75H6C5.586,12.75 5.25,12.414 5.25,12zM10.226,2.128C10.33,2.529 10.088,2.938 9.687,3.041 9.191,3.169 8.71,3.337 8.25,3.541 7.871,3.71 7.428,3.539 7.26,3.16 7.092,2.782 7.262,2.339 7.641,2.171 8.177,1.933 8.735,1.737 9.313,1.589 9.714,1.485 10.123,1.727 10.226,2.128zM5.756,4.152C6.038,4.456 6.02,4.931 5.716,5.212 4.971,5.902 4.341,6.712 3.855,7.611 3.658,7.976 3.203,8.111 2.839,7.915 2.474,7.718 2.339,7.263 2.535,6.898 3.1,5.853 3.832,4.912 4.696,4.112 5,3.83 5.475,3.849 5.756,4.152zM2.256,9.619C2.665,9.686 2.941,10.073 2.874,10.481 2.792,10.975 2.75,11.482 2.75,12 2.75,12.518 2.792,13.025 2.874,13.519 2.941,13.927 2.665,14.313 2.256,14.381 1.847,14.448 1.461,14.172 1.394,13.763 1.299,13.189 1.25,12.6 1.25,12 1.25,11.4 1.299,10.811 1.394,10.237 1.461,9.828 1.847,9.552 2.256,9.619zM2.839,16.085C3.203,15.888 3.658,16.024 3.855,16.389 4.341,17.288 4.971,18.098 5.716,18.788 6.02,19.069 6.038,19.544 5.756,19.847 5.475,20.151 5,20.169 4.696,19.888 3.832,19.088 3.1,18.147 2.535,17.101 2.339,16.737 2.474,16.282 2.839,16.085zM7.26,20.839C7.428,20.461 7.871,20.29 8.25,20.458 8.71,20.663 9.191,20.831 9.687,20.958 10.088,21.062 10.33,21.471 10.226,21.872 10.123,22.273 9.714,22.514 9.313,22.411 8.735,22.263 8.177,22.067 7.641,21.829 7.262,21.661 7.092,21.218 7.26,20.839zM11.25,2C11.25,1.586 11.586,1.25 12,1.25 17.937,1.25 22.75,6.063 22.75,12 22.75,12.414 22.414,12.75 22,12.75 21.586,12.75 21.25,12.414 21.25,12 21.25,6.891 17.109,2.75 12,2.75 11.586,2.75 11.25,2.414 11.25,2zM21.468,15.313C21.848,15.479 22.021,15.921 21.855,16.3 20.197,20.095 16.409,22.75 12,22.75 11.586,22.75 11.25,22.414 11.25,22 11.25,21.586 11.586,21.25 12,21.25 15.792,21.25 19.053,18.968 20.481,15.7 20.646,15.32 21.089,15.147 21.468,15.313z" />
</vector>
5 changes: 1 addition & 4 deletions app/src/main/res/layout/card_view_quake_bottom_sheet.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,7 @@
android:clickable="true"
android:focusable="true"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:paddingStart="16dp"
android:paddingTop="8dp"
android:paddingEnd="16dp"
android:paddingBottom="8dp">
android:padding="@dimen/corner_radius_16dp">

<ImageView
android:id="@+id/iv_mag_color"
Expand Down
7 changes: 2 additions & 5 deletions app/src/main/res/layout/card_view_share_quake.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/cv_share_quake"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="@dimen/corner_radius_16dp"
app:cardPreventCornerOverlap="true"
app:cardUseCompatPadding="true">
android:layout_height="wrap_content">

<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
Expand All @@ -16,7 +13,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:contentDescription="TODO"
android:contentDescription="@string/google_map_screenshot"
android:padding="1dp"
android:scaleType="centerCrop"
app:layout_constraintEnd_toEndOf="parent"
Expand Down
22 changes: 14 additions & 8 deletions app/src/main/res/layout/share_quake_bottom_sheet.xml
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:paddingTop="@dimen/corner_radius_16dp"
android:paddingBottom="@dimen/corner_radius_16dp"
android:paddingTop="@dimen/corner_radius_8dp"
android:paddingBottom="@dimen/corner_radius_8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
Expand All @@ -53,34 +53,40 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal">
android:orientation="horizontal"
android:paddingTop="@dimen/corner_radius_8dp"
android:paddingBottom="@dimen/corner_radius_8dp">

<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/btn_share_ig_story"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:contentDescription="TODO"
android:contentDescription="Instagram stories button"
app:elevation="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/round_add_instagram_story" />
app:rippleColor="@color/colorPrimaryVariant"
app:srcCompat="@drawable/round_add_instagram_story"
app:tint="@color/white" />

<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/btn_share_ig_feed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:contentDescription="TODO"
android:enabled="false"
android:contentDescription="Instagram feed button"
app:backgroundTintMode="src_atop"
app:elevation="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/btn_share_ig_story"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0"
app:srcCompat="@drawable/round_share_24" />
app:rippleColor="@color/colorPrimaryVariant"
app:srcCompat="@drawable/round_share_24"
app:tint="@color/white" />


</androidx.constraintlayout.widget.ConstraintLayout>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-en/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -155,5 +155,6 @@
<string name="consent_privacy_preference_title">Consent Policy</string>
<string name="conset_privacy_preference_subtitle">Personalized advertising</string>
<string name="moment_magnitude_w">Moment magnitude w phase (Mww)</string>
<string name="google_map_screenshot">Google map screenshot</string>

</resources>
1 change: 1 addition & 0 deletions app/src/main/res/values-es/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -155,4 +155,5 @@
<string name="permission_totally_disabled">Permiso desactivado, reinstala para activarlo</string>
<string name="consent_privacy_preference_title">Política de consentimiento</string>
<string name="conset_privacy_preference_subtitle">Publicidad personalizada</string>
<string name="google_map_screenshot">Captura de pantalla de google maps</string>
</resources>
Loading

0 comments on commit 180f544

Please sign in to comment.