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

Commit d10e66fa authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Move SimStatus and ImeiInfo Pref Controllers to SettingsLib"

parents 7b2b1767 88920145
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -12,9 +12,7 @@ import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.net.ConnectivityManager;
import android.os.BatteryManager;
@@ -297,4 +295,9 @@ public class Utils {
        }
        return defaultDays;
    }

    public static boolean isWifiOnly(Context context) {
        return !context.getSystemService(ConnectivityManager.class)
                .isNetworkSupported(ConnectivityManager.TYPE_MOBILE);
    }
}
+36 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 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.settingslib.deviceinfo;

import android.content.Context;
import android.os.UserManager;

import com.android.settingslib.Utils;
import com.android.settingslib.core.AbstractPreferenceController;

public abstract class AbstractSimStatusImeiInfoPreferenceController
        extends AbstractPreferenceController {
    public AbstractSimStatusImeiInfoPreferenceController(Context context) {
        super(context);
    }

    @Override
    public boolean isAvailable() {
        return mContext.getSystemService(UserManager.class).isAdminUser()
                && !Utils.isWifiOnly(mContext);
    }
}
+120 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 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.settingslib.deviceinfo;

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

import static org.robolectric.shadow.api.Shadow.extract;

import android.net.ConnectivityManager;
import android.os.UserManager;
import android.util.SparseBooleanArray;

import com.android.settingslib.SettingsLibRobolectricTestRunner;
import com.android.settingslib.TestConfig;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;

@RunWith(SettingsLibRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
        shadows = {SimStatusImeiInfoPreferenceControllerTest.ShadowUserManager.class,
                SimStatusImeiInfoPreferenceControllerTest.ShadowConnectivityManager.class})
public class SimStatusImeiInfoPreferenceControllerTest {

    private AbstractSimStatusImeiInfoPreferenceController mController;

    @Before
    public void setUp() {
        mController = new AbstractSimStatusImeiInfoPreferenceController(
                RuntimeEnvironment.application) {
            @Override
            public String getPreferenceKey() {
                return null;
            }
        };
    }

    @Test
    public void testIsAvailable_isAdminAndHasMobile_shouldReturnTrue() {
        ShadowUserManager userManager =
                extract(RuntimeEnvironment.application.getSystemService(UserManager.class));
        userManager.setIsAdminUser(true);
        ShadowConnectivityManager connectivityManager =
                extract(RuntimeEnvironment.application.getSystemService(ConnectivityManager.class));
        connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, true);

        assertThat(mController.isAvailable()).isTrue();
    }

    @Test
    public void testIsAvailable_isAdminButNoMobile_shouldReturnFalse() {
        ShadowUserManager userManager =
                extract(RuntimeEnvironment.application.getSystemService(UserManager.class));
        userManager.setIsAdminUser(true);
        ShadowConnectivityManager connectivityManager =
                extract(RuntimeEnvironment.application.getSystemService(ConnectivityManager.class));
        connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, false);

        assertThat(mController.isAvailable()).isFalse();
    }

    @Test
    public void testIsAvailable_isNotAdmin_shouldReturnFalse() {
        ShadowUserManager userManager =
                extract(RuntimeEnvironment.application.getSystemService(UserManager.class));
        userManager.setIsAdminUser(false);

        assertThat(mController.isAvailable()).isFalse();
    }

    @Implements(UserManager.class)
    public static class ShadowUserManager extends org.robolectric.shadows.ShadowUserManager {

        private boolean mAdminUser;

        public void setIsAdminUser(boolean isAdminUser) {
            mAdminUser = isAdminUser;
        }

        @Implementation
        public boolean isAdminUser() {
            return mAdminUser;
        }
    }

    @Implements(ConnectivityManager.class)
    public static class ShadowConnectivityManager
            extends org.robolectric.shadows.ShadowConnectivityManager {

        private final SparseBooleanArray mSupportedNetworkTypes = new SparseBooleanArray();

        public void setNetworkSupported(int networkType, boolean supported) {
            mSupportedNetworkTypes.put(networkType, supported);
        }

        @Implementation
        public boolean isNetworkSupported(int networkType) {
            return mSupportedNetworkTypes.get(networkType);
        }
    }
}