WidgetConfiguration.java revision d3ced7cce9c576dc3a1c7a82ac021f3b2436ac68
1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.email.widget;
18
19import android.app.Activity;
20import android.appwidget.AppWidgetManager;
21import android.content.Intent;
22import android.os.Bundle;
23import android.util.Log;
24import android.view.View;
25import android.view.View.OnClickListener;
26
27import com.android.email.Email;
28import com.android.email.R;
29import com.android.email.activity.ShortcutPickerFragment.AccountShortcutPickerFragment;
30import com.android.email.activity.ShortcutPickerFragment.MailboxShortcutPickerFragment;
31import com.android.email.activity.ShortcutPickerFragment.PickerCallback;
32import com.android.emailcommon.Logging;
33import com.android.emailcommon.provider.Account;
34import com.android.emailcommon.provider.HostAuth;
35import com.android.emailcommon.utility.Utility;
36
37/**
38 * Activity to configure the Email widget.
39 */
40public class WidgetConfiguration extends Activity implements OnClickListener, PickerCallback {
41    /** ID of the newly created application widget */
42    private int mAppWidgetId;
43
44    @Override
45    protected void onCreate(Bundle savedInstanceState) {
46        super.onCreate(savedInstanceState);
47        setResult(RESULT_CANCELED);
48        if (Email.DEBUG) {
49            Log.i(Logging.LOG_TAG, "WidgetConfiguration initiated");
50        }
51        if (!AppWidgetManager.ACTION_APPWIDGET_CONFIGURE.equals(getIntent().getAction())) {
52            // finish() immediately if we aren't supposed to be here
53            finish();
54            return;
55        }
56
57        Intent intent = getIntent();
58        Bundle extras = intent.getExtras();
59        if (extras != null) {
60            mAppWidgetId = extras.getInt(
61                    AppWidgetManager.EXTRA_APPWIDGET_ID,
62                    AppWidgetManager.INVALID_APPWIDGET_ID);
63        }
64
65        // Set handler for the "cancel" button
66        setContentView(R.layout.account_shortcut_picker);
67        findViewById(R.id.cancel).setOnClickListener(this);
68
69        if (getFragmentManager().findFragmentById(R.id.shortcut_list) == null) {
70            // Load the account picking fragment if we haven't created a fragment yet
71            // NOTE: do not add to history as this will be the first fragment in the flow
72            AccountShortcutPickerFragment fragment = new AccountShortcutPickerFragment();
73            getFragmentManager().beginTransaction().add(R.id.shortcut_list, fragment).commit();
74        }
75    }
76
77    @Override
78    public void onClick(View v) {
79        switch (v.getId()) {
80            case R.id.cancel:
81                finish();
82                break;
83        }
84    }
85
86    @Override
87    public Integer buildFilter(Account account) {
88        if (!Account.isNormalAccount(account.mId)) {
89            return MailboxShortcutPickerFragment.FILTER_INBOX_ONLY
90                    | MailboxShortcutPickerFragment.FILTER_ALLOW_UNREAD;
91        }
92
93        // We can't synced non-Inbox mailboxes for non-EAS accounts, so they don't sync
94        // right now and it doesn't make sense to put them in a widget.
95        return HostAuth.SCHEME_EAS.equals(account.getProtocol(this))
96                ? MailboxShortcutPickerFragment.FILTER_ALLOW_ALL
97                : MailboxShortcutPickerFragment.FILTER_INBOX_ONLY;
98    }
99
100    @Override
101    public void onSelected(Account account, long mailboxId) {
102        setupWidget(account, mailboxId);
103        finish();
104    }
105
106    @Override
107    public void onMissingData(boolean missingAccount, boolean missingMailbox) {
108        if (Email.DEBUG) {
109            Log.i(Logging.LOG_TAG, "WidgetConfiguration exited abnormally. Probably no accounts.");
110        }
111        Utility.showToast(this, R.string.widget_no_accounts);
112        finish();
113    }
114
115    private void setupWidget(Account account, long mailboxId) {
116        // save user selected preferences & create initial widget view
117        WidgetManager.saveWidgetPrefs(this, mAppWidgetId, account.mId, mailboxId);
118        WidgetManager.getInstance().getOrCreateWidget(this, mAppWidgetId).start();
119
120        // Return "OK" result; make sure we pass along the original widget ID
121        Intent resultValue = new Intent();
122        resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
123        setResult(RESULT_OK, resultValue);
124    }
125}
126