diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-11-08 11:37:32 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-11-08 11:37:32 +0000 |
commit | b1838bbe9f743277618ba633ece865360ae25891 (patch) | |
tree | 61afa900282780deb3a4d2539274a9926b70d4fe | |
parent | a17682f1da0798512cab231b6cbeac0f01cc2993 (diff) | |
parent | 4b0b99526c67a21310051191e13a02d7d5397063 (diff) | |
download | Car-q_tzdata_aml_297100000.tar.gz |
Snap for 9266514 from 4b0b99526c67a21310051191e13a02d7d5397063 to qt-aml-tzdata-releaseq_tzdata_aml_297100400q_tzdata_aml_297100300q_tzdata_aml_297100000q_tzdata_aml_296200000q_tzdata_aml_295600118q_tzdata_aml_295600110q_tzdata_aml_297100000android10-android13-mainline-tzdata-release
Change-Id: Ib4ed42853c27a2ea26001adab5f9cd16e7acf5f8
2 files changed, 39 insertions, 16 deletions
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/AbstractZenModeAutomaticRulePreferenceController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/AbstractZenModeAutomaticRulePreferenceController.java index 0a487817d7..c5575e08a8 100644 --- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/AbstractZenModeAutomaticRulePreferenceController.java +++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/AbstractZenModeAutomaticRulePreferenceController.java @@ -26,8 +26,11 @@ import android.content.pm.ActivityInfo; import android.content.pm.ComponentInfo; import android.content.pm.PackageManager; import android.content.pm.ServiceInfo; +import android.os.Binder; import android.provider.Settings; import android.service.notification.ConditionProviderService; +import android.util.Log; +import android.util.Slog; import androidx.fragment.app.Fragment; import androidx.preference.Preference; @@ -36,6 +39,7 @@ import com.android.car.developeroptions.core.PreferenceControllerMixin; import com.android.settingslib.core.lifecycle.Lifecycle; import java.util.Map; +import java.util.Objects; abstract public class AbstractZenModeAutomaticRulePreferenceController extends AbstractZenModePreferenceController implements PreferenceControllerMixin { @@ -92,7 +96,7 @@ abstract public class AbstractZenModeAutomaticRulePreferenceController extends ? ci.metaData.getString(ConditionProviderService.META_DATA_RULE_TYPE) : ci.metaData.getString(NotificationManager.META_DATA_AUTOMATIC_RULE_TYPE); - final ComponentName configurationActivity = getSettingsActivity(null, ci); + final ComponentName configurationActivity = getSettingsActivity(pm, null, ci); if (ruleType != null && !ruleType.trim().isEmpty() && configurationActivity != null) { final ZenRuleInfo ri = new ZenRuleInfo(); ri.serviceComponent = @@ -110,25 +114,44 @@ abstract public class AbstractZenModeAutomaticRulePreferenceController extends return null; } - protected static ComponentName getSettingsActivity(AutomaticZenRule rule, ComponentInfo ci) { + protected static ComponentName getSettingsActivity(PackageManager pm, AutomaticZenRule rule, + ComponentInfo ci) { + String owner = rule != null ? rule.getPackageName() : ci.packageName; + ComponentName settingsActivity = null; // prefer config activity on the rule itself; fallback to manifest definition if (rule != null && rule.getConfigurationActivity() != null) { - return rule.getConfigurationActivity(); - } - if (ci == null) { - return null; + settingsActivity = rule.getConfigurationActivity(); + } else { + if (ci == null) { + settingsActivity = null; + } else if (ci instanceof ActivityInfo) { + // new activity backed rule + settingsActivity = new ComponentName(ci.packageName, ci.name); + } else if (ci.metaData != null) { + // old service backed rule + final String configurationActivity = ci.metaData.getString( + ConditionProviderService.META_DATA_CONFIGURATION_ACTIVITY); + if (configurationActivity != null) { + settingsActivity = ComponentName.unflattenFromString(configurationActivity); + } + } } - // new activity backed rule - if (ci instanceof ActivityInfo) { - return new ComponentName(ci.packageName, ci.name); + if (settingsActivity == null || owner == null) { + return settingsActivity; } - // old service backed rule - final String configurationActivity = - ci.metaData.getString(ConditionProviderService.META_DATA_CONFIGURATION_ACTIVITY); - if (configurationActivity != null) { - return ComponentName.unflattenFromString(configurationActivity); + try { + int ownerUid = pm.getPackageUid(owner, 0); + int configActivityOwnerUid = pm.getPackageUid(settingsActivity.getPackageName(), 0); + if (ownerUid == configActivityOwnerUid) { + return settingsActivity; + } else { + Log.w(TAG, "Config activity not in owner package for " + rule.getName()); + return null; + } + } catch (PackageManager.NameNotFoundException e) { + Log.e(TAG, "Failed to find config activity"); + return null; } - return null; } public class RuleNameChangeListener implements ZenRuleNameDialog.PositiveClickListener { diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/ZenRulePreference.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/ZenRulePreference.java index d6eaf8aad5..61f3f9ad42 100644 --- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/ZenRulePreference.java +++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/ZenRulePreference.java @@ -168,7 +168,7 @@ public class ZenRulePreference extends TwoTargetPreference { : isEvent ? ZenModeEventRuleSettings.ACTION : ""; ComponentInfo si = mServiceListing.findService(rule.getOwner()); ComponentName settingsActivity = AbstractZenModeAutomaticRulePreferenceController. - getSettingsActivity(rule, si); + getSettingsActivity(mPm, rule, si); mIntent = AbstractZenModeAutomaticRulePreferenceController.getRuleIntent(action, settingsActivity, mId); if (mIntent.resolveActivity(mPm) == null) { |