Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
tobiasKaminsky committed Oct 31, 2023
2 parents e90f02a + 1868d03 commit 2e1e27f
Show file tree
Hide file tree
Showing 115 changed files with 3,175 additions and 3,377 deletions.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
18 changes: 18 additions & 0 deletions app/src/androidTest/java/com/owncloud/android/AbstractIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
Expand Down Expand Up @@ -58,6 +60,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
import java.util.Locale;
import java.util.Objects;

import androidx.annotation.NonNull;
Expand Down Expand Up @@ -403,6 +406,21 @@ public boolean isPowerSavingExclusionAvailable() {
assertTrue(result.getLogMessage(), result.isSuccess());
}

protected void enableRTL() {
Locale locale = new Locale("ar");
Resources resources = InstrumentationRegistry.getInstrumentation().getTargetContext().getResources();
Configuration config = resources.getConfiguration();
config.setLocale(locale);
resources.updateConfiguration(config, null);
}

protected void resetLocale() {
Resources resources = InstrumentationRegistry.getInstrumentation().getTargetContext().getResources();
Configuration defaultConfig = resources.getConfiguration();
defaultConfig.setLocale(Locale.getDefault());
resources.updateConfiguration(defaultConfig, null);
}

protected void screenshot(View view) {
screenshot(view, "");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ public void open() {
sut.setFile(origin);

sut.runOnUiThread(() -> {
sut.findViewById(R.id.folder_picker_btn_choose).requestFocus();
sut.findViewById(R.id.folder_picker_btn_copy).requestFocus();
});
waitForIdleSync();
screenshot(sut);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@
import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
import androidx.test.espresso.intent.rule.IntentsTestRule;
import androidx.test.rule.GrantPermissionRule;
import kotlin.Unit;

import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
Expand All @@ -108,6 +109,9 @@ private FileDisplayActivity getFileDisplayActivity() {
return activityRule.launchActivity(intent);
}

@Rule
public GrantPermissionRule permissionRule = GrantPermissionRule.grant(
android.Manifest.permission.POST_NOTIFICATIONS);

@After
public void quitLooperIfNeeded() {
Expand All @@ -134,6 +138,38 @@ public void testLoadingDialog() {
showDialog(dialog);
}

@Test
@ScreenshotTest
public void testConfirmationDialogWithOneAction() {
ConfirmationDialogFragment dialog = ConfirmationDialogFragment.newInstance(R.string.upload_list_empty_text_auto_upload, new String[]{}, R.string.filedetails_sync_file, R.string.common_ok, -1, -1);
showDialog(dialog);
}

@Test
@ScreenshotTest
public void testConfirmationDialogWithTwoAction() {
ConfirmationDialogFragment dialog = ConfirmationDialogFragment.newInstance(R.string.upload_list_empty_text_auto_upload, new String[]{}, R.string.filedetails_sync_file, R.string.common_ok, R.string.common_cancel, -1);
showDialog(dialog);
}

@Test
@ScreenshotTest
public void testConfirmationDialogWithThreeAction() {
ConfirmationDialogFragment dialog = ConfirmationDialogFragment.newInstance(R.string.upload_list_empty_text_auto_upload, new String[]{}, R.string.filedetails_sync_file, R.string.common_ok, R.string.common_cancel, R.string.common_confirm);
showDialog(dialog);
}

@Test
@ScreenshotTest
public void testConfirmationDialogWithThreeActionRTL() {
enableRTL();

ConfirmationDialogFragment dialog = ConfirmationDialogFragment.newInstance(R.string.upload_list_empty_text_auto_upload, new String[] { }, -1, R.string.common_ok, R.string.common_cancel, R.string.common_confirm);
showDialog(dialog);

resetLocale();
}

@Test
@ScreenshotTest
public void testRemoveFileDialog() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ public void showNotEnoughSpaceDialogForFolder() {
FileDisplayActivity test = activityRule.launchActivity(null);
OCFile ocFile = new OCFile("/Document/");
ocFile.setFileLength(5000000);
ocFile.setFolder();

SyncFileNotEnoughSpaceDialogFragment dialog = SyncFileNotEnoughSpaceDialogFragment.newInstance(ocFile, 1000);
dialog.show(test.getListOfFilesFragment().getFragmentManager(), "1");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,30 +17,26 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.nextcloud.client.di

package com.nextcloud.client.di;
import android.content.Context
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import dagger.android.support.AndroidSupportInjection

import android.content.Context;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import dagger.android.support.AndroidSupportInjection;

class FragmentInjector extends FragmentManager.FragmentLifecycleCallbacks {
@Override
public void onFragmentPreAttached(
@NonNull FragmentManager fragmentManager,
@NonNull Fragment fragment,
@NonNull Context context
internal class FragmentInjector : FragmentManager.FragmentLifecycleCallbacks() {
override fun onFragmentPreAttached(
fragmentManager: FragmentManager,
fragment: Fragment,
context: Context
) {
super.onFragmentPreAttached(fragmentManager, fragment, context);
if (fragment instanceof Injectable) {
super.onFragmentPreAttached(fragmentManager, fragment, context)
if (fragment is Injectable) {
try {
AndroidSupportInjection.inject(fragment);
} catch (IllegalArgumentException directCause) {
AndroidSupportInjection.inject(fragment)
} catch (directCause: IllegalArgumentException) {
// this provides a cause description that is a bit more friendly for developers
throw new InjectorNotFoundException(fragment, directCause);
throw InjectorNotFoundException(fragment, directCause)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,33 +17,29 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.nextcloud.client.integrations.deck

package com.nextcloud.client.integrations.deck;

import android.app.PendingIntent;

import com.nextcloud.client.account.User;
import com.nextcloud.java.util.Optional;
import com.owncloud.android.lib.resources.notifications.models.Notification;

import androidx.annotation.NonNull;
import android.app.PendingIntent
import com.nextcloud.client.account.User
import com.nextcloud.java.util.Optional
import com.owncloud.android.lib.resources.notifications.models.Notification

/**
* This API is for an integration with the <a href="https://github.com/stefan-niedermann/nextcloud-deck">Nextcloud
* Deck</a> app for android.
* This API is for an integration with the [Nextcloud
* Deck](https://github.com/stefan-niedermann/nextcloud-deck) app for android.
*/
public interface DeckApi {

interface DeckApi {
/**
* Creates a PendingIntent that can be used in a NotificationBuilder to open the notification link in Deck app
*
* @param notification Notification Notification that could be forwarded to Deck
* @param user The user that is affected by the notification
* @return If notification can be consumed by Deck, a PendingIntent opening notification link in Deck app; empty
* value otherwise
* @see <a href="https://apps.nextcloud.com/apps/deck">Deck Server App</a>
* @see [Deck Server App](https://apps.nextcloud.com/apps/deck)
*/
@NonNull
Optional<PendingIntent> createForwardToDeckActionIntent(@NonNull final Notification notification,
@NonNull final User user);
fun createForwardToDeckActionIntent(
notification: Notification,
user: User
): Optional<PendingIntent?>
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
/*
* Nextcloud application
*
* @author Stefan Niedermann
* Copyright (C) 2020 Stefan Niedermann <[email protected]>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.nextcloud.client.integrations.deck

import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import com.nextcloud.client.account.User
import com.nextcloud.java.util.Optional
import com.owncloud.android.lib.resources.notifications.models.Notification

class DeckApiImpl(private val context: Context, private val packageManager: PackageManager) : DeckApi {
override fun createForwardToDeckActionIntent(notification: Notification, user: User): Optional<PendingIntent?> {
if (APP_NAME.equals(notification.app, ignoreCase = true)) {
val intent = Intent()
for (appPackage in DECK_APP_PACKAGES) {
intent.setClassName(appPackage, DECK_ACTIVITY_TO_START)
if (packageManager.resolveActivity(intent, 0) != null) {
return Optional.of(createPendingIntent(intent, notification, user))
}
}
}
return Optional.empty()
}

private fun createPendingIntent(intent: Intent, notification: Notification, user: User): PendingIntent {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
return PendingIntent.getActivity(
context,
notification.getNotificationId(),
putExtrasToIntent(intent, notification, user),
PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE
)
}

private fun putExtrasToIntent(intent: Intent, notification: Notification, user: User): Intent {
return intent
.putExtra(EXTRA_ACCOUNT, user.accountName)
.putExtra(EXTRA_LINK, notification.getLink())
.putExtra(EXTRA_OBJECT_ID, notification.getObjectId())
.putExtra(EXTRA_SUBJECT, notification.getSubject())
.putExtra(EXTRA_SUBJECT_RICH, notification.getSubjectRich())
.putExtra(EXTRA_MESSAGE, notification.getMessage())
.putExtra(EXTRA_MESSAGE_RICH, notification.getMessageRich())
.putExtra(EXTRA_USER, notification.getUser())
.putExtra(EXTRA_NID, notification.getNotificationId())
}

companion object {
const val APP_NAME = "deck"
val DECK_APP_PACKAGES = arrayOf(
"it.niedermann.nextcloud.deck",
"it.niedermann.nextcloud.deck.play",
"it.niedermann.nextcloud.deck.dev"
)
const val DECK_ACTIVITY_TO_START = "it.niedermann.nextcloud.deck.ui.PushNotificationActivity"
private const val EXTRA_ACCOUNT = "account"
private const val EXTRA_LINK = "link"
private const val EXTRA_OBJECT_ID = "objectId"
private const val EXTRA_SUBJECT = "subject"
private const val EXTRA_SUBJECT_RICH = "subjectRich"
private const val EXTRA_MESSAGE = "message"
private const val EXTRA_MESSAGE_RICH = "messageRich"
private const val EXTRA_USER = "user"
private const val EXTRA_NID = "nid"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ class NotificationWork constructor(

val deckActionOverrideIntent = deckApi.createForwardToDeckActionIntent(notification, user)

val pendingIntent: PendingIntent
val pendingIntent: PendingIntent?
if (deckActionOverrideIntent.isPresent) {
pendingIntent = deckActionOverrideIntent.get()
} else {
Expand Down
Loading

0 comments on commit 2e1e27f

Please sign in to comment.