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

Commit 0bedf356 authored by Malcolm Chen's avatar Malcolm Chen
Browse files

Disable "Mobile data" in "Data usage" if no SIM.

If SIM is taken out, we disable "Mobile data" button in "Data usage"
page.

Bug: 67408951
Test: manual
Change-Id: I9f8937eadd5494f4f7710b9d5431176a13324bdd
parent a4deb5cf
Loading
Loading
Loading
Loading
+35 −4
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.os.Looper;
import android.os.Parcel;
import android.os.Parcelable;
import android.provider.Settings.Global;
import android.support.annotation.VisibleForTesting;
import android.support.v4.content.res.TypedArrayUtils;
import android.support.v7.preference.PreferenceViewHolder;
import android.telephony.SubscriptionInfo;
@@ -51,7 +52,8 @@ public class CellDataPreference extends CustomDialogPreference implements Templa
    public boolean mChecked;
    public boolean mMultiSimDialog;
    private TelephonyManager mTelephonyManager;
    private SubscriptionManager mSubscriptionManager;
    @VisibleForTesting
    SubscriptionManager mSubscriptionManager;

    public CellDataPreference(Context context, AttributeSet attrs) {
        super(context, attrs, TypedArrayUtils.getAttr(context,
@@ -85,12 +87,19 @@ public class CellDataPreference extends CustomDialogPreference implements Templa
    @Override
    public void onAttached() {
        super.onAttached();
        mListener.setListener(true, mSubId, getContext());
        mDataStateListener.setListener(true, mSubId, getContext());
        if (mSubscriptionManager!= null) {
            mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
        }
    }

    @Override
    public void onDetached() {
        mListener.setListener(false, mSubId, getContext());
        mDataStateListener.setListener(false, mSubId, getContext());
        if (mSubscriptionManager!= null) {
            mSubscriptionManager.removeOnSubscriptionsChangedListener(
                    mOnSubscriptionsChangeListener);
        }
        super.onDetached();
    }

@@ -101,10 +110,14 @@ public class CellDataPreference extends CustomDialogPreference implements Templa
        }
        mSubscriptionManager = SubscriptionManager.from(getContext());
        mTelephonyManager = TelephonyManager.from(getContext());

        mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);

        if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
            mSubId = subId;
            setKey(getKey() + subId);
        }
        updateEnabled();
        updateChecked();
    }

@@ -112,6 +125,12 @@ public class CellDataPreference extends CustomDialogPreference implements Templa
        setChecked(mTelephonyManager.getDataEnabled(mSubId));
    }

    private void updateEnabled() {
        // If this subscription is not active, for example, SIM card is taken out, we disable
        // the button.
        setEnabled(mSubscriptionManager.getActiveSubscriptionInfo(mSubId) != null);
    }

    @Override
    protected void performClick(View view) {
        final Context context = getContext();
@@ -237,7 +256,19 @@ public class CellDataPreference extends CustomDialogPreference implements Templa
        }
    }

    private final DataStateListener mListener = new DataStateListener() {
    @VisibleForTesting
    final SubscriptionManager.OnSubscriptionsChangedListener mOnSubscriptionsChangeListener
            = new SubscriptionManager.OnSubscriptionsChangedListener() {
        @Override
        public void onSubscriptionsChanged() {
            if (DataUsageSummary.LOGD) {
                Log.d(TAG, "onSubscriptionsChanged");
            }
            updateEnabled();
        }
    };

    private final DataStateListener mDataStateListener = new DataStateListener() {
        @Override
        public void onChange(boolean selfChange) {
            updateChecked();
+83 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 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.settings.datausage;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.support.v7.preference.PreferenceViewHolder;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;

import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;

@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class CellDataPreferenceTest {

    @Mock
    private SubscriptionManager mSubscriptionManager;
    @Mock
    private SubscriptionInfo mSubInfo;

    private Context mContext;
    private PreferenceViewHolder mHolder;
    private CellDataPreference mPreference;
    private SubscriptionManager.OnSubscriptionsChangedListener mListener;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);

        mContext = RuntimeEnvironment.application;
        mPreference = new CellDataPreference(mContext, null);
        mListener = mPreference.mOnSubscriptionsChangeListener;

        LayoutInflater inflater = LayoutInflater.from(mContext);
        final View view = inflater.inflate(mPreference.getLayoutResource(),
                new LinearLayout(mContext), false);

        mHolder = PreferenceViewHolder.createInstanceForTests(view);
    }

    @Test
    public void noActiveSub_shouldDisable() {
        mPreference.mSubscriptionManager = mSubscriptionManager;
        mListener.onSubscriptionsChanged();
        assertThat(mPreference.isEnabled()).isFalse();

        when(mSubscriptionManager.getActiveSubscriptionInfo(anyInt()))
                .thenReturn(mSubInfo);
        mListener.onSubscriptionsChanged();
        assertThat(mPreference.isEnabled()).isTrue();
    }

}