diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml old mode 100644 new mode 100755 diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml old mode 100644 new mode 100755 index 88ea3aa1..3cc336b9 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -1,6 +1,22 @@ + + diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml old mode 100644 new mode 100755 diff --git a/.idea/dictionaries/shabinder.xml b/.idea/dictionaries/shabinder.xml old mode 100644 new mode 100755 index ac6c8e56..7218236f --- a/.idea/dictionaries/shabinder.xml +++ b/.idea/dictionaries/shabinder.xml @@ -2,15 +2,21 @@ downloadrecord + emoji ffmpeg flyer insta instagram + jetbrains + kotlinx mainfragment maxresdefault moshi + mozilla musicforeveryone musicplaceholder + raleway + semibold shabinder singh spoti diff --git a/.idea/gradle.xml b/.idea/gradle.xml old mode 100644 new mode 100755 index 8d4ad2e2..37d461f3 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -16,6 +16,7 @@ diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml old mode 100644 new mode 100755 diff --git a/.idea/misc.xml b/.idea/misc.xml old mode 100644 new mode 100755 index 6a0d5af2..d10a516c --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,7 +8,7 @@ - + diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml old mode 100644 new mode 100755 diff --git a/.idea/vcs.xml b/.idea/vcs.xml old mode 100644 new mode 100755 diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/ScreenShots/DownloadHistory.png b/ScreenShots/DownloadHistory.png old mode 100644 new mode 100755 diff --git a/ScreenShots/HomeScreen.png b/ScreenShots/HomeScreen.png old mode 100644 new mode 100755 diff --git a/ScreenShots/LibraryScreen.jpg b/ScreenShots/LibraryScreen.jpg old mode 100644 new mode 100755 diff --git a/ScreenShots/LibraryScreen2.jpg b/ScreenShots/LibraryScreen2.jpg old mode 100644 new mode 100755 diff --git a/ScreenShots/Notification.png b/ScreenShots/Notification.png old mode 100644 new mode 100755 diff --git a/ScreenShots/PlayList.png b/ScreenShots/PlayList.png old mode 100644 new mode 100755 diff --git a/app/.gitignore b/app/.gitignore old mode 100644 new mode 100755 diff --git a/app/SpotifyDownload.png b/app/SpotifyDownload.png old mode 100644 new mode 100755 diff --git a/app/build.gradle b/app/build.gradle old mode 100644 new mode 100755 index d8a2a6c8..0d1ba49f --- a/app/build.gradle +++ b/app/build.gradle @@ -25,7 +25,7 @@ apply plugin: 'dagger.hilt.android.plugin' android { compileSdkVersion 29 - buildToolsVersion "30.0.0" + buildToolsVersion "30.0.2" buildFeatures{ dataBinding = true @@ -35,8 +35,8 @@ android { applicationId 'com.shabinder.spotiflyer' minSdkVersion 22 targetSdkVersion 29 - versionCode 5 - versionName "1.4" + versionCode 6 + versionName "1.5" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } packagingOptions { @@ -61,6 +61,9 @@ android { targetCompatibility JavaVersion.VERSION_1_8 sourceCompatibility JavaVersion.VERSION_1_8 } + kotlinOptions { + jvmTarget = "1.8" + } lintOptions { abortOnError false } @@ -73,20 +76,20 @@ android { dependencies { implementation fileTree(dir: 'libs', include:['*.jar']) - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation 'androidx.core:core-ktx:1.3.1' + implementation "org.jetbrains.kotlin:kotlin-stdlib:1.4.10" + implementation 'androidx.core:core-ktx:1.3.2' implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.browser:browser:1.2.0' - implementation 'androidx.webkit:webkit:1.2.0' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.webkit:webkit:1.3.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0' - implementation 'androidx.navigation:navigation-fragment-ktx:2.3.0' - implementation 'androidx.navigation:navigation-ui-ktx:2.3.0' + implementation 'androidx.navigation:navigation-fragment-ktx:2.3.1' + implementation 'androidx.navigation:navigation-ui-ktx:2.3.1' implementation 'androidx.recyclerview:recyclerview:1.1.0' - implementation 'com.google.android.material:material:1.2.0' - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.7" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.7" + implementation 'com.google.android.material:material:1.2.1' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.0' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.0' implementation "androidx.room:room-runtime:2.2.5" kapt "androidx.room:room-compiler:2.2.5" @@ -106,30 +109,21 @@ dependencies { transitive = true } -// Authentication Way Changed! -// implementation ('com.google.apis:google-api-services-youtube:v3-rev180-1.22.0'){ -// exclude module: 'httpclient' -// } -// //noinspection GradleDependency -// implementation ('com.google.oauth-client:google-oauth-client:1.22.0'){ -// exclude module: 'httpclient' -// } -// implementation 'com.spotify.android:auth:1.1.0' - implementation 'com.squareup.okhttp3:okhttp:4.8.0' + implementation 'com.squareup.okhttp3:okhttp:4.9.0' implementation 'com.squareup.retrofit2:retrofit:2.9.0' - implementation "com.squareup.moshi:moshi:1.9.3" - implementation "com.squareup.moshi:moshi-kotlin:1.9.3" + implementation 'com.squareup.moshi:moshi:1.11.0' + implementation 'com.squareup.moshi:moshi-kotlin:1.11.0' implementation "com.squareup.retrofit2:converter-moshi:2.9.0" implementation 'com.mpatric:mp3agic:0.9.1' - implementation 'com.shreyaspatil:EasyUpiPayment:2.2' - implementation 'com.github.sealedtx:java-youtube-downloader:2.2.3' - implementation "androidx.tonyodev.fetch2:xfetch2:3.1.4" + implementation 'com.shreyaspatil:EasyUpiPayment:3.0.0' + implementation 'com.github.sealedtx:java-youtube-downloader:2.4.2' + implementation "androidx.tonyodev.fetch2:xfetch2:3.1.5" implementation 'com.github.javiersantos:AppUpdater:2.7' 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' + testImplementation 'junit:junit:4.13.1' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' } \ No newline at end of file diff --git a/app/build_passing.svg b/app/build_passing.svg old mode 100644 new mode 100755 diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro old mode 100644 new mode 100755 diff --git a/app/src/androidTest/java/com/shabinder/spotiflyer/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/shabinder/spotiflyer/ExampleInstrumentedTest.kt old mode 100644 new mode 100755 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml old mode 100644 new mode 100755 index 81bbfd1c..a0b844e7 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,6 +17,7 @@ --> @@ -29,8 +30,6 @@ - - + android:theme="@style/AppTheme" + tools:targetApi="q"> - + @@ -57,10 +59,7 @@ - + @@ -68,5 +67,4 @@ - \ No newline at end of file diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/App.kt b/app/src/main/java/com/shabinder/spotiflyer/App.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/MainActivity.kt b/app/src/main/java/com/shabinder/spotiflyer/MainActivity.kt old mode 100644 new mode 100755 index 9f72b8dc..c23208af --- a/app/src/main/java/com/shabinder/spotiflyer/MainActivity.kt +++ b/app/src/main/java/com/shabinder/spotiflyer/MainActivity.kt @@ -29,6 +29,7 @@ import android.os.PowerManager import android.provider.Settings import android.util.Log import androidx.appcompat.app.AppCompatActivity +import androidx.appcompat.app.AppCompatDelegate import androidx.databinding.DataBindingUtil import androidx.lifecycle.ViewModelProvider import com.github.javiersantos.appupdater.AppUpdater @@ -37,7 +38,7 @@ import com.shabinder.spotiflyer.databinding.MainActivityBinding import com.shabinder.spotiflyer.downloadHelper.SpotifyDownloadHelper import com.shabinder.spotiflyer.utils.SpotifyService import com.shabinder.spotiflyer.utils.SpotifyServiceTokenRequest -import com.shabinder.spotiflyer.utils.createDirectory +import com.shabinder.spotiflyer.utils.createDirectories import com.squareup.moshi.Moshi import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch @@ -62,20 +63,12 @@ class MainActivity : AppCompatActivity(){ @Inject lateinit var spotifyServiceTokenRequest: SpotifyServiceTokenRequest @Inject lateinit var moshi: Moshi - companion object{ - private var instance = MainActivity() - fun getInstance():MainActivity{ - return instance - } - } - init { - instance = this - } - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - binding = DataBindingUtil.setContentView(this,R.layout.main_activity) + binding = DataBindingUtil.setContentView(this, R.layout.main_activity) sharedViewModel = ViewModelProvider(this).get(SharedViewModel::class.java) + //Enabling Dark Mode + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) sharedPref = this.getPreferences(Context.MODE_PRIVATE) //starting Notification and Downloader Service! @@ -93,11 +86,17 @@ class MainActivity : AppCompatActivity(){ createDirectories() isConnected = sharedViewModel.isOnline(this) sharedViewModel.isConnected.value = isConnected - Log.i("Connection Status",isConnected.toString()) + Log.i("Connection Status", isConnected.toString()) handleIntentFromExternalActivity() } + override fun onNewIntent(intent: Intent?) { + super.onNewIntent(intent) + Log.i("NEW INTENT", "Received") + handleIntentFromExternalActivity(intent) + } + @SuppressLint("BatteryLife") fun disableDozeMode() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { @@ -133,7 +132,7 @@ class MainActivity : AppCompatActivity(){ /** * Adding my own new Spotify Web Api Requests! * */ - private fun implementSpotifyService(token:String) { + private fun implementSpotifyService(token: String) { val httpClient: OkHttpClient.Builder = OkHttpClient.Builder() httpClient.addInterceptor(object : Interceptor { @@ -175,12 +174,12 @@ class MainActivity : AppCompatActivity(){ } - private fun handleIntentFromExternalActivity() { + private fun handleIntentFromExternalActivity(intent: Intent? = getIntent()) { if (intent?.action == Intent.ACTION_SEND) { if ("text/plain" == intent.type) { intent.getStringExtra(Intent.EXTRA_TEXT)?.let { - Log.i("Intent Received",it) - sharedViewModel.intentString = it + Log.i("Intent Received", it) + sharedViewModel.intentString.value = it } } } @@ -195,8 +194,8 @@ class MainActivity : AppCompatActivity(){ } } - override fun onSaveInstanceState(savedInstanceState:Bundle) { - savedInstanceState.putString("token",token) + override fun onSaveInstanceState(savedInstanceState: Bundle) { + savedInstanceState.putString("token", token) super.onSaveInstanceState(savedInstanceState) } override fun onRestoreInstanceState(savedInstanceState: Bundle) { @@ -208,15 +207,6 @@ class MainActivity : AppCompatActivity(){ } } - private fun createDirectories() { - createDirectory(SpotifyDownloadHelper.defaultDir) - createDirectory(SpotifyDownloadHelper.defaultDir+".Images/") - createDirectory(SpotifyDownloadHelper.defaultDir+"Tracks/") - createDirectory(SpotifyDownloadHelper.defaultDir+"Albums/") - createDirectory(SpotifyDownloadHelper.defaultDir+"Playlists/") - createDirectory(SpotifyDownloadHelper.defaultDir+"YT_Downloads/") - } - private fun checkIfLatestVersion() { val appUpdater = AppUpdater(this) .showAppUpdated(false)//true:Show App is Update Dialog @@ -234,4 +224,14 @@ class MainActivity : AppCompatActivity(){ } appUpdater.start() } + + companion object{ + private var instance = MainActivity() + fun getInstance():MainActivity{ + return instance + } + } + init { + instance = this + } } \ No newline at end of file diff --git a/app/src/main/java/com/shabinder/spotiflyer/SharedViewModel.kt b/app/src/main/java/com/shabinder/spotiflyer/SharedViewModel.kt old mode 100644 new mode 100755 index 831493bf..3705a905 --- a/app/src/main/java/com/shabinder/spotiflyer/SharedViewModel.kt +++ b/app/src/main/java/com/shabinder/spotiflyer/SharedViewModel.kt @@ -31,7 +31,7 @@ import kotlinx.coroutines.Job import java.io.File class SharedViewModel : ViewModel() { - var intentString = "" + var intentString = MutableLiveData().apply { value = "" } var spotifyService = MutableLiveData() var accessToken = MutableLiveData().apply { value = "" } var isConnected = MutableLiveData().apply { value = false } diff --git a/app/src/main/java/com/shabinder/spotiflyer/database/DatabaseDAO.kt b/app/src/main/java/com/shabinder/spotiflyer/database/DatabaseDAO.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/database/DownloadRecord.kt b/app/src/main/java/com/shabinder/spotiflyer/database/DownloadRecord.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/database/DownloadRecordDatabase.kt b/app/src/main/java/com/shabinder/spotiflyer/database/DownloadRecordDatabase.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/downloadHelper/SpotifyDownloadHelper.kt b/app/src/main/java/com/shabinder/spotiflyer/downloadHelper/SpotifyDownloadHelper.kt old mode 100644 new mode 100755 index 5061ac5f..5263d6a7 --- a/app/src/main/java/com/shabinder/spotiflyer/downloadHelper/SpotifyDownloadHelper.kt +++ b/app/src/main/java/com/shabinder/spotiflyer/downloadHelper/SpotifyDownloadHelper.kt @@ -27,7 +27,6 @@ import android.util.Log import android.view.View import android.view.animation.AlphaAnimation import android.view.animation.Animation -import android.webkit.ValueCallback import android.webkit.WebView import android.webkit.WebViewClient import android.widget.TextView @@ -38,6 +37,7 @@ import com.github.kiulian.downloader.model.quality.AudioQuality import com.shabinder.spotiflyer.models.DownloadObject import com.shabinder.spotiflyer.models.Track import com.shabinder.spotiflyer.ui.spotify.SpotifyViewModel +import com.shabinder.spotiflyer.utils.getEmojiByUnicode import com.shabinder.spotiflyer.worker.ForegroundService import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -53,6 +53,7 @@ object SpotifyDownloadHelper { private var isBrowserLoading = false private var total = 0 private var Processed = 0 + private var notFound = 0 private var listProcessed:Boolean = false var youtubeList = mutableListOf() @@ -107,36 +108,40 @@ object SpotifyDownloadHelper { super.onPageFinished(view, url) view?.evaluateJavascript( "document.getElementsByClassName(\"yt-simple-endpoint style-scope ytd-video-renderer\")[0].href" - ,object :ValueCallback{ - override fun onReceiveValue(value: String?) { - Log.i("YT-id",value.toString().replace("\"","")) - val id = value!!.substringAfterLast("=", "error").replace("\"","") - Log.i("YT-id",id) - if(id !="error"){//Link extracting error - Processed++ - updateStatusBar() - downloadFile(subFolder, type, track,ytDownloader,id) - } - if(youtubeList.isNotEmpty()){ - val request = youtubeList[0] - spotifyViewModel!!.uiScope.launch { - getYTLink(request.type,request.subFolder,request.ytDownloader,request.searchQuery,request.track) - } - youtubeList.remove(request) - if(youtubeList.size == 0){//list processing completed , webView is free again! - isBrowserLoading = false - listProcessed = true - } - }else{//YT List Empty....Maybe it was one Single Download - Handler().postDelayed({//Delay of 1.5 sec - if(youtubeList.isEmpty()){//Lets Make It sure , There are No more Downloads In Queue..... - isBrowserLoading = false - listProcessed = true - } - },1500) - } + ) { value -> + Log.i("YT-id Link", value.toString().replace("\"", "")) + val id = value!!.substringAfterLast("=", "error").replace("\"", "") + Log.i("YT-ID", id) + if (id != "error") {//Link extracting error + Processed++ + downloadFile(subFolder, type, track, ytDownloader, id) + }else notFound++ + updateStatusBar() + if (youtubeList.isNotEmpty()) { + val request = youtubeList[0] + spotifyViewModel!!.uiScope.launch { + getYTLink( + request.type, + request.subFolder, + request.ytDownloader, + request.searchQuery, + request.track + ) } - } ) + youtubeList.remove(request) + if (youtubeList.size == 0) {//list processing completed , webView is free again! + isBrowserLoading = false + listProcessed = true + } + } else {//YT List Empty....Maybe it was one Single Download + Handler().postDelayed({//Delay of 1.5 sec + if (youtubeList.isEmpty()) {//Lets Make It sure , There are No more Downloads In Queue..... + isBrowserLoading = false + listProcessed = true + } + }, 1500) + } + } } } } @@ -144,42 +149,51 @@ object SpotifyDownloadHelper { private fun updateStatusBar() { statusBar!!.visibility = View.VISIBLE - statusBar?.text = "Total: $total Processed: $Processed" + statusBar?.text = "Total: $total ${getEmojiByUnicode(0x2705)}: $Processed ${getEmojiByUnicode(0x274C)}: $notFound" } fun downloadFile(subFolder: String?, type: String, track:Track, ytDownloader: YoutubeDownloader?, id: String) { spotifyViewModel!!.uiScope.launch { withContext(Dispatchers.IO) { - val video = ytDownloader?.getVideo(id) - val detail = video?.details() - val format:Format? =try { - video?.findAudioWithQuality(AudioQuality.high)?.get(0) as Format - }catch (e:java.lang.IndexOutOfBoundsException){ - try { - video?.findAudioWithQuality(AudioQuality.medium)?.get(0) as Format - }catch (e:java.lang.IndexOutOfBoundsException){ - try{ - video?.findAudioWithQuality(AudioQuality.low)?.get(0) as Format - }catch (e:java.lang.IndexOutOfBoundsException){ - Log.i("YTDownloader",e.toString()) - null + try { + val video = ytDownloader?.getVideo(id) + val detail = video?.details() + val format: Format? = try { + video?.findAudioWithQuality(AudioQuality.high)?.get(0) as Format + } catch (e: java.lang.IndexOutOfBoundsException) { + try { + video?.findAudioWithQuality(AudioQuality.medium)?.get(0) as Format + } catch (e: java.lang.IndexOutOfBoundsException) { + try { + video?.findAudioWithQuality(AudioQuality.low)?.get(0) as Format + } catch (e: java.lang.IndexOutOfBoundsException) { + Log.i("YTDownloader", e.toString()) + null + } } } - } - format?.let { - val url:String = format.url() -// Log.i("DHelper Link Found", url) - val outputFile:String = Environment.getExternalStorageDirectory().toString() + File.separator + - defaultDir + removeIllegalChars(type) + File.separator + (if(subFolder == null){""}else{ removeIllegalChars(subFolder) + File.separator} + removeIllegalChars(track.name!!)+".m4a") + format?.let { + val url: String = format.url() + Log.i("DHelper Link Found", url) + val outputFile: String = + Environment.getExternalStorageDirectory().toString() + File.separator + + defaultDir + removeIllegalChars(type) + File.separator + (if (subFolder == null) { + "" + } else { + removeIllegalChars(subFolder) + File.separator + } + removeIllegalChars(track.name!!) + ".m4a") - val downloadObject = DownloadObject( - track = track, - url = url, - outputDir = outputFile - ) - Log.i("DH",outputFile) - startService(context!!, downloadObject) + val downloadObject = DownloadObject( + track = track, + url = url, + outputDir = outputFile + ) + Log.i("DH", outputFile) + startService(context!!, downloadObject) + } + }catch (e: com.github.kiulian.downloader.YoutubeException){ + Log.i("DH", "Error- Maybe Network") } } } diff --git a/app/src/main/java/com/shabinder/spotiflyer/downloadHelper/YTDownloadHelper.kt b/app/src/main/java/com/shabinder/spotiflyer/downloadHelper/YTDownloadHelper.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/Album.kt b/app/src/main/java/com/shabinder/spotiflyer/models/Album.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/Artist.kt b/app/src/main/java/com/shabinder/spotiflyer/models/Artist.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/Copyright.kt b/app/src/main/java/com/shabinder/spotiflyer/models/Copyright.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/DownloadObject.kt b/app/src/main/java/com/shabinder/spotiflyer/models/DownloadObject.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/Episodes.kt b/app/src/main/java/com/shabinder/spotiflyer/models/Episodes.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/Followers.kt b/app/src/main/java/com/shabinder/spotiflyer/models/Followers.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/Image.kt b/app/src/main/java/com/shabinder/spotiflyer/models/Image.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/LinkedTrack.kt b/app/src/main/java/com/shabinder/spotiflyer/models/LinkedTrack.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/PagingObjectPlaylistTrack.kt b/app/src/main/java/com/shabinder/spotiflyer/models/PagingObjectPlaylistTrack.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/PagingObjectTrack.kt b/app/src/main/java/com/shabinder/spotiflyer/models/PagingObjectTrack.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/Playlist.kt b/app/src/main/java/com/shabinder/spotiflyer/models/Playlist.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/PlaylistTrack.kt b/app/src/main/java/com/shabinder/spotiflyer/models/PlaylistTrack.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/Token.kt b/app/src/main/java/com/shabinder/spotiflyer/models/Token.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/Track.kt b/app/src/main/java/com/shabinder/spotiflyer/models/Track.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/UserPrivate.kt b/app/src/main/java/com/shabinder/spotiflyer/models/UserPrivate.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/UserPublic.kt b/app/src/main/java/com/shabinder/spotiflyer/models/UserPublic.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/models/YTTrack.kt b/app/src/main/java/com/shabinder/spotiflyer/models/YTTrack.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/recyclerView/DownloadRecordAdapter.kt b/app/src/main/java/com/shabinder/spotiflyer/recyclerView/DownloadRecordAdapter.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/recyclerView/SpotifyTrackListAdapter.kt b/app/src/main/java/com/shabinder/spotiflyer/recyclerView/SpotifyTrackListAdapter.kt old mode 100644 new mode 100755 index fff27e88..ec6af4e4 --- a/app/src/main/java/com/shabinder/spotiflyer/recyclerView/SpotifyTrackListAdapter.kt +++ b/app/src/main/java/com/shabinder/spotiflyer/recyclerView/SpotifyTrackListAdapter.kt @@ -54,6 +54,7 @@ class SpotifyTrackListAdapter: ListAdapter) { trackList.forEach { - val imgUrl = it.album!!.images?.get(0)?.url + val imgUrl = it.album?.images?.get(0)?.url imgUrl?.let { val imgUri = imgUrl.toUri().buildUpon().scheme("https").build() Glide @@ -295,14 +305,14 @@ class SpotifyFragment : Fragment() { /** * Util. Function to create toasts! **/ - fun showToast(message:String){ + private fun showToast(message:String){ Toast.makeText(context,message,Toast.LENGTH_SHORT).show() } /** * Util. Function To Check Connection Status **/ - private fun isNotOnline(): Boolean { + private fun isOnline(): Boolean { val cm = requireActivity().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val netInfo = cm.activeNetworkInfo diff --git a/app/src/main/java/com/shabinder/spotiflyer/ui/spotify/SpotifyViewModel.kt b/app/src/main/java/com/shabinder/spotiflyer/ui/spotify/SpotifyViewModel.kt old mode 100644 new mode 100755 index 7b5343a4..bce98562 --- a/app/src/main/java/com/shabinder/spotiflyer/ui/spotify/SpotifyViewModel.kt +++ b/app/src/main/java/com/shabinder/spotiflyer/ui/spotify/SpotifyViewModel.kt @@ -24,6 +24,7 @@ import androidx.lifecycle.ViewModel import com.shabinder.spotiflyer.database.DatabaseDAO import com.shabinder.spotiflyer.database.DownloadRecord import com.shabinder.spotiflyer.models.Album +import com.shabinder.spotiflyer.models.Image import com.shabinder.spotiflyer.models.Playlist import com.shabinder.spotiflyer.models.Track import com.shabinder.spotiflyer.utils.SpotifyService @@ -78,23 +79,24 @@ class SpotifyViewModel @ViewModelInject constructor(val databaseDAO: DatabaseDAO uiScope.launch { val albumObject = getAlbumDetails(link) folderType = "Albums" - subFolder = albumObject?.name!! + subFolder = albumObject?.name.toString() val tempTrackList = mutableListOf() - albumObject.tracks?.items?.forEach { + albumObject?.tracks?.items?.forEach { if(File(finalOutputDir(it.name!!,folderType,subFolder)).exists()){//Download Already Present!! it.downloaded = "Downloaded" } + it.album = Album(images = listOf(Image(url = albumObject.images?.get(0)?.url))) tempTrackList.add(it) } trackList.value = tempTrackList - title.value = albumObject.name - coverUrl.value = albumObject.images?.get(0)!!.url!! + title.value = albumObject?.name + coverUrl.value = albumObject?.images?.get(0)?.url withContext(Dispatchers.IO){ databaseDAO.insert(DownloadRecord( type = "Album", name = title.value!!, link = "https://open.spotify.com/$type/$link", - coverUrl = coverUrl.value!!, + coverUrl = coverUrl.value.toString(), totalFiles = tempTrackList.size, downloaded = File(finalOutputDir(type = folderType,subFolder = subFolder)).listFiles()?.size == tempTrackList.size, directory = finalOutputDir(type = folderType,subFolder = subFolder) @@ -107,9 +109,10 @@ class SpotifyViewModel @ViewModelInject constructor(val databaseDAO: DatabaseDAO uiScope.launch { val playlistObject = getPlaylistDetails(link) folderType = "Playlists" - subFolder = playlistObject?.name!! + subFolder = playlistObject?.name.toString() val tempTrackList = mutableListOf() - playlistObject.tracks?.items?.forEach { + Log.i("Tracks Fetched",playlistObject?.tracks?.items?.size.toString()) + playlistObject?.tracks?.items?.forEach { it.track?.let { it1 -> if(File(finalOutputDir(it1.name!!,folderType,subFolder)).exists()){//Download Already Present!! it1.downloaded = "Downloaded" @@ -118,8 +121,8 @@ class SpotifyViewModel @ViewModelInject constructor(val databaseDAO: DatabaseDAO } } trackList.value = tempTrackList - title.value = playlistObject.name - coverUrl.value = playlistObject.images?.get(0)!!.url!! + title.value = playlistObject?.name + coverUrl.value = playlistObject?.images?.get(0)!!.url!! withContext(Dispatchers.IO){ databaseDAO.insert(DownloadRecord( type = "Playlist", diff --git a/app/src/main/java/com/shabinder/spotiflyer/ui/youtube/YoutubeFragment.kt b/app/src/main/java/com/shabinder/spotiflyer/ui/youtube/YoutubeFragment.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/ui/youtube/YoutubeViewModel.kt b/app/src/main/java/com/shabinder/spotiflyer/ui/youtube/YoutubeViewModel.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/utils/BindingAdapter.kt b/app/src/main/java/com/shabinder/spotiflyer/utils/BindingAdapter.kt old mode 100644 new mode 100755 index 1854f811..b18980a7 --- a/app/src/main/java/com/shabinder/spotiflyer/utils/BindingAdapter.kt +++ b/app/src/main/java/com/shabinder/spotiflyer/utils/BindingAdapter.kt @@ -17,8 +17,6 @@ package com.shabinder.spotiflyer.utils -import android.graphics.Bitmap -import android.graphics.BitmapFactory import android.os.Environment import android.util.Log import android.view.View @@ -40,7 +38,6 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.io.File -import java.io.FileInputStream import java.io.IOException fun finalOutputDir(itemName:String? = null,type:String, subFolder:String?=null,extension:String? = ".mp3"): String{ @@ -68,7 +65,7 @@ fun bindImage(imgView: ImageView, imgUrl: String?) { imgUrl?.let { val imgUri = imgUrl.toUri().buildUpon().scheme("https").build() Glide - .with(imgView.context) + .with(imgView) .asFile() .load(imgUri) .placeholder(R.drawable.ic_song_placeholder) @@ -97,12 +94,12 @@ fun bindImage(imgView: ImageView, imgUrl: String?) { Environment.getExternalStorageDirectory(), SpotifyDownloadHelper.defaultDir+".Images/" + imgUrl.substringAfterLast('/',imgUrl) + ".jpeg" ) // the File to save , append increasing numeric counter to prevent files from getting overwritten. - val options = BitmapFactory.Options() - options.inPreferredConfig = Bitmap.Config.ARGB_8888 - val bitmap = BitmapFactory.decodeStream(FileInputStream(resource), null, options) resource?.copyTo(file) withContext(Dispatchers.Main){ - imgView.setImageBitmap(bitmap) + Glide.with(imgView) + .load(file) + .placeholder(R.drawable.ic_song_placeholder) + .into(imgView) // Log.i("Glide","imageSaved") } } catch (e: IOException) { diff --git a/app/src/main/java/com/shabinder/spotiflyer/utils/Provider.kt b/app/src/main/java/com/shabinder/spotiflyer/utils/Provider.kt old mode 100644 new mode 100755 index e58f3caa..57726455 --- a/app/src/main/java/com/shabinder/spotiflyer/utils/Provider.kt +++ b/app/src/main/java/com/shabinder/spotiflyer/utils/Provider.kt @@ -23,7 +23,7 @@ import com.shabinder.spotiflyer.App import com.shabinder.spotiflyer.MainActivity import com.shabinder.spotiflyer.database.DatabaseDAO import com.shabinder.spotiflyer.database.DownloadRecordDatabase -import com.shreyaspatil.EasyUpiPayment.EasyUpiPayment +import com.shreyaspatil.easyupipayment.EasyUpiPayment import com.squareup.moshi.Moshi import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory import dagger.Module @@ -34,7 +34,6 @@ import dagger.hilt.android.qualifiers.ApplicationContext import okhttp3.Interceptor import okhttp3.OkHttpClient import okhttp3.Request -import okhttp3.Response import retrofit2.Retrofit import retrofit2.converter.moshi.MoshiConverterFactory import javax.inject.Singleton @@ -53,14 +52,13 @@ object Provider { @Provides @Singleton fun provideUpi():EasyUpiPayment { - return EasyUpiPayment.Builder() - .with(MainActivity.getInstance()) + return EasyUpiPayment.Builder(MainActivity.getInstance()) .setPayeeVpa("technoshab@paytm") .setPayeeName("Shabinder Singh") .setTransactionId("UNIQUE_TRANSACTION_ID") .setTransactionRefId("UNIQUE_TRANSACTION_REF_ID") .setDescription("Thanks for donating") - .setAmount("39.00") + .setAmount("49.00") .build() } @@ -82,15 +80,13 @@ object Provider { @Singleton fun getSpotifyTokenInterface():SpotifyServiceTokenRequest{ val httpClient2: OkHttpClient.Builder = OkHttpClient.Builder() - httpClient2.addInterceptor(object : Interceptor { - override fun intercept(chain: Interceptor.Chain): Response { - val request: Request = - chain.request().newBuilder().addHeader( - "Authorization", - "Basic ${android.util.Base64.encodeToString("${App.clientId}:${App.clientSecret}".toByteArray(),android.util.Base64.NO_WRAP)}" - ).build() - return chain.proceed(request) - } + httpClient2.addInterceptor(Interceptor { chain -> + val request: Request = + chain.request().newBuilder().addHeader( + "Authorization", + "Basic ${android.util.Base64.encodeToString("${App.clientId}:${App.clientSecret}".toByteArray(),android.util.Base64.NO_WRAP)}" + ).build() + chain.proceed(request) }) val retrofit = Retrofit.Builder() diff --git a/app/src/main/java/com/shabinder/spotiflyer/utils/SpotifyInterface.kt b/app/src/main/java/com/shabinder/spotiflyer/utils/SpotifyInterface.kt old mode 100644 new mode 100755 diff --git a/app/src/main/java/com/shabinder/spotiflyer/utils/Utils.kt b/app/src/main/java/com/shabinder/spotiflyer/utils/Utils.kt new file mode 100644 index 00000000..79f44b5a --- /dev/null +++ b/app/src/main/java/com/shabinder/spotiflyer/utils/Utils.kt @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2020 Shabinder Singh + * + * This program 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 program 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. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.shabinder.spotiflyer.utils + +import com.shabinder.spotiflyer.downloadHelper.SpotifyDownloadHelper + +fun createDirectories() { + createDirectory(SpotifyDownloadHelper.defaultDir) + createDirectory(SpotifyDownloadHelper.defaultDir + ".Images/") + createDirectory(SpotifyDownloadHelper.defaultDir + "Tracks/") + createDirectory(SpotifyDownloadHelper.defaultDir + "Albums/") + createDirectory(SpotifyDownloadHelper.defaultDir + "Playlists/") + createDirectory(SpotifyDownloadHelper.defaultDir + "YT_Downloads/") +} +fun getEmojiByUnicode(unicode: Int): String? { + return String(Character.toChars(unicode)) +} \ No newline at end of file diff --git a/app/src/main/java/com/shabinder/spotiflyer/worker/ForegroundService.kt b/app/src/main/java/com/shabinder/spotiflyer/worker/ForegroundService.kt old mode 100644 new mode 100755 index eafeebda..a1922fa2 --- a/app/src/main/java/com/shabinder/spotiflyer/worker/ForegroundService.kt +++ b/app/src/main/java/com/shabinder/spotiflyer/worker/ForegroundService.kt @@ -42,7 +42,6 @@ import com.shabinder.spotiflyer.models.DownloadObject import com.shabinder.spotiflyer.models.Track import com.tonyodev.fetch2.* import com.tonyodev.fetch2core.DownloadBlock -import com.tonyodev.fetch2core.Func import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job @@ -123,9 +122,9 @@ class ForegroundService : Service(){ val notification = NotificationCompat.Builder(this, channelId) .setSmallIcon(R.drawable.down_arrowbw) .setNotificationSilent() - .setSubText("Speed: $speed KB/s") + .setSubText("Total: $total Completed:$converted") .setStyle(NotificationCompat.InboxStyle() - .setBigContentTitle("Total: $total Completed:$converted") + .setBigContentTitle("Speed: $speed KB/s") .addLine(messageList[0]) .addLine(messageList[1]) .addLine(messageList[2]) @@ -164,12 +163,12 @@ class ForegroundService : Service(){ request.networkType = NetworkType.ALL fetch!!.enqueue(request, - Func { + { obj.track?.let { it1 -> requestMap.put(it, it1) } downloadList.remove(obj) Log.i(tag, "Enqueuing Download") }, - Func { + { Log.i(tag, "Enqueuing Error:${it.throwable.toString()}")} ) } @@ -337,7 +336,7 @@ class ForegroundService : Service(){ requestMap.remove(download.request) } } - if(requestMap.keys.toList().isEmpty()) speed = 0 + speed = 0 updateNotification() } @@ -473,10 +472,10 @@ class ForegroundService : Service(){ getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val notification = NotificationCompat.Builder(this, channelId) .setSmallIcon(R.drawable.down_arrowbw) - .setSubText("Speed: $speed KB/s") + .setSubText("Total: $total Completed:$converted") .setNotificationSilent() .setStyle(NotificationCompat.InboxStyle() - .setBigContentTitle("Total: $total Completed:$converted") + .setBigContentTitle("Speed: $speed KB/s") .addLine(messageList[0]) .addLine(messageList[1]) .addLine(messageList[2]) diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml old mode 100644 new mode 100755 index 2b068d11..fc9051c0 --- a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -1,3 +1,20 @@ + + + + diff --git a/app/src/main/res/drawable/down_arrowbw.png b/app/src/main/res/drawable/down_arrowbw.png old mode 100644 new mode 100755 diff --git a/app/src/main/res/drawable/gradient.xml b/app/src/main/res/drawable/gradient.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/drawable/ic_arrow.xml b/app/src/main/res/drawable/ic_arrow.xml old mode 100644 new mode 100755 index 610d341a..72dd206c --- a/app/src/main/res/drawable/ic_arrow.xml +++ b/app/src/main/res/drawable/ic_arrow.xml @@ -1,3 +1,20 @@ + + diff --git a/app/src/main/res/drawable/ic_arrow_share.xml b/app/src/main/res/drawable/ic_arrow_share.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/drawable/ic_arrow_slim.xml b/app/src/main/res/drawable/ic_arrow_slim.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/drawable/ic_github.xml b/app/src/main/res/drawable/ic_github.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/drawable/ic_heart.xml b/app/src/main/res/drawable/ic_heart.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/drawable/ic_history.xml b/app/src/main/res/drawable/ic_history.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/drawable/ic_instagram.xml b/app/src/main/res/drawable/ic_instagram.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml old mode 100644 new mode 100755 index 07d5da9c..4d7290d0 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -1,4 +1,21 @@ + + . + --> + diff --git a/app/src/main/res/drawable/ic_refresh.xml b/app/src/main/res/drawable/ic_refresh.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/drawable/ic_refreshgradient.xml b/app/src/main/res/drawable/ic_refreshgradient.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/drawable/ic_share_open.xml b/app/src/main/res/drawable/ic_share_open.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/drawable/ic_song_placeholder.xml b/app/src/main/res/drawable/ic_song_placeholder.xml old mode 100644 new mode 100755 index 5cd34dcd..b27653de --- a/app/src/main/res/drawable/ic_song_placeholder.xml +++ b/app/src/main/res/drawable/ic_song_placeholder.xml @@ -1,3 +1,20 @@ + + diff --git a/app/src/main/res/drawable/ic_spotify_logo.xml b/app/src/main/res/drawable/ic_spotify_logo.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/drawable/ic_tick.xml b/app/src/main/res/drawable/ic_tick.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/drawable/ic_youtube.xml b/app/src/main/res/drawable/ic_youtube.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/drawable/rounded_gradient.xml b/app/src/main/res/drawable/rounded_gradient.xml old mode 100644 new mode 100755 index e24a13e3..221dea0e --- a/app/src/main/res/drawable/rounded_gradient.xml +++ b/app/src/main/res/drawable/rounded_gradient.xml @@ -1,4 +1,21 @@ + + + + diff --git a/app/src/main/res/drawable/text_background_accented.xml b/app/src/main/res/drawable/text_background_accented.xml old mode 100644 new mode 100755 index f43e9504..fc662c2a --- a/app/src/main/res/drawable/text_background_accented.xml +++ b/app/src/main/res/drawable/text_background_accented.xml @@ -1,4 +1,21 @@ - + + + diff --git a/app/src/main/res/drawable/transparent.xml b/app/src/main/res/drawable/transparent.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/font/amita.xml b/app/src/main/res/font/amita.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/font/averia_libre.xml b/app/src/main/res/font/averia_libre.xml old mode 100644 new mode 100755 index d0e370c7..d15de394 --- a/app/src/main/res/font/averia_libre.xml +++ b/app/src/main/res/font/averia_libre.xml @@ -1,4 +1,21 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/main_fragment.xml b/app/src/main/res/layout/main_fragment.xml old mode 100644 new mode 100755 index c89a141a..f3103f74 --- a/app/src/main/res/layout/main_fragment.xml +++ b/app/src/main/res/layout/main_fragment.xml @@ -17,10 +17,14 @@ --> - + + android:layout_height="wrap_content"> + \ No newline at end of file diff --git a/app/src/main/res/layout/splash_screen.xml b/app/src/main/res/layout/splash_screen.xml old mode 100644 new mode 100755 index 30e32fca..3325c9c9 --- a/app/src/main/res/layout/splash_screen.xml +++ b/app/src/main/res/layout/splash_screen.xml @@ -1,4 +1,21 @@ + + + android:layout_width="match_parent" + android:layout_height="300dp" + android:layout_gravity="bottom" + android:visibility="gone" + app:layout_anchorGravity="bottom"/> diff --git a/app/src/main/res/layout/track_list_item.xml b/app/src/main/res/layout/track_list_item.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/layout/youtube_fragment.xml b/app/src/main/res/layout/youtube_fragment.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml old mode 100644 new mode 100755 index 036d09bc..b6a570f7 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,4 +1,21 @@ + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml old mode 100644 new mode 100755 index 036d09bc..b6a570f7 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -1,4 +1,21 @@ + + diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png old mode 100644 new mode 100755 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png old mode 100644 new mode 100755 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png old mode 100644 new mode 100755 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png old mode 100644 new mode 100755 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png old mode 100644 new mode 100755 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png old mode 100644 new mode 100755 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png old mode 100644 new mode 100755 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png old mode 100644 new mode 100755 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png old mode 100644 new mode 100755 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png old mode 100644 new mode 100755 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png old mode 100644 new mode 100755 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png old mode 100644 new mode 100755 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png old mode 100644 new mode 100755 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png old mode 100644 new mode 100755 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png old mode 100644 new mode 100755 diff --git a/app/src/main/res/navigation/navigation.xml b/app/src/main/res/navigation/navigation.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/values/font_certs.xml b/app/src/main/res/values/font_certs.xml old mode 100644 new mode 100755 index d2226ac0..d7cca79c --- a/app/src/main/res/values/font_certs.xml +++ b/app/src/main/res/values/font_certs.xml @@ -1,4 +1,21 @@ + + @array/com_google_android_gms_fonts_certs_dev diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml old mode 100644 new mode 100755 index beab31f7..3625162b --- a/app/src/main/res/values/ic_launcher_background.xml +++ b/app/src/main/res/values/ic_launcher_background.xml @@ -1,4 +1,21 @@ + + #000000 \ No newline at end of file diff --git a/app/src/main/res/values/preloaded_fonts.xml b/app/src/main/res/values/preloaded_fonts.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml old mode 100644 new mode 100755 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml old mode 100644 new mode 100755 index e281194a..f54381ef --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,3 +1,20 @@ + +