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

Commit b54b45d9 authored by John Spurlock's avatar John Spurlock Committed by Android (Google) Code Review
Browse files

Merge "Re-enable dreams: Settings" into jb-mr1-dev

parents 6e380d08 d541b6fd
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
        }
    }
    }

}