diff --git a/screenshots/gplay/debug/com.owncloud.android.ui.activity.NotificationsActivityIT_empty.png b/screenshots/gplay/debug/com.owncloud.android.ui.activity.NotificationsActivityIT_empty.png
new file mode 100644
index 0000000000..0e75397427
Binary files /dev/null and b/screenshots/gplay/debug/com.owncloud.android.ui.activity.NotificationsActivityIT_empty.png differ
diff --git a/screenshots/gplay/debug/com.owncloud.android.ui.activity.NotificationsActivityIT_error.png b/screenshots/gplay/debug/com.owncloud.android.ui.activity.NotificationsActivityIT_error.png
new file mode 100644
index 0000000000..405e21cdfc
Binary files /dev/null and b/screenshots/gplay/debug/com.owncloud.android.ui.activity.NotificationsActivityIT_error.png differ
diff --git a/screenshots/gplay/debug/com.owncloud.android.ui.activity.NotificationsActivityIT_loading.png b/screenshots/gplay/debug/com.owncloud.android.ui.activity.NotificationsActivityIT_loading.png
new file mode 100644
index 0000000000..8cd5338a09
Binary files /dev/null and b/screenshots/gplay/debug/com.owncloud.android.ui.activity.NotificationsActivityIT_loading.png differ
diff --git a/screenshots/gplay/debug/com.owncloud.android.ui.activity.NotificationsActivityIT_showNotifications.png b/screenshots/gplay/debug/com.owncloud.android.ui.activity.NotificationsActivityIT_showNotifications.png
new file mode 100644
index 0000000000..51e910857f
Binary files /dev/null and b/screenshots/gplay/debug/com.owncloud.android.ui.activity.NotificationsActivityIT_showNotifications.png differ
diff --git a/scripts/analysis/lint-results.txt b/scripts/analysis/lint-results.txt
index 79434a37bf..89df7437f0 100644
--- a/scripts/analysis/lint-results.txt
+++ b/scripts/analysis/lint-results.txt
@@ -1,2 +1,2 @@
DO NOT TOUCH; GENERATED BY DRONE
- Lint Report: 83 warnings
+ Lint Report: 81 warnings
diff --git a/scripts/androidScreenshotTest b/scripts/androidScreenshotTest
index b4810b1137..25673116f0 100755
--- a/scripts/androidScreenshotTest
+++ b/scripts/androidScreenshotTest
@@ -8,13 +8,14 @@ if [ $# -lt 2 ]; then
exit
fi
-sed -i s'#false#true#'g src/main/res/values/setup.xml
-
-emulator -writable-system -avd uiComparison -no-snapshot -gpu swiftshader_indirect -no-audio -skin 500x833 &
-
cd src/androidTest/java
-class=$(find | grep $2 | grep java | head -n1|sed s'/\//\./'g | sed s'#^\.\.##' | sed s'#\.java##')
+class=$(find | grep $2 | grep -E "java$|kt$" | head -n1|sed s'/\//\./'g | sed s'#^\.\.##' | sed s'#\.java##'| sed s'#\.kt##')
+
+if [[ -z $class ]]; then
+ echo "Class not found!"
+ exit 1
+fi
cd ../../../
@@ -28,6 +29,12 @@ if [ -e $3 ] ; then
method=""
else
method="#$3"
+
+ # check if method exists
+ if [[ $(grep -c $3 $(find | grep $2 | grep -E "java$|kt$" | head -n1)) -eq 0 ]]; then
+ echo "Method not found!"
+ exit 1
+ fi
fi
./gradlew gplayDebugExecuteScreenshotTests $record \
diff --git a/src/androidTest/java/com/owncloud/android/ui/activity/NotificationsActivityIT.kt b/src/androidTest/java/com/owncloud/android/ui/activity/NotificationsActivityIT.kt
new file mode 100644
index 0000000000..1bbf2fdeaa
--- /dev/null
+++ b/src/androidTest/java/com/owncloud/android/ui/activity/NotificationsActivityIT.kt
@@ -0,0 +1,131 @@
+/*
+ *
+ * Nextcloud Android client application
+ *
+ * @author Tobias Kaminsky
+ * Copyright (C) 2020 Tobias Kaminsky
+ * Copyright (C) 2020 Nextcloud GmbH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+package com.owncloud.android.ui.activity
+
+import androidx.test.espresso.intent.rule.IntentsTestRule
+import com.facebook.testing.screenshot.Screenshot
+import com.owncloud.android.AbstractIT
+import com.owncloud.android.lib.resources.notifications.models.Action
+import com.owncloud.android.lib.resources.notifications.models.Notification
+import com.owncloud.android.lib.resources.notifications.models.RichObject
+import com.owncloud.android.utils.ScreenshotTest
+import org.junit.Rule
+import org.junit.Test
+import java.util.GregorianCalendar
+
+class NotificationsActivityIT : AbstractIT() {
+ @get:Rule
+ var activityRule = IntentsTestRule(NotificationsActivity::class.java, true, false)
+
+ @Test
+ @ScreenshotTest
+ fun loading() {
+ val sut: NotificationsActivity = activityRule.launchActivity(null)
+
+ Screenshot.snapActivity(sut).record()
+ }
+
+ @Test
+ @ScreenshotTest
+ fun empty() {
+ val sut: NotificationsActivity = activityRule.launchActivity(null)
+
+ sut.runOnUiThread { sut.populateList(ArrayList()) }
+
+ shortSleep()
+
+ Screenshot.snapActivity(sut).record()
+ }
+
+ @Test
+ @ScreenshotTest
+ fun showNotifications() {
+ val sut: NotificationsActivity = activityRule.launchActivity(null)
+
+ val date = GregorianCalendar()
+ date.set(2005, 4, 17, 10, 35, 30)
+
+ val notifications = ArrayList()
+ notifications.add(
+ Notification(
+ 1,
+ "files",
+ "user",
+ date.time,
+ "objectType",
+ "objectId",
+ "App recommendation: Tasks",
+ "SubjectRich",
+ HashMap(),
+ "Sync tasks from various devices with your Nextcloud and edit them online.",
+ "MessageRich",
+ HashMap(),
+ "link",
+ "icon",
+ ArrayList()
+ )
+ )
+
+ val actions = ArrayList()
+ actions.add(Action("Send usage", "link", "url", true))
+ actions.add(Action("Not now", "link", "url", false))
+
+ notifications.add(
+ Notification(
+ 1,
+ "files",
+ "user",
+ date.time,
+ "objectType",
+ "objectId",
+ "Help improve Nextcloud",
+ "SubjectRich",
+ HashMap(),
+ "Do you want to help us to improve Nextcloud" +
+ " by providing some anonymize data about your setup and usage?",
+ "MessageRich",
+ HashMap(),
+ "link",
+ "icon",
+ actions
+ )
+ )
+
+ sut.runOnUiThread { sut.populateList(notifications) }
+
+ shortSleep()
+
+ Screenshot.snapActivity(sut).record()
+ }
+
+ @Test
+ @ScreenshotTest
+ fun error() {
+ val sut: NotificationsActivity = activityRule.launchActivity(null)
+
+ shortSleep()
+
+ sut.runOnUiThread { sut.setEmptyContent("Error", "Error! Please try again later!") }
+
+ Screenshot.snapActivity(sut).record()
+ }
+}
diff --git a/src/main/java/com/owncloud/android/ui/activity/NotificationsActivity.java b/src/main/java/com/owncloud/android/ui/activity/NotificationsActivity.java
index 4d6cd415cd..ead43be630 100644
--- a/src/main/java/com/owncloud/android/ui/activity/NotificationsActivity.java
+++ b/src/main/java/com/owncloud/android/ui/activity/NotificationsActivity.java
@@ -60,6 +60,7 @@ import java.util.List;
import javax.inject.Inject;
+import androidx.annotation.VisibleForTesting;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
@@ -239,7 +240,7 @@ public class NotificationsActivity extends FileActivity implements Notifications
private void setupContent() {
emptyContentIcon.setImageResource(R.drawable.ic_notification);
emptyContentProgressBar.getIndeterminateDrawable().setColorFilter(ThemeUtils.primaryAccentColor(this),
- PorterDuff.Mode.SRC_IN);
+ PorterDuff.Mode.SRC_IN);
setLoadingMessage();
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
@@ -249,8 +250,18 @@ public class NotificationsActivity extends FileActivity implements Notifications
fetchAndSetData();
}
- private void populateList(List notifications) {
+ @VisibleForTesting
+ public void populateList(List notifications) {
adapter.setNotificationItems(notifications);
+
+ if (notifications.size() > 0) {
+ swipeEmptyListRefreshLayout.setVisibility(View.GONE);
+ swipeListRefreshLayout.setVisibility(View.VISIBLE);
+ } else {
+ setEmptyContent(noResultsHeadline, noResultsMessage);
+ swipeListRefreshLayout.setVisibility(View.GONE);
+ swipeEmptyListRefreshLayout.setVisibility(View.VISIBLE);
+ }
}
private void fetchAndSetData() {
@@ -275,17 +286,7 @@ public class NotificationsActivity extends FileActivity implements Notifications
if (result.isSuccess() && result.getNotificationData() != null) {
final List notifications = result.getNotificationData();
- runOnUiThread(() -> {
- populateList(notifications);
- if (notifications.size() > 0) {
- swipeEmptyListRefreshLayout.setVisibility(View.GONE);
- swipeListRefreshLayout.setVisibility(View.VISIBLE);
- } else {
- setEmptyContent(noResultsHeadline, noResultsMessage);
- swipeListRefreshLayout.setVisibility(View.GONE);
- swipeEmptyListRefreshLayout.setVisibility(View.VISIBLE);
- }
- });
+ runOnUiThread(() -> populateList(notifications));
} else {
Log_OC.d(TAG, result.getLogMessage());
// show error
@@ -344,7 +345,8 @@ public class NotificationsActivity extends FileActivity implements Notifications
emptyContentProgressBar.setVisibility(View.VISIBLE);
}
- private void setEmptyContent(String headline, String message) {
+ @VisibleForTesting
+ public void setEmptyContent(String headline, String message) {
if (emptyContentContainer != null && emptyContentMessage != null) {
emptyContentHeadline.setText(headline);
emptyContentMessage.setText(message);
diff --git a/src/main/java/com/owncloud/android/ui/adapter/NotificationListAdapter.java b/src/main/java/com/owncloud/android/ui/adapter/NotificationListAdapter.java
index 8a5eb7b8f5..add6f08053 100644
--- a/src/main/java/com/owncloud/android/ui/adapter/NotificationListAdapter.java
+++ b/src/main/java/com/owncloud/android/ui/adapter/NotificationListAdapter.java
@@ -20,8 +20,10 @@
package com.owncloud.android.ui.adapter;
import android.content.Intent;
-import android.content.res.ColorStateList;
+import android.content.res.Configuration;
import android.content.res.Resources;
+import android.graphics.Color;
+import android.graphics.PorterDuff;
import android.graphics.Typeface;
import android.graphics.drawable.PictureDrawable;
import android.net.Uri;
@@ -136,11 +138,17 @@ public class NotificationListAdapter extends RecyclerView.Adapter new DeleteNotificationTask(client, notification, holder,
@@ -154,8 +162,13 @@ public class NotificationListAdapter extends RecyclerView.Adapter {
setButtonEnabled(holder, false);
diff --git a/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java b/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java
index 5cf01dd4ab..72b153b61b 100644
--- a/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java
+++ b/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java
@@ -655,13 +655,13 @@ public class PreviewImageFragment extends FileFragment implements Injectable {
}
private LayerDrawable generateCheckerboardLayeredDrawable(LoadImage result, Bitmap bitmap) {
- Resources r = getResources();
+ Resources resources = getResources();
Drawable[] layers = new Drawable[2];
- layers[0] = r.getDrawable(R.color.bg_default);
+ layers[0] = ResourcesCompat.getDrawable(resources, R.color.bg_default, null);
Drawable bitmapDrawable;
if (MIME_TYPE_PNG.equalsIgnoreCase(result.ocFile.getMimeType())) {
- bitmapDrawable = new BitmapDrawable(getResources(), bitmap);
+ bitmapDrawable = new BitmapDrawable(resources, bitmap);
} else if (MIME_TYPE_SVG.equalsIgnoreCase(result.ocFile.getMimeType())) {
bitmapDrawable = result.drawable;
} else if (MIME_TYPE_GIF.equalsIgnoreCase(result.ocFile.getMimeType())) {
@@ -671,7 +671,7 @@ public class PreviewImageFragment extends FileFragment implements Injectable {
bitmapDrawable = result.drawable;
}
} else {
- bitmapDrawable = new BitmapDrawable(getResources(), bitmap);
+ bitmapDrawable = new BitmapDrawable(resources, bitmap);
}
layers[1] = bitmapDrawable;
diff --git a/src/main/res/drawable/round_bgnd_icons.xml b/src/main/res/drawable/round_bgnd_icons.xml
deleted file mode 100644
index f4f807528d..0000000000
--- a/src/main/res/drawable/round_bgnd_icons.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
diff --git a/src/main/res/layout/notification_list_item.xml b/src/main/res/layout/notification_list_item.xml
index 0cf57b9ce3..55b2394f1a 100644
--- a/src/main/res/layout/notification_list_item.xml
+++ b/src/main/res/layout/notification_list_item.xml
@@ -38,7 +38,6 @@
android:layout_marginEnd="@dimen/notification_icon_layout_right_end_margin"
android:padding="2dp"
android:alpha="0.5"
- android:background="@drawable/round_bgnd_icons"
android:contentDescription="@string/notification_icon"
android:src="@drawable/ic_notification" />
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index c48693fe8a..d493407a43 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -61,13 +61,11 @@
Follow system
Theme
-
Try %1$s on your device!
I want to invite you to use %1$s on your device.\nDownload here: %2$s
%1$s or %2$s
Server address https://…
- Username
Files
Upload
Choose