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.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():
logging.debug(" ---> Cleaning analytics... %s feed fetches" % (
settings.MONGOANALYTICSDB.nbanalytics.feed_fetches.count(),

View file

@ -1600,6 +1600,14 @@ class MSharedStory(mongo.DynamicDocument):
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
def feed_quota(cls, user_id, story_hash, feed_id=None, days=1, quota=1):
day_ago = datetime.datetime.now()-datetime.timedelta(days=days)

View file

@ -611,6 +611,7 @@ def mark_story_as_shared(request):
}
try:
shared_story = MSharedStory.objects.create(**story_db)
shared_story.publish_to_subscribers()
except NotUniqueError:
shared_story = MSharedStory.objects.get(story_guid=story_db['story_guid'],
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))
if format == 'html':
stories = MSharedStory.attach_users_to_stories(stories, profiles)
return render(request, 'social/social_story.xhtml', {

View file

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

View file

@ -28,3 +28,20 @@ blockquote a, blockquote a span {
.NB-story > table {
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

@ -28,3 +28,20 @@ blockquote a, blockquote a span {
.NB-story > table {
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

@ -24,3 +24,20 @@ pre, blockquote {
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

@ -64,12 +64,3 @@ pre, blockquote {
word-wrap: break-word !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 {
ext.kotlin_version = '1.4.10'
ext.kotlin_version = '1.4.20'
repositories {
mavenCentral()
maven {
@ -9,7 +9,7 @@ buildscript {
google()
}
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"
}
}
@ -34,10 +34,13 @@ dependencies {
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
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 '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 {
@ -46,14 +49,15 @@ android {
applicationId "com.newsblur"
minSdkVersion 21
targetSdkVersion 29
versionCode 177
versionName "10.1.1"
versionCode 180
versionName "10.2.1b1"
}
compileOptions.with {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
android.buildFeatures.viewBinding = true
android.buildFeatures.dataBinding = true
sourceSets {
main {

View file

@ -4,6 +4,6 @@
android:viewportWidth="24"
android:viewportHeight="24">
<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" />
</vector>

View file

@ -4,6 +4,6 @@
android:viewportWidth="24"
android:viewportHeight="24">
<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" />
</vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 509 B

View file

@ -4,6 +4,6 @@
android:viewportWidth="24"
android:viewportHeight="24">
<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" />
</vector>

View file

@ -4,6 +4,6 @@
android:viewportWidth="24"
android:viewportHeight="24">
<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" />
</vector>

View file

@ -4,6 +4,6 @@
android:viewportWidth="24"
android:viewportHeight="24">
<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" />
</vector>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 389 B

View file

@ -4,9 +4,9 @@
android:viewportWidth="24"
android:viewportHeight="24">
<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" />
<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" />
</vector>

View file

@ -4,6 +4,6 @@
android:viewportWidth="24"
android:viewportHeight="24">
<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" />
</vector>

View file

@ -4,6 +4,6 @@
android:viewportWidth="24"
android:viewportHeight="24">
<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" />
</vector>

View file

@ -4,6 +4,6 @@
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#A6A6A6"
android:fillColor="@color/gray55"
android:pathData="M14,17L4,17v2h10v-2zM20,9L4,9v2h16L20,9zM4,15h16v-2L4,13v2zM4,5v2h16L20,5L4,5z" />
</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"?>
<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_height="match_parent">
<include layout="@layout/toolbar_newsblur" />
<RelativeLayout
style="?layoutBackground"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true"
style="?itemBackground" >
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<com.newsblur.view.ProgressThrobber
android:id="@+id/loading_throb"
android:layout_width="fill_parent"
android:layout_alignParentTop="true"
android:layout_height="6dp" />
android:layout_height="6dp"
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"
style="?explainerText"
android:visibility="invisible"
android:textSize="16sp" />
android:textSize="16sp"
android:visibility="invisible" />
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -1,8 +1,16 @@
<?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_height="match_parent">
<include layout="@layout/toolbar_newsblur" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/item_background" >
android:background="@color/item_background"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<FrameLayout
android:id="@+id/addsocial_container"
@ -30,3 +38,5 @@
</LinearLayout>
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -1,9 +1,16 @@
<?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_height="match_parent">
<include layout="@layout/toolbar_newsblur" />
<RelativeLayout
style="?listBackground"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
style="?listBackground" >
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<TextView
android:id="@+id/empty_view"
@ -23,3 +30,5 @@
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,34 +1,41 @@
<?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_height="match_parent">
<include layout="@layout/toolbar_newsblur" />
<RelativeLayout
style="?layoutBackground"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true"
style="?itemBackground" >
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<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"
/>
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" />
<LinearLayout
android:id="@+id/activity_itemlist_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_below="@id/itemlist_search_query"
/>
android:orientation="horizontal" />
<include layout="@layout/row_fleuron"
<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"
@ -39,12 +46,12 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:padding="2dp"
android:textSize="14sp"
android:gravity="center"
android:textColor="@color/status_overlay_text"
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
android:id="@+id/main_top_bar"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_height="?attr/actionBarSize"
android:layout_alignParentTop="true"
style="?actionbarBackground" >
android:background="?colorPrimary" >
<ImageView
android:id="@+id/main_user_image"
@ -75,7 +75,19 @@
android:layout_marginLeft="3dp"
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:layout_width="34dp"
android:layout_height="34dp"
@ -98,7 +110,7 @@
android:layout_alignParentBottom="true"
android:tag="feedIntelligenceSelector" />
<Button
<ImageButton
android:id="@+id/main_menu_button"
android:layout_width="34dp"
android:layout_height="34dp"
@ -108,7 +120,7 @@
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true" />
<Button
<ImageButton
android:id="@+id/main_add_button"
android:layout_width="36dp"
android:layout_height="36dp"

View file

@ -1,8 +1,16 @@
<?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_height="match_parent">
<include layout="@layout/toolbar_newsblur" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true">
android:animateLayoutChanges="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<FrameLayout
android:id="@+id/container_sites_count"
@ -57,4 +65,4 @@
</FrameLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -1,9 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
<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" />
<androidx.core.widget.NestedScrollView
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -290,4 +298,6 @@
</FrameLayout>
</ScrollView>
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -1,9 +1,17 @@
<?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_height="match_parent">
<include layout="@layout/toolbar_newsblur" />
<RelativeLayout
style="?layoutBackground"
android:layout_width="match_parent"
android:layout_height="match_parent"
style="?itemBackground"
android:orientation="vertical" >
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<FrameLayout
android:id="@+id/profile_details"
@ -17,13 +25,15 @@
android:layout_below="@id/profile_details">
<androidx.viewpager.widget.PagerTitleStrip
style="?activityDetailsPager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
style="?activityDetailsPager"
android:paddingTop="4dp"
android:paddingBottom="4dp" />
</androidx.viewpager.widget.ViewPager>
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -1,17 +1,24 @@
<?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_height="match_parent">
<include layout="@layout/toolbar_newsblur" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<TextView
android:id="@+id/reading_empty_view_text"
style="?explainerText"
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
@ -19,53 +26,55 @@
android:layout_width="match_parent"
android:layout_height="match_parent" />
<Button
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginBottom="8dp">
<TextView
android:id="@+id/reading_overlay_text"
style="?selectorOverlayBackgroundText"
android:layout_width="110dp"
android:layout_height="40dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_marginLeft="8dp"
android:layout_marginBottom="4dp"
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"
android:paddingLeft="10dp"
style="?selectorOverlayBackgroundText"
android:onClick="overlayText" />
android:textSize="14sp" />
<Button
<ImageButton
android:id="@+id/reading_overlay_send"
style="?selectorOverlayBackgroundSend"
android:layout_width="50dp"
android:layout_height="40dp"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@id/reading_overlay_text"
android:layout_marginLeft="2dp"
android:layout_marginBottom="4dp"
style="?selectorOverlayBackgroundSend"
android:layout_gravity="start"
android:layout_marginStart="120dp"
android:onClick="overlaySend" />
<Button
<TextView
android:id="@+id/reading_overlay_right"
style="?selectorOverlayBackgroundRight"
android:layout_width="120dp"
android:layout_height="40dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_gravity="end"
android:layout_marginRight="8dp"
android:layout_marginBottom="4dp"
android:gravity="center"
android:onClick="overlayRight"
android:text="@string/overlay_next"
android:textSize="14sp"
style="?selectorOverlayBackgroundRight"
android:onClick="overlayRight" />
android:textSize="14sp" />
<Button
<ImageButton
android:id="@+id/reading_overlay_left"
style="?selectorOverlayBackgroundLeft"
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:layout_gravity="end"
android:layout_marginEnd="130dp"
android:onClick="overlayLeft" />
<com.newsblur.view.ProgressCircle
@ -73,42 +82,37 @@
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: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_marginRight="98dp"
android:layout_marginBottom="12dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
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_marginLeft="90dp"
android:layout_marginBottom="12dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
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_alignParentBottom="true"
android:padding="1dp"
android:textSize="13sp"
android:gravity="center"
android:textColor="@color/status_overlay_text"
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" />
</RelativeLayout>
</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,8 +1,16 @@
<?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_height="match_parent">
<include layout="@layout/toolbar_newsblur" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/item_background" >
android:background="@color/item_background"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<WebView
android:id="@+id/webcontainer"
@ -10,3 +18,5 @@
android:layout_height="match_parent" />
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -1,8 +1,16 @@
<?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_height="match_parent">
<include layout="@layout/toolbar_newsblur" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<ExpandableListView
android:id="@+id/list_view"
android:layout_width="match_parent"
@ -19,3 +27,5 @@
android:visibility="gone" />
</FrameLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

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

View file

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

View file

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

View file

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

View file

@ -63,12 +63,12 @@
android:layout_below="@id/row_item_feed_header"
android:background="@color/gray55"/>
<Button
<ImageButton
android:id="@+id/story_context_menu_button"
android:layout_width="34dp"
android:layout_height="34dp"
android:layout_margin="5dp"
android:background="@drawable/ic_menu_moreoverflow"
style="?android:attr/actionOverflowButtonStyle"
android:contentDescription="@string/description_menu"
android:layout_below="@id/item_feed_border"
android:layout_alignParentRight="true" />
@ -107,12 +107,28 @@
android:textSize="12sp"
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
android:id="@+id/reading_item_tags"
android:layout_width="match_parent"
android:layout_height="17dp"
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_marginTop="8dp" />

View file

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

View file

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

View file

@ -1,35 +1,58 @@
<?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_height="wrap_content"
android:orientation="vertical">
<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:layout_marginTop="10dp"
android:paddingLeft="25dip"
android:paddingRight="25dip"
android:paddingBottom="10dip"
android:paddingTop="10dip"
>
android:paddingRight="25dip"
android:paddingBottom="10dip">
<RadioButton android:id="@+id/radio_5"
<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"
<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"
<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"
<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"
<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"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
style="?itemBackground"
style="?layoutBackground"
android:paddingBottom="10dp"
android:paddingTop="10dp" >

View file

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

View file

@ -14,7 +14,9 @@
android:layout_height="wrap_content"
android:layout_marginEnd="4dp"
android:clickable="false"
android:focusable="false" />
android:focusable="false"
android:minWidth="0dp"
android:minHeight="0dp" />
<ImageView
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"?>
<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"
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"
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"
android:title="@string/menu_story_order"
android:showAsAction="never" />
app:showAsAction="never" />
<item android:id="@+id/menu_read_filter"
android:title="@string/menu_read_filter"
android:showAsAction="never" />
app:showAsAction="never" />
<item android:id="@+id/menu_story_list_style"
android:title="@string/menu_story_list_style_choose" >
<menu>
@ -28,7 +29,7 @@
</menu>
</item>
<item android:id="@+id/menu_textsize"
android:showAsAction="never"
app:showAsAction="never"
android:title="@string/menu_textsize"/>
<item android:id="@+id/menu_theme"
android:title="@string/menu_theme_choose" >
@ -65,20 +66,20 @@
</item>
<item android:id="@+id/menu_statistics"
android:title="@string/menu_statistics"
android:showAsAction="never" />
app:showAsAction="never" />
<item android:id="@+id/menu_delete_feed"
android:title="@string/menu_delete_feed"
android:showAsAction="never" />
app:showAsAction="never" />
<item android:id="@+id/menu_rename_feed"
android:title="@string/menu_rename_feed"
android:showAsAction="never" />
app:showAsAction="never" />
<item android:id="@+id/menu_instafetch_feed"
android:title="@string/menu_instafetch_feed" />
<item android:id="@+id/menu_infrequent_cutoff"
android:title="@string/menu_infrequent_cutoff"
android:showAsAction="never" />
app:showAsAction="never" />
<item android:id="@+id/menu_save_search"
android:title="Save Search"
android:showAsAction="never"
app:showAsAction="never"
android:visible="false"/>
</menu>

View file

@ -1,60 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<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"/>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_settings"
android:title="@string/settings"
android:showAsAction="never" />
app:showAsAction="never" />
<item android:id="@+id/menu_mute_sites"
android:title="@string/mute_sites"
android:showAsAction="never" />
app:showAsAction="never" />
<item android:id="@+id/menu_widget"
android:title="@string/widget"
android: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"/>
app:showAsAction="never" />
<item android:id="@+id/menu_premium_account"
android:title="@string/menu_premium_account"
android:showAsAction="never" />
app:showAsAction="never" />
<item android:id="@+id/menu_logout"
android:title="@string/menu_logout"
android:showAsAction="never" />
<item android:id="@+id/menu_textsize"
app:showAsAction="never"
android:title="@string/menu_textsize"/>
<item android:id="@+id/menu_theme"
android:title="@string/menu_theme_choose" >
@ -72,4 +38,27 @@
</menu>
</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>

View file

@ -1,8 +1,9 @@
<?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_sort_by"
android:showAsAction="never"
app:showAsAction="never"
android:title="@string/menu_sort_by">
<menu>
<group android:checkableBehavior="single">
@ -26,7 +27,7 @@
</item>
<item
android:id="@+id/menu_sort_order"
android:showAsAction="never"
app:showAsAction="never"
android:title="@string/menu_sort_order">
<menu>
<group android:checkableBehavior="single">
@ -41,7 +42,7 @@
</item>
<item
android:id="@+id/menu_folder_view"
android:showAsAction="never"
app:showAsAction="never"
android:title="@string/menu_folder_view">
<menu>
<group android:checkableBehavior="single">
@ -68,7 +69,7 @@
android:title="@string/menu_select_none" />
<item
android:id="@+id/menu_widget_background"
android:showAsAction="never"
app:showAsAction="never"
android:title="@string/menu_widget_background">
<menu>
<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"?>
<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"
android:icon="@drawable/ic_menu_search_gray55"
android:title="@string/menu_search"
android:showAsAction="always" />
app:showAsAction="always" />
</menu>

View file

@ -1,51 +1,52 @@
<?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_reading_sharenewsblur"
android:showAsAction="never"
app:showAsAction="never"
android:title="@string/menu_sharenewsblur"/>
<item
android:id="@+id/menu_reading_original"
android:showAsAction="never"
app:showAsAction="never"
android:title="@string/menu_original"/>
<item
android:id="@+id/menu_send_story"
android:showAsAction="never"
app:showAsAction="never"
android:title="@string/menu_send_story"/>
<item
android:id="@+id/menu_send_story_full"
android:showAsAction="never"
app:showAsAction="never"
android:title="@string/menu_send_story_full"/>
<item
android:id="@+id/menu_textsize"
android:showAsAction="never"
app:showAsAction="never"
android:title="@string/menu_textsize"/>
<item
android:id="@+id/menu_font"
android:showAsAction="never"
app:showAsAction="never"
android:title="@string/menu_font"/>
<item
android:id="@+id/menu_reading_save"
android:showAsAction="never"
app:showAsAction="never"
android:title="@string/menu_save_story"/>
<item
android:id="@+id/menu_reading_markunread"
android:showAsAction="never"
app:showAsAction="never"
android:title="@string/menu_mark_unread"/>
<item android:id="@+id/menu_go_to_feed"
android:title="@string/go_to_feed"/>
<item
android:id="@+id/menu_intel"
android:showAsAction="never"
app:showAsAction="never"
android:title="@string/menu_intel"/>
<item android:id="@+id/menu_theme"

View file

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

View file

@ -1,6 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<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="gray07">#121212</color>
<color name="gray10">#1A1A1A</color>
@ -123,7 +135,7 @@
<color name="tag_gray_shadow">#C9C9C8</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_remaining">@color/gray75</color>

View file

@ -128,7 +128,6 @@
<string name="profile_no_interactions">No interactions</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_original">View original</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_mark_story_as_read">Mark as read</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_mute_feed">Mute feed</string>
<string name="menu_unmute_feed">Unmute feed</string>
@ -198,6 +196,9 @@
<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="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="feed_search_hint">Search term or feed URL</string>
<string name="story_search_hint">Search for stories</string>
@ -319,6 +320,11 @@
</string-array>
<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_sum">Clean up cached story content after…</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_show_public_comments">Show Public Comments</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_thumbnails_style">Image Preview Thumbnails</string>
<string name="settings_notifications">Notifications</string>

View file

@ -1,25 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<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">
<item name="android:windowBackground">@color/transparent</item>
</style>
<style name="actionbar" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">@color/bar_background</item>
<style name="actionbar" parent="ThemeOverlay.MaterialComponents.Light">
<item name="colorControlNormal">@color/gray55</item>
</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="colorControlNormal">@color/gray55</item>
</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>
</style>
<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>
<item name="colorControlNormal">@color/gray55</item>
</style>
<style name="selectorFolderBackground">
@ -63,13 +68,13 @@
<item name="android:background">@drawable/dark_list_background</item>
</style>
<style name="itemBackground">
<style name="layoutBackground">
<item name="android:background">@color/item_background</item>
</style>
<style name="itemBackground.dark">
<style name="layoutBackground.dark">
<item name="android:background">@color/dark_item_background</item>
</style>
<style name="itemBackground.black">
<style name="layoutBackground.black">
<item name="android:background">@color/black</item>
</style>
@ -176,6 +181,7 @@
<item name="android:textColor">@color/button_text</item>
<item name="android:background">@drawable/button_background</item>
<item name="android:gravity">center</item>
<item name="android:letterSpacing">0</item>
</style>
<style name="storyButtons.dark">
<item name="android:textSize">14sp</item>
@ -184,6 +190,7 @@
<item name="android:textColor">@color/button_text_dark</item>
<item name="android:background">@drawable/button_background_dark</item>
<item name="android:gravity">center</item>
<item name="android:letterSpacing">0</item>
</style>
<style name="shareBarBackground">
@ -377,21 +384,33 @@
<item name="android:src">@drawable/mute_black</item>
</style>
<!-- these fix the Android framework bug that causes context menus to get badly
truncated when the Holo theme is used on a v7+ device:
https://issuetracker.google.com/issues/37118658 -->
<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 name="actionBarPopup" parent="Widget.MaterialComponents.PopupMenu">
<item name="android:background">@color/transparent</item>
<item name="popupMenuBackground">@color/primary</item>
</style>
<!-- Fixes menu text being too dark on Moto devices -->
<style name="itemTextAppearance">
<item name="android:textColor">@color/black</item>
<style name="actionBarPopup.dark" parent="Widget.MaterialComponents.PopupMenu">
<item name="android:background">@color/transparent</item>
<item name="popupMenuBackground">@color/gray13</item>
</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 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>

View file

@ -1,14 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="NewsBlurTheme" parent="@android:style/Theme.Holo.Light" >
<item name="android:actionBarStyle">@style/actionbar</item>
<item name="android:expandableListViewStyle">@style/expandableListView</item>
<style name="NewsBlurTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="colorPrimary">@color/primary</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="selectorFeedBackground">@style/selectorFeedBackground</item>
<item name="feedRowNeutCountText">@style/feedRowNeutCountText</item>
<item name="actionbarBackground">@style/actionbarBackground</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="defaultText">@style/defaultText</item>
<item name="linkText">@style/linkText</item>
@ -40,19 +47,26 @@
<item name="selectorOverlayBackgroundStory">@style/selectorOverlayBackgroundStory</item>
<item name="selectorOverlayBackgroundText">@style/selectorOverlayBackgroundText</item>
<item name="muteicon">@style/muteicon</item>
<item name="android:contextPopupMenuStyle">@style/contextPopupStyle</item>
<item name="android:textColorPrimary">@color/black</item>
<item name="android:textColor">@color/black</item>
<item name="preferenceTheme">@style/preferenceTheme</item>
</style>
<style name="NewsBlurDarkTheme" parent="@android:style/Theme.Holo" >
<item name="android:actionBarStyle">@style/actionbar.dark</item>
<item name="android:expandableListViewStyle">@style/expandableListView.dark</item>
<style name="NewsBlurDarkTheme" parent="Theme.MaterialComponents.NoActionBar">
<item name="colorPrimary">@color/primary.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="selectorFeedBackground">@style/selectorFeedBackground.dark</item>
<item name="feedRowNeutCountText">@style/feedRowNeutCountText.dark</item>
<item name="actionbarBackground">@style/actionbarBackground.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="defaultText">@style/defaultText.dark</item>
<item name="linkText">@style/linkText.dark</item>
@ -84,22 +98,27 @@
<item name="selectorOverlayBackgroundStory">@style/selectorOverlayBackgroundStory.dark</item>
<item name="selectorOverlayBackgroundText">@style/selectorOverlayBackgroundText.dark</item>
<item name="muteicon">@style/muteicon.dark</item>
<!--requires API 24-->
<item name="android:contextPopupMenuStyle">@style/contextPopupStyle.dark</item>
<item name="android:textColorPrimary">@color/white</item>
<item name="android:itemTextAppearance">@style/itemTextAppearance.dark</item>
<item name="android:textColor">@color/white</item>
<item name="preferenceTheme">@style/preferenceTheme</item>
<item name="android:navigationBarColor">@android:color/black</item>
</style>
<style name="NewsBlurBlackTheme" parent="@android:style/Theme.Holo" >
<item name="android:actionBarStyle">@style/actionbar.black</item>
<item name="android:expandableListViewStyle">@style/expandableListView.dark</item>
<style name="NewsBlurBlackTheme" parent="Theme.MaterialComponents.NoActionBar" >
<item name="colorPrimary">@color/primary.black</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="selectorFeedBackground">@style/selectorFeedBackground.dark</item>
<item name="feedRowNeutCountText">@style/feedRowNeutCountText.dark</item>
<item name="actionbarBackground">@style/actionbarBackground.black</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="defaultText">@style/defaultText.dark</item>
<item name="linkText">@style/linkText.dark</item>
@ -131,8 +150,8 @@
<item name="selectorOverlayBackgroundStory">@style/selectorOverlayBackgroundStory.dark</item>
<item name="selectorOverlayBackgroundText">@style/selectorOverlayBackgroundText.dark</item>
<item name="muteicon">@style/muteicon.dark</item>
<item name="android:contextPopupMenuStyle">@style/contextPopupStyle.dark</item>
<item name="android:textColorPrimary">@color/white</item>
<item name="android:itemTextAppearance">@style/itemTextAppearance.dark</item>
<item name="android:textColor">@color/white</item>
<item name="preferenceTheme">@style/preferenceTheme</item>
<item name="android:navigationBarColor">@android:color/black</item>
</style>
</resources>

View file

@ -34,6 +34,10 @@
android:entries="@array/cache_age_select_entries"
android:entryValues="@array/cache_age_select_values"
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
@ -119,11 +123,6 @@
android:entries="@array/default_font_entries"
android:entryValues="@array/default_font_values"
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
android:key="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.network.APIConstants;
import com.newsblur.util.UIUtils;
public class AddFacebook extends NbActivity {
@ -18,6 +19,8 @@ public class AddFacebook extends NbActivity {
super.onCreate(bundle);
setContentView(R.layout.activity_webcontainer);
UIUtils.setupToolbar(this, R.drawable.logo, getString(R.string.add_facebook), true);
webview = (WebView) findViewById(R.id.webcontainer);
webview.getSettings().setJavaScriptEnabled(true);

View file

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

View file

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

View file

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

View file

@ -11,7 +11,7 @@ public class AllSharedStoriesItemsList extends ItemsList {
protected void onCreate(Bundle 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

View file

@ -11,7 +11,7 @@ public class AllSharedStoriesReading extends Reading {
protected void onCreate(Bundle 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) {
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

View file

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

View file

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

View file

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

View file

@ -23,7 +23,7 @@ public class FeedReading extends Reading {
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);
UIUtils.setCustomActionBar(this, R.drawable.g_icn_folder_rss, folderName);
UIUtils.setupToolbar(this, R.drawable.g_icn_folder_rss, folderName, false);
}
@Override

View file

@ -11,7 +11,7 @@ public class FolderReading extends Reading {
protected void onCreate(Bundle 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) {
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

View file

@ -12,7 +12,7 @@ public class GlobalSharedStoriesReading extends Reading {
protected void onCreate(Bundle 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

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) {
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

View file

@ -11,7 +11,7 @@ public class InfrequentReading extends Reading {
protected void onCreate(Bundle 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.os.Bundle;
import android.preference.PreferenceManager;
import androidx.appcompat.widget.PopupMenu;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentManager;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
@ -17,7 +19,6 @@ import android.view.MenuItem;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.AbsListView;
import android.widget.PopupMenu;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
@ -58,8 +59,6 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
getActionBar().hide();
// 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
binding.mainSyncStatus.setText(R.string.loading);
@ -108,30 +107,11 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
FeedUtils.currentFolderName = null;
binding.mainMenuButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickMenuButton();
}
});
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();
}
});
binding.mainMenuButton.setOnClickListener(v -> onClickMenuButton());
binding.mainAddButton.setOnClickListener(v -> onClickAddButton());
binding.mainProfileButton.setOnClickListener(v -> onClickProfileButton());
binding.mainUserImage.setOnClickListener(v -> onClickUserButton());
binding.mainSearchFeedsButton.setOnClickListener(v -> onClickSearchFeedsButton());
}
@Override
@ -280,21 +260,6 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
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);
if (themeValue == ThemeValue.LIGHT) {
menu.findItem(R.id.menu_theme_light).setChecked(true);
@ -314,23 +279,7 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
@Override
public boolean onMenuItemClick(MenuItem item) {
if (item.getItemId() == R.id.menu_refresh) {
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) {
if (item.getItemId() == R.id.menu_logout) {
DialogFragment newFragment = new LogoutDialogFragment();
newFragment.show(getSupportFragmentManager(), "dialog");
} else if (item.getItemId() == R.id.menu_settings) {
@ -400,6 +349,17 @@ public class Main extends NbActivity implements StateChangedListener, SwipeRefre
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
public void onScrollStateChanged(AbsListView absListView, int i) {
// not required

View file

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

View file

@ -1,6 +1,8 @@
package com.newsblur.activity;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentActivity;
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
* 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_METADATA = (1<<1);

View file

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

View file

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

View file

@ -11,7 +11,7 @@ public class ReadStoriesItemsList extends ItemsList {
protected void onCreate(Bundle 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

View file

@ -11,7 +11,7 @@ public class ReadStoriesReading extends Reading {
protected void onCreate(Bundle 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_STARTING_UNREAD = "starting_unread";
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. */
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);
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.overlayRangeTopPx = (float) UIUtils.dp2px(this, OVERLAY_RANGE_TOP_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) {
outState.putInt(BUNDLE_STARTING_UNREAD, startingUnreadCount);
}
if (ViewUtils.isSystemUIHidden(getWindow().getDecorView())) {
outState.putBoolean(BUNDLE_IS_FULLSCREEN, true);
}
}
@Override
@ -375,28 +362,11 @@ public abstract class Reading extends NbActivity implements OnPageChangeListener
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
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
return true;
} else if (item.getItemId() == R.id.menu_reading_fullscreen) {
ViewUtils.hideSystemUI(getWindow().getDecorView());
return true;
} else {
return super.onOptionsItemSelected(item);
}

View file

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

View file

@ -15,7 +15,7 @@ public class SavedStoriesReading extends Reading {
if (fs.getSingleSavedTag() != null) {
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.network.SearchAsyncTaskLoader;
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
// make network requests makes it easily lose state, lack non-legacy progress indication, and generally
@ -46,10 +47,9 @@ public class SearchForFeeds extends NbActivity implements LoaderCallbacks<Search
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
getActionBar().setDisplayHomeAsUpEnabled(true);
setTitle(R.string.title_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);
resultsList = (ListView) findViewById(R.id.feed_result_list);

View file

@ -1,27 +1,31 @@
package com.newsblur.activity;
import androidx.fragment.app.FragmentActivity;
import android.content.SharedPreferences;
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.util.PrefConstants;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.UIUtils;
public class Settings extends FragmentActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
public class Settings extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
PrefsUtils.applyThemePreference(this);
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);
SettingsFragment fragment = new SettingsFragment();
getFragmentManager().beginTransaction().replace(android.R.id.content, fragment).commit();
getSupportFragmentManager()
.beginTransaction()
.replace(binding.container.getId(), new SettingsFragment())
.commit();
SharedPreferences prefs = getSharedPreferences(PrefConstants.PREFERENCES, 0);
prefs.registerOnSharedPreferenceChangeListener(this);
@ -29,21 +33,10 @@ public class Settings extends FragmentActivity implements SharedPreferences.OnSh
@Override
protected void onDestroy() {
super.onDestroy();
SharedPreferences prefs = getSharedPreferences(PrefConstants.PREFERENCES, 0);
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

View file

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

View file

@ -13,7 +13,7 @@ public class SocialFeedReading extends Reading {
super.onCreate(savedInstanceBundle);
SocialFeed socialFeed = FeedUtils.dbHelper.getSocialFeed(fs.getSingleSocialFeed().getKey());
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.Folder;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.UIUtils;
import com.newsblur.widget.WidgetUtils;
import java.util.ArrayList;
@ -62,6 +63,7 @@ public class WidgetConfig extends FeedChooser {
void bindLayout() {
binding = ActivityWidgetConfigBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
UIUtils.setupToolbar(this, R.drawable.logo, getString(R.string.widget), true);
}
@Override

View file

@ -202,6 +202,12 @@ public class BlurDatabaseHelper {
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) {
Cursor c = dbRO.query(DatabaseConstants.FEED_TABLE, null, DatabaseConstants.FEED_ID + " = ?", new String[] {feedId}, null, null, 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_THUMBNAIL_URL = "thumbnail_url";
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_STORY_HASH = "session_story_hash";
@ -272,7 +273,8 @@ public class DatabaseConstants {
STORY_IMAGE_URLS + TEXT + ", " +
STORY_LAST_READ_DATE + INTEGER + ", " +
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 + " (" +
@ -344,7 +346,7 @@ public class DatabaseConstants {
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_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 =

View file

@ -89,6 +89,9 @@ public class Story implements Serializable {
@SerializedName("secure_image_thumbnails")
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
@SerializedName("image_urls")
public String[] imageUrls;
@ -149,6 +152,7 @@ public class Story implements Serializable {
values.put(DatabaseConstants.STORY_SEARCH_HIT, searchHit);
values.put(DatabaseConstants.STORY_THUMBNAIL_URL, thumbnailUrl);
values.put(DatabaseConstants.STORY_INFREQUENT, infrequent);
values.put(DatabaseConstants.STORY_HAS_MODIFICATIONS, hasModifications);
return values;
}
@ -180,6 +184,7 @@ public class Story implements Serializable {
story.lastReadTimestamp = cursor.getLong(cursor.getColumnIndex(DatabaseConstants.STORY_LAST_READ_DATE));
story.sharedTimestamp = cursor.getLong(cursor.getColumnIndex(DatabaseConstants.STORY_SHARED_DATE));
story.thumbnailUrl = cursor.getString(cursor.getColumnIndex(DatabaseConstants.STORY_THUMBNAIL_URL));
story.hasModifications = cursor.getInt(cursor.getColumnIndex(DatabaseConstants.STORY_HAS_MODIFICATIONS)) > 0;
return story;
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

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