Set placeholder summary for SettingsInjector

Currently, injected service could return null or empty string for summary, but it could cause settings item shift around on phone.
Use a not empty placeholder string could solve this issue.

Bug: 183471902
Test: On Pixel Phone
Change-Id: I14538f4038c5ddbf45b6d42ad0c00bab487e835a
This commit is contained in:
Chaohui Wang
2022-03-23 22:52:32 +08:00
parent c88a1ff323
commit ed22b6e105
2 changed files with 15 additions and 7 deletions

View File

@@ -410,12 +410,14 @@
<string name="launch_defaults_none">No defaults set</string>
<!-- DO NOT TRANSLATE Empty summary for dynamic preferences -->
<string name="summary_empty" translatable="false"></string>
<!-- DO NOT TRANSLATE Summary placeholder -->
<string name="summary_placeholder" translatable="false">&#160;</string>
<!-- Text-To-Speech (TTS) settings --><skip />
<!-- Name of the TTS package as listed by the package manager. -->
<string name="tts_settings">Text-to-speech settings</string>
<!-- TTS option item name in the main settings screen -->
<string name="tts_settings_title">Text-to-speech output</string>
<!-- On main TTS Settings screen, in default settings section, setting default speech rate for synthesized voice -->
<!-- On main TTS Settings screen, in default settings section, setting default speech rate for synthesized voice -->
<string name="tts_default_rate_title">Speech rate</string>
<!-- On main TTS Settings screen, summary for default speech rate for synthesized voice -->
<string name="tts_default_rate_summary">Speed at which the text is spoken</string>

View File

@@ -35,6 +35,7 @@ import android.os.Messenger;
import android.os.SystemClock;
import android.os.UserHandle;
import android.os.UserManager;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.AttributeSet;
@@ -449,17 +450,22 @@ public class SettingsInjector {
if (setting == null) {
return;
}
final Preference preference = setting.preference;
Bundle bundle = msg.getData();
boolean enabled = bundle.getBoolean(SettingInjectorService.ENABLED_KEY, true);
String summary = bundle.getString(SettingInjectorService.SUMMARY_KEY, null);
if (Log.isLoggable(TAG, Log.DEBUG)) {
Log.d(TAG, setting + ": received " + msg + ", bundle: " + bundle);
}
preference.setSummary(summary);
boolean enabled = bundle.getBoolean(SettingInjectorService.ENABLED_KEY, true);
String summary = bundle.getString(SettingInjectorService.SUMMARY_KEY);
final Preference preference = setting.preference;
if (TextUtils.isEmpty(summary)) {
// Set a placeholder summary when received empty summary from injected service.
// This is necessary to avoid preference height change.
preference.setSummary(R.string.summary_placeholder);
} else {
preference.setSummary(summary);
}
preference.setEnabled(enabled);
mHandler.sendMessage(
mHandler.obtainMessage(WHAT_RECEIVED_STATUS, setting));
mHandler.sendMessage(mHandler.obtainMessage(WHAT_RECEIVED_STATUS, setting));
}
}