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.Color;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
|
||||||
@@ -31,11 +32,17 @@ import com.android.settings.R;
|
|||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
import com.android.settings.overlay.FeatureFactory;
|
import com.android.settings.overlay.FeatureFactory;
|
||||||
import com.android.settingslib.RestrictedPreference;
|
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
|
* Preference item for showing an accessibility activity in a preference list
|
||||||
*/
|
*/
|
||||||
public class AccessibilityActivityPreference extends RestrictedPreference {
|
public class AccessibilityActivityPreference extends RestrictedPreference {
|
||||||
|
private static final String LOG_TAG = AccessibilityActivityPreference.class.getSimpleName();
|
||||||
// Index of the first preference in a preference category.
|
// Index of the first preference in a preference category.
|
||||||
private static final int FIRST_PREFERENCE_IN_CATEGORY_INDEX = -1;
|
private static final int FIRST_PREFERENCE_IN_CATEGORY_INDEX = -1;
|
||||||
private static final String TARGET_FRAGMENT =
|
private static final String TARGET_FRAGMENT =
|
||||||
@@ -43,6 +50,7 @@ public class AccessibilityActivityPreference extends RestrictedPreference {
|
|||||||
private final AccessibilityShortcutInfo mA11yShortcutInfo;
|
private final AccessibilityShortcutInfo mA11yShortcutInfo;
|
||||||
private final PackageManager mPm;
|
private final PackageManager mPm;
|
||||||
private final ComponentName mComponentName;
|
private final ComponentName mComponentName;
|
||||||
|
private final ListenableFuture mExtraArgumentsFuture;
|
||||||
|
|
||||||
public AccessibilityActivityPreference(Context context, String packageName, int uid,
|
public AccessibilityActivityPreference(Context context, String packageName, int uid,
|
||||||
AccessibilityShortcutInfo a11yShortcutInfo) {
|
AccessibilityShortcutInfo a11yShortcutInfo) {
|
||||||
@@ -60,13 +68,28 @@ public class AccessibilityActivityPreference extends RestrictedPreference {
|
|||||||
setPersistent(false); // Disable SharedPreferences.
|
setPersistent(false); // Disable SharedPreferences.
|
||||||
setOrder(FIRST_PREFERENCE_IN_CATEGORY_INDEX);
|
setOrder(FIRST_PREFERENCE_IN_CATEGORY_INDEX);
|
||||||
|
|
||||||
final Drawable icon = getA11yActivityIcon();
|
// kick off image loading tasks
|
||||||
setIcon(icon);
|
ThreadUtils.postOnBackgroundThread(() -> {
|
||||||
|
final Drawable icon = getA11yActivityIcon();
|
||||||
|
ThreadUtils.getUiThreadHandler().post(() -> this.setIcon(icon));
|
||||||
|
});
|
||||||
|
|
||||||
final Bundle extras = getExtras();
|
final Bundle extras = getExtras();
|
||||||
extras.putParcelable(AccessibilitySettings.EXTRA_COMPONENT_NAME, mComponentName);
|
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() {
|
private Drawable getA11yActivityIcon() {
|
||||||
@@ -93,11 +116,13 @@ public class AccessibilityActivityPreference extends RestrictedPreference {
|
|||||||
.getAccessibilityMetricsFeatureProvider()
|
.getAccessibilityMetricsFeatureProvider()
|
||||||
.getDownloadedFeatureMetricsCategory(mComponentName);
|
.getDownloadedFeatureMetricsCategory(mComponentName);
|
||||||
|
|
||||||
RestrictedPreferenceHelper.putBasicExtras(
|
ThreadUtils.getUiThreadHandler().post(() -> {
|
||||||
this, prefKey, getTitle(), intro, description, imageRes,
|
RestrictedPreferenceHelper.putBasicExtras(
|
||||||
htmlDescription, mComponentName, metricsCategory);
|
this, prefKey, getTitle(), intro, description, imageRes,
|
||||||
RestrictedPreferenceHelper.putSettingsExtras(this, getPackageName(), settingsClassName);
|
htmlDescription, mComponentName, metricsCategory);
|
||||||
RestrictedPreferenceHelper.putTileServiceExtras(
|
RestrictedPreferenceHelper.putSettingsExtras(this, getPackageName(), settingsClassName);
|
||||||
this, getPackageName(), tileServiceClassName);
|
RestrictedPreferenceHelper.putTileServiceExtras(
|
||||||
|
this, getPackageName(), tileServiceClassName);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,6 +24,7 @@ import android.content.pm.ResolveInfo;
|
|||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
|
||||||
@@ -31,17 +32,24 @@ import com.android.settings.R;
|
|||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
import com.android.settings.overlay.FeatureFactory;
|
import com.android.settings.overlay.FeatureFactory;
|
||||||
import com.android.settingslib.RestrictedPreference;
|
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
|
* Preference item for showing an accessibility service in a preference list
|
||||||
*/
|
*/
|
||||||
public class AccessibilityServicePreference extends RestrictedPreference {
|
public class AccessibilityServicePreference extends RestrictedPreference {
|
||||||
|
private static final String LOG_TAG = AccessibilityServicePreference.class.getSimpleName();
|
||||||
// Index of the first preference in a preference category.
|
// Index of the first preference in a preference category.
|
||||||
private static final int FIRST_PREFERENCE_IN_CATEGORY_INDEX = -1;
|
private static final int FIRST_PREFERENCE_IN_CATEGORY_INDEX = -1;
|
||||||
private final PackageManager mPm;
|
private final PackageManager mPm;
|
||||||
private final AccessibilityServiceInfo mA11yServiceInfo;
|
private final AccessibilityServiceInfo mA11yServiceInfo;
|
||||||
private final ComponentName mComponentName;
|
private final ComponentName mComponentName;
|
||||||
private final boolean mServiceEnabled;
|
private final boolean mServiceEnabled;
|
||||||
|
private final ListenableFuture mExtraArgumentsFuture;
|
||||||
|
|
||||||
public AccessibilityServicePreference(Context context, String packageName, int uid,
|
public AccessibilityServicePreference(Context context, String packageName, int uid,
|
||||||
AccessibilityServiceInfo a11yServiceInfo, boolean serviceEnabled) {
|
AccessibilityServiceInfo a11yServiceInfo, boolean serviceEnabled) {
|
||||||
@@ -63,13 +71,28 @@ public class AccessibilityServicePreference extends RestrictedPreference {
|
|||||||
setPersistent(false); // Disable SharedPreferences.
|
setPersistent(false); // Disable SharedPreferences.
|
||||||
setOrder(FIRST_PREFERENCE_IN_CATEGORY_INDEX);
|
setOrder(FIRST_PREFERENCE_IN_CATEGORY_INDEX);
|
||||||
|
|
||||||
final Drawable icon = getA11yServiceIcon();
|
// kick off image loading tasks
|
||||||
setIcon(icon);
|
ThreadUtils.postOnBackgroundThread(() -> {
|
||||||
|
final Drawable icon = getA11yServiceIcon();
|
||||||
|
ThreadUtils.getUiThreadHandler().post(() -> this.setIcon(icon));
|
||||||
|
});
|
||||||
|
|
||||||
final Bundle extras = getExtras();
|
final Bundle extras = getExtras();
|
||||||
extras.putParcelable(AccessibilitySettings.EXTRA_COMPONENT_NAME, mComponentName);
|
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() {
|
private Drawable getA11yServiceIcon() {
|
||||||
@@ -97,13 +120,14 @@ public class AccessibilityServicePreference extends RestrictedPreference {
|
|||||||
final int metricsCategory = FeatureFactory.getFeatureFactory()
|
final int metricsCategory = FeatureFactory.getFeatureFactory()
|
||||||
.getAccessibilityMetricsFeatureProvider()
|
.getAccessibilityMetricsFeatureProvider()
|
||||||
.getDownloadedFeatureMetricsCategory(mComponentName);
|
.getDownloadedFeatureMetricsCategory(mComponentName);
|
||||||
|
ThreadUtils.getUiThreadHandler().post(() -> {
|
||||||
RestrictedPreferenceHelper.putBasicExtras(
|
RestrictedPreferenceHelper.putBasicExtras(
|
||||||
this, prefKey, getTitle(), intro, description, imageRes,
|
this, prefKey, getTitle(), intro, description, imageRes,
|
||||||
htmlDescription, mComponentName, metricsCategory);
|
htmlDescription, mComponentName, metricsCategory);
|
||||||
RestrictedPreferenceHelper.putServiceExtras(this, resolveInfo, mServiceEnabled);
|
RestrictedPreferenceHelper.putServiceExtras(this, resolveInfo, mServiceEnabled);
|
||||||
RestrictedPreferenceHelper.putSettingsExtras(this, getPackageName(), settingsClassName);
|
RestrictedPreferenceHelper.putSettingsExtras(this, getPackageName(), settingsClassName);
|
||||||
RestrictedPreferenceHelper.putTileServiceExtras(
|
RestrictedPreferenceHelper.putTileServiceExtras(
|
||||||
this, getPackageName(), tileServiceClassName);
|
this, getPackageName(), tileServiceClassName);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user