From af06e51d3f5ca5b46487e29183c0116241c83da9 Mon Sep 17 00:00:00 2001 From: Hans Date: Tue, 12 Jul 2022 16:42:54 +0800 Subject: [PATCH] Support for open settings on Android TV --- .../rjblopes/opensettings/OpenSettings.java | 75 ++++++++++++++----- 1 file changed, 55 insertions(+), 20 deletions(-) diff --git a/android/src/main/java/com/rjblopes/opensettings/OpenSettings.java b/android/src/main/java/com/rjblopes/opensettings/OpenSettings.java index ba768c3..af40df3 100644 --- a/android/src/main/java/com/rjblopes/opensettings/OpenSettings.java +++ b/android/src/main/java/com/rjblopes/opensettings/OpenSettings.java @@ -3,6 +3,7 @@ import android.content.Intent; import android.net.Uri; import android.provider.Settings; +import android.content.ComponentName; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContext; @@ -24,10 +25,7 @@ public String getName() { return "RNOpenSettings"; } - //region React Native Methods - @ReactMethod - public void generalSettings() { - Intent intent = new Intent(Settings.ACTION_SETTINGS); + private void startActivity(final Intent intent) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); if (intent.resolveActivity(reactContext.getPackageManager()) != null) { @@ -35,34 +33,71 @@ public void generalSettings() { } } + //region React Native Methods + @ReactMethod + public void generalSettings() { + try { + ComponentName name = new ComponentName( + "com.android.tv.settings", + "com.android.tv.settings.MainSettings" + ); + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.addCategory(Intent.CATEGORY_LAUNCHER); + intent.setComponent(name); + this.startActivity(intent); + } catch (Exception e) { + this.startActivity(new Intent(Settings.ACTION_SETTINGS)); + } + } + @ReactMethod public void appSettings() { - Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); - intent.setData(Uri.parse("package:" + reactContext.getPackageName())); - if (intent.resolveActivity(reactContext.getPackageManager()) != null) { - reactContext.startActivity(intent); + try { + ComponentName name = new ComponentName( + "com.android.tv.settings", + "com.android.tv.settings.device.apps.AppManagementActivity" + ); + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.addCategory(Intent.CATEGORY_LAUNCHER); + intent.setComponent(name); + intent.setData(Uri.parse("package:" + reactContext.getPackageName())); + this.startActivity(intent); + } catch (Exception e) { + Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + intent.setData(Uri.parse("package:" + reactContext.getPackageName())); + this.startActivity(intent); } } @ReactMethod public void wifiSettings() { - Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); - if (intent.resolveActivity(reactContext.getPackageManager()) != null) { - reactContext.startActivity(intent); + try { + ComponentName name = new ComponentName( + "com.android.tv.settings", + "com.android.tv.settings.connectivity.NetworkActivity" + ); + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.addCategory(Intent.CATEGORY_LAUNCHER); + intent.setComponent(name); + this.startActivity(intent); + } catch (Exception e) { + this.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); } } @ReactMethod public void locationSettings() { - Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); - if (intent.resolveActivity(reactContext.getPackageManager()) != null) { - reactContext.startActivity(intent); + try { + ComponentName name = new ComponentName( + "com.android.tv.settings", + "com.android.tv.settings.system.LocationActivity" + ); + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.addCategory(Intent.CATEGORY_LAUNCHER); + intent.setComponent(name); + this.startActivity(intent); + } catch (Exception e) { + this.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); } } //endregion