MotoActions: Bring doze settings up-to-date

Based off oneplus3 doze app and integrated with MotoActions.

Change-Id: Ie5e87ecd1cf33631b71186a95e33dcddd70acb11
This commit is contained in:
dianlujitao 2022-02-01 23:22:46 +08:00 committed by Nolen Johnson
parent 97a3a03979
commit 79505d555e
6 changed files with 271 additions and 62 deletions

View File

@ -42,14 +42,9 @@
android:label="@string/ambient_display_gestures_title" android:label="@string/ambient_display_gestures_title"
android:theme="@style/Theme.Main"> android:theme="@style/Theme.Main">
<intent-filter> <intent-filter>
<action android:name="com.android.settings.action.IA_SETTINGS" /> <action android:name="org.lineageos.settings.device.DOZE_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter> </intent-filter>
<meta-data
android:name="com.android.settings.category"
android:value="com.android.settings.category.ia.display" />
<meta-data
android:name="com.android.settings.summary"
android:resource="@string/ambient_display_gestures_summary" />
</activity> </activity>
<activity <activity

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
** Copyright 2014, The Android Open Source 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.
*/
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/switch_bar" />
</LinearLayout>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
Copyright (C) 2017 The LineageOS Project Copyright (C) 2017-2022 The LineageOS Project
Licensed under the Apache License, Version 2.0 (the "License" Licensed under the Apache License, Version 2.0 (the "License"
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
@ -16,22 +16,30 @@
--> -->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<SwitchPreference
android:key="always_on_display"
android:disableDependentsState="true"
android:title="@string/ambient_display_always_on_title"
android:summary="@string/ambient_display_always_on_summary"
android:persistent="false" />
<PreferenceCategory <PreferenceCategory
android:key="ambient_display_key" android:key="ambient_display_key"
android:title="@string/ambient_display_title"> android:title="@string/ambient_display_title">
<SwitchPreference <SwitchPreference
android:key="gesture_pick_up" android:key="gesture_pick_up"
android:defaultValue="true" android:defaultValue="true"
android:title="@string/pick_up_gesture_title" android:title="@string/pick_up_gesture_title"
android:summary="@string/pick_up_gesture_summary" android:summary="@string/pick_up_gesture_summary"
android:icon="@drawable/ic_pickup" /> android:icon="@drawable/ic_pickup" />
<SwitchPreference
android:key="gesture_hand_wave"
android:defaultValue="true"
android:title="@string/hand_wave_gesture_title"
android:summary="@string/hand_wave_gesture_summary"
android:icon="@drawable/ic_hand" />
<SwitchPreference
android:key="gesture_hand_wave"
android:defaultValue="true"
android:title="@string/hand_wave_gesture_title"
android:summary="@string/hand_wave_gesture_summary"
android:icon="@drawable/ic_hand" />
</PreferenceCategory> </PreferenceCategory>
</PreferenceScreen> </PreferenceScreen>

View File

@ -1,5 +1,6 @@
/* /*
* Copyright (c) 2017 The LineageOS Project * Copyright (C) 2015-2016 The CyanogenMod Project
* 2017 The LineageOS Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -18,42 +19,17 @@ package org.lineageos.settings.device;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceActivity; import android.preference.PreferenceActivity;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceFragment;
import android.view.MenuItem;
public class DozePreferenceActivity extends PreferenceActivity { public class DozePreferenceActivity extends PreferenceActivity {
private static final String TAG_DOZE = "doze";
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true); getFragmentManager()
getFragmentManager().beginTransaction() .beginTransaction()
.replace(android.R.id.content, new DozePreferenceFragment()).commit(); .replace(android.R.id.content, new DozePreferenceFragment(), TAG_DOZE)
} .commit();
public static class DozePreferenceFragment extends PreferenceFragment {
private static final String CATEGORY_AMBIENT_DISPLAY = "ambient_display_key";
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.doze_panel);
boolean dozeEnabled = MotoActionsSettings.isDozeEnabled(getActivity());
boolean aodEnabled = MotoActionsSettings.isAODEnabled(getActivity());
PreferenceCategory ambientDisplayCat = (PreferenceCategory)
findPreference(CATEGORY_AMBIENT_DISPLAY);
if (ambientDisplayCat != null) {
ambientDisplayCat.setEnabled(dozeEnabled && !aodEnabled);
}
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
} }
} }

View File

@ -0,0 +1,179 @@
/*
* Copyright (C) 2015 The CyanogenMod Project
* Copyright (C) 2017-2022 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.device;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.TextView;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceFragment;
import androidx.preference.SwitchPreference;
public class DozePreferenceFragment extends PreferenceFragment
implements OnPreferenceChangeListener, CompoundButton.OnCheckedChangeListener {
private TextView mTextView;
private View mSwitchBar;
private SwitchPreference mAlwaysOnDisplayPreference;
private SwitchPreference mHandwavePreference;
private SwitchPreference mPickUpPreference;
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.doze_panel);
final ActionBar actionBar = getActivity().getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
SharedPreferences prefs =
getActivity().getSharedPreferences("doze_panel", Activity.MODE_PRIVATE);
if (savedInstanceState == null && !prefs.getBoolean("first_help_shown", false)) {
showHelp();
}
boolean dozeEnabled = MotoActionsSettings.isDozeEnabled(getActivity());
mAlwaysOnDisplayPreference = findPreference(MotoActionsSettings.ALWAYS_ON_DISPLAY);
mAlwaysOnDisplayPreference.setEnabled(dozeEnabled);
mAlwaysOnDisplayPreference.setChecked(MotoActionsSettings.isAlwaysOnEnabled(getActivity()));
mAlwaysOnDisplayPreference.setOnPreferenceChangeListener(this);
mHandwavePreference = findPreference(MotoActionsSettings.GESTURE_IR_WAKEUP_KEY);
mHandwavePreference.setEnabled(dozeEnabled);
mHandwavePreference.setOnPreferenceChangeListener(this);
mPickUpPreference = findPreference(MotoActionsSettings.GESTURE_PICK_UP_KEY);
mPickUpPreference.setEnabled(dozeEnabled);
mPickUpPreference.setOnPreferenceChangeListener(this);
// Hide AOD if not supported and set all its dependents otherwise
if (!MotoActionsSettings.alwaysOnDisplayAvailable(getActivity())) {
getPreferenceScreen().removePreference(mAlwaysOnDisplayPreference);
} else {
PreferenceCategory ambientDisplayCategory = findPreference("ambient_display_key");
ambientDisplayCategory.setDependency(MotoActionsSettings.ALWAYS_ON_DISPLAY);
}
}
@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 = MotoActionsSettings.isDozeEnabled(getActivity());
mTextView = view.findViewById(R.id.switch_text);
mTextView.setText(
getString(dozeEnabled ? R.string.switch_bar_on : R.string.switch_bar_off));
mSwitchBar = view.findViewById(R.id.switch_bar);
Switch switchWidget = mSwitchBar.findViewById(android.R.id.switch_widget);
switchWidget.setChecked(dozeEnabled);
switchWidget.setOnCheckedChangeListener(this);
mSwitchBar.setActivated(dozeEnabled);
mSwitchBar.setOnClickListener(
v -> {
switchWidget.setChecked(!switchWidget.isChecked());
mSwitchBar.setActivated(switchWidget.isChecked());
});
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (MotoActionsSettings.ALWAYS_ON_DISPLAY.equals(preference.getKey())) {
MotoActionsSettings.enableAlwaysOn(getActivity(), (Boolean) newValue);
}
return true;
}
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
MotoActionsSettings.enableDoze(getActivity(), isChecked);
mTextView.setText(getString(isChecked ? R.string.switch_bar_on : R.string.switch_bar_off));
mSwitchBar.setActivated(isChecked);
if (!isChecked) {
MotoActionsSettings.enableAlwaysOn(getActivity(), false);
mAlwaysOnDisplayPreference.setChecked(false);
}
mAlwaysOnDisplayPreference.setEnabled(isChecked);
mHandwavePreference.setEnabled(isChecked);
mPickUpPreference.setEnabled(isChecked);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
getActivity().onBackPressed();
return true;
}
return false;
}
public 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, (dialog, which) -> dialog.cancel())
.create();
}
@Override
public void onCancel(DialogInterface dialog) {
getActivity()
.getSharedPreferences("doze_panel", Activity.MODE_PRIVATE)
.edit()
.putBoolean("first_help_shown", true)
.apply();
}
}
private void showHelp() {
HelpDialogFragment fragment = new HelpDialogFragment();
fragment.show(getFragmentManager(), "help_dialog");
}
}

View File

@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2015 The CyanogenMod Project * Copyright (c) 2015 The CyanogenMod Project
* Copyright (c) 2017 The LineageOS Project * Copyright (c) 2017-2022 The LineageOS Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -22,22 +22,29 @@ import android.content.SharedPreferences;
import android.hardware.display.AmbientDisplayConfiguration; import android.hardware.display.AmbientDisplayConfiguration;
import android.os.UserHandle; import android.os.UserHandle;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.provider.Settings;
import org.lineageos.settings.device.actions.UpdatedStateNotifier; import org.lineageos.settings.device.actions.UpdatedStateNotifier;
import org.lineageos.settings.device.actions.CameraActivationAction; import org.lineageos.settings.device.actions.CameraActivationAction;
import org.lineageos.settings.device.actions.TorchAction; import org.lineageos.settings.device.actions.TorchAction;
import static android.provider.Settings.Secure.DOZE_ALWAYS_ON;
import static android.provider.Settings.Secure.DOZE_ENABLED;
public class MotoActionsSettings { public class MotoActionsSettings {
private static final String TAG = "MotoActions"; private static final String TAG = "MotoActions";
private static final String GESTURE_CAMERA_ACTION_KEY = "gesture_camera_action"; private static final String GESTURE_CAMERA_ACTION_KEY = "gesture_camera_action";
private static final String GESTURE_CHOP_CHOP_KEY = "gesture_chop_chop"; private static final String GESTURE_CHOP_CHOP_KEY = "gesture_chop_chop";
private static final String GESTURE_PICK_UP_KEY = "gesture_pick_up";
private static final String GESTURE_IR_WAKEUP_KEY = "gesture_hand_wave";
private static final String GESTURE_IR_SILENCER_KEY = "gesture_ir_silencer"; private static final String GESTURE_IR_SILENCER_KEY = "gesture_ir_silencer";
private static final String GESTURE_FLIP_TO_MUTE_KEY = "gesture_flip_to_mute"; private static final String GESTURE_FLIP_TO_MUTE_KEY = "gesture_flip_to_mute";
private static final String GESTURE_LIFT_TO_SILENCE_KEY = "gesture_lift_to_silence"; private static final String GESTURE_LIFT_TO_SILENCE_KEY = "gesture_lift_to_silence";
static final String GESTURE_IR_WAKEUP_KEY = "gesture_hand_wave";
static final String GESTURE_PICK_UP_KEY = "gesture_pick_up";
static final String ALWAYS_ON_DISPLAY = "always_on_display";
private final Context mContext; private final Context mContext;
private final UpdatedStateNotifier mUpdatedStateNotifier; private final UpdatedStateNotifier mUpdatedStateNotifier;
@ -65,16 +72,32 @@ public class MotoActionsSettings {
return mChopChopEnabled; return mChopChopEnabled;
} }
public static boolean isAODEnabled(Context context) { public static boolean isAlwaysOnEnabled(Context context) {
return new AmbientDisplayConfiguration(context).alwaysOnEnabled(UserHandle.USER_CURRENT); return Settings.Secure.getIntForUser(context.getContentResolver(),
DOZE_ALWAYS_ON, 0, UserHandle.USER_CURRENT) != 0;
}
public static boolean alwaysOnDisplayAvailable(Context context) {
return new AmbientDisplayConfiguration(context).alwaysOnAvailable();
}
public static boolean enableAlwaysOn(Context context, boolean enable) {
return Settings.Secure.putIntForUser(context.getContentResolver(),
DOZE_ALWAYS_ON, enable ? 1 : 0, UserHandle.USER_CURRENT);
}
public static boolean enableDoze(Context context, boolean enable) {
return Settings.Secure.putInt(context.getContentResolver(),
DOZE_ENABLED, enable ? 1 : 0);
} }
public static boolean isDozeEnabled(Context context) { public static boolean isDozeEnabled(Context context) {
return new AmbientDisplayConfiguration(context).pulseOnNotificationEnabled(UserHandle.USER_CURRENT); return Settings.Secure.getInt(context.getContentResolver(),
DOZE_ENABLED, 1) != 0;
} }
public boolean isAODEnabled() { public boolean isAlwaysOnEnabled() {
return isAODEnabled(mContext); return isAlwaysOnEnabled(mContext);
} }
public boolean isDozeEnabled() { public boolean isDozeEnabled() {
@ -82,11 +105,11 @@ public class MotoActionsSettings {
} }
public boolean isIrWakeupEnabled() { public boolean isIrWakeupEnabled() {
return isDozeEnabled() && !isAODEnabled() && mIrWakeUpEnabled; return isDozeEnabled() && !isAlwaysOnEnabled() && mIrWakeUpEnabled;
} }
public boolean isPickUpEnabled() { public boolean isPickUpEnabled() {
return isDozeEnabled() && !isAODEnabled() && mPickUpGestureEnabled; return isDozeEnabled() && !isAlwaysOnEnabled() && mPickUpGestureEnabled;
} }
public boolean isIrSilencerEnabled() { public boolean isIrSilencerEnabled() {