Make Satellite messageing dynamically change wording by network type

Flag: com.android.settings.flags.satellite_oem_settings_ux_migration
Fix: b/378410271
Test: atest pass

Change-Id: I6d2d2ba656a6e2eb26ae103f8af84a1ce5fd49c8
This commit is contained in:
tomhsu
2024-11-25 15:09:56 +00:00
committed by Tom Hsu
parent 8b4f683af3
commit 22370a8a4a
7 changed files with 364 additions and 44 deletions

View File

@@ -16,16 +16,25 @@
package com.android.settings.network.telephony;
import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_DATA;
import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_SMS;
import android.content.Context;
import android.content.Intent;
import android.os.PersistableBundle;
import android.provider.Settings;
import android.telephony.CarrierConfigManager;
import android.telephony.TelephonyCallback;
import android.telephony.TelephonyManager;
import android.telephony.satellite.NtnSignalStrength;
import android.telephony.satellite.SatelliteManager;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
@@ -33,28 +42,33 @@ import com.android.internal.telephony.flags.Flags;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.network.CarrierConfigCache;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
import java.util.List;
import java.util.Set;
/**
* Preference controller for "Satellite Setting"
*/
public class SatelliteSettingPreferenceController extends
TelephonyBasePreferenceController implements LifecycleObserver, OnStart, OnStop {
TelephonyBasePreferenceController implements DefaultLifecycleObserver {
private static final String TAG = "SatelliteSettingPreferenceController";
CarrierConfigCache mCarrierConfigCache;
SatelliteManager mSatelliteManager;
@Nullable private Boolean mIsSatelliteEligible = null;
private TelephonyManager mTelephonyManager = null;
@VisibleForTesting
final CarrierRoamingNtnModeCallback mCarrierRoamingNtnModeCallback =
new CarrierRoamingNtnModeCallback();
@Nullable
private Boolean mIsSatelliteEligible = null;
private boolean mIsServiceDataType = false;
public SatelliteSettingPreferenceController(@NonNull Context context, @NonNull String key) {
super(context, key);
mCarrierConfigCache = CarrierConfigCache.getInstance(context);
mSatelliteManager = context.getSystemService(SatelliteManager.class);
mTelephonyManager = context.getSystemService(TelephonyManager.class);
}
@Override
@@ -76,11 +90,18 @@ public class SatelliteSettingPreferenceController extends
}
@Override
public void onStart() {
public void onResume(@NonNull LifecycleOwner owner) {
if (com.android.settings.flags.Flags.satelliteOemSettingsUxMigration()) {
mTelephonyManager.registerTelephonyCallback(mContext.getMainExecutor(),
mCarrierRoamingNtnModeCallback);
}
}
@Override
public void onStop() {
public void onPause(@NonNull LifecycleOwner owner) {
if (com.android.settings.flags.Flags.satelliteOemSettingsUxMigration()) {
mTelephonyManager.unregisterTelephonyCallback(mCarrierRoamingNtnModeCallback);
}
}
@Override
@@ -93,6 +114,7 @@ public class SatelliteSettingPreferenceController extends
public void updateState(@Nullable Preference preference) {
super.updateState(preference);
if (preference != null) {
mCarrierRoamingNtnModeCallback.mPref = preference;
updateSummary(preference);
}
}
@@ -106,6 +128,7 @@ public class SatelliteSettingPreferenceController extends
// This will setup the Home and Search affordance
intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_AS_SUBSETTING, true);
intent.putExtra(SatelliteSetting.SUB_ID, mSubId);
intent.putExtra(SatelliteSetting.EXTRA_IS_SERVICE_DATA_TYPE, mIsServiceDataType);
mContext.startActivity(intent);
return true;
}
@@ -115,11 +138,13 @@ public class SatelliteSettingPreferenceController extends
/**
* Set subId for Satellite Settings page.
*
* @param subId subscription ID.
*/
public void init(int subId) {
logd("init(), subId=" + subId);
mSubId = subId;
mTelephonyManager = mTelephonyManager.createForSubscriptionId(subId);
}
private void updateSummary(Preference preference) {
@@ -148,4 +173,45 @@ public class SatelliteSettingPreferenceController extends
private static void loge(String message) {
Log.e(TAG, message);
}
@VisibleForTesting
class CarrierRoamingNtnModeCallback extends TelephonyCallback implements
TelephonyCallback.CarrierRoamingNtnModeListener {
Preference mPref = null;
@Override
public void onCarrierRoamingNtnAvailableServicesChanged(List<Integer> availableServices) {
CarrierRoamingNtnModeListener.super.onCarrierRoamingNtnAvailableServicesChanged(
availableServices);
boolean isSmsAvailable = availableServices.contains(SERVICE_TYPE_SMS);
boolean isDataAvailable = availableServices.contains(SERVICE_TYPE_DATA);
logd("isSmsAvailable : " + isSmsAvailable
+ " / isDataAvailable " + isDataAvailable);
if (mPref == null) {
logd("Satellite preference is not initialized yet");
return;
}
if (isDataAvailable) {
mIsServiceDataType = true;
mPref.setTitle(R.string.title_satellite_setting_connectivity);
} else if (isSmsAvailable) {
mPref.setTitle(R.string.satellite_setting_title);
}
}
@Override
public void onCarrierRoamingNtnEligibleStateChanged(boolean eligible) {
// Do nothing
}
@Override
public void onCarrierRoamingNtnModeChanged(boolean active) {
// Do nothing
}
@Override
public void onCarrierRoamingNtnSignalStrengthChanged(NtnSignalStrength ntnSignalStrength) {
// Do nothing
}
}
}