Эх сурвалжийг харах

extract blink method, move server notification app hint to gplay block

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Marcel Hibbe 8 сар өмнө
parent
commit
8e6072bbc7

+ 7 - 24
app/src/main/java/com/nextcloud/talk/settings/SettingsActivity.kt

@@ -21,8 +21,6 @@ import android.content.Intent
 import android.content.pm.PackageManager
 import android.graphics.PorterDuff
 import android.graphics.drawable.ColorDrawable
-import android.graphics.drawable.Drawable
-import android.graphics.drawable.RippleDrawable
 import android.media.RingtoneManager
 import android.net.Uri
 import android.os.Build
@@ -73,6 +71,7 @@ import com.nextcloud.talk.utils.ApiUtils
 import com.nextcloud.talk.utils.CapabilitiesUtil
 import com.nextcloud.talk.utils.ClosedInterfaceImpl
 import com.nextcloud.talk.utils.DisplayUtils
+import com.nextcloud.talk.utils.DrawableUtils
 import com.nextcloud.talk.utils.LoggingUtils.sendMailWithAttachment
 import com.nextcloud.talk.utils.NotificationUtils
 import com.nextcloud.talk.utils.NotificationUtils.getCallRingtoneUri
@@ -91,7 +90,6 @@ import io.reactivex.schedulers.Schedulers
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.delay
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
@@ -306,8 +304,8 @@ class SettingsActivity : BaseActivity(), SetPhoneNumberDialogFragment.SetPhoneNu
                     resources!!.getString(R.string.nc_diagnose_battery_optimization_not_ignored)
                 binding.batteryOptimizationIgnored.setTextColor(resources.getColor(R.color.nc_darkRed, null))
 
-                if (openedByNotificationWarning){
-                    blinkRipple(binding.settingsBatteryOptimizationWrapper.background)
+                if (openedByNotificationWarning) {
+                    DrawableUtils.blinkDrawable(binding.settingsBatteryOptimizationWrapper.background)
                 }
 
                 binding.settingsBatteryOptimizationWrapper.setOnClickListener {
@@ -354,7 +352,7 @@ class SettingsActivity : BaseActivity(), SetPhoneNumberDialogFragment.SetPhoneNu
                     )
 
                     if (openedByNotificationWarning){
-                        blinkRipple(binding.settingsNotificationsPermissionWrapper.background)
+                        DrawableUtils.blinkDrawable(binding.settingsNotificationsPermissionWrapper.background)
                     }
 
                     binding.settingsCallSound.isEnabled = false
@@ -391,7 +389,7 @@ class SettingsActivity : BaseActivity(), SetPhoneNumberDialogFragment.SetPhoneNu
             binding.callsRingtone.text = resources!!.getString(R.string.nc_common_disabled)
 
             if (openedByNotificationWarning){
-                blinkRipple(binding.settingsCallSound.background)
+                DrawableUtils.blinkDrawable(binding.settingsCallSound.background)
             }
         }
 
@@ -406,7 +404,7 @@ class SettingsActivity : BaseActivity(), SetPhoneNumberDialogFragment.SetPhoneNu
             binding.messagesRingtone.text = resources!!.getString(R.string.nc_common_disabled)
 
             if (openedByNotificationWarning){
-                blinkRipple(binding.settingsMessageSound.background)
+                DrawableUtils.blinkDrawable(binding.settingsMessageSound.background)
             }
         }
 
@@ -488,7 +486,7 @@ class SettingsActivity : BaseActivity(), SetPhoneNumberDialogFragment.SetPhoneNu
 
             binding.settingsServerNotificationAppDescription.text = description
             if (openedByNotificationWarning) {
-                blinkRipple(binding.settingsServerNotificationAppWrapper.background)
+                DrawableUtils.blinkDrawable(binding.settingsServerNotificationAppWrapper.background)
             }
         } else {
             binding.settingsServerNotificationAppWrapper.visibility = View.GONE
@@ -1419,21 +1417,6 @@ class SettingsActivity : BaseActivity(), SetPhoneNumberDialogFragment.SetPhoneNu
         }
     }
 
