Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cd89d126 authored by Fan Zhang's avatar Fan Zhang Committed by Android (Google) Code Review
Browse files

Merge "Monitor connectivity change and display offline promo." into nyc-mr1-dev

parents 883c2141 2ddde4a9
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -7481,12 +7481,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>
+56 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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() {
@@ -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
@@ -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
@@ -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
@@ -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();
    }
}
+26 −4
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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();
    }
@@ -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.
@@ -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();
@@ -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 */,