Auto power off if stay in Welcome screen for more than 30 minutes
Issue: FP4-3639
Issue: FP4-INT#13
Change-Id: I4e6708867eabf5ba6d34d3d35fa7de7efafa805a
(cherry picked from commit c149ae4b97660b1b202ad69cc22aea69454313e8)
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index a0f9ab9..a8fcee5 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -3512,6 +3512,8 @@
</intent-filter>
</activity>
+ <service android:name=".ShutdownJobService"
+ android:permission="android.permission.BIND_JOB_SERVICE" />
</application>
</manifest>
diff --git a/res/values/integers.xml b/res/values/integers.xml
index 7a6e0aa..919105d 100644
--- a/res/values/integers.xml
+++ b/res/values/integers.xml
@@ -20,4 +20,5 @@
<integer name="job_anomaly_config_update">101</integer>
<integer name="job_anomaly_detection">102</integer>
<integer name="device_index_update">103</integer>
+ <integer name="job_shut_down">104</integer>
</resources>
diff --git a/src/com/android/settings/SettingsInitialize.java b/src/com/android/settings/SettingsInitialize.java
index 5157033..9305338 100644
--- a/src/com/android/settings/SettingsInitialize.java
+++ b/src/com/android/settings/SettingsInitialize.java
@@ -63,6 +63,7 @@
managedProfileSetup(context, pm, broadcast, userInfo);
webviewSettingSetup(context, pm, userInfo);
refreshExistingShortcuts(context);
+ ShutdownJobService.startShutdownJob(context);
}
private void managedProfileSetup(Context context, final PackageManager pm, Intent broadcast,
diff --git a/src/com/android/settings/ShutdownJobService.java b/src/com/android/settings/ShutdownJobService.java
new file mode 100644
index 0000000..e8019f0
--- /dev/null
+++ b/src/com/android/settings/ShutdownJobService.java
@@ -0,0 +1,103 @@
+package com.android.settings;
+
+import static android.provider.Settings.Secure.USER_SETUP_COMPLETE;
+
+import android.app.job.JobInfo;
+import android.app.job.JobParameters;
+import android.app.job.JobScheduler;
+import android.app.job.JobService;
+import android.content.ComponentName;
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.provider.Settings.Secure;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+
+import com.android.internal.statusbar.IStatusBarService;
+
+/**
+ *
+ *
+ * <pre>
+ * author : yingyubin
+ * e-mail : yubin.ying@t2mobile.com
+ * time : 2022/04/14
+ * desc :
+ * version: 1.0
+ * </pre>
+ */
+public class ShutdownJobService extends JobService {
+ private static final String TAG = ShutdownJobService.class.getSimpleName();
+
+ static final long SHUT_DOWN_MS = 30 * 60 * 1000;
+
+ public static void startShutdownJob(Context context) {
+ final JobScheduler jobScheduler = context.getSystemService(JobScheduler.class);
+
+ final ComponentName component = new ComponentName(context, ShutdownJobService.class);
+ final JobInfo.Builder jobBuilder =
+ new JobInfo.Builder(R.integer.job_shut_down, component)
+ .setMinimumLatency(SHUT_DOWN_MS)
+ .setOverrideDeadline(SHUT_DOWN_MS);
+ final JobInfo pending = jobScheduler.getPendingJob(R.integer.job_shut_down);
+
+ // Don't schedule it if it already exists, to make sure it runs periodically even after
+ // reboot
+ if (pending == null
+ && jobScheduler.schedule(jobBuilder.build()) != JobScheduler.RESULT_SUCCESS) {
+ Log.i(TAG, "Shutdown job service schedule failed.");
+ }
+ }
+
+ @Override
+ public boolean onStartJob(JobParameters jobParameters) {
+ if (!isUserSetupCompleted() && !isSimReady() && !isWifiConnected()) {
+ Log.d(
+ TAG,
+ "shutdown device as sim not ready ,wifi not connect, setup wizard not"
+ + " complete");
+ shutdown();
+ }
+ Log.d(TAG, "ShutdownJobService finish");
+ return false;
+ }
+
+ @Override
+ public boolean onStopJob(JobParameters jobParameters) {
+ return false;
+ }
+
+ private void shutdown() {
+ IStatusBarService mBarService =
+ IStatusBarService.Stub.asInterface(
+ ServiceManager.getService(Context.STATUS_BAR_SERVICE));
+ try {
+ mBarService.shutdown();
+ } catch (RemoteException e) {
+ }
+ }
+
+ private boolean isWifiConnected() {
+ ConnectivityManager cm =
+ (ConnectivityManager)
+ getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
+ if (cm == null) return false;
+ NetworkInfo ni = cm.getActiveNetworkInfo();
+ return ni != null && ni.getType() == ConnectivityManager.TYPE_WIFI;
+ }
+
+ private boolean isSimReady() {
+ TelephonyManager tm =
+ (TelephonyManager)
+ getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
+ return tm.getSimState() == TelephonyManager.SIM_STATE_READY;
+ }
+
+ private boolean isUserSetupCompleted() {
+ return Secure.getInt(getApplicationContext().getContentResolver(), USER_SETUP_COMPLETE, 0)
+ != 0;
+ }
+}