Compare commits
	
		
			10 Commits
		
	
	
		
			v171901015
			...
			v171904096
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					1485cc05f4 | ||
| 
						 | 
					d1dad3e61a | ||
| 
						 | 
					e5024b0420 | ||
| 
						 | 
					9b01692c55 | ||
| 
						 | 
					33aa587d36 | ||
| 
						 | 
					12e0766803 | ||
| 
						 | 
					a8721ad7a4 | ||
| 
						 | 
					bc5e882894 | ||
| 
						 | 
					e3460322b1 | ||
| 
						 | 
					7e3288a076 | 
							
								
								
									
										17
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								README.md
									
									
									
									
									
								
							@@ -1,20 +1,10 @@
 | 
				
			|||||||
# ReaderForSelfoss
 | 
					# ReaderForSelfoss **(Only available from F-Droid)**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[](https://join.slack.com/t/readerforselfoss/shared_invite/enQtMjkyNzc3NjM2Mjc1LTUzZTZhOGM5YjQ1MTI5MWZiODRjMjE1ZDBmMzQxZmQ3NWZhYTNhMTBjNGEwNmE2ZGFjODU5NjUxZjBkMWJmMDQ) [](https://jenkins.amine-bou.fr/job/ReaderForSelfoss/) [](https://www.codetriage.com/aminecmi/readerforselfoss) [](https://crowdin.com/project/readerforselfoss)
 | 
					[](https://crowdin.com/project/readerforselfoss)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
It's an RSS Reader for Android, that **only** works with [Selfoss](https://selfoss.aditu.de/)
 | 
					It's an RSS Reader for Android, that **only** works with [Selfoss](https://selfoss.aditu.de/)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<a href='https://play.google.com/store/apps/details?id=apps.amine.bou.readerforselfoss'><img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png' height="100"/></a> <a href="https://f-droid.org/packages/apps.amine.bou.readerforselfoss"><img src="https://f-droid.org/badge/get-it-on.png" alt="Get it on F-Droid" height="100"></a>
 | 
					<a href="https://f-droid.org/packages/apps.amine.bou.readerforselfoss"><img src="https://f-droid.org/badge/get-it-on.png" alt="Get it on F-Droid" height="100"></a>
 | 
				
			||||||
 | 
					 | 
				
			||||||
Also, the last APK built from source is available [here](https://jenkins.amine-bou.fr/job/ReaderForSelfoss/lastSuccessfulBuild/artifact/SignApksBuilder-out/selfoss-key/selfoss/app-githubConfig-release-unsigned.apk/app-githubConfig-release.apk).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Join the alpha channel
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**Keep in mind, it could be instable, but you'll have the new updates faster**
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- First, join the google [group](https://groups.google.com/d/forum/reader-for-selfoss-alpha-testing).
 | 
					 | 
				
			||||||
- Then, join the [alpha channel](https://play.google.com/apps/testing/apps.amine.bou.readerforselfoss) of the app.
 | 
					 | 
				
			||||||
- You'll be able to update the app for the current alpha version.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Want to help ?
 | 
					## Want to help ?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -30,4 +20,3 @@ Also, the last APK built from source is available [here](https://jenkins.amine-b
 | 
				
			|||||||
- [See what I'm doing](https://github.com/aminecmi/ReaderforSelfoss/projects/1)
 | 
					- [See what I'm doing](https://github.com/aminecmi/ReaderforSelfoss/projects/1)
 | 
				
			||||||
- [Create an issue, or request a new feature](https://github.com/aminecmi/ReaderforSelfoss/issues)
 | 
					- [Create an issue, or request a new feature](https://github.com/aminecmi/ReaderforSelfoss/issues)
 | 
				
			||||||
- [Help translation the app](https://crowdin.com/project/readerforselfoss)
 | 
					- [Help translation the app](https://crowdin.com/project/readerforselfoss)
 | 
				
			||||||
- [Ask for help](https://join.slack.com/t/readerforselfoss/shared_invite/enQtMjkyNzc3NjM2Mjc1LTUzZTZhOGM5YjQ1MTI5MWZiODRjMjE1ZDBmMzQxZmQ3NWZhYTNhMTBjNGEwNmE2ZGFjODU5NjUxZjBkMWJmMDQ)
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -72,9 +72,6 @@ android {
 | 
				
			|||||||
                    'proguard-rules.pro'
 | 
					                    'proguard-rules.pro'
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        debug {
 | 
					        debug {
 | 
				
			||||||
            buildConfigField "String", "LOGIN_URL", appLoginUrl
 | 
					 | 
				
			||||||
            buildConfigField "String", "LOGIN_USERNAME", appLoginUsername
 | 
					 | 
				
			||||||
            buildConfigField "String", "LOGIN_PASSWORD", appLoginPassword
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    flavorDimensions "build"
 | 
					    flavorDimensions "build"
 | 
				
			||||||
@@ -83,11 +80,6 @@ android {
 | 
				
			|||||||
            versionNameSuffix '-github'
 | 
					            versionNameSuffix '-github'
 | 
				
			||||||
            dimension "build"
 | 
					            dimension "build"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        storeConfig {
 | 
					 | 
				
			||||||
            // As jenkins publishes to alpha first, this is the default suffix now.
 | 
					 | 
				
			||||||
            versionNameSuffix '-store'
 | 
					 | 
				
			||||||
            dimension "build"
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -102,14 +94,14 @@ dependencies {
 | 
				
			|||||||
    implementation fileTree(include: ['*.jar'], dir: 'libs')
 | 
					    implementation fileTree(include: ['*.jar'], dir: 'libs')
 | 
				
			||||||
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
 | 
					    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
 | 
				
			||||||
    // Android Support
 | 
					    // Android Support
 | 
				
			||||||
    implementation "androidx.appcompat:appcompat:$android_version"
 | 
					    implementation "androidx.appcompat:appcompat:$androidx_version"
 | 
				
			||||||
    implementation "com.google.android.material:material:$android_version"
 | 
					    implementation "com.google.android.material:material:$android_version"
 | 
				
			||||||
    implementation "androidx.recyclerview:recyclerview:$android_version"
 | 
					    implementation "androidx.recyclerview:recyclerview:$android_version"
 | 
				
			||||||
    implementation "androidx.legacy:legacy-support-v4:$android_version"
 | 
					    implementation "androidx.legacy:legacy-support-v4:$android_version"
 | 
				
			||||||
    implementation "androidx.vectordrawable:vectordrawable:$android_version"
 | 
					    implementation "androidx.vectordrawable:vectordrawable:$android_version"
 | 
				
			||||||
    implementation "androidx.browser:browser:$android_version"
 | 
					    implementation "androidx.browser:browser:$android_version"
 | 
				
			||||||
    implementation "androidx.cardview:cardview:$android_version"
 | 
					    implementation "androidx.cardview:cardview:$android_version"
 | 
				
			||||||
    implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
 | 
					    implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha4'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //multidex
 | 
					    //multidex
 | 
				
			||||||
    implementation 'androidx.multidex:multidex:2.0.1'
 | 
					    implementation 'androidx.multidex:multidex:2.0.1'
 | 
				
			||||||
@@ -134,9 +126,6 @@ dependencies {
 | 
				
			|||||||
    implementation 'com.github.bumptech.glide:glide:4.1.1'
 | 
					    implementation 'com.github.bumptech.glide:glide:4.1.1'
 | 
				
			||||||
    implementation 'com.github.bumptech.glide:okhttp3-integration:4.1.1'
 | 
					    implementation 'com.github.bumptech.glide:okhttp3-integration:4.1.1'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Asking politely users to rate the app
 | 
					 | 
				
			||||||
    implementation 'com.github.stkent:amplify:2.2.0'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Drawer
 | 
					    // Drawer
 | 
				
			||||||
    implementation 'co.zsmb:materialdrawer-kt:2.0.1'
 | 
					    implementation 'co.zsmb:materialdrawer-kt:2.0.1'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -162,20 +151,3 @@ dependencies {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    implementation "android.arch.work:work-runtime-ktx:$work_version"
 | 
					    implementation "android.arch.work:work-runtime-ktx:$work_version"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
afterEvaluate {
 | 
					 | 
				
			||||||
    initAppLoginPropertiesIfNeeded()
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def initAppLoginPropertiesIfNeeded() {
 | 
					 | 
				
			||||||
    def propertiesFile = file(System.getProperty("user.home") + '/.gradle/gradle.properties')
 | 
					 | 
				
			||||||
    if (!propertiesFile.exists()) {
 | 
					 | 
				
			||||||
        def commentMessage = "This is autogenerated local property from system environment to prevent key to be committed to source control."
 | 
					 | 
				
			||||||
        ant.propertyfile(file: System.getProperty("user.home") + "/.gradle/gradle.properties", comment: commentMessage) {
 | 
					 | 
				
			||||||
            entry(key: "appLoginUrl", value: System.getProperty("appLoginUrl"))
 | 
					 | 
				
			||||||
            entry(key: "appLoginUsername", value: System.getProperty("appLoginUsername"))
 | 
					 | 
				
			||||||
            entry(key: "appLoginPassword", value: System.getProperty("appLoginPassword"))
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -64,7 +64,6 @@ import com.ashokvarma.bottomnavigation.BottomNavigationBar
 | 
				
			|||||||
import com.ashokvarma.bottomnavigation.BottomNavigationItem
 | 
					import com.ashokvarma.bottomnavigation.BottomNavigationItem
 | 
				
			||||||
import com.ashokvarma.bottomnavigation.TextBadgeItem
 | 
					import com.ashokvarma.bottomnavigation.TextBadgeItem
 | 
				
			||||||
import com.ftinc.scoop.Scoop
 | 
					import com.ftinc.scoop.Scoop
 | 
				
			||||||
import com.github.stkent.amplify.tracking.Amplify
 | 
					 | 
				
			||||||
import com.mikepenz.aboutlibraries.Libs
 | 
					import com.mikepenz.aboutlibraries.Libs
 | 
				
			||||||
import com.mikepenz.aboutlibraries.LibsBuilder
 | 
					import com.mikepenz.aboutlibraries.LibsBuilder
 | 
				
			||||||
import com.mikepenz.materialdrawer.Drawer
 | 
					import com.mikepenz.materialdrawer.Drawer
 | 
				
			||||||
@@ -173,9 +172,6 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
 | 
				
			|||||||
        handleThemeBinding()
 | 
					        handleThemeBinding()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        setSupportActionBar(toolBar)
 | 
					        setSupportActionBar(toolBar)
 | 
				
			||||||
        if (savedInstanceState == null) {
 | 
					 | 
				
			||||||
            Amplify.getSharedInstance().promptIfReady(promptView)
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        db = Room.databaseBuilder(
 | 
					        db = Room.databaseBuilder(
 | 
				
			||||||
            applicationContext,
 | 
					            applicationContext,
 | 
				
			||||||
@@ -519,7 +515,9 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
 | 
				
			|||||||
                        )
 | 
					                        )
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
                    val filteredTags = maybeTags.filterNot { hiddenTags.contains(it.tag) }
 | 
					                    val filteredTags = maybeTags
 | 
				
			||||||
 | 
					                        .filterNot { hiddenTags.contains(it.tag) }
 | 
				
			||||||
 | 
					                        .sortedBy { it.unread == 0 }
 | 
				
			||||||
                    tagsBadge = filteredTags.map {
 | 
					                    tagsBadge = filteredTags.map {
 | 
				
			||||||
                        val gd = GradientDrawable()
 | 
					                        val gd = GradientDrawable()
 | 
				
			||||||
                        val color = try {
 | 
					                        val color = try {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,9 +14,6 @@ import apps.amine.bou.readerforselfoss.utils.glide.loadMaybeBasicAuth
 | 
				
			|||||||
import com.bumptech.glide.Glide
 | 
					import com.bumptech.glide.Glide
 | 
				
			||||||
import com.bumptech.glide.request.RequestOptions
 | 
					import com.bumptech.glide.request.RequestOptions
 | 
				
			||||||
import com.ftinc.scoop.Scoop
 | 
					import com.ftinc.scoop.Scoop
 | 
				
			||||||
import com.github.stkent.amplify.feedback.DefaultEmailFeedbackCollector
 | 
					 | 
				
			||||||
import com.github.stkent.amplify.feedback.GooglePlayStoreFeedbackCollector
 | 
					 | 
				
			||||||
import com.github.stkent.amplify.tracking.Amplify
 | 
					 | 
				
			||||||
import com.mikepenz.materialdrawer.util.AbstractDrawerImageLoader
 | 
					import com.mikepenz.materialdrawer.util.AbstractDrawerImageLoader
 | 
				
			||||||
import com.mikepenz.materialdrawer.util.DrawerImageLoader
 | 
					import com.mikepenz.materialdrawer.util.DrawerImageLoader
 | 
				
			||||||
import org.acra.ACRA
 | 
					import org.acra.ACRA
 | 
				
			||||||
@@ -25,7 +22,6 @@ import org.acra.annotation.AcraCore
 | 
				
			|||||||
import org.acra.annotation.AcraDialog
 | 
					import org.acra.annotation.AcraDialog
 | 
				
			||||||
import org.acra.annotation.AcraHttpSender
 | 
					import org.acra.annotation.AcraHttpSender
 | 
				
			||||||
import org.acra.sender.HttpSender
 | 
					import org.acra.sender.HttpSender
 | 
				
			||||||
import java.io.IOException
 | 
					 | 
				
			||||||
import java.util.UUID.randomUUID
 | 
					import java.util.UUID.randomUUID
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -48,7 +44,6 @@ class MyApp : MultiDexApplication() {
 | 
				
			|||||||
    override fun onCreate() {
 | 
					    override fun onCreate() {
 | 
				
			||||||
        super.onCreate()
 | 
					        super.onCreate()
 | 
				
			||||||
        config = Config(baseContext)
 | 
					        config = Config(baseContext)
 | 
				
			||||||
        initAmplify()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        val prefs = getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE)
 | 
					        val prefs = getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE)
 | 
				
			||||||
        if (prefs.getString("unique_id", "").isEmpty()) {
 | 
					        if (prefs.getString("unique_id", "").isEmpty()) {
 | 
				
			||||||
@@ -91,13 +86,6 @@ class MyApp : MultiDexApplication() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private fun initAmplify() {
 | 
					 | 
				
			||||||
        Amplify.initSharedInstance(this)
 | 
					 | 
				
			||||||
            .setPositiveFeedbackCollectors(GooglePlayStoreFeedbackCollector())
 | 
					 | 
				
			||||||
            .setCriticalFeedbackCollectors(DefaultEmailFeedbackCollector(Config.feedbackEmail))
 | 
					 | 
				
			||||||
            .applyAllDefaultRules()
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private fun initDrawerImageLoader() {
 | 
					    private fun initDrawerImageLoader() {
 | 
				
			||||||
        DrawerImageLoader.init(object : AbstractDrawerImageLoader() {
 | 
					        DrawerImageLoader.init(object : AbstractDrawerImageLoader() {
 | 
				
			||||||
            override fun set(
 | 
					            override fun set(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,10 @@ import com.burgstaller.okhttp.digest.CachingAuthenticator
 | 
				
			|||||||
import com.burgstaller.okhttp.digest.Credentials
 | 
					import com.burgstaller.okhttp.digest.Credentials
 | 
				
			||||||
import com.burgstaller.okhttp.digest.DigestAuthenticator
 | 
					import com.burgstaller.okhttp.digest.DigestAuthenticator
 | 
				
			||||||
import com.google.gson.GsonBuilder
 | 
					import com.google.gson.GsonBuilder
 | 
				
			||||||
 | 
					import okhttp3.Interceptor
 | 
				
			||||||
import okhttp3.OkHttpClient
 | 
					import okhttp3.OkHttpClient
 | 
				
			||||||
 | 
					import okhttp3.Request
 | 
				
			||||||
 | 
					import okhttp3.Response
 | 
				
			||||||
import okhttp3.logging.HttpLoggingInterceptor
 | 
					import okhttp3.logging.HttpLoggingInterceptor
 | 
				
			||||||
import retrofit2.Call
 | 
					import retrofit2.Call
 | 
				
			||||||
import retrofit2.Retrofit
 | 
					import retrofit2.Retrofit
 | 
				
			||||||
@@ -62,6 +65,17 @@ class SelfossApi(
 | 
				
			|||||||
            .maybeWithSelfSigned(isWithSelfSignedCert)
 | 
					            .maybeWithSelfSigned(isWithSelfSignedCert)
 | 
				
			||||||
            .authenticator(CachingAuthenticatorDecorator(this, authCache))
 | 
					            .authenticator(CachingAuthenticatorDecorator(this, authCache))
 | 
				
			||||||
            .addInterceptor(AuthenticationCacheInterceptor(authCache))
 | 
					            .addInterceptor(AuthenticationCacheInterceptor(authCache))
 | 
				
			||||||
 | 
					            .addInterceptor(object: Interceptor {
 | 
				
			||||||
 | 
					                override fun intercept(chain: Interceptor.Chain): Response {
 | 
				
			||||||
 | 
					                    val request: Request = chain.request()
 | 
				
			||||||
 | 
					                    val response: Response = chain.proceed(request)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (response.code() == 408) {
 | 
				
			||||||
 | 
					                        return response
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    return response
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    init {
 | 
					    init {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -130,7 +130,7 @@ class LoadingWorker(val context: Context, params: WorkerParameters) : Worker(con
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return Result.SUCCESS
 | 
					        return Result.success()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private fun <T> doAndReportOnFail(call: Call<T>, action: ActionEntity) {
 | 
					    private fun <T> doAndReportOnFail(call: Call<T>, action: ActionEntity) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -48,7 +48,6 @@ import apps.amine.bou.readerforselfoss.utils.succeeded
 | 
				
			|||||||
import com.bumptech.glide.Glide
 | 
					import com.bumptech.glide.Glide
 | 
				
			||||||
import com.bumptech.glide.request.RequestOptions
 | 
					import com.bumptech.glide.request.RequestOptions
 | 
				
			||||||
import com.github.rubensousa.floatingtoolbar.FloatingToolbar
 | 
					import com.github.rubensousa.floatingtoolbar.FloatingToolbar
 | 
				
			||||||
import kotlinx.android.synthetic.main.fragment_article.*
 | 
					 | 
				
			||||||
import kotlinx.android.synthetic.main.fragment_article.view.*
 | 
					import kotlinx.android.synthetic.main.fragment_article.view.*
 | 
				
			||||||
import org.acra.ACRA
 | 
					import org.acra.ACRA
 | 
				
			||||||
import retrofit2.Call
 | 
					import retrofit2.Call
 | 
				
			||||||
@@ -130,7 +129,7 @@ class ArticleFragment : Fragment() {
 | 
				
			|||||||
                typeface = try {
 | 
					                typeface = try {
 | 
				
			||||||
                    ResourcesCompat.getFont(context!!, resId)!!
 | 
					                    ResourcesCompat.getFont(context!!, resId)!!
 | 
				
			||||||
                } catch (e: java.lang.Exception) {
 | 
					                } catch (e: java.lang.Exception) {
 | 
				
			||||||
                    ACRA.getErrorReporter().maybeHandleSilentException(Throwable("Font loading issue: ${e.message}"), context!!)
 | 
					                    // ACRA.getErrorReporter().maybeHandleSilentException(Throwable("Font loading issue: ${e.message}"), context!!)
 | 
				
			||||||
                    // Just to be sure
 | 
					                    // Just to be sure
 | 
				
			||||||
                    null
 | 
					                    null
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,33 +8,10 @@
 | 
				
			|||||||
    android:fitsSystemWindows="true"
 | 
					    android:fitsSystemWindows="true"
 | 
				
			||||||
    xmlns:app="http://schemas.android.com/apk/res-auto">
 | 
					    xmlns:app="http://schemas.android.com/apk/res-auto">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <com.github.stkent.amplify.prompt.DefaultLayoutPromptView
 | 
					 | 
				
			||||||
        android:id="@+id/promptView"
 | 
					 | 
				
			||||||
        android:layout_width="match_parent"
 | 
					 | 
				
			||||||
        android:layout_height="wrap_content"
 | 
					 | 
				
			||||||
        app:prompt_view_user_opinion_question_title="@string/rating_prompt_title"
 | 
					 | 
				
			||||||
        app:prompt_view_user_opinion_question_positive_button_label="@string/rating_prompt_yes"
 | 
					 | 
				
			||||||
        app:prompt_view_user_opinion_question_negative_button_label="@string/rating_prompt_no"
 | 
					 | 
				
			||||||
        app:prompt_view_positive_feedback_question_title="@string/rating_prompt_rating_title"
 | 
					 | 
				
			||||||
        app:prompt_view_positive_feedback_question_positive_button_label="@string/rating_prompt_rating_yes"
 | 
					 | 
				
			||||||
        app:prompt_view_positive_feedback_question_negative_button_label="@string/rating_prompt_rating_no"
 | 
					 | 
				
			||||||
        app:prompt_view_critical_feedback_question_title="@string/rating_prompt_feedback_title"
 | 
					 | 
				
			||||||
        app:prompt_view_critical_feedback_question_positive_button_label="@string/rating_prompt_feedback_yes"
 | 
					 | 
				
			||||||
        app:prompt_view_critical_feedback_question_negative_button_label="@string/rating_prompt_feedback_no"
 | 
					 | 
				
			||||||
        app:prompt_view_thanks_title="@string/rating_prompt_thanks"
 | 
					 | 
				
			||||||
        app:prompt_view_positive_button_background_color="@color/colorPrimary"
 | 
					 | 
				
			||||||
        app:prompt_view_positive_button_text_color="@color/white"
 | 
					 | 
				
			||||||
        app:prompt_view_positive_button_border_color="@color/colorPrimary"
 | 
					 | 
				
			||||||
        app:prompt_view_negative_button_background_color="@color/colorAccent"
 | 
					 | 
				
			||||||
        app:prompt_view_negative_button_border_color="@color/white"
 | 
					 | 
				
			||||||
        app:prompt_view_background_color="?attr/colorAccent"
 | 
					 | 
				
			||||||
        app:prompt_view_thanks_display_time_ms="2000"/>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <androidx.coordinatorlayout.widget.CoordinatorLayout
 | 
					    <androidx.coordinatorlayout.widget.CoordinatorLayout
 | 
				
			||||||
        android:id="@+id/coordLayout"
 | 
					        android:id="@+id/coordLayout"
 | 
				
			||||||
        android:layout_width="match_parent"
 | 
					        android:layout_width="match_parent"
 | 
				
			||||||
        android:layout_height="match_parent"
 | 
					        android:layout_height="match_parent">
 | 
				
			||||||
        android:layout_below="@id/promptView">
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <androidx.coordinatorlayout.widget.CoordinatorLayout
 | 
					        <androidx.coordinatorlayout.widget.CoordinatorLayout
 | 
				
			||||||
            android:id="@+id/intern_coordLayout"
 | 
					            android:id="@+id/intern_coordLayout"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,15 +4,15 @@
 | 
				
			|||||||
    <string name="app_name">"Selfoss 阅读器"</string>
 | 
					    <string name="app_name">"Selfoss 阅读器"</string>
 | 
				
			||||||
    <string name="title_activity_login">"登录"</string>
 | 
					    <string name="title_activity_login">"登录"</string>
 | 
				
			||||||
    <string name="prompt_password">"密码"</string>
 | 
					    <string name="prompt_password">"密码"</string>
 | 
				
			||||||
    <string name="prompt_http_password">"HTTP 密码"</string>
 | 
					    <string name="prompt_http_password">"HTTP 密碼"</string>
 | 
				
			||||||
    <string name="action_sign_in">"转至"</string>
 | 
					    <string name="action_sign_in">"转至"</string>
 | 
				
			||||||
    <string name="error_invalid_password">"密码不够长"</string>
 | 
					    <string name="error_invalid_password">"密码不够长"</string>
 | 
				
			||||||
    <string name="error_field_required">"必填字段"</string>
 | 
					    <string name="error_field_required">"欄位必填"</string>
 | 
				
			||||||
    <string name="prompt_url">"网址"</string>
 | 
					    <string name="prompt_url">"网址"</string>
 | 
				
			||||||
    <string name="withLoginSwitch">"需要登录?"</string>
 | 
					    <string name="withLoginSwitch">"需要登入?"</string>
 | 
				
			||||||
    <string name="withHttpLoginSwitch">"请先登录网站"</string>
 | 
					    <string name="withHttpLoginSwitch">"请先登录网站"</string>
 | 
				
			||||||
    <string name="login_url_problem">"哎呀。您可能需要在网址的末尾添加一个 \"/\"。"</string>
 | 
					    <string name="login_url_problem">"哎呀。您可能需要在网址的末尾添加一个 \"/\"。"</string>
 | 
				
			||||||
    <string name="prompt_login">"用户名"</string>
 | 
					    <string name="prompt_login">"使用者名稱"</string>
 | 
				
			||||||
    <string name="prompt_http_login">"HTTP 用户名"</string>
 | 
					    <string name="prompt_http_login">"HTTP 用户名"</string>
 | 
				
			||||||
    <string name="label_share">"分享"</string>
 | 
					    <string name="label_share">"分享"</string>
 | 
				
			||||||
    <string name="readAll">"全部阅读"</string>
 | 
					    <string name="readAll">"全部阅读"</string>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,11 +13,11 @@
 | 
				
			|||||||
    <color name="background_grey">#FFe4e4e4</color>
 | 
					    <color name="background_grey">#FFe4e4e4</color>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <color name="dark_webview">#FF303030</color>
 | 
					    <color name="dark_webview">#FF303030</color>
 | 
				
			||||||
    <color name="dark_webview_text">@color/md_white_1000</color>
 | 
					    <color name="dark_webview_text">#FFFFFF</color>
 | 
				
			||||||
    <color name="light_webview">@color/md_grey_50</color>
 | 
					    <color name="light_webview">#FAFAFA</color>
 | 
				
			||||||
    <color name="light_webview_text">@color/md_grey_900</color>
 | 
					    <color name="light_webview_text">#212121</color>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <color name="cardBackgroundColor">#FFFFFFFF</color>
 | 
					    <color name="cardBackgroundColor">#FFFFFFFF</color>
 | 
				
			||||||
    <color name="materialDrawerHeaderSelectionText">@color/md_grey_900</color>
 | 
					    <color name="materialDrawerHeaderSelectionText">#212121</color>
 | 
				
			||||||
    <color name="darkBackground">#FF303030</color>
 | 
					    <color name="darkBackground">#FF303030</color>
 | 
				
			||||||
</resources>
 | 
					</resources>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,11 +2,12 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
buildscript {
 | 
					buildscript {
 | 
				
			||||||
    ext {
 | 
					    ext {
 | 
				
			||||||
        kotlin_version = '1.3.0'
 | 
					        kotlin_version = '1.3.21'
 | 
				
			||||||
        android_version = '1.0.0'
 | 
					        android_version = '1.0.0'
 | 
				
			||||||
 | 
					        androidx_version = '1.0.2'
 | 
				
			||||||
        lifecycle_version = '2.0.0'
 | 
					        lifecycle_version = '2.0.0'
 | 
				
			||||||
        room_version = '2.1.0-alpha01'
 | 
					        room_version = '2.1.0-alpha06'
 | 
				
			||||||
        work_version = "1.0.0-alpha10"
 | 
					        work_version = "1.0.1-rc01"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    repositories {
 | 
					    repositories {
 | 
				
			||||||
        google()
 | 
					        google()
 | 
				
			||||||
@@ -16,7 +17,7 @@ buildscript {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    dependencies {
 | 
					    dependencies {
 | 
				
			||||||
        classpath 'com.android.tools.build:gradle:3.3.0'
 | 
					        classpath 'com.android.tools.build:gradle:3.3.2'
 | 
				
			||||||
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
 | 
					        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,27 +55,10 @@ redirect_from: "/ReaderforSelfoss/"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <script async defer src="https://buttons.github.io/buttons.js"></script>
 | 
					        <script async defer src="https://buttons.github.io/buttons.js"></script>
 | 
				
			||||||
        <script>
 | 
					 | 
				
			||||||
          (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
 | 
					 | 
				
			||||||
          (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
 | 
					 | 
				
			||||||
          m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
 | 
					 | 
				
			||||||
          })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          ga('create', 'UA-102547516-1', 'auto');
 | 
					 | 
				
			||||||
          ga('send', 'pageview');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </script>
 | 
					 | 
				
			||||||
        <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
 | 
					 | 
				
			||||||
            new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
 | 
					 | 
				
			||||||
            j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
 | 
					 | 
				
			||||||
            'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
 | 
					 | 
				
			||||||
            })(window,document,'script','dataLayer','GTM-5R5LR4V');</script>
 | 
					 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
    </head>
 | 
					    </head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <body id="main">
 | 
					    <body id="main">
 | 
				
			||||||
        <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5R5LR4V"
 | 
					 | 
				
			||||||
        height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <div id="container" itemscope itemtype="http://schema.org/SoftwareApplication">
 | 
					        <div id="container" itemscope itemtype="http://schema.org/SoftwareApplication">
 | 
				
			||||||
            <div id="titles"><h1 itemprop="name">Reader For Selfoss</h1><h2>A new <span itemprop="operatingSystem">Android</span> Selfoss RSS reader</h2></div>
 | 
					            <div id="titles"><h1 itemprop="name">Reader For Selfoss</h1><h2>A new <span itemprop="operatingSystem">Android</span> Selfoss RSS reader</h2></div>
 | 
				
			||||||
@@ -83,7 +66,6 @@ redirect_from: "/ReaderforSelfoss/"
 | 
				
			|||||||
                <img src="images/icon.png" id="logo" itemprop="image">
 | 
					                <img src="images/icon.png" id="logo" itemprop="image">
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <div id="links">
 | 
					            <div id="links">
 | 
				
			||||||
                <a itemprop="downloadUrl" id="store" href='https://play.google.com/store/apps/details?id=apps.amine.bou.readerforselfoss&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png'/></a>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                <a class="github-button" href="https://github.com/aminecmi/readerforselfoss" data-size="large" aria-label="Star aminecmi/readerforselfoss on GitHub">Star</a>
 | 
					                <a class="github-button" href="https://github.com/aminecmi/readerforselfoss" data-size="large" aria-label="Star aminecmi/readerforselfoss on GitHub">Star</a>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user