Improve the performance of displaying preference.

- Set a variable to record the status then replace getAvailabilityStatus() with it.

Test: manual test, use command to run MobileNetworkSettings and record it.
Bug: 154061428
Change-Id: Ia13a75a3821bb6c17d0dfeffb5043f47b60adf61
This commit is contained in:
zoey chen
2020-04-17 20:44:37 +08:00
committed by Zoey Chen
parent 87883c7634
commit 84587b1aa3
4 changed files with 129 additions and 5 deletions

View File

@@ -23,12 +23,17 @@ import android.telephony.SubscriptionManager;
import com.android.settings.core.BasePreferenceController;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
/**
* {@link BasePreferenceController} that used by all preferences that requires subscription id.
*/
public abstract class TelephonyBasePreferenceController extends BasePreferenceController
implements TelephonyAvailabilityCallback {
implements TelephonyAvailabilityCallback, TelephonyAvailabilityHandler {
protected int mSubId;
private AtomicInteger mAvailabilityStatus = new AtomicInteger(0);
private AtomicBoolean mUnsetAvailabilityStatus = new AtomicBoolean(false);
public TelephonyBasePreferenceController(Context context, String preferenceKey) {
super(context, preferenceKey);
@@ -37,7 +42,21 @@ public abstract class TelephonyBasePreferenceController extends BasePreferenceCo
@Override
public int getAvailabilityStatus() {
return MobileNetworkUtils.getAvailability(mContext, mSubId, this::getAvailabilityStatus);
if (!mUnsetAvailabilityStatus.get()) {
mAvailabilityStatus.set(MobileNetworkUtils
.getAvailability(mContext, mSubId, this::getAvailabilityStatus));
}
return mAvailabilityStatus.get();
}
@Override
public void setAvailabilityStatus(int status) {
mAvailabilityStatus.set(status);
}
@Override
public void unsetAvailabilityStatus(boolean enable) {
mUnsetAvailabilityStatus.set(enable);
}
/**