Merge pull request #11496 from t895/analytics-dialog-kotlin

Android: Convert analytics dialog to Kotlin
This commit is contained in:
JosJuice 2023-01-28 20:03:49 +01:00 committed by GitHub
commit 3e21ba55f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 96 additions and 95 deletions

View File

@ -0,0 +1,29 @@
// SPDX-License-Identifier: GPL-2.0-or-later
package org.dolphinemu.dolphinemu.dialogs
import android.app.Dialog
import android.os.Bundle
import androidx.fragment.app.DialogFragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.dolphinemu.dolphinemu.R
import org.dolphinemu.dolphinemu.utils.Analytics
class AnalyticsDialog : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val dialog = MaterialAlertDialogBuilder(requireContext())
.setTitle(requireContext().getString(R.string.analytics))
.setMessage(requireContext().getString(R.string.analytics_desc))
.setPositiveButton(R.string.yes) { _, _ ->
Analytics.firstAnalyticsAdd(true)
}
.setNegativeButton(R.string.no) { _, _ ->
Analytics.firstAnalyticsAdd(false)
}
return dialog.create()
}
companion object {
const val TAG = "AnalyticsDialog"
}
}

View File

@ -1,95 +0,0 @@
// SPDX-License-Identifier: GPL-2.0-or-later
package org.dolphinemu.dolphinemu.utils;
import android.content.Context;
import android.os.Build;
import androidx.annotation.Keep;
import com.android.volley.Request;
import com.android.volley.toolbox.StringRequest;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.dolphinemu.dolphinemu.DolphinApplication;
import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting;
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
public class Analytics
{
private static final String DEVICE_MANUFACTURER = "DEVICE_MANUFACTURER";
private static final String DEVICE_OS = "DEVICE_OS";
private static final String DEVICE_MODEL = "DEVICE_MODEL";
private static final String DEVICE_TYPE = "DEVICE_TYPE";
public static void checkAnalyticsInit(Context context)
{
new AfterDirectoryInitializationRunner().runWithoutLifecycle(() ->
{
if (!BooleanSetting.MAIN_ANALYTICS_PERMISSION_ASKED.getBooleanGlobal())
{
showMessage(context);
}
});
}
private static void showMessage(Context context)
{
new MaterialAlertDialogBuilder(context)
.setTitle(context.getString(R.string.analytics))
.setMessage(context.getString(R.string.analytics_desc))
.setPositiveButton(R.string.yes, (dialogInterface, i) -> firstAnalyticsAdd(true))
.setNegativeButton(R.string.no, (dialogInterface, i) -> firstAnalyticsAdd(false))
.show();
}
private static void firstAnalyticsAdd(boolean enabled)
{
try (Settings settings = new Settings())
{
settings.loadSettings();
BooleanSetting.MAIN_ANALYTICS_ENABLED.setBoolean(settings, enabled);
BooleanSetting.MAIN_ANALYTICS_PERMISSION_ASKED.setBoolean(settings, true);
// Context is set to null to avoid toasts
settings.saveSettings(null, null);
}
}
@Keep
public static void sendReport(String endpoint, byte[] data)
{
StringRequest request = new StringRequest(Request.Method.POST, endpoint,
null, error -> Log.debug("Failed to send report"))
{
@Override
public byte[] getBody()
{
return data;
}
};
VolleyUtil.getQueue().add(request);
}
@Keep
public static String getValue(String key)
{
switch (key)
{
case DEVICE_MODEL:
return Build.MODEL;
case DEVICE_MANUFACTURER:
return Build.MANUFACTURER;
case DEVICE_OS:
return String.valueOf(Build.VERSION.SDK_INT);
case DEVICE_TYPE:
return TvUtil.isLeanback(DolphinApplication.getAppContext()) ? "android-tv" :
"android-mobile";
default:
return "";
}
}
}

View File

@ -0,0 +1,67 @@
// SPDX-License-Identifier: GPL-2.0-or-later
package org.dolphinemu.dolphinemu.utils
import android.os.Build
import androidx.annotation.Keep
import androidx.fragment.app.FragmentActivity
import com.android.volley.Response
import com.android.volley.toolbox.StringRequest
import org.dolphinemu.dolphinemu.DolphinApplication
import org.dolphinemu.dolphinemu.dialogs.AnalyticsDialog
import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting
import org.dolphinemu.dolphinemu.features.settings.model.Settings
object Analytics {
private const val DEVICE_MANUFACTURER = "DEVICE_MANUFACTURER"
private const val DEVICE_OS = "DEVICE_OS"
private const val DEVICE_MODEL = "DEVICE_MODEL"
private const val DEVICE_TYPE = "DEVICE_TYPE"
@JvmStatic
fun checkAnalyticsInit(activity: FragmentActivity) {
AfterDirectoryInitializationRunner().runWithoutLifecycle {
if (!BooleanSetting.MAIN_ANALYTICS_PERMISSION_ASKED.booleanGlobal) {
AnalyticsDialog().show(activity.supportFragmentManager, AnalyticsDialog.TAG)
}
}
}
fun firstAnalyticsAdd(enabled: Boolean) {
Settings().use { settings ->
settings.loadSettings()
BooleanSetting.MAIN_ANALYTICS_ENABLED.setBoolean(settings, enabled)
BooleanSetting.MAIN_ANALYTICS_PERMISSION_ASKED.setBoolean(settings, true)
// Context is set to null to avoid toasts
settings.saveSettings(null, null)
}
}
@Keep
@JvmStatic
fun sendReport(endpoint: String, data: ByteArray) {
val request: StringRequest = object : StringRequest(
Method.POST,
endpoint,
null,
Response.ErrorListener { Log.debug("Failed to send report") }) {
override fun getBody(): ByteArray {
return data
}
}
VolleyUtil.getQueue().add(request)
}
@Keep
@JvmStatic
fun getValue(key: String?): String {
return when (key) {
DEVICE_MODEL -> Build.MODEL
DEVICE_MANUFACTURER -> Build.MANUFACTURER
DEVICE_OS -> Build.VERSION.SDK_INT.toString()
DEVICE_TYPE -> if (TvUtil.isLeanback(DolphinApplication.getAppContext())) "android-tv" else "android-mobile"
else -> ""
}
}
}