Compare commits
23 Commits
v171811312
...
v171811328
Author | SHA1 | Date | |
---|---|---|---|
9cc1adbf15 | |||
1d9a440ae7 | |||
511553806c | |||
87e7d7c4fe | |||
ec87089310 | |||
d8478ebb01 | |||
600adc81b5 | |||
ddac2870af | |||
8d9c8c1394 | |||
b59c3bcb23 | |||
7f554adba5 | |||
21ce061282 | |||
bdb71e9b14 | |||
df22e7de15 | |||
6b3550396b | |||
c70f1e31a6 | |||
695670e944 | |||
1028826788 | |||
82a8977c96 | |||
07d9ce1054 | |||
7da7d49277 | |||
9b45365441 | |||
91a7464bce |
@ -1,5 +1,7 @@
|
|||||||
**1.7.x**
|
**1.7.x**
|
||||||
|
|
||||||
|
- Added experimental issue to set a default timeout. Should work for #238.
|
||||||
|
|
||||||
- Closing #220.
|
- Closing #220.
|
||||||
|
|
||||||
- Start of #238. "Add a quick shortcut to open the app on offline mode ?"
|
- Start of #238. "Add a quick shortcut to open the app on offline mode ?"
|
||||||
|
@ -1,17 +1,9 @@
|
|||||||
buildscript {
|
buildscript {
|
||||||
}
|
}
|
||||||
|
|
||||||
ext {
|
|
||||||
configuration = [
|
|
||||||
buildDate: new Date()
|
|
||||||
]
|
|
||||||
// This will make me able to build multiple times a day. May break thinks. I may forget it.
|
|
||||||
todaysBuilds = "1"
|
|
||||||
}
|
|
||||||
|
|
||||||
def gitVersion() {
|
def gitVersion() {
|
||||||
def process = "git describe --abbrev=0 --tags".execute()
|
def process = "git for-each-ref refs/tags --sort=-authordate --format='%(refname:short)' --count=1".execute()
|
||||||
return process.text.substring(1).replaceAll("\\.", "").trim()
|
return process.text.replaceAll("'", "").substring(1).replaceAll("\\.", "").trim()
|
||||||
}
|
}
|
||||||
|
|
||||||
def versionCodeFromGit() {
|
def versionCodeFromGit() {
|
||||||
@ -178,4 +170,4 @@ def initAppLoginPropertiesIfNeeded() {
|
|||||||
entry(key: "appLoginPassword", value: System.getProperty("appLoginPassword"))
|
entry(key: "appLoginPassword", value: System.getProperty("appLoginPassword"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
|
android:networkSecurityConfig="@xml/network_security_config"
|
||||||
android:theme="@style/NoBar">
|
android:theme="@style/NoBar">
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
|
@ -89,6 +89,7 @@ class AddSourceActivity : AppCompatActivity() {
|
|||||||
this,
|
this,
|
||||||
this@AddSourceActivity,
|
this@AddSourceActivity,
|
||||||
prefs.getBoolean("isSelfSignedCert", false),
|
prefs.getBoolean("isSelfSignedCert", false),
|
||||||
|
prefs.getString("api_timeout", "-1").toLong(),
|
||||||
prefs.getBoolean("should_log_everything", false)
|
prefs.getBoolean("should_log_everything", false)
|
||||||
)
|
)
|
||||||
} catch (e: IllegalArgumentException) {
|
} catch (e: IllegalArgumentException) {
|
||||||
@ -108,7 +109,7 @@ class AddSourceActivity : AppCompatActivity() {
|
|||||||
super.onResume()
|
super.onResume()
|
||||||
val config = Config(this)
|
val config = Config(this)
|
||||||
|
|
||||||
if (config.baseUrl.isEmpty() || !config.baseUrl.isBaseUrlValid()) {
|
if (config.baseUrl.isEmpty() || !config.baseUrl.isBaseUrlValid(false, this@AddSourceActivity)) {
|
||||||
mustLoginToAddSource()
|
mustLoginToAddSource()
|
||||||
} else {
|
} else {
|
||||||
handleSpoutsSpinner(spoutsSpinner, api, progress, formContainer)
|
handleSpoutsSpinner(spoutsSpinner, api, progress, formContainer)
|
||||||
|
@ -195,6 +195,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
this,
|
this,
|
||||||
this@HomeActivity,
|
this@HomeActivity,
|
||||||
settings.getBoolean("isSelfSignedCert", false),
|
settings.getBoolean("isSelfSignedCert", false),
|
||||||
|
sharedPref.getString("api_timeout", "-1").toLong(),
|
||||||
shouldLogEverything
|
shouldLogEverything
|
||||||
)
|
)
|
||||||
items = ArrayList()
|
items = ArrayList()
|
||||||
|
@ -54,7 +54,6 @@ class LoginActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
handleBaseUrlFail()
|
handleBaseUrlFail()
|
||||||
|
|
||||||
|
|
||||||
settings = getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE)
|
settings = getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE)
|
||||||
userIdentifier = settings.getString("unique_id", "")
|
userIdentifier = settings.getString("unique_id", "")
|
||||||
logErrors = settings.getBoolean("login_debug", false)
|
logErrors = settings.getBoolean("login_debug", false)
|
||||||
@ -145,7 +144,7 @@ class LoginActivity : AppCompatActivity() {
|
|||||||
var cancel = false
|
var cancel = false
|
||||||
var focusView: View? = null
|
var focusView: View? = null
|
||||||
|
|
||||||
if (!url.isBaseUrlValid()) {
|
if (!url.isBaseUrlValid(logErrors, this@LoginActivity)) {
|
||||||
urlView.error = getString(R.string.login_url_problem)
|
urlView.error = getString(R.string.login_url_problem)
|
||||||
focusView = urlView
|
focusView = urlView
|
||||||
cancel = true
|
cancel = true
|
||||||
@ -195,6 +194,7 @@ class LoginActivity : AppCompatActivity() {
|
|||||||
this,
|
this,
|
||||||
this@LoginActivity,
|
this@LoginActivity,
|
||||||
isWithSelfSignedCert,
|
isWithSelfSignedCert,
|
||||||
|
-1L,
|
||||||
isWithSelfSignedCert
|
isWithSelfSignedCert
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -28,10 +28,8 @@ import java.io.IOException
|
|||||||
import java.util.UUID.randomUUID
|
import java.util.UUID.randomUUID
|
||||||
|
|
||||||
|
|
||||||
@AcraHttpSender(uri = "http://amine-bou.fr:5984/acra-selfoss/_design/acra-storage/_update/report",
|
@AcraHttpSender(uri = "http://37.187.110.167/amine/acra/simplest-acra.php",
|
||||||
basicAuthLogin = "selfoss",
|
httpMethod = HttpSender.Method.POST)
|
||||||
basicAuthPassword = "selfoss",
|
|
||||||
httpMethod = HttpSender.Method.PUT)
|
|
||||||
@AcraDialog(resText = R.string.crash_dialog_text,
|
@AcraDialog(resText = R.string.crash_dialog_text,
|
||||||
resCommentPrompt = R.string.crash_dialog_comment,
|
resCommentPrompt = R.string.crash_dialog_comment,
|
||||||
resTheme = android.R.style.Theme_DeviceDefault_Dialog)
|
resTheme = android.R.style.Theme_DeviceDefault_Dialog)
|
||||||
|
@ -95,6 +95,7 @@ class ReaderActivity : AppCompatActivity() {
|
|||||||
this,
|
this,
|
||||||
this@ReaderActivity,
|
this@ReaderActivity,
|
||||||
prefs.getBoolean("isSelfSignedCert", false),
|
prefs.getBoolean("isSelfSignedCert", false),
|
||||||
|
prefs.getString("api_timeout", "-1").toLong(),
|
||||||
prefs.getBoolean("should_log_everything", false)
|
prefs.getBoolean("should_log_everything", false)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -60,6 +60,7 @@ class SourcesActivity : AppCompatActivity() {
|
|||||||
this,
|
this,
|
||||||
this@SourcesActivity,
|
this@SourcesActivity,
|
||||||
prefs.getBoolean("isSelfSignedCert", false),
|
prefs.getBoolean("isSelfSignedCert", false),
|
||||||
|
prefs.getString("api_timeout", "-1").toLong(),
|
||||||
prefs.getBoolean("should_log_everything", false)
|
prefs.getBoolean("should_log_everything", false)
|
||||||
)
|
)
|
||||||
var items: ArrayList<Source> = ArrayList()
|
var items: ArrayList<Source> = ArrayList()
|
||||||
|
@ -179,7 +179,8 @@ class ItemCardAdapter(
|
|||||||
})
|
})
|
||||||
|
|
||||||
mView.shareBtn.setOnClickListener {
|
mView.shareBtn.setOnClickListener {
|
||||||
c.shareLink(items[adapterPosition].getLinkDecoded())
|
val item = items[adapterPosition]
|
||||||
|
c.shareLink(item.getLinkDecoded(), item.title)
|
||||||
}
|
}
|
||||||
|
|
||||||
mView.browserBtn.setOnClickListener {
|
mView.browserBtn.setOnClickListener {
|
||||||
|
@ -18,11 +18,13 @@ import retrofit2.Call
|
|||||||
import retrofit2.Retrofit
|
import retrofit2.Retrofit
|
||||||
import retrofit2.converter.gson.GsonConverterFactory
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
class SelfossApi(
|
class SelfossApi(
|
||||||
c: Context,
|
c: Context,
|
||||||
callingActivity: Activity?,
|
callingActivity: Activity?,
|
||||||
isWithSelfSignedCert: Boolean,
|
isWithSelfSignedCert: Boolean,
|
||||||
|
timeout: Long,
|
||||||
shouldLog: Boolean
|
shouldLog: Boolean
|
||||||
) {
|
) {
|
||||||
|
|
||||||
@ -38,16 +40,25 @@ class SelfossApi(
|
|||||||
this
|
this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun OkHttpClient.Builder.maybeWithSettingsTimeout(timeout: Long): OkHttpClient.Builder =
|
||||||
|
if (timeout != -1L) {
|
||||||
|
this.readTimeout(timeout, TimeUnit.SECONDS)
|
||||||
|
.connectTimeout(timeout, TimeUnit.SECONDS)
|
||||||
|
} else {
|
||||||
|
this
|
||||||
|
}
|
||||||
|
|
||||||
fun Credentials.createAuthenticator(): DispatchingAuthenticator =
|
fun Credentials.createAuthenticator(): DispatchingAuthenticator =
|
||||||
DispatchingAuthenticator.Builder()
|
DispatchingAuthenticator.Builder()
|
||||||
.with("digest", DigestAuthenticator(this))
|
.with("digest", DigestAuthenticator(this))
|
||||||
.with("basic", BasicAuthenticator(this))
|
.with("basic", BasicAuthenticator(this))
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
fun DispatchingAuthenticator.getHttpClien(isWithSelfSignedCert: Boolean): OkHttpClient.Builder {
|
fun DispatchingAuthenticator.getHttpClien(isWithSelfSignedCert: Boolean, timeout: Long): OkHttpClient.Builder {
|
||||||
val authCache = ConcurrentHashMap<String, CachingAuthenticator>()
|
val authCache = ConcurrentHashMap<String, CachingAuthenticator>()
|
||||||
return OkHttpClient
|
return OkHttpClient
|
||||||
.Builder()
|
.Builder()
|
||||||
|
.maybeWithSettingsTimeout(timeout)
|
||||||
.maybeWithSelfSigned(isWithSelfSignedCert)
|
.maybeWithSelfSigned(isWithSelfSignedCert)
|
||||||
.authenticator(CachingAuthenticatorDecorator(this, authCache))
|
.authenticator(CachingAuthenticatorDecorator(this, authCache))
|
||||||
.addInterceptor(AuthenticationCacheInterceptor(authCache))
|
.addInterceptor(AuthenticationCacheInterceptor(authCache))
|
||||||
@ -78,7 +89,7 @@ class SelfossApi(
|
|||||||
HttpLoggingInterceptor.Level.NONE
|
HttpLoggingInterceptor.Level.NONE
|
||||||
}
|
}
|
||||||
|
|
||||||
val httpClient = authenticator.getHttpClien(isWithSelfSignedCert)
|
val httpClient = authenticator.getHttpClien(isWithSelfSignedCert, timeout)
|
||||||
|
|
||||||
httpClient.addInterceptor(logging)
|
httpClient.addInterceptor(logging)
|
||||||
|
|
||||||
|
@ -53,7 +53,6 @@ class LoadingWorker(val context: Context, params: WorkerParameters) : Worker(con
|
|||||||
val settings =
|
val settings =
|
||||||
this.context.getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE)
|
this.context.getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE)
|
||||||
val sharedPref = PreferenceManager.getDefaultSharedPreferences(this.context)
|
val sharedPref = PreferenceManager.getDefaultSharedPreferences(this.context)
|
||||||
val shouldLogEverything = sharedPref.getBoolean("should_log_everything", false)
|
|
||||||
val notifyNewItems = sharedPref.getBoolean("notify_new_items", false)
|
val notifyNewItems = sharedPref.getBoolean("notify_new_items", false)
|
||||||
|
|
||||||
db = Room.databaseBuilder(
|
db = Room.databaseBuilder(
|
||||||
@ -65,7 +64,8 @@ class LoadingWorker(val context: Context, params: WorkerParameters) : Worker(con
|
|||||||
this.context,
|
this.context,
|
||||||
null,
|
null,
|
||||||
settings.getBoolean("isSelfSignedCert", false),
|
settings.getBoolean("isSelfSignedCert", false),
|
||||||
shouldLogEverything
|
sharedPref.getString("api_timeout", "-1").toLong(),
|
||||||
|
sharedPref.getBoolean("should_log_everything", false)
|
||||||
)
|
)
|
||||||
|
|
||||||
api.allItems().enqueue(object : Callback<List<Item>> {
|
api.allItems().enqueue(object : Callback<List<Item>> {
|
||||||
|
@ -114,6 +114,7 @@ class ArticleFragment : Fragment() {
|
|||||||
context!!,
|
context!!,
|
||||||
activity!!,
|
activity!!,
|
||||||
settings.getBoolean("isSelfSignedCert", false),
|
settings.getBoolean("isSelfSignedCert", false),
|
||||||
|
prefs.getString("api_timeout", "-1").toLong(),
|
||||||
prefs.getBoolean("should_log_everything", false)
|
prefs.getBoolean("should_log_everything", false)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -138,7 +139,7 @@ class ArticleFragment : Fragment() {
|
|||||||
override fun onItemClick(item: MenuItem) {
|
override fun onItemClick(item: MenuItem) {
|
||||||
when (item.itemId) {
|
when (item.itemId) {
|
||||||
R.id.more_action -> getContentFromMercury(customTabsIntent, prefs)
|
R.id.more_action -> getContentFromMercury(customTabsIntent, prefs)
|
||||||
R.id.share_action -> activity!!.shareLink(url)
|
R.id.share_action -> activity!!.shareLink(url, contentTitle)
|
||||||
R.id.open_action -> activity!!.openItemUrl(
|
R.id.open_action -> activity!!.openItemUrl(
|
||||||
allItems,
|
allItems,
|
||||||
pageNumber.toInt(),
|
pageNumber.toInt(),
|
||||||
|
@ -136,6 +136,7 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
|
|||||||
|| GeneralPreferenceFragment.class.getName().equals(fragmentName)
|
|| GeneralPreferenceFragment.class.getName().equals(fragmentName)
|
||||||
|| ArticleViewerPreferenceFragment.class.getName().equals(fragmentName)
|
|| ArticleViewerPreferenceFragment.class.getName().equals(fragmentName)
|
||||||
|| OfflinePreferenceFragment.class.getName().equals(fragmentName)
|
|| OfflinePreferenceFragment.class.getName().equals(fragmentName)
|
||||||
|
|| ExperimentalPreferenceFragment.class.getName().equals(fragmentName)
|
||||||
|| DebugPreferenceFragment.class.getName().equals(fragmentName)
|
|| DebugPreferenceFragment.class.getName().equals(fragmentName)
|
||||||
|| LinksPreferenceFragment.class.getName().equals(fragmentName)
|
|| LinksPreferenceFragment.class.getName().equals(fragmentName)
|
||||||
|| ThemePreferenceFragment.class.getName().equals(fragmentName);
|
|| ThemePreferenceFragment.class.getName().equals(fragmentName);
|
||||||
@ -384,6 +385,26 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
||||||
|
public static class ExperimentalPreferenceFragment extends PreferenceFragment {
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
addPreferencesFromResource(R.xml.pref_experimental);
|
||||||
|
setHasOptionsMenu(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
int id = item.getItemId();
|
||||||
|
if (id == android.R.id.home) {
|
||||||
|
getActivity().finish();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
@ -2,11 +2,21 @@ package apps.amine.bou.readerforselfoss.utils
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.preference.PreferenceManager
|
import android.preference.PreferenceManager
|
||||||
|
import android.provider.Settings
|
||||||
import org.acra.ErrorReporter
|
import org.acra.ErrorReporter
|
||||||
|
|
||||||
fun ErrorReporter.maybeHandleSilentException(throwable: Throwable, ctx: Context) {
|
fun ErrorReporter.maybeHandleSilentException(throwable: Throwable, ctx: Context) {
|
||||||
val sharedPref = PreferenceManager.getDefaultSharedPreferences(ctx)
|
val sharedPref = PreferenceManager.getDefaultSharedPreferences(ctx)
|
||||||
if (sharedPref.getBoolean("acra_should_log", false)) {
|
val isTestLab = Settings.System.getString(ctx.contentResolver, "firebase.test.lab") == "true"
|
||||||
|
|
||||||
|
if (sharedPref.getBoolean("acra_should_log", false) && !isTestLab) {
|
||||||
|
this.handleSilentException(throwable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun ErrorReporter.doHandleSilentException(throwable: Throwable, ctx: Context) {
|
||||||
|
val isTestLab = Settings.System.getString(ctx.contentResolver, "firebase.test.lab") == "true"
|
||||||
|
if (!isTestLab) {
|
||||||
this.handleSilentException(throwable)
|
this.handleSilentException(throwable)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -25,11 +25,12 @@ fun String.toStringUriWithHttp(): String =
|
|||||||
this
|
this
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Context.shareLink(itemUrl: String) {
|
fun Context.shareLink(itemUrl: String, itemTitle: String) {
|
||||||
val sendIntent = Intent()
|
val sendIntent = Intent()
|
||||||
sendIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
sendIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
||||||
sendIntent.action = Intent.ACTION_SEND
|
sendIntent.action = Intent.ACTION_SEND
|
||||||
sendIntent.putExtra(Intent.EXTRA_TEXT, itemUrl.toStringUriWithHttp())
|
sendIntent.putExtra(Intent.EXTRA_TEXT, itemUrl.toStringUriWithHttp())
|
||||||
|
sendIntent.putExtra(Intent.EXTRA_SUBJECT, itemTitle)
|
||||||
sendIntent.type = "text/plain"
|
sendIntent.type = "text/plain"
|
||||||
startActivity(
|
startActivity(
|
||||||
Intent.createChooser(
|
Intent.createChooser(
|
||||||
|
@ -19,6 +19,7 @@ import apps.amine.bou.readerforselfoss.ReaderActivity
|
|||||||
import apps.amine.bou.readerforselfoss.api.selfoss.Item
|
import apps.amine.bou.readerforselfoss.api.selfoss.Item
|
||||||
import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
||||||
import okhttp3.HttpUrl
|
import okhttp3.HttpUrl
|
||||||
|
import org.acra.ACRA
|
||||||
|
|
||||||
fun Context.buildCustomTabsIntent(): CustomTabsIntent {
|
fun Context.buildCustomTabsIntent(): CustomTabsIntent {
|
||||||
|
|
||||||
@ -134,7 +135,7 @@ private fun openInBrowser(linkDecoded: String, app: Activity) {
|
|||||||
fun String.isUrlValid(): Boolean =
|
fun String.isUrlValid(): Boolean =
|
||||||
HttpUrl.parse(this) != null && Patterns.WEB_URL.matcher(this).matches()
|
HttpUrl.parse(this) != null && Patterns.WEB_URL.matcher(this).matches()
|
||||||
|
|
||||||
fun String.isBaseUrlValid(): Boolean {
|
fun String.isBaseUrlValid(logErrors: Boolean, ctx: Context): Boolean {
|
||||||
val baseUrl = HttpUrl.parse(this)
|
val baseUrl = HttpUrl.parse(this)
|
||||||
var existsAndEndsWithSlash = false
|
var existsAndEndsWithSlash = false
|
||||||
if (baseUrl != null) {
|
if (baseUrl != null) {
|
||||||
@ -142,7 +143,11 @@ fun String.isBaseUrlValid(): Boolean {
|
|||||||
existsAndEndsWithSlash = "" == pathSegments[pathSegments.size - 1]
|
existsAndEndsWithSlash = "" == pathSegments[pathSegments.size - 1]
|
||||||
}
|
}
|
||||||
|
|
||||||
return Patterns.WEB_URL.matcher(this).matches() && existsAndEndsWithSlash
|
val isValid = Patterns.WEB_URL.matcher(this).matches() && existsAndEndsWithSlash
|
||||||
|
if (!isValid && logErrors) {
|
||||||
|
ACRA.getErrorReporter().doHandleSilentException(java.lang.Exception("Patterns.WEB_URL.matcher(this).matches() == ${Patterns.WEB_URL.matcher(this).matches()} && existsAndEndsWithSlash == $existsAndEndsWithSlash && baseUrl.pathSegments() == ${baseUrl?.pathSegments()}"), ctx)
|
||||||
|
}
|
||||||
|
return isValid
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Context.openInBrowserAsNewTask(i: Item) {
|
fun Context.openInBrowserAsNewTask(i: Item) {
|
||||||
|
BIN
app/src/main/res/drawable-hdpi/ic_action_lab.png
Normal file
BIN
app/src/main/res/drawable-hdpi/ic_action_lab.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 683 B |
BIN
app/src/main/res/drawable-mdpi/ic_action_lab.png
Normal file
BIN
app/src/main/res/drawable-mdpi/ic_action_lab.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 409 B |
BIN
app/src/main/res/drawable-xhdpi/ic_action_lab.png
Normal file
BIN
app/src/main/res/drawable-xhdpi/ic_action_lab.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 871 B |
BIN
app/src/main/res/drawable-xxhdpi/ic_action_lab.png
Normal file
BIN
app/src/main/res/drawable-xxhdpi/ic_action_lab.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
BIN
app/src/main/res/drawable-xxxhdpi/ic_action_lab.png
Normal file
BIN
app/src/main/res/drawable-xxxhdpi/ic_action_lab.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.2 KiB |
@ -9,7 +9,8 @@
|
|||||||
<androidx.core.widget.NestedScrollView
|
<androidx.core.widget.NestedScrollView
|
||||||
android:id="@+id/nestedScrollView"
|
android:id="@+id/nestedScrollView"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent"
|
||||||
|
android:scrollbars="vertical">
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -129,41 +129,43 @@
|
|||||||
<string name="reader_action_share">Teilen</string>
|
<string name="reader_action_share">Teilen</string>
|
||||||
<string name="pref_switch_actions_pager_scroll_on">Mark articles as read when swiping between articles.</string>
|
<string name="pref_switch_actions_pager_scroll_on">Mark articles as read when swiping between articles.</string>
|
||||||
<string name="add_to_favs_reader">Zu Favoriten hinzufügen</string>
|
<string name="add_to_favs_reader">Zu Favoriten hinzufügen</string>
|
||||||
<string name="remove_to_favs_reader">Remove from favorites</string>
|
<string name="remove_to_favs_reader">Aus Favoriten entfernen</string>
|
||||||
<string name="pref_content_reader_font_size">Article reader content font size</string>
|
<string name="pref_content_reader_font_size">Article reader content font size</string>
|
||||||
<string name="pref_header_viewer">Article viewer</string>
|
<string name="pref_header_viewer">Article viewer</string>
|
||||||
<string name="refresh_dialog_message">This will refresh your Selfoss instance.</string>
|
<string name="refresh_dialog_message">This will refresh your Selfoss instance.</string>
|
||||||
<string name="markall_dialog_message">This will mark all the items as read.</string>
|
<string name="markall_dialog_message">Dies wird alle Elemente als gelesen markieren.</string>
|
||||||
<string name="pref_switch_actions_pager_scroll">Mark as read on swipe</string>
|
<string name="pref_switch_actions_pager_scroll">Beim Wischen als gelesen markieren</string>
|
||||||
<string name="pref_switch_actions_pager_scroll_off">Don\'t mark articles as read when swiping.</string>
|
<string name="pref_switch_actions_pager_scroll_off">Don\'t mark articles as read when swiping.</string>
|
||||||
<string name="gdpr_dialog_message">The app does not collect any personal data. Every analytics tools were removed. Crash reports sending is now optional, as is the debug logging. Keep in mind that debugging and crash reports are essential for the app development (You can configure everything in Settings > Debug).</string>
|
<string name="gdpr_dialog_message">The app does not collect any personal data. Every analytics tools were removed. Crash reports sending is now optional, as is the debug logging. Keep in mind that debugging and crash reports are essential for the app development (You can configure everything in Settings > Debug).</string>
|
||||||
<string name="gdpr_dialog_title">The app does not share any personal data about you.</string>
|
<string name="gdpr_dialog_title">The app does not share any personal data about you.</string>
|
||||||
<string name="crash_dialog_text">Something went wrong. Please send the report to the developer.</string>
|
<string name="crash_dialog_text">Something went wrong. Please send the report to the developer.</string>
|
||||||
<string name="crash_dialog_comment">You can add any helpful details in the comment bellow. Don\'t include any personal data in your comment. You could send me and email with your debug id, and I\'ll keep you posted when the issue is resolved.</string>
|
<string name="crash_dialog_comment">You can add any helpful details in the comment bellow. Don\'t include any personal data in your comment. You could send me and email with your debug id, and I\'ll keep you posted when the issue is resolved.</string>
|
||||||
<string name="pref_acra_alwaysaccept">Automatically send crash reports</string>
|
<string name="pref_acra_alwaysaccept">Automatically send crash reports</string>
|
||||||
<string name="pref_acra_alwaysaccept_enabled">Will send crash reports automatically</string>
|
<string name="pref_acra_alwaysaccept_enabled">Fehlerberichte werden automatisch gesendet</string>
|
||||||
<string name="pref_acra_alwaysaccept_disabled">Will ask everytime when sending crash reports.</string>
|
<string name="pref_acra_alwaysaccept_disabled">Will ask everytime when sending crash reports.</string>
|
||||||
<string name="pref_debug_crash_reports">Crash reports</string>
|
<string name="pref_debug_crash_reports">Fehlerberichte</string>
|
||||||
<string name="pref_debug_debug_logs">Debug logging (these will be sent without a dialog)</string>
|
<string name="pref_debug_debug_logs">Debug logging (these will be sent without a dialog)</string>
|
||||||
<string name="acra_login">Enable logging</string>
|
<string name="acra_login">Protokollierung aktivieren</string>
|
||||||
<string name="drawer_item_hidden_tags">Hidden Tags</string>
|
<string name="drawer_item_hidden_tags">Hidden Tags</string>
|
||||||
<string name="unmark">Mark item as unread</string>
|
<string name="unmark">Eintrag als ungelesen markieren</string>
|
||||||
<string name="pref_header_offline">Offline and cache</string>
|
<string name="pref_header_offline">Offline and cache</string>
|
||||||
<string name="pref_switch_items_caching_off">Articles won\'t be saved to the device memory, and the app won\'t be usable offline.</string>
|
<string name="pref_switch_items_caching_off">Articles won\'t be saved to the device memory, and the app won\'t be usable offline.</string>
|
||||||
<string name="pref_switch_items_caching_on">Articles will be saved to the device memory and will be used for offline use.</string>
|
<string name="pref_switch_items_caching_on">Articles will be saved to the device memory and will be used for offline use.</string>
|
||||||
<string name="pref_switch_items_caching">Save items for offline use</string>
|
<string name="pref_switch_items_caching">Save items for offline use</string>
|
||||||
<string name="no_network_connectivity">Not connected !</string>
|
<string name="no_network_connectivity">Nicht verbunden !</string>
|
||||||
<string name="pref_switch_periodic_refresh">Sync articles</string>
|
<string name="pref_switch_periodic_refresh">Synchronisiere Artikel</string>
|
||||||
<string name="pref_switch_periodic_refresh_off">Articles will not be synced in the background</string>
|
<string name="pref_switch_periodic_refresh_off">Artikel werden nicht im Hintergrund synchronisiert</string>
|
||||||
<string name="pref_switch_periodic_refresh_on">Articles will periodically be synced</string>
|
<string name="pref_switch_periodic_refresh_on">Die Artikel werden regelmäßig synchronisiert</string>
|
||||||
<string name="pref_periodic_refresh_minutes_title"><![CDATA[Sync interval ( >= 15 minutes)]]></string>
|
<string name="pref_periodic_refresh_minutes_title"><![CDATA[Sync interval ( >= 15 minutes)]]></string>
|
||||||
<string name="pref_switch_refresh_when_charging">Only refresh when phone is charging</string>
|
<string name="pref_switch_refresh_when_charging">Nur aktualisieren, wenn das Telefon aufgeladen wird</string>
|
||||||
<string name="loading_notification_title">Loading ...</string>
|
<string name="loading_notification_title">Lädt...</string>
|
||||||
<string name="loading_notification_text">Selfoss is syncing your articles</string>
|
<string name="loading_notification_text">Selfoss synchronisiert Ihre Artikel</string>
|
||||||
<string name="notification_channel_sync">Sync notification</string>
|
<string name="notification_channel_sync">Sync notification</string>
|
||||||
<string name="new_items_channel_sync">New items notification</string>
|
<string name="new_items_channel_sync">New items notification</string>
|
||||||
<string name="new_items_notification_title">New items !</string>
|
<string name="new_items_notification_title">New items !</string>
|
||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">API-Zeitüberschreitung</string>
|
||||||
|
<string name="pref_header_experimental">Experimentell</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d artículos cargados.</string>
|
<string name="new_items_notification_text">%1$d artículos cargados.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notificarme cuando se sincronicen nuevos artículos.</string>
|
<string name="pref_switch_notify_new_items">Notificarme cuando se sincronicen nuevos artículos.</string>
|
||||||
<string name="shortcut_offline">Sin conexión</string>
|
<string name="shortcut_offline">Sin conexión</string>
|
||||||
|
<string name="pref_api_timeout">Se acabó el tiempo de espera de la API</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d nouveaux articles synchronisés.</string>
|
<string name="new_items_notification_text">%1$d nouveaux articles synchronisés.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notification quand des nouveaux articles sont synchronisés.</string>
|
<string name="pref_switch_notify_new_items">Notification quand des nouveaux articles sont synchronisés.</string>
|
||||||
<string name="shortcut_offline">Hors ligne</string>
|
<string name="shortcut_offline">Hors ligne</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d novos elementos cargados.</string>
|
<string name="new_items_notification_text">%1$d novos elementos cargados.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notificarme cando se sincronicen novos elementos.</string>
|
<string name="pref_switch_notify_new_items">Notificarme cando se sincronicen novos elementos.</string>
|
||||||
<string name="shortcut_offline">Sen conexión</string>
|
<string name="shortcut_offline">Sen conexión</string>
|
||||||
|
<string name="pref_api_timeout">Acabouse o tempo de espera da API</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -166,4 +166,6 @@
|
|||||||
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
<string name="new_items_notification_text">%1$d new items loaded.</string>
|
||||||
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
<string name="pref_switch_notify_new_items">Notify on new items synced.</string>
|
||||||
<string name="shortcut_offline">Offline</string>
|
<string name="shortcut_offline">Offline</string>
|
||||||
|
<string name="pref_api_timeout">Api Timeout</string>
|
||||||
|
<string name="pref_header_experimental">Experimental</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
5
app/src/main/res/xml/network_security_config.xml
Normal file
5
app/src/main/res/xml/network_security_config.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<network-security-config>
|
||||||
|
<base-config cleartextTrafficPermitted="true" >
|
||||||
|
</base-config>
|
||||||
|
</network-security-config>
|
9
app/src/main/res/xml/pref_experimental.xml
Normal file
9
app/src/main/res/xml/pref_experimental.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<EditTextPreference
|
||||||
|
android:inputType="number"
|
||||||
|
android:key="api_timeout"
|
||||||
|
android:selectAllOnFocus="true"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:title="@string/pref_api_timeout" />
|
||||||
|
|
||||||
|
</PreferenceScreen>
|
@ -32,4 +32,9 @@
|
|||||||
android:icon="@drawable/ic_info_black_24"
|
android:icon="@drawable/ic_info_black_24"
|
||||||
android:title="@string/pref_header_links"/>
|
android:title="@string/pref_header_links"/>
|
||||||
|
|
||||||
|
<header
|
||||||
|
android:fragment="apps.amine.bou.readerforselfoss.settings.SettingsActivity$ExperimentalPreferenceFragment"
|
||||||
|
android:icon="@drawable/ic_action_lab"
|
||||||
|
android:title="@string/pref_header_experimental"/>
|
||||||
|
|
||||||
</preference-headers>
|
</preference-headers>
|
||||||
|
24
build.sh
24
build.sh
@ -1,15 +1,31 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
git fetch --tags -p
|
||||||
|
|
||||||
BASE_VERSION="1.7"
|
BASE_VERSION="1.7"
|
||||||
TODAYS_VERSION="1"
|
LAST_TAG=$(git tag -l | sort -V | tail -1)
|
||||||
|
|
||||||
VERSION="${BASE_VERSION//./}$(date '+%y%m%j')$TODAYS_VERSION"
|
INITIAL_VERSION="${BASE_VERSION//./}$(date '+%y%m%j')"
|
||||||
|
|
||||||
./version.sh ${VERSION} $1
|
LAST_DAY_VERSION=$(echo $LAST_TAG | sed "s/v${INITIAL_VERSION}//")
|
||||||
|
LAST_DAY_VERSION_LENGTH=$(echo "${#LAST_DAY_VERSION}")
|
||||||
|
|
||||||
|
if [[ "$LAST_DAY_VERSION_LENGTH" == "1" ]]
|
||||||
|
then
|
||||||
|
TODAYS_VERSION=$(( $LAST_DAY_VERSION + 1 ))
|
||||||
|
else
|
||||||
|
TODAYS_VERSION="1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
VERSION="${INITIAL_VERSION}${TODAYS_VERSION}"
|
||||||
|
|
||||||
|
PARAMS_EXCEPT_PUBLISH=$(echo $1 | sed 's/\-\-publish//')
|
||||||
|
|
||||||
|
./version.sh ${VERSION} ${PARAMS_EXCEPT_PUBLISH}
|
||||||
|
|
||||||
if [[ "$@" == *'--publish'* ]]
|
if [[ "$@" == *'--publish'* ]]
|
||||||
then
|
then
|
||||||
./publish-version.sh ${VERSION}
|
./publish-version.sh ${VERSION}
|
||||||
else
|
else
|
||||||
echo "Did not publish. If you wanted to do so, call the script with \"--publish\"."
|
echo "Did not publish. If you wanted to do so, call the script with \"--publish\" or \"--publish-local\"."
|
||||||
fi
|
fi
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# NOTE: This is copy/pasted in jenkins
|
||||||
|
|
||||||
rm -f version.txt
|
rm -f version.txt
|
||||||
printf "versionName=$1-github\nversionCode=$1" >> version.txt
|
printf "versionName=$1-github\nversionCode=$1" >> version.txt
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user