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

Commit eb7bd5fb authored by Jesus David's avatar Jesus David Committed by Steve Kondik
Browse files

Settings: tablet powerwidget management (2/2)

patchset 2: removed whitespaces and tabs
patchset 3: added missing string
patchset 4: better dialog when space is not enough for a new toggle
patchset 4: license headers
patchset 5: remove WIP tag

Change-Id: Idc4d4d7c8f9082341b55fff7e6aff60956420a2a
parent 4b45cd41
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -906,6 +906,8 @@
    <string name="pref_flash_mode_title">Flash mode</string>
    <string name="pref_flash_mode_summary">Choose High / Death Ray</string>

    <string name="toggles_not_enough_space">Space is limited to six toggles</string>

    <!-- Power Widget, Haptic feedback #CM -->
    <string name="expanded_haptic_feedback_title">Haptic feedback</string>
    <string name="expanded_haptic_feedback_summary">Enable/disable haptic feedback</string>
+5 −0
Original line number Diff line number Diff line
@@ -29,6 +29,11 @@
        android:fragment="com.android.settings.cyanogenmod.PowerWidget"
        android:title="@string/notification_drawer_title" />

    <PreferenceScreen
        android:key="notification_drawer_tablet"
        android:fragment="com.android.settings.cyanogenmod.TabletPowerWidget"
        android:title="@string/notification_drawer_title" />

    <PreferenceScreen
        android:key="wallpaper"
        android:title="@string/wallpaper_settings_title"
+56 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="UTF-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">

        <CheckBoxPreference
            android:key="pref_airplane_toggle"
            android:title="@string/title_toggle_airplane"
            android:defaultValue="true"/>

        <CheckBoxPreference
            android:key="pref_rotate_toggle"
            android:title="@string/title_toggle_autorotate"
            android:defaultValue="true"/>

        <CheckBoxPreference
            android:key="pref_bluetooth_toggle"
            android:title="@string/title_toggle_bluetooth"
            android:defaultValue="true"/>

        <CheckBoxPreference
            android:key="pref_gps_toggle"
            android:title="@string/title_toggle_gps"
            android:defaultValue="false"/>

        <CheckBoxPreference
            android:key="pref_wifi_toggle"
            android:title="@string/title_toggle_wifi"
            android:defaultValue="true"/>

        <CheckBoxPreference
            android:key="pref_flashlight_toggle"
            android:title="@string/title_toggle_flashlight"
            android:defaultValue="false"/>

        <CheckBoxPreference
            android:key="pref_mobile_data_toggle"
            android:title="@string/title_toggle_mobiledata"
            android:defaultValue="false"/>

        <CheckBoxPreference
            android:key="pref_network_mode_toggle"
            android:title="@string/title_toggle_networkmode"
            android:defaultValue="false"/>

        <CheckBoxPreference
            android:key="pref_sound_toggle"
            android:title="@string/title_toggle_sound"
            android:defaultValue="false"/>

        <PreferenceScreen
            android:key="widget_order"
            android:title="@string/title_widget_order"
            android:summary="@string/summary_widget_order"
            android:fragment="com.android.settings.cyanogenmod.TabletPowerWidget$PowerWidgetOrder" />

</PreferenceScreen>
+3 −0
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ public class SystemSettings extends SettingsPreferenceFragment implements

    private static final String KEY_FONT_SIZE = "font_size";
    private static final String KEY_NOTIFICATION_DRAWER = "notification_drawer";
    private static final String KEY_NOTIFICATION_DRAWER_TABLET = "notification_drawer_tablet";
    private static final String KEY_NAVIGATION_BAR = "navigation_bar";

    private ListPreference mFontSizePref;
