Merge "Handle night display state when timezone changes" into oc-mr1-dev

This commit is contained in:
Christine Franks
2017-09-20 00:23:29 +00:00
committed by Android (Google) Code Review
5 changed files with 47 additions and 21 deletions

View File

@@ -166,8 +166,7 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider
@VisibleForTesting @VisibleForTesting
boolean hasUsedNightDisplay(Context context) { boolean hasUsedNightDisplay(Context context) {
final ContentResolver cr = context.getContentResolver(); final ContentResolver cr = context.getContentResolver();
final long lastActivatedTimeMillis = Secure.getLong(cr, return Secure.getInt(cr, Secure.NIGHT_DISPLAY_AUTO_MODE, 0) != 0
Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME, -1); || Secure.getString(cr, Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME) != null;
return lastActivatedTimeMillis > 0;
} }
} }

View File

@@ -22,6 +22,7 @@ import com.android.internal.app.NightDisplayController;
import com.android.settings.R; import com.android.settings.R;
import java.text.DateFormat; import java.text.DateFormat;
import java.time.LocalTime;
import java.util.Calendar; import java.util.Calendar;
import java.util.TimeZone; import java.util.TimeZone;
@@ -58,11 +59,11 @@ public class NightDisplayPreference extends SwitchPreference
mController.setListener(null); mController.setListener(null);
} }
private String getFormattedTimeString(NightDisplayController.LocalTime localTime) { private String getFormattedTimeString(LocalTime localTime) {
final Calendar c = Calendar.getInstance(); final Calendar c = Calendar.getInstance();
c.setTimeZone(mTimeFormatter.getTimeZone()); c.setTimeZone(mTimeFormatter.getTimeZone());
c.set(Calendar.HOUR_OF_DAY, localTime.hourOfDay); c.set(Calendar.HOUR_OF_DAY, localTime.getHour());
c.set(Calendar.MINUTE, localTime.minute); c.set(Calendar.MINUTE, localTime.getMinute());
c.set(Calendar.SECOND, 0); c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0); c.set(Calendar.MILLISECOND, 0);
return mTimeFormatter.format(c.getTime()); return mTimeFormatter.format(c.getTime());
@@ -116,12 +117,12 @@ public class NightDisplayPreference extends SwitchPreference
} }
@Override @Override
public void onCustomStartTimeChanged(NightDisplayController.LocalTime startTime) { public void onCustomStartTimeChanged(LocalTime startTime) {
updateSummary(); updateSummary();
} }
@Override @Override
public void onCustomEndTimeChanged(NightDisplayController.LocalTime endTime) { public void onCustomEndTimeChanged(LocalTime endTime) {
updateSummary(); updateSummary();
} }
} }

View File

@@ -32,6 +32,7 @@ import com.android.settings.widget.SeekBarPreference;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
import java.text.DateFormat; import java.text.DateFormat;
import java.time.LocalTime;
import java.util.Calendar; import java.util.Calendar;
import java.util.TimeZone; import java.util.TimeZone;
@@ -144,7 +145,7 @@ public class NightDisplaySettings extends SettingsPreferenceFragment
@Override @Override
public Dialog onCreateDialog(final int dialogId) { public Dialog onCreateDialog(final int dialogId) {
if (dialogId == DIALOG_START_TIME || dialogId == DIALOG_END_TIME) { if (dialogId == DIALOG_START_TIME || dialogId == DIALOG_END_TIME) {
final NightDisplayController.LocalTime initialTime; final LocalTime initialTime;
if (dialogId == DIALOG_START_TIME) { if (dialogId == DIALOG_START_TIME) {
initialTime = mController.getCustomStartTime(); initialTime = mController.getCustomStartTime();
} else { } else {
@@ -156,15 +157,14 @@ public class NightDisplaySettings extends SettingsPreferenceFragment
return new TimePickerDialog(context, new TimePickerDialog.OnTimeSetListener() { return new TimePickerDialog(context, new TimePickerDialog.OnTimeSetListener() {
@Override @Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) { public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
final NightDisplayController.LocalTime time = final LocalTime time = LocalTime.of(hourOfDay, minute);
new NightDisplayController.LocalTime(hourOfDay, minute);
if (dialogId == DIALOG_START_TIME) { if (dialogId == DIALOG_START_TIME) {
mController.setCustomStartTime(time); mController.setCustomStartTime(time);
} else { } else {
mController.setCustomEndTime(time); mController.setCustomEndTime(time);
} }
} }
}, initialTime.hourOfDay, initialTime.minute, use24HourFormat); }, initialTime.getHour(), initialTime.getMinute(), use24HourFormat);
} }
return super.onCreateDialog(dialogId); return super.onCreateDialog(dialogId);
} }
@@ -201,11 +201,11 @@ public class NightDisplaySettings extends SettingsPreferenceFragment
mTemperaturePreference.setProgress(convertTemperature(colorTemperature)); mTemperaturePreference.setProgress(convertTemperature(colorTemperature));
} }
private String getFormattedTimeString(NightDisplayController.LocalTime localTime) { private String getFormattedTimeString(LocalTime localTime) {
final Calendar c = Calendar.getInstance(); final Calendar c = Calendar.getInstance();
c.setTimeZone(mTimeFormatter.getTimeZone()); c.setTimeZone(mTimeFormatter.getTimeZone());
c.set(Calendar.HOUR_OF_DAY, localTime.hourOfDay); c.set(Calendar.HOUR_OF_DAY, localTime.getHour());
c.set(Calendar.MINUTE, localTime.minute); c.set(Calendar.MINUTE, localTime.getMinute());
c.set(Calendar.SECOND, 0); c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0); c.set(Calendar.MILLISECOND, 0);
return mTimeFormatter.format(c.getTime()); return mTimeFormatter.format(c.getTime());
@@ -221,12 +221,12 @@ public class NightDisplaySettings extends SettingsPreferenceFragment
} }
@Override @Override
public void onCustomStartTimeChanged(NightDisplayController.LocalTime startTime) { public void onCustomStartTimeChanged(LocalTime startTime) {
mStartTimePreference.setSummary(getFormattedTimeString(startTime)); mStartTimePreference.setSummary(getFormattedTimeString(startTime));
} }
@Override @Override
public void onCustomEndTimeChanged(NightDisplayController.LocalTime endTime) { public void onCustomEndTimeChanged(LocalTime endTime) {
mEndTimePreference.setSummary(getFormattedTimeString(endTime)); mEndTimePreference.setSummary(getFormattedTimeString(endTime));
} }

