Home | History | Annotate | Download | only in setup
      1 /*
      2  * Copyright (C) 2014 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 
     17 package com.android.email.activity.setup;
     18 
     19 import android.os.Bundle;
     20 import android.view.LayoutInflater;
     21 import android.view.View;
     22 import android.view.ViewGroup;
     23 import android.widget.ArrayAdapter;
     24 import android.widget.CheckBox;
     25 import android.widget.Spinner;
     26 
     27 import com.android.email.R;
     28 import com.android.email.activity.UiUtilities;
     29 import com.android.email.service.EmailServiceUtils;
     30 import com.android.emailcommon.provider.Account;
     31 import com.android.emailcommon.provider.Policy;
     32 import com.android.emailcommon.service.SyncWindow;
     33 
     34 public class AccountSetupOptionsFragment extends AccountSetupFragment {
     35     private Spinner mCheckFrequencyView;
     36     private Spinner mSyncWindowView;
     37     private View mSyncwindowLabel;
     38     private CheckBox mNotifyView;
     39     private CheckBox mSyncContactsView;
     40     private CheckBox mSyncCalendarView;
     41     private CheckBox mSyncEmailView;
     42     private CheckBox mBackgroundAttachmentsView;
     43 
     44     /** Default sync window for new EAS accounts */
     45     private static final int SYNC_WINDOW_EAS_DEFAULT = SyncWindow.SYNC_WINDOW_1_WEEK;
     46 
     47     public interface Callback extends AccountSetupFragment.Callback {
     48 
     49     }
     50 
     51     public static AccountSetupOptionsFragment newInstance() {
     52         return new AccountSetupOptionsFragment();
     53     }
     54 
     55     @Override
     56     public View onCreateView(LayoutInflater inflater, ViewGroup container,
     57             Bundle savedInstanceState) {
     58         final View view = inflateTemplatedView(inflater, container,
     59                 R.layout.account_setup_options_fragment, R.string.account_setup_options_headline);
     60 
     61         mCheckFrequencyView = UiUtilities.getView(view, R.id.account_check_frequency);
     62         mSyncWindowView = UiUtilities.getView(view, R.id.account_sync_window);
     63         mNotifyView = UiUtilities.getView(view, R.id.account_notify);
     64         mNotifyView.setChecked(true);
     65         mSyncContactsView = UiUtilities.getView(view, R.id.account_sync_contacts);
     66         mSyncCalendarView = UiUtilities.getView(view, R.id.account_sync_calendar);
     67         mSyncEmailView = UiUtilities.getView(view, R.id.account_sync_email);
     68         mSyncEmailView.setChecked(true);
     69         mBackgroundAttachmentsView = UiUtilities.getView(view, R.id.account_background_attachments);
     70         mBackgroundAttachmentsView.setChecked(true);
     71         mSyncwindowLabel = UiUtilities.getView(view, R.id.account_sync_window_label);
     72 
     73         return view;
     74     }
     75 
     76     @Override
     77     public void onActivityCreated(Bundle savedInstanceState) {
     78         super.onActivityCreated(savedInstanceState);
     79 
     80         final View view = getView();
     81 
     82         final SetupDataFragment setupData =
     83                 ((SetupDataFragment.SetupDataContainer) getActivity()).getSetupData();
     84         final Account account = setupData.getAccount();
     85 
     86         final EmailServiceUtils.EmailServiceInfo serviceInfo =
     87                 setupData.getIncomingServiceInfo(getActivity());
     88 
     89         final CharSequence[] frequencyValues = serviceInfo.syncIntervals;
     90         final CharSequence[] frequencyEntries = serviceInfo.syncIntervalStrings;
     91 
     92         // Now create the array used by the sync interval Spinner
     93         final SpinnerOption[] checkFrequencies = new SpinnerOption[frequencyEntries.length];
     94         for (int i = 0; i < frequencyEntries.length; i++) {
     95             checkFrequencies[i] = new SpinnerOption(
     96                     Integer.valueOf(frequencyValues[i].toString()), frequencyEntries[i].toString());
     97         }
     98         final ArrayAdapter<SpinnerOption> checkFrequenciesAdapter =
     99                 new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_item,
    100                         checkFrequencies);
    101         checkFrequenciesAdapter
    102                 .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    103         mCheckFrequencyView.setAdapter(checkFrequenciesAdapter);
    104         SpinnerOption.setSpinnerOptionValue(mCheckFrequencyView, account.getSyncInterval());
    105 
    106         if (serviceInfo.offerLookback) {
    107             enableLookbackSpinner(account);
    108         }
    109 
    110         if (serviceInfo.syncContacts) {
    111             mSyncContactsView.setVisibility(View.VISIBLE);
    112             mSyncContactsView.setChecked(true);
    113             UiUtilities.setVisibilitySafe(view, R.id.account_sync_contacts_divider, View.VISIBLE);
    114         }
    115         if (serviceInfo.syncCalendar) {
    116             mSyncCalendarView.setVisibility(View.VISIBLE);
    117             mSyncCalendarView.setChecked(true);
    118             UiUtilities.setVisibilitySafe(view, R.id.account_sync_calendar_divider, View.VISIBLE);
    119         }
    120 
    121         if (!serviceInfo.offerAttachmentPreload) {
    122             mBackgroundAttachmentsView.setVisibility(View.GONE);
    123             UiUtilities.setVisibilitySafe(view, R.id.account_background_attachments_divider,
    124                     View.GONE);
    125         }
    126     }
    127 
    128     /**
    129      * Enable an additional spinner using the arrays normally handled by preferences
    130      */
    131     private void enableLookbackSpinner(Account account) {
    132         // Show everything
    133         mSyncWindowView.setVisibility(View.VISIBLE);
    134         mSyncwindowLabel.setVisibility(View.VISIBLE);
    135 
    136         // Generate spinner entries using XML arrays used by the preferences
    137         final CharSequence[] windowValues = getResources().getTextArray(
    138                 R.array.account_settings_mail_window_values);
    139         final CharSequence[] windowEntries = getResources().getTextArray(
    140                 R.array.account_settings_mail_window_entries);
    141 
    142         // Find a proper maximum for email lookback, based on policy (if we have one)
    143         int maxEntry = windowEntries.length;
    144         final Policy policy = account.mPolicy;
    145         if (policy != null) {
    146             final int maxLookback = policy.mMaxEmailLookback;
    147             if (maxLookback != 0) {
    148                 // Offset/Code   0      1      2      3      4        5
    149                 // Entries      auto, 1 day, 3 day, 1 week, 2 week, 1 month
    150                 // Lookback     N/A   1 day, 3 day, 1 week, 2 week, 1 month
    151                 // Since our test below is i < maxEntry, we must set maxEntry to maxLookback + 1
    152                 maxEntry = maxLookback + 1;
    153             }
    154         }
    155 
    156         // Now create the array used by the Spinner
    157         final SpinnerOption[] windowOptions = new SpinnerOption[maxEntry];
    158         int defaultIndex = -1;
    159         for (int i = 0; i < maxEntry; i++) {
    160             final int value = Integer.valueOf(windowValues[i].toString());
    161             windowOptions[i] = new SpinnerOption(value, windowEntries[i].toString());
    162             if (value == SYNC_WINDOW_EAS_DEFAULT) {
    163                 defaultIndex = i;
    164             }
    165         }
    166 
    167         final ArrayAdapter<SpinnerOption> windowOptionsAdapter =
    168                 new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_item,
    169                         windowOptions);
    170         windowOptionsAdapter
    171                 .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    172         mSyncWindowView.setAdapter(windowOptionsAdapter);
    173 
    174         SpinnerOption.setSpinnerOptionValue(mSyncWindowView, account.getSyncLookback());
    175         if (defaultIndex >= 0) {
    176             mSyncWindowView.setSelection(defaultIndex);
    177         }
    178     }
    179 
    180     public boolean getBackgroundAttachmentsValue() {
    181         return mBackgroundAttachmentsView.isChecked();
    182     }
    183 
    184     public Integer getCheckFrequencyValue() {
    185         return (Integer)((SpinnerOption)mCheckFrequencyView.getSelectedItem()).value;
    186     }
    187 
    188     /**
    189      * @return Sync window value or null if view is hidden
    190      */
    191     public Integer getAccountSyncWindowValue() {
    192         if (mSyncWindowView.getVisibility() != View.VISIBLE) {
    193             return null;
    194         }
    195         return (Integer)((SpinnerOption)mSyncWindowView.getSelectedItem()).value;
    196     }
    197 
    198     public boolean getSyncEmailValue() {
    199         return mSyncEmailView.isChecked();
    200     }
    201 
    202     public boolean getSyncCalendarValue() {
    203         return mSyncCalendarView.isChecked();
    204     }
    205 
    206     public boolean getSyncContactsValue() {
    207         return mSyncContactsView.isChecked();
    208     }
    209 
    210     public boolean getNotifyValue() {
    211         return mNotifyView.isChecked();
    212     }
    213 }
    214