Added Share instagram stories
This commit is contained in:
parent
5d640b59d1
commit
8e387264d5
16 changed files with 320 additions and 228 deletions
|
@ -119,7 +119,7 @@
|
|||
<activity android:name=".activities.PurchaseActivity" />
|
||||
<activity android:name=".activities.WhatsNewActivity" />
|
||||
<activity android:name=".activities.bugreport.BugReportActivity" />
|
||||
|
||||
<activity android:name=".activities.ShareInstagramStory" />
|
||||
<activity
|
||||
android:name=".activities.SearchActivity"
|
||||
android:windowSoftInputMode="stateVisible" />
|
||||
|
|
|
@ -0,0 +1,87 @@
|
|||
/*
|
||||
* Copyright (c) 2020 Hemanth Savarala.
|
||||
*
|
||||
* Licensed under the GNU General Public License v3
|
||||
*
|
||||
* This is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* See the GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
package code.name.monkey.retromusic.activities
|
||||
|
||||
import android.content.res.ColorStateList
|
||||
import android.graphics.Bitmap
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.provider.MediaStore.Images.Media
|
||||
import androidx.core.view.drawToBitmap
|
||||
import code.name.monkey.appthemehelper.ThemeStore
|
||||
import code.name.monkey.appthemehelper.util.ATHUtil
|
||||
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
|
||||
import code.name.monkey.retromusic.R
|
||||
import code.name.monkey.retromusic.activities.base.AbsBaseActivity
|
||||
import code.name.monkey.retromusic.glide.SongGlideRequest
|
||||
import code.name.monkey.retromusic.model.Song
|
||||
import code.name.monkey.retromusic.util.Share
|
||||
import com.bumptech.glide.Glide
|
||||
import kotlinx.android.synthetic.main.activity_share_instagram.image
|
||||
import kotlinx.android.synthetic.main.activity_share_instagram.mainContent
|
||||
import kotlinx.android.synthetic.main.activity_share_instagram.shareButton
|
||||
import kotlinx.android.synthetic.main.activity_share_instagram.shareText
|
||||
import kotlinx.android.synthetic.main.activity_share_instagram.shareTitle
|
||||
import kotlinx.android.synthetic.main.activity_share_instagram.toolbar
|
||||
|
||||
/**
|
||||
* Created by hemanths on 2020-02-02.
|
||||
*/
|
||||
|
||||
class ShareInstagramStory : AbsBaseActivity() {
|
||||
|
||||
companion object {
|
||||
const val EXTRA_SONG = "extra_song"
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
setDrawUnderStatusBar()
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_share_instagram)
|
||||
setStatusbarColorAuto()
|
||||
setNavigationbarColorAuto()
|
||||
setLightNavigationBar(true)
|
||||
|
||||
val toolbarColor = ATHUtil.resolveColor(this, R.attr.colorSurface)
|
||||
toolbar.setBackgroundColor(toolbarColor)
|
||||
ToolbarContentTintHelper.colorBackButton(toolbar)
|
||||
setSupportActionBar(toolbar)
|
||||
|
||||
val song = intent.extras?.getParcelable<Song>(EXTRA_SONG)
|
||||
song?.let { songFinal ->
|
||||
SongGlideRequest.Builder.from(Glide.with(this), songFinal)
|
||||
.asBitmap()
|
||||
.build()
|
||||
.into(image)
|
||||
|
||||
shareTitle.text = songFinal.title
|
||||
shareText.text = songFinal.artistName
|
||||
shareButton.setOnClickListener {
|
||||
val path: String = Media.insertImage(
|
||||
contentResolver,
|
||||
mainContent.drawToBitmap(Bitmap.Config.ARGB_8888),
|
||||
"Design", null
|
||||
)
|
||||
val uri = Uri.parse(path)
|
||||
Share.shareFileToInstagram(
|
||||
this@ShareInstagramStory,
|
||||
songFinal,
|
||||
uri
|
||||
)
|
||||
}
|
||||
}
|
||||
shareButton.backgroundTintList = ColorStateList.valueOf(ThemeStore.accentColor(this))
|
||||
}
|
||||
}
|
|
@ -306,6 +306,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), AbsPlay
|
|||
} else if (currentNowPlayingScreen == FULL || currentNowPlayingScreen == CARD || currentNowPlayingScreen == FIT || currentNowPlayingScreen == BLUR || currentNowPlayingScreen == BLUR_CARD) {
|
||||
super.setLightStatusbar(false)
|
||||
super.setLightNavigationBar(true)
|
||||
super.setNavigationbarColor(Color.BLACK)
|
||||
} else if (currentNowPlayingScreen == COLOR || currentNowPlayingScreen == TINY) {
|
||||
super.setNavigationbarColor(paletteColor)
|
||||
super.setLightNavigationBar(isColorLight)
|
||||
|
|
|
@ -19,6 +19,7 @@ import android.content.Intent
|
|||
import android.os.Bundle
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import code.name.monkey.retromusic.R
|
||||
import code.name.monkey.retromusic.activities.ShareInstagramStory
|
||||
import code.name.monkey.retromusic.model.Song
|
||||
import code.name.monkey.retromusic.util.MusicUtil
|
||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||
|
@ -29,7 +30,7 @@ import com.afollestad.materialdialogs.list.listItems
|
|||
|
||||
class SongShareDialog : DialogFragment() {
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
val song: Song? = arguments!!.getParcelable("song")
|
||||
val song: Song? = arguments?.getParcelable("song")
|
||||
val currentlyListening: String =
|
||||
getString(R.string.currently_listening_to_x_by_x, song?.title, song?.artistName)
|
||||
|
||||
|
@ -40,7 +41,8 @@ class SongShareDialog : DialogFragment() {
|
|||
listItems(
|
||||
items = listOf(
|
||||
getString(code.name.monkey.retromusic.R.string.the_audio_file),
|
||||
"\u201C" + currentlyListening + "\u201D"
|
||||
"\u201C" + currentlyListening + "\u201D",
|
||||
getString(R.string.social_instagram)
|
||||
)
|
||||
) { _, index, _ ->
|
||||
when (index) {
|
||||
|
@ -53,7 +55,7 @@ class SongShareDialog : DialogFragment() {
|
|||
}, null))
|
||||
}
|
||||
1 -> {
|
||||
activity!!.startActivity(
|
||||
startActivity(
|
||||
Intent.createChooser(
|
||||
Intent()
|
||||
.setAction(Intent.ACTION_SEND)
|
||||
|
@ -63,6 +65,16 @@ class SongShareDialog : DialogFragment() {
|
|||
)
|
||||
)
|
||||
}
|
||||
2 -> {
|
||||
if (song != null) {
|
||||
startActivity(
|
||||
Intent(requireContext(), ShareInstagramStory::class.java).putExtra(
|
||||
ShareInstagramStory.EXTRA_SONG,
|
||||
song
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -76,15 +76,15 @@ abstract class AbsPlayerFragment : AbsMusicServiceFragment(),
|
|||
return true
|
||||
}
|
||||
R.id.action_share -> {
|
||||
SongShareDialog.create(song).show(requireFragmentManager(), "SHARE_SONG")
|
||||
SongShareDialog.create(song).show(childFragmentManager, "SHARE_SONG")
|
||||
return true
|
||||
}
|
||||
R.id.action_delete_from_device -> {
|
||||
DeleteSongsDialog.create(song).show(requireFragmentManager(), "DELETE_SONGS")
|
||||
DeleteSongsDialog.create(song).show(childFragmentManager, "DELETE_SONGS")
|
||||
return true
|
||||
}
|
||||
R.id.action_add_to_playlist -> {
|
||||
AddToPlaylistDialog.create(song).show(requireFragmentManager(), "ADD_PLAYLIST")
|
||||
AddToPlaylistDialog.create(song).show(childFragmentManager, "ADD_PLAYLIST")
|
||||
return true
|
||||
}
|
||||
R.id.action_clear_playing_queue -> {
|
||||
|
@ -93,7 +93,7 @@ abstract class AbsPlayerFragment : AbsMusicServiceFragment(),
|
|||
}
|
||||
R.id.action_save_playing_queue -> {
|
||||
CreatePlaylistDialog.create(MusicPlayerRemote.playingQueue)
|
||||
.show(requireFragmentManager(), "ADD_TO_PLAYLIST")
|
||||
.show(childFragmentManager, "ADD_TO_PLAYLIST")
|
||||
return true
|
||||
}
|
||||
R.id.action_tag_editor -> {
|
||||
|
@ -103,7 +103,7 @@ abstract class AbsPlayerFragment : AbsMusicServiceFragment(),
|
|||
return true
|
||||
}
|
||||
R.id.action_details -> {
|
||||
SongDetailDialog.create(song).show(requireFragmentManager(), "SONG_DETAIL")
|
||||
SongDetailDialog.create(song).show(childFragmentManager, "SONG_DETAIL")
|
||||
return true
|
||||
}
|
||||
R.id.action_go_to_album -> {
|
||||
|
|
|
@ -396,18 +396,27 @@ public class MusicService extends Service implements
|
|||
|
||||
mediaStoreObserver = new MediaStoreObserver(this, playerHandler);
|
||||
throttledSeekHandler = new ThrottledSeekHandler(this, playerHandler);
|
||||
getContentResolver().registerContentObserver(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||
getContentResolver().registerContentObserver(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||
getContentResolver().registerContentObserver(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||
getContentResolver().registerContentObserver(MediaStore.Audio.Genres.EXTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||
getContentResolver().registerContentObserver(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||
|
||||
getContentResolver().registerContentObserver(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||
getContentResolver().registerContentObserver(MediaStore.Audio.Albums.INTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||
getContentResolver().registerContentObserver(MediaStore.Audio.Artists.INTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||
getContentResolver().registerContentObserver(MediaStore.Audio.Genres.INTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||
getContentResolver().registerContentObserver(MediaStore.Audio.Playlists.INTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||
getContentResolver()
|
||||
.registerContentObserver(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||
getContentResolver()
|
||||
.registerContentObserver(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||
getContentResolver()
|
||||
.registerContentObserver(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||
getContentResolver()
|
||||
.registerContentObserver(MediaStore.Audio.Genres.EXTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||
getContentResolver()
|
||||
.registerContentObserver(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||
|
||||
getContentResolver()
|
||||
.registerContentObserver(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||
getContentResolver()
|
||||
.registerContentObserver(MediaStore.Audio.Albums.INTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||
getContentResolver()
|
||||
.registerContentObserver(MediaStore.Audio.Artists.INTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||
getContentResolver()
|
||||
.registerContentObserver(MediaStore.Audio.Genres.INTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||
getContentResolver()
|
||||
.registerContentObserver(MediaStore.Audio.Playlists.INTERNAL_CONTENT_URI, true, mediaStoreObserver);
|
||||
|
||||
PreferenceUtil.getInstance(this).registerOnSharedPreferenceChangedListener(this);
|
||||
|
||||
|
|
|
@ -1,101 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2019 Hemanth Savarala.
|
||||
*
|
||||
* Licensed under the GNU General Public License v3
|
||||
*
|
||||
* This is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* See the GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
package code.name.monkey.retromusic.util
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
||||
import android.os.Environment
|
||||
import java.io.File
|
||||
import java.io.FileInputStream
|
||||
import java.io.FileOutputStream
|
||||
import java.io.IOException
|
||||
|
||||
/**
|
||||
* Created by hemanths on 2019-11-05.
|
||||
*/
|
||||
|
||||
class ImageSaver(val context: Context) {
|
||||
private var external: Boolean = false
|
||||
private var directoryName: String = "RetroMusic"
|
||||
private var fileName: String = "profile.png"
|
||||
|
||||
fun setFileName(fileName: String): ImageSaver {
|
||||
this.fileName = fileName
|
||||
return this
|
||||
}
|
||||
|
||||
fun setDirectoryName(directoryName: String): ImageSaver {
|
||||
this.directoryName = directoryName
|
||||
return this
|
||||
}
|
||||
|
||||
fun setStoreType(external: Boolean): ImageSaver {
|
||||
this.external = external
|
||||
return this
|
||||
}
|
||||
|
||||
fun save(bitmap: Bitmap) {
|
||||
var fileOutputStream: FileOutputStream? = null
|
||||
try {
|
||||
fileOutputStream = FileOutputStream(createFile())
|
||||
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream)
|
||||
} catch (er: Exception) {
|
||||
println(er)
|
||||
} finally {
|
||||
try {
|
||||
fileOutputStream?.close()
|
||||
} catch (er: IOException) {
|
||||
println(er)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getFile(): File {
|
||||
return createFile()
|
||||
}
|
||||
|
||||
private fun createFile(): File {
|
||||
val directory: File = if (external) {
|
||||
getFileStorePlace(directoryName)
|
||||
} else {
|
||||
context.getDir(directoryName, Context.MODE_PRIVATE)
|
||||
}
|
||||
if (!directory.exists() && !directory.mkdirs()) {
|
||||
println("Error in creating folders $directory")
|
||||
}
|
||||
println("Create file -> $directory/$fileName")
|
||||
return File(directory, fileName)
|
||||
}
|
||||
|
||||
private fun getFileStorePlace(directoryName: String): File {
|
||||
return File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), directoryName)
|
||||
}
|
||||
|
||||
fun load(): Bitmap? {
|
||||
var inputStream: FileInputStream? = null
|
||||
return try {
|
||||
inputStream = FileInputStream(createFile())
|
||||
BitmapFactory.decodeStream(inputStream)
|
||||
} catch (er: Exception) {
|
||||
try {
|
||||
inputStream?.close()
|
||||
} catch (e: IOException) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
null
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,84 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2019 Hemanth Savarala.
|
||||
*
|
||||
* Licensed under the GNU General Public License v3
|
||||
*
|
||||
* This is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* See the GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
package code.name.monkey.retromusic.util;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import code.name.monkey.retromusic.rest.model.LastFmAlbum.Album.Image;
|
||||
import code.name.monkey.retromusic.rest.model.LastFmArtist;
|
||||
|
||||
public class LastFMUtil {
|
||||
|
||||
public static String getLargestAlbumImageUrl(List<Image> list) {
|
||||
Map hashMap = new HashMap();
|
||||
for (Image image : list) {
|
||||
Object obj = null;
|
||||
String size = image.getSize();
|
||||
if (size == null) {
|
||||
obj = ImageSize.UNKNOWN;
|
||||
} else {
|
||||
try {
|
||||
obj = ImageSize.valueOf(size.toUpperCase(Locale.ENGLISH));
|
||||
} catch (IllegalArgumentException ignored) {
|
||||
}
|
||||
}
|
||||
if (obj != null) {
|
||||
hashMap.put(obj, image.getText());
|
||||
}
|
||||
}
|
||||
return getLargestImageUrl(hashMap);
|
||||
}
|
||||
|
||||
public static String getLargestArtistImageUrl(List<LastFmArtist.Artist.Image> list) {
|
||||
Map hashMap = new HashMap();
|
||||
for (LastFmArtist.Artist.Image image : list) {
|
||||
Object obj = null;
|
||||
String size = image.getSize();
|
||||
if (size == null) {
|
||||
obj = ImageSize.UNKNOWN;
|
||||
} else {
|
||||
try {
|
||||
obj = ImageSize.valueOf(size.toUpperCase(Locale.ENGLISH));
|
||||
} catch (IllegalArgumentException ignored) {
|
||||
}
|
||||
}
|
||||
if (obj != null) {
|
||||
hashMap.put(obj, image.getText());
|
||||
}
|
||||
}
|
||||
return getLargestImageUrl(hashMap);
|
||||
}
|
||||
|
||||
private static String getLargestImageUrl(Map<ImageSize, String> map) {
|
||||
return map.containsKey(ImageSize.MEGA) ? map.get(ImageSize.MEGA)
|
||||
: map.containsKey(ImageSize.EXTRALARGE) ? map.get(ImageSize.EXTRALARGE)
|
||||
: map.containsKey(ImageSize.LARGE) ? map.get(ImageSize.LARGE)
|
||||
: map.containsKey(ImageSize.MEDIUM) ? map.get(ImageSize.MEDIUM)
|
||||
: map.containsKey(ImageSize.SMALL) ? map.get(ImageSize.SMALL)
|
||||
: map.containsKey(ImageSize.UNKNOWN) ? map.get(ImageSize.UNKNOWN) : null;
|
||||
}
|
||||
|
||||
private enum ImageSize {
|
||||
SMALL,
|
||||
MEDIUM,
|
||||
LARGE,
|
||||
EXTRALARGE,
|
||||
MEGA,
|
||||
UNKNOWN
|
||||
}
|
||||
}
|
51
app/src/main/java/code/name/monkey/retromusic/util/Share.kt
Normal file
51
app/src/main/java/code/name/monkey/retromusic/util/Share.kt
Normal file
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* Copyright (c) 2020 Hemanth Savarala.
|
||||
*
|
||||
* Licensed under the GNU General Public License v3
|
||||
*
|
||||
* This is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* See the GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
package code.name.monkey.retromusic.util
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import androidx.core.app.ActivityCompat
|
||||
import code.name.monkey.retromusic.R
|
||||
import code.name.monkey.retromusic.model.Song
|
||||
|
||||
/**
|
||||
* Created by hemanths on 2020-02-02.
|
||||
*/
|
||||
|
||||
object Share {
|
||||
|
||||
private const val INSTAGRAM_PACKAGE_NAME = "com.instagram.android"
|
||||
|
||||
fun shareFileToInstagram(context: Context, song: Song, uri: Uri) {
|
||||
val feedIntent = Intent(Intent.ACTION_SEND)
|
||||
feedIntent.type = "image/*"
|
||||
feedIntent.putExtra(Intent.EXTRA_TITLE, song.title)
|
||||
feedIntent.putExtra(Intent.EXTRA_TEXT, song.artistName)
|
||||
feedIntent.putExtra(Intent.EXTRA_STREAM, uri)
|
||||
feedIntent.setPackage(INSTAGRAM_PACKAGE_NAME)
|
||||
|
||||
val storiesIntent = Intent("com.instagram.share.ADD_TO_STORY")
|
||||
storiesIntent.setDataAndType(uri, "jpg")
|
||||
storiesIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||
storiesIntent.setPackage(INSTAGRAM_PACKAGE_NAME)
|
||||
storiesIntent.putExtra(Intent.EXTRA_TITLE, song.title)
|
||||
storiesIntent.putExtra(Intent.EXTRA_TEXT, song.artistName)
|
||||
context.grantUriPermission("com.instagram.android", uri, Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||
val chooserIntent = Intent.createChooser(feedIntent, context.getString(R.string.social_instagram))
|
||||
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, arrayOf(storiesIntent))
|
||||
ActivityCompat.startActivity(context, chooserIntent, null)
|
||||
}
|
||||
}
|
|
@ -1,8 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
>
|
||||
<gradient
|
||||
android:angle="90"
|
||||
android:endColor="@android:color/transparent"
|
||||
android:startColor="#000000"/>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<gradient
|
||||
android:angle="90"
|
||||
android:endColor="@android:color/transparent"
|
||||
android:startColor="@color/md_black_1000" />
|
||||
</shape>
|
117
app/src/main/res/layout/activity_share_instagram.xml
Normal file
117
app/src/main/res/layout/activity_share_instagram.xml
Normal file
|
@ -0,0 +1,117 @@
|
|||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
~ Copyright (c) 2020 Hemanth Savarala.
|
||||
~
|
||||
~ Licensed under the GNU General Public License v3
|
||||
~
|
||||
~ This is free software: you can redistribute it and/or modify it under
|
||||
~ the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation either version 3 of the License, or (at your option) any later version.
|
||||
~
|
||||
~ This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
~ without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
~ See the GNU General Public License for more details.
|
||||
-->
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<code.name.monkey.retromusic.views.StatusBarView
|
||||
android:id="@+id/status_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:background="?attr/colorSurface"
|
||||
tools:ignore="UnusedAttribute" />
|
||||
|
||||
|
||||
<androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
android:id="@+id/content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/colorSurface"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.google.android.material.appbar.AppBarLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:title="@string/social_instagram" />
|
||||
</com.google.android.material.appbar.AppBarLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/mainContent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<code.name.monkey.retromusic.views.WidthFitSquareCardView
|
||||
android:id="@+id/imageContainerCard"
|
||||
android:layout_width="320dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="24dp"
|
||||
app:cardCornerRadius="8dp"
|
||||
app:layout_constraintDimensionRatio="1:1"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/image"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scaleType="centerCrop"
|
||||
tools:src="@tools:sample/avatars" />
|
||||
</code.name.monkey.retromusic.views.WidthFitSquareCardView>
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/shareTitle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:gravity="center"
|
||||
android:textAppearance="@style/TextViewHeadline5"
|
||||
android:textColor="@color/md_white_1000"
|
||||
android:textStyle="bold"
|
||||
app:layout_constrainedWidth="true"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/imageContainerCard"
|
||||
tools:text="@tools:sample/full_names" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/shareText"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:textAppearance="@style/TextViewHeadline6"
|
||||
android:textColor="@color/md_white_1000"
|
||||
android:textStyle="bold"
|
||||
app:layout_constrainedWidth="true"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/shareTitle"
|
||||
tools:text="@tools:sample/full_names" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/shareButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom|center_horizontal"
|
||||
android:layout_margin="16dp"
|
||||
android:text="Instagram Stories"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/appCompatImageView"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/mainContent" />
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
</LinearLayout>
|
|
@ -22,7 +22,7 @@
|
|||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#C0000000" />
|
||||
android:background="@drawable/shadow_up_full_theme" />
|
||||
|
||||
|
||||
<LinearLayout
|
||||
|
@ -39,7 +39,6 @@
|
|||
android:layout_gravity="bottom"
|
||||
tools:layout="@layout/fragment_full_player_controls" />
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
|
@ -94,6 +93,7 @@
|
|||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextViewSubtitle1"
|
||||
android:textColor="@color/md_white_1000"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/artistImage"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
|
@ -128,7 +128,7 @@
|
|||
android:visibility="gone"
|
||||
tools:visibility="visible">
|
||||
|
||||
<TextView
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/player_lyrics_line1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -136,11 +136,11 @@
|
|||
android:shadowColor="@color/md_black_1000"
|
||||
android:shadowRadius="4"
|
||||
android:textAlignment="center"
|
||||
android:textAppearance="@style/TextViewHeadline6"
|
||||
android:textColor="@color/md_white_1000"
|
||||
android:textSize="22sp"
|
||||
android:visibility="gone" />
|
||||
|
||||
<TextView
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/player_lyrics_line2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -148,10 +148,9 @@
|
|||
android:shadowColor="@color/md_black_1000"
|
||||
android:shadowRadius="4"
|
||||
android:textAlignment="center"
|
||||
android:textColor="@color/md_white_1000"
|
||||
android:textSize="22sp" />
|
||||
android:textAppearance="@style/TextViewHeadline6"
|
||||
android:textColor="@color/md_white_1000" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:background="?attr/roundSelector"
|
||||
android:padding="12dp"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/text"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:srcCompat="@drawable/ic_more_vert_white_24dp" />
|
||||
|
@ -45,9 +46,7 @@
|
|||
android:ellipsize="end"
|
||||
android:gravity="center"
|
||||
android:maxLines="1"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingTop="12dp"
|
||||
android:paddingEnd="8dp"
|
||||
android:padding="8dp"
|
||||
android:textColor="@color/md_white_1000"
|
||||
app:layout_constraintBottom_toTopOf="@+id/progressSlider"
|
||||
app:layout_constraintEnd_toStartOf="@+id/playerMenu"
|
||||
|
@ -62,9 +61,9 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:background="?attr/roundSelector"
|
||||
android:padding="12dp"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/text"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_bias="0.0"
|
||||
app:layout_constraintTop_toTopOf="@+id/title"
|
||||
app:srcCompat="@drawable/ic_favorite_border_white_24dp" />
|
||||
|
||||
|
||||
|
|
|
@ -25,5 +25,5 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_alignTop="@id/dummy_statusbar_actionbar"
|
||||
android:layout_alignBottom="@id/dummy_statusbar_actionbar"
|
||||
android:background="@drawable/shadow_down" />
|
||||
android:background="@drawable/shadow_down_strong" />
|
||||
</RelativeLayout>
|
|
@ -460,7 +460,7 @@
|
|||
<string name="pick_image_intent_text">Pick image</string>
|
||||
|
||||
<string name="pinterest_page">Pinterest</string>
|
||||
<string name="pinterest_page_summary">Follow Pintrest page for Retro Music design inspiration</string>
|
||||
<string name="pinterest_page_summary">Follow Pinterest page for Retro Music design inspiration</string>
|
||||
|
||||
<string name="plain">Plain</string>
|
||||
|
||||
|
@ -821,4 +821,5 @@
|
|||
<string name="volume">Volume</string>
|
||||
<string name="listeners_label">Listeners</string>
|
||||
<string name="scrobbles_label">Scrobbles</string>
|
||||
<string name="social_instagram">Instagram story</string>
|
||||
</resources>
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<external-path name="external_files" path="."/>
|
||||
<paths>
|
||||
<external-path
|
||||
name="external_files"
|
||||
path="." />
|
||||
</paths>
|
Loading…
Reference in a new issue