summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsLib/ActivityEmbedding/src/com/android/settingslib/activityembedding/ActivityEmbeddingUtils.java54
-rw-r--r--packages/SettingsLib/Utils/src/com/android/settingslib/utils/BuildCompatUtils.java44
2 files changed, 77 insertions, 21 deletions
diff --git a/packages/SettingsLib/ActivityEmbedding/src/com/android/settingslib/activityembedding/ActivityEmbeddingUtils.java b/packages/SettingsLib/ActivityEmbedding/src/com/android/settingslib/activityembedding/ActivityEmbeddingUtils.java
index 706aba3d156f..2db0a8f4f911 100644
--- a/packages/SettingsLib/ActivityEmbedding/src/com/android/settingslib/activityembedding/ActivityEmbeddingUtils.java
+++ b/packages/SettingsLib/ActivityEmbedding/src/com/android/settingslib/activityembedding/ActivityEmbeddingUtils.java
@@ -17,10 +17,12 @@
package com.android.settingslib.activityembedding;
import android.app.Activity;
+import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.provider.Settings;
import android.text.TextUtils;
+import android.util.Log;
import androidx.core.os.BuildCompat;
import androidx.window.embedding.SplitController;
@@ -30,24 +32,52 @@ import com.android.settingslib.utils.BuildCompatUtils;
/**
* An util class collecting all common methods for the embedding activity features.
*/
-public class ActivityEmbeddingUtils {
+public final class ActivityEmbeddingUtils {
private static final String ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY =
"android.settings.SETTINGS_EMBED_DEEP_LINK_ACTIVITY";
private static final String PACKAGE_NAME_SETTINGS = "com.android.settings";
+ private static final String TAG = "ActivityEmbeddingUtils";
/**
- * Whether to support embedding activity feature.
+ * Whether the embedding activity feature is enabled.
+ *
+ * <p>This returns false if the Android version is below S or if the embedding activity is not
+ * enabled (unsupported devices).
*/
public static boolean isEmbeddingActivityEnabled(Context context) {
- if (BuildCompatUtils.isAtLeastS()) {
- final Intent intent = new Intent(ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY);
- intent.setPackage(PACKAGE_NAME_SETTINGS);
- final boolean isEmbeddingActivityEnabled =
- intent.resolveActivity(context.getPackageManager()) != null;
+ final boolean isEmbeddingActivityEnabled = getEmbeddingActivityComponent(context) != null;
+ Log.d(TAG, "isEmbeddingActivityEnabled : " + isEmbeddingActivityEnabled);
+ return isEmbeddingActivityEnabled;
+ }
- return isEmbeddingActivityEnabled;
+ /**
+ * Returns a base Intent to the embedding activity (without the extras).
+ *
+ * <p>This returns null if the Android version is below S or if the embedding activity is not
+ * enabled (unsupported devices).
+ */
+ public static Intent buildEmbeddingActivityBaseIntent(Context context) {
+ ComponentName embeddingActivityComponentName = getEmbeddingActivityComponent(context);
+ if (embeddingActivityComponentName == null) {
+ return null;
}
- return false;
+ return new Intent(ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY)
+ .setComponent(embeddingActivityComponentName);
+ }
+
+ /**
+ * Returns the ComponentName associated with the embedding activity.
+ *
+ * <p>This returns null if the Android version is below S or if the embedding activity is not
+ * enabled (unsupported devices).
+ */
+ private static ComponentName getEmbeddingActivityComponent(Context context) {
+ if (!BuildCompatUtils.isAtLeastSV2()) {
+ return null;
+ }
+ final Intent intent = new Intent(ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY);
+ intent.setPackage(PACKAGE_NAME_SETTINGS);
+ return intent.resolveActivity(context.getPackageManager());
}
/**
@@ -62,17 +92,19 @@ public class ActivityEmbeddingUtils {
/**
* Whether the current activity should hide the navigate up button.
*
- * @param activity Activity that needs the check
+ * @param activity Activity that needs the check
* @param isSecondLayerPage indicates if the activity(page) is shown in the 2nd layer of
- * Settings app
+ * Settings app
*/
public static boolean shouldHideNavigateUpButton(Activity activity, boolean isSecondLayerPage) {
if (!BuildCompat.isAtLeastT()) {
return false;
}
+
if (!isSecondLayerPage) {
return false;
}
+
final String shouldHideNavigateUpButton =
Settings.Global.getString(activity.getContentResolver(),
"settings_hide_second_layer_page_navigate_up_button_in_two_pane");
diff --git a/packages/SettingsLib/Utils/src/com/android/settingslib/utils/BuildCompatUtils.java b/packages/SettingsLib/Utils/src/com/android/settingslib/utils/BuildCompatUtils.java
index 9dcb5bc8c7fa..88e242340dee 100644
--- a/packages/SettingsLib/Utils/src/com/android/settingslib/utils/BuildCompatUtils.java
+++ b/packages/SettingsLib/Utils/src/com/android/settingslib/utils/BuildCompatUtils.java
@@ -16,8 +16,11 @@
package com.android.settingslib.utils;
+import android.os.Build;
import android.os.Build.VERSION;
+import androidx.annotation.ChecksSdkIntAtLeast;
+
/**
* An util class to check whether the current OS version is higher or equal to sdk version of
* device.
@@ -25,6 +28,26 @@ import android.os.Build.VERSION;
public final class BuildCompatUtils {
/**
+ * Implementation of BuildCompat.isAtLeastS() suitable for use in Settings
+ *
+ * @return Whether the current OS version is higher or equal to S.
+ */
+ @ChecksSdkIntAtLeast(api = Build.VERSION_CODES.S)
+ public static boolean isAtLeastS() {
+ return Build.VERSION.SDK_INT >= Build.VERSION_CODES.S;
+ }
+
+ /**
+ * Implementation of BuildCompat.isAtLeastS() suitable for use in Settings
+ *
+ * @return Whether the current OS version is higher or equal to Sv2.
+ */
+ @ChecksSdkIntAtLeast(api = Build.VERSION_CODES.S_V2)
+ public static boolean isAtLeastSV2() {
+ return Build.VERSION.SDK_INT >= Build.VERSION_CODES.S_V2;
+ }
+
+ /**
* Implementation of BuildCompat.isAtLeast*() suitable for use in Settings
*
* <p>This still should try using BuildCompat.isAtLeastR() as source of truth, but also checking
@@ -35,26 +58,27 @@ public final class BuildCompatUtils {
* <p>Supported configurations:
*
* <ul>
- * <li>For current Android release: when new API is not finalized yet (CODENAME = "S", SDK_INT
- * = 30|31)
- * <li>For current Android release: when new API is finalized (CODENAME = "REL", SDK_INT = 31)
- * <li>For next Android release (CODENAME = "T", SDK_INT = 30+)
+ * <li>For current Android release: when new API is not finalized yet (CODENAME = "Tiramisu",
+ * SDK_INT = 32)
+ * <li>For current Android release: when new API is finalized (CODENAME = "REL", SDK_INT = 33)
+ * <li>For next Android release (CODENAME = "U", SDK_INT = 34+)
* </ul>
*
* <p>Note that Build.VERSION_CODES.S cannot be used here until final SDK is available, because
* it is equal to Build.VERSION_CODES.CUR_DEVELOPMENT before API finalization.
*
- * @return Whether the current OS version is higher or equal to S.
+ * @return Whether the current OS version is higher or equal to T.
*/
- public static boolean isAtLeastS() {
- if (VERSION.SDK_INT < 30) {
+ public static boolean isAtLeastT() {
+ if (!isAtLeastS()) {
return false;
}
- return (VERSION.CODENAME.equals("REL") && VERSION.SDK_INT >= 31)
+ return (VERSION.CODENAME.equals("REL") && VERSION.SDK_INT >= 33)
|| (VERSION.CODENAME.length() >= 1
- && VERSION.CODENAME.toUpperCase().charAt(0) >= 'S'
- && VERSION.CODENAME.toUpperCase().charAt(0) <= 'Z');
+ && VERSION.CODENAME.toUpperCase().charAt(0) >= 'T'
+ && VERSION.CODENAME.toUpperCase().charAt(0) <= 'Z')
+ || (Build.VERSION.CODENAME.equals("Tiramisu") && Build.VERSION.SDK_INT >= 32);
}
private BuildCompatUtils() {}