Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
f12e7748c5 | |||
69a2418afc | |||
4924ddd172 | |||
1889b43786 | |||
f2e38a4203 | |||
90a8fac8d4 | |||
04402c5ab9 | |||
f8f710df99 | |||
b8105bb6fb |
66
.travis.yml
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
language: android
|
||||||
|
|
||||||
|
jdk:
|
||||||
|
- oraclejdk8
|
||||||
|
|
||||||
|
android:
|
||||||
|
components:
|
||||||
|
- tools
|
||||||
|
- platform-tools
|
||||||
|
- tools
|
||||||
|
|
||||||
|
- build-tools-26.0.0
|
||||||
|
|
||||||
|
- android-26
|
||||||
|
- android-22
|
||||||
|
|
||||||
|
- extra-google-google_play_services
|
||||||
|
- extra-google-m2repository
|
||||||
|
- extra-android-m2repository
|
||||||
|
- extra-android-support
|
||||||
|
|
||||||
|
- add-on
|
||||||
|
- extra
|
||||||
|
|
||||||
|
- sys-img-armeabi-v7a-android-22
|
||||||
|
|
||||||
|
licenses:
|
||||||
|
- 'android-sdk-license-.+'
|
||||||
|
- 'google-gdk-license-.+'
|
||||||
|
|
||||||
|
before_script:
|
||||||
|
- mkdir app/src/main/res/mipmap-hdpi
|
||||||
|
- convert -size 72x72 xc:white app/src/main/res/mipmap-hdpi/ic_launcher.png
|
||||||
|
- mkdir app/src/main/res/mipmap-mdpi
|
||||||
|
- convert -size 48x48 xc:white app/src/main/res/mipmap-mdpi/ic_launcher.png
|
||||||
|
- mkdir app/src/main/res/mipmap-xhdpi
|
||||||
|
- convert -size 96x96 xc:white app/src/main/res/mipmap-xhdpi/ic_launcher.png
|
||||||
|
- mkdir app/src/main/res/mipmap-xxhdpi
|
||||||
|
- convert -size 192x192 xc:white app/src/main/res/mipmap-xxhdpi/ic_launcher.png
|
||||||
|
- mkdir app/src/main/res/mipmap-xxxhdpi
|
||||||
|
- convert -size 512x512 xc:white app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
|
||||||
|
|
||||||
|
- echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a
|
||||||
|
- emulator -avd test -no-audio -no-window &
|
||||||
|
- android-wait-for-emulator
|
||||||
|
- adb shell input keyevent 82 &
|
||||||
|
- adb shell input tap 650 300 &
|
||||||
|
|
||||||
|
script:
|
||||||
|
- ./gradlew assemble --configure-on-demand --no-daemon -P crashlyticsdemoApikey=$FABRIC_API_KEY -P crashlyticsdemoApisecret=$FABRIC_API_SECRET -P appLoginUrl=$LOGIN_URL -P appLoginUsername=$LOGIN_USER_NAME -P appLoginPassword=$LOGIN_PASSWORD -PdisablePreDex -Pandroid.threadPoolSize=1 -Porg.gradle.parallel=false
|
||||||
|
- ./gradlew connectedAndroidTest --configure-on-demand --no-daemon --stacktrace -P crashlyticsdemoApikey=$FABRIC_API_KEY -P crashlyticsdemoApisecret=$FABRIC_API_SECRET -P appLoginUrl=$LOGIN_URL -P appLoginUsername=$LOGIN_USER_NAME -P appLoginPassword=$LOGIN_PASSWORD -PdisablePreDex -Pandroid.threadPoolSize=1 -Porg.gradle.parallel=false
|
||||||
|
|
||||||
|
|
||||||
|
before_cache:
|
||||||
|
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
|
||||||
|
- rm -fr $HOME/.gradle/caches/*/plugin-resolution/
|
||||||
|
cache:
|
||||||
|
directories:
|
||||||
|
- $HOME/.gradle/caches/
|
||||||
|
- $HOME/.gradle/wrapper/
|
||||||
|
- $HOME/.android/build-cache
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- openssl aes-256-cbc -K $encrypted_cab814aaeabc_key -iv $encrypted_cab814aaeabc_iv
|
||||||
|
-in secrets.tar.enc -out secrets.tar -d
|
||||||
|
- tar xvf secrets.tar
|
20
CHANGELOG.md
@ -1,4 +1,22 @@
|
|||||||
**1.5.1.3**
|
**1.5.1.8**
|
||||||
|
|
||||||
|
- Fixes and libs updates.
|
||||||
|
|
||||||
|
**1.5.1.7**
|
||||||
|
|
||||||
|
- Bug fixes.
|
||||||
|
|
||||||
|
- Code cleaning
|
||||||
|
|
||||||
|
**1.5.1.6**
|
||||||
|
|
||||||
|
- Added back the badges after it was fixed on the library side.
|
||||||
|
|
||||||
|
**1.5.1.5**
|
||||||
|
|
||||||
|
- THEMES !!!! For now, the app has predefined themes. You can ask for new ones until I make them dynamic.
|
||||||
|
|
||||||
|
**1.5.1.3/4**
|
||||||
|
|
||||||
- Fixes introduces by the previous alpha (1.5.1.2)
|
- Fixes introduces by the previous alpha (1.5.1.2)
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
# ReaderForSelfoss
|
# ReaderForSelfoss
|
||||||
|
|
||||||
[](https://circleci.com/gh/aminecmi/ReaderforSelfoss/tree/master)
|
[](https://travis-ci.org/aminecmi/ReaderforSelfoss)
|
||||||
|
|
||||||
|
[](https://gitter.im/amine-bou/ReaderForSelfoss)
|
||||||
|
|
||||||
[](https://codebeat.co/projects/github-com-aminecmi-readerforselfoss-master)
|
[](https://codebeat.co/projects/github-com-aminecmi-readerforselfoss-master)
|
||||||
|
|
||||||
|
@ -24,9 +24,9 @@ android {
|
|||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "apps.amine.bou.readerforselfoss"
|
applicationId "apps.amine.bou.readerforselfoss"
|
||||||
minSdkVersion 16
|
minSdkVersion 16
|
||||||
targetSdkVersion 25
|
targetSdkVersion 26
|
||||||
versionCode 1513
|
versionCode 1518
|
||||||
versionName "1.5.1.3"
|
versionName "1.5.1.8"
|
||||||
|
|
||||||
// Enabling multidex support.
|
// Enabling multidex support.
|
||||||
multiDexEnabled true
|
multiDexEnabled true
|
||||||
@ -80,19 +80,19 @@ 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.0-beta2'
|
compile 'com.android.support:appcompat-v7:26.0.0'
|
||||||
compile 'com.android.support:design:26.0.0-beta2'
|
compile 'com.android.support:design:26.0.0'
|
||||||
compile 'com.android.support:recyclerview-v7:26.0.0-beta2'
|
compile 'com.android.support:recyclerview-v7:26.0.0'
|
||||||
compile 'com.android.support:support-v4:26.0.0-beta2'
|
compile 'com.android.support:support-v4:26.0.0'
|
||||||
compile 'com.android.support:support-vector-drawable:26.0.0-beta2'
|
compile 'com.android.support:support-vector-drawable:26.0.0'
|
||||||
compile 'com.android.support:customtabs:26.0.0-beta2'
|
compile 'com.android.support:customtabs:26.0.0'
|
||||||
compile 'com.android.support:cardview-v7:26.0.0-beta2'
|
compile 'com.android.support:cardview-v7:26.0.0'
|
||||||
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.0.1'
|
compile 'com.google.firebase:firebase-core:11.0.2'
|
||||||
compile 'com.google.firebase:firebase-config:11.0.1'
|
compile 'com.google.firebase:firebase-config:11.0.2'
|
||||||
compile 'com.google.firebase:firebase-invites:11.0.1'
|
compile 'com.google.firebase:firebase-invites:11.0.2'
|
||||||
compile('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') {
|
compile('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') {
|
||||||
transitive = true
|
transitive = true
|
||||||
}
|
}
|
||||||
@ -115,7 +115,7 @@ dependencies {
|
|||||||
compile 'com.burgstaller:okhttp-digest:1.12'
|
compile 'com.burgstaller:okhttp-digest:1.12'
|
||||||
|
|
||||||
// Material-ish things
|
// Material-ish things
|
||||||
compile 'com.roughike:bottom-bar:2.3.1'
|
compile 'com.ashokvarma.android:bottom-navigation-bar:2.0.2'
|
||||||
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'
|
||||||
@ -128,14 +128,17 @@ dependencies {
|
|||||||
compile 'com.github.stkent:amplify:1.5.0'
|
compile 'com.github.stkent:amplify:1.5.0'
|
||||||
|
|
||||||
// For the article reader
|
// For the article reader
|
||||||
compile 'com.klinkerapps:drag-dismiss-activity:1.4.1'
|
compile 'com.klinkerapps:drag-dismiss-activity:1.4.2'
|
||||||
|
|
||||||
// Drawer
|
// Drawer
|
||||||
compile('com.mikepenz:materialdrawer:5.9.3@aar') {
|
compile('com.mikepenz:materialdrawer:5.9.4@aar') {
|
||||||
transitive = true
|
transitive = true
|
||||||
}
|
}
|
||||||
compile 'com.anupcowkur:reservoir:3.1.0'
|
compile 'com.anupcowkur:reservoir:3.1.0'
|
||||||
|
|
||||||
|
// Themes
|
||||||
|
compile 'com.52inc:scoops:1.0.0'
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
apply plugin: 'com.google.gms.google-services'
|
apply plugin: 'com.google.gms.google-services'
|
||||||
|
@ -14,7 +14,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:theme="@style/AppTheme">
|
android:theme="@style/NoBar">
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
android:theme="@style/SplashTheme">
|
android:theme="@style/SplashTheme">
|
||||||
@ -31,8 +31,7 @@
|
|||||||
<activity android:name=".LoginActivity"
|
<activity android:name=".LoginActivity"
|
||||||
android:label="@string/title_activity_login">
|
android:label="@string/title_activity_login">
|
||||||
</activity>
|
</activity>
|
||||||
<activity android:name=".HomeActivity"
|
<activity android:name=".HomeActivity">
|
||||||
android:theme="@style/NoBar">
|
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
android:name=".settings.SettingsActivity"
|
android:name=".settings.SettingsActivity"
|
||||||
|
@ -4,6 +4,7 @@ import android.content.Intent
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.support.constraint.ConstraintLayout
|
import android.support.constraint.ConstraintLayout
|
||||||
import android.support.v7.app.AppCompatActivity
|
import android.support.v7.app.AppCompatActivity
|
||||||
|
import android.support.v7.widget.Toolbar
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.*
|
import android.widget.*
|
||||||
|
|
||||||
@ -15,8 +16,8 @@ import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
|||||||
import apps.amine.bou.readerforselfoss.api.selfoss.Spout
|
import apps.amine.bou.readerforselfoss.api.selfoss.Spout
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse
|
import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse
|
||||||
import apps.amine.bou.readerforselfoss.utils.Config
|
import apps.amine.bou.readerforselfoss.utils.Config
|
||||||
import apps.amine.bou.readerforselfoss.utils.isUrlValid
|
import apps.amine.bou.readerforselfoss.utils.isBaseUrlValid
|
||||||
|
import com.ftinc.scoop.Scoop
|
||||||
|
|
||||||
|
|
||||||
class AddSourceActivity : AppCompatActivity() {
|
class AddSourceActivity : AppCompatActivity() {
|
||||||
@ -25,7 +26,12 @@ class AddSourceActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
Scoop.getInstance().apply(this)
|
||||||
setContentView(R.layout.activity_add_source)
|
setContentView(R.layout.activity_add_source)
|
||||||
|
val toolbar: Toolbar = findViewById(R.id.toolbar)
|
||||||
|
setSupportActionBar(toolbar)
|
||||||
|
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||||
|
supportActionBar?.setDisplayShowHomeEnabled(true)
|
||||||
|
|
||||||
val mProgress: ProgressBar = findViewById(R.id.progress)
|
val mProgress: ProgressBar = findViewById(R.id.progress)
|
||||||
val mForm: ConstraintLayout = findViewById(R.id.formContainer)
|
val mForm: ConstraintLayout = findViewById(R.id.formContainer)
|
||||||
@ -67,7 +73,7 @@ class AddSourceActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
val config = Config(this)
|
val config = Config(this)
|
||||||
|
|
||||||
if (config.baseUrl.isEmpty() || !config.baseUrl.isUrlValid()) {
|
if (config.baseUrl.isEmpty() || !config.baseUrl.isBaseUrlValid()) {
|
||||||
mustLoginToAddSource()
|
mustLoginToAddSource()
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
@ -43,8 +43,6 @@ import com.mikepenz.materialdrawer.holder.BadgeStyle
|
|||||||
import com.mikepenz.materialdrawer.model.DividerDrawerItem
|
import com.mikepenz.materialdrawer.model.DividerDrawerItem
|
||||||
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem
|
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem
|
||||||
import com.mikepenz.materialdrawer.model.SecondaryDrawerItem
|
import com.mikepenz.materialdrawer.model.SecondaryDrawerItem
|
||||||
import com.roughike.bottombar.BottomBar
|
|
||||||
import com.roughike.bottombar.BottomBarTab
|
|
||||||
import retrofit2.Call
|
import retrofit2.Call
|
||||||
import retrofit2.Callback
|
import retrofit2.Callback
|
||||||
import retrofit2.Response
|
import retrofit2.Response
|
||||||
@ -53,13 +51,19 @@ import apps.amine.bou.readerforselfoss.adapters.ItemCardAdapter
|
|||||||
import apps.amine.bou.readerforselfoss.adapters.ItemListAdapter
|
import apps.amine.bou.readerforselfoss.adapters.ItemListAdapter
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.*
|
import apps.amine.bou.readerforselfoss.api.selfoss.*
|
||||||
import apps.amine.bou.readerforselfoss.settings.SettingsActivity
|
import apps.amine.bou.readerforselfoss.settings.SettingsActivity
|
||||||
|
import apps.amine.bou.readerforselfoss.themes.AppColors
|
||||||
import apps.amine.bou.readerforselfoss.utils.Config
|
import apps.amine.bou.readerforselfoss.utils.Config
|
||||||
|
import apps.amine.bou.readerforselfoss.utils.bottombar.maybeShow
|
||||||
|
import apps.amine.bou.readerforselfoss.utils.bottombar.removeBadge
|
||||||
import apps.amine.bou.readerforselfoss.utils.checkAndDisplayStoreApk
|
import apps.amine.bou.readerforselfoss.utils.checkAndDisplayStoreApk
|
||||||
import apps.amine.bou.readerforselfoss.utils.checkApkVersion
|
import apps.amine.bou.readerforselfoss.utils.checkApkVersion
|
||||||
import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
||||||
import apps.amine.bou.readerforselfoss.utils.drawer.CustomUrlPrimaryDrawerItem
|
import apps.amine.bou.readerforselfoss.utils.drawer.CustomUrlPrimaryDrawerItem
|
||||||
import apps.amine.bou.readerforselfoss.utils.longHash
|
import apps.amine.bou.readerforselfoss.utils.longHash
|
||||||
|
import com.ashokvarma.bottomnavigation.BottomNavigationBar
|
||||||
|
import com.ashokvarma.bottomnavigation.BottomNavigationItem
|
||||||
|
import com.ashokvarma.bottomnavigation.TextBadgeItem
|
||||||
|
import com.ftinc.scoop.Scoop
|
||||||
|
|
||||||
|
|
||||||
class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
||||||
@ -88,20 +92,21 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
private var maybeSearchFilter: String? = null
|
private var maybeSearchFilter: String? = null
|
||||||
|
|
||||||
private lateinit var emptyText: TextView
|
private lateinit var emptyText: TextView
|
||||||
private lateinit var mRecyclerView: RecyclerView
|
private lateinit var recyclerView: RecyclerView
|
||||||
private lateinit var mBottomBar: BottomBar
|
private lateinit var bottomBar: BottomNavigationBar
|
||||||
private lateinit var mCoordinatorLayout: CoordinatorLayout
|
private lateinit var coordinatorLayout: CoordinatorLayout
|
||||||
private lateinit var mSwipeRefreshLayout: SwipeRefreshLayout
|
private lateinit var swipeRefreshLayout: SwipeRefreshLayout
|
||||||
private lateinit var tabNew: BottomBarTab
|
private lateinit var tabNewBadge: TextBadgeItem
|
||||||
private lateinit var tabArchive: BottomBarTab
|
private lateinit var tabArchiveBadge: TextBadgeItem
|
||||||
private lateinit var tabStarred: BottomBarTab
|
private lateinit var tabStarredBadge: TextBadgeItem
|
||||||
private lateinit var toolbar: Toolbar
|
private lateinit var toolbar: Toolbar
|
||||||
private lateinit var drawer: Drawer
|
private lateinit var drawer: Drawer
|
||||||
private lateinit var api: SelfossApi
|
private lateinit var api: SelfossApi
|
||||||
private lateinit var mCustomTabActivityHelper: CustomTabActivityHelper
|
private lateinit var customTabActivityHelper: CustomTabActivityHelper
|
||||||
private lateinit var editor: SharedPreferences.Editor
|
private lateinit var editor: SharedPreferences.Editor
|
||||||
private lateinit var sharedPref: SharedPreferences
|
private lateinit var sharedPref: SharedPreferences
|
||||||
private lateinit var mFirebaseRemoteConfig: FirebaseRemoteConfig
|
private lateinit var firebaseRemoteConfig: FirebaseRemoteConfig
|
||||||
|
private lateinit var appColors: AppColors
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -111,11 +116,14 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
mCustomTabActivityHelper.bindCustomTabsService(this)
|
customTabActivityHelper.bindCustomTabsService(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
Scoop.getInstance().apply(this)
|
||||||
|
|
||||||
setContentView(R.layout.activity_home)
|
setContentView(R.layout.activity_home)
|
||||||
|
|
||||||
toolbar = findViewById(R.id.toolbar)
|
toolbar = findViewById(R.id.toolbar)
|
||||||
@ -126,48 +134,33 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
Amplify.getSharedInstance().promptIfReady(promptView)
|
Amplify.getSharedInstance().promptIfReady(promptView)
|
||||||
}
|
}
|
||||||
|
|
||||||
mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance()
|
firebaseRemoteConfig = FirebaseRemoteConfig.getInstance()
|
||||||
mFirebaseRemoteConfig.setDefaults(R.xml.default_remote_config)
|
firebaseRemoteConfig.setDefaults(R.xml.default_remote_config)
|
||||||
|
|
||||||
mCustomTabActivityHelper = CustomTabActivityHelper()
|
customTabActivityHelper = CustomTabActivityHelper()
|
||||||
|
|
||||||
api = SelfossApi(this, this@HomeActivity)
|
api = SelfossApi(this, this@HomeActivity)
|
||||||
items = ArrayList()
|
items = ArrayList()
|
||||||
|
|
||||||
mBottomBar = findViewById(R.id.bottomBar)
|
appColors = AppColors(this@HomeActivity)
|
||||||
|
|
||||||
|
handleBottomBar()
|
||||||
|
|
||||||
handleDrawer()
|
handleDrawer()
|
||||||
|
|
||||||
// TODO: clean this hack
|
coordinatorLayout = findViewById(R.id.coordLayout)
|
||||||
val listenerAlreadySet = booleanArrayOf(false)
|
swipeRefreshLayout = findViewById(R.id.swipeRefreshLayout)
|
||||||
mBottomBar.setOnTabSelectListener { tabId ->
|
recyclerView = findViewById(R.id.my_recycler_view)
|
||||||
if (listenerAlreadySet[0]) {
|
|
||||||
if (tabId == R.id.tab_new) {
|
|
||||||
getUnRead()
|
|
||||||
} else if (tabId == R.id.tab_archive) {
|
|
||||||
getRead()
|
|
||||||
} else if (tabId == R.id.tab_fav) {
|
|
||||||
getStarred()
|
|
||||||
}
|
|
||||||
getElementsAccordingToTab()
|
|
||||||
} else {
|
|
||||||
listenerAlreadySet[0] = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mCoordinatorLayout = findViewById(R.id.coordLayout)
|
|
||||||
mSwipeRefreshLayout = findViewById(R.id.swipeRefreshLayout)
|
|
||||||
mRecyclerView = findViewById(R.id.my_recycler_view)
|
|
||||||
|
|
||||||
emptyText = findViewById(R.id.emptyText)
|
emptyText = findViewById(R.id.emptyText)
|
||||||
|
|
||||||
reloadLayoutManager()
|
reloadLayoutManager()
|
||||||
|
|
||||||
mSwipeRefreshLayout.setColorSchemeResources(
|
swipeRefreshLayout.setColorSchemeResources(
|
||||||
R.color.refresh_progress_1,
|
R.color.refresh_progress_1,
|
||||||
R.color.refresh_progress_2,
|
R.color.refresh_progress_2,
|
||||||
R.color.refresh_progress_3)
|
R.color.refresh_progress_3)
|
||||||
mSwipeRefreshLayout.setOnRefreshListener {
|
swipeRefreshLayout.setOnRefreshListener {
|
||||||
handleDrawerItems()
|
handleDrawerItems()
|
||||||
getElementsAccordingToTab()
|
getElementsAccordingToTab()
|
||||||
}
|
}
|
||||||
@ -188,25 +181,74 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
val position = items.indexOf(i)
|
val position = items.indexOf(i)
|
||||||
|
|
||||||
if (shouldBeCardView) {
|
if (shouldBeCardView) {
|
||||||
(mRecyclerView.adapter as ItemCardAdapter).removeItemAtIndex(position)
|
(recyclerView.adapter as ItemCardAdapter).removeItemAtIndex(position)
|
||||||
} else {
|
} else {
|
||||||
(mRecyclerView.adapter as ItemListAdapter).removeItemAtIndex(position)
|
(recyclerView.adapter as ItemListAdapter).removeItemAtIndex(position)
|
||||||
}
|
}
|
||||||
tabNew.setBadgeCount(items.size - 1)
|
if (items.size > 0)
|
||||||
|
tabNewBadge.setText("${items.size}").maybeShow()
|
||||||
mayBeEmpty()
|
else
|
||||||
|
tabNewBadge.hide()
|
||||||
|
|
||||||
} catch (e: IndexOutOfBoundsException) {}
|
} catch (e: IndexOutOfBoundsException) {}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemTouchHelper(simpleItemTouchCallback).attachToRecyclerView(mRecyclerView)
|
ItemTouchHelper(simpleItemTouchCallback).attachToRecyclerView(recyclerView)
|
||||||
|
|
||||||
this@HomeActivity.checkAndDisplayStoreApk()
|
this@HomeActivity.checkAndDisplayStoreApk()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun handleBottomBar() {
|
||||||
|
|
||||||
|
bottomBar = findViewById(R.id.bottomBar)
|
||||||
|
|
||||||
|
tabNewBadge = TextBadgeItem()
|
||||||
|
.setText("")
|
||||||
|
.setHideOnSelect(false).hide(false)
|
||||||
|
.setBackgroundColor(appColors.primary)
|
||||||
|
tabArchiveBadge = TextBadgeItem()
|
||||||
|
.setText("")
|
||||||
|
.setHideOnSelect(false).hide(false)
|
||||||
|
.setBackgroundColor(appColors.primary)
|
||||||
|
tabStarredBadge = TextBadgeItem()
|
||||||
|
.setText("")
|
||||||
|
.setHideOnSelect(false).hide(false)
|
||||||
|
.setBackgroundColor(appColors.primary)
|
||||||
|
|
||||||
|
val tabNew =
|
||||||
|
BottomNavigationItem(
|
||||||
|
R.drawable.ic_fiber_new_black_24dp,
|
||||||
|
getString(R.string.tab_new)
|
||||||
|
).setActiveColor(appColors.accent)
|
||||||
|
.setBadgeItem(tabNewBadge)
|
||||||
|
val tabArchive =
|
||||||
|
BottomNavigationItem(
|
||||||
|
R.drawable.ic_archive_black_24dp,
|
||||||
|
getString(R.string.tab_read)
|
||||||
|
).setActiveColor(appColors.dark)
|
||||||
|
.setBadgeItem(tabArchiveBadge)
|
||||||
|
val tabStarred =
|
||||||
|
BottomNavigationItem(
|
||||||
|
R.drawable.ic_favorite_black_24dp,
|
||||||
|
getString(R.string.tab_favs)
|
||||||
|
).setActiveColorResource(R.color.pink)
|
||||||
|
.setBadgeItem(tabStarredBadge)
|
||||||
|
|
||||||
|
bottomBar
|
||||||
|
.addItem(tabNew)
|
||||||
|
.addItem(tabArchive)
|
||||||
|
.addItem(tabStarred)
|
||||||
|
.setFirstSelectedPosition(0)
|
||||||
|
.initialise()
|
||||||
|
|
||||||
|
bottomBar.setMode(BottomNavigationBar.MODE_SHIFTING)
|
||||||
|
bottomBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
|
|
||||||
@ -218,22 +260,17 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
editor = settings.edit()
|
editor = settings.edit()
|
||||||
|
|
||||||
if (BuildConfig.GITHUB_VERSION) {
|
if (BuildConfig.GITHUB_VERSION) {
|
||||||
this@HomeActivity.checkApkVersion(settings, editor, mFirebaseRemoteConfig)
|
this@HomeActivity.checkApkVersion(settings, editor, firebaseRemoteConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
handleSharedPrefs()
|
handleSharedPrefs()
|
||||||
|
|
||||||
tabNew = mBottomBar.getTabWithId(R.id.tab_new)
|
|
||||||
tabArchive = mBottomBar.getTabWithId(R.id.tab_archive)
|
|
||||||
tabStarred = mBottomBar.getTabWithId(R.id.tab_fav)
|
|
||||||
|
|
||||||
|
|
||||||
getElementsAccordingToTab()
|
getElementsAccordingToTab()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
super.onStop()
|
super.onStop()
|
||||||
mCustomTabActivityHelper.unbindCustomTabsService(this)
|
customTabActivityHelper.unbindCustomTabsService(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -258,15 +295,15 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
.withShowDrawerOnFirstLaunch(true)
|
.withShowDrawerOnFirstLaunch(true)
|
||||||
.withOnDrawerListener(object: Drawer.OnDrawerListener {
|
.withOnDrawerListener(object: Drawer.OnDrawerListener {
|
||||||
override fun onDrawerSlide(v: View?, p1: Float) {
|
override fun onDrawerSlide(v: View?, p1: Float) {
|
||||||
mBottomBar.alpha = (1 - p1)
|
bottomBar.alpha = (1 - p1)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDrawerClosed(v: View?) {
|
override fun onDrawerClosed(v: View?) {
|
||||||
mBottomBar.shySettings.showBar()
|
bottomBar.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDrawerOpened(v: View?) {
|
override fun onDrawerOpened(v: View?) {
|
||||||
mBottomBar.shySettings.hideBar()
|
bottomBar.hide()
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
@ -277,9 +314,15 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
.withName(R.string.action_about)
|
.withName(R.string.action_about)
|
||||||
.withSelectable(false)
|
.withSelectable(false)
|
||||||
.withIcon(R.drawable.ic_info_outline)
|
.withIcon(R.drawable.ic_info_outline)
|
||||||
|
.withIconTintingEnabled(true)
|
||||||
.withOnDrawerItemClickListener { _, _, _ ->
|
.withOnDrawerItemClickListener { _, _, _ ->
|
||||||
LibsBuilder()
|
LibsBuilder()
|
||||||
.withActivityStyle(Libs.ActivityStyle.LIGHT_DARK_TOOLBAR)
|
.withActivityStyle(
|
||||||
|
if (appColors.isDarkTheme)
|
||||||
|
Libs.ActivityStyle.LIGHT_DARK_TOOLBAR
|
||||||
|
else
|
||||||
|
Libs.ActivityStyle.DARK
|
||||||
|
)
|
||||||
.withAboutIconShown(true)
|
.withAboutIconShown(true)
|
||||||
.withAboutVersionShown(true)
|
.withAboutVersionShown(true)
|
||||||
.start(this@HomeActivity)
|
.start(this@HomeActivity)
|
||||||
@ -289,6 +332,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
PrimaryDrawerItem()
|
PrimaryDrawerItem()
|
||||||
.withName(R.string.title_activity_settings)
|
.withName(R.string.title_activity_settings)
|
||||||
.withIcon(R.drawable.ic_settings)
|
.withIcon(R.drawable.ic_settings)
|
||||||
|
.withIconTintingEnabled(true)
|
||||||
.withOnDrawerItemClickListener { _, _, _ ->
|
.withOnDrawerItemClickListener { _, _, _ ->
|
||||||
startActivityForResult(
|
startActivityForResult(
|
||||||
Intent(
|
Intent(
|
||||||
@ -328,7 +372,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
.withBadge("${tag.unread}")
|
.withBadge("${tag.unread}")
|
||||||
.withBadgeStyle(
|
.withBadgeStyle(
|
||||||
BadgeStyle().withTextColor(Color.WHITE)
|
BadgeStyle().withTextColor(Color.WHITE)
|
||||||
.withColorRes(R.color.colorAccent)
|
.withColor(appColors.accent)
|
||||||
)
|
)
|
||||||
.withOnDrawerItemClickListener { _, _, _ ->
|
.withOnDrawerItemClickListener { _, _, _ ->
|
||||||
maybeTagFilter = tag
|
maybeTagFilter = tag
|
||||||
@ -484,10 +528,13 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
mLayoutManager = GridLayoutManager(this, calculateNoOfColumns())
|
mLayoutManager = GridLayoutManager(this, calculateNoOfColumns())
|
||||||
}
|
}
|
||||||
|
|
||||||
mRecyclerView.layoutManager = mLayoutManager
|
recyclerView.layoutManager = mLayoutManager
|
||||||
mRecyclerView.setHasFixedSize(true)
|
recyclerView.setHasFixedSize(true)
|
||||||
|
|
||||||
mBottomBar.setOnTabReselectListener {
|
bottomBar.setTabSelectedListener(object: BottomNavigationBar.OnTabSelectedListener {
|
||||||
|
override fun onTabUnselected(position: Int) = Unit
|
||||||
|
|
||||||
|
override fun onTabReselected(position: Int) =
|
||||||
if (shouldBeCardView) {
|
if (shouldBeCardView) {
|
||||||
if ((mLayoutManager as StaggeredGridLayoutManager).findFirstCompletelyVisibleItemPositions(null)[0] == 0) {
|
if ((mLayoutManager as StaggeredGridLayoutManager).findFirstCompletelyVisibleItemPositions(null)[0] == 0) {
|
||||||
getElementsAccordingToTab()
|
getElementsAccordingToTab()
|
||||||
@ -501,16 +548,25 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
mLayoutManager.scrollToPositionWithOffset(0, 0)
|
mLayoutManager.scrollToPositionWithOffset(0, 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onTabSelected(position: Int) =
|
||||||
|
when(position) {
|
||||||
|
0 -> getUnRead()
|
||||||
|
1 -> getRead()
|
||||||
|
2 -> getStarred()
|
||||||
|
else -> Unit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun mayBeEmpty() =
|
fun mayBeEmpty() =
|
||||||
if (items.isEmpty()) {
|
if (items.isEmpty()) {
|
||||||
emptyText.visibility = View.VISIBLE
|
emptyText.visibility = View.VISIBLE
|
||||||
mRecyclerView.visibility = View.GONE
|
recyclerView.visibility = View.GONE
|
||||||
} else {
|
} else {
|
||||||
emptyText.visibility = View.GONE
|
emptyText.visibility = View.GONE
|
||||||
mRecyclerView.visibility = View.VISIBLE
|
recyclerView.visibility = View.VISIBLE
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getElementsAccordingToTab() =
|
private fun getElementsAccordingToTab() =
|
||||||
@ -534,11 +590,11 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
if (didUpdate)
|
if (didUpdate)
|
||||||
handleListResult()
|
handleListResult()
|
||||||
mayBeEmpty()
|
mayBeEmpty()
|
||||||
mSwipeRefreshLayout.isRefreshing = false
|
swipeRefreshLayout.isRefreshing = false
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mSwipeRefreshLayout.isRefreshing)
|
if (!swipeRefreshLayout.isRefreshing)
|
||||||
mSwipeRefreshLayout.post { mSwipeRefreshLayout.isRefreshing = true }
|
swipeRefreshLayout.post { swipeRefreshLayout.isRefreshing = true }
|
||||||
|
|
||||||
call(maybeTagFilter?.tag, maybeSourceFilter?.id?.toLong(), maybeSearchFilter)
|
call(maybeTagFilter?.tag, maybeSourceFilter?.id?.toLong(), maybeSearchFilter)
|
||||||
.enqueue(object : Callback<List<Item>> {
|
.enqueue(object : Callback<List<Item>> {
|
||||||
@ -547,7 +603,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onFailure(call: Call<List<Item>>, t: Throwable) {
|
override fun onFailure(call: Call<List<Item>>, t: Throwable) {
|
||||||
mSwipeRefreshLayout.isRefreshing = false
|
swipeRefreshLayout.isRefreshing = false
|
||||||
Toast.makeText(this@HomeActivity, toastMessage, Toast.LENGTH_SHORT).show()
|
Toast.makeText(this@HomeActivity, toastMessage, Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -578,22 +634,23 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
this,
|
this,
|
||||||
items,
|
items,
|
||||||
api,
|
api,
|
||||||
mCustomTabActivityHelper,
|
customTabActivityHelper,
|
||||||
internalBrowser,
|
internalBrowser,
|
||||||
articleViewer,
|
articleViewer,
|
||||||
fullHeightCards)
|
fullHeightCards,
|
||||||
|
appColors)
|
||||||
} else {
|
} else {
|
||||||
mAdapter =
|
mAdapter =
|
||||||
ItemListAdapter(
|
ItemListAdapter(
|
||||||
this,
|
this,
|
||||||
items,
|
items,
|
||||||
api,
|
api,
|
||||||
mCustomTabActivityHelper,
|
customTabActivityHelper,
|
||||||
clickBehavior,
|
clickBehavior,
|
||||||
internalBrowser,
|
internalBrowser,
|
||||||
articleViewer)
|
articleViewer)
|
||||||
}
|
}
|
||||||
mRecyclerView.adapter = mAdapter
|
recyclerView.adapter = mAdapter
|
||||||
mAdapter.notifyDataSetChanged()
|
mAdapter.notifyDataSetChanged()
|
||||||
|
|
||||||
reloadBadges()
|
reloadBadges()
|
||||||
@ -604,13 +661,20 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
api.stats.enqueue(object : Callback<Stats> {
|
api.stats.enqueue(object : Callback<Stats> {
|
||||||
override fun onResponse(call: Call<Stats>, response: Response<Stats>) {
|
override fun onResponse(call: Call<Stats>, response: Response<Stats>) {
|
||||||
if (response.body() != null) {
|
if (response.body() != null) {
|
||||||
tabNew.setBadgeCount(response.body()!!.unread)
|
if (displayUnreadCount)
|
||||||
|
tabNewBadge
|
||||||
|
.setText(response.body()!!.unread.toString())
|
||||||
|
.maybeShow()
|
||||||
if (displayAllCount) {
|
if (displayAllCount) {
|
||||||
tabArchive.setBadgeCount(response.body()!!.total)
|
tabArchiveBadge
|
||||||
tabStarred.setBadgeCount(response.body()!!.starred)
|
.setText(response.body()!!.total.toString())
|
||||||
|
.maybeShow()
|
||||||
|
tabStarredBadge
|
||||||
|
.setText(response.body()!!.starred.toString())
|
||||||
|
.maybeShow()
|
||||||
} else {
|
} else {
|
||||||
tabArchive.removeBadge()
|
tabArchiveBadge.removeBadge()
|
||||||
tabStarred.removeBadge()
|
tabStarredBadge.removeBadge()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -618,9 +682,9 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
override fun onFailure(call: Call<Stats>, t: Throwable) {}
|
override fun onFailure(call: Call<Stats>, t: Throwable) {}
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
tabNew.removeBadge()
|
tabNewBadge.removeBadge()
|
||||||
tabArchive.removeBadge()
|
tabArchiveBadge.removeBadge()
|
||||||
tabStarred.removeBadge()
|
tabStarredBadge.removeBadge()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -692,7 +756,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
}
|
}
|
||||||
R.id.readAll -> {
|
R.id.readAll -> {
|
||||||
if (elementsShown == UNREAD_SHOWN) {
|
if (elementsShown == UNREAD_SHOWN) {
|
||||||
mSwipeRefreshLayout.isRefreshing = false
|
swipeRefreshLayout.isRefreshing = false
|
||||||
val ids = items.map { it.id }
|
val ids = items.map { it.id }
|
||||||
|
|
||||||
api.readAll(ids).enqueue(object : Callback<SuccessResponse> {
|
api.readAll(ids).enqueue(object : Callback<SuccessResponse> {
|
||||||
@ -702,12 +766,12 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
else
|
else
|
||||||
Toast.makeText(this@HomeActivity, R.string.all_posts_not_read, Toast.LENGTH_SHORT).show()
|
Toast.makeText(this@HomeActivity, R.string.all_posts_not_read, Toast.LENGTH_SHORT).show()
|
||||||
|
|
||||||
mSwipeRefreshLayout.isRefreshing = false
|
swipeRefreshLayout.isRefreshing = false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onFailure(call: Call<SuccessResponse>, t: Throwable) {
|
override fun onFailure(call: Call<SuccessResponse>, t: Throwable) {
|
||||||
Toast.makeText(this@HomeActivity, R.string.all_posts_not_read, Toast.LENGTH_SHORT).show()
|
Toast.makeText(this@HomeActivity, R.string.all_posts_not_read, Toast.LENGTH_SHORT).show()
|
||||||
mSwipeRefreshLayout.isRefreshing = false
|
swipeRefreshLayout.isRefreshing = false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
items = ArrayList()
|
items = ArrayList()
|
||||||
|
@ -9,6 +9,7 @@ import android.os.Bundle
|
|||||||
import android.support.design.widget.TextInputLayout
|
import android.support.design.widget.TextInputLayout
|
||||||
import android.support.v7.app.AlertDialog
|
import android.support.v7.app.AlertDialog
|
||||||
import android.support.v7.app.AppCompatActivity
|
import android.support.v7.app.AppCompatActivity
|
||||||
|
import android.support.v7.widget.Toolbar
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
@ -30,8 +31,8 @@ import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
|||||||
import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse
|
import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse
|
||||||
import apps.amine.bou.readerforselfoss.utils.Config
|
import apps.amine.bou.readerforselfoss.utils.Config
|
||||||
import apps.amine.bou.readerforselfoss.utils.checkAndDisplayStoreApk
|
import apps.amine.bou.readerforselfoss.utils.checkAndDisplayStoreApk
|
||||||
import apps.amine.bou.readerforselfoss.utils.isUrlValid
|
import apps.amine.bou.readerforselfoss.utils.isBaseUrlValid
|
||||||
|
import com.ftinc.scoop.Scoop
|
||||||
|
|
||||||
|
|
||||||
class LoginActivity : AppCompatActivity() {
|
class LoginActivity : AppCompatActivity() {
|
||||||
@ -54,8 +55,12 @@ class LoginActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
Scoop.getInstance().apply(this)
|
||||||
setContentView(R.layout.activity_login)
|
setContentView(R.layout.activity_login)
|
||||||
|
|
||||||
|
val toolbar: Toolbar = findViewById(R.id.toolbar)
|
||||||
|
setSupportActionBar(toolbar)
|
||||||
|
|
||||||
if (intent.getBooleanExtra("baseUrlFail", false)) {
|
if (intent.getBooleanExtra("baseUrlFail", false)) {
|
||||||
val alertDialog = AlertDialog.Builder(this).create()
|
val alertDialog = AlertDialog.Builder(this).create()
|
||||||
alertDialog.setTitle(getString(R.string.warning_wrong_url))
|
alertDialog.setTitle(getString(R.string.warning_wrong_url))
|
||||||
@ -144,7 +149,7 @@ class LoginActivity : AppCompatActivity() {
|
|||||||
var cancel = false
|
var cancel = false
|
||||||
var focusView: View? = null
|
var focusView: View? = null
|
||||||
|
|
||||||
if (!url.isUrlValid()) {
|
if (!url.isBaseUrlValid()) {
|
||||||
mUrlView.error = getString(R.string.login_url_problem)
|
mUrlView.error = getString(R.string.login_url_problem)
|
||||||
focusView = mUrlView
|
focusView = mUrlView
|
||||||
cancel = true
|
cancel = true
|
||||||
|
@ -3,11 +3,13 @@ package apps.amine.bou.readerforselfoss
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.preference.PreferenceManager
|
||||||
import android.support.multidex.MultiDexApplication
|
import android.support.multidex.MultiDexApplication
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import com.anupcowkur.reservoir.Reservoir
|
import com.anupcowkur.reservoir.Reservoir
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import com.crashlytics.android.Crashlytics
|
import com.crashlytics.android.Crashlytics
|
||||||
|
import com.ftinc.scoop.Scoop
|
||||||
import com.github.stkent.amplify.tracking.Amplify
|
import com.github.stkent.amplify.tracking.Amplify
|
||||||
import com.mikepenz.materialdrawer.util.AbstractDrawerImageLoader
|
import com.mikepenz.materialdrawer.util.AbstractDrawerImageLoader
|
||||||
import com.mikepenz.materialdrawer.util.DrawerImageLoader
|
import com.mikepenz.materialdrawer.util.DrawerImageLoader
|
||||||
@ -21,17 +23,31 @@ class MyApp : MultiDexApplication() {
|
|||||||
if (!BuildConfig.DEBUG)
|
if (!BuildConfig.DEBUG)
|
||||||
Fabric.with(this, Crashlytics())
|
Fabric.with(this, Crashlytics())
|
||||||
|
|
||||||
|
initAmplify()
|
||||||
|
|
||||||
|
initCache()
|
||||||
|
|
||||||
|
initDrawerImageLoader()
|
||||||
|
|
||||||
|
initTheme()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun initAmplify() {
|
||||||
Amplify.initSharedInstance(this)
|
Amplify.initSharedInstance(this)
|
||||||
.setFeedbackEmailAddress(getString(R.string.feedback_email))
|
.setFeedbackEmailAddress(getString(R.string.feedback_email))
|
||||||
.setAlwaysShow(BuildConfig.DEBUG)
|
|
||||||
.applyAllDefaultRules()
|
.applyAllDefaultRules()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun initCache() {
|
||||||
try {
|
try {
|
||||||
Reservoir.init(this, 8192) //in bytes
|
Reservoir.init(this, 8192) //in bytes
|
||||||
} catch (e: IOException) {
|
} catch (e: IOException) {
|
||||||
//failure
|
//failure
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun initDrawerImageLoader() {
|
||||||
DrawerImageLoader.init(object : AbstractDrawerImageLoader() {
|
DrawerImageLoader.init(object : AbstractDrawerImageLoader() {
|
||||||
override fun set(imageView: ImageView?, uri: Uri?, placeholder: Drawable?, tag: String?) {
|
override fun set(imageView: ImageView?, uri: Uri?, placeholder: Drawable?, tag: String?) {
|
||||||
Glide.with(imageView?.context).load(uri).placeholder(placeholder).into(imageView)
|
Glide.with(imageView?.context).load(uri).placeholder(placeholder).into(imageView)
|
||||||
@ -42,8 +58,28 @@ class MyApp : MultiDexApplication() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun placeholder(ctx: Context?, tag: String?): Drawable {
|
override fun placeholder(ctx: Context?, tag: String?): Drawable {
|
||||||
return applicationContext.resources.getDrawable(R.mipmap.ic_launcher)
|
return baseContext.resources.getDrawable(R.mipmap.ic_launcher)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun initTheme() {
|
||||||
|
Scoop.waffleCone()
|
||||||
|
.addFlavor(getString(R.string.default_theme), R.style.NoBar, true)
|
||||||
|
.addFlavor(getString(R.string.default_dark_theme), R.style.NoBarDark)
|
||||||
|
.addFlavor(getString(R.string.teal_orange_theme), R.style.NoBarTealOrange)
|
||||||
|
.addFlavor(getString(R.string.teal_orange_dark_theme), R.style.NoBarTealOrangeDark)
|
||||||
|
.addFlavor(getString(R.string.cyan_pink_theme), R.style.NoBarCyanPink)
|
||||||
|
.addFlavor(getString(R.string.cyan_pink_dark_theme), R.style.NoBarCyanPinkDark)
|
||||||
|
.addFlavor(getString(R.string.grey_orange_theme), R.style.NoBarGreyOrange)
|
||||||
|
.addFlavor(getString(R.string.grey_orange_dark_theme), R.style.NoBarGreyOrangeDark)
|
||||||
|
.addFlavor(getString(R.string.blue_amber_theme), R.style.NoBarBlueAmber)
|
||||||
|
.addFlavor(getString(R.string.blue_amber_dark_theme), R.style.NoBarBlueAmberDark)
|
||||||
|
.addFlavor(getString(R.string.indigo_pink_theme), R.style.NoBarIndigoPink)
|
||||||
|
.addFlavor(getString(R.string.indigo_pink_dark_theme), R.style.NoBarIndigoPinkDark)
|
||||||
|
.addFlavor(getString(R.string.red_teal_theme), R.style.NoBarRedTeal)
|
||||||
|
.addFlavor(getString(R.string.red_teal_dark_theme), R.style.NoBarRedTealDark)
|
||||||
|
.setSharedPreferences(PreferenceManager.getDefaultSharedPreferences(this))
|
||||||
|
.initialize()
|
||||||
|
}
|
||||||
}
|
}
|
@ -22,7 +22,9 @@ import apps.amine.bou.readerforselfoss.api.mercury.MercuryApi
|
|||||||
import apps.amine.bou.readerforselfoss.api.mercury.ParsedContent
|
import apps.amine.bou.readerforselfoss.api.mercury.ParsedContent
|
||||||
import apps.amine.bou.readerforselfoss.utils.buildCustomTabsIntent
|
import apps.amine.bou.readerforselfoss.utils.buildCustomTabsIntent
|
||||||
import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
||||||
|
import apps.amine.bou.readerforselfoss.utils.openItemUrl
|
||||||
import apps.amine.bou.readerforselfoss.utils.shareLink
|
import apps.amine.bou.readerforselfoss.utils.shareLink
|
||||||
|
import com.ftinc.scoop.Scoop
|
||||||
|
|
||||||
|
|
||||||
class ReaderActivity : DragDismissActivity() {
|
class ReaderActivity : DragDismissActivity() {
|
||||||
@ -39,6 +41,7 @@ class ReaderActivity : DragDismissActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateContent(inflater: LayoutInflater, parent: ViewGroup, savedInstanceState: Bundle?): View {
|
override fun onCreateContent(inflater: LayoutInflater, parent: ViewGroup, savedInstanceState: Bundle?): View {
|
||||||
|
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()
|
||||||
|
|
||||||
@ -71,7 +74,7 @@ class ReaderActivity : DragDismissActivity() {
|
|||||||
}
|
}
|
||||||
if (response.body()!!.lead_image_url != null && !response.body()!!.lead_image_url.isEmpty())
|
if (response.body()!!.lead_image_url != null && !response.body()!!.lead_image_url.isEmpty())
|
||||||
Glide
|
Glide
|
||||||
.with(applicationContext)
|
.with(baseContext)
|
||||||
.load(response.body()!!.lead_image_url)
|
.load(response.body()!!.lead_image_url)
|
||||||
.asBitmap()
|
.asBitmap()
|
||||||
.fitCenter()
|
.fitCenter()
|
||||||
@ -82,10 +85,12 @@ class ReaderActivity : DragDismissActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
browserBtn.setOnClickListener {
|
browserBtn.setOnClickListener {
|
||||||
val intent = Intent(Intent.ACTION_VIEW)
|
this@ReaderActivity.openItemUrl(
|
||||||
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
response.body()!!.url,
|
||||||
intent.data = Uri.parse(response.body()!!.url)
|
customTabsIntent,
|
||||||
startActivity(intent)
|
false,
|
||||||
|
false,
|
||||||
|
this@ReaderActivity)
|
||||||
}
|
}
|
||||||
|
|
||||||
hideProgressBar()
|
hideProgressBar()
|
||||||
@ -95,12 +100,13 @@ class ReaderActivity : DragDismissActivity() {
|
|||||||
override fun onFailure(call: Call<ParsedContent>, t: Throwable) = openInBrowserAfterFailing()
|
override fun onFailure(call: Call<ParsedContent>, t: Throwable) = openInBrowserAfterFailing()
|
||||||
|
|
||||||
private fun openInBrowserAfterFailing() {
|
private fun openInBrowserAfterFailing() {
|
||||||
CustomTabActivityHelper.openCustomTab(this@ReaderActivity, customTabsIntent, Uri.parse(url)
|
this@ReaderActivity.openItemUrl(
|
||||||
) { _, uri ->
|
url,
|
||||||
val intent = Intent(Intent.ACTION_VIEW, uri)
|
customTabsIntent,
|
||||||
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
true,
|
||||||
startActivity(intent)
|
false,
|
||||||
}
|
this@ReaderActivity
|
||||||
|
)
|
||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -5,6 +5,7 @@ import android.os.Bundle
|
|||||||
import android.support.v7.app.AppCompatActivity
|
import android.support.v7.app.AppCompatActivity
|
||||||
import android.support.v7.widget.LinearLayoutManager
|
import android.support.v7.widget.LinearLayoutManager
|
||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.RecyclerView
|
||||||
|
import android.support.v7.widget.Toolbar
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
|
||||||
import com.melnykov.fab.FloatingActionButton
|
import com.melnykov.fab.FloatingActionButton
|
||||||
@ -15,14 +16,19 @@ import retrofit2.Response
|
|||||||
import apps.amine.bou.readerforselfoss.adapters.SourcesListAdapter
|
import apps.amine.bou.readerforselfoss.adapters.SourcesListAdapter
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.Sources
|
import apps.amine.bou.readerforselfoss.api.selfoss.Sources
|
||||||
|
import com.ftinc.scoop.Scoop
|
||||||
|
|
||||||
|
|
||||||
class SourcesActivity : AppCompatActivity() {
|
class SourcesActivity : AppCompatActivity() {
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
Scoop.getInstance().apply(this)
|
||||||
setContentView(R.layout.activity_sources)
|
setContentView(R.layout.activity_sources)
|
||||||
|
val toolbar: Toolbar = findViewById(R.id.toolbar)
|
||||||
|
setSupportActionBar(toolbar)
|
||||||
|
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||||
|
supportActionBar?.setDisplayShowHomeEnabled(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
|
@ -7,6 +7,7 @@ import android.graphics.Color
|
|||||||
import android.support.constraint.ConstraintLayout
|
import android.support.constraint.ConstraintLayout
|
||||||
import android.support.design.widget.Snackbar
|
import android.support.design.widget.Snackbar
|
||||||
import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory
|
import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory
|
||||||
|
import android.support.v7.widget.CardView
|
||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.RecyclerView
|
||||||
import android.text.Html
|
import android.text.Html
|
||||||
import android.text.format.DateUtils
|
import android.text.format.DateUtils
|
||||||
@ -35,6 +36,7 @@ import apps.amine.bou.readerforselfoss.R
|
|||||||
import apps.amine.bou.readerforselfoss.api.selfoss.Item
|
import apps.amine.bou.readerforselfoss.api.selfoss.Item
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse
|
import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse
|
||||||
|
import apps.amine.bou.readerforselfoss.themes.AppColors
|
||||||
import apps.amine.bou.readerforselfoss.utils.*
|
import apps.amine.bou.readerforselfoss.utils.*
|
||||||
import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
||||||
|
|
||||||
@ -44,8 +46,9 @@ class ItemCardAdapter(private val app: Activity,
|
|||||||
private val helper: CustomTabActivityHelper,
|
private val helper: CustomTabActivityHelper,
|
||||||
private val internalBrowser: Boolean,
|
private val internalBrowser: Boolean,
|
||||||
private val articleViewer: Boolean,
|
private val articleViewer: Boolean,
|
||||||
private val fullHeightCards: Boolean) : RecyclerView.Adapter<ItemCardAdapter.ViewHolder>() {
|
private val fullHeightCards: Boolean,
|
||||||
private val c: Context = app.applicationContext
|
private val appColors: AppColors) : RecyclerView.Adapter<ItemCardAdapter.ViewHolder>() {
|
||||||
|
private val c: Context = app.baseContext
|
||||||
private val generator: ColorGenerator = ColorGenerator.MATERIAL
|
private val generator: ColorGenerator = ColorGenerator.MATERIAL
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||||
@ -150,6 +153,7 @@ class ItemCardAdapter(private val app: Activity,
|
|||||||
lateinit var sourceTitleAndDate: TextView
|
lateinit var sourceTitleAndDate: TextView
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
(mView.findViewById<CardView>(R.id.card)).setCardBackgroundColor(appColors.cardBackground)
|
||||||
handleClickListeners()
|
handleClickListeners()
|
||||||
handleCustomTabActions()
|
handleCustomTabActions()
|
||||||
}
|
}
|
||||||
@ -208,7 +212,7 @@ class ItemCardAdapter(private val app: Activity,
|
|||||||
helper.bindCustomTabsService(app)
|
helper.bindCustomTabsService(app)
|
||||||
|
|
||||||
mView.setOnClickListener {
|
mView.setOnClickListener {
|
||||||
c.openItemUrl(items[adapterPosition],
|
c.openItemUrl(items[adapterPosition].getLinkDecoded(),
|
||||||
customTabsIntent,
|
customTabsIntent,
|
||||||
internalBrowser,
|
internalBrowser,
|
||||||
articleViewer,
|
articleViewer,
|
||||||
|
@ -36,6 +36,7 @@ import apps.amine.bou.readerforselfoss.R
|
|||||||
import apps.amine.bou.readerforselfoss.api.selfoss.Item
|
import apps.amine.bou.readerforselfoss.api.selfoss.Item
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse
|
import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse
|
||||||
|
import apps.amine.bou.readerforselfoss.themes.AppColors
|
||||||
import apps.amine.bou.readerforselfoss.utils.*
|
import apps.amine.bou.readerforselfoss.utils.*
|
||||||
import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
||||||
|
|
||||||
@ -48,7 +49,7 @@ class ItemListAdapter(private val app: Activity,
|
|||||||
private val internalBrowser: Boolean,
|
private val internalBrowser: Boolean,
|
||||||
private val articleViewer: Boolean) : RecyclerView.Adapter<ItemListAdapter.ViewHolder>() {
|
private val articleViewer: Boolean) : RecyclerView.Adapter<ItemListAdapter.ViewHolder>() {
|
||||||
private val generator: ColorGenerator = ColorGenerator.MATERIAL
|
private val generator: ColorGenerator = ColorGenerator.MATERIAL
|
||||||
private val c: Context = app.applicationContext
|
private val c: Context = app.baseContext
|
||||||
private val bars: ArrayList<Boolean> = ArrayList(Collections.nCopies(items.size + 1, false))
|
private val bars: ArrayList<Boolean> = ArrayList(Collections.nCopies(items.size + 1, false))
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||||
@ -222,7 +223,7 @@ class ItemListAdapter(private val app: Activity,
|
|||||||
|
|
||||||
if (!clickBehavior) {
|
if (!clickBehavior) {
|
||||||
mView.setOnClickListener {
|
mView.setOnClickListener {
|
||||||
c.openItemUrl(items[adapterPosition],
|
c.openItemUrl(items[adapterPosition].getLinkDecoded(),
|
||||||
customTabsIntent,
|
customTabsIntent,
|
||||||
internalBrowser,
|
internalBrowser,
|
||||||
articleViewer,
|
articleViewer,
|
||||||
@ -235,7 +236,7 @@ class ItemListAdapter(private val app: Activity,
|
|||||||
} else {
|
} else {
|
||||||
mView.setOnClickListener { actionBarShowHide() }
|
mView.setOnClickListener { actionBarShowHide() }
|
||||||
mView.setOnLongClickListener {
|
mView.setOnLongClickListener {
|
||||||
c.openItemUrl(items[adapterPosition],
|
c.openItemUrl(items[adapterPosition].getLinkDecoded(),
|
||||||
customTabsIntent,
|
customTabsIntent,
|
||||||
internalBrowser,
|
internalBrowser,
|
||||||
articleViewer,
|
articleViewer,
|
||||||
|
@ -6,12 +6,19 @@ import android.preference.PreferenceActivity;
|
|||||||
import android.support.annotation.LayoutRes;
|
import android.support.annotation.LayoutRes;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
import android.support.design.widget.AppBarLayout;
|
||||||
import android.support.v7.app.ActionBar;
|
import android.support.v7.app.ActionBar;
|
||||||
import android.support.v7.app.AppCompatDelegate;
|
import android.support.v7.app.AppCompatDelegate;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
|
import apps.amine.bou.readerforselfoss.R;
|
||||||
|
import com.ftinc.scoop.Scoop;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link PreferenceActivity} which implements and proxies the necessary calls
|
* A {@link PreferenceActivity} which implements and proxies the necessary calls
|
||||||
@ -25,12 +32,23 @@ public abstract class AppCompatPreferenceActivity extends PreferenceActivity {
|
|||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
getDelegate().installViewFactory();
|
getDelegate().installViewFactory();
|
||||||
getDelegate().onCreate(savedInstanceState);
|
getDelegate().onCreate(savedInstanceState);
|
||||||
|
Scoop.getInstance().apply(this);
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPostCreate(Bundle savedInstanceState) {
|
protected void onPostCreate(Bundle savedInstanceState) {
|
||||||
super.onPostCreate(savedInstanceState);
|
super.onPostCreate(savedInstanceState);
|
||||||
|
|
||||||
|
LinearLayout root = (LinearLayout)findViewById(android.R.id.list).getParent().getParent().getParent();
|
||||||
|
AppBarLayout bar = (AppBarLayout) LayoutInflater.from(this).inflate(R.layout.settings_toolbar, root, false);
|
||||||
|
Toolbar toolbar = bar.findViewById(R.id.toolbar);
|
||||||
|
setSupportActionBar(toolbar);
|
||||||
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
getSupportActionBar().setDisplayShowHomeEnabled(true);
|
||||||
|
|
||||||
|
root.addView(bar, 0);
|
||||||
|
|
||||||
getDelegate().onPostCreate(savedInstanceState);
|
getDelegate().onPostCreate(savedInstanceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ import android.view.MenuItem;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import apps.amine.bou.readerforselfoss.R;
|
import apps.amine.bou.readerforselfoss.R;
|
||||||
|
import com.ftinc.scoop.ui.ScoopSettingsActivity;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -201,6 +202,17 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onHeaderClick(Header header, int position) {
|
||||||
|
super.onHeaderClick(header, position);
|
||||||
|
if (header.id == R.id.theme_change) {
|
||||||
|
Intent intent = ScoopSettingsActivity.createIntent(getApplicationContext());
|
||||||
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
getApplicationContext().startActivity(intent);
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
int id = item.getItemId();
|
int id = item.getItemId();
|
||||||
|
@ -0,0 +1,53 @@
|
|||||||
|
package apps.amine.bou.readerforselfoss.themes
|
||||||
|
|
||||||
|
import android.app.Activity
|
||||||
|
import android.content.Context
|
||||||
|
import android.support.annotation.ColorInt
|
||||||
|
import android.util.TypedValue
|
||||||
|
import apps.amine.bou.readerforselfoss.R
|
||||||
|
import java.lang.reflect.AccessibleObject.setAccessible
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class AppColors(a: Activity) {
|
||||||
|
@ColorInt val accent: Int
|
||||||
|
@ColorInt val dark: Int
|
||||||
|
@ColorInt val primary: Int
|
||||||
|
@ColorInt val cardBackground: Int
|
||||||
|
@ColorInt val windowBackground: Int
|
||||||
|
val isDarkTheme: Boolean
|
||||||
|
|
||||||
|
init {
|
||||||
|
val wrapper = Context::class.java
|
||||||
|
val method = wrapper!!.getMethod("getThemeResId")
|
||||||
|
method.isAccessible = true
|
||||||
|
|
||||||
|
isDarkTheme = when(method.invoke(a.baseContext)) {
|
||||||
|
R.style.NoBarTealOrangeDark,
|
||||||
|
R.style.NoBarDark,
|
||||||
|
R.style.NoBarBlueAmberDark,
|
||||||
|
R.style.NoBarGreyOrangeDark,
|
||||||
|
R.style.NoBarIndigoPinkDark,
|
||||||
|
R.style.NoBarRedTealDark,
|
||||||
|
R.style.NoBarCyanPinkDark -> true
|
||||||
|
else -> false
|
||||||
|
}
|
||||||
|
|
||||||
|
val typedAccent = TypedValue()
|
||||||
|
val typedAccentDark = TypedValue()
|
||||||
|
val typedPrimary = TypedValue()
|
||||||
|
val typedCardBackground = TypedValue()
|
||||||
|
val typedWindowBackground = TypedValue()
|
||||||
|
|
||||||
|
a.theme.resolveAttribute(R.attr.colorAccent, typedAccent, true)
|
||||||
|
a.theme.resolveAttribute(R.attr.colorAccent, typedAccent, true)
|
||||||
|
a.theme.resolveAttribute(R.attr.colorPrimary, typedPrimary, true)
|
||||||
|
a.theme.resolveAttribute(R.attr.cardBackgroundColor, typedCardBackground, true)
|
||||||
|
a.theme.resolveAttribute(android.R.attr.colorBackground, typedWindowBackground, true)
|
||||||
|
accent = typedAccent.data
|
||||||
|
dark = typedAccentDark.data
|
||||||
|
primary = typedPrimary.data
|
||||||
|
cardBackground = typedCardBackground.data
|
||||||
|
windowBackground = typedWindowBackground.data
|
||||||
|
}
|
||||||
|
}
|
@ -36,7 +36,10 @@ fun Context.checkAndDisplayStoreApk() = {
|
|||||||
} else Unit
|
} else Unit
|
||||||
}
|
}
|
||||||
|
|
||||||
fun String.isUrlValid(): Boolean {
|
fun String.isUrlValid(): Boolean =
|
||||||
|
HttpUrl.parse(this) != null && Patterns.WEB_URL.matcher(this).matches()
|
||||||
|
|
||||||
|
fun String.isBaseUrlValid(): Boolean {
|
||||||
val baseUrl = HttpUrl.parse(this)
|
val baseUrl = HttpUrl.parse(this)
|
||||||
var existsAndEndsWithSlash = false
|
var existsAndEndsWithSlash = false
|
||||||
if (baseUrl != null) {
|
if (baseUrl != null) {
|
||||||
|
@ -50,15 +50,13 @@ fun Context.buildCustomTabsIntent(): CustomTabsIntent {
|
|||||||
return intentBuilder.build()
|
return intentBuilder.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Context.openItemUrl(i: Item,
|
fun Context.openItemUrl(linkDecoded: String,
|
||||||
customTabsIntent: CustomTabsIntent,
|
customTabsIntent: CustomTabsIntent,
|
||||||
internalBrowser: Boolean,
|
internalBrowser: Boolean,
|
||||||
articleViewer: Boolean,
|
articleViewer: Boolean,
|
||||||
app: Activity) {
|
app: Activity) {
|
||||||
if (!internalBrowser) {
|
if (!internalBrowser || !linkDecoded.isUrlValid()) {
|
||||||
val intent = Intent(Intent.ACTION_VIEW)
|
openInBrowser(linkDecoded, app)
|
||||||
intent.data = Uri.parse(i.getLinkDecoded())
|
|
||||||
app.startActivity(intent)
|
|
||||||
} else {
|
} else {
|
||||||
if (articleViewer) {
|
if (articleViewer) {
|
||||||
val intent = Intent(this, ReaderActivity::class.java)
|
val intent = Intent(this, ReaderActivity::class.java)
|
||||||
@ -68,15 +66,25 @@ fun Context.openItemUrl(i: Item,
|
|||||||
.setDragElasticity(DragDismissIntentBuilder.DragElasticity.NORMAL) // Larger elasticities will make it easier to dismiss.
|
.setDragElasticity(DragDismissIntentBuilder.DragElasticity.NORMAL) // Larger elasticities will make it easier to dismiss.
|
||||||
.build(intent)
|
.build(intent)
|
||||||
|
|
||||||
intent.putExtra("url", i.getLinkDecoded())
|
intent.putExtra("url", linkDecoded)
|
||||||
app.startActivity(intent)
|
app.startActivity(intent)
|
||||||
} else {
|
} else {
|
||||||
CustomTabActivityHelper.openCustomTab(app, customTabsIntent, Uri.parse(i.getLinkDecoded())
|
try {
|
||||||
|
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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun openInBrowser(linkDecoded: String, app: Activity) {
|
||||||
|
val intent = Intent(Intent.ACTION_VIEW)
|
||||||
|
intent.data = Uri.parse(linkDecoded)
|
||||||
|
app.startActivity(intent)
|
||||||
|
}
|
||||||
|
@ -0,0 +1,16 @@
|
|||||||
|
package apps.amine.bou.readerforselfoss.utils.bottombar
|
||||||
|
|
||||||
|
import com.ashokvarma.bottomnavigation.TextBadgeItem
|
||||||
|
|
||||||
|
|
||||||
|
fun TextBadgeItem.removeBadge(): TextBadgeItem {
|
||||||
|
this.setText("")
|
||||||
|
this.hide()
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
fun TextBadgeItem.maybeShow(): TextBadgeItem =
|
||||||
|
if (this.isHidden)
|
||||||
|
this.show()
|
||||||
|
else
|
||||||
|
this
|
@ -1,9 +0,0 @@
|
|||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:width="24dp"
|
|
||||||
android:height="24dp"
|
|
||||||
android:viewportWidth="24.0"
|
|
||||||
android:viewportHeight="24.0">
|
|
||||||
<path
|
|
||||||
android:fillColor="#FF000000"
|
|
||||||
android:pathData="M11,17h2v-6h-2v6zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM11,9h2L13,7h-2v2z"/>
|
|
||||||
</vector>
|
|
@ -1,9 +0,0 @@
|
|||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:width="24dp"
|
|
||||||
android:height="24dp"
|
|
||||||
android:viewportWidth="24.0"
|
|
||||||
android:viewportHeight="24.0">
|
|
||||||
<path
|
|
||||||
android:fillColor="#FF000000"
|
|
||||||
android:pathData="M19.43,12.98c0.04,-0.32 0.07,-0.64 0.07,-0.98s-0.03,-0.66 -0.07,-0.98l2.11,-1.65c0.19,-0.15 0.24,-0.42 0.12,-0.64l-2,-3.46c-0.12,-0.22 -0.39,-0.3 -0.61,-0.22l-2.49,1c-0.52,-0.4 -1.08,-0.73 -1.69,-0.98l-0.38,-2.65C14.46,2.18 14.25,2 14,2h-4c-0.25,0 -0.46,0.18 -0.49,0.42l-0.38,2.65c-0.61,0.25 -1.17,0.59 -1.69,0.98l-2.49,-1c-0.23,-0.09 -0.49,0 -0.61,0.22l-2,3.46c-0.13,0.22 -0.07,0.49 0.12,0.64l2.11,1.65c-0.04,0.32 -0.07,0.65 -0.07,0.98s0.03,0.66 0.07,0.98l-2.11,1.65c-0.19,0.15 -0.24,0.42 -0.12,0.64l2,3.46c0.12,0.22 0.39,0.3 0.61,0.22l2.49,-1c0.52,0.4 1.08,0.73 1.69,0.98l0.38,2.65c0.03,0.24 0.24,0.42 0.49,0.42h4c0.25,0 0.46,-0.18 0.49,-0.42l0.38,-2.65c0.61,-0.25 1.17,-0.59 1.69,-0.98l2.49,1c0.23,0.09 0.49,0 0.61,-0.22l2,-3.46c0.12,-0.22 0.07,-0.49 -0.12,-0.64l-2.11,-1.65zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5 3.5,1.57 3.5,3.5 -1.57,3.5 -3.5,3.5z"/>
|
|
||||||
</vector>
|
|
BIN
app/src/main/res/drawable-hdpi/ic_color_lens_black_24dp.png
Normal file
After Width: | Height: | Size: 458 B |
BIN
app/src/main/res/drawable-hdpi/ic_info_outline.png
Normal file
After Width: | Height: | Size: 551 B |
BIN
app/src/main/res/drawable-hdpi/ic_settings.png
Normal file
After Width: | Height: | Size: 498 B |
BIN
app/src/main/res/drawable-mdpi/ic_color_lens_black_24dp.png
Normal file
After Width: | Height: | Size: 268 B |
BIN
app/src/main/res/drawable-mdpi/ic_info_outline.png
Normal file
After Width: | Height: | Size: 355 B |
BIN
app/src/main/res/drawable-mdpi/ic_settings.png
Normal file
After Width: | Height: | Size: 339 B |
BIN
app/src/main/res/drawable-xhdpi/ic_color_lens_black_24dp.png
Normal file
After Width: | Height: | Size: 504 B |
BIN
app/src/main/res/drawable-xhdpi/ic_info_outline.png
Normal file
After Width: | Height: | Size: 725 B |
BIN
app/src/main/res/drawable-xhdpi/ic_settings.png
Normal file
After Width: | Height: | Size: 606 B |
BIN
app/src/main/res/drawable-xxhdpi/ic_color_lens_black_24dp.png
Normal file
After Width: | Height: | Size: 741 B |
BIN
app/src/main/res/drawable-xxhdpi/ic_info_outline.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_settings.png
Normal file
After Width: | Height: | Size: 907 B |
BIN
app/src/main/res/drawable-xxxhdpi/ic_color_lens_black_24dp.png
Normal file
After Width: | Height: | Size: 966 B |
BIN
app/src/main/res/drawable-xxxhdpi/ic_info_outline.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
app/src/main/res/drawable-xxxhdpi/ic_settings.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
@ -1,130 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<RelativeLayout
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:fitsSystemWindows="true"
|
|
||||||
tools:context="apps.amine.bou.readerforselfoss.HomeActivity">
|
|
||||||
|
|
||||||
<com.roughike.bottombar.BottomBar
|
|
||||||
android:id="@+id/bottomBar"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_alignParentLeft="true"
|
|
||||||
android:layout_alignParentStart="true"
|
|
||||||
app:bb_tabletMode="true"
|
|
||||||
app:bb_tabXmlResource="@xml/bottombar"
|
|
||||||
app:bb_activeTabColor="@color/white"
|
|
||||||
app:bb_inActiveTabColor="@color/black"
|
|
||||||
app:bb_badgeBackgroundColor="@color/colorPrimary"/>
|
|
||||||
|
|
||||||
<com.github.stkent.amplify.prompt.DefaultLayoutPromptView
|
|
||||||
android:id="@+id/prompt_view"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
app:prompt_view_user_opinion_question_title="@string/rating_prompt_title"
|
|
||||||
app:prompt_view_user_opinion_question_positive_button_label="@string/rating_prompt_yes"
|
|
||||||
app:prompt_view_user_opinion_question_negative_button_label="@string/rating_prompt_no"
|
|
||||||
app:prompt_view_positive_feedback_question_title="@string/rating_prompt_rating_title"
|
|
||||||
app:prompt_view_positive_feedback_question_positive_button_label="@string/rating_prompt_rating_yes"
|
|
||||||
app:prompt_view_positive_feedback_question_negative_button_label="@string/rating_prompt_rating_no"
|
|
||||||
app:prompt_view_critical_feedback_question_title="@string/rating_prompt_feedback_title"
|
|
||||||
app:prompt_view_critical_feedback_question_positive_button_label="@string/rating_prompt_feedback_yes"
|
|
||||||
app:prompt_view_critical_feedback_question_negative_button_label="@string/rating_prompt_feedback_no"
|
|
||||||
app:prompt_view_thanks_title="@string/rating_prompt_thanks"
|
|
||||||
app:prompt_view_positive_button_background_color="@color/colorPrimary"
|
|
||||||
app:prompt_view_positive_button_text_color="@color/white"
|
|
||||||
app:prompt_view_positive_button_border_color="@color/colorPrimary"
|
|
||||||
app:prompt_view_negative_button_background_color="@color/colorAccent"
|
|
||||||
app:prompt_view_negative_button_border_color="@color/white"
|
|
||||||
app:prompt_view_thanks_display_time_ms="2000"
|
|
||||||
android:layout_toEndOf="@+id/bottomBar"
|
|
||||||
android:layout_toRightOf="@+id/bottomBar"/>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- This could be your fragment container, or something -->
|
|
||||||
<android.support.design.widget.CoordinatorLayout
|
|
||||||
android:id="@+id/coordLayout"
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_toEndOf="@+id/bottomBar"
|
|
||||||
android:layout_toRightOf="@+id/bottomBar"
|
|
||||||
android:layout_below="@id/prompt_view">
|
|
||||||
|
|
||||||
<android.support.design.widget.CoordinatorLayout
|
|
||||||
android:id="@+id/intern_coordLayout"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<android.support.design.widget.AppBarLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content">
|
|
||||||
|
|
||||||
<android.support.v7.widget.Toolbar
|
|
||||||
android:id="@+id/toolbar"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="?attr/actionBarSize"
|
|
||||||
app:theme="@style/ToolBarStyle"
|
|
||||||
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
|
|
||||||
|
|
||||||
</android.support.design.widget.AppBarLayout>
|
|
||||||
|
|
||||||
<FrameLayout
|
|
||||||
android:id="@+id/drawer_layout"
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<android.support.v4.widget.SwipeRefreshLayout
|
|
||||||
android:id="@+id/swipeRefreshLayout"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/emptyText"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:gravity="fill"
|
|
||||||
android:paddingTop="100dp"
|
|
||||||
android:text="@string/nothing_here"
|
|
||||||
android:textAlignment="center"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
|
|
||||||
android:textColor="@color/about_libraries_card_dark"
|
|
||||||
android:visibility="gone" />
|
|
||||||
<android.support.v7.widget.RecyclerView
|
|
||||||
android:id="@+id/my_recycler_view"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="@color/background_grey"
|
|
||||||
android:scrollbars="vertical"
|
|
||||||
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
|
|
||||||
</android.support.v4.widget.SwipeRefreshLayout>
|
|
||||||
|
|
||||||
</FrameLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</android.support.design.widget.CoordinatorLayout>
|
|
||||||
|
|
||||||
</android.support.design.widget.CoordinatorLayout>
|
|
||||||
|
|
||||||
|
|
||||||
</RelativeLayout>
|
|
@ -1,16 +1,32 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<android.support.constraint.ConstraintLayout
|
<LinearLayout
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
tools:context="apps.amine.bou.readerforselfoss.AddSourceActivity"
|
||||||
|
android:orientation="vertical">
|
||||||
|
<android.support.design.widget.AppBarLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<android.support.v7.widget.Toolbar
|
||||||
|
android:id="@+id/toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
app:theme="@style/ToolBarStyle" />
|
||||||
|
|
||||||
|
</android.support.design.widget.AppBarLayout>
|
||||||
|
|
||||||
|
|
||||||
|
<android.support.constraint.ConstraintLayout
|
||||||
android:paddingBottom="@dimen/activity_vertical_margin"
|
android:paddingBottom="@dimen/activity_vertical_margin"
|
||||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||||
android:paddingTop="@dimen/activity_vertical_margin"
|
android:paddingTop="@dimen/activity_vertical_margin"
|
||||||
tools:context="apps.amine.bou.readerforselfoss.AddSourceActivity">
|
android:layout_height="match_parent"
|
||||||
|
android:layout_width="match_parent">
|
||||||
<android.support.constraint.ConstraintLayout
|
<android.support.constraint.ConstraintLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
@ -90,7 +106,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:id="@+id/saveBtn"
|
android:id="@+id/saveBtn"
|
||||||
android:elevation="5dp"
|
android:elevation="5dp"
|
||||||
android:textColor="@color/colorAccent"
|
android:textColor="?attr/colorAccent"
|
||||||
android:layout_marginEnd="16dp"
|
android:layout_marginEnd="16dp"
|
||||||
app:layout_constraintRight_toRightOf="parent"
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
android:layout_marginRight="16dp"
|
android:layout_marginRight="16dp"
|
||||||
@ -115,4 +131,6 @@
|
|||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
android:visibility="visible"/>
|
android:visibility="visible"/>
|
||||||
|
|
||||||
</android.support.constraint.ConstraintLayout>
|
</android.support.constraint.ConstraintLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
@ -27,6 +27,7 @@
|
|||||||
app:prompt_view_positive_button_border_color="@color/colorPrimary"
|
app:prompt_view_positive_button_border_color="@color/colorPrimary"
|
||||||
app:prompt_view_negative_button_background_color="@color/colorAccent"
|
app:prompt_view_negative_button_background_color="@color/colorAccent"
|
||||||
app:prompt_view_negative_button_border_color="@color/white"
|
app:prompt_view_negative_button_border_color="@color/white"
|
||||||
|
app:prompt_view_background_color="?attr/colorAccent"
|
||||||
app:prompt_view_thanks_display_time_ms="2000"/>
|
app:prompt_view_thanks_display_time_ms="2000"/>
|
||||||
|
|
||||||
<android.support.design.widget.CoordinatorLayout
|
<android.support.design.widget.CoordinatorLayout
|
||||||
@ -53,8 +54,7 @@
|
|||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
app:theme="@style/ToolBarStyle"
|
app:theme="@style/ToolBarStyle" />
|
||||||
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
|
|
||||||
|
|
||||||
</android.support.design.widget.AppBarLayout>
|
</android.support.design.widget.AppBarLayout>
|
||||||
|
|
||||||
@ -74,7 +74,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:background="@color/background_grey">
|
android:background="?android:attr/windowBackground">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/emptyText"
|
android:id="@+id/emptyText"
|
||||||
@ -85,7 +85,6 @@
|
|||||||
android:text="@string/nothing_here"
|
android:text="@string/nothing_here"
|
||||||
android:textAlignment="center"
|
android:textAlignment="center"
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
|
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
|
||||||
android:textColor="@color/about_libraries_card_dark"
|
|
||||||
android:background="@color/transparent"
|
android:background="@color/transparent"
|
||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
<android.support.v7.widget.RecyclerView
|
<android.support.v7.widget.RecyclerView
|
||||||
@ -104,17 +103,10 @@
|
|||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</android.support.design.widget.CoordinatorLayout>
|
</android.support.design.widget.CoordinatorLayout>
|
||||||
<com.roughike.bottombar.BottomBar
|
<com.ashokvarma.bottomnavigation.BottomNavigationBar
|
||||||
|
android:layout_gravity="bottom"
|
||||||
android:id="@+id/bottomBar"
|
android:id="@+id/bottomBar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="60dp"
|
android:layout_height="60dp"/>
|
||||||
android:layout_gravity="bottom"
|
|
||||||
app:bb_behavior="shy"
|
|
||||||
android:layout_alignParentBottom="true"
|
|
||||||
app:bb_tabXmlResource="@xml/bottombar"
|
|
||||||
app:bb_activeTabColor="@color/white"
|
|
||||||
app:bb_badgeBackgroundColor="@color/colorPrimary"
|
|
||||||
app:bb_inActiveTabColor="@color/black"
|
|
||||||
app:bb_badgesHideWhenActive="false" />
|
|
||||||
</android.support.design.widget.CoordinatorLayout>
|
</android.support.design.widget.CoordinatorLayout>
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
@ -2,14 +2,29 @@
|
|||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:gravity="center_horizontal"
|
android:gravity="center_horizontal"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
|
tools:context="apps.amine.bou.readerforselfoss.LoginActivity">
|
||||||
|
<android.support.design.widget.AppBarLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<android.support.v7.widget.Toolbar
|
||||||
|
android:id="@+id/toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
app:theme="@style/ToolBarStyle" />
|
||||||
|
|
||||||
|
</android.support.design.widget.AppBarLayout>
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical"
|
||||||
android:paddingBottom="@dimen/activity_vertical_margin"
|
android:paddingBottom="@dimen/activity_vertical_margin"
|
||||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||||
android:paddingTop="@dimen/activity_vertical_margin"
|
android:paddingTop="@dimen/activity_vertical_margin">
|
||||||
tools:context="apps.amine.bou.readerforselfoss.LoginActivity">
|
|
||||||
|
|
||||||
<!-- Login progress -->
|
<!-- Login progress -->
|
||||||
<ProgressBar
|
<ProgressBar
|
||||||
android:id="@+id/login_progress"
|
android:id="@+id/login_progress"
|
||||||
@ -135,4 +150,6 @@
|
|||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
@ -5,7 +5,8 @@
|
|||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context="apps.amine.bou.readerforselfoss.ReaderActivity">
|
tools:context="apps.amine.bou.readerforselfoss.ReaderActivity"
|
||||||
|
android:background="?android:attr/windowBackground">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/imageView"
|
android:id="@+id/imageView"
|
||||||
@ -96,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="#000000"
|
android:tint="?android:attr/textColorPrimary"
|
||||||
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"
|
||||||
@ -113,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="#000000"
|
android:tint="?android:attr/textColorPrimary"
|
||||||
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"
|
||||||
|
@ -8,12 +8,22 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context="apps.amine.bou.readerforselfoss.SourcesActivity"
|
tools:context="apps.amine.bou.readerforselfoss.SourcesActivity"
|
||||||
xmlns:fab="http://schemas.android.com/apk/res-auto">
|
xmlns:fab="http://schemas.android.com/apk/res-auto">
|
||||||
|
<android.support.design.widget.AppBarLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<android.support.v7.widget.Toolbar
|
||||||
|
android:id="@+id/toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
app:theme="@style/ToolBarStyle" />
|
||||||
|
|
||||||
|
</android.support.design.widget.AppBarLayout>
|
||||||
|
|
||||||
<android.support.v7.widget.RecyclerView
|
<android.support.v7.widget.RecyclerView
|
||||||
android:id="@+id/activity_sources"
|
android:id="@+id/activity_sources"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="@color/background_grey"
|
|
||||||
android:scrollbars="vertical"
|
android:scrollbars="vertical"
|
||||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||||
</android.support.v7.widget.RecyclerView>
|
</android.support.v7.widget.RecyclerView>
|
||||||
@ -24,8 +34,9 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="end|bottom|right"
|
android:layout_gravity="end|bottom|right"
|
||||||
android:src="@drawable/ic_add_black_24dp"
|
android:src="@drawable/ic_add_black_24dp"
|
||||||
fab:fab_colorNormal="@color/colorAccent"
|
android:tint="?android:textColorPrimary"
|
||||||
fab:fab_colorPressed="@color/colorAccentDark"
|
fab:fab_colorNormal="?attr/colorAccent"
|
||||||
|
fab:fab_colorPressed="?attr/colorAccentDark"
|
||||||
fab:fab_colorRipple="@color/pink"
|
fab:fab_colorRipple="@color/pink"
|
||||||
android:paddingBottom="@dimen/activity_vertical_margin"
|
android:paddingBottom="@dimen/activity_vertical_margin"
|
||||||
android:paddingTop="@dimen/activity_vertical_margin"
|
android:paddingTop="@dimen/activity_vertical_margin"
|
||||||
|
@ -6,13 +6,15 @@
|
|||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<android.support.v7.widget.CardView
|
<android.support.v7.widget.CardView
|
||||||
|
android:id="@+id/card"
|
||||||
|
xmlns:card_view="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
app:layout_constraintRight_toRightOf="parent"
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
app:layout_constraintLeft_toLeftOf="parent"
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
app:layout_constraintHorizontal_bias="0.62"
|
app:layout_constraintHorizontal_bias="0.62"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:cardElevation="2dp"
|
card_view:cardElevation="2dp"
|
||||||
app:cardUseCompatPadding="true"
|
card_view:cardUseCompatPadding="true"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="8dp"
|
android:layout_marginStart="8dp"
|
||||||
android:layout_marginLeft="8dp"
|
android:layout_marginLeft="8dp"
|
||||||
@ -60,24 +62,21 @@
|
|||||||
android:layout_width="40dp" />
|
android:layout_width="40dp" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
android:id="@+id/title"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:id="@+id/title"
|
|
||||||
tools:text="Titre"
|
|
||||||
android:fontFamily="sans-serif"
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:textAllCaps="false"
|
|
||||||
android:textAlignment="viewStart"
|
|
||||||
android:textColor="@color/black"
|
|
||||||
android:layout_marginEnd="8dp"
|
android:layout_marginEnd="8dp"
|
||||||
app:layout_constraintRight_toRightOf="parent"
|
android:layout_marginLeft="8dp"
|
||||||
android:layout_marginRight="8dp"
|
android:layout_marginRight="8dp"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:gravity="start"
|
||||||
|
android:textAlignment="viewStart"
|
||||||
|
android:textStyle="bold"
|
||||||
app:layout_constraintHorizontal_bias="0.0"
|
app:layout_constraintHorizontal_bias="0.0"
|
||||||
app:layout_constraintLeft_toRightOf="@+id/sourceImage"
|
app:layout_constraintLeft_toRightOf="@+id/sourceImage"
|
||||||
android:layout_marginStart="8dp"
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
android:layout_marginLeft="8dp"
|
|
||||||
app:layout_constraintTop_toTopOf="@+id/sourceImage"
|
app:layout_constraintTop_toTopOf="@+id/sourceImage"
|
||||||
android:gravity="start" />
|
tools:text="Titre" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
@ -85,7 +84,6 @@
|
|||||||
android:id="@+id/sourceTitleAndDate"
|
android:id="@+id/sourceTitleAndDate"
|
||||||
android:textSize="14sp"
|
android:textSize="14sp"
|
||||||
tools:text="Google Actualité Il y a 5h"
|
tools:text="Google Actualité Il y a 5h"
|
||||||
android:textColor="#868686"
|
|
||||||
android:textAlignment="viewStart"
|
android:textAlignment="viewStart"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/title"
|
app:layout_constraintTop_toBottomOf="@+id/title"
|
||||||
android:layout_marginTop="8dp"
|
android:layout_marginTop="8dp"
|
||||||
@ -117,38 +115,38 @@
|
|||||||
android:layout_marginEnd="8dp"/>
|
android:layout_marginEnd="8dp"/>
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
|
android:id="@+id/shareBtn"
|
||||||
android:layout_width="35dp"
|
android:layout_width="35dp"
|
||||||
android:layout_height="35dp"
|
android:layout_height="35dp"
|
||||||
android:src="@drawable/ic_share_black_24dp"
|
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:layout_marginRight="16dp"
|
||||||
android:layout_toLeftOf="@+id/favButton"
|
android:layout_toLeftOf="@+id/favButton"
|
||||||
android:layout_toStartOf="@+id/favButton"
|
android:layout_toStartOf="@+id/favButton"
|
||||||
android:id="@+id/shareBtn"
|
android:adjustViewBounds="true"
|
||||||
android:background="@android:color/transparent"
|
android:background="@android:color/transparent"
|
||||||
android:elevation="5dp"
|
android:elevation="5dp"
|
||||||
android:layout_marginEnd="16dp"
|
android:padding="4dp"
|
||||||
android:layout_marginRight="16dp"
|
|
||||||
android:tint="#000000"
|
|
||||||
android:adjustViewBounds="true"
|
|
||||||
android:scaleType="centerCrop"
|
android:scaleType="centerCrop"
|
||||||
android:padding="4dp"/>
|
android:src="@drawable/ic_share_black_24dp"
|
||||||
|
android:tint="?android:attr/textColorPrimary" />
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
|
android:id="@+id/browserBtn"
|
||||||
android:layout_width="35dp"
|
android:layout_width="35dp"
|
||||||
android:layout_height="35dp"
|
android:layout_height="35dp"
|
||||||
android:src="@drawable/ic_open_in_browser_black_24dp"
|
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
android:layout_toLeftOf="@+id/shareBtn"
|
|
||||||
android:layout_toStartOf="@+id/shareBtn"
|
|
||||||
android:id="@+id/browserBtn"
|
|
||||||
android:layout_marginEnd="16dp"
|
android:layout_marginEnd="16dp"
|
||||||
android:layout_marginRight="16dp"
|
android:layout_marginRight="16dp"
|
||||||
android:elevation="5dp"
|
android:layout_toLeftOf="@+id/shareBtn"
|
||||||
android:background="@android:color/transparent"
|
android:layout_toStartOf="@+id/shareBtn"
|
||||||
android:tint="#000000"
|
|
||||||
android:adjustViewBounds="true"
|
android:adjustViewBounds="true"
|
||||||
|
android:background="@android:color/transparent"
|
||||||
|
android:elevation="5dp"
|
||||||
|
android:padding="4dp"
|
||||||
android:scaleType="centerCrop"
|
android:scaleType="centerCrop"
|
||||||
android:padding="4dp"/>
|
android:src="@drawable/ic_open_in_browser_black_24dp"
|
||||||
|
android:tint="?android:attr/textColorPrimary" />
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
|
@ -3,11 +3,10 @@
|
|||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:orientation="horizontal"
|
android:orientation="vertical"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:minHeight="88dp"
|
android:minHeight="88dp">
|
||||||
android:background="#EDEDED">
|
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/itemImage"
|
android:id="@+id/itemImage"
|
||||||
@ -20,25 +19,25 @@
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
android:id="@+id/title"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:id="@+id/title"
|
|
||||||
tools:text="Titre"
|
|
||||||
android:fontFamily="sans-serif"
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:textAllCaps="false"
|
|
||||||
android:textAlignment="viewStart"
|
|
||||||
app:layout_constraintLeft_toRightOf="@+id/itemImage"
|
|
||||||
android:layout_marginStart="16dp"
|
|
||||||
android:layout_marginLeft="16dp"
|
|
||||||
android:layout_marginTop="16dp"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
android:textColor="@color/black"
|
|
||||||
android:layout_marginEnd="16dp"
|
android:layout_marginEnd="16dp"
|
||||||
app:layout_constraintRight_toRightOf="parent"
|
android:layout_marginLeft="16dp"
|
||||||
android:layout_marginRight="16dp"
|
android:layout_marginRight="16dp"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:fontFamily="sans-serif"
|
||||||
|
android:gravity="start"
|
||||||
|
android:textAlignment="viewStart"
|
||||||
|
android:textAllCaps="false"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:textStyle="bold"
|
||||||
app:layout_constraintHorizontal_bias="0.0"
|
app:layout_constraintHorizontal_bias="0.0"
|
||||||
android:gravity="start" />
|
app:layout_constraintLeft_toRightOf="@+id/itemImage"
|
||||||
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:text="Titre" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
@ -46,7 +45,6 @@
|
|||||||
android:id="@+id/sourceTitleAndDate"
|
android:id="@+id/sourceTitleAndDate"
|
||||||
android:textSize="14sp"
|
android:textSize="14sp"
|
||||||
tools:text="Google Actualité Il y a 5h"
|
tools:text="Google Actualité Il y a 5h"
|
||||||
android:textColor="#868686"
|
|
||||||
android:textAlignment="viewStart"
|
android:textAlignment="viewStart"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/title"
|
app:layout_constraintTop_toBottomOf="@+id/title"
|
||||||
android:layout_marginTop="8dp"
|
android:layout_marginTop="8dp"
|
||||||
@ -90,11 +88,11 @@
|
|||||||
android:layout_toStartOf="@+id/favButton"
|
android:layout_toStartOf="@+id/favButton"
|
||||||
android:adjustViewBounds="true"
|
android:adjustViewBounds="true"
|
||||||
android:background="@android:color/transparent"
|
android:background="@android:color/transparent"
|
||||||
|
android:backgroundTint="?android:attr/textColorPrimary"
|
||||||
android:elevation="5dp"
|
android:elevation="5dp"
|
||||||
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="#000000" />
|
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
android:id="@+id/browserBtn"
|
android:id="@+id/browserBtn"
|
||||||
@ -107,11 +105,11 @@
|
|||||||
android:layout_toStartOf="@+id/shareBtn"
|
android:layout_toStartOf="@+id/shareBtn"
|
||||||
android:adjustViewBounds="true"
|
android:adjustViewBounds="true"
|
||||||
android:background="@android:color/transparent"
|
android:background="@android:color/transparent"
|
||||||
|
android:backgroundTint="?android:attr/textColorPrimary"
|
||||||
android:elevation="5dp"
|
android:elevation="5dp"
|
||||||
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="#000000" />
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
|
|
||||||
|
14
app/src/main/res/layout/settings_toolbar.xml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<android.support.design.widget.AppBarLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
|
<android.support.v7.widget.Toolbar
|
||||||
|
android:id="@+id/toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
app:theme="@style/ToolBarStyle" />
|
||||||
|
|
||||||
|
</android.support.design.widget.AppBarLayout>
|
@ -5,7 +5,6 @@
|
|||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:background="#EDEDED"
|
|
||||||
android:layout_height="48dp">
|
android:layout_height="48dp">
|
||||||
|
|
||||||
|
|
||||||
@ -37,6 +36,7 @@
|
|||||||
android:id="@+id/deleteBtn"
|
android:id="@+id/deleteBtn"
|
||||||
android:background="@drawable/ic_remove_circle_outline_black_24dp"
|
android:background="@drawable/ic_remove_circle_outline_black_24dp"
|
||||||
style="@style/Widget.AppCompat.Button.Borderless"
|
style="@style/Widget.AppCompat.Button.Borderless"
|
||||||
|
android:backgroundTint="?android:textColorSecondary"
|
||||||
android:elevation="4dp"
|
android:elevation="4dp"
|
||||||
android:layout_marginTop="16dp"
|
android:layout_marginTop="16dp"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
@ -116,4 +116,19 @@
|
|||||||
<string name="menu_home_search">Rechercher</string>
|
<string name="menu_home_search">Rechercher</string>
|
||||||
<string name="can_delete_source">Petit soucis lors de la suppression de la source.</string>
|
<string name="can_delete_source">Petit soucis lors de la suppression de la source.</string>
|
||||||
<string name="base_url_error">Il y a eu un souci lors de la communication avec votre instance Selfoss. Si le problèmes persiste, contactez-moi pour trouver une solution.</string>
|
<string name="base_url_error">Il y a eu un souci lors de la communication avec votre instance Selfoss. Si le problèmes persiste, contactez-moi pour trouver une solution.</string>
|
||||||
|
<string name="pref_header_theme">Thèmes</string>
|
||||||
|
<string name="default_theme">Par défaut</string>
|
||||||
|
<string name="teal_orange_theme">Sarcelle/Orange/Clair</string>
|
||||||
|
<string name="cyan_pink_theme">Cyan/Rose/Clair</string>
|
||||||
|
<string name="grey_orange_theme">Gris/Orange/Clair</string>
|
||||||
|
<string name="blue_amber_theme">Bleu/Ambre/Clair</string>
|
||||||
|
<string name="indigo_pink_theme">Indigo/Rose/Clair</string>
|
||||||
|
<string name="red_teal_theme">Rouge/Sarcelle/Clair</string>
|
||||||
|
<string name="teal_orange_dark_theme">Sarcelle/Orange/Foncé</string>
|
||||||
|
<string name="cyan_pink_dark_theme">Cyan/Rose/Foncé</string>
|
||||||
|
<string name="default_dark_theme">Par défaut/Foncé</string>
|
||||||
|
<string name="grey_orange_dark_theme">Gris/Orange/Foncé</string>
|
||||||
|
<string name="blue_amber_dark_theme">Bleu/Ambre/Foncé</string>
|
||||||
|
<string name="indigo_pink_dark_theme">Indigo/Rose/Foncé</string>
|
||||||
|
<string name="red_teal_dark_theme">Rouge/Sarcelle/Foncé</string>
|
||||||
</resources>
|
</resources>
|
@ -116,4 +116,19 @@
|
|||||||
<string name="menu_home_search">Zoeken</string>
|
<string name="menu_home_search">Zoeken</string>
|
||||||
<string name="can_delete_source">Can\'t delete the source...</string>
|
<string name="can_delete_source">Can\'t delete the source...</string>
|
||||||
<string name="base_url_error">There was an issue when trying to communicate with your Selfoss Instance. If the issue persists, please get in touch with me.</string>
|
<string name="base_url_error">There was an issue when trying to communicate with your Selfoss Instance. If the issue persists, please get in touch with me.</string>
|
||||||
|
<string name="pref_header_theme">Themes</string>
|
||||||
|
<string name="default_theme">Default</string>
|
||||||
|
<string name="teal_orange_theme">Teal/Orange/Light</string>
|
||||||
|
<string name="cyan_pink_theme">Cyan/Pink/Light</string>
|
||||||
|
<string name="grey_orange_theme">Grey/Orange/Light</string>
|
||||||
|
<string name="blue_amber_theme">Blue/Amber/Light</string>
|
||||||
|
<string name="indigo_pink_theme">Indigo/Pink/Light</string>
|
||||||
|
<string name="red_teal_theme">Red/Teal/Light</string>
|
||||||
|
<string name="teal_orange_dark_theme">Teal/Orange/Dark</string>
|
||||||
|
<string name="cyan_pink_dark_theme">Cyan/Pink/Dark</string>
|
||||||
|
<string name="default_dark_theme">Default/Dark</string>
|
||||||
|
<string name="grey_orange_dark_theme">Grey/Orange/Dark</string>
|
||||||
|
<string name="blue_amber_dark_theme">Blue/Amber/Dark</string>
|
||||||
|
<string name="indigo_pink_dark_theme">Indigo/Pink/Dark</string>
|
||||||
|
<string name="red_teal_dark_theme">Red/Teal/Dark</string>
|
||||||
</resources>
|
</resources>
|
6
app/src/main/res/values/attrs.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<declare-styleable name="Theme">
|
||||||
|
<attr name="colorAccentDark" format="reference|color" />
|
||||||
|
</declare-styleable>
|
||||||
|
</resources>
|
@ -118,4 +118,19 @@
|
|||||||
<string name="menu_home_search">Search</string>
|
<string name="menu_home_search">Search</string>
|
||||||
<string name="can_delete_source">Can\'t delete the source...</string>
|
<string name="can_delete_source">Can\'t delete the source...</string>
|
||||||
<string name="base_url_error">There was an issue when trying to communicate with your Selfoss Instance. If the issue persists, please get in touch with me.</string>
|
<string name="base_url_error">There was an issue when trying to communicate with your Selfoss Instance. If the issue persists, please get in touch with me.</string>
|
||||||
|
<string name="pref_header_theme">Themes</string>
|
||||||
|
<string name="default_theme">Default</string>
|
||||||
|
<string name="teal_orange_theme">Teal/Orange/Light</string>
|
||||||
|
<string name="cyan_pink_theme">Cyan/Pink/Light</string>
|
||||||
|
<string name="grey_orange_theme">Grey/Orange/Light</string>
|
||||||
|
<string name="blue_amber_theme">Blue/Amber/Light</string>
|
||||||
|
<string name="indigo_pink_theme">Indigo/Pink/Light</string>
|
||||||
|
<string name="red_teal_theme">Red/Teal/Light</string>
|
||||||
|
<string name="teal_orange_dark_theme">Teal/Orange/Dark</string>
|
||||||
|
<string name="cyan_pink_dark_theme">Cyan/Pink/Dark</string>
|
||||||
|
<string name="default_dark_theme">Default/Dark</string>
|
||||||
|
<string name="grey_orange_dark_theme">Grey/Orange/Dark</string>
|
||||||
|
<string name="blue_amber_dark_theme">Blue/Amber/Dark</string>
|
||||||
|
<string name="indigo_pink_dark_theme">Indigo/Pink/Dark</string>
|
||||||
|
<string name="red_teal_dark_theme">Red/Teal/Dark</string>
|
||||||
</resources>
|
</resources>
|
@ -1,23 +1,30 @@
|
|||||||
<resources>
|
<resources>
|
||||||
|
|
||||||
<!-- Base application theme. -->
|
|
||||||
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
|
|
||||||
<!-- Customize your theme here. -->
|
|
||||||
<item name="colorPrimary">@color/colorPrimary</item>
|
|
||||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
|
||||||
<item name="colorAccent">@color/colorAccent</item>
|
|
||||||
<item name="android:textColor">#000000</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
|
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
|
||||||
<item name="android:windowBackground">@drawable/background_splash</item>
|
<item name="android:windowBackground">@drawable/background_splash</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="NoBar" parent="Theme.AppCompat.Light.NoActionBar">
|
<style name="NoBar" parent="MaterialDrawerTheme.Light">
|
||||||
<item name="colorPrimary">@color/colorPrimary</item>
|
<item name="colorPrimary">@color/colorPrimary</item>
|
||||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||||
<item name="colorAccent">@color/colorAccent</item>
|
<item name="colorAccent">@color/colorAccent</item>
|
||||||
<item name="android:textColor">#000000</item>
|
<item name="colorAccentDark">@color/colorAccentDark</item>
|
||||||
|
<item name="cardBackgroundColor">@color/white</item>
|
||||||
|
<item name="android:colorBackground">@color/md_grey_50</item>
|
||||||
|
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
||||||
|
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="NoBarDark" parent="MaterialDrawerTheme">
|
||||||
|
<item name="colorPrimary">@color/colorPrimary</item>
|
||||||
|
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||||
|
<item name="colorAccent">@color/colorAccent</item>
|
||||||
|
<item name="colorAccentDark">@color/colorAccentDark</item>
|
||||||
|
<item name="cardBackgroundColor">@color/md_grey_800</item>
|
||||||
|
<item name="android:colorBackground">#303030</item>
|
||||||
|
<item name="bnbBackgroundColor">@color/md_grey_900</item>
|
||||||
|
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
||||||
|
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<!-- ToolBar -->
|
<!-- ToolBar -->
|
||||||
@ -29,4 +36,144 @@
|
|||||||
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>-->
|
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>-->
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
<style name="NoBarBlueAmber" parent="MaterialDrawerTheme.Light">
|
||||||
|
<item name="colorPrimary">@color/md_blue_500</item>
|
||||||
|
<item name="colorPrimaryDark">@color/md_blue_700</item>
|
||||||
|
<item name="colorAccent">@color/md_amber_500</item>
|
||||||
|
<item name="colorAccentDark">@color/md_amber_700</item>
|
||||||
|
<item name="cardBackgroundColor">@color/white</item>
|
||||||
|
<item name="android:colorBackground">@color/md_grey_50</item>
|
||||||
|
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
||||||
|
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="NoBarBlueAmberDark" parent="MaterialDrawerTheme">
|
||||||
|
<item name="colorPrimary">@color/md_blue_500</item>
|
||||||
|
<item name="colorPrimaryDark">@color/md_blue_700</item>
|
||||||
|
<item name="colorAccent">@color/md_amber_500</item>
|
||||||
|
<item name="colorAccentDark">@color/md_amber_700</item>
|
||||||
|
<item name="cardBackgroundColor">@color/md_grey_800</item>
|
||||||
|
<item name="android:colorBackground">#303030</item>
|
||||||
|
<item name="bnbBackgroundColor">@color/md_grey_900</item>
|
||||||
|
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
||||||
|
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="NoBarGreyOrange" parent="MaterialDrawerTheme.Light">
|
||||||
|
<item name="colorPrimary">@color/md_blue_grey_500</item>
|
||||||
|
<item name="colorPrimaryDark">@color/md_blue_grey_700</item>
|
||||||
|
<item name="colorAccent">@color/md_deep_orange_500</item>
|
||||||
|
<item name="colorAccentDark">@color/md_deep_orange_700</item>
|
||||||
|
<item name="cardBackgroundColor">@color/white</item>
|
||||||
|
<item name="android:colorBackground">@color/md_grey_50</item>
|
||||||
|
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
||||||
|
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="NoBarGreyOrangeDark" parent="MaterialDrawerTheme">
|
||||||
|
<item name="colorPrimary">@color/md_blue_grey_500</item>
|
||||||
|
<item name="colorPrimaryDark">@color/md_blue_grey_700</item>
|
||||||
|
<item name="colorAccent">@color/md_deep_orange_500</item>
|
||||||
|
<item name="colorAccentDark">@color/md_deep_orange_700</item>
|
||||||
|
<item name="cardBackgroundColor">@color/md_grey_800</item>
|
||||||
|
<item name="android:colorBackground">#303030</item>
|
||||||
|
<item name="bnbBackgroundColor">@color/md_grey_900</item>
|
||||||
|
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
||||||
|
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="NoBarIndigoPink" parent="MaterialDrawerTheme.Light">
|
||||||
|
<item name="colorPrimary">@color/md_indigo_500</item>
|
||||||
|
<item name="colorPrimaryDark">@color/md_indigo_700</item>
|
||||||
|
<item name="colorAccent">@color/md_pink_500</item>
|
||||||
|
<item name="colorAccentDark">@color/md_pink_700</item>
|
||||||
|
<item name="cardBackgroundColor">@color/white</item>
|
||||||
|
<item name="android:colorBackground">@color/md_grey_50</item>
|
||||||
|
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
||||||
|
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="NoBarIndigoPinkDark" parent="MaterialDrawerTheme">
|
||||||
|
<item name="colorPrimary">@color/md_indigo_500</item>
|
||||||
|
<item name="colorPrimaryDark">@color/md_indigo_700</item>
|
||||||
|
<item name="colorAccent">@color/md_pink_500</item>
|
||||||
|
<item name="colorAccentDark">@color/md_pink_700</item>
|
||||||
|
<item name="cardBackgroundColor">@color/md_grey_800</item>
|
||||||
|
<item name="android:colorBackground">#303030</item>
|
||||||
|
<item name="bnbBackgroundColor">@color/md_grey_900</item>
|
||||||
|
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
||||||
|
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="NoBarRedTeal" parent="MaterialDrawerTheme.Light">
|
||||||
|
<item name="colorPrimary">@color/md_red_500</item>
|
||||||
|
<item name="colorPrimaryDark">@color/md_red_700</item>
|
||||||
|
<item name="colorAccent">@color/md_teal_500</item>
|
||||||
|
<item name="colorAccentDark">@color/md_teal_700</item>
|
||||||
|
<item name="cardBackgroundColor">@color/white</item>
|
||||||
|
<item name="android:colorBackground">@color/md_grey_50</item>
|
||||||
|
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
||||||
|
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="NoBarRedTealDark" parent="MaterialDrawerTheme">
|
||||||
|
<item name="colorPrimary">@color/md_red_500</item>
|
||||||
|
<item name="colorPrimaryDark">@color/md_red_700</item>
|
||||||
|
<item name="colorAccent">@color/md_teal_500</item>
|
||||||
|
<item name="colorAccentDark">@color/md_teal_700</item>
|
||||||
|
<item name="cardBackgroundColor">@color/md_grey_800</item>
|
||||||
|
<item name="android:colorBackground">#303030</item>
|
||||||
|
<item name="bnbBackgroundColor">@color/md_grey_900</item>
|
||||||
|
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
||||||
|
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="NoBarCyanPink" parent="MaterialDrawerTheme.Light">
|
||||||
|
<item name="colorPrimary">@color/md_cyan_500</item>
|
||||||
|
<item name="colorPrimaryDark">@color/md_cyan_700</item>
|
||||||
|
<item name="colorAccent">@color/md_pink_500</item>
|
||||||
|
<item name="colorAccentDark">@color/md_pink_700</item>
|
||||||
|
<item name="cardBackgroundColor">@color/white</item>
|
||||||
|
<item name="android:colorBackground">@color/md_grey_50</item>
|
||||||
|
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
||||||
|
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="NoBarCyanPinkDark" parent="MaterialDrawerTheme">
|
||||||
|
<item name="colorPrimary">@color/md_cyan_500</item>
|
||||||
|
<item name="colorPrimaryDark">@color/md_cyan_700</item>
|
||||||
|
<item name="colorAccent">@color/md_pink_500</item>
|
||||||
|
<item name="colorAccentDark">@color/md_pink_700</item>
|
||||||
|
<item name="cardBackgroundColor">@color/md_grey_800</item>
|
||||||
|
<item name="android:colorBackground">#303030</item>
|
||||||
|
<item name="bnbBackgroundColor">@color/md_grey_900</item>
|
||||||
|
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
||||||
|
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
<style name="NoBarTealOrange" parent="MaterialDrawerTheme.Light">
|
||||||
|
<item name="colorPrimary">@color/md_teal_500</item>
|
||||||
|
<item name="colorPrimaryDark">@color/md_teal_700</item>
|
||||||
|
<item name="colorAccent">@color/md_orange_500</item>
|
||||||
|
<item name="colorAccentDark">@color/md_orange_700</item>
|
||||||
|
<item name="cardBackgroundColor">@color/white</item>
|
||||||
|
<item name="android:colorBackground">@color/md_grey_50</item>
|
||||||
|
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
||||||
|
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="NoBarTealOrangeDark" parent="MaterialDrawerTheme">
|
||||||
|
<item name="colorPrimary">@color/md_teal_500</item>
|
||||||
|
<item name="colorPrimaryDark">@color/md_teal_700</item>
|
||||||
|
<item name="colorAccent">@color/md_orange_500</item>
|
||||||
|
<item name="colorAccentDark">@color/md_orange_700</item>
|
||||||
|
<item name="cardBackgroundColor">@color/md_grey_800</item>
|
||||||
|
<item name="android:colorBackground">#303030</item>
|
||||||
|
<item name="bnbBackgroundColor">@color/md_grey_900</item>
|
||||||
|
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
||||||
|
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -5,6 +5,11 @@
|
|||||||
android:icon="@drawable/ic_settings_black_24dp"
|
android:icon="@drawable/ic_settings_black_24dp"
|
||||||
android:title="@string/pref_header_general"/>
|
android:title="@string/pref_header_general"/>
|
||||||
|
|
||||||
|
<header
|
||||||
|
android:id="@+id/theme_change"
|
||||||
|
android:icon="@drawable/ic_color_lens_black_24dp"
|
||||||
|
android:title="@string/pref_header_theme"/>
|
||||||
|
|
||||||
<header
|
<header
|
||||||
android:fragment="apps.amine.bou.readerforselfoss.settings.SettingsActivity$LinksPreferenceFragment"
|
android:fragment="apps.amine.bou.readerforselfoss.settings.SettingsActivity$LinksPreferenceFragment"
|
||||||
android:icon="@drawable/ic_info_black_24"
|
android:icon="@drawable/ic_info_black_24"
|
||||||
|
@ -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.3'
|
ext.kotlin_version = '1.1.3-2'
|
||||||
repositories {
|
repositories {
|
||||||
maven { url 'https://maven.google.com' }
|
maven { url 'https://maven.google.com' }
|
||||||
jcenter()
|
jcenter()
|
||||||
|
56
circle.yml
@ -1,56 +0,0 @@
|
|||||||
machine:
|
|
||||||
timezone: Europe/Paris
|
|
||||||
java:
|
|
||||||
version: 'oraclejdk8'
|
|
||||||
environment:
|
|
||||||
ANDROID_HOME: /usr/local/android-sdk-linux
|
|
||||||
PATH: ANDROID_HOME:$ANDROID_HOME/platform-tools:$ANDROID_BUUILD:$ANDROID_HOME/tools:$PATH
|
|
||||||
_JAVA_OPTIONS: "-Xms512m -Xmx1024m"
|
|
||||||
GRADLE_OPTS: '-Dorg.gradle.jvmargs="-Xmx2048m -XX:+HeapDumpOnOutOfMemoryError"'
|
|
||||||
|
|
||||||
dependencies:
|
|
||||||
pre:
|
|
||||||
- touch app/google-services.json
|
|
||||||
- echo $GOOGLE_SERVICES_JSON > app/google-services.json
|
|
||||||
- touch app/src/main/res/values/secrets.xml
|
|
||||||
- echo $SECRETS_XML > app/src/main/res/values/secrets.xml
|
|
||||||
- mkdir app/src/main/res/mipmap-hdpi
|
|
||||||
- convert -size 72x72 xc:white app/src/main/res/mipmap-hdpi/ic_launcher.png
|
|
||||||
- mkdir app/src/main/res/mipmap-mdpi
|
|
||||||
- convert -size 48x48 xc:white app/src/main/res/mipmap-mdpi/ic_launcher.png
|
|
||||||
- mkdir app/src/main/res/mipmap-xhdpi
|
|
||||||
- convert -size 96x96 xc:white app/src/main/res/mipmap-xhdpi/ic_launcher.png
|
|
||||||
- mkdir app/src/main/res/mipmap-xxhdpi
|
|
||||||
- convert -size 192x192 xc:white app/src/main/res/mipmap-xxhdpi/ic_launcher.png
|
|
||||||
- mkdir app/src/main/res/mipmap-xxxhdpi
|
|
||||||
- convert -size 512x512 xc:white app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
|
|
||||||
|
|
||||||
cache_directories:
|
|
||||||
- ~/.gradle
|
|
||||||
- ~/.android
|
|
||||||
|
|
||||||
override:
|
|
||||||
- echo y | android update sdk --no-ui --filter "android-26,build-tools-26.0.0"
|
|
||||||
- echo y | android update sdk --no-ui --all --filter "platform-tools, tools"
|
|
||||||
- echo y | android update sdk --no-ui --all --filter "android-26, build-tools-26.0.0"
|
|
||||||
- echo y | android update sdk --no-ui --all --filter "extra-android-m2repository"
|
|
||||||
- echo y | android update sdk --no-ui --all --filter "extra-android-support"
|
|
||||||
- echo y | android update sdk --no-ui --all --filter "extra-google-m2repository"
|
|
||||||
- echo y | android update sdk --no-ui --all --filter "extra-google-google_play_services"
|
|
||||||
|
|
||||||
test:
|
|
||||||
override:
|
|
||||||
- (TERM="dumb" ./gradlew assemble --configure-on-demand --no-daemon -P crashlyticsdemoApikey=$FABRIC_API_KEY -P crashlyticsdemoApisecret=$FABRIC_API_SECRET -P appLoginUrl=$LOGIN_URL -P appLoginUsername=$LOGIN_USER_NAME -P appLoginPassword=$LOGIN_PASSWORD -PdisablePreDex -Pandroid.threadPoolSize=1 -Porg.gradle.parallel=false):
|
|
||||||
timeout: 1440
|
|
||||||
- emulator -avd circleci-android22 -no-window:
|
|
||||||
background: true
|
|
||||||
parallel: true
|
|
||||||
- circle-android wait-for-boot
|
|
||||||
- sleep 30
|
|
||||||
- adb shell input keyevent 82
|
|
||||||
- adb shell input tap 650 300
|
|
||||||
- (TERM="dumb" ./gradlew connectedAndroidTest --configure-on-demand --no-daemon --stacktrace -P crashlyticsdemoApikey=$FABRIC_API_KEY -P crashlyticsdemoApisecret=$FABRIC_API_SECRET -P appLoginUrl=$LOGIN_URL -P appLoginUsername=$LOGIN_USER_NAME -P appLoginPassword=$LOGIN_PASSWORD -PdisablePreDex -Pandroid.threadPoolSize=1 -Porg.gradle.parallel=false):
|
|
||||||
timeout: 1440
|
|
||||||
- cp -r app/build/outputs $CIRCLE_ARTIFACTS
|
|
||||||
- cp -r app/build/reports/androidTests $CIRCLE_ARTIFACTS
|
|
||||||
- cp -r app/build/outputs/androidTest-results/* $CIRCLE_TEST_REPORTS
|
|