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'
|
||||||
|
|
||||||
@ -161,21 +150,4 @@ dependencies {
|
|||||||
kapt "androidx.room:room-compiler:$room_version"
|
kapt "androidx.room:room-compiler:$room_version"
|
||||||
|
|
||||||
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