Merge branch 'dejal' into catalyst

This commit is contained in:
David Sinclair 2020-12-21 17:08:02 -08:00
commit aee59c87cf
147 changed files with 1624 additions and 1384 deletions

View file

@ -29,7 +29,7 @@ def FreshenHomepage():
sub.save() sub.save()
sub.calculate_feed_scores(silent=True) sub.calculate_feed_scores(silent=True)
@app.task(name='clean_analytics', time_limit=720*10) @app.task(name='clean-analytics', time_limit=720*10)
def CleanAnalytics(): def CleanAnalytics():
logging.debug(" ---> Cleaning analytics... %s feed fetches" % ( logging.debug(" ---> Cleaning analytics... %s feed fetches" % (
settings.MONGOANALYTICSDB.nbanalytics.feed_fetches.count(), settings.MONGOANALYTICSDB.nbanalytics.feed_fetches.count(),

View file

@ -1599,6 +1599,14 @@ class MSharedStory(mongo.DynamicDocument):
socialsub.save() socialsub.save()
self.delete() self.delete()
def publish_to_subscribers(self):
try:
r = redis.Redis(connection_pool=settings.REDIS_PUBSUB_POOL)
r.publish("social:%s:story" % (self.user_id), '%s,%s' % (self.story_hash, self.shared_date.strftime('%s')))
logging.debug(" ***> [%-30s] ~BMPublishing to Redis for real-time." % (Feed.get_by_id(self.story_feed_id).title[:30],))
except redis.ConnectionError:
logging.debug(" ***> [%-30s] ~BMRedis is unavailable for real-time." % (Feed.get_by_id(self.story_feed_id).title[:30],))
@classmethod @classmethod
def feed_quota(cls, user_id, story_hash, feed_id=None, days=1, quota=1): def feed_quota(cls, user_id, story_hash, feed_id=None, days=1, quota=1):
@ -2763,7 +2771,7 @@ class MSocialServices(mongo.Document):
return return
return True return True
class MInteraction(mongo.Document): class MInteraction(mongo.Document):
user_id = mongo.IntField() user_id = mongo.IntField()

View file

@ -611,6 +611,7 @@ def mark_story_as_shared(request):
} }
try: try:
shared_story = MSharedStory.objects.create(**story_db) shared_story = MSharedStory.objects.create(**story_db)
shared_story.publish_to_subscribers()
except NotUniqueError: except NotUniqueError:
shared_story = MSharedStory.objects.get(story_guid=story_db['story_guid'], shared_story = MSharedStory.objects.get(story_guid=story_db['story_guid'],
user_id=story_db['user_id']) user_id=story_db['user_id'])
@ -667,6 +668,7 @@ def mark_story_as_shared(request):
EmailFirstShare.apply_async(kwargs=dict(user_id=request.user.pk)) EmailFirstShare.apply_async(kwargs=dict(user_id=request.user.pk))
if format == 'html': if format == 'html':
stories = MSharedStory.attach_users_to_stories(stories, profiles) stories = MSharedStory.attach_users_to_stories(stories, profiles)
return render(request, 'social/social_story.xhtml', { return render(request, 'social/social_story.xhtml', {

View file

@ -126,15 +126,13 @@
<activity <activity
android:name=".activity.FolderReading"/> android:name=".activity.FolderReading"/>
<activity
android:name=".activity.InAppBrowser" />
<activity <activity
android:name=".activity.Premium" /> android:name=".activity.Premium" />
<activity <activity
android:name=".activity.MuteConfig" android:name=".activity.MuteConfig"
android:launchMode="singleTask"/> android:launchMode="singleTask"
android:label="@string/mute_sites"/>
<activity <activity
android:name=".activity.SearchForFeeds" android:launchMode="singleTop" > android:name=".activity.SearchForFeeds" android:launchMode="singleTop" >

View file

@ -28,3 +28,20 @@ blockquote a, blockquote a span {
.NB-story > table { .NB-story > table {
background-color: #1A1A1A !important; background-color: #1A1A1A !important;
} }
ins {
background-color: #069000;
text-decoration: none;
}
del {
background-color: #920000;
}
.NB-story ins {
background-color: #069000;
text-decoration: none;
}
.NB-story del {
background-color: #920000;
}

View file

@ -27,4 +27,21 @@ blockquote a, blockquote a span {
.NB-story > table { .NB-story > table {
background-color: #4C4C4C !important; background-color: #4C4C4C !important;
}
ins {
background-color: #069000;
text-decoration: none;
}
del {
background-color: #920000;
}
.NB-story ins {
background-color: #069000;
text-decoration: none;
}
.NB-story del {
background-color: #920000;
} }

View file

@ -23,4 +23,21 @@ pre, blockquote {
body, html { body, html {
background-color: #FFF; background-color: #FFF;
} }
}
ins {
background-color: #BEE8BC;
text-decoration: none;
}
del {
background-color: #f5c3c3
}
.NB-story ins {
background-color: #BEE8BC;
text-decoration: none
}
.NB-story del {
background-color: #f5c3c3;
} }

View file

@ -63,13 +63,4 @@ pre, blockquote {
margin: 0.6em; margin: 0.6em;
word-wrap: break-word !important; word-wrap: break-word !important;
white-space: pre-wrap !important; white-space: pre-wrap !important;
} }
/* these are the diff blocks produced by NewsBlur */
ins {
text-decoration: none;
}
del {
display: none;
}

View file

@ -1,5 +1,5 @@
buildscript { buildscript {
ext.kotlin_version = '1.4.10' ext.kotlin_version = '1.4.20'
repositories { repositories {
mavenCentral() mavenCentral()
maven { maven {
@ -9,7 +9,7 @@ buildscript {
google() google()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:4.1.0' classpath 'com.android.tools.build:gradle:4.1.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
} }
} }
@ -34,10 +34,13 @@ dependencies {
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.0' implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation 'com.google.code.gson:gson:2.8.6' implementation 'com.google.code.gson:gson:2.8.6'
implementation 'com.android.billingclient:billing:3.0.1' implementation 'com.android.billingclient:billing:3.0.2'
implementation 'nl.dionsegijn:konfetti:1.2.2' implementation 'nl.dionsegijn:konfetti:1.2.2'
implementation 'com.github.jinatonic.confetti:confetti:1.1.2' implementation 'com.github.jinatonic.confetti:confetti:1.1.2'
implementation 'com.google.android.play:core:1.8.3' implementation 'com.google.android.play:core:1.9.0'
implementation "com.google.android.material:material:1.2.1"
implementation "androidx.preference:preference-ktx:1.1.1"
implementation "androidx.browser:browser:1.3.0"
} }
android { android {
@ -46,14 +49,15 @@ android {
applicationId "com.newsblur" applicationId "com.newsblur"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 29 targetSdkVersion 29
versionCode 177 versionCode 180
versionName "10.1.1" versionName "10.2.1b1"
} }
compileOptions.with { compileOptions.with {
sourceCompatibility = JavaVersion.VERSION_1_8 sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8
} }
android.buildFeatures.viewBinding = true android.buildFeatures.viewBinding = true
android.buildFeatures.dataBinding = true
sourceSets { sourceSets {
main { main {

View file

@ -4,6 +4,6 @@
android:viewportWidth="24" android:viewportWidth="24"
android:viewportHeight="24"> android:viewportHeight="24">
<path <path
android:fillColor="#A6A6A6" android:fillColor="@color/gray55"
android:pathData="M19,18l2,1V3c0,-1.1 -0.9,-2 -2,-2H8.99C7.89,1 7,1.9 7,3h10c1.1,0 2,0.9 2,2v13zM15,5H5c-1.1,0 -2,0.9 -2,2v16l7,-3 7,3V7c0,-1.1 -0.9,-2 -2,-2z" /> android:pathData="M19,18l2,1V3c0,-1.1 -0.9,-2 -2,-2H8.99C7.89,1 7,1.9 7,3h10c1.1,0 2,0.9 2,2v13zM15,5H5c-1.1,0 -2,0.9 -2,2v16l7,-3 7,3V7c0,-1.1 -0.9,-2 -2,-2z" />
</vector> </vector>

View file

@ -4,6 +4,6 @@
android:viewportWidth="24" android:viewportWidth="24"
android:viewportHeight="24"> android:viewportHeight="24">
<path <path
android:fillColor="#A6A6A6" android:fillColor="@color/gray55"
android:pathData="M8.1,13.34l2.83,-2.83L3.91,3.5c-1.56,1.56 -1.56,4.09 0,5.66l4.19,4.18zM14.88,11.53c1.53,0.71 3.68,0.21 5.27,-1.38 1.91,-1.91 2.28,-4.65 0.81,-6.12 -1.46,-1.46 -4.2,-1.1 -6.12,0.81 -1.59,1.59 -2.09,3.74 -1.38,5.27L3.7,19.87l1.41,1.41L12,14.41l6.88,6.88 1.41,-1.41L13.41,13l1.47,-1.47z" /> android:pathData="M8.1,13.34l2.83,-2.83L3.91,3.5c-1.56,1.56 -1.56,4.09 0,5.66l4.19,4.18zM14.88,11.53c1.53,0.71 3.68,0.21 5.27,-1.38 1.91,-1.91 2.28,-4.65 0.81,-6.12 -1.46,-1.46 -4.2,-1.1 -6.12,0.81 -1.59,1.59 -2.09,3.74 -1.38,5.27L3.7,19.87l1.41,1.41L12,14.41l6.88,6.88 1.41,-1.41L13.41,13l1.47,-1.47z" />
</vector> </vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 509 B

View file

@ -4,6 +4,6 @@
android:viewportWidth="24" android:viewportWidth="24"
android:viewportHeight="24"> android:viewportHeight="24">
<path <path
android:fillColor="#A6A6A6" android:fillColor="@color/gray55"
android:pathData="M10,4H4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V8c0,-1.1 -0.9,-2 -2,-2h-8l-2,-2z" /> android:pathData="M10,4H4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V8c0,-1.1 -0.9,-2 -2,-2h-8l-2,-2z" />
</vector> </vector>

View file

@ -4,6 +4,6 @@
android:viewportWidth="24" android:viewportWidth="24"
android:viewportHeight="24"> android:viewportHeight="24">
<path <path
android:fillColor="#A6A6A6" android:fillColor="@color/gray55"
android:pathData="M21,9A1,1 0,0 1,22 10A1,1 0,0 1,21 11H16.53L16.4,12.21L14.2,17.15C14,17.65 13.47,18 12.86,18H8.5C7.7,18 7,17.27 7,16.5V10C7,9.61 7.16,9.26 7.43,9L11.63,4.1L12.4,4.84C12.6,5.03 12.72,5.29 12.72,5.58L12.69,5.8L11,9H21M2,18V10H5V18H2Z" /> android:pathData="M21,9A1,1 0,0 1,22 10A1,1 0,0 1,21 11H16.53L16.4,12.21L14.2,17.15C14,17.65 13.47,18 12.86,18H8.5C7.7,18 7,17.27 7,16.5V10C7,9.61 7.16,9.26 7.43,9L11.63,4.1L12.4,4.84C12.6,5.03 12.72,5.29 12.72,5.58L12.69,5.8L11,9H21M2,18V10H5V18H2Z" />
</vector> </vector>

View file

@ -4,6 +4,6 @@
android:viewportWidth="24" android:viewportWidth="24"
android:viewportHeight="24"> android:viewportHeight="24">
<path <path
android:fillColor="#A6A6A6" android:fillColor="@color/gray55"
android:pathData="M18,8h-1L17,6c0,-2.76 -2.24,-5 -5,-5S7,3.24 7,6v2L6,8c-1.1,0 -2,0.9 -2,2v10c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L20,10c0,-1.1 -0.9,-2 -2,-2zM12,17c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2zM15.1,8L8.9,8L8.9,6c0,-1.71 1.39,-3.1 3.1,-3.1 1.71,0 3.1,1.39 3.1,3.1v2z" /> android:pathData="M18,8h-1L17,6c0,-2.76 -2.24,-5 -5,-5S7,3.24 7,6v2L6,8c-1.1,0 -2,0.9 -2,2v10c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L20,10c0,-1.1 -0.9,-2 -2,-2zM12,17c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2zM15.1,8L8.9,8L8.9,6c0,-1.71 1.39,-3.1 3.1,-3.1 1.71,0 3.1,1.39 3.1,3.1v2z" />
</vector> </vector>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 389 B

View file

@ -4,9 +4,9 @@
android:viewportWidth="24" android:viewportWidth="24"
android:viewportHeight="24"> android:viewportHeight="24">
<path <path
android:fillColor="#A6A6A6" android:fillColor="@color/gray55"
android:pathData="M6.18,17.82m-2.18,0a2.18,2.18 0,1 1,4.36 0a2.18,2.18 0,1 1,-4.36 0" /> android:pathData="M6.18,17.82m-2.18,0a2.18,2.18 0,1 1,4.36 0a2.18,2.18 0,1 1,-4.36 0" />
<path <path
android:fillColor="#A6A6A6" android:fillColor="@color/gray55"
android:pathData="M4,4.44v2.83c7.03,0 12.73,5.7 12.73,12.73h2.83c0,-8.59 -6.97,-15.56 -15.56,-15.56zM4,10.1v2.83c3.9,0 7.07,3.17 7.07,7.07h2.83c0,-5.47 -4.43,-9.9 -9.9,-9.9z" /> android:pathData="M4,4.44v2.83c7.03,0 12.73,5.7 12.73,12.73h2.83c0,-8.59 -6.97,-15.56 -15.56,-15.56zM4,10.1v2.83c3.9,0 7.07,3.17 7.07,7.07h2.83c0,-5.47 -4.43,-9.9 -9.9,-9.9z" />
</vector> </vector>

View file

@ -4,6 +4,6 @@
android:viewportWidth="24" android:viewportWidth="24"
android:viewportHeight="24"> android:viewportHeight="24">
<path <path
android:fillColor="#A6A6A6" android:fillColor="@color/gray55"
android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z" /> android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z" />
</vector> </vector>

View file

@ -4,6 +4,6 @@
android:viewportWidth="24" android:viewportWidth="24"
android:viewportHeight="24"> android:viewportHeight="24">
<path <path
android:fillColor="#A6A6A6" android:fillColor="@color/gray55"
android:pathData="M12,4L12,1L8,5l4,4L12,6c3.31,0 6,2.69 6,6 0,1.01 -0.25,1.97 -0.7,2.8l1.46,1.46C19.54,15.03 20,13.57 20,12c0,-4.42 -3.58,-8 -8,-8zM12,18c-3.31,0 -6,-2.69 -6,-6 0,-1.01 0.25,-1.97 0.7,-2.8L5.24,7.74C4.46,8.97 4,10.43 4,12c0,4.42 3.58,8 8,8v3l4,-4 -4,-4v3z" /> android:pathData="M12,4L12,1L8,5l4,4L12,6c3.31,0 6,2.69 6,6 0,1.01 -0.25,1.97 -0.7,2.8l1.46,1.46C19.54,15.03 20,13.57 20,12c0,-4.42 -3.58,-8 -8,-8zM12,18c-3.31,0 -6,-2.69 -6,-6 0,-1.01 0.25,-1.97 0.7,-2.8L5.24,7.74C4.46,8.97 4,10.43 4,12c0,4.42 3.58,8 8,8v3l4,-4 -4,-4v3z" />
</vector> </vector>

View file

@ -4,6 +4,6 @@
android:viewportWidth="24" android:viewportWidth="24"
android:viewportHeight="24"> android:viewportHeight="24">
<path <path
android:fillColor="#A6A6A6" android:fillColor="@color/gray55"
android:pathData="M14,17L4,17v2h10v-2zM20,9L4,9v2h16L20,9zM4,15h16v-2L4,13v2zM4,5v2h16L20,5L4,5z" /> android:pathData="M14,17L4,17v2h10v-2zM20,9L4,9v2h16L20,9zM4,15h16v-2L4,13v2zM4,5v2h16L20,5L4,5z" />
</vector> </vector>

View file

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:id="@+id/actionbar_icon"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="4dp"
android:src="@drawable/world" />
<TextView
android:id="@+id/actionbar_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@id/actionbar_icon"
android:ellipsize="end"
android:maxLines="1"
android:textSize="18sp" />
</RelativeLayout>

View file

@ -1,25 +1,35 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout 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_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent">
android:animateLayoutChanges="true"
style="?itemBackground" >
<com.newsblur.view.ProgressThrobber <include layout="@layout/toolbar_newsblur" />
android:id="@+id/loading_throb"
android:layout_width="fill_parent"
android:layout_alignParentTop="true"
android:layout_height="6dp" />
<TextView <RelativeLayout
android:id="@+id/progress_text" style="?layoutBackground"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:layout_alignParentTop="true" android:animateLayoutChanges="true"
android:layout_marginTop="25dp" app:layout_behavior="@string/appbar_scrolling_view_behavior">
android:gravity="center_horizontal"
style="?explainerText" <com.newsblur.view.ProgressThrobber
android:visibility="invisible" android:id="@+id/loading_throb"
android:textSize="16sp" /> android:layout_width="fill_parent"
android:layout_height="6dp"
</RelativeLayout> android:layout_alignParentTop="true" />
<TextView
android:id="@+id/progress_text"
style="?explainerText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="25dp"
android:gravity="center_horizontal"
android:textSize="16sp"
android:visibility="invisible" />
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -1,32 +1,42 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout 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_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent">
android:background="@color/item_background" >
<FrameLayout <include layout="@layout/toolbar_newsblur" />
android:id="@+id/addsocial_container"
<RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginTop="10dp" android:background="@color/item_background"
android:gravity="center" app:layout_behavior="@string/appbar_scrolling_view_behavior">
android:padding="20dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:gravity="right"
android:padding="10dp" >
<Button <FrameLayout
android:id="@+id/login_addsocial_nextstep" android:id="@+id/addsocial_container"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:gravity="center"
android:padding="20dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginRight="10dp" android:layout_alignParentBottom="true"
android:text="Start Reading" android:gravity="right"
android:textSize="14sp" /> android:padding="10dp">
</LinearLayout>
</RelativeLayout> <Button
android:id="@+id/login_addsocial_nextstep"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:text="Start Reading"
android:textSize="14sp" />
</LinearLayout>
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -1,25 +1,34 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="fill_parent" android:layout_width="match_parent"
style="?listBackground" > android:layout_height="match_parent">
<include layout="@layout/toolbar_newsblur" />
<TextView
android:id="@+id/empty_view" <RelativeLayout
android:layout_width="match_parent" style="?listBackground"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:gravity="center"
android:text="@string/empty_search_notice"
android:textColor="@color/text"
android:textSize="13sp"
android:textStyle="italic" />
<ListView
android:id="@+id/feed_result_list"
android:name="com.newsblur.fragment.FolderListFragment"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" /> android:layout_height="fill_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
</RelativeLayout> <TextView
android:id="@+id/empty_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:gravity="center"
android:text="@string/empty_search_notice"
android:textColor="@color/text"
android:textSize="13sp"
android:textStyle="italic" />
<ListView
android:id="@+id/feed_result_list"
android:name="com.newsblur.fragment.FolderListFragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ProgressBar
android:id="@+id/progress_bar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-6dp"
android:max="100"
android:visibility="gone"/>
</FrameLayout>

View file

@ -1,50 +1,57 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout 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_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent">
android:animateLayoutChanges="true"
style="?itemBackground" >
<EditText
android:id="@+id/itemlist_search_query"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:textSize="16sp"
android:hint="@string/story_search_hint"
android:drawableLeft="@android:drawable/ic_menu_search"
android:inputType="textNoSuggestions"
android:imeOptions="actionSearch"
android:visibility="gone"
android:animateLayoutChanges="true"
/>
<LinearLayout <include layout="@layout/toolbar_newsblur" />
android:id="@+id/activity_itemlist_container"
<RelativeLayout
style="?layoutBackground"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="horizontal" android:animateLayoutChanges="true"
android:layout_below="@id/itemlist_search_query" app:layout_behavior="@string/appbar_scrolling_view_behavior">
/>
<include layout="@layout/row_fleuron" <EditText
android:id="@+id/footer_fleuron" android:id="@+id/itemlist_search_query"
android:layout_width="match_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/itemlist_search_query" android:layout_alignParentTop="true"
android:visibility="gone"/> android:animateLayoutChanges="true"
android:drawableLeft="@android:drawable/ic_menu_search"
android:hint="@string/story_search_hint"
android:imeOptions="actionSearch"
android:inputType="textNoSuggestions"
android:textSize="16sp"
android:visibility="gone" />
<TextView <LinearLayout
android:id="@+id/itemlist_sync_status" android:id="@+id/activity_itemlist_container"
android:layout_width="fill_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:layout_alignParentBottom="true" android:layout_below="@id/itemlist_search_query"
android:padding="2dp" android:orientation="horizontal" />
android:textSize="14sp"
android:gravity="center"
android:textColor="@color/status_overlay_text"
android:background="@color/status_overlay_background"
android:text="SYNC STATUS"
/>
</RelativeLayout> <include
android:id="@+id/footer_fleuron"
layout="@layout/row_fleuron"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/itemlist_search_query"
android:visibility="gone" />
<TextView
android:id="@+id/itemlist_sync_status"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/status_overlay_background"
android:gravity="center"
android:padding="2dp"
android:text="SYNC STATUS"
android:textColor="@color/status_overlay_text"
android:textSize="14sp" />
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -9,9 +9,9 @@
<RelativeLayout <RelativeLayout
android:id="@+id/main_top_bar" android:id="@+id/main_top_bar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="50dp" android:layout_height="?attr/actionBarSize"
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
style="?actionbarBackground" > android:background="?colorPrimary" >
<ImageView <ImageView
android:id="@+id/main_user_image" android:id="@+id/main_user_image"
@ -75,7 +75,19 @@
android:layout_marginLeft="3dp" android:layout_marginLeft="3dp"
android:textSize="14sp" /> android:textSize="14sp" />
<Button <ImageButton
android:id="@+id/main_search_feeds_button"
android:layout_width="30dp"
android:layout_height="30dp"
android:padding="2dp"
android:layout_alignParentTop="true"
android:layout_margin="8dp"
android:layout_toStartOf="@+id/main_profile_button"
android:layout_toLeftOf="@+id/main_profile_button"
android:background="@drawable/ic_search"
android:contentDescription="@string/menu_search_feeds" />
<ImageButton
android:id="@+id/main_profile_button" android:id="@+id/main_profile_button"
android:layout_width="34dp" android:layout_width="34dp"
android:layout_height="34dp" android:layout_height="34dp"
@ -98,7 +110,7 @@
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
android:tag="feedIntelligenceSelector" /> android:tag="feedIntelligenceSelector" />
<Button <ImageButton
android:id="@+id/main_menu_button" android:id="@+id/main_menu_button"
android:layout_width="34dp" android:layout_width="34dp"
android:layout_height="34dp" android:layout_height="34dp"
@ -108,7 +120,7 @@
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
android:layout_alignParentRight="true" /> android:layout_alignParentRight="true" />
<Button <ImageButton
android:id="@+id/main_add_button" android:id="@+id/main_add_button"
android:layout_width="36dp" android:layout_width="36dp"
android:layout_height="36dp" android:layout_height="36dp"

View file

@ -1,60 +1,68 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout 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_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent">
android:animateLayoutChanges="true">
<include layout="@layout/toolbar_newsblur" />
<FrameLayout <FrameLayout
android:id="@+id/container_sites_count"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:paddingStart="4dp" android:animateLayoutChanges="true"
android:paddingTop="16dp" app:layout_behavior="@string/appbar_scrolling_view_behavior">
android:paddingEnd="8dp"
android:paddingBottom="16dp" <FrameLayout
android:visibility="gone"> android:id="@+id/container_sites_count"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="4dp"
android:paddingTop="16dp"
android:paddingEnd="8dp"
android:paddingBottom="16dp"
android:visibility="gone">
<TextView
android:id="@+id/text_reset_sites"
style="?linkText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:padding="4dp"
android:text="@string/mute_config_reset_button"
android:textSize="12sp"
android:textStyle="bold" />
<TextView
android:id="@+id/text_sites"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|center_vertical"
android:text="@string/mute_config_sites"
android:textColor="@color/positive"
android:textSize="12sp"
android:textStyle="bold" />
</FrameLayout>
<ExpandableListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:groupIndicator="@null" />
<TextView <TextView
android:id="@+id/text_reset_sites" android:id="@+id/text_sync_status"
style="?linkText" android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="start" android:layout_gravity="bottom"
android:padding="4dp" android:background="@color/status_overlay_background"
android:text="@string/mute_config_reset_button" android:gravity="center"
android:textSize="12sp" android:padding="2dp"
android:textStyle="bold" /> android:textColor="@color/status_overlay_text"
android:textSize="14sp"
<TextView android:visibility="gone" />
android:id="@+id/text_sites"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|center_vertical"
android:text="@string/mute_config_sites"
android:textColor="@color/positive"
android:textSize="12sp"
android:textStyle="bold" />
</FrameLayout> </FrameLayout>
<ExpandableListView </androidx.coordinatorlayout.widget.CoordinatorLayout>
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:groupIndicator="@null" />
<TextView
android:id="@+id/text_sync_status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="@color/status_overlay_background"
android:gravity="center"
android:padding="2dp"
android:textColor="@color/status_overlay_text"
android:textSize="14sp"
android:visibility="gone" />
</FrameLayout>

View file

@ -1,293 +1,303 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<FrameLayout <include layout="@layout/toolbar_newsblur" />
<androidx.core.widget.NestedScrollView
android:id="@+id/container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:animateLayoutChanges="true"> app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:id="@+id/container_going_premium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/premium_title_going_premium"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:gravity="center_horizontal"
android:lineSpacingExtra="@dimen/extra_line_spacing"
android:text="@string/premium_subtitle"
android:textSize="14sp"
android:textStyle="bold" />
<TextView
android:id="@+id/text_policies"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:gravity="center_horizontal"
android:lineSpacingExtra="@dimen/extra_line_spacing"
android:text="@string/premium_policies"
android:textSize="12sp" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_hand_pointing_right" />
<LinearLayout
android:id="@+id/container_sub"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:id="@+id/text_sub_title"
style="?linkText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/premium_subscription_title"
android:textSize="14sp" />
<TextView
android:id="@+id/text_sub_price"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginTop="4dp"
android:text="@string/premium_subscription_price"
android:textSize="20sp"
android:textStyle="bold" />
</LinearLayout>
<TextView
android:id="@+id/text_loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/loading"
android:textSize="18sp" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_sync" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="40dp"
android:text="@string/premium_sync" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_folder" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="40dp"
android:text="@string/premium_read_by_folder" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_search" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="40dp"
android:text="@string/premium_search" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_bookmark" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="40dp"
android:text="@string/premium_searchable_tags" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_lock" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="40dp"
android:text="@string/premium_privacy_options" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_rss_feed" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="40dp"
android:text="@string/premium_custom_rss" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_text" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="40dp"
android:text="@string/premium_text_view" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_dining" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="40dp"
android:text="@string/premium_shiloh" />
</FrameLayout>
<ImageView
android:id="@+id/img_shiloh"
android:layout_width="104dp"
android:layout_height="104dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:scaleType="centerCrop" />
</LinearLayout>
<FrameLayout <FrameLayout
android:id="@+id/container_gone_premium"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="gone"> android:animateLayoutChanges="true">
<TextView <LinearLayout
android:id="@+id/container_going_premium"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="120dp" android:orientation="vertical"
android:gravity="center_horizontal" android:padding="16dp">
android:text="@string/premium_title_gone_premium"
android:textSize="40sp"
android:textStyle="bold" />
<TextView <TextView
android:id="@+id/text_subscription_renewal" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/premium_title_going_premium"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:gravity="center_horizontal"
android:lineSpacingExtra="@dimen/extra_line_spacing"
android:text="@string/premium_subtitle"
android:textSize="14sp"
android:textStyle="bold" />
<TextView
android:id="@+id/text_policies"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:gravity="center_horizontal"
android:lineSpacingExtra="@dimen/extra_line_spacing"
android:text="@string/premium_policies"
android:textSize="12sp" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_hand_pointing_right" />
<LinearLayout
android:id="@+id/container_sub"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:id="@+id/text_sub_title"
style="?linkText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/premium_subscription_title"
android:textSize="14sp" />
<TextView
android:id="@+id/text_sub_price"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginTop="4dp"
android:text="@string/premium_subscription_price"
android:textSize="20sp"
android:textStyle="bold" />
</LinearLayout>
<TextView
android:id="@+id/text_loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/loading"
android:textSize="18sp" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_sync" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="40dp"
android:text="@string/premium_sync" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_folder" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="40dp"
android:text="@string/premium_read_by_folder" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_search" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="40dp"
android:text="@string/premium_search" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_bookmark" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="40dp"
android:text="@string/premium_searchable_tags" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_lock" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="40dp"
android:text="@string/premium_privacy_options" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_rss_feed" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="40dp"
android:text="@string/premium_custom_rss" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_text" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="40dp"
android:text="@string/premium_text_view" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_dining" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="40dp"
android:text="@string/premium_shiloh" />
</FrameLayout>
<ImageView
android:id="@+id/img_shiloh"
android:layout_width="104dp"
android:layout_height="104dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:scaleType="centerCrop" />
</LinearLayout>
<FrameLayout
android:id="@+id/container_gone_premium"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="320dp" android:visibility="gone">
android:gravity="center_horizontal"
android:lineSpacingExtra="@dimen/extra_line_spacing" <TextView
android:textSize="18sp" android:layout_width="match_parent"
android:visibility="gone" /> android:layout_height="wrap_content"
android:layout_marginTop="120dp"
android:gravity="center_horizontal"
android:text="@string/premium_title_gone_premium"
android:textSize="40sp"
android:textStyle="bold" />
<TextView
android:id="@+id/text_subscription_renewal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="320dp"
android:gravity="center_horizontal"
android:lineSpacingExtra="@dimen/extra_line_spacing"
android:textSize="18sp"
android:visibility="gone" />
</FrameLayout>
<nl.dionsegijn.konfetti.KonfettiView
android:id="@+id/konfetti"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout> </FrameLayout>
<nl.dionsegijn.konfetti.KonfettiView </androidx.core.widget.NestedScrollView>
android:id="@+id/konfetti"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>
</ScrollView>

View file

@ -1,29 +1,39 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout 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_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent">
style="?itemBackground"
android:orientation="vertical" >
<FrameLayout <include layout="@layout/toolbar_newsblur" />
android:id="@+id/profile_details"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<androidx.viewpager.widget.ViewPager <RelativeLayout
android:id="@+id/activity_details_pager" style="?layoutBackground"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@id/profile_details"> android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<androidx.viewpager.widget.PagerTitleStrip <FrameLayout
android:id="@+id/profile_details"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content" />
android:layout_gravity="top"
style="?activityDetailsPager"
android:paddingTop="4dp"
android:paddingBottom="4dp" />
</androidx.viewpager.widget.ViewPager> <androidx.viewpager.widget.ViewPager
android:id="@+id/activity_details_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/profile_details">
</RelativeLayout> <androidx.viewpager.widget.PagerTitleStrip
style="?activityDetailsPager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:paddingTop="4dp"
android:paddingBottom="4dp" />
</androidx.viewpager.widget.ViewPager>
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -1,114 +1,118 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout 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_width="match_parent"
android:layout_height="match_parent" > android:layout_height="match_parent">
<TextView <include layout="@layout/toolbar_newsblur" />
android:id="@+id/reading_empty_view_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="40dp"
android:gravity="center_horizontal"
android:text="@string/loading"
style="?explainerText"
android:textSize="16sp" />
<FrameLayout <FrameLayout
android:id="@+id/activity_reading_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" /> android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<Button <TextView
android:id="@+id/reading_overlay_text" android:id="@+id/reading_empty_view_text"
android:layout_width="110dp" style="?explainerText"
android:layout_height="40dp" android:layout_width="match_parent"
android:layout_alignParentBottom="true" android:layout_height="wrap_content"
android:layout_alignParentLeft="true" android:layout_marginTop="40dp"
android:layout_marginLeft="8dp" android:gravity="center_horizontal"
android:layout_marginBottom="4dp" android:text="@string/loading"
android:text="@string/overlay_text" android:textSize="16sp" />
android:textSize="14sp"
android:paddingLeft="10dp"
style="?selectorOverlayBackgroundText"
android:onClick="overlayText" />
<Button <FrameLayout
android:id="@+id/reading_overlay_send" android:id="@+id/activity_reading_container"
android:layout_width="50dp" android:layout_width="match_parent"
android:layout_height="40dp" android:layout_height="match_parent" />
android:layout_alignParentBottom="true"
android:layout_toRightOf="@id/reading_overlay_text"
android:layout_marginLeft="2dp"
android:layout_marginBottom="4dp"
style="?selectorOverlayBackgroundSend"
android:onClick="overlaySend" />
<Button </FrameLayout>
android:id="@+id/reading_overlay_right"
android:layout_width="120dp"
android:layout_height="40dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginRight="8dp"
android:layout_marginBottom="4dp"
android:text="@string/overlay_next"
android:textSize="14sp"
style="?selectorOverlayBackgroundRight"
android:onClick="overlayRight" />
<Button <FrameLayout
android:id="@+id/reading_overlay_left" android:layout_width="match_parent"
android:layout_width="50dp"
android:layout_height="40dp"
android:layout_alignParentBottom="true"
android:layout_toLeftOf="@id/reading_overlay_right"
android:layout_marginRight="2dp"
android:layout_marginBottom="4dp"
style="?selectorOverlayBackgroundLeft"
android:onClick="overlayLeft" />
<com.newsblur.view.ProgressCircle
android:id="@+id/reading_overlay_progress"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginRight="98dp"
android:layout_marginBottom="12dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:onClick="overlayCount" />
<ProgressBar
android:id="@+id/reading_overlay_progress_right"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginRight="98dp"
android:layout_marginBottom="12dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:indeterminate="true" />
<ProgressBar
android:id="@+id/reading_overlay_progress_left"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginLeft="90dp"
android:layout_marginBottom="12dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:indeterminate="true" />
<TextView
android:id="@+id/reading_sync_status"
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentBottom="true" android:layout_gravity="bottom"
android:padding="1dp" android:layout_marginBottom="8dp">
android:textSize="13sp"
android:gravity="center"
android:textColor="@color/status_overlay_text"
android:background="@color/status_overlay_background"
android:visibility="gone" />
</RelativeLayout> <TextView
android:id="@+id/reading_overlay_text"
style="?selectorOverlayBackgroundText"
android:layout_width="110dp"
android:layout_height="40dp"
android:layout_gravity="start"
android:layout_marginStart="8dp"
android:gravity="center"
android:onClick="overlayText"
android:paddingStart="8dp"
android:text="@string/overlay_text"
android:textSize="14sp" />
<ImageButton
android:id="@+id/reading_overlay_send"
style="?selectorOverlayBackgroundSend"
android:layout_width="50dp"
android:layout_height="40dp"
android:layout_gravity="start"
android:layout_marginStart="120dp"
android:onClick="overlaySend" />
<TextView
android:id="@+id/reading_overlay_right"
style="?selectorOverlayBackgroundRight"
android:layout_width="120dp"
android:layout_height="40dp"
android:layout_gravity="end"
android:layout_marginRight="8dp"
android:gravity="center"
android:onClick="overlayRight"
android:text="@string/overlay_next"
android:textSize="14sp" />
<ImageButton
android:id="@+id/reading_overlay_left"
style="?selectorOverlayBackgroundLeft"
android:layout_width="50dp"
android:layout_height="40dp"
android:layout_gravity="end"
android:layout_marginEnd="130dp"
android:onClick="overlayLeft" />
<com.newsblur.view.ProgressCircle
android:id="@+id/reading_overlay_progress"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="end|center_vertical"
android:layout_marginRight="100dp"
android:onClick="overlayCount" />
<ProgressBar
android:id="@+id/reading_overlay_progress_right"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="end|center_vertical"
android:layout_marginRight="100dp"
android:indeterminate="true" />
<ProgressBar
android:id="@+id/reading_overlay_progress_left"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="start|center_vertical"
android:layout_marginStart="90dp"
android:indeterminate="true" />
<TextView
android:id="@+id/reading_sync_status"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|bottom"
android:background="@color/status_overlay_background"
android:gravity="center"
android:padding="1dp"
android:textColor="@color/status_overlay_text"
android:textSize="13sp"
android:visibility="gone" />
</FrameLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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">
<include layout="@layout/toolbar_newsblur" />
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -1,12 +1,22 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout 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_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent">
android:background="@color/item_background" >
<WebView <include layout="@layout/toolbar_newsblur" />
android:id="@+id/webcontainer"
<RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" /> android:layout_height="match_parent"
android:background="@color/item_background"
</RelativeLayout> app:layout_behavior="@string/appbar_scrolling_view_behavior">
<WebView
android:id="@+id/webcontainer"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -1,21 +1,31 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout 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_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<ExpandableListView <include layout="@layout/toolbar_newsblur" />
android:id="@+id/list_view"
<FrameLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:groupIndicator="@null" /> app:layout_behavior="@string/appbar_scrolling_view_behavior">
<TextView <ExpandableListView
android:id="@+id/text_no_subscriptions" android:id="@+id/list_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:gravity="center" android:groupIndicator="@null" />
android:padding="32dp"
android:text="@string/title_no_subscriptions"
android:visibility="gone" />
</FrameLayout> <TextView
android:id="@+id/text_no_subscriptions"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:padding="32dp"
android:text="@string/title_no_subscriptions"
android:visibility="gone" />
</FrameLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -19,7 +19,7 @@
android:text="@string/intel_title_header" android:text="@string/intel_title_header"
/> />
<Button <ImageButton
android:id="@+id/intel_title_clear" android:id="@+id/intel_title_clear"
android:layout_below="@id/intel_title_header" android:layout_below="@id/intel_title_header"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
@ -29,7 +29,7 @@
android:background="@drawable/ic_clear_gray55" android:background="@drawable/ic_clear_gray55"
/> />
<Button <ImageButton
android:id="@+id/intel_title_dislike" android:id="@+id/intel_title_dislike"
android:layout_below="@id/intel_title_header" android:layout_below="@id/intel_title_header"
android:layout_toLeftOf="@id/intel_title_clear" android:layout_toLeftOf="@id/intel_title_clear"
@ -42,7 +42,7 @@
android:background="@drawable/ic_dislike_gray55" android:background="@drawable/ic_dislike_gray55"
/> />
<Button <ImageButton
android:id="@+id/intel_title_like" android:id="@+id/intel_title_like"
android:layout_below="@id/intel_title_header" android:layout_below="@id/intel_title_header"
android:layout_toLeftOf="@id/intel_title_dislike" android:layout_toLeftOf="@id/intel_title_dislike"

View file

@ -2,7 +2,7 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
style="?itemBackground" style="?layoutBackground"
android:orientation="vertical" > android:orientation="vertical" >
<RelativeLayout <RelativeLayout

View file

@ -3,7 +3,7 @@
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical" android:orientation="vertical"
style="?itemBackground" > style="?layoutBackground" >
<RelativeLayout <RelativeLayout
android:id="@+id/empty_view" android:id="@+id/empty_view"

View file

@ -2,7 +2,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
style="?itemBackground" style="?layoutBackground"
android:orientation="vertical" > android:orientation="vertical" >
<LinearLayout <LinearLayout

View file

@ -63,12 +63,12 @@
android:layout_below="@id/row_item_feed_header" android:layout_below="@id/row_item_feed_header"
android:background="@color/gray55"/> android:background="@color/gray55"/>
<Button <ImageButton
android:id="@+id/story_context_menu_button" android:id="@+id/story_context_menu_button"
android:layout_width="34dp" android:layout_width="34dp"
android:layout_height="34dp" android:layout_height="34dp"
android:layout_margin="5dp" android:layout_margin="5dp"
android:background="@drawable/ic_menu_moreoverflow" style="?android:attr/actionOverflowButtonStyle"
android:contentDescription="@string/description_menu" android:contentDescription="@string/description_menu"
android:layout_below="@id/item_feed_border" android:layout_below="@id/item_feed_border"
android:layout_alignParentRight="true" /> android:layout_alignParentRight="true" />
@ -107,12 +107,28 @@
android:textSize="12sp" android:textSize="12sp"
android:textStyle="bold"/> android:textStyle="bold"/>
<TextView
android:id="@+id/reading_story_changes"
style="?readingItemMetadata"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/reading_item_date"
android:layout_alignLeft="@id/reading_item_title"
android:paddingTop="8dp"
android:gravity="center_vertical"
android:paddingBottom="4dp"
android:drawablePadding="6dp"
android:drawableStart="@drawable/ic_file_edit"
android:text="@string/story_show_changes"
android:textSize="12sp"
android:visibility="gone" />
<com.newsblur.view.FlowLayout <com.newsblur.view.FlowLayout
android:id="@+id/reading_item_tags" android:id="@+id/reading_item_tags"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="17dp" android:layout_height="17dp"
android:layout_alignLeft="@id/reading_item_title" android:layout_alignLeft="@id/reading_item_title"
android:layout_below="@id/reading_item_date" android:layout_below="@id/reading_story_changes"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:layout_marginTop="8dp" /> android:layout_marginTop="8dp" />

View file

@ -4,7 +4,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
> >
<Button <ImageButton
android:id="@+id/intel_row_clear" android:id="@+id/intel_row_clear"
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
@ -14,7 +14,7 @@
android:background="@drawable/ic_clear_gray55" android:background="@drawable/ic_clear_gray55"
/> />
<Button <ImageButton
android:id="@+id/intel_row_dislike" android:id="@+id/intel_row_dislike"
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:layout_toLeftOf="@id/intel_row_clear" android:layout_toLeftOf="@id/intel_row_clear"
@ -27,7 +27,7 @@
android:background="@drawable/ic_dislike_gray55" android:background="@drawable/ic_dislike_gray55"
/> />
<Button <ImageButton
android:id="@+id/intel_row_like" android:id="@+id/intel_row_like"
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:layout_toLeftOf="@id/intel_row_dislike" android:layout_toLeftOf="@id/intel_row_dislike"

View file

@ -10,14 +10,14 @@
android:layout_marginBottom="15dp" android:layout_marginBottom="15dp"
android:baselineAligned="false" > android:baselineAligned="false" >
<Button <TextView
android:id="@+id/share_story_button" android:id="@+id/share_story_button"
android:layout_width="170dp" android:layout_width="170dp"
android:layout_height="36dp" android:layout_height="36dp"
style="?storyButtons" style="?storyButtons"
android:text="@string/share_this" /> android:text="@string/share_this" />
<Button <TextView
android:id="@+id/save_story_button" android:id="@+id/save_story_button"
android:layout_width="170dp" android:layout_width="170dp"
android:layout_height="36dp" android:layout_height="36dp"

View file

@ -1,35 +1,58 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal" android:orientation="vertical">
android:orientation="vertical"
android:layout_marginTop="10dp"
android:paddingLeft="25dip"
android:paddingRight="25dip"
android:paddingBottom="10dip"
android:paddingTop="10dip"
>
<RadioButton android:id="@+id/radio_5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/infrequent_5"/>
<RadioButton android:id="@+id/radio_15"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/infrequent_15"/>
<RadioButton android:id="@+id/radio_30"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/infrequent_30"/>
<RadioButton android:id="@+id/radio_60"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/infrequent_60"/>
<RadioButton android:id="@+id/radio_90"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/infrequent_90"/>
</RadioGroup> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:text="@string/infrequent_choice_title"
android:textSize="18sp"
android:textStyle="bold" />
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:layout_marginTop="8dp"
android:orientation="vertical"
android:paddingLeft="25dip"
android:paddingTop="10dip"
android:paddingRight="25dip"
android:paddingBottom="10dip">
<RadioButton
android:id="@+id/radio_5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/infrequent_5" />
<RadioButton
android:id="@+id/radio_15"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/infrequent_15" />
<RadioButton
android:id="@+id/radio_30"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/infrequent_30" />
<RadioButton
android:id="@+id/radio_60"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/infrequent_60" />
<RadioButton
android:id="@+id/radio_90"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/infrequent_90" />
</RadioGroup>
</LinearLayout>

View file

@ -2,7 +2,7 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="fill_parent"
style="?itemBackground" style="?layoutBackground"
android:paddingBottom="10dp" android:paddingBottom="10dp"
android:paddingTop="10dp" > android:paddingTop="10dp" >

View file

@ -2,7 +2,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="?itemBackground" style="?layoutBackground"
android:focusable="false"> android:focusable="false">
<RelativeLayout <RelativeLayout

View file

@ -14,7 +14,9 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="4dp" android:layout_marginEnd="4dp"
android:clickable="false" android:clickable="false"
android:focusable="false" /> android:focusable="false"
android:minWidth="0dp"
android:minHeight="0dp" />
<ImageView <ImageView
android:id="@+id/img" android:id="@+id/img"

View file

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.appbar.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:id="@+id/toolbar_arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="?attr/homeAsUpIndicator"
android:visibility="gone" />
<ImageView
android:id="@+id/toolbar_icon"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center_vertical"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:src="@drawable/world" />
<TextView
android:id="@+id/toolbar_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:ellipsize="end"
android:maxLines="1"
android:textSize="18sp" />
</LinearLayout>
</com.google.android.material.appbar.MaterialToolbar>
</com.google.android.material.appbar.AppBarLayout>

View file

@ -1,17 +1,18 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_mark_all_as_read" <item android:id="@+id/menu_mark_all_as_read"
android:title="@string/menu_mark_all_as_read" android:title="@string/menu_mark_all_as_read"
android:showAsAction="ifRoom" android:icon="@drawable/ic_menu_markread_gray55" /> app:showAsAction="ifRoom" android:icon="@drawable/ic_menu_markread_gray55" />
<item android:id="@+id/menu_search_stories" <item android:id="@+id/menu_search_stories"
android:title="@string/menu_search_stories" android:title="@string/menu_search_stories"
android:showAsAction="ifRoom" android:icon="@drawable/ic_menu_search_gray55" /> app:showAsAction="ifRoom" android:icon="@drawable/ic_menu_search_gray55" />
<item android:id="@+id/menu_story_order" <item android:id="@+id/menu_story_order"
android:title="@string/menu_story_order" android:title="@string/menu_story_order"
android:showAsAction="never" /> app:showAsAction="never" />
<item android:id="@+id/menu_read_filter" <item android:id="@+id/menu_read_filter"
android:title="@string/menu_read_filter" android:title="@string/menu_read_filter"
android:showAsAction="never" /> app:showAsAction="never" />
<item android:id="@+id/menu_story_list_style" <item android:id="@+id/menu_story_list_style"
android:title="@string/menu_story_list_style_choose" > android:title="@string/menu_story_list_style_choose" >
<menu> <menu>
@ -28,7 +29,7 @@
</menu> </menu>
</item> </item>
<item android:id="@+id/menu_textsize" <item android:id="@+id/menu_textsize"
android:showAsAction="never" app:showAsAction="never"
android:title="@string/menu_textsize"/> android:title="@string/menu_textsize"/>
<item android:id="@+id/menu_theme" <item android:id="@+id/menu_theme"
android:title="@string/menu_theme_choose" > android:title="@string/menu_theme_choose" >
@ -65,20 +66,20 @@
</item> </item>
<item android:id="@+id/menu_statistics" <item android:id="@+id/menu_statistics"
android:title="@string/menu_statistics" android:title="@string/menu_statistics"
android:showAsAction="never" /> app:showAsAction="never" />
<item android:id="@+id/menu_delete_feed" <item android:id="@+id/menu_delete_feed"
android:title="@string/menu_delete_feed" android:title="@string/menu_delete_feed"
android:showAsAction="never" /> app:showAsAction="never" />
<item android:id="@+id/menu_rename_feed" <item android:id="@+id/menu_rename_feed"
android:title="@string/menu_rename_feed" android:title="@string/menu_rename_feed"
android:showAsAction="never" /> app:showAsAction="never" />
<item android:id="@+id/menu_instafetch_feed" <item android:id="@+id/menu_instafetch_feed"
android:title="@string/menu_instafetch_feed" /> android:title="@string/menu_instafetch_feed" />
<item android:id="@+id/menu_infrequent_cutoff" <item android:id="@+id/menu_infrequent_cutoff"
android:title="@string/menu_infrequent_cutoff" android:title="@string/menu_infrequent_cutoff"
android:showAsAction="never" /> app:showAsAction="never" />
<item android:id="@+id/menu_save_search" <item android:id="@+id/menu_save_search"
android:title="Save Search" android:title="Save Search"
android:showAsAction="never" app:showAsAction="never"
android:visible="false"/> android:visible="false"/>
</menu> </menu>

View file

@ -1,60 +1,26 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_refresh"
android:title="@string/menu_refresh"
android:showAsAction="never" />
<item android:id="@+id/menu_search_feeds"
android:title="@string/menu_search_feeds"
android:showAsAction="never" />
<item android:id="@+id/menu_add_feed"
android:title="@string/menu_add_feed"
android:showAsAction="never" />
<item android:id="@+id/menu_textsize"
android:showAsAction="never"
android:title="@string/menu_textsize"/>
<item android:id="@+id/menu_settings" <item android:id="@+id/menu_settings"
android:title="@string/settings" android:title="@string/settings"
android:showAsAction="never" /> app:showAsAction="never" />
<item android:id="@+id/menu_mute_sites" <item android:id="@+id/menu_mute_sites"
android:title="@string/mute_sites" android:title="@string/mute_sites"
android:showAsAction="never" /> app:showAsAction="never" />
<item android:id="@+id/menu_widget" <item android:id="@+id/menu_widget"
android:title="@string/widget" android:title="@string/widget"
android:showAsAction="never" /> app:showAsAction="never" />
<item android:id="@+id/menu_feedback"
android:title="@string/menu_feedback"
android:showAsAction="never" >
<menu>
<item android:id="@+id/menu_feedback_post"
android:title="@string/menu_feedback_post"
android:showAsAction="never" />
<item android:id="@+id/menu_feedback_email"
android:title="@string/menu_feedback_email"
android:showAsAction="never" />
</menu>
</item>
<item android:id="@+id/menu_loginas"
android:title="@string/menu_loginas"
android:showAsAction="never"
android:visible="false"/>
<item android:id="@+id/menu_premium_account" <item android:id="@+id/menu_premium_account"
android:title="@string/menu_premium_account" android:title="@string/menu_premium_account"
android:showAsAction="never" /> app:showAsAction="never" />
<item android:id="@+id/menu_logout" <item android:id="@+id/menu_textsize"
android:title="@string/menu_logout" app:showAsAction="never"
android:showAsAction="never" /> android:title="@string/menu_textsize"/>
<item android:id="@+id/menu_theme" <item android:id="@+id/menu_theme"
android:title="@string/menu_theme_choose" > android:title="@string/menu_theme_choose" >
@ -72,4 +38,27 @@
</menu> </menu>
</item> </item>
<item android:id="@+id/menu_feedback"
android:title="@string/menu_feedback"
app:showAsAction="never" >
<menu>
<item android:id="@+id/menu_feedback_post"
android:title="@string/menu_feedback_post"
app:showAsAction="never" />
<item android:id="@+id/menu_feedback_email"
android:title="@string/menu_feedback_email"
app:showAsAction="never" />
</menu>
</item>
<item android:id="@+id/menu_loginas"
android:title="@string/menu_loginas"
app:showAsAction="never"
android:visible="false"/>
<item android:id="@+id/menu_logout"
android:title="@string/menu_logout"
app:showAsAction="never" />
</menu> </menu>

View file

@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item <item
android:id="@+id/menu_sort_by" android:id="@+id/menu_sort_by"
android:showAsAction="never" app:showAsAction="never"
android:title="@string/menu_sort_by"> android:title="@string/menu_sort_by">
<menu> <menu>
<group android:checkableBehavior="single"> <group android:checkableBehavior="single">
@ -26,7 +27,7 @@
</item> </item>
<item <item
android:id="@+id/menu_sort_order" android:id="@+id/menu_sort_order"
android:showAsAction="never" app:showAsAction="never"
android:title="@string/menu_sort_order"> android:title="@string/menu_sort_order">
<menu> <menu>
<group android:checkableBehavior="single"> <group android:checkableBehavior="single">
@ -41,7 +42,7 @@
</item> </item>
<item <item
android:id="@+id/menu_folder_view" android:id="@+id/menu_folder_view"
android:showAsAction="never" app:showAsAction="never"
android:title="@string/menu_folder_view"> android:title="@string/menu_folder_view">
<menu> <menu>
<group android:checkableBehavior="single"> <group android:checkableBehavior="single">
@ -68,7 +69,7 @@
android:title="@string/menu_select_none" /> android:title="@string/menu_select_none" />
<item <item
android:id="@+id/menu_widget_background" android:id="@+id/menu_widget_background"
android:showAsAction="never" app:showAsAction="never"
android:title="@string/menu_widget_background"> android:title="@string/menu_widget_background">
<menu> <menu>
<group android:checkableBehavior="single"> <group android:checkableBehavior="single">

View file

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_reading_fullscreen"
android:icon="@drawable/ic_menu_fullscreen_gray55"
android:showAsAction="always"
android:title="@string/menu_fullscreen"/>
</menu>

View file

@ -1,9 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_search" <item android:id="@+id/menu_search"
android:icon="@drawable/ic_menu_search_gray55" android:icon="@drawable/ic_menu_search_gray55"
android:title="@string/menu_search" android:title="@string/menu_search"
android:showAsAction="always" /> app:showAsAction="always" />
</menu> </menu>

View file

@ -1,51 +1,52 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item <item
android:id="@+id/menu_reading_sharenewsblur" android:id="@+id/menu_reading_sharenewsblur"
android:showAsAction="never" app:showAsAction="never"
android:title="@string/menu_sharenewsblur"/> android:title="@string/menu_sharenewsblur"/>
<item <item
android:id="@+id/menu_reading_original" android:id="@+id/menu_reading_original"
android:showAsAction="never" app:showAsAction="never"
android:title="@string/menu_original"/> android:title="@string/menu_original"/>
<item <item
android:id="@+id/menu_send_story" android:id="@+id/menu_send_story"
android:showAsAction="never" app:showAsAction="never"
android:title="@string/menu_send_story"/> android:title="@string/menu_send_story"/>
<item <item
android:id="@+id/menu_send_story_full" android:id="@+id/menu_send_story_full"
android:showAsAction="never" app:showAsAction="never"
android:title="@string/menu_send_story_full"/> android:title="@string/menu_send_story_full"/>
<item <item
android:id="@+id/menu_textsize" android:id="@+id/menu_textsize"
android:showAsAction="never" app:showAsAction="never"
android:title="@string/menu_textsize"/> android:title="@string/menu_textsize"/>
<item <item
android:id="@+id/menu_font" android:id="@+id/menu_font"
android:showAsAction="never" app:showAsAction="never"
android:title="@string/menu_font"/> android:title="@string/menu_font"/>
<item <item
android:id="@+id/menu_reading_save" android:id="@+id/menu_reading_save"
android:showAsAction="never" app:showAsAction="never"
android:title="@string/menu_save_story"/> android:title="@string/menu_save_story"/>
<item <item
android:id="@+id/menu_reading_markunread" android:id="@+id/menu_reading_markunread"
android:showAsAction="never" app:showAsAction="never"
android:title="@string/menu_mark_unread"/> android:title="@string/menu_mark_unread"/>
<item android:id="@+id/menu_go_to_feed" <item android:id="@+id/menu_go_to_feed"
android:title="@string/go_to_feed"/> android:title="@string/go_to_feed"/>
<item <item
android:id="@+id/menu_intel" android:id="@+id/menu_intel"
android:showAsAction="never" app:showAsAction="never"
android:title="@string/menu_intel"/> android:title="@string/menu_intel"/>
<item android:id="@+id/menu_theme" <item android:id="@+id/menu_theme"

View file

@ -5,7 +5,7 @@
<attr name="feedRowNeutCountText" format="string" /> <attr name="feedRowNeutCountText" format="string" />
<attr name="actionbarBackground" format="string" /> <attr name="actionbarBackground" format="string" />
<attr name="listBackground" format="string" /> <attr name="listBackground" format="string" />
<attr name="itemBackground" format="string" /> <attr name="layoutBackground" format="string" />
<attr name="readingBackground" format="string" /> <attr name="readingBackground" format="string" />
<attr name="defaultText" format="string" /> <attr name="defaultText" format="string" />
<attr name="linkText" format="string" /> <attr name="linkText" format="string" />

View file

@ -1,6 +1,18 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<color name="primary">@color/nb_green_gray91</color>
<color name="primaryDark">@color/black</color>
<color name="secondary">@color/newsblur_blue</color>
<color name="primary.dark">@color/gray13</color>
<color name="primaryDark.dark">@color/black</color>
<color name="secondary.dark">@color/newsblur_blue</color>
<color name="primary.black">@color/black</color>
<color name="primaryDark.black">@color/black</color>
<color name="secondary.black">@color/newsblur_blue</color>
<color name="black">#000000</color> <color name="black">#000000</color>
<color name="gray07">#121212</color> <color name="gray07">#121212</color>
<color name="gray10">#1A1A1A</color> <color name="gray10">#1A1A1A</color>
@ -123,7 +135,7 @@
<color name="tag_gray_shadow">#C9C9C8</color> <color name="tag_gray_shadow">#C9C9C8</color>
<color name="tag_bg_dark">#757575</color> <color name="tag_bg_dark">#757575</color>
<color name="newsblur_blue">#0b445a</color> <color name="newsblur_blue">#319DC5</color>
<color name="progress_circle_complete">@color/gray46</color> <color name="progress_circle_complete">@color/gray46</color>
<color name="progress_circle_remaining">@color/gray75</color> <color name="progress_circle_remaining">@color/gray75</color>

View file

@ -128,7 +128,6 @@
<string name="profile_no_interactions">No interactions</string> <string name="profile_no_interactions">No interactions</string>
<string name="menu_profile">Profile</string> <string name="menu_profile">Profile</string>
<string name="menu_refresh">Refresh</string>
<string name="menu_search_feeds">Search your feeds</string> <string name="menu_search_feeds">Search your feeds</string>
<string name="menu_original">View original</string> <string name="menu_original">View original</string>
<string name="menu_send_story">Send link to…</string> <string name="menu_send_story">Send link to…</string>
@ -155,7 +154,6 @@
<string name="menu_oldest_mark_newer_stories_as_read">\u21E3 Mark newer as read</string> <string name="menu_oldest_mark_newer_stories_as_read">\u21E3 Mark newer as read</string>
<string name="menu_mark_story_as_read">Mark as read</string> <string name="menu_mark_story_as_read">Mark as read</string>
<string name="menu_mark_unread">Mark as unread</string> <string name="menu_mark_unread">Mark as unread</string>
<string name="menu_fullscreen">Full screen</string>
<string name="menu_search_stories">Search…</string> <string name="menu_search_stories">Search…</string>
<string name="menu_mute_feed">Mute feed</string> <string name="menu_mute_feed">Mute feed</string>
<string name="menu_unmute_feed">Unmute feed</string> <string name="menu_unmute_feed">Unmute feed</string>
@ -197,7 +195,10 @@
<string name="logout_warning">Are you sure you want to log out?</string> <string name="logout_warning">Are you sure you want to log out?</string>
<string name="search_mark_read_warning">Look out! All stories in feed/folder would be marked read, not just search results. If you really want to mark all stories read, please clear your search query to confirm.</string> <string name="search_mark_read_warning">Look out! All stories in feed/folder would be marked read, not just search results. If you really want to mark all stories read, please clear your search query to confirm.</string>
<string name="story_show_changes">Show Story Changes</string>
<string name="story_hide_changes">Hide Story Changes</string>
<string name="story_changes_loading">Story Changes Loading ...</string>
<string name="your_feeds_search_hint">Search your feeds</string> <string name="your_feeds_search_hint">Search your feeds</string>
<string name="feed_search_hint">Search term or feed URL</string> <string name="feed_search_hint">Search term or feed URL</string>
<string name="story_search_hint">Search for stories</string> <string name="story_search_hint">Search for stories</string>
@ -319,6 +320,11 @@
</string-array> </string-array>
<string name="default_network_select_value">NOMONONME</string> <string name="default_network_select_value">NOMONONME</string>
<string name="menu_delete_offline_stories">Delete offline stories …</string>
<string name="menu_delete_offline_stories_key">delete_offline_stories</string>
<string name="menu_delete_offline_stories_sum">Clear all offline stories and images</string>
<string name="menu_delete_offline_stories_confirmation">Cleared all stories and images!</string>
<string name="menu_cache_age_select">Maximum Cache Age</string> <string name="menu_cache_age_select">Maximum Cache Age</string>
<string name="menu_cache_age_select_sum">Clean up cached story content after…</string> <string name="menu_cache_age_select_sum">Clean up cached story content after…</string>
<string name="menu_cache_age_select_opt_2d">2 days (reduce storage use)</string> <string name="menu_cache_age_select_opt_2d">2 days (reduce storage use)</string>
@ -396,7 +402,6 @@
<string name="settings_social">Social</string> <string name="settings_social">Social</string>
<string name="settings_show_public_comments">Show Public Comments</string> <string name="settings_show_public_comments">Show Public Comments</string>
<string name="settings_reading">Reading</string> <string name="settings_reading">Reading</string>
<string name="settings_immersive_enter_single_tap">Immersive Mode Via Single Tap</string>
<string name="settings_show_content_preview">Show Content Preview Text</string> <string name="settings_show_content_preview">Show Content Preview Text</string>
<string name="settings_thumbnails_style">Image Preview Thumbnails</string> <string name="settings_thumbnails_style">Image Preview Thumbnails</string>
<string name="settings_notifications">Notifications</string> <string name="settings_notifications">Notifications</string>

View file

@ -1,25 +1,30 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="dialogButton" parent="Widget.MaterialComponents.Button.TextButton">
<item name="android:textColor">@color/black</item>
<item name="android:letterSpacing">0</item>
</style>
<style name="dialogButton.dark" parent="Widget.MaterialComponents.Button.TextButton">
<item name="android:textColor">@color/white</item>
<item name="android:letterSpacing">0</item>
</style>
<style name="initStyle" parent="@android:style/Theme.DeviceDefault.NoActionBar"> <style name="initStyle" parent="@android:style/Theme.DeviceDefault.NoActionBar">
<item name="android:windowBackground">@color/transparent</item> <item name="android:windowBackground">@color/transparent</item>
</style> </style>
<style name="actionbar" parent="@android:style/Widget.Holo.Light.ActionBar"> <style name="actionbar" parent="ThemeOverlay.MaterialComponents.Light">
<item name="android:background">@color/bar_background</item> <item name="colorControlNormal">@color/gray55</item>
</style> </style>
<style name="actionbar.dark" parent="@android:style/Widget.Holo.ActionBar"> <style name="actionbar.dark" parent="ThemeOverlay.MaterialComponents">
<item name="android:background">@color/dark_bar_background</item> <item name="android:background">@color/dark_bar_background</item>
<item name="colorControlNormal">@color/gray55</item>
</style> </style>
<style name="actionbar.black" parent="@android:style/Widget.Holo.ActionBar"> <style name="actionbar.black" parent="ThemeOverlay.MaterialComponents">
<item name="android:background">@color/black</item> <item name="android:background">@color/black</item>
</style> <item name="colorControlNormal">@color/gray55</item>
<style name="expandableListView" parent="@android:style/Widget.Holo.Light.ExpandableListView">
<item name="android:background">@drawable/list_background</item>
</style>
<style name="expandableListView.dark" parent="@android:style/Widget.Holo.ExpandableListView">
<item name="android:background">@drawable/dark_list_background</item>
</style> </style>
<style name="selectorFolderBackground"> <style name="selectorFolderBackground">
@ -63,13 +68,13 @@
<item name="android:background">@drawable/dark_list_background</item> <item name="android:background">@drawable/dark_list_background</item>
</style> </style>
<style name="itemBackground"> <style name="layoutBackground">
<item name="android:background">@color/item_background</item> <item name="android:background">@color/item_background</item>
</style> </style>
<style name="itemBackground.dark"> <style name="layoutBackground.dark">
<item name="android:background">@color/dark_item_background</item> <item name="android:background">@color/dark_item_background</item>
</style> </style>
<style name="itemBackground.black"> <style name="layoutBackground.black">
<item name="android:background">@color/black</item> <item name="android:background">@color/black</item>
</style> </style>
@ -176,6 +181,7 @@
<item name="android:textColor">@color/button_text</item> <item name="android:textColor">@color/button_text</item>
<item name="android:background">@drawable/button_background</item> <item name="android:background">@drawable/button_background</item>
<item name="android:gravity">center</item> <item name="android:gravity">center</item>
<item name="android:letterSpacing">0</item>
</style> </style>
<style name="storyButtons.dark"> <style name="storyButtons.dark">
<item name="android:textSize">14sp</item> <item name="android:textSize">14sp</item>
@ -184,6 +190,7 @@
<item name="android:textColor">@color/button_text_dark</item> <item name="android:textColor">@color/button_text_dark</item>
<item name="android:background">@drawable/button_background_dark</item> <item name="android:background">@drawable/button_background_dark</item>
<item name="android:gravity">center</item> <item name="android:gravity">center</item>
<item name="android:letterSpacing">0</item>
</style> </style>
<style name="shareBarBackground"> <style name="shareBarBackground">
@ -377,21 +384,33 @@
<item name="android:src">@drawable/mute_black</item> <item name="android:src">@drawable/mute_black</item>
</style> </style>
<!-- these fix the Android framework bug that causes context menus to get badly <style name="actionBarPopup" parent="Widget.MaterialComponents.PopupMenu">
truncated when the Holo theme is used on a v7+ device: <item name="android:background">@color/transparent</item>
https://issuetracker.google.com/issues/37118658 --> <item name="popupMenuBackground">@color/primary</item>
<style name="contextPopupStyle" parent="@android:style/Widget.Holo.Light.PopupMenu">
<item name="android:overlapAnchor">true</item>
</style>
<style name="contextPopupStyle.dark" parent="@android:style/Widget.Holo.PopupMenu">
<item name="android:overlapAnchor">true</item>
</style> </style>
<!-- Fixes menu text being too dark on Moto devices --> <style name="actionBarPopup.dark" parent="Widget.MaterialComponents.PopupMenu">
<style name="itemTextAppearance"> <item name="android:background">@color/transparent</item>
<item name="android:textColor">@color/black</item> <item name="popupMenuBackground">@color/gray13</item>
</style> </style>
<style name="itemTextAppearance.dark">
<item name="android:textColor">@color/white</item> <style name="preferenceTheme" parent="@style/PreferenceThemeOverlay">
<item name="preferenceCategoryStyle">@style/preferenceCategory</item>
<item name="checkBoxPreferenceStyle">@style/checkBoxPreference</item>
<item name="dialogPreferenceStyle">@style/dialogPreference</item>
<item name="preferenceStyle">@style/dialogPreference</item>
</style> </style>
<style name="preferenceCategory" parent="Preference.Category.Material">
<item name="iconSpaceReserved">false</item>
</style>
<style name="checkBoxPreference" parent="Preference.CheckBoxPreference.Material">
<item name="iconSpaceReserved">false</item>
</style>
<style name="dialogPreference" parent="Preference.DialogPreference.Material">
<item name="iconSpaceReserved">false</item>
</style>
</resources> </resources>

View file

@ -1,14 +1,21 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="NewsBlurTheme" parent="@android:style/Theme.Holo.Light" > <style name="NewsBlurTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="android:actionBarStyle">@style/actionbar</item> <item name="colorPrimary">@color/primary</item>
<item name="android:expandableListViewStyle">@style/expandableListView</item> <item name="colorPrimaryDark">@color/primaryDark</item>
<item name="colorSecondary">@color/secondary</item>
<item name="actionBarTheme">@style/actionbar</item>
<item name="actionBarPopupTheme">@style/actionBarPopup</item>
<item name="popupMenuBackground">@color/primary</item>
<item name="buttonBarPositiveButtonStyle">@style/dialogButton</item>
<item name="buttonBarNegativeButtonStyle">@style/dialogButton</item>
<item name="buttonBarNeutralButtonStyle">@style/dialogButton</item>
<item name="selectorFolderBackground">@style/selectorFolderBackground</item> <item name="selectorFolderBackground">@style/selectorFolderBackground</item>
<item name="selectorFeedBackground">@style/selectorFeedBackground</item> <item name="selectorFeedBackground">@style/selectorFeedBackground</item>
<item name="feedRowNeutCountText">@style/feedRowNeutCountText</item> <item name="feedRowNeutCountText">@style/feedRowNeutCountText</item>
<item name="actionbarBackground">@style/actionbarBackground</item> <item name="actionbarBackground">@style/actionbarBackground</item>
<item name="listBackground">@style/listBackground</item> <item name="listBackground">@style/listBackground</item>
<item name="itemBackground">@style/itemBackground</item> <item name="layoutBackground">@style/layoutBackground</item>
<item name="readingBackground">@style/readingBackground</item> <item name="readingBackground">@style/readingBackground</item>
<item name="defaultText">@style/defaultText</item> <item name="defaultText">@style/defaultText</item>
<item name="linkText">@style/linkText</item> <item name="linkText">@style/linkText</item>
@ -40,19 +47,26 @@
<item name="selectorOverlayBackgroundStory">@style/selectorOverlayBackgroundStory</item> <item name="selectorOverlayBackgroundStory">@style/selectorOverlayBackgroundStory</item>
<item name="selectorOverlayBackgroundText">@style/selectorOverlayBackgroundText</item> <item name="selectorOverlayBackgroundText">@style/selectorOverlayBackgroundText</item>
<item name="muteicon">@style/muteicon</item> <item name="muteicon">@style/muteicon</item>
<item name="android:contextPopupMenuStyle">@style/contextPopupStyle</item> <item name="android:textColor">@color/black</item>
<item name="android:textColorPrimary">@color/black</item> <item name="preferenceTheme">@style/preferenceTheme</item>
</style> </style>
<style name="NewsBlurDarkTheme" parent="@android:style/Theme.Holo" > <style name="NewsBlurDarkTheme" parent="Theme.MaterialComponents.NoActionBar">
<item name="android:actionBarStyle">@style/actionbar.dark</item> <item name="colorPrimary">@color/primary.dark</item>
<item name="android:expandableListViewStyle">@style/expandableListView.dark</item> <item name="colorPrimaryDark">@color/primaryDark.dark</item>
<item name="colorSecondary">@color/secondary.dark</item>
<item name="actionBarTheme">@style/actionbar.dark</item>
<item name="actionBarPopupTheme">@style/actionBarPopup.dark</item>
<item name="popupMenuBackground">@color/gray13</item>
<item name="buttonBarPositiveButtonStyle">@style/dialogButton.dark</item>
<item name="buttonBarNegativeButtonStyle">@style/dialogButton.dark</item>
<item name="buttonBarNeutralButtonStyle">@style/dialogButton.dark</item>
<item name="selectorFolderBackground">@style/selectorFolderBackground.dark</item> <item name="selectorFolderBackground">@style/selectorFolderBackground.dark</item>
<item name="selectorFeedBackground">@style/selectorFeedBackground.dark</item> <item name="selectorFeedBackground">@style/selectorFeedBackground.dark</item>
<item name="feedRowNeutCountText">@style/feedRowNeutCountText.dark</item> <item name="feedRowNeutCountText">@style/feedRowNeutCountText.dark</item>
<item name="actionbarBackground">@style/actionbarBackground.dark</item> <item name="actionbarBackground">@style/actionbarBackground.dark</item>
<item name="listBackground">@style/listBackground.dark</item> <item name="listBackground">@style/listBackground.dark</item>
<item name="itemBackground">@style/itemBackground.dark</item> <item name="layoutBackground">@style/layoutBackground.dark</item>
<item name="readingBackground">@style/readingBackground.dark</item> <item name="readingBackground">@style/readingBackground.dark</item>
<item name="defaultText">@style/defaultText.dark</item> <item name="defaultText">@style/defaultText.dark</item>
<item name="linkText">@style/linkText.dark</item> <item name="linkText">@style/linkText.dark</item>
@ -84,22 +98,27 @@
<item name="selectorOverlayBackgroundStory">@style/selectorOverlayBackgroundStory.dark</item> <item name="selectorOverlayBackgroundStory">@style/selectorOverlayBackgroundStory.dark</item>
<item name="selectorOverlayBackgroundText">@style/selectorOverlayBackgroundText.dark</item> <item name="selectorOverlayBackgroundText">@style/selectorOverlayBackgroundText.dark</item>
<item name="muteicon">@style/muteicon.dark</item> <item name="muteicon">@style/muteicon.dark</item>
<item name="android:textColor">@color/white</item>
<!--requires API 24--> <item name="preferenceTheme">@style/preferenceTheme</item>
<item name="android:contextPopupMenuStyle">@style/contextPopupStyle.dark</item> <item name="android:navigationBarColor">@android:color/black</item>
<item name="android:textColorPrimary">@color/white</item>
<item name="android:itemTextAppearance">@style/itemTextAppearance.dark</item>
</style> </style>
<style name="NewsBlurBlackTheme" parent="@android:style/Theme.Holo" > <style name="NewsBlurBlackTheme" parent="Theme.MaterialComponents.NoActionBar" >
<item name="android:actionBarStyle">@style/actionbar.black</item> <item name="colorPrimary">@color/primary.black</item>
<item name="android:expandableListViewStyle">@style/expandableListView.dark</item> <item name="colorPrimaryDark">@color/primaryDark.black</item>
<item name="colorSecondary">@color/secondary.black</item>
<item name="actionBarTheme">@style/actionbar.black</item>
<item name="actionBarPopupTheme">@style/actionBarPopup.dark</item>
<item name="popupMenuBackground">@color/gray13</item>
<item name="buttonBarPositiveButtonStyle">@style/dialogButton.dark</item>
<item name="buttonBarNegativeButtonStyle">@style/dialogButton.dark</item>
<item name="buttonBarNeutralButtonStyle">@style/dialogButton.dark</item>
<item name="selectorFolderBackground">@style/selectorFolderBackground.black</item> <item name="selectorFolderBackground">@style/selectorFolderBackground.black</item>
<item name="selectorFeedBackground">@style/selectorFeedBackground.dark</item> <item name="selectorFeedBackground">@style/selectorFeedBackground.dark</item>
<item name="feedRowNeutCountText">@style/feedRowNeutCountText.dark</item> <item name="feedRowNeutCountText">@style/feedRowNeutCountText.dark</item>
<item name="actionbarBackground">@style/actionbarBackground.black</item> <item name="actionbarBackground">@style/actionbarBackground.black</item>
<item name="listBackground">@style/listBackground.dark</item> <item name="listBackground">@style/listBackground.dark</item>
<item name="itemBackground">@style/itemBackground.black</item> <item name="layoutBackground">@style/layoutBackground.black</item>
<item name="readingBackground">@style/readingBackground.black</item> <item name="readingBackground">@style/readingBackground.black</item>
<item name="defaultText">@style/defaultText.dark</item> <item name="defaultText">@style/defaultText.dark</item>
<item name="linkText">@style/linkText.dark</item> <item name="linkText">@style/linkText.dark</item>
@ -131,8 +150,8 @@
<item name="selectorOverlayBackgroundStory">@style/selectorOverlayBackgroundStory.dark</item> <item name="selectorOverlayBackgroundStory">@style/selectorOverlayBackgroundStory.dark</item>
<item name="selectorOverlayBackgroundText">@style/selectorOverlayBackgroundText.dark</item> <item name="selectorOverlayBackgroundText">@style/selectorOverlayBackgroundText.dark</item>
<item name="muteicon">@style/muteicon.dark</item> <item name="muteicon">@style/muteicon.dark</item>
<item name="android:contextPopupMenuStyle">@style/contextPopupStyle.dark</item> <item name="android:textColor">@color/white</item>
<item name="android:textColorPrimary">@color/white</item> <item name="preferenceTheme">@style/preferenceTheme</item>
<item name="android:itemTextAppearance">@style/itemTextAppearance.dark</item> <item name="android:navigationBarColor">@android:color/black</item>
</style> </style>
</resources> </resources>

View file

@ -34,6 +34,10 @@
android:entries="@array/cache_age_select_entries" android:entries="@array/cache_age_select_entries"
android:entryValues="@array/cache_age_select_values" android:entryValues="@array/cache_age_select_values"
android:defaultValue="@string/default_cache_age_select_value" /> android:defaultValue="@string/default_cache_age_select_value" />
<Preference
android:title="@string/menu_delete_offline_stories"
android:key="@string/menu_delete_offline_stories_key"
android:summary="@string/menu_delete_offline_stories_sum" />
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory <PreferenceCategory
@ -119,11 +123,6 @@
android:entries="@array/default_font_entries" android:entries="@array/default_font_entries"
android:entryValues="@array/default_font_values" android:entryValues="@array/default_font_values"
android:defaultValue="@string/default_font_value" /> android:defaultValue="@string/default_font_value" />
<CheckBoxPreference
android:defaultValue="false"
android:key="immersive_enter_single_tap"
android:title="@string/settings_immersive_enter_single_tap" >
</CheckBoxPreference>
<ListPreference <ListPreference
android:key="volume_key_navigation" android:key="volume_key_navigation"
android:title="@string/volume_key_navigation" android:title="@string/volume_key_navigation"

View file

@ -7,6 +7,7 @@ import android.webkit.WebViewClient;
import com.newsblur.R; import com.newsblur.R;
import com.newsblur.network.APIConstants; import com.newsblur.network.APIConstants;
import com.newsblur.util.UIUtils;
public class AddFacebook extends NbActivity { public class AddFacebook extends NbActivity {
@ -17,10 +18,12 @@ public class AddFacebook extends NbActivity {
protected void onCreate(Bundle bundle) { protected void onCreate(Bundle bundle) {
super.onCreate(bundle); super.onCreate(bundle);
setContentView(R.layout.activity_webcontainer); setContentView(R.layout.activity_webcontainer);
UIUtils.setupToolbar(this, R.drawable.logo, getString(R.string.add_facebook), true);
webview = (WebView) findViewById(R.id.webcontainer); webview = (WebView) findViewById(R.id.webcontainer);
webview.getSettings().setJavaScriptEnabled(true); webview.getSettings().setJavaScriptEnabled(true);
webview.setWebViewClient(new WebViewClient() { webview.setWebViewClient(new WebViewClient() {
// this was deprecated in API 24 but the replacement only added in the same release. // this was deprecated in API 24 but the replacement only added in the same release.
// the suppression can be removed when we move past 24 // the suppression can be removed when we move past 24

View file

@ -20,10 +20,10 @@ public class AddFeedExternal extends NbActivity implements AddFeedFragment.AddFe
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
binding = ActivityAddfeedexternalBinding.inflate(getLayoutInflater()); binding = ActivityAddfeedexternalBinding.inflate(getLayoutInflater());
getActionBar().setDisplayHomeAsUpEnabled(true);
setContentView(binding.getRoot()); setContentView(binding.getRoot());
UIUtils.setupToolbar(this, R.drawable.logo, "Add Feed", true);
binding.loadingThrob.setEnabled(!ViewUtils.isPowerSaveMode(this)); binding.loadingThrob.setEnabled(!ViewUtils.isPowerSaveMode(this));
binding.loadingThrob.setColors(UIUtils.getColor(this, R.color.refresh_1), binding.loadingThrob.setColors(UIUtils.getColor(this, R.color.refresh_1),
UIUtils.getColor(this, R.color.refresh_2), UIUtils.getColor(this, R.color.refresh_2),

View file

@ -10,6 +10,7 @@ import android.widget.Button;
import com.newsblur.R; import com.newsblur.R;
import com.newsblur.fragment.AddSocialFragment; import com.newsblur.fragment.AddSocialFragment;
import com.newsblur.util.UIUtils;
public class AddSocial extends NbActivity { public class AddSocial extends NbActivity {
@ -21,6 +22,8 @@ public class AddSocial extends NbActivity {
protected void onCreate(Bundle bundle) { protected void onCreate(Bundle bundle) {
super.onCreate(bundle); super.onCreate(bundle);
setContentView(R.layout.activity_addsocial); setContentView(R.layout.activity_addsocial);
UIUtils.setupToolbar(this, R.drawable.logo, getString(R.string.add_friends), false);
fragmentManager = getSupportFragmentManager(); fragmentManager = getSupportFragmentManager();

View file

@ -7,6 +7,7 @@ import android.webkit.WebViewClient;
import com.newsblur.R; import com.newsblur.R;
import com.newsblur.network.APIConstants; import com.newsblur.network.APIConstants;
import com.newsblur.util.UIUtils;
public class AddTwitter extends NbActivity { public class AddTwitter extends NbActivity {
@ -17,6 +18,8 @@ public class AddTwitter extends NbActivity {
protected void onCreate(Bundle bundle) { protected void onCreate(Bundle bundle) {
super.onCreate(bundle); super.onCreate(bundle);
setContentView(R.layout.activity_webcontainer); setContentView(R.layout.activity_webcontainer);
UIUtils.setupToolbar(this, R.drawable.logo, getString(R.string.add_twitter), true);
webview = (WebView) findViewById(R.id.webcontainer); webview = (WebView) findViewById(R.id.webcontainer);
webview.getSettings().setJavaScriptEnabled(true); webview.getSettings().setJavaScriptEnabled(true);

View file

@ -11,7 +11,7 @@ public class AllSharedStoriesItemsList extends ItemsList {
protected void onCreate(Bundle bundle) { protected void onCreate(Bundle bundle) {
super.onCreate(bundle); super.onCreate(bundle);
UIUtils.setCustomActionBar(this, R.drawable.ak_icon_blurblogs, getResources().getString(R.string.all_shared_stories_title)); UIUtils.setupToolbar(this, R.drawable.ak_icon_blurblogs, getResources().getString(R.string.all_shared_stories_title), false);
} }
@Override @Override

View file

@ -11,7 +11,7 @@ public class AllSharedStoriesReading extends Reading {
protected void onCreate(Bundle savedInstanceBundle) { protected void onCreate(Bundle savedInstanceBundle) {
super.onCreate(savedInstanceBundle); super.onCreate(savedInstanceBundle);
UIUtils.setCustomActionBar(this, R.drawable.ak_icon_blurblogs, getResources().getString(R.string.all_shared_stories_title)); UIUtils.setupToolbar(this, R.drawable.ak_icon_blurblogs, getResources().getString(R.string.all_shared_stories_title), false);
} }
} }

View file

@ -12,7 +12,7 @@ public class AllStoriesItemsList extends ItemsList {
protected void onCreate(Bundle bundle) { protected void onCreate(Bundle bundle) {
super.onCreate(bundle); super.onCreate(bundle);
UIUtils.setCustomActionBar(this, R.drawable.ak_icon_allstories, getResources().getString(R.string.all_stories_title)); UIUtils.setupToolbar(this, R.drawable.ak_icon_allstories, getResources().getString(R.string.all_stories_title), false);
} }
@Override @Override

View file

@ -11,8 +11,7 @@ public class AllStoriesReading extends Reading {
protected void onCreate(Bundle savedInstanceBundle) { protected void onCreate(Bundle savedInstanceBundle) {
super.onCreate(savedInstanceBundle); super.onCreate(savedInstanceBundle);
UIUtils.setCustomActionBar(this, R.drawable.ak_icon_allstories, getResources().getString(R.string.all_stories_title)); UIUtils.setupToolbar(this, R.drawable.ak_icon_allstories, getResources().getString(R.string.all_stories_title), false);
setTitle(getResources().getString(R.string.all_stories_row_title));
} }
} }

View file

@ -46,7 +46,6 @@ abstract public class FeedChooser extends NbActivity {
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
bindLayout(); bindLayout();
getActionBar().setDisplayHomeAsUpEnabled(true);
setupList(); setupList();
loadFeeds(); loadFeeds();
loadFolders(); loadFolders();

View file

@ -46,7 +46,7 @@ public class FeedItemsList extends ItemsList {
super.onCreate(bundle); super.onCreate(bundle);
UIUtils.setCustomActionBar(this, feed.faviconUrl, feed.title); UIUtils.setupToolbar(this, feed.faviconUrl, feed.title, false);
checkInAppReview(); checkInAppReview();
} }

View file

@ -23,7 +23,7 @@ public class FeedReading extends Reading {
return; return;
} }
UIUtils.setCustomActionBar(this, feed.faviconUrl, feed.title); UIUtils.setupToolbar(this, feed.faviconUrl, feed.title, false);
} }
} }

View file

@ -16,7 +16,7 @@ public class FolderItemsList extends ItemsList {
super.onCreate(bundle); super.onCreate(bundle);
UIUtils.setCustomActionBar(this, R.drawable.g_icn_folder_rss, folderName); UIUtils.setupToolbar(this, R.drawable.g_icn_folder_rss, folderName, false);
} }
@Override @Override

View file

@ -11,7 +11,7 @@ public class FolderReading extends Reading {
protected void onCreate(Bundle savedInstanceBundle) { protected void onCreate(Bundle savedInstanceBundle) {
super.onCreate(savedInstanceBundle); super.onCreate(savedInstanceBundle);
UIUtils.setCustomActionBar(this, R.drawable.g_icn_folder_rss, fs.getFolderName()); UIUtils.setupToolbar(this, R.drawable.g_icn_folder_rss, fs.getFolderName(), false);
} }
} }

View file

@ -11,7 +11,7 @@ public class GlobalSharedStoriesItemsList extends ItemsList {
protected void onCreate(Bundle bundle) { protected void onCreate(Bundle bundle) {
super.onCreate(bundle); super.onCreate(bundle);
UIUtils.setCustomActionBar(this, R.drawable.ak_icon_global, getResources().getString(R.string.global_shared_stories_title)); UIUtils.setupToolbar(this, R.drawable.ak_icon_global, getResources().getString(R.string.global_shared_stories_title), false);
} }
@Override @Override

View file

@ -12,7 +12,7 @@ public class GlobalSharedStoriesReading extends Reading {
protected void onCreate(Bundle savedInstanceBundle) { protected void onCreate(Bundle savedInstanceBundle) {
super.onCreate(savedInstanceBundle); super.onCreate(savedInstanceBundle);
UIUtils.setCustomActionBar(this, R.drawable.ak_icon_global, getResources().getString(R.string.global_shared_stories_title)); UIUtils.setupToolbar(this, R.drawable.ak_icon_global, getResources().getString(R.string.global_shared_stories_title), false);
} }
@Override @Override

View file

@ -1,57 +0,0 @@
package com.newsblur.activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.fragment.app.FragmentActivity;
import com.newsblur.databinding.ActivityInAppBrowserBinding;
import com.newsblur.util.PrefsUtils;
public class InAppBrowser extends FragmentActivity {
public static final String URI = "uri";
private ActivityInAppBrowserBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PrefsUtils.applyThemePreference(this);
binding = ActivityInAppBrowserBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
String url = getIntent().getParcelableExtra(URI).toString();
binding.webView.getSettings().setJavaScriptEnabled(true);
binding.webView.getSettings().setLoadWithOverviewMode(true);
binding.webView.getSettings().setSupportZoom(true);
binding.webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
binding.progressBar.setVisibility(View.VISIBLE);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
binding.progressBar.setVisibility(View.GONE);
}
});
binding.webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
binding.progressBar.setProgress(newProgress);
}
});
binding.webView.loadUrl(url);
}
}

View file

@ -16,7 +16,7 @@ public class InfrequentItemsList extends ItemsList implements InfrequentCutoffCh
protected void onCreate(Bundle bundle) { protected void onCreate(Bundle bundle) {
super.onCreate(bundle); super.onCreate(bundle);
UIUtils.setCustomActionBar(this, R.drawable.ak_icon_allstories, getResources().getString(R.string.infrequent_title)); UIUtils.setupToolbar(this, R.drawable.ak_icon_allstories, getResources().getString(R.string.infrequent_title), false);
} }
@Override @Override

View file

@ -11,7 +11,7 @@ public class InfrequentReading extends Reading {
protected void onCreate(Bundle savedInstanceBundle) { protected void onCreate(Bundle savedInstanceBundle) {
super.onCreate(savedInstanceBundle); super.onCreate(savedInstanceBundle);
UIUtils.setCustomActionBar(this, R.drawable.ak_icon_allstories, getResources().getString(R.string.infrequent_title)); UIUtils.setupToolbar(this, R.drawable.ak_icon_allstories, getResources().getString(R.string.infrequent_title), false);
} }
} }

View file

@ -5,6 +5,8 @@ import android.graphics.Bitmap;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import androidx.appcompat.widget.PopupMenu;
import androidx.fragment.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
@ -17,7 +19,6 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.View.OnKeyListener; import android.view.View.OnKeyListener;
import android.widget.AbsListView; import android.widget.AbsListView;
import android.widget.PopupMenu;
import android.widget.SeekBar; import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.SeekBar.OnSeekBarChangeListener;
@ -58,8 +59,6 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
binding = ActivityMainBinding.inflate(getLayoutInflater()); binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot()); setContentView(binding.getRoot());
getActionBar().hide();
// set the status bar to an generic loading message when the activity is first created so // set the status bar to an generic loading message when the activity is first created so
// that something is displayed while the service warms up // that something is displayed while the service warms up
binding.mainSyncStatus.setText(R.string.loading); binding.mainSyncStatus.setText(R.string.loading);
@ -108,30 +107,11 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
FeedUtils.currentFolderName = null; FeedUtils.currentFolderName = null;
binding.mainMenuButton.setOnClickListener(new View.OnClickListener() { binding.mainMenuButton.setOnClickListener(v -> onClickMenuButton());
@Override binding.mainAddButton.setOnClickListener(v -> onClickAddButton());
public void onClick(View v) { binding.mainProfileButton.setOnClickListener(v -> onClickProfileButton());
onClickMenuButton(); binding.mainUserImage.setOnClickListener(v -> onClickUserButton());
} binding.mainSearchFeedsButton.setOnClickListener(v -> onClickSearchFeedsButton());
});
binding.mainAddButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickAddButton();
}
});
binding.mainProfileButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickProfileButton();
}
});
binding.mainUserImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickUserButton();
}
});
} }
@Override @Override
@ -280,21 +260,6 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
loginAsItem.setVisible(false); loginAsItem.setVisible(false);
} }
MenuItem feedbackItem = menu.findItem(R.id.menu_feedback);
if (AppConstants.ENABLE_FEEDBACK) {
feedbackItem.setTitle(feedbackItem.getTitle() + " (v" + PrefsUtils.getVersion(this) + ")");
} else {
feedbackItem.setVisible(false);
}
if ( (folderFeedList.currentState == StateFilter.ALL) ||
(folderFeedList.currentState == StateFilter.SOME) ||
(folderFeedList.currentState == StateFilter.BEST) ) {
menu.findItem(R.id.menu_search_feeds).setVisible(true);
} else {
menu.findItem(R.id.menu_search_feeds).setVisible(false);
}
ThemeValue themeValue = PrefsUtils.getSelectedTheme(this); ThemeValue themeValue = PrefsUtils.getSelectedTheme(this);
if (themeValue == ThemeValue.LIGHT) { if (themeValue == ThemeValue.LIGHT) {
menu.findItem(R.id.menu_theme_light).setChecked(true); menu.findItem(R.id.menu_theme_light).setChecked(true);
@ -314,23 +279,7 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
@Override @Override
public boolean onMenuItemClick(MenuItem item) { public boolean onMenuItemClick(MenuItem item) {
if (item.getItemId() == R.id.menu_refresh) { if (item.getItemId() == R.id.menu_logout) {
onRefresh();
return true;
} else if (item.getItemId() == R.id.menu_search_feeds) {
if (binding.feedlistSearchQuery.getVisibility() != View.VISIBLE) {
binding.feedlistSearchQuery.setVisibility(View.VISIBLE);
binding.feedlistSearchQuery.requestFocus();
} else {
binding.feedlistSearchQuery.setText("");
binding.feedlistSearchQuery.setVisibility(View.GONE);
checkSearchQuery();
}
} else if (item.getItemId() == R.id.menu_add_feed) {
Intent i = new Intent(this, SearchForFeeds.class);
startActivity(i);
return true;
} else if (item.getItemId() == R.id.menu_logout) {
DialogFragment newFragment = new LogoutDialogFragment(); DialogFragment newFragment = new LogoutDialogFragment();
newFragment.show(getSupportFragmentManager(), "dialog"); newFragment.show(getSupportFragmentManager(), "dialog");
} else if (item.getItemId() == R.id.menu_settings) { } else if (item.getItemId() == R.id.menu_settings) {
@ -400,6 +349,17 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
startActivity(i); startActivity(i);
} }
private void onClickSearchFeedsButton() {
if (binding.feedlistSearchQuery.getVisibility() != View.VISIBLE) {
binding.feedlistSearchQuery.setVisibility(View.VISIBLE);
binding.feedlistSearchQuery.requestFocus();
} else {
binding.feedlistSearchQuery.setText("");
binding.feedlistSearchQuery.setVisibility(View.GONE);
checkSearchQuery();
}
}
@Override @Override
public void onScrollStateChanged(AbsListView absListView, int i) { public void onScrollStateChanged(AbsListView absListView, int i) {
// not required // not required

View file

@ -1,6 +1,5 @@
package com.newsblur.activity; package com.newsblur.activity;
import android.app.AlertDialog;
import android.content.Intent; import android.content.Intent;
import android.database.Cursor; import android.database.Cursor;
import android.text.TextUtils; import android.text.TextUtils;
@ -10,6 +9,7 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import androidx.appcompat.app.AlertDialog;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import com.newsblur.R; import com.newsblur.R;
@ -59,6 +59,7 @@ public class MuteConfig extends FeedChooser implements MuteConfigAdapter.FeedSta
void bindLayout() { void bindLayout() {
binding = ActivityMuteConfigBinding.inflate(getLayoutInflater()); binding = ActivityMuteConfigBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot()); setContentView(binding.getRoot());
UIUtils.setupToolbar(this, R.drawable.logo, getString(R.string.mute_sites), true);
} }
@Override @Override

View file

@ -1,6 +1,8 @@
package com.newsblur.activity; package com.newsblur.activity;
import android.os.Bundle; import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import android.widget.Toast; import android.widget.Toast;
@ -15,7 +17,7 @@ import java.util.ArrayList;
* The base class for all Activities in the NewsBlur app. Handles enforcement of * The base class for all Activities in the NewsBlur app. Handles enforcement of
* login state and tracking of sync/update broadcasts. * login state and tracking of sync/update broadcasts.
*/ */
public class NbActivity extends FragmentActivity { public class NbActivity extends AppCompatActivity {
public static final int UPDATE_DB_READY = (1<<0); public static final int UPDATE_DB_READY = (1<<0);
public static final int UPDATE_METADATA = (1<<1); public static final int UPDATE_METADATA = (1<<1);

View file

@ -1,6 +1,5 @@
package com.newsblur.activity; package com.newsblur.activity;
import android.content.res.Resources;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.Paint; import android.graphics.Paint;
import android.net.Uri; import android.net.Uri;
@ -8,13 +7,10 @@ import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.text.TextUtils; import android.text.TextUtils;
import android.text.util.Linkify; import android.text.util.Linkify;
import android.util.DisplayMetrics;
import android.view.View; import android.view.View;
import android.widget.FrameLayout;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.content.res.ResourcesCompat;
import com.android.billingclient.api.AcknowledgePurchaseParams; import com.android.billingclient.api.AcknowledgePurchaseParams;
import com.android.billingclient.api.AcknowledgePurchaseResponseListener; import com.android.billingclient.api.AcknowledgePurchaseResponseListener;
@ -41,6 +37,7 @@ import com.newsblur.util.UIUtils;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Currency;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
@ -127,7 +124,7 @@ public class Premium extends NbActivity {
} }
private void setupUI() { private void setupUI() {
UIUtils.setCustomActionBar(this, R.drawable.logo, getString(R.string.premium_toolbar_title)); UIUtils.setupToolbar(this, R.drawable.logo, getString(R.string.premium_toolbar_title), true);
// linkify before setting the string resource // linkify before setting the string resource
BetterLinkMovementMethod.linkify(Linkify.WEB_URLS, binding.textPolicies) BetterLinkMovementMethod.linkify(Linkify.WEB_URLS, binding.textPolicies)
@ -230,10 +227,9 @@ public class Premium extends NbActivity {
} }
private void showSubscriptionDetails() { private void showSubscriptionDetails() {
// handling dynamic currency and pricing for 1Y subscriptions double price = subscriptionDetails.getPriceAmountMicros() / 1000f / 1000f;
String currencySymbol = subscriptionDetails.getPrice().substring(0, 1); Currency currency = Currency.getInstance(subscriptionDetails.getPriceCurrencyCode());
String priceString = subscriptionDetails.getPrice().substring(1); String currencySymbol = currency.getSymbol(Locale.getDefault());
double price = Double.parseDouble(priceString);
StringBuilder pricingText = new StringBuilder(); StringBuilder pricingText = new StringBuilder();
pricingText.append(subscriptionDetails.getPrice()); pricingText.append(subscriptionDetails.getPrice());
pricingText.append(" per year ("); pricingText.append(" per year (");

View file

@ -13,6 +13,7 @@ import com.newsblur.domain.UserDetails;
import com.newsblur.fragment.ProfileDetailsFragment; import com.newsblur.fragment.ProfileDetailsFragment;
import com.newsblur.network.APIManager; import com.newsblur.network.APIManager;
import com.newsblur.util.PrefsUtils; import com.newsblur.util.PrefsUtils;
import com.newsblur.util.UIUtils;
public class Profile extends NbActivity { public class Profile extends NbActivity {
@ -28,7 +29,7 @@ public class Profile extends NbActivity {
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile); setContentView(R.layout.activity_profile);
getActionBar().setDisplayHomeAsUpEnabled(true); UIUtils.setupToolbar(this, R.drawable.logo, getString(R.string.profile), true);
apiManager = new APIManager(this); apiManager = new APIManager(this);
if (savedInstanceState == null) { if (savedInstanceState == null) {
userId = getIntent().getStringExtra(USER_ID); userId = getIntent().getStringExtra(USER_ID);

View file

@ -11,7 +11,7 @@ public class ReadStoriesItemsList extends ItemsList {
protected void onCreate(Bundle bundle) { protected void onCreate(Bundle bundle) {
super.onCreate(bundle); super.onCreate(bundle);
UIUtils.setCustomActionBar(this, R.drawable.g_icn_unread_double, getResources().getString(R.string.read_stories_title)); UIUtils.setupToolbar(this, R.drawable.g_icn_unread_double, getResources().getString(R.string.read_stories_title), false);
} }
@Override @Override

View file

@ -11,7 +11,7 @@ public class ReadStoriesReading extends Reading {
protected void onCreate(Bundle savedInstanceBundle) { protected void onCreate(Bundle savedInstanceBundle) {
super.onCreate(savedInstanceBundle); super.onCreate(savedInstanceBundle);
UIUtils.setCustomActionBar(this, R.drawable.g_icn_unread, getResources().getString(R.string.read_stories_title)); UIUtils.setupToolbar(this, R.drawable.g_icn_unread, getResources().getString(R.string.read_stories_title), false);
} }
} }

View file

@ -53,7 +53,6 @@ public abstract class Reading extends NbActivity implements OnPageChangeListener
private static final String BUNDLE_POSITION = "position"; private static final String BUNDLE_POSITION = "position";
private static final String BUNDLE_STARTING_UNREAD = "starting_unread"; private static final String BUNDLE_STARTING_UNREAD = "starting_unread";
private static final String BUNDLE_SELECTED_FEED_VIEW = "selectedFeedView"; private static final String BUNDLE_SELECTED_FEED_VIEW = "selectedFeedView";
private static final String BUNDLE_IS_FULLSCREEN = "is_fullscreen";
/** special value for starting story hash that jumps to the first unread. */ /** special value for starting story hash that jumps to the first unread. */
public static final String FIND_FIRST_UNREAD = "FIND_FIRST_UNREAD"; public static final String FIND_FIRST_UNREAD = "FIND_FIRST_UNREAD";
@ -143,14 +142,6 @@ public abstract class Reading extends NbActivity implements OnPageChangeListener
intelState = PrefsUtils.getStateFilter(this); intelState = PrefsUtils.getStateFilter(this);
volumeKeyNavigation = PrefsUtils.getVolumeKeyNavigation(this); volumeKeyNavigation = PrefsUtils.getVolumeKeyNavigation(this);
// were we fullscreen before rotation?
if ((savedInstanceBundle != null) && savedInstanceBundle.containsKey(BUNDLE_IS_FULLSCREEN)) {
boolean isFullscreen = savedInstanceBundle.getBoolean(BUNDLE_IS_FULLSCREEN, false);
if (isFullscreen) {
ViewUtils.hideSystemUI(getWindow().getDecorView());
}
}
// this value is expensive to compute but doesn't change during a single runtime // this value is expensive to compute but doesn't change during a single runtime
this.overlayRangeTopPx = (float) UIUtils.dp2px(this, OVERLAY_RANGE_TOP_DP); this.overlayRangeTopPx = (float) UIUtils.dp2px(this, OVERLAY_RANGE_TOP_DP);
this.overlayRangeBotPx = (float) UIUtils.dp2px(this, OVERLAY_RANGE_BOT_DP); this.overlayRangeBotPx = (float) UIUtils.dp2px(this, OVERLAY_RANGE_BOT_DP);
@ -199,10 +190,6 @@ public abstract class Reading extends NbActivity implements OnPageChangeListener
if (startingUnreadCount != 0) { if (startingUnreadCount != 0) {
outState.putInt(BUNDLE_STARTING_UNREAD, startingUnreadCount); outState.putInt(BUNDLE_STARTING_UNREAD, startingUnreadCount);
} }
if (ViewUtils.isSystemUIHidden(getWindow().getDecorView())) {
outState.putBoolean(BUNDLE_IS_FULLSCREEN, true);
}
} }
@Override @Override
@ -375,29 +362,12 @@ public abstract class Reading extends NbActivity implements OnPageChangeListener
return result; return result;
} }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.reading, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
return true;
}
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) { if (item.getItemId() == android.R.id.home) {
finish(); finish();
return true; return true;
} else if (item.getItemId() == R.id.menu_reading_fullscreen) { } else {
ViewUtils.hideSystemUI(getWindow().getDecorView());
return true;
} else {
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
} }

View file

@ -15,7 +15,7 @@ public class SavedStoriesItemsList extends ItemsList {
if (fs.getSingleSavedTag() != null) { if (fs.getSingleSavedTag() != null) {
title = title + " - " + fs.getSingleSavedTag(); title = title + " - " + fs.getSingleSavedTag();
} }
UIUtils.setCustomActionBar(this, R.drawable.clock, title); UIUtils.setupToolbar(this, R.drawable.clock, title, false);
} }
@Override @Override

View file

@ -15,7 +15,7 @@ public class SavedStoriesReading extends Reading {
if (fs.getSingleSavedTag() != null) { if (fs.getSingleSavedTag() != null) {
title = title + " - " + fs.getSingleSavedTag(); title = title + " - " + fs.getSingleSavedTag();
} }
UIUtils.setCustomActionBar(this, R.drawable.clock, title); UIUtils.setupToolbar(this, R.drawable.clock, title, false);
} }
} }

View file

@ -27,6 +27,7 @@ import com.newsblur.domain.FeedResult;
import com.newsblur.fragment.AddFeedFragment; import com.newsblur.fragment.AddFeedFragment;
import com.newsblur.network.SearchAsyncTaskLoader; import com.newsblur.network.SearchAsyncTaskLoader;
import com.newsblur.network.SearchLoaderResponse; import com.newsblur.network.SearchLoaderResponse;
import com.newsblur.util.UIUtils;
// TODO: this activity's use of the inbuilt activity search facility as well as an improper use of a loader to // TODO: this activity's use of the inbuilt activity search facility as well as an improper use of a loader to
// make network requests makes it easily lose state, lack non-legacy progress indication, and generally // make network requests makes it easily lose state, lack non-legacy progress indication, and generally
@ -46,11 +47,10 @@ public class SearchForFeeds extends NbActivity implements LoaderCallbacks<Search
@Override @Override
protected void onCreate(Bundle arg0) { protected void onCreate(Bundle arg0) {
super.onCreate(arg0); super.onCreate(arg0);
getActionBar().setDisplayHomeAsUpEnabled(true);
setTitle(R.string.title_feed_search);
setContentView(R.layout.activity_feed_search); setContentView(R.layout.activity_feed_search);
UIUtils.setupToolbar(this, R.drawable.logo, getString(R.string.title_feed_search), true);
TextView emptyView = (TextView) findViewById(R.id.empty_view); TextView emptyView = (TextView) findViewById(R.id.empty_view);
resultsList = (ListView) findViewById(R.id.feed_result_list); resultsList = (ListView) findViewById(R.id.feed_result_list);
resultsList.setEmptyView(emptyView); resultsList.setEmptyView(emptyView);

View file

@ -1,27 +1,31 @@
package com.newsblur.activity; package com.newsblur.activity;
import androidx.fragment.app.FragmentActivity;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import android.view.MenuItem;
import androidx.appcompat.app.AppCompatActivity;
import com.newsblur.R;
import com.newsblur.databinding.ActivitySettingsBinding;
import com.newsblur.fragment.SettingsFragment; import com.newsblur.fragment.SettingsFragment;
import com.newsblur.util.PrefConstants; import com.newsblur.util.PrefConstants;
import com.newsblur.util.PrefsUtils; import com.newsblur.util.PrefsUtils;
import com.newsblur.util.UIUtils; import com.newsblur.util.UIUtils;
public class Settings extends FragmentActivity implements SharedPreferences.OnSharedPreferenceChangeListener { public class Settings extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
PrefsUtils.applyThemePreference(this); PrefsUtils.applyThemePreference(this);
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
ActivitySettingsBinding binding = ActivitySettingsBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
UIUtils.setupToolbar(this, R.drawable.logo, getString(R.string.settings), true);
getActionBar().setDisplayHomeAsUpEnabled(true); getSupportFragmentManager()
.beginTransaction()
SettingsFragment fragment = new SettingsFragment(); .replace(binding.container.getId(), new SettingsFragment())
getFragmentManager().beginTransaction().replace(android.R.id.content, fragment).commit(); .commit();
SharedPreferences prefs = getSharedPreferences(PrefConstants.PREFERENCES, 0); SharedPreferences prefs = getSharedPreferences(PrefConstants.PREFERENCES, 0);
prefs.registerOnSharedPreferenceChangeListener(this); prefs.registerOnSharedPreferenceChangeListener(this);
@ -29,21 +33,10 @@ public class Settings extends FragmentActivity implements SharedPreferences.OnSh
@Override @Override
protected void onDestroy() { protected void onDestroy() {
super.onDestroy();
SharedPreferences prefs = getSharedPreferences(PrefConstants.PREFERENCES, 0); SharedPreferences prefs = getSharedPreferences(PrefConstants.PREFERENCES, 0);
prefs.unregisterOnSharedPreferenceChangeListener(this); prefs.unregisterOnSharedPreferenceChangeListener(this);
} super.onDestroy();
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
} }
@Override @Override

View file

@ -16,7 +16,7 @@ public class SocialFeedItemsList extends ItemsList {
socialFeed = (SocialFeed) getIntent().getSerializableExtra(EXTRA_SOCIAL_FEED); socialFeed = (SocialFeed) getIntent().getSerializableExtra(EXTRA_SOCIAL_FEED);
super.onCreate(bundle); super.onCreate(bundle);
UIUtils.setCustomActionBar(this, socialFeed.photoUrl, socialFeed.feedTitle); UIUtils.setupToolbar(this, socialFeed.photoUrl, socialFeed.feedTitle, false);
} }
@Override @Override

View file

@ -13,7 +13,7 @@ public class SocialFeedReading extends Reading {
super.onCreate(savedInstanceBundle); super.onCreate(savedInstanceBundle);
SocialFeed socialFeed = FeedUtils.dbHelper.getSocialFeed(fs.getSingleSocialFeed().getKey()); SocialFeed socialFeed = FeedUtils.dbHelper.getSocialFeed(fs.getSingleSocialFeed().getKey());
if (socialFeed == null) finish(); // don't open fatally stale intents if (socialFeed == null) finish(); // don't open fatally stale intents
UIUtils.setCustomActionBar(this, socialFeed.photoUrl, socialFeed.feedTitle); UIUtils.setupToolbar(this, socialFeed.photoUrl, socialFeed.feedTitle, false);
} }
} }

View file

@ -11,6 +11,7 @@ import com.newsblur.databinding.ActivityWidgetConfigBinding;
import com.newsblur.domain.Feed; import com.newsblur.domain.Feed;
import com.newsblur.domain.Folder; import com.newsblur.domain.Folder;
import com.newsblur.util.PrefsUtils; import com.newsblur.util.PrefsUtils;
import com.newsblur.util.UIUtils;
import com.newsblur.widget.WidgetUtils; import com.newsblur.widget.WidgetUtils;
import java.util.ArrayList; import java.util.ArrayList;
@ -62,6 +63,7 @@ public class WidgetConfig extends FeedChooser {
void bindLayout() { void bindLayout() {
binding = ActivityWidgetConfigBinding.inflate(getLayoutInflater()); binding = ActivityWidgetConfigBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot()); setContentView(binding.getRoot());
UIUtils.setupToolbar(this, R.drawable.logo, getString(R.string.widget), true);
} }
@Override @Override

View file

@ -202,6 +202,12 @@ public class BlurDatabaseHelper {
synchronized (RW_MUTEX) {dbRW.execSQL(q);} synchronized (RW_MUTEX) {dbRW.execSQL(q);}
} }
public void deleteStories() {
vacuum();
synchronized (RW_MUTEX) {dbRW.delete(DatabaseConstants.STORY_TABLE, null, null);}
synchronized (RW_MUTEX) {dbRW.delete(DatabaseConstants.STORY_TEXT_TABLE, null, null);}
}
public Feed getFeed(String feedId) { public Feed getFeed(String feedId) {
Cursor c = dbRO.query(DatabaseConstants.FEED_TABLE, null, DatabaseConstants.FEED_ID + " = ?", new String[] {feedId}, null, null, null); Cursor c = dbRO.query(DatabaseConstants.FEED_TABLE, null, DatabaseConstants.FEED_ID + " = ?", new String[] {feedId}, null, null, null);
Feed result = null; Feed result = null;

View file

@ -107,6 +107,7 @@ public class DatabaseConstants {
public static final String STORY_SEARCH_HIT = "search_hit"; public static final String STORY_SEARCH_HIT = "search_hit";
public static final String STORY_THUMBNAIL_URL = "thumbnail_url"; public static final String STORY_THUMBNAIL_URL = "thumbnail_url";
public static final String STORY_INFREQUENT = "infrequent"; public static final String STORY_INFREQUENT = "infrequent";
public static final String STORY_HAS_MODIFICATIONS = "has_modifications";
public static final String READING_SESSION_TABLE = "reading_session"; public static final String READING_SESSION_TABLE = "reading_session";
public static final String READING_SESSION_STORY_HASH = "session_story_hash"; public static final String READING_SESSION_STORY_HASH = "session_story_hash";
@ -272,7 +273,8 @@ public class DatabaseConstants {
STORY_IMAGE_URLS + TEXT + ", " + STORY_IMAGE_URLS + TEXT + ", " +
STORY_LAST_READ_DATE + INTEGER + ", " + STORY_LAST_READ_DATE + INTEGER + ", " +
STORY_SEARCH_HIT + TEXT + ", " + STORY_SEARCH_HIT + TEXT + ", " +
STORY_THUMBNAIL_URL + TEXT + STORY_THUMBNAIL_URL + TEXT + ", " +
STORY_HAS_MODIFICATIONS + INTEGER +
")"; ")";
static final String READING_SESSION_SQL = "CREATE TABLE " + READING_SESSION_TABLE + " (" + static final String READING_SESSION_SQL = "CREATE TABLE " + READING_SESSION_TABLE + " (" +
@ -344,7 +346,7 @@ public class DatabaseConstants {
STORY_INTELLIGENCE_AUTHORS, STORY_INTELLIGENCE_FEED, STORY_INTELLIGENCE_TAGS, STORY_INTELLIGENCE_TOTAL, STORY_INTELLIGENCE_AUTHORS, STORY_INTELLIGENCE_FEED, STORY_INTELLIGENCE_TAGS, STORY_INTELLIGENCE_TOTAL,
STORY_INTELLIGENCE_TITLE, STORY_PERMALINK, STORY_READ, STORY_STARRED, STORY_STARRED_DATE, STORY_TAGS, STORY_USER_TAGS, STORY_TITLE, STORY_INTELLIGENCE_TITLE, STORY_PERMALINK, STORY_READ, STORY_STARRED, STORY_STARRED_DATE, STORY_TAGS, STORY_USER_TAGS, STORY_TITLE,
STORY_SOCIAL_USER_ID, STORY_SOURCE_USER_ID, STORY_SHARED_USER_IDS, STORY_FRIEND_USER_IDS, STORY_HASH, STORY_SOCIAL_USER_ID, STORY_SOURCE_USER_ID, STORY_SHARED_USER_IDS, STORY_FRIEND_USER_IDS, STORY_HASH,
STORY_LAST_READ_DATE, STORY_THUMBNAIL_URL, STORY_LAST_READ_DATE, STORY_THUMBNAIL_URL, STORY_HAS_MODIFICATIONS,
}; };
private static final String STORY_COLUMNS = private static final String STORY_COLUMNS =

View file

@ -89,6 +89,9 @@ public class Story implements Serializable {
@SerializedName("secure_image_thumbnails") @SerializedName("secure_image_thumbnails")
public Map<String, String> secureImageThumbnails; public Map<String, String> secureImageThumbnails;
@SerializedName("has_modifications")
public boolean hasModifications;
// NOTE: this is parsed and saved to the DB, but is *not* generally un-thawed when stories are fetched back from the DB // NOTE: this is parsed and saved to the DB, but is *not* generally un-thawed when stories are fetched back from the DB
@SerializedName("image_urls") @SerializedName("image_urls")
public String[] imageUrls; public String[] imageUrls;
@ -149,6 +152,7 @@ public class Story implements Serializable {
values.put(DatabaseConstants.STORY_SEARCH_HIT, searchHit); values.put(DatabaseConstants.STORY_SEARCH_HIT, searchHit);
values.put(DatabaseConstants.STORY_THUMBNAIL_URL, thumbnailUrl); values.put(DatabaseConstants.STORY_THUMBNAIL_URL, thumbnailUrl);
values.put(DatabaseConstants.STORY_INFREQUENT, infrequent); values.put(DatabaseConstants.STORY_INFREQUENT, infrequent);
values.put(DatabaseConstants.STORY_HAS_MODIFICATIONS, hasModifications);
return values; return values;
} }
@ -180,6 +184,7 @@ public class Story implements Serializable {
story.lastReadTimestamp = cursor.getLong(cursor.getColumnIndex(DatabaseConstants.STORY_LAST_READ_DATE)); story.lastReadTimestamp = cursor.getLong(cursor.getColumnIndex(DatabaseConstants.STORY_LAST_READ_DATE));
story.sharedTimestamp = cursor.getLong(cursor.getColumnIndex(DatabaseConstants.STORY_SHARED_DATE)); story.sharedTimestamp = cursor.getLong(cursor.getColumnIndex(DatabaseConstants.STORY_SHARED_DATE));
story.thumbnailUrl = cursor.getString(cursor.getColumnIndex(DatabaseConstants.STORY_THUMBNAIL_URL)); story.thumbnailUrl = cursor.getString(cursor.getColumnIndex(DatabaseConstants.STORY_THUMBNAIL_URL));
story.hasModifications = cursor.getInt(cursor.getColumnIndex(DatabaseConstants.STORY_HAS_MODIFICATIONS)) > 0;
return story; return story;
} }

View file

@ -1,13 +1,13 @@
package com.newsblur.fragment; package com.newsblur.fragment;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.content.Intent; import android.content.Intent;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;

View file

@ -1,9 +1,10 @@
package com.newsblur.fragment; package com.newsblur.fragment;
import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import com.newsblur.R; import com.newsblur.R;

View file

@ -6,10 +6,11 @@ import java.util.List;
import java.util.Set; import java.util.Set;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import android.view.Gravity; import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;

View file

@ -11,10 +11,11 @@ import com.newsblur.util.FeedUtils;
import com.newsblur.util.UIUtils; import com.newsblur.util.UIUtils;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment; import androidx.fragment.app.DialogFragment;
public class DeleteFeedFragment extends DialogFragment { public class DeleteFeedFragment extends DialogFragment {

View file

@ -1,11 +1,11 @@
package com.newsblur.fragment; package com.newsblur.fragment;
import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import android.text.TextUtils; import android.text.TextUtils;

View file

@ -1,10 +1,11 @@
package com.newsblur.fragment; package com.newsblur.fragment;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;

Some files were not shown because too many files have changed in this diff Show more