Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
5afc04a630 | |||
1da4cc2782 | |||
c5ebc89e4f | |||
dfc1719cce | |||
0812259470 | |||
e1476c5840 | |||
e30ea28e3f |
6
.github/CONTRIBUTING.md
vendored
6
.github/CONTRIBUTING.md
vendored
@ -48,12 +48,13 @@ You'll have to:
|
|||||||
|
|
||||||
- Configure fabric and add your `apiKey` and `apiSecret` in the `fabric.properties` file.
|
- Configure fabric and add your `apiKey` and `apiSecret` in the `fabric.properties` file.
|
||||||
- Create a firebase project and add the `google-services.json` to the `app/` folder.
|
- Create a firebase project and add the `google-services.json` to the `app/` folder.
|
||||||
- Define the following some parameters either in `~/.gradle/gradle.properties` or as gradle parameters (see the examples)
|
- Define some parameters either in `~/.gradle/gradle.properties` or as gradle parameters (see the examples)
|
||||||
|
|
||||||
- mercuryApiKey: A [Mercury](https://mercury.postlight.com/web-parser/) web parser api key for the internal browser
|
- mercuryApiKey: A [Mercury](https://mercury.postlight.com/web-parser/) web parser api key for the internal browser
|
||||||
- feedbackEmail: An email to receive users feedback.
|
- feedbackEmail: An email to receive users feedback.
|
||||||
- sourceUrl: an url to the source code, used in the settings. **It can be empty.**
|
- sourceUrl: an url to the source code, used in the settings. **It can be empty.**
|
||||||
- trackerUrl: an url to the tracker, used in the settings. **It can be empty.**
|
- trackerUrl: an url to the tracker, used in the settings. **It can be empty.**
|
||||||
|
- githubToken: a github token used to report issues from within the app. [Details here](https://github.com/heinrichreimer/android-issue-reporter#how-to-create-a-bot-key). **It can be empty.**
|
||||||
- appLoginUrl, appLoginUsername and appLoginPassword: url, username and password of a selfoss instance. **These are only used for tests. They can be empty if you don't test API calls.**
|
- appLoginUrl, appLoginUsername and appLoginPassword: url, username and password of a selfoss instance. **These are only used for tests. They can be empty if you don't test API calls.**
|
||||||
|
|
||||||
### Examples:
|
### Examples:
|
||||||
@ -67,10 +68,11 @@ mercuryApiKey="LONGAPIKEY"
|
|||||||
feedbackEmail="EMAIL"
|
feedbackEmail="EMAIL"
|
||||||
sourceUrl="URLSOURCE" # It can be empty.
|
sourceUrl="URLSOURCE" # It can be empty.
|
||||||
trackerUrl="URLTRACKER" # It can be empty.
|
trackerUrl="URLTRACKER" # It can be empty.
|
||||||
|
githubToken="GITHUBTOKEN" # It can be empty or use https://github.com/heinrichreimer/android-issue-reporter#how-to-create-a-bot-key to generate one
|
||||||
```
|
```
|
||||||
|
|
||||||
#### As gradle parameters
|
#### As gradle parameters
|
||||||
|
|
||||||
```
|
```
|
||||||
./gradlew .... -P appLoginUrl="URL" -P appLoginUsername="LOGIN" -P appLoginPassword="PASS" -P mercuryApiKey="LONGAPIKEY" -P feedbackEmail="EMAIL" -P sourceUrl="URLSOURCE" -P trackerUrl="URLTRACKER"
|
./gradlew .... -P appLoginUrl="URL" -P appLoginUsername="LOGIN" -P appLoginPassword="PASS" -P mercuryApiKey="LONGAPIKEY" -P feedbackEmail="EMAIL" -P sourceUrl="URLSOURCE" -P trackerUrl="URLTRACKER" -P githubToken="GITHUBTOKEN"
|
||||||
```
|
```
|
||||||
|
18
CHANGELOG.md
18
CHANGELOG.md
@ -1,3 +1,21 @@
|
|||||||
|
**1.5.4.00**
|
||||||
|
|
||||||
|
- Added issue reporting from within the app.
|
||||||
|
|
||||||
|
**1.5.3.06**
|
||||||
|
|
||||||
|
- Fixed infinite scroll not working.
|
||||||
|
|
||||||
|
- Fixed logs not working.
|
||||||
|
|
||||||
|
- Temporary workaround handling opening invalid urls. Waiting to solve #83.
|
||||||
|
|
||||||
|
**1.5.3.05**
|
||||||
|
|
||||||
|
- Fixed an issue on older versions of Android.
|
||||||
|
|
||||||
|
- Libs update.
|
||||||
|
|
||||||
**1.5.3.04**
|
**1.5.3.04**
|
||||||
|
|
||||||
- Crowdin translations
|
- Crowdin translations
|
||||||
|
@ -63,6 +63,7 @@ android {
|
|||||||
buildConfigField "String", "SOURCE_URL", sourceUrl
|
buildConfigField "String", "SOURCE_URL", sourceUrl
|
||||||
buildConfigField "String", "TRACKER_URL", trackerUrl
|
buildConfigField "String", "TRACKER_URL", trackerUrl
|
||||||
buildConfigField "String", "TRANSLATION_URL", translationUrl
|
buildConfigField "String", "TRANSLATION_URL", translationUrl
|
||||||
|
buildConfigField "String", "GITHUB_TOKEN", githubToken
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
@ -106,21 +107,21 @@ dependencies {
|
|||||||
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
|
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
|
||||||
|
|
||||||
// Android Support
|
// Android Support
|
||||||
compile 'com.android.support:appcompat-v7:26.0.1'
|
compile 'com.android.support:appcompat-v7:26.0.2'
|
||||||
compile 'com.android.support:design:26.0.1'
|
compile 'com.android.support:design:26.0.2'
|
||||||
compile 'com.android.support:recyclerview-v7:26.0.1'
|
compile 'com.android.support:recyclerview-v7:26.0.2'
|
||||||
compile 'com.android.support:support-v4:26.0.1'
|
compile 'com.android.support:support-v4:26.0.2'
|
||||||
compile 'com.android.support:support-vector-drawable:26.0.1'
|
compile 'com.android.support:support-vector-drawable:26.0.2'
|
||||||
compile 'com.android.support:customtabs:26.0.1'
|
compile 'com.android.support:customtabs:26.0.2'
|
||||||
compile 'com.android.support:cardview-v7:26.0.1'
|
compile 'com.android.support:cardview-v7:26.0.2'
|
||||||
compile 'com.android.support.constraint:constraint-layout:1.0.2'
|
compile 'com.android.support.constraint:constraint-layout:1.0.2'
|
||||||
|
|
||||||
// Firebase + crashlytics
|
// Firebase + crashlytics
|
||||||
compile 'com.google.firebase:firebase-core:11.2.0'
|
compile 'com.google.firebase:firebase-core:11.2.0'
|
||||||
compile 'com.google.firebase:firebase-config:11.2.0'
|
compile 'com.google.firebase:firebase-config:11.2.0'
|
||||||
compile 'com.google.firebase:firebase-invites:11.2.0'
|
compile 'com.google.firebase:firebase-invites:11.2.0'
|
||||||
compile('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') {
|
compile('com.crashlytics.sdk.android:crashlytics:2.7.1@aar') {
|
||||||
transitive = true
|
transitive = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//multidex
|
//multidex
|
||||||
@ -141,7 +142,7 @@ dependencies {
|
|||||||
compile 'com.burgstaller:okhttp-digest:1.12'
|
compile 'com.burgstaller:okhttp-digest:1.12'
|
||||||
|
|
||||||
// Material-ish things
|
// Material-ish things
|
||||||
compile 'com.ashokvarma.android:bottom-navigation-bar:2.0.2'
|
compile 'com.ashokvarma.android:bottom-navigation-bar:2.0.3'
|
||||||
compile 'com.melnykov:floatingactionbutton:1.3.0'
|
compile 'com.melnykov:floatingactionbutton:1.3.0'
|
||||||
compile 'com.github.jd-alexander:LikeButton:0.2.1'
|
compile 'com.github.jd-alexander:LikeButton:0.2.1'
|
||||||
compile 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
|
compile 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
|
||||||
@ -155,7 +156,7 @@ dependencies {
|
|||||||
compile 'com.github.stkent:amplify:2.1.0'
|
compile 'com.github.stkent:amplify:2.1.0'
|
||||||
|
|
||||||
// For the article reader
|
// For the article reader
|
||||||
compile 'com.klinkerapps:drag-dismiss-activity:1.4.3'
|
compile 'com.klinkerapps:drag-dismiss-activity:1.5.0'
|
||||||
|
|
||||||
// Drawer
|
// Drawer
|
||||||
compile('com.mikepenz:materialdrawer:5.9.5@aar') {
|
compile('com.mikepenz:materialdrawer:5.9.5@aar') {
|
||||||
@ -166,6 +167,8 @@ dependencies {
|
|||||||
// Themes
|
// Themes
|
||||||
compile 'com.52inc:scoops:1.0.0'
|
compile 'com.52inc:scoops:1.0.0'
|
||||||
|
|
||||||
|
// Github issues reporter
|
||||||
|
compile 'com.heinrichreimersoftware:android-issue-reporter:1.3.1'
|
||||||
}
|
}
|
||||||
|
|
||||||
apply plugin: 'com.google.gms.google-services'
|
apply plugin: 'com.google.gms.google-services'
|
||||||
@ -210,6 +213,7 @@ def initAppForSecretPropertiesIfNeeded() {
|
|||||||
entry(key: "sourceUrl", value: System.getProperty("sourceUrl"))
|
entry(key: "sourceUrl", value: System.getProperty("sourceUrl"))
|
||||||
entry(key: "trackerUrl", value: System.getProperty("trackerUrl"))
|
entry(key: "trackerUrl", value: System.getProperty("trackerUrl"))
|
||||||
entry(key: "translationUrl", value: System.getProperty("translationUrl"))
|
entry(key: "translationUrl", value: System.getProperty("translationUrl"))
|
||||||
|
entry(key: "githubToken", value: System.getProperty("githubToken"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,6 +64,7 @@ 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.heinrichreimersoftware.androidissuereporter.IssueReporterLauncher
|
||||||
import com.mikepenz.materialdrawer.AccountHeader
|
import com.mikepenz.materialdrawer.AccountHeader
|
||||||
import com.mikepenz.materialdrawer.AccountHeaderBuilder
|
import com.mikepenz.materialdrawer.AccountHeaderBuilder
|
||||||
import com.mikepenz.materialdrawer.model.ProfileDrawerItem
|
import com.mikepenz.materialdrawer.model.ProfileDrawerItem
|
||||||
@ -118,6 +119,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
private var offset: Int = 0
|
private var offset: Int = 0
|
||||||
private var firstVisible: Int = 0
|
private var firstVisible: Int = 0
|
||||||
private var recyclerViewScrollListener: RecyclerView.OnScrollListener? = null
|
private var recyclerViewScrollListener: RecyclerView.OnScrollListener? = null
|
||||||
|
private lateinit var settings: SharedPreferences
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -151,15 +153,17 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
|
|
||||||
customTabActivityHelper = CustomTabActivityHelper()
|
customTabActivityHelper = CustomTabActivityHelper()
|
||||||
|
|
||||||
val dirtyPref = getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE)
|
settings = getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE)
|
||||||
api = SelfossApi(this, this@HomeActivity, dirtyPref.getBoolean("isSelfSignedCert", false), dirtyPref.getBoolean("should_log_everything", false))
|
sharedPref = PreferenceManager.getDefaultSharedPreferences(this)
|
||||||
|
|
||||||
|
api = SelfossApi(this, this@HomeActivity, settings.getBoolean("isSelfSignedCert", false), sharedPref.getBoolean("should_log_everything", false))
|
||||||
items = ArrayList()
|
items = ArrayList()
|
||||||
|
|
||||||
appColors = AppColors(this@HomeActivity)
|
appColors = AppColors(this@HomeActivity)
|
||||||
|
|
||||||
handleBottomBar()
|
handleBottomBar()
|
||||||
|
|
||||||
handleDrawer(dirtyPref)
|
handleDrawer()
|
||||||
|
|
||||||
coordinatorLayout = findViewById(R.id.coordLayout)
|
coordinatorLayout = findViewById(R.id.coordLayout)
|
||||||
swipeRefreshLayout = findViewById(R.id.swipeRefreshLayout)
|
swipeRefreshLayout = findViewById(R.id.swipeRefreshLayout)
|
||||||
@ -193,11 +197,12 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
val i = items[viewHolder.adapterPosition]
|
val i = items[viewHolder.adapterPosition]
|
||||||
val position = items.indexOf(i)
|
val position = items.indexOf(i)
|
||||||
|
|
||||||
if (shouldBeCardView) {
|
val adapter = recyclerView.adapter
|
||||||
(recyclerView.adapter as ItemCardAdapter).removeItemAtIndex(position)
|
when (adapter) {
|
||||||
} else {
|
is ItemCardAdapter -> adapter.removeItemAtIndex(position)
|
||||||
(recyclerView.adapter as ItemListAdapter).removeItemAtIndex(position)
|
is ItemListAdapter -> adapter.removeItemAtIndex(position)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (items.size > 0)
|
if (items.size > 0)
|
||||||
tabNewBadge.setText("${items.size}").maybeShow()
|
tabNewBadge.setText("${items.size}").maybeShow()
|
||||||
else
|
else
|
||||||
@ -269,7 +274,6 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
|
|
||||||
sharedPref = PreferenceManager.getDefaultSharedPreferences(this)
|
sharedPref = PreferenceManager.getDefaultSharedPreferences(this)
|
||||||
|
|
||||||
val settings = getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE)
|
|
||||||
editor = settings.edit()
|
editor = settings.edit()
|
||||||
|
|
||||||
if (BuildConfig.GITHUB_VERSION) {
|
if (BuildConfig.GITHUB_VERSION) {
|
||||||
@ -302,7 +306,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
infiniteScroll = sharedPref.getBoolean("infinite_loading", false)
|
infiniteScroll = sharedPref.getBoolean("infinite_loading", false)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleDrawer(dirtyPref: SharedPreferences) {
|
private fun handleDrawer() {
|
||||||
displayAccountHeader =
|
displayAccountHeader =
|
||||||
PreferenceManager.getDefaultSharedPreferences(this)
|
PreferenceManager.getDefaultSharedPreferences(this)
|
||||||
.getBoolean("account_header_displaying", false)
|
.getBoolean("account_header_displaying", false)
|
||||||
@ -313,7 +317,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
.addProfiles(
|
.addProfiles(
|
||||||
ProfileDrawerItem()
|
ProfileDrawerItem()
|
||||||
.withName(
|
.withName(
|
||||||
dirtyPref.getString("url", "")
|
settings.getString("url", "")
|
||||||
)
|
)
|
||||||
.withIcon(resources.getDrawable(R.mipmap.ic_launcher))
|
.withIcon(resources.getDrawable(R.mipmap.ic_launcher))
|
||||||
)
|
)
|
||||||
@ -349,6 +353,25 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
|
|
||||||
drawer = drawerBuilder.build()
|
drawer = drawerBuilder.build()
|
||||||
|
|
||||||
|
drawer.addStickyFooterItem(
|
||||||
|
PrimaryDrawerItem()
|
||||||
|
.withName(R.string.drawer_report_bug)
|
||||||
|
.withIcon(R.drawable.ic_bug_report)
|
||||||
|
.withIconTintingEnabled(true)
|
||||||
|
.withOnDrawerItemClickListener { _, _, _ ->
|
||||||
|
IssueReporterLauncher.forTarget(getString(R.string.report_github_user), getString(R.string.report_github_repo))
|
||||||
|
.theme(R.style.Theme_App_Light)
|
||||||
|
.guestToken(BuildConfig.GITHUB_TOKEN)
|
||||||
|
.guestEmailRequired(true)
|
||||||
|
.minDescriptionLength(20)
|
||||||
|
.putExtraInfo("Unique ID", settings.getString("unique_id", ""))
|
||||||
|
.putExtraInfo("From github", BuildConfig.GITHUB_VERSION)
|
||||||
|
.homeAsUpEnabled(true)
|
||||||
|
.launch(this)
|
||||||
|
false
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
drawer.addStickyFooterItem(
|
drawer.addStickyFooterItem(
|
||||||
PrimaryDrawerItem()
|
PrimaryDrawerItem()
|
||||||
.withName(R.string.title_activity_settings)
|
.withName(R.string.title_activity_settings)
|
||||||
@ -579,9 +602,10 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
override fun onScrolled(localRecycler: RecyclerView?, dx: Int, dy: Int) {
|
override fun onScrolled(localRecycler: RecyclerView?, dx: Int, dy: Int) {
|
||||||
if (dy > 0) {
|
if (dy > 0) {
|
||||||
if (localRecycler != null) {
|
if (localRecycler != null) {
|
||||||
val lastVisibleItem: Int = when (mLayoutManager) {
|
val manager = recyclerView.layoutManager
|
||||||
is StaggeredGridLayoutManager -> mLayoutManager.findLastCompletelyVisibleItemPositions(null).last()
|
val lastVisibleItem: Int = when (manager) {
|
||||||
is GridLayoutManager -> mLayoutManager.findLastCompletelyVisibleItemPosition()
|
is StaggeredGridLayoutManager -> manager.findLastCompletelyVisibleItemPositions(null).last()
|
||||||
|
is GridLayoutManager -> manager.findLastCompletelyVisibleItemPosition()
|
||||||
else -> 0
|
else -> 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -601,18 +625,20 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
override fun onTabUnselected(position: Int) = Unit
|
override fun onTabUnselected(position: Int) = Unit
|
||||||
|
|
||||||
override fun onTabReselected(position: Int) =
|
override fun onTabReselected(position: Int) =
|
||||||
if (shouldBeCardView) {
|
when (mLayoutManager) {
|
||||||
if ((mLayoutManager as StaggeredGridLayoutManager).findFirstCompletelyVisibleItemPositions(null)[0] == 0) {
|
is StaggeredGridLayoutManager ->
|
||||||
getElementsAccordingToTab()
|
if (mLayoutManager.findFirstCompletelyVisibleItemPositions(null)[0] == 0) {
|
||||||
} else {
|
getElementsAccordingToTab()
|
||||||
mLayoutManager.scrollToPositionWithOffset(0, 0)
|
} else {
|
||||||
}
|
mLayoutManager.scrollToPositionWithOffset(0, 0)
|
||||||
} else {
|
}
|
||||||
if ((mLayoutManager as GridLayoutManager).findFirstCompletelyVisibleItemPosition() == 0) {
|
is GridLayoutManager ->
|
||||||
getElementsAccordingToTab()
|
if (mLayoutManager.findFirstCompletelyVisibleItemPosition() == 0) {
|
||||||
} else {
|
getElementsAccordingToTab()
|
||||||
mLayoutManager.scrollToPositionWithOffset(0, 0)
|
} else {
|
||||||
}
|
mLayoutManager.scrollToPositionWithOffset(0, 0)
|
||||||
|
}
|
||||||
|
else -> Unit
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onTabSelected(position: Int) =
|
override fun onTabSelected(position: Int) =
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package apps.amine.bou.readerforselfoss
|
package apps.amine.bou.readerforselfoss
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.preference.PreferenceManager
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
@ -41,13 +42,14 @@ class ReaderActivity : DragDismissActivity() {
|
|||||||
Scoop.getInstance().apply(this)
|
Scoop.getInstance().apply(this)
|
||||||
val v = inflater.inflate(R.layout.activity_reader, parent, false)
|
val v = inflater.inflate(R.layout.activity_reader, parent, false)
|
||||||
showProgressBar()
|
showProgressBar()
|
||||||
|
val prefs = PreferenceManager.getDefaultSharedPreferences(this)
|
||||||
|
|
||||||
val image: ImageView = v.findViewById(R.id.imageView)
|
val image: ImageView = v.findViewById(R.id.imageView)
|
||||||
val source: TextView = v.findViewById(R.id.source)
|
val source: TextView = v.findViewById(R.id.source)
|
||||||
val title: TextView = v.findViewById(R.id.title)
|
val title: TextView = v.findViewById(R.id.title)
|
||||||
val content: HtmlTextView = v.findViewById(R.id.content)
|
val content: HtmlTextView = v.findViewById(R.id.content)
|
||||||
val url = intent.getStringExtra("url")
|
val url = intent.getStringExtra("url")
|
||||||
val parser = MercuryApi(BuildConfig.MERCURY_KEY)
|
val parser = MercuryApi(BuildConfig.MERCURY_KEY, prefs.getBoolean("should_log_everything", false))
|
||||||
val browserBtn: ImageButton = v.findViewById(R.id.browserBtn)
|
val browserBtn: ImageButton = v.findViewById(R.id.browserBtn)
|
||||||
val shareBtn: ImageButton = v.findViewById(R.id.shareBtn)
|
val shareBtn: ImageButton = v.findViewById(R.id.shareBtn)
|
||||||
|
|
||||||
|
@ -9,13 +9,16 @@ import retrofit2.converter.gson.GsonConverterFactory
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
class MercuryApi(private val key: String) {
|
class MercuryApi(private val key: String, shouldLog: Boolean) {
|
||||||
private val service: MercuryService
|
private val service: MercuryService
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
|
||||||
val interceptor = HttpLoggingInterceptor()
|
val interceptor = HttpLoggingInterceptor()
|
||||||
interceptor.level = HttpLoggingInterceptor.Level.BODY
|
interceptor.level = if (shouldLog)
|
||||||
|
HttpLoggingInterceptor.Level.BODY
|
||||||
|
else
|
||||||
|
HttpLoggingInterceptor.Level.NONE
|
||||||
val client = OkHttpClient.Builder().addInterceptor(interceptor).build()
|
val client = OkHttpClient.Builder().addInterceptor(interceptor).build()
|
||||||
|
|
||||||
val gson = GsonBuilder()
|
val gson = GsonBuilder()
|
||||||
|
@ -128,6 +128,12 @@ data class Item(@SerializedName("id") val id: String,
|
|||||||
if (stringUrl.contains(":443")) {
|
if (stringUrl.contains(":443")) {
|
||||||
stringUrl = stringUrl.replace(":443", "").replace("http://", "https://")
|
stringUrl = stringUrl.replace(":443", "").replace("http://", "https://")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// handle url not starting with http
|
||||||
|
if (stringUrl.startsWith("//")) {
|
||||||
|
stringUrl = "http:" + stringUrl
|
||||||
|
}
|
||||||
|
|
||||||
return stringUrl
|
return stringUrl
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,10 +6,8 @@ import android.content.SharedPreferences
|
|||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.support.v7.app.AlertDialog
|
import android.support.v7.app.AlertDialog
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
import android.util.Patterns
|
|
||||||
|
|
||||||
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
|
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
|
||||||
import okhttp3.HttpUrl
|
|
||||||
|
|
||||||
import apps.amine.bou.readerforselfoss.BuildConfig
|
import apps.amine.bou.readerforselfoss.BuildConfig
|
||||||
import apps.amine.bou.readerforselfoss.R
|
import apps.amine.bou.readerforselfoss.R
|
||||||
@ -36,20 +34,6 @@ fun Context.checkAndDisplayStoreApk() = {
|
|||||||
} else Unit
|
} else Unit
|
||||||
}
|
}
|
||||||
|
|
||||||
fun String.isUrlValid(): Boolean =
|
|
||||||
HttpUrl.parse(this) != null && Patterns.WEB_URL.matcher(this).matches()
|
|
||||||
|
|
||||||
fun String.isBaseUrlValid(): Boolean {
|
|
||||||
val baseUrl = HttpUrl.parse(this)
|
|
||||||
var existsAndEndsWithSlash = false
|
|
||||||
if (baseUrl != null) {
|
|
||||||
val pathSegments = baseUrl.pathSegments()
|
|
||||||
existsAndEndsWithSlash = "" == pathSegments[pathSegments.size - 1]
|
|
||||||
}
|
|
||||||
|
|
||||||
return Patterns.WEB_URL.matcher(this).matches() && existsAndEndsWithSlash
|
|
||||||
}
|
|
||||||
|
|
||||||
fun String?.isEmptyOrNullOrNullString(): Boolean =
|
fun String?.isEmptyOrNullOrNullString(): Boolean =
|
||||||
this == null || this == "null" || this.isEmpty()
|
this == null || this == "null" || this.isEmpty()
|
||||||
|
|
||||||
|
@ -7,9 +7,12 @@ import android.content.Intent
|
|||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.support.customtabs.CustomTabsIntent
|
import android.support.customtabs.CustomTabsIntent
|
||||||
|
import android.util.Patterns
|
||||||
|
import android.widget.Toast
|
||||||
import apps.amine.bou.readerforselfoss.R
|
import apps.amine.bou.readerforselfoss.R
|
||||||
import apps.amine.bou.readerforselfoss.ReaderActivity
|
import apps.amine.bou.readerforselfoss.ReaderActivity
|
||||||
import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
||||||
|
import okhttp3.HttpUrl
|
||||||
import xyz.klinker.android.drag_dismiss.DragDismissIntentBuilder
|
import xyz.klinker.android.drag_dismiss.DragDismissIntentBuilder
|
||||||
|
|
||||||
|
|
||||||
@ -51,29 +54,35 @@ fun Context.openItemUrl(linkDecoded: String,
|
|||||||
internalBrowser: Boolean,
|
internalBrowser: Boolean,
|
||||||
articleViewer: Boolean,
|
articleViewer: Boolean,
|
||||||
app: Activity) {
|
app: Activity) {
|
||||||
if (!internalBrowser || !linkDecoded.isUrlValid()) {
|
|
||||||
openInBrowser(linkDecoded, app)
|
|
||||||
} else {
|
|
||||||
if (articleViewer) {
|
|
||||||
val intent = Intent(this, ReaderActivity::class.java)
|
|
||||||
|
|
||||||
DragDismissIntentBuilder(this)
|
if (!linkDecoded.isUrlValid()) {
|
||||||
|
Toast.makeText(this, this.getString(R.string.cant_open_invalid_url), Toast.LENGTH_LONG).show()
|
||||||
|
} else {
|
||||||
|
if (!internalBrowser) {
|
||||||
|
openInBrowser(linkDecoded, app)
|
||||||
|
} else {
|
||||||
|
if (articleViewer) {
|
||||||
|
val intent = Intent(this, ReaderActivity::class.java)
|
||||||
|
|
||||||
|
DragDismissIntentBuilder(this)
|
||||||
.setFullscreenOnTablets(true) // defaults to false, tablets will have padding on each side
|
.setFullscreenOnTablets(true) // defaults to false, tablets will have padding on each side
|
||||||
.setDragElasticity(DragDismissIntentBuilder.DragElasticity.NORMAL) // Larger elasticities will make it easier to dismiss.
|
.setDragElasticity(DragDismissIntentBuilder.DragElasticity.NORMAL) // Larger elasticities will make it easier to dismiss.
|
||||||
|
.setDrawUnderStatusBar(true)
|
||||||
.build(intent)
|
.build(intent)
|
||||||
|
|
||||||
intent.putExtra("url", linkDecoded)
|
intent.putExtra("url", linkDecoded)
|
||||||
app.startActivity(intent)
|
app.startActivity(intent)
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
CustomTabActivityHelper.openCustomTab(app, customTabsIntent, Uri.parse(linkDecoded)
|
CustomTabActivityHelper.openCustomTab(app, customTabsIntent, Uri.parse(linkDecoded)
|
||||||
) { _, uri ->
|
) { _, uri ->
|
||||||
val intent = Intent(Intent.ACTION_VIEW, uri)
|
val intent = Intent(Intent.ACTION_VIEW, uri)
|
||||||
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
openInBrowser(linkDecoded, app)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
|
||||||
openInBrowser(linkDecoded, app)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -84,3 +93,17 @@ private fun openInBrowser(linkDecoded: String, app: Activity) {
|
|||||||
intent.data = Uri.parse(linkDecoded)
|
intent.data = Uri.parse(linkDecoded)
|
||||||
app.startActivity(intent)
|
app.startActivity(intent)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun String.isUrlValid(): Boolean =
|
||||||
|
HttpUrl.parse(this) != null && Patterns.WEB_URL.matcher(this).matches()
|
||||||
|
|
||||||
|
fun String.isBaseUrlValid(): Boolean {
|
||||||
|
val baseUrl = HttpUrl.parse(this)
|
||||||
|
var existsAndEndsWithSlash = false
|
||||||
|
if (baseUrl != null) {
|
||||||
|
val pathSegments = baseUrl.pathSegments()
|
||||||
|
existsAndEndsWithSlash = "" == pathSegments[pathSegments.size - 1]
|
||||||
|
}
|
||||||
|
|
||||||
|
return Patterns.WEB_URL.matcher(this).matches() && existsAndEndsWithSlash
|
||||||
|
}
|
||||||
|
@ -97,7 +97,7 @@
|
|||||||
android:padding="4dp"
|
android:padding="4dp"
|
||||||
android:scaleType="centerCrop"
|
android:scaleType="centerCrop"
|
||||||
android:src="@drawable/ic_open_in_browser_black_24dp"
|
android:src="@drawable/ic_open_in_browser_black_24dp"
|
||||||
android:tint="?android:attr/textColorPrimary"
|
android:tint="@android:color/black"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/shareBtn"
|
app:layout_constraintEnd_toStartOf="@+id/shareBtn"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
@ -114,7 +114,7 @@
|
|||||||
android:padding="4dp"
|
android:padding="4dp"
|
||||||
android:scaleType="centerCrop"
|
android:scaleType="centerCrop"
|
||||||
android:src="@drawable/ic_share_black_24dp"
|
android:src="@drawable/ic_share_black_24dp"
|
||||||
android:tint="?android:attr/textColorPrimary"
|
android:tint="@android:color/black"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Übersetzung</string>
|
<string name="translation">Übersetzung</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">Aucun appel à l\'API ne sera logué</string>
|
<string name="login_everything_off">Aucun appel à l\'API ne sera logué</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Charger plus d\'articles au scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Charger plus d\'articles au scroll</string>
|
||||||
<string name="translation">Traduction</string>
|
<string name="translation">Traduction</string>
|
||||||
|
<string name="cant_open_invalid_url">L’url de l’élément n’est pas valide. En attendant la résolution du problème, le lien ne s\'ouvrira pas.</string>
|
||||||
|
<string name="drawer_report_bug">Signaler un bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Vertaling</string>
|
<string name="translation">Vertaling</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,6 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -155,4 +155,8 @@
|
|||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">No api call will be logged</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</string>
|
||||||
|
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
|
||||||
|
<string name="report_github_user" translatable="false">aminecmi</string>
|
||||||
|
<string name="report_github_repo" translatable="false">ReaderforSelfoss</string>
|
||||||
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
</resources>
|
</resources>
|
@ -191,4 +191,11 @@
|
|||||||
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="Theme.App.Light" parent="Theme.IssueReporter.Light.DarkActionBar">
|
||||||
|
<item name="colorPrimary">@color/colorPrimary</item>
|
||||||
|
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||||
|
<item name="colorAccent">@color/colorAccent</item>
|
||||||
|
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
ext.kotlin_version = '1.1.4-3'
|
ext.kotlin_version = '1.1.51'
|
||||||
repositories {
|
repositories {
|
||||||
jcenter()
|
jcenter()
|
||||||
google()
|
google()
|
||||||
|
Reference in New Issue
Block a user