blob: d1820c85cb02d32e9917aa98e71e61f51f37013d [file] [log] [blame]
/*
* Copyright (C) 2012 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.common.util;
import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import com.android.contacts.common.R;
import com.android.contacts.common.list.AccountFilterActivity;
import com.android.contacts.common.list.ContactListFilter;
import com.android.contacts.common.list.ContactListFilterController;
/**
* Utility class for account filter manipulation.
*/
public class AccountFilterUtil {
private static final String TAG = AccountFilterUtil.class.getSimpleName();
/**
* Find TextView with the id "account_filter_header" and set correct text for the account
* filter header.
*
* @param filterContainer View containing TextView with id "account_filter_header"
* @return true when header text is set in the call. You may use this for conditionally
* showing or hiding this entire view.
*/
public static boolean updateAccountFilterTitleForPeople(View filterContainer,
ContactListFilter filter, boolean showTitleForAllAccounts) {
return updateAccountFilterTitle(filterContainer, filter, showTitleForAllAccounts, false);
}
/**
* Similar to {@link #updateAccountFilterTitleForPeople(View, ContactListFilter, boolean,
* boolean)}, but for Phone UI.
*/
public static boolean updateAccountFilterTitleForPhone(View filterContainer,
ContactListFilter filter, boolean showTitleForAllAccounts) {
return updateAccountFilterTitle(
filterContainer, filter, showTitleForAllAccounts, true);
}
private static boolean updateAccountFilterTitle(View filterContainer,
ContactListFilter filter, boolean showTitleForAllAccounts,
boolean forPhone) {
final Context context = filterContainer.getContext();
final TextView headerTextView = (TextView)
filterContainer.findViewById(R.id.account_filter_header);
boolean textWasSet = false;
if (filter != null) {
if (forPhone) {
if (filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
if (showTitleForAllAccounts) {
headerTextView.setText(R.string.list_filter_phones);
textWasSet = true;
}
} else if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
headerTextView.setText(context.getString(
R.string.listAllContactsInAccount, filter.accountName));
textWasSet = true;
} else if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
headerTextView.setText(R.string.listCustomView);
textWasSet = true;
} else {
Log.w(TAG, "Filter type \"" + filter.filterType + "\" isn't expected.");
}
} else {
if (filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
if (showTitleForAllAccounts) {
headerTextView.setText(R.string.list_filter_all_accounts);
textWasSet = true;
}
} else if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
headerTextView.setText(context.getString(
R.string.listAllContactsInAccount, filter.accountName));
textWasSet = true;
} else if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
headerTextView.setText(R.string.listCustomView);
textWasSet = true;
} else if (filter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
headerTextView.setText(R.string.listSingleContact);
textWasSet = true;
} else {
Log.w(TAG, "Filter type \"" + filter.filterType + "\" isn't expected.");
}
}
} else {
Log.w(TAG, "Filter is null.");
}
return textWasSet;
}
/**
* Launches account filter setting Activity using
* {@link Activity#startActivityForResult(Intent, int)}.
*
* @param activity
* @param requestCode requestCode for {@link Activity#startActivityForResult(Intent, int)}
* @param currentFilter currently-selected filter, so that it can be displayed as activated.
*/
public static void startAccountFilterActivityForResult(
Activity activity, int requestCode, ContactListFilter currentFilter) {
final Intent intent = new Intent(activity, AccountFilterActivity.class);
intent.putExtra(AccountFilterActivity.KEY_EXTRA_CURRENT_FILTER, currentFilter);
activity.startActivityForResult(intent, requestCode);
}
/**
* Very similar to
* {@link #startAccountFilterActivityForResult(Activity, int, ContactListFilter)}
* but uses Fragment instead.
*/
public static void startAccountFilterActivityForResult(
Fragment fragment, int requestCode, ContactListFilter currentFilter) {
final Activity activity = fragment.getActivity();
if (activity != null) {
final Intent intent = new Intent(activity, AccountFilterActivity.class);
intent.putExtra(AccountFilterActivity.KEY_EXTRA_CURRENT_FILTER, currentFilter);
fragment.startActivityForResult(intent, requestCode);
} else {
Log.w(TAG, "getActivity() returned null. Ignored");
}
}
/**
* Useful method to handle onActivityResult() for
* {@link #startAccountFilterActivityForResult(Activity, int)} or
* {@link #startAccountFilterActivityForResult(Fragment, int)}.
*
* This will update filter via a given ContactListFilterController.
*/
public static void handleAccountFilterResult(
ContactListFilterController filterController, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
final ContactListFilter filter = (ContactListFilter)
data.getParcelableExtra(AccountFilterActivity.KEY_EXTRA_CONTACT_LIST_FILTER);
if (filter == null) {
return;
}
if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
filterController.selectCustomFilter();
} else {
filterController.setContactListFilter(filter, true);
}
}
}
}