@@ -55,6 +56,8 @@ public class SystemSettings extends SettingsPreferenceFragment implements
        mFontSizePref.setOnPreferenceChangeListener(this);
        if (Utils.isScreenLarge()) {
            getPreferenceScreen().removePreference(findPreference(KEY_NOTIFICATION_DRAWER));
        } else {
            getPreferenceScreen().removePreference(findPreference(KEY_NOTIFICATION_DRAWER_TABLET));
        }
        IWindowManager windowManager = IWindowManager.Stub.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE));
        try {
+272 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2011 The CyanogenMod Project
 * This code has been modified. Portions copyright (C) 2012 ParanoidAndroid 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.android.settings.cyanogenmod;

import android.app.ListFragment;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.ListPreferenceMultiSelect;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.preference.PreferenceScreen;
import android.provider.Settings;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.android.settings.Utils;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.cyanogenmod.TouchInterceptor;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class TabletPowerWidget extends SettingsPreferenceFragment
        implements Preference.OnPreferenceChangeListener {

    private static final String TAG = "TabletPowerWidget";

    private CheckBoxPreference[] mToggles = new CheckBoxPreference[9];

    private static Context mContext;
    private static boolean mValue;
    private static String mPowerWidgets;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (getPreferenceManager() != null) {
                addPreferencesFromResource(R.xml.tablet_power_widget);
                mContext = getActivity();
                refreshToggles();
        }
    }


    private void refreshToggles(){
        mPowerWidgets = Settings.System.getString(mContext.getContentResolver(), Settings.System.WIDGET_BUTTONS_TABLET);
        PreferenceScreen prefSet = getPreferenceScreen();
        if(mPowerWidgets == null)
                mPowerWidgets = TabletPowerWidgetUtil.BUTTONS_DEFAULT;
        for(int i=0; i<mToggles.length; i++){
                mToggles[i] = (CheckBoxPreference) prefSet.findPreference(TabletPowerWidgetUtil.KEY_TOGGLES[i]);
                mToggles[i].setChecked(mPowerWidgets.contains(TabletPowerWidgetUtil.KEY_TOGGLES[i]));
        }
    }

    private void setWidgetButtons(){
        if(mPowerWidgets == null)
                mPowerWidgets = TabletPowerWidgetUtil.BUTTONS_DEFAULT;
        if(mPowerWidgets.equals(TabletPowerWidgetUtil.NO_TOGGLES))
                Settings.System.putString(mContext.getContentResolver(), Settings.System.WIDGET_BUTTONS_TABLET, mPowerWidgets);
        else{
                mPowerWidgets = mPowerWidgets.substring(0, mPowerWidgets.lastIndexOf("\\|"));
                if(mPowerWidgets.split("\\|").length <= 6)
                        Settings.System.putString(mContext.getContentResolver(), Settings.System.WIDGET_BUTTONS_TABLET, mPowerWidgets);
                else{
                        Toast.makeText(getActivity(), R.string.toggles_not_enough_space, Toast.LENGTH_SHORT).show();
                        refreshToggles();
                }
       }
    }

    @Override
    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
        mPowerWidgets = "";
        for(int i=0; i<mToggles.length; i++){
               if(mToggles[i].isChecked())
                      mPowerWidgets += TabletPowerWidgetUtil.KEY_TOGGLES[i] + TabletPowerWidgetUtil.BUTTON_DELIMITER;
        }
        if(mPowerWidgets.equals(""))
               mPowerWidgets = TabletPowerWidgetUtil.NO_TOGGLES;
        setWidgetButtons();
        return super.onPreferenceTreeClick(preferenceScreen, preference);
    }

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        return true;
    }

    public static class PowerWidgetOrder extends ListFragment
    {
        private static final String TAG = "PowerWidgetOrderActivity";

        private ListView mButtonList;
        private ButtonAdapter mButtonAdapter;
        View mContentView = null;
        Context mContext;

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            mContentView = inflater.inflate(R.layout.order_power_widget_buttons_activity, null);
            return mContentView;
        }

        /** Called when the activity is first created. */
        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            mContext = getActivity().getApplicationContext();

            mButtonList = getListView();
            ((TouchInterceptor) mButtonList).setDropListener(mDropListener);
            mButtonAdapter = new ButtonAdapter(mContext);
            setListAdapter(mButtonAdapter);
        }

        @Override
        public void onDestroy() {
            ((TouchInterceptor) mButtonList).setDropListener(null);
            setListAdapter(null);
            super.onDestroy();
        }

        @Override
        public void onResume() {
            super.onResume();
            // reload our buttons and invalidate the views for redraw
            mButtonAdapter.reloadButtons();
            mButtonList.invalidateViews();
        }

        private TouchInterceptor.DropListener mDropListener = new TouchInterceptor.DropListener() {
            public void drop(int from, int to) {
                // get the current button list
                ArrayList<String> buttons = TabletPowerWidgetUtil.getButtonListFromString(
                        TabletPowerWidgetUtil.getCurrentButtons(mContext));

                // move the button
                if (from < buttons.size()) {
                    String button = buttons.remove(from);

                    if (to <= buttons.size()) {
                        buttons.add(to, button);

                        // save our buttons
                        TabletPowerWidgetUtil.saveCurrentButtons(mContext,
                                TabletPowerWidgetUtil.getButtonStringFromList(buttons));

                        // tell our adapter/listview to reload
                        mButtonAdapter.reloadButtons();
                        mButtonList.invalidateViews();
                    }
                }
            }
        };

        private class ButtonAdapter extends BaseAdapter {
            private Context mContext;
            private Resources mSystemUIResources = null;
            private LayoutInflater mInflater;
            private ArrayList<TabletPowerWidgetUtil.ButtonInfo> mButtons;

            public ButtonAdapter(Context c) {
                mContext = c;
                mInflater = LayoutInflater.from(mContext);

                PackageManager pm = mContext.getPackageManager();
                if (pm != null) {
                    try {
                        mSystemUIResources = pm.getResourcesForApplication("com.android.systemui");
                    } catch (Exception e) {
                        mSystemUIResources = null;
                        Log.e(TAG, "Could not load SystemUI resources", e);
                    }
                }

                reloadButtons();
            }

            public void reloadButtons() {
                ArrayList<String> buttons = TabletPowerWidgetUtil.getButtonListFromString(
                        TabletPowerWidgetUtil.getCurrentButtons(mContext));

                mButtons = new ArrayList<TabletPowerWidgetUtil.ButtonInfo>();
                for (String button : buttons) {
                    if (TabletPowerWidgetUtil.BUTTONS.containsKey(button)) {
                        mButtons.add(TabletPowerWidgetUtil.BUTTONS.get(button));
                    }
                }
            }

            public int getCount() {
                return mButtons.size();
            }

            public Object getItem(int position) {
                return mButtons.get(position);
            }

            public long getItemId(int position) {
                return position;
            }

            public View getView(int position, View convertView, ViewGroup parent) {
                final View v;
                if (convertView == null) {
                    v = mInflater.inflate(R.layout.order_power_widget_button_list_item, null);
                } else {
                    v = convertView;
                }

                TabletPowerWidgetUtil.ButtonInfo button = mButtons.get(position);

                final TextView name = (TextView) v.findViewById(R.id.name);
                final ImageView icon = (ImageView) v.findViewById(R.id.icon);

                name.setText(button.getTitleResId());

                // assume no icon first
                icon.setVisibility(View.GONE);

                // attempt to load the icon for this button
                if (mSystemUIResources != null) {
                    int resId = mSystemUIResources.getIdentifier(button.getIcon(), null, null);
                    if (resId > 0) {
                        try {
                            Drawable d = mSystemUIResources.getDrawable(resId);
                            icon.setVisibility(View.VISIBLE);
                            icon.setImageDrawable(d);
                        } catch (Exception e) {
                            Log.e(TAG, "Error retrieving icon drawable", e);
                        }
                    }
                }

                return v;
            }
        }
    }

}
Loading