├── app ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── drawable │ │ │ │ ├── logo.png │ │ │ │ ├── info_icon.png │ │ │ │ ├── splash_logo.png │ │ │ │ ├── download_icon.png │ │ │ │ ├── wallpaper_icon.png │ │ │ │ ├── splash_screen.xml │ │ │ │ ├── ic_search.xml │ │ │ │ ├── ic_error.xml │ │ │ │ └── ic_wifi_off.xml │ │ │ ├── font │ │ │ │ ├── poppins.ttf │ │ │ │ └── poppins_medium.ttf │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_round.png │ │ │ │ └── ic_launcher_foreground.png │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_round.png │ │ │ │ └── ic_launcher_foreground.png │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_round.png │ │ │ │ └── ic_launcher_foreground.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_round.png │ │ │ │ └── ic_launcher_foreground.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_round.png │ │ │ │ └── ic_launcher_foreground.png │ │ │ ├── values │ │ │ │ ├── strings.xml │ │ │ │ ├── ic_launcher_background.xml │ │ │ │ ├── colors.xml │ │ │ │ └── themes.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ ├── layout │ │ │ │ ├── wallpaper_item.xml │ │ │ │ ├── activity_main.xml │ │ │ │ ├── no_network_layout.xml │ │ │ │ ├── fragment_wallpaper_detail.xml │ │ │ │ └── fragment_wallpaper_list.xml │ │ │ ├── values-night │ │ │ │ └── themes.xml │ │ │ ├── navigation │ │ │ │ └── nav_graph.xml │ │ │ └── drawable-v24 │ │ │ │ └── ic_launcher_foreground.xml │ │ ├── ic_launcher-playstore.png │ │ ├── java │ │ │ └── com │ │ │ │ └── android │ │ │ │ └── wallum │ │ │ │ ├── api │ │ │ │ ├── UnsplashResponse.kt │ │ │ │ ├── UnsplashApiInterface.kt │ │ │ │ └── DataRepository.kt │ │ │ │ ├── Wallum.kt │ │ │ │ ├── MainActivity.kt │ │ │ │ ├── utils │ │ │ │ └── Util.kt │ │ │ │ ├── di │ │ │ │ └── AppModule.kt │ │ │ │ ├── data │ │ │ │ └── Wallpaper.kt │ │ │ │ └── ui │ │ │ │ └── main │ │ │ │ ├── WallpaperDetailViewModel.kt │ │ │ │ ├── WallpaperDisplayViewModel.kt │ │ │ │ ├── UnsplashPagingSource.kt │ │ │ │ ├── adapter │ │ │ │ └── WallpaperAdapter.kt │ │ │ │ ├── WallpaperListFragment.kt │ │ │ │ └── WallpaperDetailFragment.kt │ │ └── AndroidManifest.xml │ ├── test │ │ └── java │ │ │ └── com │ │ │ └── android │ │ │ └── wallum │ │ │ └── ExampleUnitTest.kt │ └── androidTest │ │ └── java │ │ └── com │ │ └── android │ │ └── wallum │ │ └── ExampleInstrumentedTest.kt ├── proguard-rules.pro └── build.gradle ├── .idea ├── .gitignore ├── compiler.xml ├── vcs.xml ├── gradle.xml └── misc.xml ├── assets └── Wallum Spotlight design.png ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .gitignore ├── settings.gradle ├── LICENSE ├── gradle.properties ├── gradlew.bat ├── README.md └── gradlew /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/drawable/logo.png -------------------------------------------------------------------------------- /app/src/main/res/font/poppins.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/font/poppins.ttf -------------------------------------------------------------------------------- /assets/Wallum Spotlight design.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/assets/Wallum Spotlight design.png -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/info_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/drawable/info_icon.png -------------------------------------------------------------------------------- /app/src/main/res/font/poppins_medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/font/poppins_medium.ttf -------------------------------------------------------------------------------- /app/src/main/res/drawable/splash_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/drawable/splash_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/download_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/drawable/download_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/wallpaper_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/drawable/wallpaper_icon.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Wallum 3 | Search… 4 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdityaV025/Wallum/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3E4560 4 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/java/com/android/wallum/api/UnsplashResponse.kt: -------------------------------------------------------------------------------- 1 | package com.android.wallum.api 2 | 3 | import com.android.wallum.data.Wallpaper 4 | 5 | /** 6 | Created By Aditya Verma on 06/10/21 7 | **/ 8 | 9 | data class UnsplashResponse (val results : List) -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3e4560 4 | #3e4560 5 | #fff 6 | #000 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/android/wallum/Wallum.kt: -------------------------------------------------------------------------------- 1 | package com.android.wallum 2 | 3 | import android.app.Application 4 | import dagger.hilt.android.HiltAndroidApp 5 | 6 | /** 7 | Created By Aditya Verma on 06/10/21 8 | **/ 9 | 10 | @HiltAndroidApp 11 | class Wallum : Application() -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Wed Oct 06 16:04:01 IST 2021 2 | distributionBase=GRADLE_USER_HOME 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip 4 | distributionPath=wrapper/dists 5 | zipStorePath=wrapper/dists 6 | zipStoreBase=GRADLE_USER_HOME 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | dependencyResolutionManagement { 2 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 3 | repositories { 4 | google() 5 | mavenCentral() 6 | maven { url 'https://jitpack.io' } // Warning: this repository is going to shut down soon 7 | } 8 | } 9 | rootProject.name = "Wallum" 10 | include ':app' 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/splash_screen.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/test/java/com/android/wallum/ExampleUnitTest.kt: -------------------------------------------------------------------------------- 1 | package com.android.wallum 2 | 3 | import org.junit.Test 4 | 5 | import org.junit.Assert.* 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * See [testing documentation](http://d.android.com/tools/testing). 11 | */ 12 | class ExampleUnitTest { 13 | @Test 14 | fun addition_isCorrect() { 15 | assertEquals(4, 2 + 2) 16 | } 17 | } -------------------------------------------------------------------------------- /app/src/main/java/com/android/wallum/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.android.wallum 2 | 3 | import android.os.Bundle 4 | import androidx.appcompat.app.AppCompatActivity 5 | import dagger.hilt.android.AndroidEntryPoint 6 | 7 | @AndroidEntryPoint 8 | class MainActivity : AppCompatActivity() { 9 | override fun onCreate(savedInstanceState: Bundle?) { 10 | setTheme(R.style.Theme_Wallum) 11 | super.onCreate(savedInstanceState) 12 | setContentView(R.layout.activity_main) 13 | } 14 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_error.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/layout/wallpaper_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_wifi_off.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/android/wallum/api/UnsplashApiInterface.kt: -------------------------------------------------------------------------------- 1 | package com.android.wallum.api 2 | 3 | import com.android.wallum.BuildConfig 4 | import retrofit2.http.GET 5 | import retrofit2.http.Headers 6 | import retrofit2.http.Query 7 | 8 | /** 9 | Created By Aditya Verma on 06/10/21 10 | **/ 11 | 12 | interface UnsplashApiInterface { 13 | 14 | companion object { 15 | const val BASE_URL = "https://api.unsplash.com/" 16 | const val API_KEY = BuildConfig.UNSPLASH_ACCESS_KEY 17 | } 18 | 19 | @Headers("Accept-Version: v1", "Authorization: Client-ID $API_KEY") 20 | @GET("search/photos") 21 | suspend fun searchPhotos( 22 | @Query("query") query: String, 23 | @Query("page") page: Int, 24 | @Query("per_page") perPage: Int 25 | ): UnsplashResponse 26 | 27 | } -------------------------------------------------------------------------------- /app/src/androidTest/java/com/android/wallum/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package com.android.wallum 2 | 3 | import androidx.test.platform.app.InstrumentationRegistry 4 | import androidx.test.ext.junit.runners.AndroidJUnit4 5 | 6 | import org.junit.Test 7 | import org.junit.runner.RunWith 8 | 9 | import org.junit.Assert.* 10 | 11 | /** 12 | * Instrumented test, which will execute on an Android device. 13 | * 14 | * See [testing documentation](http://d.android.com/tools/testing). 15 | */ 16 | @RunWith(AndroidJUnit4::class) 17 | class ExampleInstrumentedTest { 18 | @Test 19 | fun useAppContext() { 20 | // Context of the app under test. 21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext 22 | assertEquals("com.android.wallum", appContext.packageName) 23 | } 24 | } -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 19 | 20 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /app/src/main/java/com/android/wallum/api/DataRepository.kt: -------------------------------------------------------------------------------- 1 | package com.android.wallum.api 2 | 3 | import androidx.paging.Pager 4 | import androidx.paging.PagingConfig 5 | import androidx.paging.liveData 6 | import com.android.wallum.ui.main.UnsplashPagingSource 7 | import javax.inject.Inject 8 | import javax.inject.Singleton 9 | 10 | /** 11 | Created By Aditya Verma on 06/10/21 12 | **/ 13 | 14 | @Singleton 15 | class DataRepository @Inject constructor(private val unsplashApi: UnsplashApiInterface) { 16 | 17 | fun getSearchPhotos(query: String) = 18 | Pager( 19 | config = PagingConfig( 20 | pageSize = 20, 21 | maxSize = 100, 22 | enablePlaceholders = false 23 | ), 24 | pagingSourceFactory = { UnsplashPagingSource(unsplashApi, query) } 25 | ).liveData 26 | 27 | } -------------------------------------------------------------------------------- /app/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/android/wallum/utils/Util.kt: -------------------------------------------------------------------------------- 1 | package com.android.wallum.utils 2 | 3 | import android.app.Activity 4 | import android.content.Context 5 | import android.view.View 6 | import android.view.inputmethod.InputMethodManager 7 | import androidx.fragment.app.Fragment 8 | 9 | /** 10 | Created By Aditya Verma on 06/10/21 11 | **/ 12 | 13 | class Util { 14 | 15 | companion object { 16 | fun Fragment.hideKeyboard() { 17 | view?.let { activity?.hideKeyboard(it) } 18 | } 19 | 20 | fun Activity.hideKeyboard() { 21 | hideKeyboard(currentFocus ?: View(this)) 22 | } 23 | 24 | fun Context.hideKeyboard(view: View) { 25 | val inputMethodManager = 26 | getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager 27 | inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0) 28 | } 29 | 30 | } 31 | 32 | } -------------------------------------------------------------------------------- /app/src/main/java/com/android/wallum/di/AppModule.kt: -------------------------------------------------------------------------------- 1 | package com.android.wallum.di 2 | 3 | import com.android.wallum.api.UnsplashApiInterface 4 | import dagger.Module 5 | import dagger.Provides 6 | import dagger.hilt.InstallIn 7 | import dagger.hilt.components.SingletonComponent 8 | import retrofit2.Retrofit 9 | import retrofit2.converter.gson.GsonConverterFactory 10 | import javax.inject.Singleton 11 | 12 | @Module 13 | @InstallIn(SingletonComponent::class) 14 | object AppModule { 15 | 16 | @Provides 17 | @Singleton 18 | fun provideRetrofit() : Retrofit{ 19 | return Retrofit.Builder() 20 | .baseUrl(UnsplashApiInterface.BASE_URL) 21 | .addConverterFactory(GsonConverterFactory.create()) 22 | .build() 23 | } 24 | 25 | @Provides 26 | @Singleton 27 | fun provideUnsplashApiInterface(retrofit: Retrofit) : UnsplashApiInterface{ 28 | return retrofit.create(UnsplashApiInterface::class.java) 29 | } 30 | 31 | } -------------------------------------------------------------------------------- /app/src/main/java/com/android/wallum/data/Wallpaper.kt: -------------------------------------------------------------------------------- 1 | package com.android.wallum.data 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | 6 | @Parcelize 7 | data class Wallpaper( 8 | val id: String, 9 | val user: UnsplashUser, 10 | val urls: WallpaperUrls, 11 | val links: WallpaperDownload 12 | ) : Parcelable { 13 | 14 | @Parcelize 15 | data class UnsplashUser( 16 | val name: String, 17 | val username: String 18 | ) : Parcelable { 19 | val attributionUrl get() = "https://unsplash.com/$username?utm_source=ImageSearch&utm_medium=referral" 20 | } 21 | 22 | @Parcelize 23 | data class WallpaperUrls( 24 | val regular: String, 25 | val full: String, 26 | val raw: String, 27 | val small: String, 28 | val thumb: String 29 | ) : Parcelable 30 | 31 | @Parcelize 32 | data class WallpaperDownload( 33 | val download: String 34 | ) : Parcelable 35 | 36 | } 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Aditya Verma 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 17 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/android/wallum/ui/main/WallpaperDetailViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.android.wallum.ui.main 2 | 3 | import android.app.Application 4 | import android.app.DownloadManager 5 | import android.content.Context.DOWNLOAD_SERVICE 6 | import android.net.Uri 7 | import android.os.Build 8 | import android.os.Environment 9 | import androidx.lifecycle.AndroidViewModel 10 | 11 | /** 12 | Created By Aditya Verma on 07/10/21 13 | **/ 14 | 15 | class WallpaperDetailViewModel(application: Application) : AndroidViewModel(application) { 16 | 17 | fun downloadWallpaper(url: String, fileName: String) { 18 | val request = DownloadManager.Request(Uri.parse(url)) 19 | request.setDescription("Wallum") 20 | request.setTitle("$fileName.jpg") 21 | request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED) 22 | request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName) 23 | var manager: DownloadManager? = null 24 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 25 | manager = 26 | getApplication().getSystemService(DOWNLOAD_SERVICE) as DownloadManager? 27 | } 28 | manager?.enqueue(request) 29 | } 30 | 31 | } -------------------------------------------------------------------------------- /app/src/main/java/com/android/wallum/ui/main/WallpaperDisplayViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.android.wallum.ui.main 2 | 3 | import androidx.lifecycle.SavedStateHandle 4 | import androidx.lifecycle.ViewModel 5 | import androidx.lifecycle.switchMap 6 | import androidx.lifecycle.viewModelScope 7 | import androidx.paging.cachedIn 8 | import com.android.wallum.api.DataRepository 9 | import dagger.assisted.Assisted 10 | import dagger.assisted.AssistedInject 11 | import dagger.hilt.android.lifecycle.HiltViewModel 12 | import javax.inject.Inject 13 | 14 | /** 15 | Created By Aditya Verma on 06/10/21 16 | **/ 17 | 18 | @HiltViewModel 19 | class WallpaperDisplayViewModel @Inject constructor 20 | ( 21 | private val repository: DataRepository, 22 | state: SavedStateHandle 23 | ) : ViewModel() { 24 | 25 | companion object{ 26 | private const val CURRENT_QUERY = "current_query" 27 | private const val DEFAULT_QUERY = "random" 28 | } 29 | 30 | private val currentQuery = state.getLiveData(CURRENT_QUERY, DEFAULT_QUERY) 31 | 32 | val wallpaper = currentQuery.switchMap { query -> 33 | repository.getSearchPhotos(query).cachedIn(viewModelScope) 34 | } 35 | 36 | fun searchPhotos(query : String){ 37 | currentQuery.value = query 38 | } 39 | 40 | } -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app"s APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true 18 | # Automatically convert third-party libraries to use AndroidX 19 | android.enableJetifier=true 20 | # Kotlin code style for this project: "official" or "obsolete": 21 | kotlin.code.style=official 22 | unsplash_access_key="TK2FWr847xaED3NCC-MWVqFh1US5SZ2zVmVY8vEts60" -------------------------------------------------------------------------------- /app/src/main/res/layout/no_network_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 22 | 23 |