Merge "Switch settings to use Time[|Zone]Detector"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 56f8e78..30f1dd8 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -55,10 +55,9 @@
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
     <uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES"/>
     <uses-permission android:name="android.permission.SET_PREFERRED_APPLICATIONS"/>
-    <uses-permission android:name="android.permission.SET_TIME"/>
-    <uses-permission android:name="android.permission.SET_TIME_ZONE"/>
     <uses-permission android:name="android.permission.START_FOREGROUND"/>
     <uses-permission android:name="android.permission.STATUS_BAR_SERVICE"/>
+    <uses-permission android:name="android.permission.SUGGEST_MANUAL_TIME_AND_ZONE"/>
     <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
     <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
 
diff --git a/src/com/android/car/settings/datetime/DatePickerFragment.java b/src/com/android/car/settings/datetime/DatePickerFragment.java
index 67714c7..7a585c5 100644
--- a/src/com/android/car/settings/datetime/DatePickerFragment.java
+++ b/src/com/android/car/settings/datetime/DatePickerFragment.java
@@ -15,8 +15,8 @@
  */
 package com.android.car.settings.datetime;
 
-import android.app.AlarmManager;
-import android.content.Context;
+import android.app.timedetector.ManualTimeSuggestion;
+import android.app.timedetector.TimeDetector;
 import android.content.Intent;
 import android.os.Bundle;
 import android.widget.Button;
@@ -72,7 +72,10 @@
             c.set(Calendar.DAY_OF_MONTH, mDatePicker.getDayOfMonth());
             long when = Math.max(c.getTimeInMillis(), DatetimeSettingsFragment.MIN_DATE);
             if (when / MILLIS_IN_SECOND < Integer.MAX_VALUE) {
-                ((AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE)).setTime(when);
+                TimeDetector timeDetector = getContext().getSystemService(TimeDetector.class);
+                ManualTimeSuggestion manualTimeSuggestion =
+                        TimeDetector.createManualTimeSuggestion(when, "Settings: Set date");
+                timeDetector.suggestManualTime(manualTimeSuggestion);
                 getContext().sendBroadcast(new Intent(Intent.ACTION_TIME_CHANGED));
             }
             getFragmentController().goBack();
diff --git a/src/com/android/car/settings/datetime/TimePickerFragment.java b/src/com/android/car/settings/datetime/TimePickerFragment.java
index 2e0cdcd..80d1c1c 100644
--- a/src/com/android/car/settings/datetime/TimePickerFragment.java
+++ b/src/com/android/car/settings/datetime/TimePickerFragment.java
@@ -16,8 +16,8 @@
 
 package com.android.car.settings.datetime;
 
-import android.app.AlarmManager;
-import android.content.Context;
+import android.app.timedetector.ManualTimeSuggestion;
+import android.app.timedetector.TimeDetector;
 import android.content.Intent;
 import android.os.Bundle;
 import android.widget.Button;
@@ -74,7 +74,10 @@
             c.set(Calendar.MILLISECOND, 0);
             long when = Math.max(c.getTimeInMillis(), DatetimeSettingsFragment.MIN_DATE);
             if (when / MILLIS_IN_SECOND < Integer.MAX_VALUE) {
-                ((AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE)).setTime(when);
+                TimeDetector timeDetector = getContext().getSystemService(TimeDetector.class);
+                ManualTimeSuggestion manualTimeSuggestion =
+                        TimeDetector.createManualTimeSuggestion(when, "Settings: Set time");
+                timeDetector.suggestManualTime(manualTimeSuggestion);
                 getContext().sendBroadcast(new Intent(Intent.ACTION_TIME_CHANGED));
             }
             getFragmentController().goBack();
diff --git a/src/com/android/car/settings/datetime/TimeZonePickerScreenPreferenceController.java b/src/com/android/car/settings/datetime/TimeZonePickerScreenPreferenceController.java
index 601225c..2a64a3e 100644
--- a/src/com/android/car/settings/datetime/TimeZonePickerScreenPreferenceController.java
+++ b/src/com/android/car/settings/datetime/TimeZonePickerScreenPreferenceController.java
@@ -16,7 +16,8 @@
 
 package com.android.car.settings.datetime;
 
-import android.app.AlarmManager;
+import android.app.timezonedetector.ManualTimeZoneSuggestion;
+import android.app.timezonedetector.TimeZoneDetector;
 import android.car.drivingstate.CarUxRestrictions;
 import android.content.Context;
 import android.content.Intent;
@@ -43,12 +44,12 @@
 
     private List<Preference> mZonesList;
     @VisibleForTesting
-    AlarmManager mAlarmManager;
+    TimeZoneDetector mTimeZoneDetector;
 
     public TimeZonePickerScreenPreferenceController(Context context, String preferenceKey,
             FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
         super(context, preferenceKey, fragmentController, uxRestrictions);
-        mAlarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE);
+        mTimeZoneDetector = getContext().getSystemService(TimeZoneDetector.class);
     }
 
     @Override
@@ -90,7 +91,10 @@
         preference.setTitle(timeZone.get(ZoneGetter.KEY_DISPLAY_LABEL).toString());
         preference.setSummary(timeZone.get(ZoneGetter.KEY_OFFSET_LABEL).toString());
         preference.setOnPreferenceClickListener(pref -> {
-            mAlarmManager.setTimeZone(timeZone.get(ZoneGetter.KEY_ID).toString());
+            String tzId = timeZone.get(ZoneGetter.KEY_ID).toString();
+            ManualTimeZoneSuggestion suggestion = TimeZoneDetector.createManualTimeZoneSuggestion(
+                    tzId, "Settings: Set time zone");
+            mTimeZoneDetector.suggestManualTimeZone(suggestion);
             getFragmentController().goBack();
 
             // Note: This is intentionally ACTION_TIME_CHANGED, not ACTION_TIMEZONE_CHANGED.
diff --git a/tests/robotests/src/com/android/car/settings/datetime/TimeZonePickerScreenPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/datetime/TimeZonePickerScreenPreferenceControllerTest.java
index c07ed5f..95bc3be 100644
--- a/tests/robotests/src/com/android/car/settings/datetime/TimeZonePickerScreenPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/datetime/TimeZonePickerScreenPreferenceControllerTest.java
@@ -20,7 +20,8 @@
 
 import static org.mockito.Mockito.verify;
 
-import android.app.AlarmManager;
+import android.app.timezonedetector.ManualTimeZoneSuggestion;
+import android.app.timezonedetector.TimeZoneDetector;
 import android.content.Context;
 import android.content.Intent;
 
@@ -54,7 +55,7 @@
             mPreferenceControllerHelper;
     private TimeZonePickerScreenPreferenceController mController;
     @Mock
-    private AlarmManager mAlarmManager;
+    private TimeZoneDetector mTimeZoneDetector;
 
     @Before
     public void setUp() {
@@ -66,7 +67,7 @@
         mController = mPreferenceControllerHelper.getController();
 
         // Test setup.
-        mController.mAlarmManager = mAlarmManager;
+        mController.mTimeZoneDetector = mTimeZoneDetector;
     }
 
     @Test
@@ -93,7 +94,9 @@
         mPreferenceControllerHelper.markState(Lifecycle.State.CREATED);
         Preference preference = mPreferenceGroup.findPreference("testKey");
         preference.performClick();
-        verify(mAlarmManager).setTimeZone("testKey");
+        ManualTimeZoneSuggestion suggestion =
+                TimeZoneDetector.createManualTimeZoneSuggestion("testKey", "Test debug info");
+        verify(mTimeZoneDetector).suggestManualTimeZone(suggestion);
     }
 
     @Test