diff options
Diffstat (limited to 'src/com/android')
-rw-r--r-- | src/com/android/dialer/DialtactsActivity.java | 10 | ||||
-rw-r--r-- | src/com/android/dialer/list/RegularSearchFragment.java | 38 | ||||
-rw-r--r-- | src/com/android/dialer/list/SearchFragment.java | 177 | ||||
-rw-r--r-- | src/com/android/dialer/list/SmartDialSearchFragment.java | 184 |
4 files changed, 186 insertions, 223 deletions
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java index 2557552a9..ca4e78ec2 100644 --- a/src/com/android/dialer/DialtactsActivity.java +++ b/src/com/android/dialer/DialtactsActivity.java @@ -916,6 +916,14 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O AnalyticsUtil.sendScreenView(mDialpadFragment); ft.commit(); + if (isInSearchUi()) { + if (mInRegularSearch) { + mRegularSearchFragment.setupEmptyView(); + } else { + mSmartDialSearchFragment.setupEmptyView(); + } + } + if (animate) { mFloatingActionButtonController.scaleOut(); } else { @@ -984,9 +992,11 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O if (mInRegularSearch) { mRegularSearchFragment.updateCallCreditInfo(); mRegularSearchFragment.updateCoachMarkDrawable(); + mRegularSearchFragment.setupEmptyView(); } else { mSmartDialSearchFragment.updateCallCreditInfo(); mSmartDialSearchFragment.updateCoachMarkDrawable(); + mSmartDialSearchFragment.setupEmptyView(); } } } diff --git a/src/com/android/dialer/list/RegularSearchFragment.java b/src/com/android/dialer/list/RegularSearchFragment.java index bc44ab555..3927af41d 100644 --- a/src/com/android/dialer/list/RegularSearchFragment.java +++ b/src/com/android/dialer/list/RegularSearchFragment.java @@ -16,16 +16,13 @@ package com.android.dialer.list; import static android.Manifest.permission.ACCESS_FINE_LOCATION; -import static android.Manifest.permission.READ_CONTACTS; -import android.app.Activity; import android.content.pm.PackageManager; import android.view.LayoutInflater; import android.view.ViewGroup; import com.android.contacts.common.list.ContactEntryListAdapter; import com.android.contacts.common.list.PinnedHeaderListView; -import com.android.contacts.common.util.PermissionsUtil; import com.android.contacts.commonbind.analytics.AnalyticsUtil; import com.android.dialerbind.ObjectFactory; @@ -33,7 +30,6 @@ import com.android.dialer.R; import com.android.dialer.lookup.LookupCache; import com.android.dialer.lookup.LookupSettings; import com.android.dialer.service.CachedNumberLookupService; -import com.android.dialer.widget.EmptyContentView; import com.android.dialer.widget.EmptyContentView.OnEmptyViewActionButtonClickedListener; import com.android.phone.common.incall.CreditBarHelper; @@ -102,38 +98,4 @@ public class RegularSearchFragment extends SearchFragment LookupCache.cacheContact(getActivity(), adapter.getLookupContactInfo(position)); } - - @Override - protected void setupEmptyView() { - if (mEmptyView != null && getActivity() != null) { - if (!PermissionsUtil.hasPermission(getActivity(), READ_CONTACTS)) { - mEmptyView.setImage(R.drawable.empty_contacts); - mEmptyView.setActionLabel(R.string.permission_single_turn_on); - mEmptyView.setDescription(R.string.permission_no_search); - mEmptyView.setActionClickedListener(this); - } else { - mEmptyView.setImage(EmptyContentView.NO_IMAGE); - mEmptyView.setActionLabel(EmptyContentView.NO_LABEL); - mEmptyView.setDescription(EmptyContentView.NO_LABEL); - } - } - } - - @Override - public void onEmptyViewActionButtonClicked() { - final Activity activity = getActivity(); - if (activity == null) { - return; - } - - requestPermissions(new String[] {READ_CONTACTS}, READ_CONTACTS_PERMISSION_REQUEST_CODE); - } - - @Override - public void onRequestPermissionsResult(int requestCode, String[] permissions, - int[] grantResults) { - if (requestCode == READ_CONTACTS_PERMISSION_REQUEST_CODE) { - setupEmptyView(); - } - } } diff --git a/src/com/android/dialer/list/SearchFragment.java b/src/com/android/dialer/list/SearchFragment.java index 869dc5fa6..accee9353 100644 --- a/src/com/android/dialer/list/SearchFragment.java +++ b/src/com/android/dialer/list/SearchFragment.java @@ -15,6 +15,7 @@ */ package com.android.dialer.list; +import static android.Manifest.permission.CALL_PHONE; import static android.Manifest.permission.READ_CONTACTS; import android.animation.Animator; @@ -22,11 +23,17 @@ import android.animation.AnimatorInflater; import android.animation.AnimatorListenerAdapter; import android.app.Activity; import android.app.DialogFragment; +import android.content.ComponentName; +import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.content.res.Resources; +import android.graphics.drawable.Drawable; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; import android.os.Bundle; import android.telephony.PhoneNumberUtils; +import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; @@ -48,6 +55,7 @@ import com.android.contacts.common.util.ViewUtil; import com.android.dialer.DialtactsActivity; import com.android.dialer.dialpad.DialpadFragment.ErrorDialogFragment; import com.android.dialer.R; +import com.android.dialer.incall.InCallMetricsHelper; import com.android.dialer.util.CoachMarkDrawableHelper; import com.android.dialer.util.DialerUtils; import com.android.dialer.util.IntentUtil; @@ -60,9 +68,15 @@ import com.android.phone.common.incall.DialerDataSubscription; import com.android.phone.common.incall.utils.CallMethodFilters; import com.cyanogen.ambient.incall.extension.OriginCodes; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Random; + public class SearchFragment extends PhoneNumberPickerFragment implements DialerPhoneNumberListAdapter.searchMethodClicked, - CreditBarHelper.CreditBarVisibilityListener { + CreditBarHelper.CreditBarVisibilityListener, + EmptyContentView.OnEmptyViewActionButtonClickedListener { private static final String TAG = SearchFragment.class.getSimpleName(); private OnListFragmentScrolledListener mActivityScrollListener; @@ -93,12 +107,34 @@ public class SearchFragment extends PhoneNumberPickerFragment public CallMethodInfo mCurrentCallMethodInfo; + public HashMap<ComponentName, CallMethodInfo> mAvailableProviders; + + private static final int CALL_PHONE_PERMISSION_REQUEST_CODE = 1; + @Override public void creditsBarVisibilityChanged(int visibility) { DialtactsActivity da = (DialtactsActivity) getActivity(); da.moveFabInSearchUI(); } + @Override + public void onEmptyViewActionButtonClicked() { + final Activity activity = getActivity(); + if (activity == null) { + return; + } + + requestPermissions(new String[]{CALL_PHONE}, CALL_PHONE_PERMISSION_REQUEST_CODE); + } + + @Override + public void onRequestPermissionsResult(int requestCode, String[] permissions, + int[] grantResults) { + if (requestCode == CALL_PHONE_PERMISSION_REQUEST_CODE) { + setupEmptyView(); + } + } + public interface HostInterface { public boolean isActionBarShowing(); public boolean isDialpadShown(); @@ -518,5 +554,142 @@ public class SearchFragment extends PhoneNumberPickerFragment return parent; } - protected void setupEmptyView() {} + public void setupEmptyView() { + DialtactsActivity dialActivity = (DialtactsActivity) mActivity; + if (mEmptyView != null && dialActivity != null) { + ContactEntryListAdapter adapter = getAdapter(); + Resources r = getResources(); + mEmptyView.setWidth(dialActivity.getDialpadWidth()); + if (!PermissionsUtil.hasPermission(getActivity(), CALL_PHONE)) { + mEmptyView.setImage(R.drawable.empty_contacts); + mEmptyView.setActionLabel(R.string.permission_single_turn_on); + mEmptyView.setDescription(R.string.cm_permission_place_call); + mEmptyView.setSubMessage(null); + mEmptyView.setActionClickedListener(this); + } else if (adapter.getCount() == 0 && mActivity.isDialpadShown()) { + mEmptyView.setActionLabel(mEmptyView.NO_LABEL); + mEmptyView.setImage(null); + + // Get Current InCall plugin specific call methods, we don't want to update this + // suddenly so just the currently available ones are fine. + if (mAvailableProviders == null) { + mAvailableProviders = new HashMap<ComponentName, CallMethodInfo>(); + mAvailableProviders.putAll(CallMethodFilters.getAllEnabledCallMethods( + DialerDataSubscription.get(getActivity()))); + } + + if (mCurrentCallMethodInfo == null) { + mCurrentCallMethodInfo = dialActivity.getCurrentCallMethod(); + } + + if (mCurrentCallMethodInfo != null && mCurrentCallMethodInfo.mIsInCallProvider) { + showProviderHint(r); + } else { + showSuggestion(r); + } + } + } + } + + public void showNormalT9Hint(Resources r) { + mEmptyView.setImage(null); + mEmptyView.setDescription(R.string.empty_dialpad_t9_example); + mEmptyView.setSubMessage(R.string.empty_dialpad_t9_example_subtext); + } + + public void showProviderHint(Resources r) { + String text; + if (!mCurrentCallMethodInfo.mIsAuthenticated) { + // Sign into current selected call method to make calls + text = getString(R.string.sign_in_hint_text, mCurrentCallMethodInfo.mName); + } else { + // InCallApi provider specified hint + text = mCurrentCallMethodInfo.getHintText(); + } + if (TextUtils.isEmpty(text)) { + showNormalT9Hint(r); + } else { + Drawable heroImage = mCurrentCallMethodInfo.mSingleColorBrandIcon; + heroImage.setTint(r.getColor(R.color.hint_image_color)); + + int orientation = r.getConfiguration().orientation; + mEmptyView.setImage(heroImage, orientation == Configuration.ORIENTATION_PORTRAIT); + mEmptyView.setDescription(text); + mEmptyView.setSubMessage(null); + // TODO: put action button for login in or switching provider! + } + } + + public void showSuggestion(Resources r) { + ConnectivityManager connManager = + (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE); + + NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); + + CallMethodInfo emergencyOnlyCallMethod + = CallMethodInfo.getEmergencyCallMethod(getContext()); + + if (mCurrentCallMethodInfo != null) { + int orientation = r.getConfiguration().orientation; + if (mCurrentCallMethodInfo.equals(emergencyOnlyCallMethod)) { + // If no sims available and emergency only call method selected, + // alert user that only emergency calls are allowed for the current call method. + String text = r.getString(R.string.emergency_call_hint_text); + Drawable heroImage = r.getDrawable(R.drawable.ic_nosim); + heroImage.setTint(r.getColor(R.color.emergency_call_icon_color)); + + mEmptyView.setImage(heroImage, orientation == Configuration.ORIENTATION_PORTRAIT); + mEmptyView.setDescription(text); + mEmptyView.setSubMessage(null); + } else if (!mAvailableProviders.isEmpty() && + !mCurrentCallMethodInfo.mIsInCallProvider && + mWifi.isConnected()) { + TelephonyManager tm = (TelephonyManager) getActivity() + .getSystemService(Context.TELEPHONY_SERVICE); + String template; + Drawable heroImage; + String text; + + InCallMetricsHelper.Events event = null; + CallMethodInfo hintTextMethod = hintTextRequest(); + if (TextUtils.isEmpty(tm.getNetworkOperator())) { + heroImage = r.getDrawable(R.drawable.ic_signal_wifi_3_bar); + template = r.getString(R.string.wifi_hint_text); + text = String.format(template, hintTextMethod.mName); + event = InCallMetricsHelper.Events.INAPP_NUDGE_DIALER_WIFI; + } else if (tm.isNetworkRoaming(mCurrentCallMethodInfo.mSubId)) { + heroImage = r.getDrawable(R.drawable.ic_roaming); + template = r.getString(R.string.roaming_hint_text); + text = String.format(template, mCurrentCallMethodInfo.mName, + hintTextMethod.mName); + event = InCallMetricsHelper.Events.INAPP_NUDGE_DIALER_ROAMING; + } else { + showNormalT9Hint(r); + return; + } + + mEmptyView.setImage(heroImage, orientation == Configuration.ORIENTATION_PORTRAIT); + mEmptyView.setDescription(text); + mEmptyView.setSubMessage(null); + + InCallMetricsHelper.increaseCountOfMetric( + hintTextMethod.mComponent, event, + InCallMetricsHelper.Categories.INAPP_NUDGES, + InCallMetricsHelper.Parameters.COUNT); + } else { + showNormalT9Hint(r); + } + } else { + showNormalT9Hint(r); + } + } + + private CallMethodInfo hintTextRequest() { + // Randomly choose an item that is not a sim to prompt user to switch to + List<CallMethodInfo> valuesList = + new ArrayList<CallMethodInfo>(mAvailableProviders.values()); + + int randomIndex = new Random().nextInt(valuesList.size()); + return valuesList.get(randomIndex); + } } diff --git a/src/com/android/dialer/list/SmartDialSearchFragment.java b/src/com/android/dialer/list/SmartDialSearchFragment.java index 2ae1e947b..d8bb625e3 100644 --- a/src/com/android/dialer/list/SmartDialSearchFragment.java +++ b/src/com/android/dialer/list/SmartDialSearchFragment.java @@ -15,52 +15,28 @@ */ package com.android.dialer.list; -import static android.Manifest.permission.CALL_PHONE; - -import android.app.Activity; import android.content.ComponentName; -import android.content.Context; import android.content.Loader; -import android.content.res.Configuration; -import android.content.res.Resources; import android.database.Cursor; -import android.graphics.drawable.Drawable; -import android.net.ConnectivityManager; -import android.net.NetworkInfo; import android.net.Uri; import android.os.Bundle; -import android.telephony.TelephonyManager; - -import android.text.TextUtils; import com.android.contacts.common.list.ContactEntryListAdapter; -import com.android.contacts.common.util.PermissionsUtil; -import com.android.dialer.DialtactsActivity; import com.android.dialer.dialpad.SmartDialCursorLoader; import com.android.dialer.R; -import com.android.dialer.incall.InCallMetricsHelper; -import com.android.dialer.widget.EmptyContentView; import com.android.phone.common.incall.CallMethodInfo; import com.android.phone.common.incall.DialerDataSubscription; import com.android.phone.common.incall.utils.CallMethodFilters; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; -import java.util.Random; /** * Implements a fragment to load and display SmartDial search results. */ public class SmartDialSearchFragment extends SearchFragment - implements EmptyContentView.OnEmptyViewActionButtonClickedListener, - DialerPhoneNumberListAdapter.searchMethodClicked { + implements DialerPhoneNumberListAdapter.searchMethodClicked { private static final String TAG = SmartDialSearchFragment.class.getSimpleName(); - private static final int CALL_PHONE_PERMISSION_REQUEST_CODE = 1; - - private HashMap<ComponentName, CallMethodInfo> mAvailableProviders; - /** * Creates a SmartDialListAdapter to display and operate on search results. */ @@ -116,146 +92,6 @@ public class SmartDialSearchFragment extends SearchFragment return loader; } - @Override - public void setupEmptyView() { - DialtactsActivity dialActivity = (DialtactsActivity) getActivity(); - - if (mEmptyView != null && dialActivity != null) { - final SmartDialNumberListAdapter adapter = (SmartDialNumberListAdapter) getAdapter(); - if (mCurrentCallMethodInfo == null) { - mCurrentCallMethodInfo = dialActivity.getCurrentCallMethod(); - } - - Resources r = getResources(); - mEmptyView.setWidth(dialActivity.getDialpadWidth()); - if (!PermissionsUtil.hasPermission(getActivity(), CALL_PHONE)) { - mEmptyView.setImage(R.drawable.empty_contacts); - mEmptyView.setActionLabel(R.string.permission_single_turn_on); - mEmptyView.setDescription(R.string.cm_permission_place_call); - mEmptyView.setSubMessage(null); - mEmptyView.setActionClickedListener(this); - } else if (adapter.getCount() == 0) { - mEmptyView.setActionLabel(mEmptyView.NO_LABEL); - mEmptyView.setImage(null); - - // Get Current InCall plugin specific call methods, we don't want to update this - // suddenly so just the currently available ones are fine. - if (mAvailableProviders == null) { - mAvailableProviders = new HashMap<ComponentName, CallMethodInfo>(); - mAvailableProviders.putAll(CallMethodFilters.getAllEnabledCallMethods( - DialerDataSubscription.get(getActivity()))); - } - - if (mCurrentCallMethodInfo != null && mCurrentCallMethodInfo.mIsInCallProvider) { - showProviderHint(r); - } else { - showSuggestion(r); - } - } - } - } - - public void showNormalT9Hint(Resources r) { - mEmptyView.setImage(null); - mEmptyView.setDescription(R.string.empty_dialpad_t9_example); - mEmptyView.setSubMessage(R.string.empty_dialpad_t9_example_subtext); - } - - public void showProviderHint(Resources r) { - String text; - if (!mCurrentCallMethodInfo.mIsAuthenticated) { - // Sign into current selected call method to make calls - text = getString(R.string.sign_in_hint_text, mCurrentCallMethodInfo.mName); - } else { - // InCallApi provider specified hint - text = mCurrentCallMethodInfo.getHintText(); - } - if (TextUtils.isEmpty(text)) { - showNormalT9Hint(r); - } else { - Drawable heroImage = mCurrentCallMethodInfo.mSingleColorBrandIcon; - heroImage.setTint(r.getColor(R.color.hint_image_color)); - - int orientation = r.getConfiguration().orientation; - mEmptyView.setImage(heroImage, orientation == Configuration.ORIENTATION_PORTRAIT); - mEmptyView.setDescription(text); - mEmptyView.setSubMessage(null); - // TODO: put action button for login in or switching provider! - } - } - - public void showSuggestion(Resources r) { - ConnectivityManager connManager = - (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE); - - NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); - - CallMethodInfo emergencyOnlyCallMethod = CallMethodInfo.getEmergencyCallMethod(getContext()); - - if (mCurrentCallMethodInfo != null) { - int orientation = r.getConfiguration().orientation; - if (mCurrentCallMethodInfo.equals(emergencyOnlyCallMethod)) { - // If no sims available and emergency only call method selected, - // alert user that only emergency calls are allowed for the current call method. - String text = r.getString(R.string.emergency_call_hint_text); - Drawable heroImage = r.getDrawable(R.drawable.ic_nosim); - heroImage.setTint(r.getColor(R.color.emergency_call_icon_color)); - - mEmptyView.setImage(heroImage, orientation == Configuration.ORIENTATION_PORTRAIT); - mEmptyView.setDescription(text); - mEmptyView.setSubMessage(null); - } else if (!mAvailableProviders.isEmpty() && - !mCurrentCallMethodInfo.mIsInCallProvider && - mWifi.isConnected()) { - TelephonyManager tm = - (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE); - String template; - Drawable heroImage; - String text; - - InCallMetricsHelper.Events event = null; - CallMethodInfo hintTextMethod = hintTextRequest(); - if (TextUtils.isEmpty(tm.getNetworkOperator())) { - heroImage = r.getDrawable(R.drawable.ic_signal_wifi_3_bar); - template = r.getString(R.string.wifi_hint_text); - text = String.format(template, hintTextMethod.mName); - event = InCallMetricsHelper.Events.INAPP_NUDGE_DIALER_WIFI; - } else if (tm.isNetworkRoaming(mCurrentCallMethodInfo.mSubId)) { - heroImage = r.getDrawable(R.drawable.ic_roaming); - template = r.getString(R.string.roaming_hint_text); - text = String.format(template, mCurrentCallMethodInfo.mName, - hintTextMethod.mName); - event = InCallMetricsHelper.Events.INAPP_NUDGE_DIALER_ROAMING; - } else { - showNormalT9Hint(r); - return; - } - - mEmptyView.setImage(heroImage, orientation == Configuration.ORIENTATION_PORTRAIT); - mEmptyView.setDescription(text); - mEmptyView.setSubMessage(null); - - InCallMetricsHelper.increaseCountOfMetric( - hintTextMethod.mComponent, event, - InCallMetricsHelper.Categories.INAPP_NUDGES, - InCallMetricsHelper.Parameters.COUNT); - } else { - showNormalT9Hint(r); - } - } else { - showNormalT9Hint(r); - } - } - - private CallMethodInfo hintTextRequest() { - // Randomly choose an item that is not a sim to prompt user to switch to - List<CallMethodInfo> valuesList = - new ArrayList<CallMethodInfo>(mAvailableProviders.values()); - - int randomIndex = new Random().nextInt(valuesList.size()); - return valuesList.get(randomIndex); - } - public void setAvailableProviders(HashMap<ComponentName, CallMethodInfo> callMethods) { if (mAvailableProviders != null) { mAvailableProviders.clear(); @@ -267,24 +103,6 @@ public class SmartDialSearchFragment extends SearchFragment setupEmptyView(); } - @Override - public void onEmptyViewActionButtonClicked() { - final Activity activity = getActivity(); - if (activity == null) { - return; - } - - requestPermissions(new String[]{CALL_PHONE}, CALL_PHONE_PERMISSION_REQUEST_CODE); - } - - @Override - public void onRequestPermissionsResult(int requestCode, String[] permissions, - int[] grantResults) { - if (requestCode == CALL_PHONE_PERMISSION_REQUEST_CODE) { - setupEmptyView(); - } - } - public boolean isShowingPermissionRequest() { return mEmptyView != null && mEmptyView.isShowingContent(); } |