/* * Copyright (C) 2010 The Android Open Source 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.contacts.list; import com.android.contacts.R; import android.app.Fragment; import android.os.Bundle; import android.provider.ContactsContract.ProviderStatus; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.ProgressBar; import android.widget.TextView; /** * Fragment shown when contacts are unavailable. It contains provider status * messaging as well as instructions for the user. */ public class ContactsUnavailableFragment extends Fragment implements OnClickListener { private ProviderStatusLoader mProviderStatusLoader; private View mView; private TextView mMessageView; private TextView mSecondaryMessageView; private Button mCreateContactButton; private Button mAddAccountButton; private Button mImportContactsButton; private Button mUninstallAppsButton; private Button mRetryUpgradeButton; private ProgressBar mProgress; private int mNoContactsMsgResId = -1; private int mNSecNoContactsMsgResId = -1; private OnContactsUnavailableActionListener mListener; @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mView = inflater.inflate(R.layout.contacts_unavailable_fragment, null); mMessageView = (TextView) mView.findViewById(R.id.message); mSecondaryMessageView = (TextView) mView.findViewById(R.id.secondary_message); mCreateContactButton = (Button) mView.findViewById(R.id.create_contact_button); mCreateContactButton.setOnClickListener(this); mAddAccountButton = (Button) mView.findViewById(R.id.add_account_button); mAddAccountButton.setOnClickListener(this); mImportContactsButton = (Button) mView.findViewById(R.id.import_contacts_button); mImportContactsButton.setOnClickListener(this); mUninstallAppsButton = (Button) mView.findViewById(R.id.import_failure_uninstall_button); mUninstallAppsButton.setOnClickListener(this); mRetryUpgradeButton = (Button) mView.findViewById(R.id.import_failure_retry_button); mRetryUpgradeButton.setOnClickListener(this); mProgress = (ProgressBar) mView.findViewById(R.id.progress); update(); return mView; } public void setOnContactsUnavailableActionListener( OnContactsUnavailableActionListener listener) { mListener = listener; } public void setProviderStatusLoader(ProviderStatusLoader loader) { mProviderStatusLoader = loader; } public void update() { int providerStatus = mProviderStatusLoader.getProviderStatus(); switch (providerStatus) { case ProviderStatus.STATUS_NO_ACCOUNTS_NO_CONTACTS: setMessageText(mNoContactsMsgResId, mNSecNoContactsMsgResId); mCreateContactButton.setVisibility(View.VISIBLE); mAddAccountButton.setVisibility(View.VISIBLE); mImportContactsButton.setVisibility(View.VISIBLE); mUninstallAppsButton.setVisibility(View.GONE); mRetryUpgradeButton.setVisibility(View.GONE); mProgress.setVisibility(View.GONE); break; case ProviderStatus.STATUS_CHANGING_LOCALE: mMessageView.setText(R.string.locale_change_in_progress); mMessageView.setGravity(Gravity.CENTER_HORIZONTAL); mMessageView.setVisibility(View.VISIBLE); mCreateContactButton.setVisibility(View.GONE); mAddAccountButton.setVisibility(View.GONE); mImportContactsButton.setVisibility(View.GONE); mUninstallAppsButton.setVisibility(View.GONE); mRetryUpgradeButton.setVisibility(View.GONE); mProgress.setVisibility(View.VISIBLE); break; case ProviderStatus.STATUS_UPGRADING: mMessageView.setText(R.string.upgrade_in_progress); mMessageView.setGravity(Gravity.CENTER_HORIZONTAL); mMessageView.setVisibility(View.VISIBLE); mCreateContactButton.setVisibility(View.GONE); mAddAccountButton.setVisibility(View.GONE); mImportContactsButton.setVisibility(View.GONE); mUninstallAppsButton.setVisibility(View.GONE); mRetryUpgradeButton.setVisibility(View.GONE); mProgress.setVisibility(View.VISIBLE); break; case ProviderStatus.STATUS_UPGRADE_OUT_OF_MEMORY: String message = getResources().getString(R.string.upgrade_out_of_memory, new Object[] { mProviderStatusLoader.getProviderStatusData() }); mMessageView.setText(message); mMessageView.setGravity(Gravity.LEFT); mMessageView.setVisibility(View.VISIBLE); mCreateContactButton.setVisibility(View.GONE); mAddAccountButton.setVisibility(View.GONE); mImportContactsButton.setVisibility(View.GONE); mUninstallAppsButton.setVisibility(View.VISIBLE); mRetryUpgradeButton.setVisibility(View.VISIBLE); mProgress.setVisibility(View.GONE); break; } } @Override public void onClick(View v) { if (mListener == null) { return; } switch (v.getId()) { case R.id.create_contact_button: mListener.onCreateNewContactAction(); break; case R.id.add_account_button: mListener.onAddAccountAction(); break; case R.id.import_contacts_button: mListener.onImportContactsFromFileAction(); break; case R.id.import_failure_uninstall_button: mListener.onFreeInternalStorageAction(); break; case R.id.import_failure_retry_button: mProviderStatusLoader.retryUpgrade(); break; } } /** * Set the message to be shown if no data is available for the selected tab * * @param resId - String resource ID of the message , -1 means view will not be visible */ public void setMessageText(int resId, int secResId) { mNoContactsMsgResId = resId; mNSecNoContactsMsgResId = secResId; if (mMessageView != null && mProviderStatusLoader.getProviderStatus() == ProviderStatus.STATUS_NO_ACCOUNTS_NO_CONTACTS) { if (resId != -1) { mMessageView.setText(mNoContactsMsgResId); mMessageView.setGravity(Gravity.CENTER_HORIZONTAL); mMessageView.setVisibility(View.VISIBLE); if (secResId != -1) { mSecondaryMessageView.setText(mNSecNoContactsMsgResId); mSecondaryMessageView.setGravity(Gravity.CENTER_HORIZONTAL); mSecondaryMessageView.setVisibility(View.VISIBLE); } else { mSecondaryMessageView.setVisibility(View.INVISIBLE); } } else { mSecondaryMessageView.setVisibility(View.GONE); mMessageView.setVisibility(View.GONE); } } } }