Fix unbundled accessibility features settings crash when launched
Root cause: The ag/19938064 introduces Settings Core change preference value changed metrics log format. It tries to lookupMetricsCategory() at Fragment#instantiate() stage. It has not onAttach() to activity by FragmentManager#add() or #replace(). The features were added by ag/15824482. Solution: PutInt new MATRICS_CATEGORY extra in previous class to avoid giving context for FeatureFactory.getFactory to custom 1P accessibility services for SettingsGoogle overlay. Bug: 259355675 Test: manual test Change-Id: Ic37d41be6a54fe388f211c1c397d0b9b87b5fb56
This commit is contained in:
@@ -41,6 +41,7 @@ import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.InstrumentedFragment;
|
||||
import com.android.settings.core.SubSettingLauncher;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settingslib.accessibility.AccessibilityUtils;
|
||||
|
||||
import java.util.List;
|
||||
@@ -230,6 +231,10 @@ public class AccessibilityDetailsSettingsFragment extends InstrumentedFragment {
|
||||
new ComponentName(packageName, tileServiceClassName).flattenToString());
|
||||
}
|
||||
|
||||
final int metricsCategory = FeatureFactory.getFactory(getActivity().getApplicationContext())
|
||||
.getAccessibilityMetricsFeatureProvider()
|
||||
.getDownloadedFeatureMetricsCategory(componentName);
|
||||
extras.putInt(AccessibilitySettings.EXTRA_METRICS_CATEGORY, metricsCategory);
|
||||
extras.putParcelable(AccessibilitySettings.EXTRA_COMPONENT_NAME, componentName);
|
||||
extras.putInt(AccessibilitySettings.EXTRA_ANIMATED_IMAGE_RES, info.getAnimatedImageRes());
|
||||
|
||||
|
@@ -87,6 +87,7 @@ public class AccessibilitySettings extends DashboardFragment {
|
||||
static final String EXTRA_ANIMATED_IMAGE_RES = "animated_image_res";
|
||||
static final String EXTRA_HTML_DESCRIPTION = "html_description";
|
||||
static final String EXTRA_TIME_FOR_LOGGING = "start_time_to_log_a11y_tool";
|
||||
static final String EXTRA_METRICS_CATEGORY = "metrics_category";
|
||||
|
||||
// Timeout before we update the services if packages are added/removed
|
||||
// since the AccessibilityManagerService has to do that processing first
|
||||
|
@@ -42,7 +42,6 @@ import androidx.preference.Preference;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -58,15 +57,7 @@ public class LaunchAccessibilityActivityPreferenceFragment extends ToggleFeature
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
// Retrieve from getArguments() directly because this function will be executed from
|
||||
// onAttach(), but variable mComponentName only available after onProcessArguments()
|
||||
// which comes from onCreateView().
|
||||
final ComponentName componentName = getArguments().getParcelable(
|
||||
AccessibilitySettings.EXTRA_COMPONENT_NAME);
|
||||
|
||||
return FeatureFactory.getFactory(getActivity().getApplicationContext())
|
||||
.getAccessibilityMetricsFeatureProvider()
|
||||
.getDownloadedFeatureMetricsCategory(componentName);
|
||||
return getArguments().getInt(AccessibilitySettings.EXTRA_METRICS_CATEGORY);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -37,6 +37,7 @@ import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settingslib.RestrictedLockUtils;
|
||||
import com.android.settingslib.RestrictedLockUtilsInternal;
|
||||
import com.android.settingslib.RestrictedPreference;
|
||||
@@ -118,9 +119,12 @@ public class RestrictedPreferenceHelper {
|
||||
final String htmlDescription = info.loadHtmlDescription(mPm);
|
||||
final String settingsClassName = info.getSettingsActivityName();
|
||||
final String tileServiceClassName = info.getTileServiceName();
|
||||
final int metricsCategory = FeatureFactory.getFactory(mContext)
|
||||
.getAccessibilityMetricsFeatureProvider()
|
||||
.getDownloadedFeatureMetricsCategory(componentName);
|
||||
|
||||
putBasicExtras(preference, prefKey, title, intro, description, imageRes,
|
||||
htmlDescription, componentName);
|
||||
htmlDescription, componentName, metricsCategory);
|
||||
putServiceExtras(preference, resolveInfo, serviceEnabled);
|
||||
putSettingsExtras(preference, packageName, settingsClassName);
|
||||
putTileServiceExtras(preference, packageName, tileServiceClassName);
|
||||
@@ -178,9 +182,12 @@ public class RestrictedPreferenceHelper {
|
||||
final String htmlDescription = info.loadHtmlDescription(mPm);
|
||||
final String settingsClassName = info.getSettingsActivityName();
|
||||
final String tileServiceClassName = info.getTileServiceName();
|
||||
final int metricsCategory = FeatureFactory.getFactory(mContext)
|
||||
.getAccessibilityMetricsFeatureProvider()
|
||||
.getDownloadedFeatureMetricsCategory(componentName);
|
||||
|
||||
putBasicExtras(preference, prefKey, title, intro, description, imageRes,
|
||||
htmlDescription, componentName);
|
||||
htmlDescription, componentName, metricsCategory);
|
||||
putSettingsExtras(preference, componentName.getPackageName(), settingsClassName);
|
||||
putTileServiceExtras(preference, componentName.getPackageName(),
|
||||
tileServiceClassName);
|
||||
@@ -265,7 +272,7 @@ public class RestrictedPreferenceHelper {
|
||||
/** Puts the basic extras into {@link RestrictedPreference}'s getExtras(). */
|
||||
private void putBasicExtras(RestrictedPreference preference, String prefKey,
|
||||
CharSequence title, CharSequence intro, CharSequence summary, int imageRes,
|
||||
String htmlDescription, ComponentName componentName) {
|
||||
String htmlDescription, ComponentName componentName, int metricsCategory) {
|
||||
final Bundle extras = preference.getExtras();
|
||||
extras.putString(AccessibilitySettings.EXTRA_PREFERENCE_KEY, prefKey);
|
||||
extras.putCharSequence(AccessibilitySettings.EXTRA_TITLE, title);
|
||||
@@ -274,6 +281,7 @@ public class RestrictedPreferenceHelper {
|
||||
extras.putParcelable(AccessibilitySettings.EXTRA_COMPONENT_NAME, componentName);
|
||||
extras.putInt(AccessibilitySettings.EXTRA_ANIMATED_IMAGE_RES, imageRes);
|
||||
extras.putString(AccessibilitySettings.EXTRA_HTML_DESCRIPTION, htmlDescription);
|
||||
extras.putInt(AccessibilitySettings.EXTRA_METRICS_CATEGORY, metricsCategory);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -49,7 +49,6 @@ import androidx.annotation.Nullable;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
|
||||
import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settingslib.accessibility.AccessibilityUtils;
|
||||
|
||||
import java.util.List;
|
||||
@@ -71,15 +70,7 @@ public class ToggleAccessibilityServicePreferenceFragment extends
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
// Retrieve from getArguments() directly because this function will be executed from
|
||||
// onAttach(), but variable mComponentName only available after onProcessArguments()
|
||||
// which comes from onCreateView().
|
||||
final ComponentName componentName = getArguments().getParcelable(
|
||||
AccessibilitySettings.EXTRA_COMPONENT_NAME);
|
||||
|
||||
return FeatureFactory.getFactory(getActivity().getApplicationContext())
|
||||
.getAccessibilityMetricsFeatureProvider()
|
||||
.getDownloadedFeatureMetricsCategory(componentName);
|
||||
return getArguments().getInt(AccessibilitySettings.EXTRA_METRICS_CATEGORY);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Reference in New Issue
Block a user