Home | History | Annotate | Download | only in ui
      1 /*
      2  * Copyright (C) 2012 Google Inc.
      3  * Licensed to The Android Open Source Project.
      4  *
      5  * Licensed under the Apache License, Version 2.0 (the "License");
      6  * you may not use this file except in compliance with the License.
      7  * You may obtain a copy of the License at
      8  *
      9  *      http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  * Unless required by applicable law or agreed to in writing, software
     12  * distributed under the License is distributed on an "AS IS" BASIS,
     13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  * See the License for the specific language governing permissions and
     15  * limitations under the License.
     16  */
     17 
     18 package com.android.mail.ui;
     19 
     20 import android.app.Fragment;
     21 import android.app.LoaderManager;
     22 import android.content.CursorLoader;
     23 import android.content.Intent;
     24 import android.content.Loader;
     25 import android.database.Cursor;
     26 import android.os.Bundle;
     27 import android.provider.Settings;
     28 import android.view.LayoutInflater;
     29 import android.view.View;
     30 import android.view.ViewGroup;
     31 
     32 import com.android.mail.R;
     33 import com.android.mail.providers.Account;
     34 import com.android.mail.providers.UIProvider.SyncStatus;
     35 
     36 public class WaitFragment extends Fragment implements View.OnClickListener,
     37         LoaderManager.LoaderCallbacks<Cursor> {
     38     // Keys used to pass data to {@link WaitFragment}.
     39     private static final String ACCOUNT_KEY = "account";
     40 
     41     private static final String EXPECTING_MESSAGES_KEY = "expectingMessages";
     42 
     43     private static final int MANUAL_SYNC_LOADER = 0;
     44 
     45 
     46     private Account mAccount;
     47 
     48     private LayoutInflater mInflater;
     49 
     50     private boolean mExpectingMessages;
     51 
     52     // Public no-args constructor needed for fragment re-instantiation
     53     public WaitFragment() {}
     54 
     55     public static WaitFragment newInstance(Account account, boolean expectingMessages) {
     56         WaitFragment fragment = new WaitFragment();
     57 
     58         final Bundle args = new Bundle();
     59         args.putParcelable(ACCOUNT_KEY, account);
     60         args.putBoolean(EXPECTING_MESSAGES_KEY, expectingMessages);
     61         fragment.setArguments(args);
     62         return fragment;
     63     }
     64 
     65     @Override
     66     public void onCreate(Bundle savedInstanceState) {
     67         super.onCreate(savedInstanceState);
     68 
     69         Bundle args = getArguments();
     70         mAccount = (Account)args.getParcelable(ACCOUNT_KEY);
     71         mExpectingMessages = args.getBoolean(EXPECTING_MESSAGES_KEY, false);
     72     }
     73 
     74     @Override
     75     public View onCreateView(
     76             LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
     77         mInflater = inflater;
     78         ViewGroup wrapper = (ViewGroup) mInflater
     79                 .inflate(R.layout.wait_container, container, false);
     80         wrapper.addView(getContent(wrapper));
     81         return wrapper;
     82     }
     83 
     84     private View getContent(ViewGroup root) {
     85         final View view;
     86         if (mAccount != null
     87                 && (mAccount.syncStatus & SyncStatus.MANUAL_SYNC_REQUIRED)
     88                     == SyncStatus.MANUAL_SYNC_REQUIRED) {
     89             // A manual sync is required
     90             view = mInflater.inflate(R.layout.wait_for_manual_sync, root, false);
     91 
     92             view.findViewById(R.id.manual_sync).setOnClickListener(this);
     93             view.findViewById(R.id.change_sync_settings).setOnClickListener(this);
     94 
     95         } else if (mExpectingMessages) {
     96             view = mInflater.inflate(R.layout.loading_messages, root, false);
     97         } else {
     98             view = mInflater.inflate(R.layout.wait_default, root, false);
     99         }
    100 
    101         return view;
    102     }
    103 
    104     public void updateAccount(Account account) {
    105         mAccount = account;
    106         ViewGroup parent = (ViewGroup) getView();
    107         if (parent != null) {
    108             parent.removeAllViews();
    109             parent.addView(getContent(parent));
    110         }
    111     }
    112 
    113     Account getAccount() {
    114         return mAccount;
    115     }
    116 
    117     @Override
    118     public void onClick(View v) {
    119         final int id = v.getId();
    120 
    121         if (id == R.id.change_sync_settings) {
    122             Intent intent = new Intent(Settings.ACTION_SYNC_SETTINGS);
    123             intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    124             startActivity(intent);
    125         } else if (id == R.id.manual_sync) {
    126             if (mAccount != null && mAccount.manualSyncUri != null) {
    127                 getLoaderManager().initLoader(MANUAL_SYNC_LOADER, null, this);
    128             }
    129         }
    130     }
    131 
    132     @Override
    133     public Loader<Cursor> onCreateLoader(int id, Bundle bundle) {
    134         // Tell the account to sync manually. As a side effect, updates will come into the
    135         // controller for this fragment and update it as necessary.
    136         return new CursorLoader(getActivity(), mAccount.manualSyncUri, null, null, null, null);
    137     }
    138 
    139     @Override
    140     public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
    141         // Do nothing.
    142     }
    143 
    144     @Override
    145     public void onLoaderReset(Loader<Cursor> arg0) {
    146         // Do nothing.
    147     }
    148 }