Skip to content

Commit

Permalink
Use system User Name for API requests
Browse files Browse the repository at this point in the history
Fix #2
  • Loading branch information
proninyaroslav committed Jan 2, 2024
1 parent c0a85a9 commit 9fe0b6b
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import org.proninyaroslav.opencomicvine.model.COMIC_VINE_BASE_API_URL
import org.proninyaroslav.opencomicvine.model.moshi.*
import org.proninyaroslav.opencomicvine.model.network.ComicVineService
import org.proninyaroslav.opencomicvine.model.network.ConnectivityInterceptor
import org.proninyaroslav.opencomicvine.model.network.UserAgentInterceptor
import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory
import javax.inject.Singleton
Expand All @@ -52,10 +53,12 @@ object NetworkModule {
fun provideOkHttpClient(
logInterceptor: HttpLoggingInterceptor,
connectivityInterceptor: ConnectivityInterceptor,
userAgentInterceptor: UserAgentInterceptor,
): OkHttpClient =
OkHttpClient.Builder()
.addInterceptor(logInterceptor)
.addInterceptor(connectivityInterceptor)
.addInterceptor(userAgentInterceptor)
.build()

@Singleton
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.proninyaroslav.opencomicvine.di

import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import org.proninyaroslav.opencomicvine.model.network.UserAgentProvider
import org.proninyaroslav.opencomicvine.model.network.UserAgentProviderImpl
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
abstract class UserAgentProviderModule {
@Singleton
@Binds
abstract fun bindUserAgentModule(provider: UserAgentProviderImpl): UserAgentProvider
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.proninyaroslav.opencomicvine.model.network

import okhttp3.Interceptor
import okhttp3.Response
import javax.inject.Inject

class UserAgentInterceptor @Inject constructor(
private val userAgentProvider: UserAgentProvider
) : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
return chain.proceed(
chain.request().newBuilder()
.addHeader("user-agent", userAgentProvider.getSystemUserAgent())
.build()
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.proninyaroslav.opencomicvine.model.network

import android.content.Context
import android.webkit.WebSettings
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject

interface UserAgentProvider {
fun getSystemUserAgent(): String
}

const val FALLBACK_USER_AGENT = "Mozilla/5.0 (Linux; U; Android 4.1; en-us; DV Build/Donut)"

class UserAgentProviderImpl @Inject constructor(
@ApplicationContext
private val context: Context
) : UserAgentProvider {
override fun getSystemUserAgent(): String = try {
WebSettings.getDefaultUserAgent(context)
} catch (e: UnsupportedOperationException) {
/* Fallback user agent if WebView doesn't supported */
FALLBACK_USER_AGENT
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
@file:OptIn(ExperimentalLayoutApi::class)

/*
* Copyright (C) 2023 Yaroslav Pronin <proninyaroslav@mail.ru>
*
Expand All @@ -17,7 +19,6 @@
* along with OpenComicVine. If not, see <http://www.gnu.org/licenses/>.
*/

@file:OptIn(ExperimentalLayoutApi::class)

package org.proninyaroslav.opencomicvine.ui.search

Expand Down

0 comments on commit 9fe0b6b

Please sign in to comment.