Loading res/values/strings.xml +9 −0 Original line number Diff line number Diff line Loading @@ -7475,12 +7475,21 @@ <!-- Summary text for connecting to customer support [CHAR LIMIT=NONE]--> <string name="support_escalation_summary">Call or email us and we\'ll get your issue solved right away. No muss, no fuss.</string> <!-- Title text that indicates there is not internet connection. [CHAR LIMIT=80]--> <string name="support_offline_title">You\'re offline</string> <!-- Summary text telling user to connect to Internet in order to request customer support. [CHAR LIMIT=NONE]--> <string name="support_offline_summary">To reach support, first connect to Wi-Fi or data.</string> <!-- Title text for showing a list of help options [CHAR LIMIT=80]--> <string name="support_more_help_title">More help</string> <!-- Button label for contacting customer support by phone [CHAR LIMIT=20]--> <string name="support_escalation_by_phone">Phone</string> <!-- Button label for contacting customer support by phone [CHAR LIMIT=20]--> <string name="support_escalation_by_phone_offline">Phone</string> <!-- Button label for contacting customer support by email [CHAR LIMIT=20]--> <string name="support_escalation_by_email">Email</string> src/com/android/settings/dashboard/SupportFragment.java +56 −0 Original line number Diff line number Diff line Loading @@ -20,7 +20,15 @@ import android.accounts.Account; import android.accounts.AccountManager; import android.accounts.OnAccountsUpdateListener; import android.app.Activity; import android.content.Context; import android.net.ConnectivityManager; import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkInfo; import android.net.NetworkRequest; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; Loading @@ -38,12 +46,34 @@ import com.android.settings.overlay.SupportFeatureProvider; public final class SupportFragment extends InstrumentedFragment implements View.OnClickListener, OnAccountsUpdateListener { private final Handler mHandler = new Handler(Looper.getMainLooper()); private final ConnectivityManager.NetworkCallback mNetworkCallback = new ConnectivityManager.NetworkCallback() { @Override public void onCapabilitiesChanged(Network network, NetworkCapabilities capabilities) { postConnectivityChanged(); } @Override public void onAvailable(Network network) { postConnectivityChanged(); } @Override public void onLost(Network network) { postConnectivityChanged(); } }; private Activity mActivity; private View mContent; private RecyclerView mRecyclerView; private SupportItemAdapter mSupportItemAdapter; private AccountManager mAccountManager; private SupportFeatureProvider mSupportFeatureProvider; private ConnectivityManager mConnectivityManager; @Override protected int getMetricsCategory() { Loading @@ -59,6 +89,8 @@ public final class SupportFragment extends InstrumentedFragment implements View. FeatureFactory.getFactory(mActivity).getSupportFeatureProvider(mActivity); mSupportItemAdapter = new SupportItemAdapter(mActivity, mSupportFeatureProvider, this /* itemClickListener */); mConnectivityManager = (ConnectivityManager) mActivity.getSystemService(Context.CONNECTIVITY_SERVICE); } @Override Loading @@ -78,6 +110,12 @@ public final class SupportFragment extends InstrumentedFragment implements View. // Monitor account change. mAccountManager.addOnAccountsUpdatedListener( this /* listener */, null /* handler */, true /* updateImmediately */); // Monitor connectivity mConnectivityManager.registerNetworkCallback( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build(), mNetworkCallback); } @Override Loading @@ -85,6 +123,8 @@ public final class SupportFragment extends InstrumentedFragment implements View. super.onPause(); // Stop monitor account change. mAccountManager.removeOnAccountsUpdatedListener(this /* listener */); // Stop monitor connectivity. mConnectivityManager.unregisterNetworkCallback(mNetworkCallback); } @Override Loading @@ -99,4 +139,20 @@ public final class SupportFragment extends InstrumentedFragment implements View. (SupportItemAdapter.ViewHolder) mRecyclerView.getChildViewHolder(v); mSupportItemAdapter.onItemClicked(vh.getAdapterPosition()); } private void postConnectivityChanged() { mHandler.post(new Runnable() { @Override public void run() { if (mSupportItemAdapter != null) { mSupportItemAdapter.setHasInternet(hasInternet()); } } }); } private boolean hasInternet() { final NetworkInfo activeNetwork = mConnectivityManager.getActiveNetworkInfo(); return activeNetwork != null && activeNetwork.isConnectedOrConnecting(); } } src/com/android/settings/dashboard/SupportItemAdapter.java +26 −4 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.annotation.StringRes; import android.app.Activity; import android.content.Intent; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; Loading @@ -43,6 +44,8 @@ import static com.android.settings.overlay.SupportFeatureProvider.SupportType.PH */ public final class SupportItemAdapter extends RecyclerView.Adapter<SupportItemAdapter.ViewHolder> { private static final String TAG = "SupportItemAdapter"; private static final int TYPE_TITLE = R.layout.support_item_title; private static final int TYPE_SUBTITLE = R.layout.support_item_subtitle; private static final int TYPE_ESCALATION_CARD = R.layout.support_escalation_card; Loading @@ -53,12 +56,16 @@ public final class SupportItemAdapter extends RecyclerView.Adapter<SupportItemAd private final View.OnClickListener mItemClickListener; private final List<SupportData> mSupportData; private boolean mHasInternet; public SupportItemAdapter(Activity activity, SupportFeatureProvider supportFeatureProvider, View.OnClickListener itemClickListener) { mActivity = activity; mSupportFeatureProvider = supportFeatureProvider; mItemClickListener = itemClickListener; mSupportData = new ArrayList<>(); // Optimistically assume we have Internet access. It will be updated later to correct value. mHasInternet = true; setHasStableIds(true); refreshData(); } Loading Loading @@ -106,6 +113,13 @@ public final class SupportItemAdapter extends RecyclerView.Adapter<SupportItemAd } } public void setHasInternet(boolean hasInternet) { if (mHasInternet != hasInternet) { mHasInternet = hasInternet; refreshData(); } } /** * Create data for the adapter. If there is already data in the adapter, they will be * destroyed and recreated. Loading @@ -113,7 +127,9 @@ public final class SupportItemAdapter extends RecyclerView.Adapter<SupportItemAd public void refreshData() { mSupportData.clear(); final Account[] accounts = mSupportFeatureProvider.getSupportEligibleAccounts(mActivity); if (accounts.length > 0) { if (accounts.length == 0) { Log.d(TAG, "Account unavailable. Skipping"); } else { addEscalationCards(accounts[0]); } addMoreHelpItems(); Loading @@ -121,9 +137,15 @@ public final class SupportItemAdapter extends RecyclerView.Adapter<SupportItemAd } private void addEscalationCards(Account account) { if (mHasInternet) { mSupportData.add(new SupportData(TYPE_TITLE, 0 /* icon */, R.string.support_escalation_title, R.string.support_escalation_summary, null /* intent */)); } else { mSupportData.add(new SupportData(TYPE_TITLE, 0 /* icon */, R.string.support_offline_title, R.string.support_offline_summary, null /* intent */)); } if (mSupportFeatureProvider.isSupportTypeEnabled(mActivity, PHONE)) { mSupportData.add(new SupportData(TYPE_ESCALATION_CARD, R.drawable.ic_call_24dp, R.string.support_escalation_by_phone, 0 /* summary */, Loading Loading
res/values/strings.xml +9 −0 Original line number Diff line number Diff line Loading @@ -7475,12 +7475,21 @@ <!-- Summary text for connecting to customer support [CHAR LIMIT=NONE]--> <string name="support_escalation_summary">Call or email us and we\'ll get your issue solved right away. No muss, no fuss.</string> <!-- Title text that indicates there is not internet connection. [CHAR LIMIT=80]--> <string name="support_offline_title">You\'re offline</string> <!-- Summary text telling user to connect to Internet in order to request customer support. [CHAR LIMIT=NONE]--> <string name="support_offline_summary">To reach support, first connect to Wi-Fi or data.</string> <!-- Title text for showing a list of help options [CHAR LIMIT=80]--> <string name="support_more_help_title">More help</string> <!-- Button label for contacting customer support by phone [CHAR LIMIT=20]--> <string name="support_escalation_by_phone">Phone</string> <!-- Button label for contacting customer support by phone [CHAR LIMIT=20]--> <string name="support_escalation_by_phone_offline">Phone</string> <!-- Button label for contacting customer support by email [CHAR LIMIT=20]--> <string name="support_escalation_by_email">Email</string>
src/com/android/settings/dashboard/SupportFragment.java +56 −0 Original line number Diff line number Diff line Loading @@ -20,7 +20,15 @@ import android.accounts.Account; import android.accounts.AccountManager; import android.accounts.OnAccountsUpdateListener; import android.app.Activity; import android.content.Context; import android.net.ConnectivityManager; import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkInfo; import android.net.NetworkRequest; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; Loading @@ -38,12 +46,34 @@ import com.android.settings.overlay.SupportFeatureProvider; public final class SupportFragment extends InstrumentedFragment implements View.OnClickListener, OnAccountsUpdateListener { private final Handler mHandler = new Handler(Looper.getMainLooper()); private final ConnectivityManager.NetworkCallback mNetworkCallback = new ConnectivityManager.NetworkCallback() { @Override public void onCapabilitiesChanged(Network network, NetworkCapabilities capabilities) { postConnectivityChanged(); } @Override public void onAvailable(Network network) { postConnectivityChanged(); } @Override public void onLost(Network network) { postConnectivityChanged(); } }; private Activity mActivity; private View mContent; private RecyclerView mRecyclerView; private SupportItemAdapter mSupportItemAdapter; private AccountManager mAccountManager; private SupportFeatureProvider mSupportFeatureProvider; private ConnectivityManager mConnectivityManager; @Override protected int getMetricsCategory() { Loading @@ -59,6 +89,8 @@ public final class SupportFragment extends InstrumentedFragment implements View. FeatureFactory.getFactory(mActivity).getSupportFeatureProvider(mActivity); mSupportItemAdapter = new SupportItemAdapter(mActivity, mSupportFeatureProvider, this /* itemClickListener */); mConnectivityManager = (ConnectivityManager) mActivity.getSystemService(Context.CONNECTIVITY_SERVICE); } @Override Loading @@ -78,6 +110,12 @@ public final class SupportFragment extends InstrumentedFragment implements View. // Monitor account change. mAccountManager.addOnAccountsUpdatedListener( this /* listener */, null /* handler */, true /* updateImmediately */); // Monitor connectivity mConnectivityManager.registerNetworkCallback( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build(), mNetworkCallback); } @Override Loading @@ -85,6 +123,8 @@ public final class SupportFragment extends InstrumentedFragment implements View. super.onPause(); // Stop monitor account change. mAccountManager.removeOnAccountsUpdatedListener(this /* listener */); // Stop monitor connectivity. mConnectivityManager.unregisterNetworkCallback(mNetworkCallback); } @Override Loading @@ -99,4 +139,20 @@ public final class SupportFragment extends InstrumentedFragment implements View. (SupportItemAdapter.ViewHolder) mRecyclerView.getChildViewHolder(v); mSupportItemAdapter.onItemClicked(vh.getAdapterPosition()); } private void postConnectivityChanged() { mHandler.post(new Runnable() { @Override public void run() { if (mSupportItemAdapter != null) { mSupportItemAdapter.setHasInternet(hasInternet()); } } }); } private boolean hasInternet() { final NetworkInfo activeNetwork = mConnectivityManager.getActiveNetworkInfo(); return activeNetwork != null && activeNetwork.isConnectedOrConnecting(); } }
src/com/android/settings/dashboard/SupportItemAdapter.java +26 −4 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.annotation.StringRes; import android.app.Activity; import android.content.Intent; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; Loading @@ -43,6 +44,8 @@ import static com.android.settings.overlay.SupportFeatureProvider.SupportType.PH */ public final class SupportItemAdapter extends RecyclerView.Adapter<SupportItemAdapter.ViewHolder> { private static final String TAG = "SupportItemAdapter"; private static final int TYPE_TITLE = R.layout.support_item_title; private static final int TYPE_SUBTITLE = R.layout.support_item_subtitle; private static final int TYPE_ESCALATION_CARD = R.layout.support_escalation_card; Loading @@ -53,12 +56,16 @@ public final class SupportItemAdapter extends RecyclerView.Adapter<SupportItemAd private final View.OnClickListener mItemClickListener; private final List<SupportData> mSupportData; private boolean mHasInternet; public SupportItemAdapter(Activity activity, SupportFeatureProvider supportFeatureProvider, View.OnClickListener itemClickListener) { mActivity = activity; mSupportFeatureProvider = supportFeatureProvider; mItemClickListener = itemClickListener; mSupportData = new ArrayList<>(); // Optimistically assume we have Internet access. It will be updated later to correct value. mHasInternet = true; setHasStableIds(true); refreshData(); } Loading Loading @@ -106,6 +113,13 @@ public final class SupportItemAdapter extends RecyclerView.Adapter<SupportItemAd } } public void setHasInternet(boolean hasInternet) { if (mHasInternet != hasInternet) { mHasInternet = hasInternet; refreshData(); } } /** * Create data for the adapter. If there is already data in the adapter, they will be * destroyed and recreated. Loading @@ -113,7 +127,9 @@ public final class SupportItemAdapter extends RecyclerView.Adapter<SupportItemAd public void refreshData() { mSupportData.clear(); final Account[] accounts = mSupportFeatureProvider.getSupportEligibleAccounts(mActivity); if (accounts.length > 0) { if (accounts.length == 0) { Log.d(TAG, "Account unavailable. Skipping"); } else { addEscalationCards(accounts[0]); } addMoreHelpItems(); Loading @@ -121,9 +137,15 @@ public final class SupportItemAdapter extends RecyclerView.Adapter<SupportItemAd } private void addEscalationCards(Account account) { if (mHasInternet) { mSupportData.add(new SupportData(TYPE_TITLE, 0 /* icon */, R.string.support_escalation_title, R.string.support_escalation_summary, null /* intent */)); } else { mSupportData.add(new SupportData(TYPE_TITLE, 0 /* icon */, R.string.support_offline_title, R.string.support_offline_summary, null /* intent */)); } if (mSupportFeatureProvider.isSupportTypeEnabled(mActivity, PHONE)) { mSupportData.add(new SupportData(TYPE_ESCALATION_CARD, R.drawable.ic_call_24dp, R.string.support_escalation_by_phone, 0 /* summary */, Loading