Compare commits
	
		
			2 Commits
		
	
	
		
			v125030681
			...
			9a5caf1b3c
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 9a5caf1b3c | ||
|  | 7db91b0f11 | 
| @@ -1,6 +1,7 @@ | ||||
| import java.io.ByteArrayOutputStream | ||||
|  | ||||
| val ignoreGitVersion: String by project | ||||
| val acraVersion = "5.9.7" | ||||
|  | ||||
| plugins { | ||||
|     id("com.android.application") | ||||
| @@ -187,6 +188,9 @@ dependencies { | ||||
|     testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0") | ||||
|     implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.0") | ||||
|  | ||||
|     implementation("ch.acra:acra-http:$acraVersion") | ||||
|     implementation("ch.acra:acra-toast:$acraVersion") | ||||
|  | ||||
|     // Matomo | ||||
|     implementation("com.github.matomo-org:matomo-sdk-android:4.1.4") | ||||
| } | ||||
|   | ||||
| @@ -59,11 +59,15 @@ import com.mikepenz.materialdrawer.util.updateBadge | ||||
| import kotlinx.coroutines.CoroutineScope | ||||
| import kotlinx.coroutines.Dispatchers | ||||
| import kotlinx.coroutines.launch | ||||
| import org.acra.ACRA | ||||
| import org.acra.ktx.sendSilentlyWithAcra | ||||
| import org.acra.ktx.sendWithAcra | ||||
| import org.kodein.di.DIAware | ||||
| import org.kodein.di.android.closestDI | ||||
| import org.kodein.di.instance | ||||
| import org.matomo.sdk.Tracker | ||||
| import org.matomo.sdk.extra.TrackHelper | ||||
| import java.security.MessageDigest | ||||
| import java.util.concurrent.TimeUnit | ||||
|  | ||||
|  | ||||
| @@ -306,6 +310,8 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar | ||||
|  | ||||
|         handleBottomBarActions() | ||||
|  | ||||
|         handleGDPRDialog(appSettingsService.settings.getBoolean("GDPR_shown", false)) | ||||
|  | ||||
|         handleRecurringTask() | ||||
|  | ||||
|         CoroutineScope(Dispatchers.Main).launch { | ||||
| @@ -315,6 +321,26 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar | ||||
|         getElementsAccordingToTab() | ||||
|     } | ||||
|  | ||||
|  | ||||
|     private fun handleGDPRDialog(GDPRShown: Boolean) { | ||||
|         val messageDigest: MessageDigest = MessageDigest.getInstance("SHA-256") | ||||
|         messageDigest.update(appSettingsService.getBaseUrl().toByteArray()) | ||||
|         ACRA.errorReporter.putCustomData("unique_id", String(messageDigest.digest())) | ||||
|         if (!GDPRShown) { | ||||
|             val alertDialog = AlertDialog.Builder(this).create() | ||||
|             alertDialog.setTitle(getString(R.string.gdpr_dialog_title)) | ||||
|             alertDialog.setMessage(getString(R.string.gdpr_dialog_message)) | ||||
|             alertDialog.setButton( | ||||
|                 AlertDialog.BUTTON_NEUTRAL, | ||||
|                 "OK" | ||||
|             ) { dialog, _ -> | ||||
|                 appSettingsService.settings.putBoolean("GDPR_shown", true) | ||||
|                 dialog.dismiss() | ||||
|             } | ||||
|             alertDialog.show() | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private fun initDrawer() { | ||||
|         DrawerImageLoader.init(object : AbstractDrawerImageLoader() { | ||||
|             override fun set(imageView: ImageView, uri: Uri, placeholder: Drawable, tag: String?) { | ||||
| @@ -487,6 +513,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar | ||||
|         val gdColor = try { | ||||
|             Color.parseColor(it.color) | ||||
|         } catch (e: IllegalArgumentException) { | ||||
|             e.sendSilentlyWithAcra() | ||||
|             resources.getColor(R.color.colorPrimary) | ||||
|         } | ||||
|         gd.setColor(gdColor) | ||||
|   | ||||
| @@ -29,6 +29,13 @@ import kotlinx.coroutines.CoroutineScope | ||||
| import kotlinx.coroutines.Dispatchers | ||||
| import kotlinx.coroutines.flow.MutableStateFlow | ||||
| import kotlinx.coroutines.launch | ||||
| import org.acra.ACRA | ||||
| import org.acra.ReportField | ||||
| import org.acra.config.httpSender | ||||
| import org.acra.config.toast | ||||
| import org.acra.data.StringFormat | ||||
| import org.acra.ktx.initAcra | ||||
| import org.acra.sender.HttpSender | ||||
| import org.kodein.di.* | ||||
| import org.matomo.sdk.Matomo | ||||
| import org.matomo.sdk.Tracker | ||||
| @@ -59,28 +66,59 @@ class MyApp : MultiDexApplication(), DIAware { | ||||
|         super.onCreate() | ||||
|         Napier.base(DebugAntilog()) | ||||
|  | ||||
|         initDrawerImageLoader() | ||||
|         if (!ACRA.isACRASenderServiceProcess()) { | ||||
|             initDrawerImageLoader() | ||||
|  | ||||
|         tryToHandleBug() | ||||
|             tryToHandleBug() | ||||
|  | ||||
|         handleNotificationChannels() | ||||
|             handleNotificationChannels() | ||||
|  | ||||
|         ProcessLifecycleOwner.get().lifecycle.addObserver(AppLifeCycleObserver(connectivityStatus, repository)) | ||||
|             ProcessLifecycleOwner.get().lifecycle.addObserver(AppLifeCycleObserver(connectivityStatus, repository)) | ||||
|  | ||||
|         CoroutineScope(Dispatchers.Main).launch { | ||||
|             viewModel.networkAvailableProvider.collect { networkAvailable -> | ||||
|                 val toastMessage = if (networkAvailable) { | ||||
|                     repository.handleDBActions() | ||||
|                     R.string.network_connectivity_retrieved | ||||
|                 } else { | ||||
|                     R.string.network_connectivity_lost | ||||
|             CoroutineScope(Dispatchers.Main).launch { | ||||
|                 viewModel.networkAvailableProvider.collect { networkAvailable -> | ||||
|                     val toastMessage = if (networkAvailable) { | ||||
|                         repository.handleDBActions() | ||||
|                         R.string.network_connectivity_retrieved | ||||
|                     } else { | ||||
|                         R.string.network_connectivity_lost | ||||
|                     } | ||||
|  | ||||
|                     Toast.makeText( | ||||
|                         applicationContext, | ||||
|                         toastMessage, | ||||
|                         Toast.LENGTH_SHORT | ||||
|                     ).show() | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|                 Toast.makeText( | ||||
|                     applicationContext, | ||||
|                     toastMessage, | ||||
|                     Toast.LENGTH_SHORT | ||||
|                 ).show() | ||||
|     override fun attachBaseContext(base: Context?) { | ||||
|         super.attachBaseContext(base) | ||||
|  | ||||
|         initAcra { | ||||
|             reportFormat = StringFormat.JSON | ||||
|             reportSendSuccessToast = "YES" | ||||
|             reportSendFailureToast = "NO !" | ||||
|             reportContent = listOf( | ||||
|                 ReportField.REPORT_ID, ReportField.INSTALLATION_ID, | ||||
|                 ReportField.APP_VERSION_CODE, ReportField.APP_VERSION_NAME, | ||||
|                 ReportField.BUILD, ReportField.ANDROID_VERSION, ReportField.BRAND, ReportField.PHONE_MODEL, | ||||
|                 ReportField.AVAILABLE_MEM_SIZE, ReportField.TOTAL_MEM_SIZE, | ||||
|                 ReportField.STACK_TRACE, ReportField.APPLICATION_LOG, ReportField.LOGCAT, | ||||
|                 ReportField.INITIAL_CONFIGURATION, ReportField.CRASH_CONFIGURATION, ReportField.IS_SILENT, | ||||
|                 ReportField.USER_APP_START_DATE, ReportField.USER_COMMENT, ReportField.USER_CRASH_DATE, ReportField.USER_EMAIL, ReportField.CUSTOM_DATA) | ||||
|             toast { | ||||
|                 //required | ||||
|                 text = getString(R.string.crash_toast_text) | ||||
|                 length = Toast.LENGTH_SHORT | ||||
|             } | ||||
|             httpSender { | ||||
|                 uri = "https://bugs.amine-louveau.fr/report" /*best guess, you may need to adjust this*/ | ||||
|                 basicAuthLogin = "LMTlLZuazADohTCm" | ||||
|                 basicAuthPassword = "he6ghHp83F0PYPfh" | ||||
|                 httpMethod = HttpSender.Method.POST | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -44,6 +44,8 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton | ||||
| import kotlinx.coroutines.CoroutineScope | ||||
| import kotlinx.coroutines.Dispatchers | ||||
| import kotlinx.coroutines.launch | ||||
| import org.acra.ktx.sendSilentlyWithAcra | ||||
| import org.acra.ktx.sendWithAcra | ||||
| import org.kodein.di.DI | ||||
| import org.kodein.di.DIAware | ||||
| import org.kodein.di.android.x.closestDI | ||||
| @@ -112,6 +114,7 @@ class ArticleFragment : Fragment(), DIAware { | ||||
|                 typeface = try { | ||||
|                     ResourcesCompat.getFont(requireContext(), resId)!! | ||||
|                 } catch (e: java.lang.Exception) { | ||||
|                     e.sendSilentlyWithAcra() | ||||
|                     // Just to be sure | ||||
|                     null | ||||
|                 } | ||||
| @@ -217,6 +220,7 @@ class ArticleFragment : Fragment(), DIAware { | ||||
|             ) | ||||
|  | ||||
|         } catch (e: InflateException) { | ||||
|             e.sendSilentlyWithAcra() | ||||
|             AlertDialog.Builder(requireContext()) | ||||
|                 .setMessage(requireContext().getString(R.string.webview_dialog_issue_message)) | ||||
|                 .setTitle(requireContext().getString(R.string.webview_dialog_issue_title)) | ||||
| @@ -264,15 +268,18 @@ class ArticleFragment : Fragment(), DIAware { | ||||
|                                     URL(response.data!!.url) | ||||
|                                     url = response.data!!.url | ||||
|                                 } catch (e: MalformedURLException) { | ||||
|                                     // Mercury returned a relative url. We do nothing. | ||||
|                                     // Mercury returned a relative url | ||||
|                                     e.sendSilentlyWithAcra() | ||||
|                                 } | ||||
|                             } catch (e: Exception) { | ||||
|                                 e.sendSilentlyWithAcra() | ||||
|                             } | ||||
|  | ||||
|                             try { | ||||
|                                 contentText = response.data!!.content.orEmpty() | ||||
|                                 htmlToWebview() | ||||
|                             } catch (e: Exception) { | ||||
|                                 e.sendSilentlyWithAcra() | ||||
|                             } | ||||
|  | ||||
|                             try { | ||||
| @@ -288,13 +295,13 @@ class ArticleFragment : Fragment(), DIAware { | ||||
|                                             .apply(RequestOptions.fitCenterTransform()) | ||||
|                                             .into(binding.imageView) | ||||
|                                     } catch (e: Exception) { | ||||
|                                         e.sendSilentlyWithAcra() | ||||
|                                     } | ||||
|                                 } else { | ||||
|                                     binding.imageView.visibility = View.GONE | ||||
|                                 } | ||||
|                             } catch (e: Exception) { | ||||
|                                 if (context != null) { | ||||
|                                 } | ||||
|                                 e.sendSilentlyWithAcra() | ||||
|                             } | ||||
|  | ||||
|                             try { | ||||
| @@ -302,20 +309,17 @@ class ArticleFragment : Fragment(), DIAware { | ||||
|  | ||||
|                                 binding.progressBar.visibility = View.GONE | ||||
|                             } catch (e: Exception) { | ||||
|                                 if (context != null) { | ||||
|                                 } | ||||
|                                 e.sendSilentlyWithAcra() | ||||
|                             } | ||||
|                         } else { | ||||
|                             try { | ||||
|                                 openInBrowserAfterFailing() | ||||
|                             } catch (e: Exception) { | ||||
|                                 if (context != null) { | ||||
|                                 } | ||||
|                                 e.sendSilentlyWithAcra() | ||||
|                             } | ||||
|                         } | ||||
|                     } catch (e: Exception) { | ||||
|                         if (context != null) { | ||||
|                         } | ||||
|                         e.sendSilentlyWithAcra() | ||||
|                     } | ||||
|                 } else { | ||||
|                     openInBrowserAfterFailing() | ||||
| @@ -359,19 +363,25 @@ class ArticleFragment : Fragment(), DIAware { | ||||
|                     try { | ||||
|                         val image = Glide.with(view).asBitmap().apply(glideOptions).load(url).submit().get() | ||||
|                         return WebResourceResponse("image/jpg", "UTF-8", getBitmapInputStream(image, Bitmap.CompressFormat.JPEG)) | ||||
|                     }catch ( e : ExecutionException) {} | ||||
|                     } catch ( e : ExecutionException) { | ||||
|                         e.sendSilentlyWithAcra() | ||||
|                     } | ||||
|                 } | ||||
|                 else if (url.lowercase(Locale.US).contains(".png")) { | ||||
|                     try { | ||||
|                         val image = Glide.with(view).asBitmap().apply(glideOptions).load(url).submit().get() | ||||
|                         return WebResourceResponse("image/jpg", "UTF-8", getBitmapInputStream(image, Bitmap.CompressFormat.PNG)) | ||||
|                     }catch ( e : ExecutionException) {} | ||||
|                     } catch ( e : ExecutionException) { | ||||
|                         e.sendSilentlyWithAcra() | ||||
|                     } | ||||
|                 } | ||||
|                 else if (url.lowercase(Locale.US).contains(".webp")) { | ||||
|                     try { | ||||
|                         val image = Glide.with(view).asBitmap().apply(glideOptions).load(url).submit().get() | ||||
|                         return WebResourceResponse("image/jpg", "UTF-8", getBitmapInputStream(image, Bitmap.CompressFormat.WEBP)) | ||||
|                     }catch ( e : ExecutionException) {} | ||||
|                     } catch ( e : ExecutionException) { | ||||
|                         e.sendSilentlyWithAcra() | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 return super.shouldInterceptRequest(view, url) | ||||
| @@ -395,6 +405,7 @@ class ArticleFragment : Fragment(), DIAware { | ||||
|             val itemUrl = URL(url) | ||||
|             baseUrl = itemUrl.protocol + "://" + itemUrl.host | ||||
|         } catch (e: MalformedURLException) { | ||||
|             e.sendSilentlyWithAcra() | ||||
|         } | ||||
|  | ||||
|         val fontName =  when (font) { | ||||
|   | ||||
| @@ -7,6 +7,7 @@ import bou.amine.apps.readerforselfossv2.utils.getImages | ||||
| import com.bumptech.glide.Glide | ||||
| import com.bumptech.glide.load.engine.DiskCacheStrategy | ||||
| import com.bumptech.glide.request.RequestOptions | ||||
| import org.acra.ktx.sendSilentlyWithAcra | ||||
|  | ||||
| fun SelfossModel.Item.preloadImages(context: Context) : Boolean { | ||||
|     val imageUrls = this.getImages() | ||||
| @@ -23,6 +24,7 @@ fun SelfossModel.Item.preloadImages(context: Context) : Boolean { | ||||
|             } | ||||
|         } | ||||
|     } catch (e : Error) { | ||||
|         e.sendSilentlyWithAcra() | ||||
|         return false | ||||
|     } | ||||
|  | ||||
| @@ -35,7 +37,7 @@ fun String.toTextDrawableString(): String { | ||||
|         try { | ||||
|             textDrawable.append(s[0]) | ||||
|         } catch (e: StringIndexOutOfBoundsException) { | ||||
|             // We do nothing | ||||
|             e.sendSilentlyWithAcra() | ||||
|         } | ||||
|     } | ||||
|     return textDrawable.toString() | ||||
|   | ||||
| @@ -17,6 +17,8 @@ import androidx.preference.PreferenceFragmentCompat | ||||
| import bou.amine.apps.readerforselfossv2.android.R | ||||
| import bou.amine.apps.readerforselfossv2.android.databinding.ActivitySettingsBinding | ||||
| import bou.amine.apps.readerforselfossv2.service.AppSettingsService | ||||
| import org.acra.ktx.sendSilentlyWithAcra | ||||
| import org.acra.ktx.sendWithAcra | ||||
| import org.kodein.di.DIAware | ||||
| import org.kodein.di.android.closestDI | ||||
| import org.kodein.di.instance | ||||
| @@ -101,6 +103,11 @@ class SettingsActivity : AppCompatActivity(), | ||||
|     class MainPreferenceFragment : PreferenceFragmentCompat() { | ||||
|         override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { | ||||
|             setPreferencesFromResource(R.xml.pref_main, rootKey) | ||||
|  | ||||
|             preferenceManager.findPreference<Preference>("currentMode")?.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue -> | ||||
|                 AppCompatDelegate.setDefaultNightMode(newValue.toString().toInt()) // ListPreference Only takes string-arrays ¯\_(ツ)_/¯ | ||||
|                 true | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -117,6 +124,7 @@ class SettingsActivity : AppCompatActivity(), | ||||
|                                 val input: Int = (dest.toString() + source.toString()).toInt() | ||||
|                                 if (input in 1..200) return@InputFilter null | ||||
|                             } catch (nfe: NumberFormatException) { | ||||
|                                 nfe.sendSilentlyWithAcra() | ||||
|                                 Toast.makeText(activity, R.string.items_number_should_be_number, Toast.LENGTH_LONG).show() | ||||
|                             } | ||||
|                             "" | ||||
| @@ -140,6 +148,7 @@ class SettingsActivity : AppCompatActivity(), | ||||
|                         try { | ||||
|                             editText.textSize = editable.toString().toInt().toFloat() | ||||
|                         } catch (e: NumberFormatException) { | ||||
|                             e.sendSilentlyWithAcra() | ||||
|                         } | ||||
|                     } | ||||
|                 } } | ||||
| @@ -149,6 +158,7 @@ class SettingsActivity : AppCompatActivity(), | ||||
|                                 val input = (dest.toString() + source.toString()).toInt() | ||||
|                                 if (input > 0) return@InputFilter null | ||||
|                             } catch (nfe: NumberFormatException) { | ||||
|                                 nfe.sendSilentlyWithAcra() | ||||
|                             } | ||||
|                             "" | ||||
|                         } | ||||
|   | ||||
| @@ -0,0 +1,5 @@ | ||||
| <vector android:height="24dp" android:tint="#000000" | ||||
|     android:viewportHeight="24" android:viewportWidth="24" | ||||
|     android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
|     <path android:fillColor="@android:color/white" android:pathData="M20,8h-2.81c-0.45,-0.78 -1.07,-1.45 -1.82,-1.96L17,4.41 15.59,3l-2.17,2.17C12.96,5.06 12.49,5 12,5c-0.49,0 -0.96,0.06 -1.41,0.17L8.41,3 7,4.41l1.62,1.63C7.88,6.55 7.26,7.22 6.81,8L4,8v2h2.09c-0.05,0.33 -0.09,0.66 -0.09,1v1L4,12v2h2v1c0,0.34 0.04,0.67 0.09,1L4,16v2h2.81c1.04,1.79 2.97,3 5.19,3s4.15,-1.21 5.19,-3L20,18v-2h-2.09c0.05,-0.33 0.09,-0.66 0.09,-1v-1h2v-2h-2v-1c0,-0.34 -0.04,-0.67 -0.09,-1L20,10L20,8zM14,16h-4v-2h4v2zM14,12h-4v-2h4v2z"/> | ||||
| </vector> | ||||
| @@ -0,0 +1,7 @@ | ||||
| <vector android:height="24dp" android:tint="#000000" | ||||
|     android:viewportHeight="24" android:viewportWidth="24" | ||||
|     android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
|     <path android:fillColor="@android:color/white" android:pathData="M21,8c-1.45,0 -2.26,1.44 -1.93,2.51l-3.55,3.56c-0.3,-0.09 -0.74,-0.09 -1.04,0l-2.55,-2.55C12.27,10.45 11.46,9 10,9c-1.45,0 -2.27,1.44 -1.93,2.52l-4.56,4.55C2.44,15.74 1,16.55 1,18c0,1.1 0.9,2 2,2c1.45,0 2.26,-1.44 1.93,-2.51l4.55,-4.56c0.3,0.09 0.74,0.09 1.04,0l2.55,2.55C12.73,16.55 13.54,18 15,18c1.45,0 2.27,-1.44 1.93,-2.52l3.56,-3.55C21.56,12.26 23,11.45 23,10C23,8.9 22.1,8 21,8z"/> | ||||
|     <path android:fillColor="@android:color/white" android:pathData="M15,9l0.94,-2.07l2.06,-0.93l-2.06,-0.93l-0.94,-2.07l-0.92,2.07l-2.08,0.93l2.08,0.93z"/> | ||||
|     <path android:fillColor="@android:color/white" android:pathData="M3.5,11l0.5,-2l2,-0.5l-2,-0.5l-0.5,-2l-0.5,2l-2,0.5l2,0.5z"/> | ||||
| </vector> | ||||
| @@ -134,4 +134,8 @@ | ||||
|     <string name="mode_light">Light mode</string> | ||||
|     <string name="drawer_error_loading_sources">Error loading sources…</string> | ||||
|     <string name="pref_switch_enable_analytics">Enable analytics</string> | ||||
|     <string name="gdpr_dialog_title">The app does not share any personal data about you.</string> | ||||
|     <string name="gdpr_dialog_message"><![CDATA[Crash reports sending is now enabled. It can be disabled from the settings page (Settings > Debug). Keep in mind that crash reports are essential for the app development.]]></string> | ||||
|     <string name="crash_toast_text">A crash occured. Sending the details to the developper.</string> | ||||
|     <string name="pref_switch_disable_acra">"Disable automatic bug reporting. "</string> | ||||
| </resources> | ||||
|   | ||||
| @@ -134,4 +134,8 @@ | ||||
|     <string name="mode_light">Light mode</string> | ||||
|     <string name="drawer_error_loading_sources">Error loading sources…</string> | ||||
|     <string name="pref_switch_enable_analytics">Enable analytics</string> | ||||
|     <string name="gdpr_dialog_title">The app does not share any personal data about you.</string> | ||||
|     <string name="gdpr_dialog_message"><![CDATA[Crash reports sending is now enabled. It can be disabled from the settings page (Settings > Debug). Keep in mind that crash reports are essential for the app development.]]></string> | ||||
|     <string name="crash_toast_text">A crash occured. Sending the details to the developper.</string> | ||||
|     <string name="pref_switch_disable_acra">"Disable automatic bug reporting. "</string> | ||||
| </resources> | ||||
|   | ||||
| @@ -134,4 +134,8 @@ | ||||
|     <string name="mode_light">Light mode</string> | ||||
|     <string name="drawer_error_loading_sources">Error loading sources…</string> | ||||
|     <string name="pref_switch_enable_analytics">Enable analytics</string> | ||||
|     <string name="gdpr_dialog_title">The app does not share any personal data about you.</string> | ||||
|     <string name="gdpr_dialog_message"><![CDATA[Crash reports sending is now enabled. It can be disabled from the settings page (Settings > Debug). Keep in mind that crash reports are essential for the app development.]]></string> | ||||
|     <string name="crash_toast_text">A crash occured. Sending the details to the developper.</string> | ||||
|     <string name="pref_switch_disable_acra">"Disable automatic bug reporting. "</string> | ||||
| </resources> | ||||
|   | ||||
| @@ -134,4 +134,8 @@ | ||||
|     <string name="mode_light">Light mode</string> | ||||
|     <string name="drawer_error_loading_sources">Error loading sources…</string> | ||||
|     <string name="pref_switch_enable_analytics">Enable analytics</string> | ||||
|     <string name="gdpr_dialog_title">The app does not share any personal data about you.</string> | ||||
|     <string name="gdpr_dialog_message"><![CDATA[Crash reports sending is now enabled. It can be disabled from the settings page (Settings > Debug). Keep in mind that crash reports are essential for the app development.]]></string> | ||||
|     <string name="crash_toast_text">A crash occured. Sending the details to the developper.</string> | ||||
|     <string name="pref_switch_disable_acra">"Disable automatic bug reporting. "</string> | ||||
| </resources> | ||||
|   | ||||
| @@ -134,4 +134,8 @@ | ||||
|     <string name="mode_light">Thème clair</string> | ||||
|     <string name="drawer_error_loading_sources">Error loading sources…</string> | ||||
|     <string name="pref_switch_enable_analytics">Enable analytics</string> | ||||
|     <string name="gdpr_dialog_title">The app does not share any personal data about you.</string> | ||||
|     <string name="gdpr_dialog_message"><![CDATA[Crash reports sending is now enabled. It can be disabled from the settings page (Settings > Debug). Keep in mind that crash reports are essential for the app development.]]></string> | ||||
|     <string name="crash_toast_text">A crash occured. Sending the details to the developper.</string> | ||||
|     <string name="pref_switch_disable_acra">"Disable automatic bug reporting. "</string> | ||||
| </resources> | ||||
|   | ||||
| @@ -134,4 +134,8 @@ | ||||
|     <string name="mode_light">Light mode</string> | ||||
|     <string name="drawer_error_loading_sources">Error loading sources…</string> | ||||
|     <string name="pref_switch_enable_analytics">Enable analytics</string> | ||||
|     <string name="gdpr_dialog_title">The app does not share any personal data about you.</string> | ||||
|     <string name="gdpr_dialog_message"><![CDATA[Crash reports sending is now enabled. It can be disabled from the settings page (Settings > Debug). Keep in mind that crash reports are essential for the app development.]]></string> | ||||
|     <string name="crash_toast_text">A crash occured. Sending the details to the developper.</string> | ||||
|     <string name="pref_switch_disable_acra">"Disable automatic bug reporting. "</string> | ||||
| </resources> | ||||
|   | ||||
| @@ -134,4 +134,8 @@ | ||||
|     <string name="mode_light">Light mode</string> | ||||
|     <string name="drawer_error_loading_sources">Error loading sources…</string> | ||||
|     <string name="pref_switch_enable_analytics">Enable analytics</string> | ||||
|     <string name="gdpr_dialog_title">The app does not share any personal data about you.</string> | ||||
|     <string name="gdpr_dialog_message"><![CDATA[Crash reports sending is now enabled. It can be disabled from the settings page (Settings > Debug). Keep in mind that crash reports are essential for the app development.]]></string> | ||||
|     <string name="crash_toast_text">A crash occured. Sending the details to the developper.</string> | ||||
|     <string name="pref_switch_disable_acra">"Disable automatic bug reporting. "</string> | ||||
| </resources> | ||||
|   | ||||
| @@ -134,4 +134,8 @@ | ||||
|     <string name="mode_light">Light mode</string> | ||||
|     <string name="drawer_error_loading_sources">Error loading sources…</string> | ||||
|     <string name="pref_switch_enable_analytics">Enable analytics</string> | ||||
|     <string name="gdpr_dialog_title">The app does not share any personal data about you.</string> | ||||
|     <string name="gdpr_dialog_message"><![CDATA[Crash reports sending is now enabled. It can be disabled from the settings page (Settings > Debug). Keep in mind that crash reports are essential for the app development.]]></string> | ||||
|     <string name="crash_toast_text">A crash occured. Sending the details to the developper.</string> | ||||
|     <string name="pref_switch_disable_acra">"Disable automatic bug reporting. "</string> | ||||
| </resources> | ||||
|   | ||||
| @@ -134,4 +134,8 @@ | ||||
|     <string name="mode_light">Light mode</string> | ||||
|     <string name="drawer_error_loading_sources">Error loading sources…</string> | ||||
|     <string name="pref_switch_enable_analytics">Enable analytics</string> | ||||
|     <string name="gdpr_dialog_title">The app does not share any personal data about you.</string> | ||||
|     <string name="gdpr_dialog_message"><![CDATA[Crash reports sending is now enabled. It can be disabled from the settings page (Settings > Debug). Keep in mind that crash reports are essential for the app development.]]></string> | ||||
|     <string name="crash_toast_text">A crash occured. Sending the details to the developper.</string> | ||||
|     <string name="pref_switch_disable_acra">"Disable automatic bug reporting. "</string> | ||||
| </resources> | ||||
|   | ||||
| @@ -1,4 +1,8 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <resources> | ||||
|     <string name="pref_switch_enable_analytics">Enable analytics</string> | ||||
|     <string name="gdpr_dialog_title">The app does not share any personal data about you.</string> | ||||
|     <string name="gdpr_dialog_message"><![CDATA[Crash reports sending is now enabled. It can be disabled from the settings page (Settings > Debug). Keep in mind that crash reports are essential for the app development.]]></string> | ||||
|     <string name="crash_toast_text">A crash occured. Sending the details to the developper.</string> | ||||
|     <string name="pref_switch_disable_acra">"Disable automatic bug reporting. "</string> | ||||
| </resources> | ||||
| @@ -134,4 +134,8 @@ | ||||
|     <string name="mode_light">Light mode</string> | ||||
|     <string name="drawer_error_loading_sources">Error loading sources…</string> | ||||
|     <string name="pref_switch_enable_analytics">Enable analytics</string> | ||||
|     <string name="gdpr_dialog_title">The app does not share any personal data about you.</string> | ||||
|     <string name="gdpr_dialog_message"><![CDATA[Crash reports sending is now enabled. It can be disabled from the settings page (Settings > Debug). Keep in mind that crash reports are essential for the app development.]]></string> | ||||
|     <string name="crash_toast_text">A crash occured. Sending the details to the developper.</string> | ||||
|     <string name="pref_switch_disable_acra">"Disable automatic bug reporting. "</string> | ||||
| </resources> | ||||
|   | ||||
| @@ -134,4 +134,8 @@ | ||||
|     <string name="mode_light">Light mode</string> | ||||
|     <string name="drawer_error_loading_sources">Error loading sources…</string> | ||||
|     <string name="pref_switch_enable_analytics">Enable analytics</string> | ||||
|     <string name="gdpr_dialog_title">The app does not share any personal data about you.</string> | ||||
|     <string name="gdpr_dialog_message"><![CDATA[Crash reports sending is now enabled. It can be disabled from the settings page (Settings > Debug). Keep in mind that crash reports are essential for the app development.]]></string> | ||||
|     <string name="crash_toast_text">A crash occured. Sending the details to the developper.</string> | ||||
|     <string name="pref_switch_disable_acra">"Disable automatic bug reporting. "</string> | ||||
| </resources> | ||||
|   | ||||
| @@ -134,4 +134,8 @@ | ||||
|     <string name="mode_light">Light mode</string> | ||||
|     <string name="drawer_error_loading_sources">Error loading sources…</string> | ||||
|     <string name="pref_switch_enable_analytics">Enable analytics</string> | ||||
|     <string name="gdpr_dialog_title">The app does not share any personal data about you.</string> | ||||
|     <string name="gdpr_dialog_message"><![CDATA[Crash reports sending is now enabled. It can be disabled from the settings page (Settings > Debug). Keep in mind that crash reports are essential for the app development.]]></string> | ||||
|     <string name="crash_toast_text">A crash occured. Sending the details to the developper.</string> | ||||
|     <string name="pref_switch_disable_acra">"Disable automatic bug reporting. "</string> | ||||
| </resources> | ||||
|   | ||||
| @@ -134,4 +134,8 @@ | ||||
|     <string name="mode_light">Light mode</string> | ||||
|     <string name="drawer_error_loading_sources">Error loading sources…</string> | ||||
|     <string name="pref_switch_enable_analytics">Enable analytics</string> | ||||
|     <string name="gdpr_dialog_title">The app does not share any personal data about you.</string> | ||||
|     <string name="gdpr_dialog_message"><![CDATA[Crash reports sending is now enabled. It can be disabled from the settings page (Settings > Debug). Keep in mind that crash reports are essential for the app development.]]></string> | ||||
|     <string name="crash_toast_text">A crash occured. Sending the details to the developper.</string> | ||||
|     <string name="pref_switch_disable_acra">"Disable automatic bug reporting. "</string> | ||||
| </resources> | ||||
|   | ||||
| @@ -134,4 +134,8 @@ | ||||
|     <string name="mode_light">Light mode</string> | ||||
|     <string name="drawer_error_loading_sources">Error loading sources…</string> | ||||
|     <string name="pref_switch_enable_analytics">Enable analytics</string> | ||||
|     <string name="gdpr_dialog_title">The app does not share any personal data about you.</string> | ||||
|     <string name="gdpr_dialog_message"><![CDATA[Crash reports sending is now enabled. It can be disabled from the settings page (Settings > Debug). Keep in mind that crash reports are essential for the app development.]]></string> | ||||
|     <string name="crash_toast_text">A crash occured. Sending the details to the developper.</string> | ||||
|     <string name="pref_switch_disable_acra">"Disable automatic bug reporting. "</string> | ||||
| </resources> | ||||
|   | ||||
| @@ -134,4 +134,8 @@ | ||||
|     <string name="mode_light">浅色模式</string> | ||||
|     <string name="drawer_error_loading_sources">Error loading sources…</string> | ||||
|     <string name="pref_switch_enable_analytics">Enable analytics</string> | ||||
|     <string name="gdpr_dialog_title">The app does not share any personal data about you.</string> | ||||
|     <string name="gdpr_dialog_message"><![CDATA[Crash reports sending is now enabled. It can be disabled from the settings page (Settings > Debug). Keep in mind that crash reports are essential for the app development.]]></string> | ||||
|     <string name="crash_toast_text">A crash occured. Sending the details to the developper.</string> | ||||
|     <string name="pref_switch_disable_acra">"Disable automatic bug reporting. "</string> | ||||
| </resources> | ||||
|   | ||||
| @@ -134,4 +134,8 @@ | ||||
|     <string name="mode_light">Light mode</string> | ||||
|     <string name="drawer_error_loading_sources">Error loading sources…</string> | ||||
|     <string name="pref_switch_enable_analytics">Enable analytics</string> | ||||
|     <string name="gdpr_dialog_title">The app does not share any personal data about you.</string> | ||||
|     <string name="gdpr_dialog_message"><![CDATA[Crash reports sending is now enabled. It can be disabled from the settings page (Settings > Debug). Keep in mind that crash reports are essential for the app development.]]></string> | ||||
|     <string name="crash_toast_text">A crash occured. Sending the details to the developper.</string> | ||||
|     <string name="pref_switch_disable_acra">"Disable automatic bug reporting. "</string> | ||||
| </resources> | ||||
|   | ||||
| @@ -137,4 +137,8 @@ | ||||
|     <string name="mode_system">Follow the system setting</string> | ||||
|     <string name="mode_light">Light mode</string> | ||||
|     <string name="pref_switch_enable_analytics">Enable analytics</string> | ||||
|     <string name="gdpr_dialog_title">The app does not share any personal data about you.</string> | ||||
|     <string name="gdpr_dialog_message"><![CDATA[Crash reports sending is now enabled. It can be disabled from the settings page (Settings > Debug). Keep in mind that crash reports are essential for the app development.]]></string> | ||||
|     <string name="crash_toast_text">A crash occured. Sending the details to the developper.</string> | ||||
|     <string name="pref_switch_disable_acra">"Disable automatic bug reporting. "</string> | ||||
| </resources> | ||||
|   | ||||
| @@ -1,12 +1,6 @@ | ||||
| <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     xmlns:app="http://schemas.android.com/apk/res-auto"> | ||||
|  | ||||
|     <SwitchPreference | ||||
|         android:defaultValue="true" | ||||
|         app:iconSpaceReserved="false" | ||||
|         android:key="enable_analytics" | ||||
|         android:title="@string/pref_switch_enable_analytics" /> | ||||
|  | ||||
|     <EditTextPreference | ||||
|         android:inputType="number" | ||||
|         android:key="api_timeout" | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     xmlns:app="http://schemas.android.com/apk/res-auto" | ||||
|     android:title="@string/title_activity_settings"> | ||||
|  | ||||
|     <Preference | ||||
| @@ -17,9 +18,13 @@ | ||||
|         android:title="@string/pref_header_offline" | ||||
|         android:icon="@drawable/ic_signal_wifi_off_black_24dp" /> | ||||
|  | ||||
|     <Preference | ||||
|         android:fragment="bou.amine.apps.readerforselfossv2.android.settings.SettingsActivity$ThemePreferenceFragment" | ||||
|     <ListPreference | ||||
|         android:defaultValue="0" | ||||
|         android:entries="@array/ModeTitles" | ||||
|         android:entryValues="@array/ModeValues" | ||||
|         android:key="currentMode" | ||||
|         android:title="@string/pref_header_theme" | ||||
|         app:useSimpleSummaryProvider="false" | ||||
|         android:icon="@drawable/ic_color_lens_black_24dp" /> | ||||
|  | ||||
|     <Preference | ||||
| @@ -32,4 +37,18 @@ | ||||
|         android:title="@string/pref_header_experimental" | ||||
|         android:icon="@drawable/ic_widgets_black_24dp" /> | ||||
|  | ||||
|  | ||||
|     <SwitchPreference | ||||
|         android:defaultValue="false" | ||||
|         android:key="enable_analytics" | ||||
|         android:title="@string/pref_switch_enable_analytics" | ||||
|         android:icon="@drawable/ic_baseline_insights_24"/> | ||||
|  | ||||
|  | ||||
|     <SwitchPreference | ||||
|         android:defaultValue="false" | ||||
|         android:key="acra.disable" | ||||
|         android:title="@string/pref_switch_disable_acra" | ||||
|         android:icon="@drawable/ic_baseline_bug_report_24"/> | ||||
|  | ||||
| </PreferenceScreen> | ||||
		Reference in New Issue
	
	Block a user