summaryrefslogtreecommitdiffstats
path: root/packages/SystemUI/src/com/android/systemui/statusbar/powerwidget/WimaxButton.java
blob: a68f7a382a9a547ebd500504ec922061debcda32 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/*
 * Copyright (C) 2011 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.android.systemui.statusbar.powerwidget;

import com.android.systemui.R;

import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wimax.WimaxHelper;
import android.net.wimax.WimaxManagerConstants;
import android.os.AsyncTask;
import android.util.Log;

public class WimaxButton extends PowerButton {

    private static final StateTracker sWimaxState = new WimaxStateTracker();

    /**
     * Subclass of StateTracker to get/set WiMAX state.
     */
    private static final class WimaxStateTracker extends StateTracker {
        @Override
        public int getActualState(Context context) {
            if (WimaxHelper.isWimaxSupported(context)) {
                return wimaxStateToFiveState(WimaxHelper.getWimaxState(context));
            }
            return STATE_UNKNOWN;
        }

        @Override
        protected void requestStateChange(final Context context,
                final boolean desiredState) {
            if (!WimaxHelper.isWimaxSupported(context)) {
                Log.e(TAG, "WiMAX is not supported");
                return;
            }

            // Actually request the wifi change and persistent
            // settings write off the UI thread, as it can take a
            // user-noticeable amount of time, especially if there's
            // disk contention.
            new AsyncTask<Void, Void, Void>() {
                @Override
                protected Void doInBackground(Void... args) {
                    WimaxHelper.setWimaxEnabled(context, desiredState);
                    return null;
                }
            }.execute();
        }

        @Override
        public void onActualStateChange(Context context, Intent intent) {
            String action = intent.getAction();
            int wimaxState;

            if (action.equals(WimaxManagerConstants.WIMAX_ENABLED_STATUS_CHANGED)) {
                wimaxState = intent.getIntExtra(WimaxManagerConstants.EXTRA_WIMAX_STATUS,
                                                WimaxManagerConstants.WIMAX_STATUS_UNKNOWN);
            } else if (action.equals(WimaxManagerConstants.WIMAX_ENABLED_CHANGED_ACTION)) {
                wimaxState = intent.getIntExtra(WimaxManagerConstants.CURRENT_WIMAX_ENABLED_STATE,
                                                WimaxManagerConstants.WIMAX_ENABLED_STATE_UNKNOWN);
            } else {
                return;
            }
            int widgetState = wimaxStateToFiveState(wimaxState);
            setCurrentState(context, widgetState);
        }

        /**
         * Converts WimaxController's state values into our
         * WiMAX-common state values.
         * Also compatible with WimaxManager status values.
         */
        private static int wimaxStateToFiveState(int wimaxState) {
            switch (wimaxState) {
                case WimaxManagerConstants.WIMAX_ENABLED_STATE_DISABLED:
                    return STATE_DISABLED;
                case WimaxManagerConstants.WIMAX_ENABLED_STATE_ENABLED:
                    return STATE_ENABLED;
                case WimaxManagerConstants.WIMAX_ENABLED_STATE_ENABLING:
                    return STATE_TURNING_ON;
                case WimaxManagerConstants.WIMAX_ENABLED_STATE_DISABLING:
                    return STATE_TURNING_OFF;
                default:
                    return STATE_UNKNOWN;
            }
        }
    }

    public WimaxButton() { mType = BUTTON_WIMAX; }

    @Override
    protected void updateState(Context context) {
        mState = sWimaxState.getTriState(context);
        switch (mState) {
            case STATE_DISABLED:
                mIcon = R.drawable.stat_wimax_off;
                break;
            case STATE_ENABLED:
                mIcon = R.drawable.stat_wimax_on;
                break;
            case STATE_INTERMEDIATE:
                // In the transitional state, the bottom green bar
                // shows the tri-state (on, off, transitioning), but
                // the top dark-gray-or-bright-white logo shows the
                // user's intent. This is much easier to see in
                // sunlight.
                if (sWimaxState.isTurningOn()) {
                    mIcon = R.drawable.stat_wimax_on;
                } else {
                    mIcon = R.drawable.stat_wimax_off;
                }
                break;
        }
    }

    @Override
    protected void toggleState(Context context) {
        sWimaxState.toggleState(context);
    }

    @Override
    protected boolean handleLongClick(Context context) {
        Intent intent = new Intent("android.settings.WIMAX_SETTINGS");
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
        return true;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        sWimaxState.onActualStateChange(context, intent);
    }

    @Override
    protected IntentFilter getBroadcastIntentFilter() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(WimaxManagerConstants.WIMAX_ENABLED_STATUS_CHANGED);
        filter.addAction(WimaxManagerConstants.WIMAX_ENABLED_CHANGED_ACTION);
        return filter;
    }
}