Move system update preference from device_info to system.

In order to move the preference and its logic cleanly, created a
controller object that encapsulates the preference/click handler.

Bug: 31801428
Test: RunSettingsRoboTests
Change-Id: I332384e20fbf0e21d2f3becb531d97b20f7f7ef1
This commit is contained in:
Fan Zhang
2016-10-03 11:05:08 -07:00
parent 8fdb96e32e
commit 9c1fcf9916
5 changed files with 283 additions and 64 deletions

View File

@@ -21,7 +21,6 @@ import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.os.SELinux;
import android.os.SystemClock;
import android.os.SystemProperties;
@@ -31,13 +30,15 @@ import android.provider.SearchIndexableResource;
import android.provider.Settings;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceGroup;
import android.telephony.CarrierConfigManager;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;
import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.settings.dashboard.DashboardFeatureProvider;
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.deviceinfo.SystemUpdatePreferenceController;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Index;
import com.android.settings.search.Indexable;
@@ -56,7 +57,6 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In
private static final String KEY_MANUAL = "manual";
private static final String KEY_REGULATORY_INFO = "regulatory_info";
private static final String KEY_SYSTEM_UPDATE_SETTINGS = "system_update_settings";
private static final String PROPERTY_URL_SAFETYLEGAL = "ro.url.safetylegal";
private static final String PROPERTY_SELINUX_STATUS = "ro.build.selinux";
private static final String KEY_KERNEL_VERSION = "kernel_version";
@@ -66,7 +66,6 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In
private static final String KEY_BASEBAND_VERSION = "baseband_version";
private static final String KEY_FIRMWARE_VERSION = "firmware_version";
private static final String KEY_SECURITY_PATCH = "security_patch";
private static final String KEY_UPDATE_SETTING = "additional_system_update_settings";
private static final String KEY_EQUIPMENT_ID = "fcc_equipment_id";
private static final String PROPERTY_EQUIPMENT_ID = "ro.ril.fccid";
private static final String KEY_DEVICE_FEEDBACK = "device_feedback";
@@ -77,6 +76,8 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In
long[] mHits = new long[3];
int mDevHitCountdown;
Toast mDevHitToast;
private SystemUpdatePreferenceController mSystemUpdatePreferenceController;
private DashboardFeatureProvider mDashboardFeatureProvider;
private UserManager mUm;
@@ -98,7 +99,11 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
mUm = UserManager.get(getActivity());
final Activity activity = getActivity();
mUm = UserManager.get(activity);
mSystemUpdatePreferenceController = new SystemUpdatePreferenceController(activity, mUm);
mDashboardFeatureProvider = FeatureFactory.getFactory(activity)
.getDashboardFeatureProvider(activity);
addPreferencesFromResource(R.xml.device_info_settings);
@@ -153,23 +158,7 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In
* Settings is a generic app and should not contain any device-specific
* info.
*/
final Activity act = getActivity();
// These are contained by the root preference screen
PreferenceGroup parentPreference = getPreferenceScreen();
if (mUm.isAdminUser()) {
Utils.updatePreferenceToSpecificActivityOrRemove(act, parentPreference,
KEY_SYSTEM_UPDATE_SETTINGS,
Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY);
} else {
// Remove for secondary users
removePreference(KEY_SYSTEM_UPDATE_SETTINGS);
}
// Read platform settings for additional system update setting
removePreferenceIfBoolFalse(KEY_UPDATE_SETTING,
R.bool.config_additional_system_update_setting_enable);
mSystemUpdatePreferenceController.displayPreference(getPreferenceScreen());
// Remove manual entry if none present.
removePreferenceIfBoolFalse(KEY_MANUAL, R.bool.config_show_manual);
@@ -278,38 +267,11 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In
}
} else if (preference.getKey().equals(KEY_DEVICE_FEEDBACK)) {
sendFeedback();
} else if(preference.getKey().equals(KEY_SYSTEM_UPDATE_SETTINGS)) {
CarrierConfigManager configManager =
(CarrierConfigManager) getSystemService(Context.CARRIER_CONFIG_SERVICE);
PersistableBundle b = configManager.getConfig();
if (b != null && b.getBoolean(CarrierConfigManager.KEY_CI_ACTION_ON_SYS_UPDATE_BOOL)) {
ciActionOnSysUpdate(b);
}
}
mSystemUpdatePreferenceController.handlePreferenceTreeClick(preference);
return super.onPreferenceTreeClick(preference);
}
/**
* Trigger client initiated action (send intent) on system update
*/
private void ciActionOnSysUpdate(PersistableBundle b) {
String intentStr = b.getString(CarrierConfigManager.
KEY_CI_ACTION_ON_SYS_UPDATE_INTENT_STRING);
if (!TextUtils.isEmpty(intentStr)) {
String extra = b.getString(CarrierConfigManager.
KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_STRING);
String extraVal = b.getString(CarrierConfigManager.
KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_VAL_STRING);
Intent intent = new Intent(intentStr);
if (!TextUtils.isEmpty(extra)) {
intent.putExtra(extra, extraVal);
}
Log.d(LOG_TAG, "ciActionOnSysUpdate: broadcasting intent " + intentStr +
" with extra " + extra + ", " + extraVal);
getActivity().getApplicationContext().sendBroadcast(intent);
}
}
private void removePreferenceIfPropertyMissing(PreferenceGroup preferenceGroup,
String preference, String property ) {
@@ -434,15 +396,8 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In
if (TextUtils.isEmpty(DeviceInfoUtils.getFeedbackReporterPackage(context))) {
keys.add(KEY_DEVICE_FEEDBACK);
}
final UserManager um = UserManager.get(context);
// TODO: system update needs to be fixed for non-owner user b/22760654
if (!um.isAdminUser()) {
keys.add(KEY_SYSTEM_UPDATE_SETTINGS);
}
if (!context.getResources().getBoolean(
R.bool.config_additional_system_update_setting_enable)) {
keys.add(KEY_UPDATE_SETTING);
}
new SystemUpdatePreferenceController(context, UserManager.get(context))
.updateNonIndexableKeys(keys);
return keys;
}