diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c23b09d1..7b3d2b85 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -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")) @@ -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") diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 55112a17..5d4ecabb 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -91,7 +91,13 @@ - + + + + diff --git a/app/src/main/java/cl/figonzal/lastquakechile/core/utils/GoogleMapsExt.kt b/app/src/main/java/cl/figonzal/lastquakechile/core/utils/GoogleMapsExt.kt index 9907d441..4799974a 100644 --- a/app/src/main/java/cl/figonzal/lastquakechile/core/utils/GoogleMapsExt.kt +++ b/app/src/main/java/cl/figonzal/lastquakechile/core/utils/GoogleMapsExt.kt @@ -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 @@ -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 @@ -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?) { diff --git a/app/src/main/java/cl/figonzal/lastquakechile/core/utils/views/ViewsExt.kt b/app/src/main/java/cl/figonzal/lastquakechile/core/utils/views/ViewsExt.kt index aecd00a2..6a645ff1 100644 --- a/app/src/main/java/cl/figonzal/lastquakechile/core/utils/views/ViewsExt.kt +++ b/app/src/main/java/cl/figonzal/lastquakechile/core/utils/views/ViewsExt.kt @@ -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 @@ -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 @@ -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 @@ -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 */ diff --git a/app/src/main/java/cl/figonzal/lastquakechile/quake_feature/ui/dialog/ShareQuakeBottomSheetDialog.kt b/app/src/main/java/cl/figonzal/lastquakechile/quake_feature/ui/dialog/ShareQuakeBottomSheetDialog.kt index 3bc90594..00d9624c 100644 --- a/app/src/main/java/cl/figonzal/lastquakechile/quake_feature/ui/dialog/ShareQuakeBottomSheetDialog.kt +++ b/app/src/main/java/cl/figonzal/lastquakechile/quake_feature/ui/dialog/ShareQuakeBottomSheetDialog.kt @@ -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) : @@ -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 } } \ No newline at end of file diff --git a/app/src/main/res/drawable/round_add_instagram_story.xml b/app/src/main/res/drawable/round_add_instagram_story.xml index 67869728..333a9cf9 100644 --- a/app/src/main/res/drawable/round_add_instagram_story.xml +++ b/app/src/main/res/drawable/round_add_instagram_story.xml @@ -1,15 +1,15 @@ \ No newline at end of file diff --git a/app/src/main/res/layout/card_view_quake_bottom_sheet.xml b/app/src/main/res/layout/card_view_quake_bottom_sheet.xml index 4c2fa70d..727d6253 100644 --- a/app/src/main/res/layout/card_view_quake_bottom_sheet.xml +++ b/app/src/main/res/layout/card_view_quake_bottom_sheet.xml @@ -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"> + android:layout_height="wrap_content"> + android:orientation="horizontal" + android:paddingTop="@dimen/corner_radius_8dp" + android:paddingBottom="@dimen/corner_radius_8dp"> + app:rippleColor="@color/colorPrimaryVariant" + app:srcCompat="@drawable/round_add_instagram_story" + app:tint="@color/white" /> + app:rippleColor="@color/colorPrimaryVariant" + app:srcCompat="@drawable/round_share_24" + app:tint="@color/white" /> diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 10ea4872..f52d41c1 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -155,5 +155,6 @@ Consent Policy Personalized advertising Moment magnitude w phase (Mww) + Google map screenshot \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 175f03a3..f254dabf 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -155,4 +155,5 @@ Permiso desactivado, reinstala para activarlo PolĂ­tica de consentimiento Publicidad personalizada + Captura de pantalla de google maps \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ba7c0101..697a5322 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -207,6 +207,7 @@ Consent Policy Personalized advertising Moment magnitude w phase (Mww) + Google map screenshot \ No newline at end of file