Merge "[Settings] Avoid re-create fragment when subscription not changed" into rvc-dev am: 8bbebc03a6 am: f4db2d1056 am: 78b3e60c9b

Change-Id: Iff53a79ccacc568313a4379234e1d55614732625
This commit is contained in:
Bonian Chen
2020-03-25 19:24:00 +00:00
committed by Automerger Merge Worker

View File

@@ -24,6 +24,7 @@ import android.provider.Settings;
import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionInfo;
import android.telephony.ims.ImsRcsManager; import android.telephony.ims.ImsRcsManager;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log;
import android.view.View; import android.view.View;
import android.widget.Toolbar; import android.widget.Toolbar;
@@ -56,6 +57,9 @@ public class MobileNetworkActivity extends SettingsBaseActivity
@VisibleForTesting @VisibleForTesting
ProxySubscriptionManager mProxySubscriptionMgr; ProxySubscriptionManager mProxySubscriptionMgr;
private int mCurSubscriptionId; private int mCurSubscriptionId;
// To avoid from Preference Controller to have a complex design for the case of Activity
// restart. mIsEffectiveSubId is designed to force recreate of Preference Controller(s).
private boolean mIsEffectiveSubId;
@Override @Override
protected void onNewIntent(Intent intent) { protected void onNewIntent(Intent intent) {
@@ -69,6 +73,7 @@ public class MobileNetworkActivity extends SettingsBaseActivity
} }
int oldSubId = mCurSubscriptionId; int oldSubId = mCurSubscriptionId;
mCurSubscriptionId = updateSubscriptionIndex; mCurSubscriptionId = updateSubscriptionIndex;
mIsEffectiveSubId = (mCurSubscriptionId != SUB_ID_NULL);
updateSubscriptions(getSubscription()); updateSubscriptions(getSubscription());
// If the subscription has changed or the new intent doesnt contain the opt in action, // If the subscription has changed or the new intent doesnt contain the opt in action,
@@ -112,6 +117,7 @@ public class MobileNetworkActivity extends SettingsBaseActivity
: ((startIntent != null) : ((startIntent != null)
? startIntent.getIntExtra(Settings.EXTRA_SUB_ID, SUB_ID_NULL) ? startIntent.getIntExtra(Settings.EXTRA_SUB_ID, SUB_ID_NULL)
: SUB_ID_NULL); : SUB_ID_NULL);
mIsEffectiveSubId = (mCurSubscriptionId != SUB_ID_NULL);
final SubscriptionInfo subscription = getSubscription(); final SubscriptionInfo subscription = getSubscription();
updateTitleAndNavigation(subscription); updateTitleAndNavigation(subscription);
@@ -201,6 +207,7 @@ public class MobileNetworkActivity extends SettingsBaseActivity
switchFragment(subscription); switchFragment(subscription);
mCurSubscriptionId = subscriptionIndex; mCurSubscriptionId = subscriptionIndex;
mIsEffectiveSubId = true;
} }
/** /**
@@ -210,7 +217,7 @@ public class MobileNetworkActivity extends SettingsBaseActivity
*/ */
@VisibleForTesting @VisibleForTesting
SubscriptionInfo getSubscription() { SubscriptionInfo getSubscription() {
if (mCurSubscriptionId != SUB_ID_NULL) { if (mIsEffectiveSubId && (mCurSubscriptionId != SUB_ID_NULL)) {
return getSubscriptionForSubId(mCurSubscriptionId); return getSubscriptionForSubId(mCurSubscriptionId);
} }
final List<SubscriptionInfo> subInfos = getProxySubscriptionManager() final List<SubscriptionInfo> subInfos = getProxySubscriptionManager()
@@ -236,9 +243,18 @@ public class MobileNetworkActivity extends SettingsBaseActivity
final Bundle bundle = new Bundle(); final Bundle bundle = new Bundle();
bundle.putInt(Settings.EXTRA_SUB_ID, subId); bundle.putInt(Settings.EXTRA_SUB_ID, subId);
final String fragmentTag = buildFragmentTag(subId);
if (fragmentManager.findFragmentByTag(fragmentTag) != null) {
if (mIsEffectiveSubId) {
Log.d(TAG, "Keep current fragment: " + fragmentTag);
return;
}
Log.d(TAG, "Construct fragment: " + fragmentTag);
}
final Fragment fragment = new MobileNetworkSettings(); final Fragment fragment = new MobileNetworkSettings();
fragment.setArguments(bundle); fragment.setArguments(bundle);
fragmentTransaction.replace(R.id.content_frame, fragment, buildFragmentTag(subId)); fragmentTransaction.replace(R.id.content_frame, fragment, fragmentTag);
fragmentTransaction.commit(); fragmentTransaction.commit();
} }