-    @Suppress("MagicNumber")
-    private fun blinkRipple(rippleView: Drawable) {
-        (rippleView as RippleDrawable).let { rippleDrawable ->
-            CoroutineScope(Dispatchers.Main).launch {
-                delay(1000L) // Wait 2 seconds before starting
-                repeat(3) {
-                    rippleDrawable.state = intArrayOf(android.R.attr.state_pressed, android.R.attr.state_enabled)
-                    delay(250L) // Ripple active duration
-                    rippleDrawable.state = intArrayOf() // Reset state
-                    delay(250L) // Time between blinks
-                }
-            }
-        }
-    }
-
     companion object {
         private val TAG = SettingsActivity::class.java.simpleName
         private const val DURATION: Long = 2500

+ 27 - 0
app/src/main/java/com/nextcloud/talk/utils/DrawableUtils.kt

@@ -6,14 +6,22 @@
  */
 package com.nextcloud.talk.utils
 
+import android.graphics.drawable.Drawable
+import android.graphics.drawable.RippleDrawable
+import android.util.Log
 import com.nextcloud.talk.R
 import com.nextcloud.talk.utils.Mimetype.AUDIO_PREFIX
 import com.nextcloud.talk.utils.Mimetype.FOLDER
 import com.nextcloud.talk.utils.Mimetype.IMAGE_PREFIX
 import com.nextcloud.talk.utils.Mimetype.TEXT_PREFIX
 import com.nextcloud.talk.utils.Mimetype.VIDEO_PREFIX
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
 
 object DrawableUtils {
+    private val TAG = DrawableUtils::class.java.simpleName
 
     @Suppress("Detekt.LongMethod")
     fun getDrawableResourceIdForMimeType(mimetype: String?): Int {
@@ -153,4 +161,23 @@ object DrawableUtils {
             drawableMap["unknown"]!!
         }
     }
+
+    @Suppress("MagicNumber")
+    fun blinkDrawable(rippleView: Drawable) {
+        try {
+            (rippleView as RippleDrawable).let { rippleDrawable ->
+                CoroutineScope(Dispatchers.Main).launch {
+                    delay(1000L) // Wait 2 seconds before starting
+                    repeat(3) {
+                        rippleDrawable.state = intArrayOf(android.R.attr.state_pressed, android.R.attr.state_enabled)
+                        delay(250L) // Ripple active duration
+                        rippleDrawable.state = intArrayOf() // Reset state
+                        delay(250L) // Time between blinks
+                    }
+                }
+            }
+        } catch (e: Exception){
+            Log.e(TAG, "Failed to blink Drawable", e)
+        }
+    }
 }

+ 22 - 25
app/src/main/res/layout/activity_settings.xml

@@ -185,7 +185,6 @@
                         android:text=""
                         tools:ignore="SpeakableTextPresentCheck" />
 
-
                 </com.google.android.material.textfield.TextInputLayout>
 
             </LinearLayout>
@@ -246,6 +245,28 @@
                             android:gravity="center_vertical"/>
                     </LinearLayout>
 
+                    <LinearLayout
+                        android:id="@+id/settings_server_notification_app_wrapper"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:background="?android:attr/selectableItemBackground"
+                        android:orientation="vertical"
+                        android:padding="@dimen/standard_padding">
+
+                        <com.google.android.material.textview.MaterialTextView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:text="@string/nc_settings_server_notification_app_not_installed_title"
+                            android:textSize="@dimen/headline_text_size"/>
+
+                        <com.google.android.material.textview.MaterialTextView
+                            android:id="@+id/settings_server_notification_app_description"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:textColor="@color/nc_darkRed"
+                            android:textSize="@dimen/supporting_text_text_size"
+                            tools:text="Please contact the admin of www.example.com"/>
+                    </LinearLayout>
 
                     <LinearLayout
                         android:id="@+id/settings_notifications_permission_wrapper"
@@ -349,30 +370,6 @@
                         android:text="@string/nc_settings_default_ringtone"
                         android:textSize="@dimen/supporting_text_text_size"/>
                 </LinearLayout>
-
-                <LinearLayout
-                    android:id="@+id/settings_server_notification_app_wrapper"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:background="?android:attr/selectableItemBackground"
-                    android:orientation="vertical"
-                    android:padding="@dimen/standard_padding">
-
-                    <com.google.android.material.textview.MaterialTextView
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:text="@string/nc_settings_server_notification_app_not_installed_title"
-                        android:textSize="@dimen/headline_text_size"/>
-
-                    <com.google.android.material.textview.MaterialTextView
-                        android:id="@+id/settings_server_notification_app_description"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:textColor="@color/nc_darkRed"
-                        android:textSize="@dimen/supporting_text_text_size"
-                        tools:text="Please contact the admin of www.example.com"/>
-                </LinearLayout>
-
             </LinearLayout>
 
             <LinearLayout