Merge "Improve the performance of displaying preference - multithread."
This commit is contained in:
@@ -132,7 +132,6 @@ abstract class AbstractMobileNetworkSettings extends RestrictedDashboardFragment
|
|||||||
final TelephonyStatusControlSession session =
|
final TelephonyStatusControlSession session =
|
||||||
setTelephonyAvailabilityStatus(controllers);
|
setTelephonyAvailabilityStatus(controllers);
|
||||||
|
|
||||||
|
|
||||||
final PreferenceScreen screen = getPreferenceScreen();
|
final PreferenceScreen screen = getPreferenceScreen();
|
||||||
controllers.forEach(controller -> {
|
controllers.forEach(controller -> {
|
||||||
controller.displayPreference(screen);
|
controller.displayPreference(screen);
|
||||||
|
@@ -22,6 +22,7 @@ import com.android.settings.core.BasePreferenceController;
|
|||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
import com.android.settingslib.utils.ThreadUtils;
|
import com.android.settingslib.utils.ThreadUtils;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
@@ -37,7 +38,7 @@ public class TelephonyStatusControlSession implements AutoCloseable {
|
|||||||
private static final String LOG_TAG = "TelephonyStatusControlSS";
|
private static final String LOG_TAG = "TelephonyStatusControlSS";
|
||||||
|
|
||||||
private Collection<AbstractPreferenceController> mControllers;
|
private Collection<AbstractPreferenceController> mControllers;
|
||||||
private Future<Boolean> mResult;
|
private Collection<Future<Boolean>> mResult = new ArrayList<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Buider of session
|
* Buider of session
|
||||||
@@ -67,9 +68,9 @@ public class TelephonyStatusControlSession implements AutoCloseable {
|
|||||||
|
|
||||||
private TelephonyStatusControlSession(Collection<AbstractPreferenceController> controllers) {
|
private TelephonyStatusControlSession(Collection<AbstractPreferenceController> controllers) {
|
||||||
mControllers = controllers;
|
mControllers = controllers;
|
||||||
mResult = ThreadUtils.postOnBackgroundThread(() ->
|
controllers.forEach(prefCtrl -> mResult
|
||||||
setupAvailabilityStatus(controllers)
|
.add(ThreadUtils.postOnBackgroundThread(() -> setupAvailabilityStatus(prefCtrl))));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -79,25 +80,24 @@ public class TelephonyStatusControlSession implements AutoCloseable {
|
|||||||
*/
|
*/
|
||||||
public void close() {
|
public void close() {
|
||||||
//check the background thread is finished then unset the status of availability.
|
//check the background thread is finished then unset the status of availability.
|
||||||
try {
|
|
||||||
mResult.get();
|
for (Future<Boolean> result : mResult) {
|
||||||
} catch (ExecutionException | InterruptedException exception) {
|
try {
|
||||||
Log.e(LOG_TAG, "setup availability status failed!", exception);
|
result.get();
|
||||||
|
} catch (ExecutionException | InterruptedException exception) {
|
||||||
|
Log.e(LOG_TAG, "setup availability status failed!", exception);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
unsetAvailabilityStatus(mControllers);
|
unsetAvailabilityStatus(mControllers);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Boolean setupAvailabilityStatus(
|
private Boolean setupAvailabilityStatus(AbstractPreferenceController controller) {
|
||||||
Collection<AbstractPreferenceController> controllerLists) {
|
|
||||||
try {
|
try {
|
||||||
controllerLists.stream()
|
if (controller instanceof TelephonyAvailabilityHandler) {
|
||||||
.filter(controller -> controller instanceof TelephonyAvailabilityHandler)
|
int status = ((BasePreferenceController) controller)
|
||||||
.map(TelephonyAvailabilityHandler.class::cast)
|
.getAvailabilityStatus();
|
||||||
.forEach(controller -> {
|
((TelephonyAvailabilityHandler) controller).setAvailabilityStatus(status);
|
||||||
int status = ((BasePreferenceController) controller)
|
}
|
||||||
.getAvailabilityStatus();
|
|
||||||
controller.setAvailabilityStatus(status);
|
|
||||||
});
|
|
||||||
return true;
|
return true;
|
||||||
} catch (Exception exception) {
|
} catch (Exception exception) {
|
||||||
Log.e(LOG_TAG, "Setup availability status failed!", exception);
|
Log.e(LOG_TAG, "Setup availability status failed!", exception);
|
||||||
|
Reference in New Issue
Block a user