mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-19 11:39:42 +01:00
Merge pull request #4504 from nextcloud/feature/4501/notificationWarningLessProminent
new notification warner
This commit is contained in:
commit
187f98ad6b
@ -275,7 +275,7 @@ class ConversationsListActivity :
|
||||
adapter!!.addListener(this)
|
||||
prepareViews()
|
||||
|
||||
updateNotificationWarning()
|
||||
showNotificationWarning()
|
||||
|
||||
showShareToScreen = hasActivityActionSendIntent()
|
||||
|
||||
@ -296,6 +296,13 @@ class ConversationsListActivity :
|
||||
loadUserAvatar(binding.switchAccountButton)
|
||||
viewThemeUtils.material.colorMaterialTextButton(binding.switchAccountButton)
|
||||
viewThemeUtils.material.themeCardView(binding.conversationListHintInclude.hintLayoutCardview)
|
||||
viewThemeUtils.material.themeCardView(
|
||||
binding.conversationListNotificationWarning.notificationWarningCardview
|
||||
)
|
||||
viewThemeUtils.material.colorMaterialButtonText(binding.conversationListNotificationWarning.notNowButton)
|
||||
viewThemeUtils.material.colorMaterialButtonText(
|
||||
binding.conversationListNotificationWarning.showSettingsButton
|
||||
)
|
||||
searchBehaviorSubject.onNext(false)
|
||||
fetchRooms()
|
||||
fetchPendingInvitations()
|
||||
@ -307,14 +314,6 @@ class ConversationsListActivity :
|
||||
showSearchOrToolbar()
|
||||
}
|
||||
|
||||
private fun updateNotificationWarning() {
|
||||
if (shouldShowNotificationWarning()) {
|
||||
showNotificationWarning()
|
||||
} else {
|
||||
binding.chatListNotificationWarning.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
private fun initObservers() {
|
||||
this.lifecycleScope.launch {
|
||||
networkMonitor.isOnline.onEach { isOnline ->
|
||||
@ -326,14 +325,17 @@ class ConversationsListActivity :
|
||||
conversationsListViewModel.getFederationInvitationsViewState.observe(this) { state ->
|
||||
when (state) {
|
||||
is ConversationsListViewModel.GetFederationInvitationsStartState -> {
|
||||
binding.conversationListHintInclude.conversationListHintLayout.visibility = View.GONE
|
||||
binding.conversationListHintInclude.conversationListHintLayout.visibility =
|
||||
View.GONE
|
||||
}
|
||||
|
||||
is ConversationsListViewModel.GetFederationInvitationsSuccessState -> {
|
||||
if (state.showInvitationsHint) {
|
||||
binding.conversationListHintInclude.conversationListHintLayout.visibility = View.VISIBLE
|
||||
binding.conversationListHintInclude.conversationListHintLayout.visibility =
|
||||
View.VISIBLE
|
||||
} else {
|
||||
binding.conversationListHintInclude.conversationListHintLayout.visibility = View.GONE
|
||||
binding.conversationListHintInclude.conversationListHintLayout.visibility =
|
||||
View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
@ -1502,17 +1504,48 @@ class ConversationsListActivity :
|
||||
}
|
||||
|
||||
private fun showNotificationWarning() {
|
||||
binding.chatListNotificationWarning.visibility = View.VISIBLE
|
||||
binding.chatListNotificationWarning.setOnClickListener {
|
||||
if (shouldShowNotificationWarning()) {
|
||||
binding.conversationListNotificationWarning.conversationListNotificationWarningLayout.visibility =
|
||||
View.VISIBLE
|
||||
binding.conversationListNotificationWarning.notNowButton.setOnClickListener {
|
||||
binding.conversationListNotificationWarning.conversationListNotificationWarningLayout.visibility =
|
||||
View.GONE
|
||||
val lastWarningDate = System.currentTimeMillis()
|
||||
appPreferences.setNotificationWarningLastPostponedDate(lastWarningDate)
|
||||
}
|
||||
binding.conversationListNotificationWarning.showSettingsButton.setOnClickListener {
|
||||
val bundle = Bundle()
|
||||
bundle.putBoolean(KEY_SCROLL_TO_NOTIFICATION_CATEGORY, true)
|
||||
val settingsIntent = Intent(context, SettingsActivity::class.java)
|
||||
settingsIntent.putExtras(bundle)
|
||||
startActivity(settingsIntent)
|
||||
}
|
||||
} else {
|
||||
binding.conversationListNotificationWarning.conversationListNotificationWarningLayout.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
private fun shouldShowNotificationWarning(): Boolean {
|
||||
fun shouldShowWarningIfDateTooOld(date1: Long): Boolean {
|
||||
val currentTimeMillis = System.currentTimeMillis()
|
||||
val differenceMillis = currentTimeMillis - date1
|
||||
val daysForWarningInMillis = TimeUnit.DAYS.toMillis(DAYS_FOR_NOTIFICATION_WARNING)
|
||||
return differenceMillis > daysForWarningInMillis
|
||||
}
|
||||
|
||||
fun shouldShowNotificationWarningByUserChoice(): Boolean {
|
||||
if (appPreferences.showRegularNotificationWarning) {
|
||||
val lastWarningDate = appPreferences.getNotificationWarningLastPostponedDate()
|
||||
return if (lastWarningDate == NOTIFICATION_WARNING_DATE_NOT_SET) {
|
||||
true
|
||||
} else {
|
||||
shouldShowWarningIfDateTooOld(lastWarningDate)
|
||||
}
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
val notificationPermissionNotGranted = Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU &&
|
||||
!platformPermissionUtil.isPostNotificationsPermissionGranted()
|
||||
val batteryOptimizationNotIgnored = !PowerManagerUtils().isIgnoringBatteryOptimizations()
|
||||
@ -1529,10 +1562,8 @@ class ConversationsListActivity :
|
||||
callsChannelNotEnabled ||
|
||||
!serverNotificationAppInstalled
|
||||
|
||||
val userWantsToBeNotifiedAboutWrongSettings = appPreferences.getShowNotificationWarning()
|
||||
|
||||
return settingsOfUserAreWrong &&
|
||||
userWantsToBeNotifiedAboutWrongSettings &&
|
||||
shouldShowNotificationWarningByUserChoice() &&
|
||||
ClosedInterfaceImpl().isGooglePlayServicesAvailable
|
||||
}
|
||||
|
||||
@ -1927,5 +1958,7 @@ class ConversationsListActivity :
|
||||
const val MAINTENANCE_MODE_HEADER_KEY = "X-Nextcloud-Maintenance-Mode"
|
||||
const val REQUEST_POST_NOTIFICATIONS_PERMISSION = 111
|
||||
const val BADGE_OFFSET = 35
|
||||
const val DAYS_FOR_NOTIFICATION_WARNING = 5L
|
||||
const val NOTIFICATION_WARNING_DATE_NOT_SET = 0L
|
||||
}
|
||||
}
|
||||
|
@ -54,6 +54,7 @@ import com.nextcloud.talk.api.NcApiCoroutines
|
||||
import com.nextcloud.talk.application.NextcloudTalkApplication
|
||||
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.setAppTheme
|
||||
import com.nextcloud.talk.conversationlist.ConversationsListActivity
|
||||
import com.nextcloud.talk.conversationlist.ConversationsListActivity.Companion.NOTIFICATION_WARNING_DATE_NOT_SET
|
||||
import com.nextcloud.talk.data.user.model.User
|
||||
import com.nextcloud.talk.databinding.ActivitySettingsBinding
|
||||
import com.nextcloud.talk.diagnose.DiagnoseActivity
|
||||
@ -927,13 +928,16 @@ class SettingsActivity :
|
||||
|
||||
private fun setupCheckables() {
|
||||
binding.settingsShowNotificationWarningSwitch.isChecked =
|
||||
appPreferences.showNotificationWarning
|
||||
appPreferences.showRegularNotificationWarning
|
||||
|
||||
if (ClosedInterfaceImpl().isGooglePlayServicesAvailable) {
|
||||
binding.settingsShowNotificationWarning.setOnClickListener {
|
||||
val isChecked = binding.settingsShowNotificationWarningSwitch.isChecked
|
||||
binding.settingsShowNotificationWarningSwitch.isChecked = !isChecked
|
||||
appPreferences.setShowNotificationWarning(!isChecked)
|
||||
appPreferences.setShowRegularNotificationWarning(!isChecked)
|
||||
if (!isChecked) {
|
||||
appPreferences.setNotificationWarningLastPostponedDate(NOTIFICATION_WARNING_DATE_NOT_SET)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
binding.settingsShowNotificationWarning.visibility = View.GONE
|
||||
@ -1427,5 +1431,6 @@ class SettingsActivity :
|
||||
private const val LINEBREAK = "\n"
|
||||
const val HTTP_CODE_OK: Int = 200
|
||||
const val HTTP_ERROR_CODE_BAD_REQUEST: Int = 400
|
||||
const val NO_NOTIFICATION_REMINDER_WANTED = 0L
|
||||
}
|
||||
}
|
||||
|
@ -178,9 +178,13 @@ public interface AppPreferences {
|
||||
|
||||
void deleteAllMessageQueuesFor(String userId);
|
||||
|
||||
boolean getShowNotificationWarning();
|
||||
Long getNotificationWarningLastPostponedDate();
|
||||
|
||||
void setShowNotificationWarning(boolean showNotificationWarning);
|
||||
void setNotificationWarningLastPostponedDate(Long showNotificationWarning);
|
||||
|
||||
Boolean getShowRegularNotificationWarning();
|
||||
|
||||
void setShowRegularNotificationWarning(boolean value);
|
||||
|
||||
void clear();
|
||||
}
|
||||
|
@ -28,11 +28,10 @@ import kotlinx.coroutines.runBlocking
|
||||
@Suppress("TooManyFunctions", "DeferredResultUnused", "EmptyFunctionBlock")
|
||||
class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
|
||||
override fun getProxyType(): String {
|
||||
return runBlocking {
|
||||
override fun getProxyType(): String =
|
||||
runBlocking {
|
||||
async { readString(PROXY_TYPE, context.resources.getString(R.string.nc_no_proxy)).first() }
|
||||
}.getCompleted()
|
||||
}
|
||||
|
||||
override fun setProxyType(proxyType: String?) =
|
||||
runBlocking<Unit> {
|
||||
@ -47,9 +46,7 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
proxyType = ""
|
||||
}
|
||||
|
||||
override fun getProxyHost(): String {
|
||||
return runBlocking { async { readString(PROXY_HOST).first() } }.getCompleted()
|
||||
}
|
||||
override fun getProxyHost(): String = runBlocking { async { readString(PROXY_HOST).first() } }.getCompleted()
|
||||
|
||||
override fun setProxyHost(proxyHost: String?) =
|
||||
runBlocking<Unit> {
|
||||
@ -64,9 +61,7 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
proxyHost = ""
|
||||
}
|
||||
|
||||
override fun getProxyPort(): String {
|
||||
return runBlocking { async { readString(PROXY_PORT).first() } }.getCompleted()
|
||||
}
|
||||
override fun getProxyPort(): String = runBlocking { async { readString(PROXY_PORT).first() } }.getCompleted()
|
||||
|
||||
override fun setProxyPort(proxyPort: String?) =
|
||||
runBlocking<Unit> {
|
||||
@ -81,9 +76,10 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
proxyPort = ""
|
||||
}
|
||||
|
||||
override fun getProxyCredentials(): Boolean {
|
||||
return runBlocking { async { readBoolean(PROXY_CRED).first() } }.getCompleted()
|
||||
}
|
||||
override fun getProxyCredentials(): Boolean =
|
||||
runBlocking {
|
||||
async { readBoolean(PROXY_CRED).first() }
|
||||
}.getCompleted()
|
||||
|
||||
override fun setProxyNeedsCredentials(proxyNeedsCredentials: Boolean) =
|
||||
runBlocking<Unit> {
|
||||
@ -96,9 +92,10 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
setProxyNeedsCredentials(false)
|
||||
}
|
||||
|
||||
override fun getProxyUsername(): String {
|
||||
return runBlocking { async { readString(PROXY_USERNAME).first() } }.getCompleted()
|
||||
}
|
||||
override fun getProxyUsername(): String =
|
||||
runBlocking {
|
||||
async { readString(PROXY_USERNAME).first() }
|
||||
}.getCompleted()
|
||||
|
||||
override fun setProxyUsername(proxyUsername: String?) =
|
||||
runBlocking<Unit> {
|
||||
@ -113,9 +110,10 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
proxyUsername = ""
|
||||
}
|
||||
|
||||
override fun getProxyPassword(): String {
|
||||
return runBlocking { async { readString(PROXY_PASSWORD).first() } }.getCompleted()
|
||||
}
|
||||
override fun getProxyPassword(): String =
|
||||
runBlocking {
|
||||
async { readString(PROXY_PASSWORD).first() }
|
||||
}.getCompleted()
|
||||
|
||||
override fun setProxyPassword(proxyPassword: String?) =
|
||||
runBlocking<Unit> {
|
||||
@ -130,9 +128,7 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
proxyPassword = ""
|
||||
}
|
||||
|
||||
override fun getPushToken(): String {
|
||||
return runBlocking { async { readString(PUSH_TOKEN).first() } }.getCompleted()
|
||||
}
|
||||
override fun getPushToken(): String = runBlocking { async { readString(PUSH_TOKEN).first() } }.getCompleted()
|
||||
|
||||
override fun setPushToken(pushToken: String?) =
|
||||
runBlocking<Unit> {
|
||||
@ -147,9 +143,10 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
pushToken = ""
|
||||
}
|
||||
|
||||
override fun getPushTokenLatestGeneration(): Long {
|
||||
return runBlocking { async { readLong(PUSH_TOKEN_LATEST_GENERATION).first() } }.getCompleted()
|
||||
}
|
||||
override fun getPushTokenLatestGeneration(): Long =
|
||||
runBlocking {
|
||||
async { readLong(PUSH_TOKEN_LATEST_GENERATION).first() }
|
||||
}.getCompleted()
|
||||
|
||||
override fun setPushTokenLatestGeneration(date: Long) =
|
||||
runBlocking<Unit> {
|
||||
@ -158,9 +155,10 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
}
|
||||
}
|
||||
|
||||
override fun getPushTokenLatestFetch(): Long {
|
||||
return runBlocking { async { readLong(PUSH_TOKEN_LATEST_FETCH).first() } }.getCompleted()
|
||||
}
|
||||
override fun getPushTokenLatestFetch(): Long =
|
||||
runBlocking {
|
||||
async { readLong(PUSH_TOKEN_LATEST_FETCH).first() }
|
||||
}.getCompleted()
|
||||
|
||||
override fun setPushTokenLatestFetch(date: Long) =
|
||||
runBlocking<Unit> {
|
||||
@ -169,9 +167,10 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
}
|
||||
}
|
||||
|
||||
override fun getTemporaryClientCertAlias(): String {
|
||||
return runBlocking { async { readString(TEMP_CLIENT_CERT_ALIAS).first() } }.getCompleted()
|
||||
}
|
||||
override fun getTemporaryClientCertAlias(): String =
|
||||
runBlocking {
|
||||
async { readString(TEMP_CLIENT_CERT_ALIAS).first() }
|
||||
}.getCompleted()
|
||||
|
||||
override fun setTemporaryClientCertAlias(alias: String?) =
|
||||
runBlocking<Unit> {
|
||||
@ -186,9 +185,10 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
temporaryClientCertAlias = ""
|
||||
}
|
||||
|
||||
override fun getPushToTalkIntroShown(): Boolean {
|
||||
return runBlocking { async { readBoolean(PUSH_TO_TALK_INTRO_SHOWN).first() } }.getCompleted()
|
||||
}
|
||||
override fun getPushToTalkIntroShown(): Boolean =
|
||||
runBlocking {
|
||||
async { readBoolean(PUSH_TO_TALK_INTRO_SHOWN).first() }
|
||||
}.getCompleted()
|
||||
|
||||
override fun setPushToTalkIntroShown(shown: Boolean) =
|
||||
runBlocking<Unit> {
|
||||
@ -201,9 +201,10 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
pushToTalkIntroShown = false
|
||||
}
|
||||
|
||||
override fun getCallRingtoneUri(): String {
|
||||
return runBlocking { async { readString(CALL_RINGTONE).first() } }.getCompleted()
|
||||
}
|
||||
override fun getCallRingtoneUri(): String =
|
||||
runBlocking {
|
||||
async { readString(CALL_RINGTONE).first() }
|
||||
}.getCompleted()
|
||||
|
||||
override fun setCallRingtoneUri(value: String?) =
|
||||
runBlocking<Unit> {
|
||||
@ -218,9 +219,10 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
callRingtoneUri = ""
|
||||
}
|
||||
|
||||
override fun getMessageRingtoneUri(): String {
|
||||
return runBlocking { async { readString(MESSAGE_RINGTONE).first() } }.getCompleted()
|
||||
}
|
||||
override fun getMessageRingtoneUri(): String =
|
||||
runBlocking {
|
||||
async { readString(MESSAGE_RINGTONE).first() }
|
||||
}.getCompleted()
|
||||
|
||||
override fun setMessageRingtoneUri(value: String?) =
|
||||
runBlocking<Unit> {
|
||||
@ -235,9 +237,10 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
messageRingtoneUri = ""
|
||||
}
|
||||
|
||||
override fun getIsNotificationChannelUpgradedToV2(): Boolean {
|
||||
return runBlocking { async { readBoolean(NOTIFY_UPGRADE_V2).first() } }.getCompleted()
|
||||
}
|
||||
override fun getIsNotificationChannelUpgradedToV2(): Boolean =
|
||||
runBlocking {
|
||||
async { readBoolean(NOTIFY_UPGRADE_V2).first() }
|
||||
}.getCompleted()
|
||||
|
||||
override fun setNotificationChannelIsUpgradedToV2(value: Boolean) =
|
||||
runBlocking<Unit> {
|
||||
@ -250,9 +253,10 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
setNotificationChannelIsUpgradedToV2(false)
|
||||
}
|
||||
|
||||
override fun getIsNotificationChannelUpgradedToV3(): Boolean {
|
||||
return runBlocking { async { readBoolean(NOTIFY_UPGRADE_V3).first() } }.getCompleted()
|
||||
}
|
||||
override fun getIsNotificationChannelUpgradedToV3(): Boolean =
|
||||
runBlocking {
|
||||
async { readBoolean(NOTIFY_UPGRADE_V3).first() }
|
||||
}.getCompleted()
|
||||
|
||||
override fun setNotificationChannelIsUpgradedToV3(value: Boolean) =
|
||||
runBlocking<Unit> {
|
||||
@ -265,9 +269,10 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
setNotificationChannelIsUpgradedToV3(false)
|
||||
}
|
||||
|
||||
override fun getIsScreenSecured(): Boolean {
|
||||
return runBlocking { async { readBoolean(SCREEN_SECURITY).first() } }.getCompleted()
|
||||
}
|
||||
override fun getIsScreenSecured(): Boolean =
|
||||
runBlocking {
|
||||
async { readBoolean(SCREEN_SECURITY).first() }
|
||||
}.getCompleted()
|
||||
|
||||
override fun setScreenSecurity(value: Boolean) =
|
||||
runBlocking<Unit> {
|
||||
@ -280,9 +285,10 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
setScreenSecurity(false)
|
||||
}
|
||||
|
||||
override fun getIsScreenLocked(): Boolean {
|
||||
return runBlocking { async { readBoolean(SCREEN_LOCK).first() } }.getCompleted()
|
||||
}
|
||||
override fun getIsScreenLocked(): Boolean =
|
||||
runBlocking {
|
||||
async { readBoolean(SCREEN_LOCK).first() }
|
||||
}.getCompleted()
|
||||
|
||||
override fun setScreenLock(value: Boolean) =
|
||||
runBlocking<Unit> {
|
||||
@ -311,9 +317,10 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
setIncognitoKeyboard(false)
|
||||
}
|
||||
|
||||
override fun isPhoneBookIntegrationEnabled(): Boolean {
|
||||
return runBlocking { async { readBoolean(PHONE_BOOK_INTEGRATION).first() } }.getCompleted()
|
||||
}
|
||||
override fun isPhoneBookIntegrationEnabled(): Boolean =
|
||||
runBlocking {
|
||||
async { readBoolean(PHONE_BOOK_INTEGRATION).first() }
|
||||
}.getCompleted()
|
||||
|
||||
override fun setPhoneBookIntegration(value: Boolean) =
|
||||
runBlocking<Unit> {
|
||||
@ -381,9 +388,10 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
}
|
||||
}
|
||||
|
||||
override fun getIsDbRoomMigrated(): Boolean {
|
||||
return runBlocking { async { readBoolean(DB_ROOM_MIGRATED).first() } }.getCompleted()
|
||||
}
|
||||
override fun getIsDbRoomMigrated(): Boolean =
|
||||
runBlocking {
|
||||
async { readBoolean(DB_ROOM_MIGRATED).first() }
|
||||
}.getCompleted()
|
||||
|
||||
override fun setIsDbRoomMigrated(value: Boolean) =
|
||||
runBlocking<Unit> {
|
||||
@ -392,6 +400,18 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
}
|
||||
}
|
||||
|
||||
override fun getShowRegularNotificationWarning(): Boolean =
|
||||
runBlocking {
|
||||
async { readBoolean(SHOW_REGULAR_NOTIFICATION_WARNING, true).first() }
|
||||
}.getCompleted()
|
||||
|
||||
override fun setShowRegularNotificationWarning(value: Boolean) =
|
||||
runBlocking<Unit> {
|
||||
async {
|
||||
writeBoolean(SHOW_REGULAR_NOTIFICATION_WARNING, value)
|
||||
}
|
||||
}
|
||||
|
||||
override fun setPhoneBookIntegrationLastRun(currentTimeMillis: Long) =
|
||||
runBlocking<Unit> {
|
||||
async {
|
||||
@ -429,9 +449,10 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
}
|
||||
}
|
||||
|
||||
override fun getTypingStatus(): Boolean {
|
||||
return runBlocking { async { readBoolean(TYPING_STATUS).first() } }.getCompleted()
|
||||
}
|
||||
override fun getTypingStatus(): Boolean =
|
||||
runBlocking {
|
||||
async { readBoolean(TYPING_STATUS).first() }
|
||||
}.getCompleted()
|
||||
|
||||
override fun setSorting(value: String?) =
|
||||
runBlocking<Unit> {
|
||||
@ -544,18 +565,15 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
}
|
||||
}
|
||||
|
||||
override fun getShowNotificationWarning(): Boolean {
|
||||
return runBlocking {
|
||||
async {
|
||||
readBoolean(SHOW_NOTIFICATION_WARNING, true).first()
|
||||
}
|
||||
override fun getNotificationWarningLastPostponedDate(): Long =
|
||||
runBlocking {
|
||||
async { readLong(LAST_NOTIFICATION_WARNING).first() }
|
||||
}.getCompleted()
|
||||
}
|
||||
|
||||
override fun setShowNotificationWarning(showNotificationWarning: Boolean) =
|
||||
override fun setNotificationWarningLastPostponedDate(showNotificationWarning: Long) =
|
||||
runBlocking<Unit> {
|
||||
async {
|
||||
writeBoolean(SHOW_NOTIFICATION_WARNING, showNotificationWarning)
|
||||
writeLong(LAST_NOTIFICATION_WARNING, showNotificationWarning)
|
||||
}
|
||||
}
|
||||
|
||||
@ -643,7 +661,8 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
const val PHONE_BOOK_INTEGRATION_LAST_RUN = "phone_book_integration_last_run"
|
||||
const val TYPING_STATUS = "typing_status"
|
||||
const val MESSAGE_QUEUE = "@message_queue"
|
||||
const val SHOW_NOTIFICATION_WARNING = "show_notification_warning"
|
||||
const val SHOW_REGULAR_NOTIFICATION_WARNING = "show_regular_notification_warning"
|
||||
const val LAST_NOTIFICATION_WARNING = "last_notification_warning"
|
||||
private fun String.convertStringToArray(): Array<Float> {
|
||||
var varString = this
|
||||
val floatList = mutableListOf<Float>()
|
||||
|
@ -37,18 +37,6 @@
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/chat_list_notification_warning"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/nc_warning"
|
||||
android:gravity="center"
|
||||
android:minHeight="40dp"
|
||||
android:text="@string/nc_notification_warning"
|
||||
android:textColor="@color/white"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:id="@+id/search_toolbar"
|
||||
android:layout_width="match_parent"
|
||||
@ -238,6 +226,10 @@
|
||||
android:id="@+id/conversation_list_hint_include"
|
||||
layout="@layout/federated_invitation_hint" />
|
||||
|
||||
<include
|
||||
android:id="@+id/conversation_list_notification_warning"
|
||||
layout="@layout/notifications_warning" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/recycler_view"
|
||||
android:layout_width="match_parent"
|
||||
|
66
app/src/main/res/layout/notifications_warning.xml
Normal file
66
app/src/main/res/layout/notifications_warning.xml
Normal file
@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Nextcloud Talk - Android Client
|
||||
~
|
||||
~ SPDX-FileCopyrightText: 2024 Marcel Hibbe <dev@mhibbe.de>
|
||||
~ SPDX-License-Identifier: GPL-3.0-or-later
|
||||
-->
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/conversation_list_notification_warning_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:gravity="center_vertical|center_horizontal"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:id="@+id/notification_warning_cardview"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/standard_margin"
|
||||
android:layout_marginTop="@dimen/standard_half_margin"
|
||||
android:layout_marginEnd="@dimen/standard_margin"
|
||||
app:cardCornerRadius="8dp"
|
||||
app:cardElevation="2dp"
|
||||
app:strokeWidth="0dp">
|
||||
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:padding="@dimen/margin_between_elements">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/nc_notification_warning"
|
||||
android:textAlignment="center" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="end"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/not_now_button"
|
||||
style="@style/Button.Borderless"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/nc_not_now"/>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/show_settings_button"
|
||||
style="@style/Button.Borderless"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/nc_settings"/>
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
</LinearLayout>
|
@ -92,6 +92,5 @@
|
||||
<color name="icon_on_bg_default">#99000000</color>
|
||||
<color name="badge_color">#EF3B02</color>
|
||||
<color name="secondary_button_background">#DBE2E9</color>
|
||||
<color name="nc_warning">#FF9800</color>
|
||||
|
||||
</resources>
|
||||
|
@ -182,9 +182,10 @@ How to translate with transifex:
|
||||
|
||||
<string name="nc_ignore_battery_optimization_dialog_title">Ignore battery optimization</string>
|
||||
<string name="nc_ignore_battery_optimization_dialog_text">Battery optimization is not ignored. This should be changed to make sure that notifications work in the background! Please click OK and select \"All apps\" -> %1$s -> Do not optimize</string>
|
||||
<string name="nc_show_notification_warning_title">Show notification warning</string>
|
||||
<string name="nc_show_notification_warning_description">When notifications are not set up correctly, show a warning</string>
|
||||
<string name="nc_show_notification_warning_title">Show regular notification warning</string>
|
||||
<string name="nc_show_notification_warning_description">When notifications are not set up correctly, show a regular warning</string>
|
||||
<string name="nc_notification_warning">Notifications are not set up correctly</string>
|
||||
<string name="nc_not_now">Not now</string>
|
||||
|
||||
<string name="nc_diagnose_meta_category_title">Meta information</string>
|
||||
<string name="nc_diagnose_meta_system_report_date">Generation of system report</string>
|
||||
|
Loading…
Reference in New Issue
Block a user