View File

@@ -58,6 +58,7 @@ import com.android.settings.testutils.shadow.ShadowSecureSettings;
import com.android.settingslib.drawer.Tile; import com.android.settingslib.drawer.Tile;
import com.android.settingslib.suggestions.SuggestionParser; import com.android.settingslib.suggestions.SuggestionParser;
import java.time.LocalDateTime;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@@ -402,14 +403,35 @@ public class SuggestionFeatureProviderImplTest {
} }
@Test @Test
public void hasUsedNightDisplay_returnsTrue_ifPreviouslyActivated() { public void hasUsedNightDisplay_returnsTrue_ifPreviouslyActivatedAndManual() {
Secure.putLong(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME, 1L); Secure.putString(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME,
LocalDateTime.now().toString());
Secure.putInt(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_AUTO_MODE, 1);
assertThat(mProvider.hasUsedNightDisplay(mContext)).isTrue(); assertThat(mProvider.hasUsedNightDisplay(mContext)).isTrue();
} }
@Test @Test
public void nightDisplaySuggestion_isCompleted_ifPreviouslyActivated() { public void nightDisplaySuggestion_isCompleted_ifPreviouslyActivated() {
Secure.putLong(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME, 1L); Secure.putString(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME,
LocalDateTime.now().toString());
final ComponentName componentName =
new ComponentName(mContext, NightDisplaySuggestionActivity.class);
assertThat(mProvider.isSuggestionCompleted(mContext, componentName)).isTrue();
}
@Test
public void nightDisplaySuggestion_isCompleted_ifNonManualMode() {
Secure.putInt(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_AUTO_MODE, 1);
final ComponentName componentName =
new ComponentName(mContext, NightDisplaySuggestionActivity.class);
assertThat(mProvider.isSuggestionCompleted(mContext, componentName)).isTrue();
}
@Test
public void nightDisplaySuggestion_isCompleted_ifPreviouslyCleared() {
Secure.putString(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME,
null);
Secure.putInt(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_AUTO_MODE, 1);
final ComponentName componentName = final ComponentName componentName =
new ComponentName(mContext, NightDisplaySuggestionActivity.class); new ComponentName(mContext, NightDisplaySuggestionActivity.class);
assertThat(mProvider.isSuggestionCompleted(mContext, componentName)).isTrue(); assertThat(mProvider.isSuggestionCompleted(mContext, componentName)).isTrue();

View File

@@ -36,7 +36,11 @@ public class ShadowSecureSettings {
int userHandle) { int userHandle) {
final Table<Integer, String, Object> userTable = getUserTable(resolver); final Table<Integer, String, Object> userTable = getUserTable(resolver);
synchronized (userTable) { synchronized (userTable) {
userTable.put(userHandle, name, value); if (value != null) {
userTable.put(userHandle, name, value);
} else {
userTable.remove(userHandle, name);
}
return true; return true;
} }
} }