Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d541b6fd authored by John Spurlock's avatar John Spurlock Committed by Daniel Sandler
Browse files

Re-enable dreams: Settings

Re-arrange settings and captions for dreams.  Activation on sleep
and activation on dock now independent. Sleep activation defaults to off,
dock activation defaults to on (replacing dock mode).

Also use dream manager service for testing dream preference, and properly
disable preferences if both dream activations are disabled.

Change-Id: I76f5ba115c7678826a09077dd393acc55c2bca26
Bug: 6921930
parent 6a20ce5e
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -1687,13 +1687,17 @@
    <!-- Wallpaper settings fragment title [CHAR LIMIT=30] -->
    <string name="wallpaper_settings_fragment_title">Choose wallpaper from</string>
    <!-- Display settings screen, trigger for screen saver options -->
    <string name="screensaver_settings_title">Screen Candy</string>
    <!-- Display settings screen, summary for screen saver options, screen saver is turned on -->
    <string name="screensaver_settings_summary_on">Will start upon sleep if connected to power</string>
    <string name="screensaver_settings_title">Dream</string>
    <!-- Display settings screen, summary fragment for screen saver options, activated on sleep or docked -->
    <string name="screensaver_settings_summary_both">When docked or asleep and charging</string>
    <!-- Display settings screen, summary fragment for screen saver options, activated on sleep -->
    <string name="screensaver_settings_summary_sleep">When asleep and charging</string>
    <!-- Display settings screen, summary fragment for screen saver options, activated when docked  -->
    <string name="screensaver_settings_summary_dock">When docked</string>
    <!-- Display settings screen, summary for screen saver options, screen saver is turned off -->
    <string name="screensaver_settings_summary_off">Disabled</string>
    <!-- Screen saver settings, setting option name to select a module -->
    <string name="screensaver_component_title">Selected candy</string>
    <string name="screensaver_component_title">Selected dream</string>
    <!-- Screen saver settings, setting option name to change activation timeout -->
    <string name="screensaver_timeout_title">When to activate</string>
    <!-- Screen saver settings, setting option summary to change activation timeout -->
@@ -1702,9 +1706,12 @@
    <string name="screensaver_timeout_zero_summary">Never</string>
    <!-- Screen saver settings, button allowing the user to test/try the current module -->
    <string name="screensaver_test">Try it!</string>
    <!-- Screen saver settings, checkbox allowing the screen saver to activate automatically when
         the device sleeps -->
    <string name="screensaver_activate_on_sleep_title">Start on sleep</string>
    <!-- Screen saver settings, checkbox allowing the screen saver to activate automatically when
         the device is docked -->
    <string name="screensaver_activate_on_dock_title">Also start when docked</string>
    <string name="screensaver_activate_on_dock_title">Start when docked</string>
    <!-- Sound & display settings screen, setting option name to change whether the screen adjusts automatically based on lighting conditions -->
    <string name="automatic_brightness">Automatic brightness</string>
    <!-- [CHAR LIMIT=30] Sound & display settings screen, setting option name to change font size -->
+20 −17
Original line number Diff line number Diff line
@@ -15,25 +15,28 @@
-->

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
        android:title="@string/screensaver_settings_title"
        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
    xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
    android:title="@string/screensaver_settings_title" >

    <CheckBoxPreference
        android:key="activate_on_sleep"
        android:persistent="false"
        android:title="@string/screensaver_activate_on_sleep_title" />

    <CheckBoxPreference
        android:defaultValue="true"
        android:key="activate_on_dock"
        android:persistent="false"
        android:title="@string/screensaver_activate_on_dock_title" />

    <com.android.settings.DreamComponentPreference
        android:key="screensaver_component"
            android:title="@string/screensaver_component_title"
        android:persistent="false"
            />
        android:title="@string/screensaver_component_title" />

    <com.android.settings.DreamTesterPreference
        android:key="test"
            android:title="@string/screensaver_test"
            android:persistent="false"
            />

    <CheckBoxPreference
            android:key="activate_on_dock"
        android:persistent="false"
            android:title="@string/screensaver_activate_on_dock_title"
            android:defaultValue="true" />
        android:title="@string/screensaver_test" />

</PreferenceScreen>
 No newline at end of file
