mirror of
https://github.com/Shabinder/SpotiFlyer.git
synced 2024-11-25 02:14:32 +01:00
Basic Functionality Added and Started Understanding how Spotify Api works
This commit is contained in:
parent
d2faca10fb
commit
3cb3162beb
@ -1,6 +1,7 @@
|
||||
<component name="ProjectDictionaryState">
|
||||
<dictionary name="shabinder">
|
||||
<words>
|
||||
<w>musicforeveryone</w>
|
||||
<w>shabinder</w>
|
||||
<w>spotify</w>
|
||||
<w>spotifydownloader</w>
|
||||
|
@ -37,6 +37,7 @@ dependencies {
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||
implementation 'androidx.core:core-ktx:1.3.0'
|
||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
||||
implementation 'androidx.browser:browser:1.2.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
||||
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
|
||||
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
|
||||
@ -57,10 +58,11 @@ dependencies {
|
||||
|
||||
implementation 'com.google.apis:google-api-services-youtube:v3-rev180-1.22.0'
|
||||
implementation 'com.google.oauth-client:google-oauth-client:1.22.0'
|
||||
implementation 'com.spotify.android:auth:1.2.3'
|
||||
implementation 'com.spotify.android:auth:1.1.0'
|
||||
implementation 'com.google.code.gson:gson:2.8.6'
|
||||
implementation 'com.squareup.okhttp3:okhttp:4.8.0'
|
||||
|
||||
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
|
||||
testImplementation 'junit:junit:4.13'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
|
||||
|
@ -2,6 +2,14 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.shabinder.musicForEveryone">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
@ -9,6 +17,7 @@
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme">
|
||||
|
||||
<activity android:name="com.shabinder.musicForEveryone.MainActivity">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
@ -16,6 +25,10 @@
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name="com.spotify.sdk.android.authentication.LoginActivity"
|
||||
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
@ -1,18 +1,100 @@
|
||||
package com.shabinder.musicForEveryone
|
||||
|
||||
import android.Manifest
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.StrictMode
|
||||
import android.util.Log
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.shabinder.musicForEveryone.fragments.MainFragment
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import com.shabinder.musicForEveryone.databinding.MainActivityBinding
|
||||
import com.spotify.sdk.android.authentication.AuthenticationClient
|
||||
import com.spotify.sdk.android.authentication.AuthenticationRequest
|
||||
import com.spotify.sdk.android.authentication.AuthenticationResponse
|
||||
import com.spotify.sdk.android.authentication.LoginActivity
|
||||
import kaaes.spotify.webapi.android.SpotifyApi
|
||||
import kaaes.spotify.webapi.android.SpotifyService
|
||||
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
|
||||
private lateinit var binding: MainActivityBinding
|
||||
val REDIRECT_URI = "musicforeveryone://callback"
|
||||
val CLIENT_ID:String = "694d8bf4f6ec420fa66ea7fb4c68f89d"
|
||||
// val musicDirectory = File(this.filesDir?.absolutePath + "/Music/")
|
||||
var message :String =""
|
||||
var token :String =""
|
||||
var spotify: SpotifyService? = null
|
||||
lateinit var mainViewModel: MainViewModel
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.main_activity)
|
||||
if (savedInstanceState == null) {
|
||||
supportFragmentManager.beginTransaction()
|
||||
.replace(R.id.container, MainFragment.newInstance())
|
||||
.commitNow()
|
||||
binding = DataBindingUtil.setContentView(this,R.layout.main_activity)
|
||||
|
||||
mainViewModel = ViewModelProvider(this).get(MainViewModel::class.java)
|
||||
val policy =
|
||||
StrictMode.ThreadPolicy.Builder().permitAll().build()
|
||||
StrictMode.setThreadPolicy(policy)
|
||||
//TODO Use Coroutines
|
||||
if(spotify==null){
|
||||
authenticateSpotify()
|
||||
}
|
||||
requestPermission()
|
||||
|
||||
}
|
||||
|
||||
private fun authenticateSpotify() {
|
||||
val builder = AuthenticationRequest.Builder(CLIENT_ID,AuthenticationResponse.Type.TOKEN,REDIRECT_URI)
|
||||
.setShowDialog(true)
|
||||
.setScopes(arrayOf("user-read-private","streaming","user-read-email","user-modify-playback-state","user-top-read","user-library-modify","user-read-currently-playing","user-library-read","user-read-recently-played"))
|
||||
val request: AuthenticationRequest = builder.build()
|
||||
AuthenticationClient.openLoginActivity(this, LoginActivity.REQUEST_CODE, request)
|
||||
}
|
||||
|
||||
override fun onActivityResult(
|
||||
requestCode: Int,
|
||||
resultCode: Int,
|
||||
intent: Intent?
|
||||
) {
|
||||
super.onActivityResult(requestCode, resultCode, intent)
|
||||
// Check if result comes from the correct activity
|
||||
if (requestCode == LoginActivity.REQUEST_CODE) {
|
||||
val response = AuthenticationClient.getResponse(resultCode, intent)
|
||||
when (response.type) {
|
||||
AuthenticationResponse.Type.TOKEN -> {
|
||||
Log.i("Network",response.accessToken.toString())
|
||||
token = response.accessToken
|
||||
|
||||
|
||||
val api = SpotifyApi()
|
||||
api.setAccessToken(token)
|
||||
spotify = api.service
|
||||
mainViewModel.spotify = api.service
|
||||
//Initiate Processes In Main Fragment
|
||||
val me = spotify?.me?.display_name
|
||||
mainViewModel.userName.value = me
|
||||
Log.i("Network",me!!)
|
||||
|
||||
|
||||
}
|
||||
AuthenticationResponse.Type.ERROR -> {
|
||||
Log.i("Network",response.error.toString())
|
||||
|
||||
}
|
||||
else -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun requestPermission() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
requestPermissions(
|
||||
arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
|
||||
786
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package com.shabinder.musicForEveryone
|
||||
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import kaaes.spotify.webapi.android.SpotifyService
|
||||
|
||||
class MainViewModel : ViewModel() {
|
||||
|
||||
var apiCame = MutableLiveData<Int>().apply { value = 0 }
|
||||
var userName = MutableLiveData<String>().apply { value = "Placeholder" }
|
||||
|
||||
|
||||
var spotify :SpotifyService? = null
|
||||
|
||||
}
|
@ -4,56 +4,36 @@ import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.ViewModelProviders
|
||||
import com.shabinder.musicForEveryone.MainActivity
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import com.shabinder.musicForEveryone.MainViewModel
|
||||
import com.shabinder.musicForEveryone.R
|
||||
import com.shabinder.musicForEveryone.ui.main.MainViewModel
|
||||
import com.shabinder.musicForEveryone.databinding.MainFragmentBinding
|
||||
import kaaes.spotify.webapi.android.SpotifyService
|
||||
|
||||
|
||||
class MainFragment : Fragment() {
|
||||
|
||||
var spotify: SpotifyService? = null
|
||||
|
||||
|
||||
companion object {
|
||||
fun newInstance() = MainFragment()
|
||||
const val CLIENT_ID:String = "4fe3fecfe5334023a1472516cc99d805"
|
||||
const val spotify_client_secret:String = "0f02b7c483c04257984695007a4a8d5c"
|
||||
}
|
||||
|
||||
private lateinit var viewModel: MainViewModel
|
||||
lateinit var binding:MainFragmentBinding
|
||||
private lateinit var mainViewModel: MainViewModel
|
||||
var spotify : SpotifyService? = null
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater, container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
|
||||
if(spotify==null){
|
||||
authenticateSpotify()
|
||||
}
|
||||
|
||||
requestPermission()
|
||||
|
||||
return inflater.inflate(R.layout.main_fragment, container, false)
|
||||
binding = DataBindingUtil.inflate(inflater,R.layout.main_fragment,container,false)
|
||||
return binding.root
|
||||
}
|
||||
|
||||
fun authenticateSpotify() {
|
||||
val builder: AuthenticationRequest.Builder = Builder(
|
||||
CLIENT_ID,
|
||||
AuthenticationResponse.Type.TOKEN,
|
||||
MainActivity.REDIRECT_URI
|
||||
)
|
||||
builder.setScopes(arrayOf("user-read-private", "streaming"))
|
||||
val request: AuthenticationRequest = builder.build()
|
||||
AuthenticationClient.openLoginActivity(this, REQUEST_CODE, request)
|
||||
}
|
||||
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
|
||||
// TODO: Use the ViewModel
|
||||
mainViewModel = ViewModelProvider(this.requireActivity()).get(MainViewModel::class.java)
|
||||
spotify = mainViewModel.spotify
|
||||
mainViewModel.userName.observeForever {
|
||||
binding.message.text = it
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
package com.shabinder.musicForEveryone.ui.main
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
|
||||
class MainViewModel : ViewModel() {
|
||||
// TODO: Implement the ViewModel
|
||||
}
|
@ -4,6 +4,7 @@
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/mainActivity"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
|
@ -1,20 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<layout
|
||||
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:id="@+id/main"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".fragments.MainFragment">
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/main"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".fragments.MainFragment">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/message"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="MainFragment"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
<TextView
|
||||
android:id="@+id/message"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="MainFragment"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</layout>
|
||||
|
@ -1,3 +1,3 @@
|
||||
<resources>
|
||||
<string name="app_name">spotifyDownloader</string>
|
||||
<string name="app_name">musicForEveryone</string>
|
||||
</resources>
|
Loading…
Reference in New Issue
Block a user