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

Commit 1e207e1a authored by jackqdyulei's avatar jackqdyulei
Browse files

Fix compile error in NetwotkSelectSettings

1. Remove all the internal dependencies and add TODO
2. Use the API in SettingsFragment for progressbar

Bug: 114749736
Test: Build
Change-Id: If2f57dd24528ae1aac6a1fe84d4a40db237ae7da
parent 00ec66cd
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -14,7 +14,9 @@
     limitations under the License.
-->

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:key="mobile_choose_network_pref_screen"
    android:title="@string/choose_network_title">

    <PreferenceCategory
+2 −1
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.preference.Preference;
import android.telephony.CellInfo;
import android.telephony.SignalStrength;
import android.util.Log;
@@ -32,6 +31,8 @@ import com.android.settingslib.graph.SignalDrawable;

import java.util.List;

import androidx.preference.Preference;

/**
 * A Preference represents a network operator in the NetworkSelectSetting fragment.
 */
+70 −173
Original line number Diff line number Diff line
@@ -15,22 +15,12 @@
 */
package com.android.settings.mobilenetwork;

import android.app.ActionBar;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.RemoteException;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
import android.provider.SearchIndexableResource;
import android.telephony.AccessNetworkConstants;
import android.telephony.CellIdentity;
import android.telephony.CellInfo;
@@ -39,14 +29,16 @@ import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.telephony.OperatorInfo;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.utils.ThreadUtils;

import java.util.ArrayList;
@@ -55,10 +47,16 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;

import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen;

/**
 * "Choose network" settings UI for the Phone app.
 */