+6 −3
Original line number Diff line number Diff line
@@ -232,10 +232,13 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
    }

    private void updateScreenSaverSummary() {
        boolean activatedOnSleep = DreamSettings.isScreenSaverActivatedOnSleep(getActivity());
        boolean activatedOnDock = DreamSettings.isScreenSaverActivatedOnDock(getActivity());
        mScreenSaverPreference.setSummary(
            DreamSettings.isScreenSaverEnabled(mScreenSaverPreference.getContext())
                ? R.string.screensaver_settings_summary_on
                : R.string.screensaver_settings_summary_off);
                activatedOnSleep && activatedOnDock ? R.string.screensaver_settings_summary_both :
                activatedOnSleep ? R.string.screensaver_settings_summary_sleep :
                activatedOnDock ? R.string.screensaver_settings_summary_dock :
                R.string.screensaver_settings_summary_off);
    }

    private void updateAccelerometerRotationCheckbox() {
+63 −79
Original line number Diff line number Diff line
@@ -48,12 +48,19 @@ import java.util.ArrayList;
public class DreamSettings extends SettingsPreferenceFragment {
    private static final String TAG = "DreamSettings";

    private static final String KEY_ACTIVATE_ON_SLEEP = "activate_on_sleep";
    private static final String KEY_ACTIVATE_ON_DOCK = "activate_on_dock";
    private static final String KEY_COMPONENT = "screensaver_component";
    private static final String KEY_TEST = "test";

    private CheckBoxPreference mActivateOnDockPreference;
    private static final int DEFAULT_SLEEP = 0;
    private static final int DEFAULT_DOCK = 1;

    private Switch mEnableSwitch;
    private Enabler mEnabler;
    private ActivationSetting mActivateOnSleep;
    private ActivationSetting mActivateOnDock;

    private Preference mComponentPref;
    private Preference mTestPref;

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
@@ -61,99 +68,76 @@ public class DreamSettings extends SettingsPreferenceFragment {

        addPreferencesFromResource(R.xml.dream_settings);

        mActivateOnDockPreference = (CheckBoxPreference) findPreference(KEY_ACTIVATE_ON_DOCK);

        final Activity activity = getActivity();

        mEnableSwitch = new Switch(activity);

        if (activity instanceof PreferenceActivity) {
            PreferenceActivity preferenceActivity = (PreferenceActivity) activity;
            // note: we do not check onIsHidingHeaders() or onIsMultiPane() because there's no
            // switch in the left-hand pane to control this; we need to show the ON/OFF in our
            // fragment every time
            final int padding = activity.getResources().getDimensionPixelSize(
                    R.dimen.action_bar_switch_padding);
            mEnableSwitch.setPadding(0, 0, padding, 0);
            activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
                    ActionBar.DISPLAY_SHOW_CUSTOM);
            activity.getActionBar().setCustomView(mEnableSwitch, new ActionBar.LayoutParams(
                    ActionBar.LayoutParams.WRAP_CONTENT,
                    ActionBar.LayoutParams.WRAP_CONTENT,
                    Gravity.CENTER_VERTICAL | Gravity.END));
            activity.getActionBar().setTitle(R.string.screensaver_settings_title);
        }
        mComponentPref = findPreference(KEY_COMPONENT);
        mTestPref = findPreference(KEY_TEST);

        mEnabler = new Enabler(activity, mEnableSwitch);
        mActivateOnSleep = new ActivationSetting(getActivity(),
                SCREENSAVER_ENABLED, DEFAULT_SLEEP,
                (CheckBoxPreference) findPreference(KEY_ACTIVATE_ON_SLEEP));
        mActivateOnDock = new ActivationSetting(getActivity(),
                SCREENSAVER_ACTIVATE_ON_DOCK, DEFAULT_DOCK,
                (CheckBoxPreference) findPreference(KEY_ACTIVATE_ON_DOCK));
    }

    public static boolean isScreenSaverEnabled(Context context) {
    public static boolean isScreenSaverActivatedOnSleep(Context context) {
        return 0 != Settings.Secure.getInt(
                    context.getContentResolver(), SCREENSAVER_ENABLED, 1);
    }

    public static void setScreenSaverEnabled(Context context, boolean enabled) {
        Settings.Secure.putInt(
                context.getContentResolver(), SCREENSAVER_ENABLED, enabled ? 1 : 0);
                    context.getContentResolver(), SCREENSAVER_ENABLED, DEFAULT_SLEEP);
    }

    public static class Enabler implements CompoundButton.OnCheckedChangeListener  {
        private final Context mContext;
        private Switch mSwitch;

        public Enabler(Context context, Switch switch_) {
            mContext = context;
            setSwitch(switch_);
        }
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            setScreenSaverEnabled(mContext, isChecked);
        }
        public void setSwitch(Switch switch_) {
            if (mSwitch == switch_) return;
            if (mSwitch != null) mSwitch.setOnCheckedChangeListener(null);
            mSwitch = switch_;
            mSwitch.setOnCheckedChangeListener(this);

            final boolean enabled = isScreenSaverEnabled(mContext);
            mSwitch.setChecked(enabled);
        }
        public void pause() {
            mSwitch.setOnCheckedChangeListener(null);
        }
        public void resume() {
            mSwitch.setOnCheckedChangeListener(this);
        }
    public static boolean isScreenSaverActivatedOnDock(Context context) {
        return 0 != Settings.Secure.getInt(
                    context.getContentResolver(), SCREENSAVER_ACTIVATE_ON_DOCK, DEFAULT_DOCK);
    }

    @Override
    public void onResume() {
        if (mEnabler != null) {
            mEnabler.resume();
        }

        final boolean currentActivateOnDock = 0 != Settings.Secure.getInt(getContentResolver(),
                SCREENSAVER_ACTIVATE_ON_DOCK, 1);
        mActivateOnDockPreference.setChecked(currentActivateOnDock);
        mActivateOnSleep.onResume();
        mActivateOnDock.onResume();
        refreshDependents();
        super.onResume();
    }

    @Override
    public void onPause() {
        if (mEnabler != null) {
            mEnabler.pause();
    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
        mActivateOnSleep.onClick(preference);
        mActivateOnDock.onClick(preference);
        refreshDependents();
        return super.onPreferenceTreeClick(preferenceScreen, preference);
    }

        super.onPause();
    private void refreshDependents() {
        boolean enabled = mActivateOnSleep.isSelected() || mActivateOnDock.isSelected();
        mComponentPref.setEnabled(enabled);
        mTestPref.setEnabled(enabled);
    }

    @Override
    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
        if (preference == mActivateOnDockPreference) {
            Settings.Secure.putInt(getContentResolver(),
                    SCREENSAVER_ACTIVATE_ON_DOCK, 
                    mActivateOnDockPreference.isChecked() ? 1 : 0);
    private static class ActivationSetting {
        private final Context mContext;
        private final String mName;
        private final int mDefaultValue;
        private final CheckBoxPreference mPref;

        ActivationSetting(Context context, String name, int defaultValue, CheckBoxPreference pref) {
            mContext = context;
            mName = name;
            mDefaultValue = defaultValue;
            mPref = pref;
        }
        public boolean isSelected() {
            return mPref.isChecked();
        }
        void onClick(Preference preference) {
            if (preference == mPref) {
                Settings.Secure.putInt(mContext.getContentResolver(),
                        mName,
                        mPref.isChecked() ? 1 : 0);
            }
        return super.onPreferenceTreeClick(preferenceScreen, preference);
        }
        void onResume() {
            boolean currentActivated = 0 != Settings.Secure.getInt(mContext.getContentResolver(),
                    mName, mDefaultValue);
            mPref.setChecked(currentActivated);
        }
    }

}
+10 −49
Original line number Diff line number Diff line
@@ -16,72 +16,33 @@

package com.android.settings;

import static android.provider.Settings.Secure.SCREENSAVER_COMPONENT;

import android.app.AlertDialog;
import android.content.Context;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.content.Context;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.preference.Preference;
import android.provider.Settings;
import android.service.dreams.IDreamManager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class DreamTesterPreference extends Preference {
    private static final String TAG = "DreamTesterPreference";

    private final PackageManager pm;
    private final ContentResolver resolver;

    public DreamTesterPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
        pm = getContext().getPackageManager();
        resolver = getContext().getContentResolver();
    }

    @Override
    protected void onClick() {
        String component = Settings.Secure.getString(resolver, SCREENSAVER_COMPONENT);
        Log.v(TAG, "component=" + component);
        if (component != null) {
            ComponentName cn = ComponentName.unflattenFromString(component);
            Log.v(TAG, "cn=" + cn);
//            Intent intent = new Intent(Intent.ACTION_MAIN)
//                .setComponent(cn)
//                .addFlags(
//                    Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
//                    )
//                .putExtra("android.dreams.TEST", true);
//            getContext().startService(intent);
            IDreamManager dm = IDreamManager.Stub.asInterface(
                    ServiceManager.getService("dreams"));
        IDreamManager dm = IDreamManager.Stub.asInterface(ServiceManager.getService("dreams"));
        try {
            ComponentName cn = dm.getDreamComponent();
            Log.v(TAG, "DreamComponent cn=" + cn);
            dm.testDream(cn);
        } catch (RemoteException ex) {
            Log.w(TAG, "error testing dream", ex);
            // too bad, so sad, oh mom, oh dad
        }
    }
    }

}