Load icon in the background, also load extra data that would be used
later in the background. Bug: 327052480 Test: atest com.android.settings.accessibility Flag: EXEMPT bugfix Change-Id: I9940772e60e2137aad2b3b70902565e36fb7aad6
This commit is contained in:
@@ -24,6 +24,7 @@ import android.content.pm.PackageManager;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
@@ -31,11 +32,17 @@ import com.android.settings.R;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settingslib.RestrictedPreference;
|
||||
import com.android.settingslib.utils.ThreadUtils;
|
||||
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
/**
|
||||
* Preference item for showing an accessibility activity in a preference list
|
||||
*/
|
||||
public class AccessibilityActivityPreference extends RestrictedPreference {
|
||||
private static final String LOG_TAG = AccessibilityActivityPreference.class.getSimpleName();
|
||||
// Index of the first preference in a preference category.
|
||||
private static final int FIRST_PREFERENCE_IN_CATEGORY_INDEX = -1;
|
||||
private static final String TARGET_FRAGMENT =
|
||||
@@ -43,6 +50,7 @@ public class AccessibilityActivityPreference extends RestrictedPreference {
|
||||
private final AccessibilityShortcutInfo mA11yShortcutInfo;
|
||||
private final PackageManager mPm;
|
||||
private final ComponentName mComponentName;
|
||||
private final ListenableFuture mExtraArgumentsFuture;
|
||||
|
||||
public AccessibilityActivityPreference(Context context, String packageName, int uid,
|
||||
AccessibilityShortcutInfo a11yShortcutInfo) {
|
||||
@@ -60,13 +68,28 @@ public class AccessibilityActivityPreference extends RestrictedPreference {
|
||||
setPersistent(false); // Disable SharedPreferences.
|
||||
setOrder(FIRST_PREFERENCE_IN_CATEGORY_INDEX);
|
||||
|
||||
final Drawable icon = getA11yActivityIcon();
|
||||
setIcon(icon);
|
||||
// kick off image loading tasks
|
||||
ThreadUtils.postOnBackgroundThread(() -> {
|
||||
final Drawable icon = getA11yActivityIcon();
|
||||
ThreadUtils.getUiThreadHandler().post(() -> this.setIcon(icon));
|
||||
});
|
||||
|
||||
final Bundle extras = getExtras();
|
||||
extras.putParcelable(AccessibilitySettings.EXTRA_COMPONENT_NAME, mComponentName);
|
||||
|
||||
setupDataForOpenFragment();
|
||||
mExtraArgumentsFuture = ThreadUtils.postOnBackgroundThread(this::setupDataForOpenFragment);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void performClick() {
|
||||
try {
|
||||
mExtraArgumentsFuture.get();
|
||||
} catch (InterruptedException | ExecutionException e) {
|
||||
Log.e(LOG_TAG,
|
||||
"Unable to finish grabbing necessary arguments to open the fragment: "
|
||||
+ "componentName: " + mComponentName);
|
||||
}
|
||||
super.performClick();
|
||||
}
|
||||
|
||||
private Drawable getA11yActivityIcon() {
|
||||
@@ -93,11 +116,13 @@ public class AccessibilityActivityPreference extends RestrictedPreference {
|
||||
.getAccessibilityMetricsFeatureProvider()
|
||||
.getDownloadedFeatureMetricsCategory(mComponentName);
|
||||
|
||||
RestrictedPreferenceHelper.putBasicExtras(
|
||||
this, prefKey, getTitle(), intro, description, imageRes,
|
||||
htmlDescription, mComponentName, metricsCategory);
|
||||
RestrictedPreferenceHelper.putSettingsExtras(this, getPackageName(), settingsClassName);
|
||||
RestrictedPreferenceHelper.putTileServiceExtras(
|
||||
this, getPackageName(), tileServiceClassName);
|
||||
ThreadUtils.getUiThreadHandler().post(() -> {
|
||||
RestrictedPreferenceHelper.putBasicExtras(
|
||||
this, prefKey, getTitle(), intro, description, imageRes,
|
||||
htmlDescription, mComponentName, metricsCategory);
|
||||
RestrictedPreferenceHelper.putSettingsExtras(this, getPackageName(), settingsClassName);
|
||||
RestrictedPreferenceHelper.putTileServiceExtras(
|
||||
this, getPackageName(), tileServiceClassName);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@@ -24,6 +24,7 @@ import android.content.pm.ResolveInfo;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
@@ -31,17 +32,24 @@ import com.android.settings.R;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settingslib.RestrictedPreference;
|
||||
import com.android.settingslib.utils.ThreadUtils;
|
||||
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
/**
|
||||
* Preference item for showing an accessibility service in a preference list
|
||||
*/
|
||||
public class AccessibilityServicePreference extends RestrictedPreference {
|
||||
private static final String LOG_TAG = AccessibilityServicePreference.class.getSimpleName();
|
||||
// Index of the first preference in a preference category.
|
||||
private static final int FIRST_PREFERENCE_IN_CATEGORY_INDEX = -1;
|
||||
private final PackageManager mPm;
|
||||
private final AccessibilityServiceInfo mA11yServiceInfo;
|
||||
private final ComponentName mComponentName;
|
||||
private final boolean mServiceEnabled;
|
||||
private final ListenableFuture mExtraArgumentsFuture;
|
||||
|
||||
public AccessibilityServicePreference(Context context, String packageName, int uid,
|
||||
AccessibilityServiceInfo a11yServiceInfo, boolean serviceEnabled) {
|
||||
@@ -63,13 +71,28 @@ public class AccessibilityServicePreference extends RestrictedPreference {
|
||||
setPersistent(false); // Disable SharedPreferences.
|
||||
setOrder(FIRST_PREFERENCE_IN_CATEGORY_INDEX);
|
||||
|
||||
final Drawable icon = getA11yServiceIcon();
|
||||
setIcon(icon);
|
||||
// kick off image loading tasks
|
||||
ThreadUtils.postOnBackgroundThread(() -> {
|
||||
final Drawable icon = getA11yServiceIcon();
|
||||
ThreadUtils.getUiThreadHandler().post(() -> this.setIcon(icon));
|
||||
});
|
||||
|
||||
final Bundle extras = getExtras();
|
||||
extras.putParcelable(AccessibilitySettings.EXTRA_COMPONENT_NAME, mComponentName);
|
||||
|
||||
setupDataForOpenFragment();
|
||||
mExtraArgumentsFuture = ThreadUtils.postOnBackgroundThread(this::setupDataForOpenFragment);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void performClick() {
|
||||
try {
|
||||
mExtraArgumentsFuture.get();
|
||||
} catch (InterruptedException | ExecutionException e) {
|
||||
Log.e(LOG_TAG,
|
||||
"Unable to finish grabbing necessary arguments to open the fragment: "
|
||||
+ "componentName: " + mComponentName);
|
||||
}
|
||||
super.performClick();
|
||||
}
|
||||
|
||||
private Drawable getA11yServiceIcon() {
|
||||
@@ -97,13 +120,14 @@ public class AccessibilityServicePreference extends RestrictedPreference {
|
||||
final int metricsCategory = FeatureFactory.getFeatureFactory()
|
||||
.getAccessibilityMetricsFeatureProvider()
|
||||
.getDownloadedFeatureMetricsCategory(mComponentName);
|
||||
|
||||
RestrictedPreferenceHelper.putBasicExtras(
|
||||
this, prefKey, getTitle(), intro, description, imageRes,
|
||||
htmlDescription, mComponentName, metricsCategory);
|
||||
RestrictedPreferenceHelper.putServiceExtras(this, resolveInfo, mServiceEnabled);
|
||||
RestrictedPreferenceHelper.putSettingsExtras(this, getPackageName(), settingsClassName);
|
||||
RestrictedPreferenceHelper.putTileServiceExtras(
|
||||
this, getPackageName(), tileServiceClassName);
|
||||
ThreadUtils.getUiThreadHandler().post(() -> {
|
||||
RestrictedPreferenceHelper.putBasicExtras(
|
||||
this, prefKey, getTitle(), intro, description, imageRes,
|
||||
htmlDescription, mComponentName, metricsCategory);
|
||||
RestrictedPreferenceHelper.putServiceExtras(this, resolveInfo, mServiceEnabled);
|
||||
RestrictedPreferenceHelper.putSettingsExtras(this, getPackageName(), settingsClassName);
|
||||
RestrictedPreferenceHelper.putTileServiceExtras(
|
||||
this, getPackageName(), tileServiceClassName);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user