blob: dd9cbab47264834312d0d24f725efc489e591d0a [file] [log] [blame]
Dmitri Plotnikov8b826462010-11-17 14:52:24 -08001/*
2 * Copyright (C) 2010 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 */
16package com.android.contacts.list;
17
Brian Attwella3e498a2014-10-27 10:46:24 -070018import android.app.Fragment;
Wenyi Wang9bc9ba82015-11-17 19:37:33 -080019import android.content.Context;
Wenyi Wang46dff682016-09-15 18:10:33 -070020import android.content.Intent;
Wenyi Wangf74276c2015-11-30 15:41:58 -080021import android.content.res.Configuration;
Wenyi Wangb0cfae52015-09-28 17:17:40 -070022import android.graphics.PorterDuff;
Dmitri Plotnikov8b826462010-11-17 14:52:24 -080023import android.os.Bundle;
Wenyi Wang46dff682016-09-15 18:10:33 -070024import android.provider.ContactsContract.ProviderStatus;
Wenyi Wangb0cfae52015-09-28 17:17:40 -070025import android.support.v4.content.ContextCompat;
Dmitri Plotnikov8b826462010-11-17 14:52:24 -080026import android.view.Gravity;
27import android.view.LayoutInflater;
28import android.view.View;
29import android.view.View.OnClickListener;
30import android.view.ViewGroup;
31import android.widget.Button;
Wenyi Wangb0cfae52015-09-28 17:17:40 -070032import android.widget.ImageView;
yaolu189036a2016-07-29 15:50:28 -070033import android.widget.LinearLayout;
Dmitri Plotnikov8b826462010-11-17 14:52:24 -080034import android.widget.ProgressBar;
35import android.widget.TextView;
36
Chiao Chenge0b2f1e2012-06-12 13:07:56 -070037import com.android.contacts.R;
Wenyi Wangbb229242016-05-25 16:04:13 -070038import com.android.contacts.common.compat.ProviderStatusCompat;
James Laskey1e2102f2016-09-19 10:09:08 -070039import com.android.contacts.common.interactions.ImportDialogFragment;
Wenyi Wang46dff682016-09-15 18:10:33 -070040import com.android.contacts.common.util.ImplicitIntentsUtil;
Chiao Chenge0b2f1e2012-06-12 13:07:56 -070041
Dmitri Plotnikov8b826462010-11-17 14:52:24 -080042/**
43 * Fragment shown when contacts are unavailable. It contains provider status
44 * messaging as well as instructions for the user.
45 */
Brian Attwella3e498a2014-10-27 10:46:24 -070046public class ContactsUnavailableFragment extends Fragment implements OnClickListener {
Dmitri Plotnikov8b826462010-11-17 14:52:24 -080047
Dmitri Plotnikov8b826462010-11-17 14:52:24 -080048 private View mView;
Wenyi Wangb0cfae52015-09-28 17:17:40 -070049 private ImageView mImageView;
Dmitri Plotnikov8b826462010-11-17 14:52:24 -080050 private TextView mMessageView;
Dmitri Plotnikov8b826462010-11-17 14:52:24 -080051 private Button mAddAccountButton;
52 private Button mImportContactsButton;
Dmitri Plotnikov8b826462010-11-17 14:52:24 -080053 private ProgressBar mProgress;
Wenyi Wangf74276c2015-11-30 15:41:58 -080054 private View mButtonsContainer;
Dmitri Plotnikov8b826462010-11-17 14:52:24 -080055
Brian Attwellc3d202c2015-01-08 15:01:03 -080056 private Integer mProviderStatus;
Makoto Onukid8fa7162012-05-16 13:45:48 -070057
Dmitri Plotnikov8b826462010-11-17 14:52:24 -080058 @Override
59 public View onCreateView(
60 LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
61 mView = inflater.inflate(R.layout.contacts_unavailable_fragment, null);
Wenyi Wangb0cfae52015-09-28 17:17:40 -070062
63 mImageView = (ImageView) mView.findViewById(R.id.empty_image);
yaolu189036a2016-07-29 15:50:28 -070064 final LinearLayout.LayoutParams layoutParams =
65 (LinearLayout.LayoutParams) mImageView.getLayoutParams();
66 final int screenHeight = getResources().getDisplayMetrics().heightPixels;
67 final int topMargin =
68 screenHeight / getResources()
69 .getInteger(R.integer.contacts_no_account_empty_image_margin_divisor)
70 - getResources()
71 .getDimensionPixelSize(R.dimen.contacts_no_account_empty_image_offset);
72 layoutParams.setMargins(0, topMargin, 0, 0);
73 layoutParams.gravity = Gravity.CENTER_HORIZONTAL;
74 mImageView.setLayoutParams(layoutParams);
Wenyi Wangb0cfae52015-09-28 17:17:40 -070075
Dmitri Plotnikov8b826462010-11-17 14:52:24 -080076 mMessageView = (TextView) mView.findViewById(R.id.message);
Dmitri Plotnikov8b826462010-11-17 14:52:24 -080077 mAddAccountButton = (Button) mView.findViewById(R.id.add_account_button);
78 mAddAccountButton.setOnClickListener(this);
Wenyi Wangb0cfae52015-09-28 17:17:40 -070079 mAddAccountButton.getBackground().setColorFilter(ContextCompat.getColor(getContext(), R
Wenyi Wangf74276c2015-11-30 15:41:58 -080080 .color.primary_color), PorterDuff.Mode.SRC_ATOP);
Dmitri Plotnikov8b826462010-11-17 14:52:24 -080081 mImportContactsButton = (Button) mView.findViewById(R.id.import_contacts_button);
82 mImportContactsButton.setOnClickListener(this);
Wenyi Wangb0cfae52015-09-28 17:17:40 -070083 mImportContactsButton.getBackground().setColorFilter(ContextCompat.getColor(getContext(),
Wenyi Wangf74276c2015-11-30 15:41:58 -080084 R.color.primary_color), PorterDuff.Mode.SRC_ATOP);
Dmitri Plotnikov8b826462010-11-17 14:52:24 -080085 mProgress = (ProgressBar) mView.findViewById(R.id.progress);
Makoto Onukid8fa7162012-05-16 13:45:48 -070086
Wenyi Wangf74276c2015-11-30 15:41:58 -080087 if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
88 mButtonsContainer = mView.findViewById(R.id.buttons_container);
89 }
90
Makoto Onukid8fa7162012-05-16 13:45:48 -070091 if (mProviderStatus != null) {
92 updateStatus(mProviderStatus);
93 }
94
Dmitri Plotnikov8b826462010-11-17 14:52:24 -080095 return mView;
96 }
97
Brian Attwellc3d202c2015-01-08 15:01:03 -080098 public void updateStatus(int providerStatus) {
Makoto Onukid8fa7162012-05-16 13:45:48 -070099 mProviderStatus = providerStatus;
100 if (mView == null) {
101 // The view hasn't been inflated yet.
102 return;
103 }
Wenyi Wang2795a882015-11-23 16:26:12 -0800104 if (providerStatus == ProviderStatusCompat.STATUS_EMPTY) {
105 updateViewsForEmptyStatus();
yaolu8b3a1d82016-10-18 09:35:12 -0700106 } else if (providerStatus == ProviderStatusCompat.STATUS_BUSY
107 || providerStatus == ProviderStatusCompat.STATUS_CHANGING_LOCALE) {
108 updateViewsForBusyStatus();
Dmitri Plotnikov8b826462010-11-17 14:52:24 -0800109 }
110 }
111
Wenyi Wang2795a882015-11-23 16:26:12 -0800112 /**
113 * Update views in the fragment when provider status is empty.
114 */
115 private void updateViewsForEmptyStatus() {
yaoluc67c7dc2016-10-17 12:19:37 -0700116 mMessageView.setVisibility(View.VISIBLE);
Wenyi Wang46dff682016-09-15 18:10:33 -0700117 updateButtonVisibility(View.VISIBLE);
Wenyi Wang2795a882015-11-23 16:26:12 -0800118 mProgress.setVisibility(View.GONE);
119 }
120
121 /**
122 * Update views in the fragment when provider status is busy.
Wenyi Wang2795a882015-11-23 16:26:12 -0800123 */
yaolu8b3a1d82016-10-18 09:35:12 -0700124 private void updateViewsForBusyStatus() {
125 mMessageView.setVisibility(View.GONE);
yaolu189036a2016-07-29 15:50:28 -0700126 mImageView.setVisibility(View.GONE);
Wenyi Wang46dff682016-09-15 18:10:33 -0700127 updateButtonVisibility(View.GONE);
Wenyi Wang2795a882015-11-23 16:26:12 -0800128 mProgress.setVisibility(View.VISIBLE);
129 }
130
Dmitri Plotnikov8b826462010-11-17 14:52:24 -0800131 @Override
132 public void onClick(View v) {
Dmitri Plotnikov8b826462010-11-17 14:52:24 -0800133 switch (v.getId()) {
Dmitri Plotnikov8b826462010-11-17 14:52:24 -0800134 case R.id.add_account_button:
Wenyi Wang46dff682016-09-15 18:10:33 -0700135 final Intent intent = ImplicitIntentsUtil.getIntentForAddingGoogleAccount();
136 ImplicitIntentsUtil.startActivityOutsideApp(getActivity(), intent);
Dmitri Plotnikov8b826462010-11-17 14:52:24 -0800137 break;
138 case R.id.import_contacts_button:
Marcus Hagerott02f5dba2016-10-18 12:34:57 -0700139 ImportDialogFragment.show(getFragmentManager());
Dmitri Plotnikov8b826462010-11-17 14:52:24 -0800140 break;
Dmitri Plotnikov8b826462010-11-17 14:52:24 -0800141 }
142 }
Wenyi Wangf74276c2015-11-30 15:41:58 -0800143
Wenyi Wang46dff682016-09-15 18:10:33 -0700144 private void updateButtonVisibility(int visibility) {
Wenyi Wangf74276c2015-11-30 15:41:58 -0800145 if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
146 mAddAccountButton.setVisibility(visibility);
147 mImportContactsButton.setVisibility(visibility);
148 mButtonsContainer.setVisibility(visibility);
149 } else {
150 mAddAccountButton.setVisibility(visibility);
151 mImportContactsButton.setVisibility(visibility);
152 }
153 }
154
Wenyi Wang9bc9ba82015-11-17 19:37:33 -0800155 @Override
156 public Context getContext() {
157 return getActivity();
158 }
Dmitri Plotnikov8b826462010-11-17 14:52:24 -0800159}