public class NetworkSelectSettings extends PreferenceFragment {
//TODO(b/115429509): Add test for this file once b/115429509 is not blocked anymore
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class NetworkSelectSettings extends DashboardFragment {

    private static final String TAG = "NetworkSelectSetting";
    private static final boolean DBG = true;
@@ -83,10 +81,11 @@ public class NetworkSelectSettings extends PreferenceFragment {
    private Preference mStatusMessagePreference;
    private List<CellInfo> mCellInfoList;
    private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
    private ViewGroup mFrameLayout;
    private NetworkOperatorPreference mSelectedNetworkOperatorPreference;
    private TelephonyManager mTelephonyManager;
    private List<String> mForbiddenPlmns;
    //Flag indicating whether we have called bind on the service.
    private boolean mShouldUnbind;

    private final Runnable mUpdateNetworkOperatorsRunnable = () -> {
        updateNetworkOperatorsPreferenceCategory();
@@ -112,7 +111,6 @@ public class NetworkSelectSettings extends PreferenceFragment {

        mSubId = getArguments().getInt(KEY_SUBSCRIPTION_ID);

        addPreferencesFromResource(R.xml.choose_network);
        mConnectedNetworkOperatorsPreference =
                (PreferenceCategory) findPreference(PREF_KEY_CONNECTED_NETWORK_OPERATOR);
        mNetworkOperatorsPreferences =
@@ -125,36 +123,16 @@ public class NetworkSelectSettings extends PreferenceFragment {

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        if (DBG) logd("onViewCreated");
        super.onViewCreated(view, savedInstanceState);

        if (getListView() != null) {
            getListView().setDivider(null);
        }
        // Inflate progress bar
        final Activity activity = getActivity();
        if (activity != null) {
            ActionBar actionBar = activity.getActionBar();
            if (actionBar != null) {
                // android.R.id.home will be triggered in
                // {@link NetworkSelectSettingAcitivity#onOptionsItemSelected()}
                actionBar.setDisplayHomeAsUpEnabled(true);
            }
            mFrameLayout = activity.findViewById(R.id.choose_network_content);
            final LayoutInflater inflater = activity.getLayoutInflater();
            final View pinnedHeader =
                    inflater.inflate(R.layout.choose_network_progress_header, mFrameLayout, false);
            mFrameLayout.addView(pinnedHeader);
            mFrameLayout.setVisibility(View.VISIBLE);
            mProgressHeader = pinnedHeader.findViewById(R.id.progress_bar_animation);
        mProgressHeader = setPinnedHeaderView(R.layout.wifi_progress_header)
                .findViewById(R.id.progress_bar_animation);
        setProgressBarVisible(false);
        }
        forceConfigConnectedNetworkOperatorsPreferenceCategory();
    }

    @Override
    public void onStart() {
        if (DBG) logd("onStart");
        super.onStart();
        new AsyncTask<Void, Void, List<String>>() {
            @Override
@@ -179,8 +157,7 @@ public class NetworkSelectSettings extends PreferenceFragment {
     * connected, we do not allow user to click the connected network operator.
     */
    @Override
    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
                                         Preference preference) {
    public boolean onPreferenceTreeClick(Preference preference) {
        if (DBG) logd("User clicked the screen");
        stopNetworkQuery();
        setProgressBarVisible(false);
@@ -235,19 +212,11 @@ public class NetworkSelectSettings extends PreferenceFragment {
            }

        } else {
            preferenceScreen.setEnabled(false);
            getPreferenceScreen().setEnabled(false);
            return false;
        }
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        if (!(getActivity() instanceof NetworkSelectSettingActivity)) {
            throw new IllegalStateException("Parent activity is not NetworkSelectSettingActivity");
        }
    }

    @Override
    public void onStop() {
        super.onStop();
@@ -258,6 +227,22 @@ public class NetworkSelectSettings extends PreferenceFragment {
        unbindNetworkQueryService();
    }

    @Override
    protected int getPreferenceScreenResId() {
        return R.xml.choose_network;
    }

    @Override
    protected String getLogTag() {
        return TAG;
    }

    @Override
    public int getMetricsCategory() {
        //TODO(b/114749736): add metrics id for this page
        return 0;
    }

    private final Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
@@ -312,65 +297,6 @@ public class NetworkSelectSettings extends PreferenceFragment {
        }
    };

    private void loadNetworksList() {
        if (DBG) logd("load networks list...");
        setProgressBarVisible(true);
        try {
            if (mNetworkQueryService != null) {
                if (DBG) logd("start network query");
                mNetworkQueryService
                        .startNetworkQuery(mCallback, mSubId, true /* is incremental result */);
            } else {
                if (DBG) logd("unable to start network query, mNetworkQueryService is null");
                addMessagePreference(R.string.network_query_error);
            }
        } catch (RemoteException e) {
            loge("loadNetworksList: exception from startNetworkQuery " + e);
            addMessagePreference(R.string.network_query_error);
        }
    }

    /**
     * This implementation of INetworkQueryServiceCallback is used to receive
     * callback notifications from the network query service.
     */
    private final INetworkQueryServiceCallback mCallback = new INetworkQueryServiceCallback.Stub() {

        /** Returns the scan results to the user, this callback will be called at lease one time. */
        public void onResults(List<CellInfo> results) {
            if (DBG) logd("get scan results.");
            Message msg = mHandler.obtainMessage(EVENT_NETWORK_SCAN_RESULTS, results);
            msg.sendToTarget();
        }

        /**
         * Informs the user that the scan has stopped.
         *
         * This callback will be called when the scan is finished or cancelled by the user.
         * The related NetworkScanRequest will be deleted after this callback.
         */
        public void onComplete() {
            if (DBG) logd("network scan completed.");
            Message msg = mHandler.obtainMessage(EVENT_NETWORK_SCAN_COMPLETED);
            msg.sendToTarget();
        }

        /**
         * Informs the user that there is some error about the scan.
         *
         * This callback will be called whenever there is any error about the scan, and the scan
         * will be terminated. onComplete() will NOT be called.
         */
        public void onError(int error) {
            if (DBG) logd("get onError callback with error code: " + error);
            Message msg = mHandler.obtainMessage(EVENT_NETWORK_SCAN_ERROR, error, 0 /* arg2 */);
            msg.sendToTarget();
        }
    };

    /**
     * Updates network operators from {@link INetworkQueryServiceCallback#onResults()}.
     */
    private void updateNetworkOperators() {
        if (DBG) logd("updateNetworkOperators");
        if (getActivity() != null) {
@@ -575,40 +501,15 @@ public class NetworkSelectSettings extends PreferenceFragment {
        return new ArrayList<>(map.values());
    }

    /**
     * Service connection code for the NetworkQueryService.
     * Handles the work of binding to a local object so that we can make
     * the appropriate service calls.
     */

    /** Local service interface */
    private INetworkQueryService mNetworkQueryService = null;
    /** Flag indicating whether we have called bind on the service. */
    boolean mShouldUnbind;

    /** Service connection */
    private final ServiceConnection mNetworkQueryServiceConnection = new ServiceConnection() {

        /** Handle the task of binding the local object to the service */
        public void onServiceConnected(ComponentName className, IBinder service) {
            if (DBG) logd("connection created, binding local service.");
            mNetworkQueryService = ((NetworkQueryService.LocalBinder) service).getService();
            // Load the network list only when the service is well connected.
            loadNetworksList();
        }

        /** Handle the task of cleaning up the local binding */
        public void onServiceDisconnected(ComponentName className) {
            if (DBG) logd("connection disconnected, cleaning local binding.");
            mNetworkQueryService = null;
    private void loadNetworksList() {
        if (DBG) logd("load networks list...");
        setProgressBarVisible(true);
        //TODO(b/114749736): load network list once b/115401728 is done
    }
    };

    private void bindNetworkQueryService() {
        if (DBG) logd("bindNetworkQueryService");
        getContext().bindService(new Intent(getContext(), NetworkQueryService.class).setAction(
                NetworkQueryService.ACTION_LOCAL_BINDER),
                mNetworkQueryServiceConnection, Context.BIND_AUTO_CREATE);
        //TODO(b/114749736): bind service/manager once b/115401728 is done
        mShouldUnbind = true;
    }

@@ -617,37 +518,19 @@ public class NetworkSelectSettings extends PreferenceFragment {
        if (mShouldUnbind) {
            if (DBG) logd("mShouldUnbind is true");
            // unbind the service.
            getContext().unbindService(mNetworkQueryServiceConnection);
            //TODO(b/114749736): unbind service/manager once b/115401728 is done
            mShouldUnbind = false;
        }
    }

    /**
     * Call {@link NotificationMgr#updateNetworkSelection(int, int)} to send notification about
     * no service of user selected operator
     */
    private void updateNetworkSelection() {
        if (DBG) logd("Update notification about no service of user selected operator");
        final PhoneGlobals app = PhoneGlobals.getInstance();
        if (SubscriptionManager.isValidSubscriptionId(mSubId)) {
            ServiceState ss = mTelephonyManager.getServiceState();
            if (ss != null) {
                app.notificationMgr.updateNetworkSelection(ss.getState(), mSubId);
            }
        }
        //TODO(b/114749736): update network selection once b/115429509 is done
    }

    private void stopNetworkQuery() {
        // Stop the network query process
        try {
            if (mNetworkQueryService != null) {
                if (DBG) logd("Stop network query");
                mNetworkQueryService.stopNetworkQuery();
                mNetworkQueryService.unregisterCallback(mCallback);
            }
        } catch (RemoteException e) {
            loge("Exception from stopNetworkQuery " + e);
        }
        //TODO(b/114749736): stop service/manager query once b/115401728 is done
    }

    private void logd(String msg) {
@@ -657,4 +540,18 @@ public class NetworkSelectSettings extends PreferenceFragment {
    private void loge(String msg) {
        Log.e(TAG, msg);
    }

    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
            new BaseSearchIndexProvider() {
                @Override
                public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
                        boolean enabled) {
                    final ArrayList<SearchIndexableResource> result = new ArrayList<>();

                    final SearchIndexableResource sir = new SearchIndexableResource(context);
                    sir.xmlResId = R.xml.choose_network;
                    result.add(sir);
                    return result;
                }
            };
}