From 50070710d899f9c00cea717351e69fd4a5d2371e Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Sun, 8 Oct 2017 10:20:53 +0100 Subject: msm8996-common: Doze: Apply LineageOS rebrand Change-Id: I4daa1092494fdf207ef54dc79f787bcbe1d01a08 Signed-off-by: Davide Garberi --- doze/Android.mk | 2 +- doze/AndroidManifest.xml | 4 +- doze/proguard.flags | 2 +- .../settings/doze/BootCompletedReceiver.java | 37 ----- .../com/cyanogenmod/settings/doze/DozeService.java | 97 ------------- .../settings/doze/DozeSettingsActivity.java | 48 ------- .../settings/doze/DozeSettingsFragment.java | 158 --------------------- .../cyanogenmod/settings/doze/ProximitySensor.java | 91 ------------ .../com/cyanogenmod/settings/doze/TiltSensor.java | 80 ----------- doze/src/com/cyanogenmod/settings/doze/Utils.java | 109 -------------- .../settings/doze/BootCompletedReceiver.java | 38 +++++ .../org/lineageos/settings/doze/DozeService.java | 98 +++++++++++++ .../settings/doze/DozeSettingsActivity.java | 48 +++++++ .../settings/doze/DozeSettingsFragment.java | 158 +++++++++++++++++++++ .../lineageos/settings/doze/ProximitySensor.java | 91 ++++++++++++ .../org/lineageos/settings/doze/TiltSensor.java | 80 +++++++++++ doze/src/org/lineageos/settings/doze/Utils.java | 109 ++++++++++++++ 17 files changed, 626 insertions(+), 624 deletions(-) delete mode 100644 doze/src/com/cyanogenmod/settings/doze/BootCompletedReceiver.java delete mode 100644 doze/src/com/cyanogenmod/settings/doze/DozeService.java delete mode 100644 doze/src/com/cyanogenmod/settings/doze/DozeSettingsActivity.java delete mode 100644 doze/src/com/cyanogenmod/settings/doze/DozeSettingsFragment.java delete mode 100644 doze/src/com/cyanogenmod/settings/doze/ProximitySensor.java delete mode 100644 doze/src/com/cyanogenmod/settings/doze/TiltSensor.java delete mode 100644 doze/src/com/cyanogenmod/settings/doze/Utils.java create mode 100644 doze/src/org/lineageos/settings/doze/BootCompletedReceiver.java create mode 100644 doze/src/org/lineageos/settings/doze/DozeService.java create mode 100644 doze/src/org/lineageos/settings/doze/DozeSettingsActivity.java create mode 100644 doze/src/org/lineageos/settings/doze/DozeSettingsFragment.java create mode 100644 doze/src/org/lineageos/settings/doze/ProximitySensor.java create mode 100644 doze/src/org/lineageos/settings/doze/TiltSensor.java create mode 100644 doze/src/org/lineageos/settings/doze/Utils.java (limited to 'doze') diff --git a/doze/Android.mk b/doze/Android.mk index 4b0cfd5..cef3610 100644 --- a/doze/Android.mk +++ b/doze/Android.mk @@ -15,7 +15,7 @@ LOCAL_STATIC_JAVA_LIBRARIES := \ android-support-v7-preference \ android-support-v7-appcompat \ android-support-v14-preference \ - org.cyanogenmod.platform.internal + org.lineageos.platform.internal LOCAL_RESOURCE_DIR := \ $(LOCAL_PATH)/res \ diff --git a/doze/AndroidManifest.xml b/doze/AndroidManifest.xml index 5dfde01..62d87f3 100644 --- a/doze/AndroidManifest.xml +++ b/doze/AndroidManifest.xml @@ -16,7 +16,7 @@ limitations under the License. --> @@ -50,7 +50,7 @@ android:label="@string/ambient_display_title" android:theme="@style/Theme.Main"> - + diff --git a/doze/proguard.flags b/doze/proguard.flags index 7f3d4c7..b1cabdb 100644 --- a/doze/proguard.flags +++ b/doze/proguard.flags @@ -3,6 +3,6 @@ } -keep class ** extends android.support.v14.preference.PreferenceFragment --keep class com.cyanogenmod.settings.doze.* { +-keep class org.lineageos.settings.doze.* { *; } diff --git a/doze/src/com/cyanogenmod/settings/doze/BootCompletedReceiver.java b/doze/src/com/cyanogenmod/settings/doze/BootCompletedReceiver.java deleted file mode 100644 index e1b2b50..0000000 --- a/doze/src/com/cyanogenmod/settings/doze/BootCompletedReceiver.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2015 The CyanogenMod Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.cyanogenmod.settings.doze; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.util.Log; - -public class BootCompletedReceiver extends BroadcastReceiver { - - private static final boolean DEBUG = false; - private static final String TAG = "ZukDoze"; - - @Override - public void onReceive(final Context context, Intent intent) { - if (Utils.isDozeEnabled(context) && Utils.sensorsEnabled(context)) { - if (DEBUG) Log.d(TAG, "Starting service"); - Utils.startService(context); - } - } - -} diff --git a/doze/src/com/cyanogenmod/settings/doze/DozeService.java b/doze/src/com/cyanogenmod/settings/doze/DozeService.java deleted file mode 100644 index 2ee79bf..0000000 --- a/doze/src/com/cyanogenmod/settings/doze/DozeService.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2015 The CyanogenMod Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.cyanogenmod.settings.doze; - -import android.app.Service; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.os.IBinder; -import android.util.Log; - -public class DozeService extends Service { - private static final String TAG = "DozeService"; - private static final boolean DEBUG = false; - - private ProximitySensor mProximitySensor; - private TiltSensor mTiltSensor; - - @Override - public void onCreate() { - if (DEBUG) Log.d(TAG, "Creating service"); - mProximitySensor = new ProximitySensor(this); - mTiltSensor = new TiltSensor(this); - - IntentFilter screenStateFilter = new IntentFilter(Intent.ACTION_SCREEN_ON); - screenStateFilter.addAction(Intent.ACTION_SCREEN_OFF); - registerReceiver(mScreenStateReceiver, screenStateFilter); - } - - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - if (DEBUG) Log.d(TAG, "Starting service"); - return START_STICKY; - } - - @Override - public void onDestroy() { - if (DEBUG) Log.d(TAG, "Destroying service"); - super.onDestroy(); - this.unregisterReceiver(mScreenStateReceiver); - mProximitySensor.disable(); - mTiltSensor.disable(); - } - - @Override - public IBinder onBind(Intent intent) { - return null; - } - - private void onDisplayOn() { - if (DEBUG) Log.d(TAG, "Display on"); - if (Utils.pickUpEnabled(this)) { - mTiltSensor.disable(); - } - if (Utils.handwaveGestureEnabled(this) || - Utils.pocketGestureEnabled(this)) { - mProximitySensor.disable(); - } - } - - private void onDisplayOff() { - if (DEBUG) Log.d(TAG, "Display off"); - if (Utils.pickUpEnabled(this)) { - mTiltSensor.enable(); - } - if (Utils.handwaveGestureEnabled(this) || - Utils.pocketGestureEnabled(this)) { - mProximitySensor.enable(); - } - } - - private BroadcastReceiver mScreenStateReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { - onDisplayOn(); - } else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { - onDisplayOff(); - } - } - }; -} diff --git a/doze/src/com/cyanogenmod/settings/doze/DozeSettingsActivity.java b/doze/src/com/cyanogenmod/settings/doze/DozeSettingsActivity.java deleted file mode 100644 index 7e3620a..0000000 --- a/doze/src/com/cyanogenmod/settings/doze/DozeSettingsActivity.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2015-2016 The CyanogenMod Project - * 2017 The LineageOS Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.cyanogenmod.settings.doze; - -import android.os.Bundle; -import android.view.MenuItem; - -import com.android.settingslib.drawer.SettingsDrawerActivity; - -public class DozeSettingsActivity extends SettingsDrawerActivity { - - private static final String TAG_DOZE = "doze"; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setContentView(R.layout.doze); - getActionBar().setDisplayHomeAsUpEnabled(true); - getFragmentManager().beginTransaction().replace(R.id.content_frame, - new DozeSettingsFragment(), TAG_DOZE).commit(); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case android.R.id.home: - onBackPressed(); - return true; - } - return super.onOptionsItemSelected(item); - } -} diff --git a/doze/src/com/cyanogenmod/settings/doze/DozeSettingsFragment.java b/doze/src/com/cyanogenmod/settings/doze/DozeSettingsFragment.java deleted file mode 100644 index 7167118..0000000 --- a/doze/src/com/cyanogenmod/settings/doze/DozeSettingsFragment.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright (C) 2015 The CyanogenMod Project - * 2017 The LineageOS Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.cyanogenmod.settings.doze; - -import android.app.Activity; -import android.app.AlertDialog; -import android.app.Dialog; -import android.app.DialogFragment; -import android.content.Context; -import android.content.DialogInterface; -import android.content.SharedPreferences; -import android.database.ContentObserver; -import android.os.Bundle; -import android.os.Handler; -import android.support.v14.preference.PreferenceFragment; -import android.support.v14.preference.SwitchPreference; -import android.support.v7.preference.Preference; -import android.support.v7.preference.PreferenceCategory; -import android.support.v7.preference.Preference.OnPreferenceChangeListener; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.CompoundButton; -import android.widget.Switch; -import android.widget.TextView; - -public class DozeSettingsFragment extends PreferenceFragment implements OnPreferenceChangeListener, - CompoundButton.OnCheckedChangeListener { - - private TextView mTextView; - - private SwitchPreference mPickUpPreference; - private SwitchPreference mHandwavePreference; - private SwitchPreference mPocketPreference; - - @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - addPreferencesFromResource(R.xml.doze_settings); - - SharedPreferences prefs = getActivity().getSharedPreferences("doze_settings", - Activity.MODE_PRIVATE); - if (savedInstanceState == null && !prefs.getBoolean("first_help_shown", false)) { - showHelp(); - } - - boolean dozeEnabled = Utils.isDozeEnabled(getActivity()); - - PreferenceCategory proximitySensorCategory = - (PreferenceCategory) getPreferenceScreen().findPreference(Utils.CATEG_PROX_SENSOR); - - mPickUpPreference = (SwitchPreference) findPreference(Utils.GESTURE_PICK_UP_KEY); - mPickUpPreference.setEnabled(dozeEnabled); - - mHandwavePreference = (SwitchPreference) findPreference(Utils.GESTURE_HAND_WAVE_KEY); - mHandwavePreference.setEnabled(dozeEnabled); - - mPocketPreference = (SwitchPreference) findPreference(Utils.GESTURE_POCKET_KEY); - mPocketPreference.setEnabled(dozeEnabled); - - // Hide proximity sensor related features if the device doesn't support them - if (!Utils.getProxCheckBeforePulse(getActivity())) { - getPreferenceScreen().removePreference(proximitySensorCategory); - } - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - final View view = LayoutInflater.from(getContext()).inflate(R.layout.doze, container, false); - ((ViewGroup) view).addView(super.onCreateView(inflater, container, savedInstanceState)); - return view; - } - - @Override - public void onViewCreated(View view, Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - boolean dozeEnabled = Utils.isDozeEnabled(getActivity()); - - mTextView = (TextView) view.findViewById(R.id.switch_text); - mTextView.setText(getString(dozeEnabled ? - R.string.switch_bar_on : R.string.switch_bar_off)); - - View switchBar = view.findViewById(R.id.switch_bar); - Switch switchWidget = (Switch) switchBar.findViewById(android.R.id.switch_widget); - switchWidget.setChecked(dozeEnabled); - switchWidget.setOnCheckedChangeListener(this); - - switchBar.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - switchWidget.setChecked(!switchWidget.isChecked()); - } - }); - } - - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - Utils.checkDozeService(getActivity()); - return true; - } - - @Override - public void onCheckedChanged(CompoundButton compoundButton, boolean b) { - Utils.enableDoze(b, getActivity()); - Utils.checkDozeService(getActivity()); - - mTextView.setText(getString(b ? R.string.switch_bar_on : R.string.switch_bar_off)); - - mPickUpPreference.setEnabled(b); - mHandwavePreference.setEnabled(b); - mPocketPreference.setEnabled(b); - } - - private static class HelpDialogFragment extends DialogFragment { - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - return new AlertDialog.Builder(getActivity()) - .setTitle(R.string.doze_settings_help_title) - .setMessage(R.string.doze_settings_help_text) - .setNegativeButton(R.string.dialog_ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.cancel(); - } - }) - .create(); - } - - @Override - public void onCancel(DialogInterface dialog) { - getActivity().getSharedPreferences("doze_settings", Activity.MODE_PRIVATE) - .edit() - .putBoolean("first_help_shown", true) - .commit(); - } - } - - private void showHelp() { - HelpDialogFragment fragment = new HelpDialogFragment(); - fragment.show(getFragmentManager(), "help_dialog"); - } -} diff --git a/doze/src/com/cyanogenmod/settings/doze/ProximitySensor.java b/doze/src/com/cyanogenmod/settings/doze/ProximitySensor.java deleted file mode 100644 index 7d7d3f3..0000000 --- a/doze/src/com/cyanogenmod/settings/doze/ProximitySensor.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2015 The CyanogenMod Project - * Copyright (C) 2017 The LineageOS Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.cyanogenmod.settings.doze; - -import android.content.Context; -import android.hardware.Sensor; -import android.hardware.SensorEvent; -import android.hardware.SensorEventListener; -import android.hardware.SensorManager; -import android.util.Log; - -public class ProximitySensor implements SensorEventListener { - - private static final boolean DEBUG = false; - private static final String TAG = "ProximitySensor"; - - // Maximum time for the hand to cover the sensor: 1s - private static final int HANDWAVE_MAX_DELTA_NS = 1000 * 1000 * 1000; - - // Minimum time until the device is considered to have been in the pocket: 2s - private static final int POCKET_MIN_DELTA_NS = 2000 * 1000 * 1000; - - private SensorManager mSensorManager; - private Sensor mSensor; - private Context mContext; - - private boolean mSawNear = false; - private long mInPocketTime = 0; - - public ProximitySensor(Context context) { - mContext = context; - mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE); - mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY, false); - } - - @Override - public void onSensorChanged(SensorEvent event) { - boolean isNear = event.values[0] < mSensor.getMaximumRange(); - if (mSawNear && !isNear) { - if (shouldPulse(event.timestamp)) { - Utils.launchDozePulse(mContext); - } - } else { - mInPocketTime = event.timestamp; - } - mSawNear = isNear; - } - - private boolean shouldPulse(long timestamp) { - long delta = timestamp - mInPocketTime; - - if (Utils.handwaveGestureEnabled(mContext) && Utils.pocketGestureEnabled(mContext)) { - return true; - } else if (Utils.handwaveGestureEnabled(mContext)) { - return delta < HANDWAVE_MAX_DELTA_NS; - } else if (Utils.pocketGestureEnabled(mContext)) { - return delta >= POCKET_MIN_DELTA_NS; - } - return false; - } - - @Override - public void onAccuracyChanged(Sensor sensor, int accuracy) { - /* Empty */ - } - - protected void enable() { - if (DEBUG) Log.d(TAG, "Enabling"); - mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL); - } - - protected void disable() { - if (DEBUG) Log.d(TAG, "Disabling"); - mSensorManager.unregisterListener(this, mSensor); - } -} diff --git a/doze/src/com/cyanogenmod/settings/doze/TiltSensor.java b/doze/src/com/cyanogenmod/settings/doze/TiltSensor.java deleted file mode 100644 index b3316e8..0000000 --- a/doze/src/com/cyanogenmod/settings/doze/TiltSensor.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (c) 2015 The CyanogenMod Project - * Copyright (C) 2017 The LineageOS Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.cyanogenmod.settings.doze; - -import android.content.Context; -import android.hardware.Sensor; -import android.hardware.SensorEvent; -import android.hardware.SensorEventListener; -import android.hardware.SensorManager; -import android.os.SystemClock; -import android.util.Log; - -public class TiltSensor implements SensorEventListener { - - private static final boolean DEBUG = false; - private static final String TAG = "TiltSensor"; - - private static final int BATCH_LATENCY_IN_MS = 100; - private static final int MIN_PULSE_INTERVAL_MS = 2500; - - private SensorManager mSensorManager; - private Sensor mSensor; - private Context mContext; - - private long mEntryTimestamp; - - public TiltSensor(Context context) { - mContext = context; - mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE); - mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_TILT_DETECTOR); - } - - @Override - public void onSensorChanged(SensorEvent event) { - if (DEBUG) Log.d(TAG, "Got sensor event: " + event.values[0]); - - long delta = SystemClock.elapsedRealtime() - mEntryTimestamp; - if (delta < MIN_PULSE_INTERVAL_MS) { - return; - } else { - mEntryTimestamp = SystemClock.elapsedRealtime(); - } - - if (event.values[0] == 1) { - Utils.launchDozePulse(mContext); - } - } - - @Override - public void onAccuracyChanged(Sensor sensor, int accuracy) { - /* Empty */ - } - - protected void enable() { - if (DEBUG) Log.d(TAG, "Enabling"); - mSensorManager.registerListener(this, mSensor, - SensorManager.SENSOR_DELAY_NORMAL, BATCH_LATENCY_IN_MS * 1000); - mEntryTimestamp = SystemClock.elapsedRealtime(); - } - - protected void disable() { - if (DEBUG) Log.d(TAG, "Disabling"); - mSensorManager.unregisterListener(this, mSensor); - } -} diff --git a/doze/src/com/cyanogenmod/settings/doze/Utils.java b/doze/src/com/cyanogenmod/settings/doze/Utils.java deleted file mode 100644 index 3e55d44..0000000 --- a/doze/src/com/cyanogenmod/settings/doze/Utils.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (c) 2015 The CyanogenMod Project - * 2017 The LineageOS Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.cyanogenmod.settings.doze; - -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.os.UserHandle; -import android.support.v7.preference.PreferenceManager; -import android.provider.Settings; -import android.util.Log; - -import static android.provider.Settings.Secure.DOZE_ENABLED; - -public final class Utils { - - private static final String TAG = "DozeUtils"; - private static final boolean DEBUG = false; - - private static final String DOZE_INTENT = "com.android.systemui.doze.pulse"; - - protected static final String CATEG_PROX_SENSOR = "proximity_sensor"; - - protected static final String GESTURE_PICK_UP_KEY = "gesture_pick_up"; - protected static final String GESTURE_HAND_WAVE_KEY = "gesture_hand_wave"; - protected static final String GESTURE_POCKET_KEY = "gesture_pocket"; - - protected static void startService(Context context) { - if (DEBUG) Log.d(TAG, "Starting service"); - context.startServiceAsUser(new Intent(context, DozeService.class), - UserHandle.CURRENT); - } - - protected static void stopService(Context context) { - if (DEBUG) Log.d(TAG, "Stopping service"); - context.stopServiceAsUser(new Intent(context, DozeService.class), - UserHandle.CURRENT); - } - - protected static void checkDozeService(Context context) { - if (isDozeEnabled(context) && sensorsEnabled(context)) { - startService(context); - } else { - stopService(context); - } - } - - protected static boolean getProxCheckBeforePulse(Context context) { - try { - Context con = context.createPackageContext("com.android.systemui", 0); - int id = con.getResources().getIdentifier("doze_proximity_check_before_pulse", - "bool", "com.android.systemui"); - return con.getResources().getBoolean(id); - } catch (PackageManager.NameNotFoundException e) { - return false; - } - } - - protected static boolean isDozeEnabled(Context context) { - return Settings.Secure.getInt(context.getContentResolver(), - DOZE_ENABLED, 1) != 0; - } - - protected static boolean enableDoze(boolean enable, Context context) { - return Settings.Secure.putInt(context.getContentResolver(), - DOZE_ENABLED, enable ? 1 : 0); - } - - protected static void launchDozePulse(Context context) { - if (DEBUG) Log.d(TAG, "Launch doze pulse"); - context.sendBroadcastAsUser(new Intent(DOZE_INTENT), - new UserHandle(UserHandle.USER_CURRENT)); - } - - protected static boolean pickUpEnabled(Context context) { - return PreferenceManager.getDefaultSharedPreferences(context) - .getBoolean(GESTURE_PICK_UP_KEY, false); - } - - protected static boolean handwaveGestureEnabled(Context context) { - return PreferenceManager.getDefaultSharedPreferences(context) - .getBoolean(GESTURE_HAND_WAVE_KEY, false); - } - - protected static boolean pocketGestureEnabled(Context context) { - return PreferenceManager.getDefaultSharedPreferences(context) - .getBoolean(GESTURE_POCKET_KEY, false); - } - - protected static boolean sensorsEnabled(Context context) { - return pickUpEnabled(context) || handwaveGestureEnabled(context) - || pocketGestureEnabled(context); - } -} diff --git a/doze/src/org/lineageos/settings/doze/BootCompletedReceiver.java b/doze/src/org/lineageos/settings/doze/BootCompletedReceiver.java new file mode 100644 index 0000000..c070d49 --- /dev/null +++ b/doze/src/org/lineageos/settings/doze/BootCompletedReceiver.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2015 The CyanogenMod Project + * 2017 The LineageOS Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.lineageos.settings.doze; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.util.Log; + +public class BootCompletedReceiver extends BroadcastReceiver { + + private static final boolean DEBUG = false; + private static final String TAG = "ZukDoze"; + + @Override + public void onReceive(final Context context, Intent intent) { + if (Utils.isDozeEnabled(context) && Utils.sensorsEnabled(context)) { + if (DEBUG) Log.d(TAG, "Starting service"); + Utils.startService(context); + } + } + +} diff --git a/doze/src/org/lineageos/settings/doze/DozeService.java b/doze/src/org/lineageos/settings/doze/DozeService.java new file mode 100644 index 0000000..31c7c90 --- /dev/null +++ b/doze/src/org/lineageos/settings/doze/DozeService.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2015 The CyanogenMod Project + * 2017 The LineageOS Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.lineageos.settings.doze; + +import android.app.Service; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.IBinder; +import android.util.Log; + +public class DozeService extends Service { + private static final String TAG = "DozeService"; + private static final boolean DEBUG = false; + + private ProximitySensor mProximitySensor; + private TiltSensor mTiltSensor; + + @Override + public void onCreate() { + if (DEBUG) Log.d(TAG, "Creating service"); + mProximitySensor = new ProximitySensor(this); + mTiltSensor = new TiltSensor(this); + + IntentFilter screenStateFilter = new IntentFilter(Intent.ACTION_SCREEN_ON); + screenStateFilter.addAction(Intent.ACTION_SCREEN_OFF); + registerReceiver(mScreenStateReceiver, screenStateFilter); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + if (DEBUG) Log.d(TAG, "Starting service"); + return START_STICKY; + } + + @Override + public void onDestroy() { + if (DEBUG) Log.d(TAG, "Destroying service"); + super.onDestroy(); + this.unregisterReceiver(mScreenStateReceiver); + mProximitySensor.disable(); + mTiltSensor.disable(); + } + + @Override + public IBinder onBind(Intent intent) { + return null; + } + + private void onDisplayOn() { + if (DEBUG) Log.d(TAG, "Display on"); + if (Utils.pickUpEnabled(this)) { + mTiltSensor.disable(); + } + if (Utils.handwaveGestureEnabled(this) || + Utils.pocketGestureEnabled(this)) { + mProximitySensor.disable(); + } + } + + private void onDisplayOff() { + if (DEBUG) Log.d(TAG, "Display off"); + if (Utils.pickUpEnabled(this)) { + mTiltSensor.enable(); + } + if (Utils.handwaveGestureEnabled(this) || + Utils.pocketGestureEnabled(this)) { + mProximitySensor.enable(); + } + } + + private BroadcastReceiver mScreenStateReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { + onDisplayOn(); + } else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { + onDisplayOff(); + } + } + }; +} diff --git a/doze/src/org/lineageos/settings/doze/DozeSettingsActivity.java b/doze/src/org/lineageos/settings/doze/DozeSettingsActivity.java new file mode 100644 index 0000000..347c57c --- /dev/null +++ b/doze/src/org/lineageos/settings/doze/DozeSettingsActivity.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2015-2016 The CyanogenMod Project + * 2017 The LineageOS Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.lineageos.settings.doze; + +import android.os.Bundle; +import android.view.MenuItem; + +import com.android.settingslib.drawer.SettingsDrawerActivity; + +public class DozeSettingsActivity extends SettingsDrawerActivity { + + private static final String TAG_DOZE = "doze"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.doze); + getActionBar().setDisplayHomeAsUpEnabled(true); + getFragmentManager().beginTransaction().replace(R.id.content_frame, + new DozeSettingsFragment(), TAG_DOZE).commit(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + onBackPressed(); + return true; + } + return super.onOptionsItemSelected(item); + } +} diff --git a/doze/src/org/lineageos/settings/doze/DozeSettingsFragment.java b/doze/src/org/lineageos/settings/doze/DozeSettingsFragment.java new file mode 100644 index 0000000..9d456a8 --- /dev/null +++ b/doze/src/org/lineageos/settings/doze/DozeSettingsFragment.java @@ -0,0 +1,158 @@ +/* + * Copyright (C) 2015 The CyanogenMod Project + * 2017 The LineageOS Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.lineageos.settings.doze; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; +import android.content.Context; +import android.content.DialogInterface; +import android.content.SharedPreferences; +import android.database.ContentObserver; +import android.os.Bundle; +import android.os.Handler; +import android.support.v14.preference.PreferenceFragment; +import android.support.v14.preference.SwitchPreference; +import android.support.v7.preference.Preference; +import android.support.v7.preference.PreferenceCategory; +import android.support.v7.preference.Preference.OnPreferenceChangeListener; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CompoundButton; +import android.widget.Switch; +import android.widget.TextView; + +public class DozeSettingsFragment extends PreferenceFragment implements OnPreferenceChangeListener, + CompoundButton.OnCheckedChangeListener { + + private TextView mTextView; + + private SwitchPreference mPickUpPreference; + private SwitchPreference mHandwavePreference; + private SwitchPreference mPocketPreference; + + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + addPreferencesFromResource(R.xml.doze_settings); + + SharedPreferences prefs = getActivity().getSharedPreferences("doze_settings", + Activity.MODE_PRIVATE); + if (savedInstanceState == null && !prefs.getBoolean("first_help_shown", false)) { + showHelp(); + } + + boolean dozeEnabled = Utils.isDozeEnabled(getActivity()); + + PreferenceCategory proximitySensorCategory = + (PreferenceCategory) getPreferenceScreen().findPreference(Utils.CATEG_PROX_SENSOR); + + mPickUpPreference = (SwitchPreference) findPreference(Utils.GESTURE_PICK_UP_KEY); + mPickUpPreference.setEnabled(dozeEnabled); + + mHandwavePreference = (SwitchPreference) findPreference(Utils.GESTURE_HAND_WAVE_KEY); + mHandwavePreference.setEnabled(dozeEnabled); + + mPocketPreference = (SwitchPreference) findPreference(Utils.GESTURE_POCKET_KEY); + mPocketPreference.setEnabled(dozeEnabled); + + // Hide proximity sensor related features if the device doesn't support them + if (!Utils.getProxCheckBeforePulse(getActivity())) { + getPreferenceScreen().removePreference(proximitySensorCategory); + } + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + final View view = LayoutInflater.from(getContext()).inflate(R.layout.doze, container, false); + ((ViewGroup) view).addView(super.onCreateView(inflater, container, savedInstanceState)); + return view; + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + boolean dozeEnabled = Utils.isDozeEnabled(getActivity()); + + mTextView = (TextView) view.findViewById(R.id.switch_text); + mTextView.setText(getString(dozeEnabled ? + R.string.switch_bar_on : R.string.switch_bar_off)); + + View switchBar = view.findViewById(R.id.switch_bar); + Switch switchWidget = (Switch) switchBar.findViewById(android.R.id.switch_widget); + switchWidget.setChecked(dozeEnabled); + switchWidget.setOnCheckedChangeListener(this); + + switchBar.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + switchWidget.setChecked(!switchWidget.isChecked()); + } + }); + } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + Utils.checkDozeService(getActivity()); + return true; + } + + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + Utils.enableDoze(b, getActivity()); + Utils.checkDozeService(getActivity()); + + mTextView.setText(getString(b ? R.string.switch_bar_on : R.string.switch_bar_off)); + + mPickUpPreference.setEnabled(b); + mHandwavePreference.setEnabled(b); + mPocketPreference.setEnabled(b); + } + + private static class HelpDialogFragment extends DialogFragment { + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + return new AlertDialog.Builder(getActivity()) + .setTitle(R.string.doze_settings_help_title) + .setMessage(R.string.doze_settings_help_text) + .setNegativeButton(R.string.dialog_ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.cancel(); + } + }) + .create(); + } + + @Override + public void onCancel(DialogInterface dialog) { + getActivity().getSharedPreferences("doze_settings", Activity.MODE_PRIVATE) + .edit() + .putBoolean("first_help_shown", true) + .commit(); + } + } + + private void showHelp() { + HelpDialogFragment fragment = new HelpDialogFragment(); + fragment.show(getFragmentManager(), "help_dialog"); + } +} diff --git a/doze/src/org/lineageos/settings/doze/ProximitySensor.java b/doze/src/org/lineageos/settings/doze/ProximitySensor.java new file mode 100644 index 0000000..913e72b --- /dev/null +++ b/doze/src/org/lineageos/settings/doze/ProximitySensor.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2015 The CyanogenMod Project + * 2017 The LineageOS Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.lineageos.settings.doze; + +import android.content.Context; +import android.hardware.Sensor; +import android.hardware.SensorEvent; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; +import android.util.Log; + +public class ProximitySensor implements SensorEventListener { + + private static final boolean DEBUG = false; + private static final String TAG = "ProximitySensor"; + + // Maximum time for the hand to cover the sensor: 1s + private static final int HANDWAVE_MAX_DELTA_NS = 1000 * 1000 * 1000; + + // Minimum time until the device is considered to have been in the pocket: 2s + private static final int POCKET_MIN_DELTA_NS = 2000 * 1000 * 1000; + + private SensorManager mSensorManager; + private Sensor mSensor; + private Context mContext; + + private boolean mSawNear = false; + private long mInPocketTime = 0; + + public ProximitySensor(Context context) { + mContext = context; + mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE); + mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY, false); + } + + @Override + public void onSensorChanged(SensorEvent event) { + boolean isNear = event.values[0] < mSensor.getMaximumRange(); + if (mSawNear && !isNear) { + if (shouldPulse(event.timestamp)) { + Utils.launchDozePulse(mContext); + } + } else { + mInPocketTime = event.timestamp; + } + mSawNear = isNear; + } + + private boolean shouldPulse(long timestamp) { + long delta = timestamp - mInPocketTime; + + if (Utils.handwaveGestureEnabled(mContext) && Utils.pocketGestureEnabled(mContext)) { + return true; + } else if (Utils.handwaveGestureEnabled(mContext)) { + return delta < HANDWAVE_MAX_DELTA_NS; + } else if (Utils.pocketGestureEnabled(mContext)) { + return delta >= POCKET_MIN_DELTA_NS; + } + return false; + } + + @Override + public void onAccuracyChanged(Sensor sensor, int accuracy) { + /* Empty */ + } + + protected void enable() { + if (DEBUG) Log.d(TAG, "Enabling"); + mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL); + } + + protected void disable() { + if (DEBUG) Log.d(TAG, "Disabling"); + mSensorManager.unregisterListener(this, mSensor); + } +} diff --git a/doze/src/org/lineageos/settings/doze/TiltSensor.java b/doze/src/org/lineageos/settings/doze/TiltSensor.java new file mode 100644 index 0000000..3a5787c --- /dev/null +++ b/doze/src/org/lineageos/settings/doze/TiltSensor.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2015 The CyanogenMod Project + * 2017 The LineageOS Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.lineageos.settings.doze; + +import android.content.Context; +import android.hardware.Sensor; +import android.hardware.SensorEvent; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; +import android.os.SystemClock; +import android.util.Log; + +public class TiltSensor implements SensorEventListener { + + private static final boolean DEBUG = false; + private static final String TAG = "TiltSensor"; + + private static final int BATCH_LATENCY_IN_MS = 100; + private static final int MIN_PULSE_INTERVAL_MS = 2500; + + private SensorManager mSensorManager; + private Sensor mSensor; + private Context mContext; + + private long mEntryTimestamp; + + public TiltSensor(Context context) { + mContext = context; + mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE); + mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_TILT_DETECTOR); + } + + @Override + public void onSensorChanged(SensorEvent event) { + if (DEBUG) Log.d(TAG, "Got sensor event: " + event.values[0]); + + long delta = SystemClock.elapsedRealtime() - mEntryTimestamp; + if (delta < MIN_PULSE_INTERVAL_MS) { + return; + } else { + mEntryTimestamp = SystemClock.elapsedRealtime(); + } + + if (event.values[0] == 1) { + Utils.launchDozePulse(mContext); + } + } + + @Override + public void onAccuracyChanged(Sensor sensor, int accuracy) { + /* Empty */ + } + + protected void enable() { + if (DEBUG) Log.d(TAG, "Enabling"); + mSensorManager.registerListener(this, mSensor, + SensorManager.SENSOR_DELAY_NORMAL, BATCH_LATENCY_IN_MS * 1000); + mEntryTimestamp = SystemClock.elapsedRealtime(); + } + + protected void disable() { + if (DEBUG) Log.d(TAG, "Disabling"); + mSensorManager.unregisterListener(this, mSensor); + } +} diff --git a/doze/src/org/lineageos/settings/doze/Utils.java b/doze/src/org/lineageos/settings/doze/Utils.java new file mode 100644 index 0000000..2abec57 --- /dev/null +++ b/doze/src/org/lineageos/settings/doze/Utils.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2015 The CyanogenMod Project + * 2017 The LineageOS Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.lineageos.settings.doze; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.os.UserHandle; +import android.support.v7.preference.PreferenceManager; +import android.provider.Settings; +import android.util.Log; + +import static android.provider.Settings.Secure.DOZE_ENABLED; + +public final class Utils { + + private static final String TAG = "DozeUtils"; + private static final boolean DEBUG = false; + + private static final String DOZE_INTENT = "com.android.systemui.doze.pulse"; + + protected static final String CATEG_PROX_SENSOR = "proximity_sensor"; + + protected static final String GESTURE_PICK_UP_KEY = "gesture_pick_up"; + protected static final String GESTURE_HAND_WAVE_KEY = "gesture_hand_wave"; + protected static final String GESTURE_POCKET_KEY = "gesture_pocket"; + + protected static void startService(Context context) { + if (DEBUG) Log.d(TAG, "Starting service"); + context.startServiceAsUser(new Intent(context, DozeService.class), + UserHandle.CURRENT); + } + + protected static void stopService(Context context) { + if (DEBUG) Log.d(TAG, "Stopping service"); + context.stopServiceAsUser(new Intent(context, DozeService.class), + UserHandle.CURRENT); + } + + protected static void checkDozeService(Context context) { + if (isDozeEnabled(context) && sensorsEnabled(context)) { + startService(context); + } else { + stopService(context); + } + } + + protected static boolean getProxCheckBeforePulse(Context context) { + try { + Context con = context.createPackageContext("com.android.systemui", 0); + int id = con.getResources().getIdentifier("doze_proximity_check_before_pulse", + "bool", "com.android.systemui"); + return con.getResources().getBoolean(id); + } catch (PackageManager.NameNotFoundException e) { + return false; + } + } + + protected static boolean isDozeEnabled(Context context) { + return Settings.Secure.getInt(context.getContentResolver(), + DOZE_ENABLED, 1) != 0; + } + + protected static boolean enableDoze(boolean enable, Context context) { + return Settings.Secure.putInt(context.getContentResolver(), + DOZE_ENABLED, enable ? 1 : 0); + } + + protected static void launchDozePulse(Context context) { + if (DEBUG) Log.d(TAG, "Launch doze pulse"); + context.sendBroadcastAsUser(new Intent(DOZE_INTENT), + new UserHandle(UserHandle.USER_CURRENT)); + } + + protected static boolean pickUpEnabled(Context context) { + return PreferenceManager.getDefaultSharedPreferences(context) + .getBoolean(GESTURE_PICK_UP_KEY, false); + } + + protected static boolean handwaveGestureEnabled(Context context) { + return PreferenceManager.getDefaultSharedPreferences(context) + .getBoolean(GESTURE_HAND_WAVE_KEY, false); + } + + protected static boolean pocketGestureEnabled(Context context) { + return PreferenceManager.getDefaultSharedPreferences(context) + .getBoolean(GESTURE_POCKET_KEY, false); + } + + protected static boolean sensorsEnabled(Context context) { + return pickUpEnabled(context) || handwaveGestureEnabled(context) + || pocketGestureEnabled(context); + } +} -- cgit v1.2.3