This CL updates the availability to behave properly when a user other than the primary user is accessing it. This also makes the api return no intent if they don't have permission to access this because attempting to go to that screen will cause a crash. Also updates tests related to this change. Test: robotests still pass Bug: 64092292 Change-Id: If9913d9ae08ee3e205ff324aaeeadc755ff1d23d
106 lines
3.8 KiB
Java
106 lines
3.8 KiB
Java
/*
|
|
* Copyright (C) 2016 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.network;
|
|
|
|
import android.content.Context;
|
|
import android.os.UserManager;
|
|
import android.support.annotation.VisibleForTesting;
|
|
import android.support.v7.preference.Preference;
|
|
import android.support.v7.preference.PreferenceScreen;
|
|
import android.telephony.PhoneStateListener;
|
|
import android.telephony.ServiceState;
|
|
import android.telephony.TelephonyManager;
|
|
|
|
import com.android.settings.Utils;
|
|
import com.android.settings.core.PreferenceController;
|
|
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
|
import com.android.settingslib.core.lifecycle.events.OnPause;
|
|
import com.android.settingslib.core.lifecycle.events.OnResume;
|
|
|
|
import static android.os.UserHandle.myUserId;
|
|
import static android.os.UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS;
|
|
|
|
public class MobileNetworkPreferenceController extends PreferenceController implements
|
|
LifecycleObserver, OnResume, OnPause {
|
|
|
|
private static final String KEY_MOBILE_NETWORK_SETTINGS = "mobile_network_settings";
|
|
|
|
private final boolean mIsSecondaryUser;
|
|
private final TelephonyManager mTelephonyManager;
|
|
private final UserManager mUserManager;
|
|
private Preference mPreference;
|
|
@VisibleForTesting
|
|
PhoneStateListener mPhoneStateListener;
|
|
|
|
public MobileNetworkPreferenceController(Context context) {
|
|
super(context);
|
|
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
|
mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
|
|
mIsSecondaryUser = !mUserManager.isAdminUser();
|
|
}
|
|
|
|
@Override
|
|
public boolean isAvailable() {
|
|
return !isUserRestricted() && !Utils.isWifiOnly(mContext);
|
|
}
|
|
|
|
public boolean isUserRestricted() {
|
|
final RestrictedLockUtilsWrapper wrapper = new RestrictedLockUtilsWrapper();
|
|
return mIsSecondaryUser ||
|
|
wrapper.hasBaseUserRestriction(
|
|
mContext,
|
|
DISALLOW_CONFIG_MOBILE_NETWORKS,
|
|
myUserId());
|
|
}
|
|
|
|
@Override
|
|
public void displayPreference(PreferenceScreen screen) {
|
|
super.displayPreference(screen);
|
|
if (isAvailable()) {
|
|
mPreference = screen.findPreference(getPreferenceKey());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public String getPreferenceKey() {
|
|
return KEY_MOBILE_NETWORK_SETTINGS;
|
|
}
|
|
|
|
@Override
|
|
public void onResume() {
|
|
if (isAvailable()) {
|
|
if (mPhoneStateListener == null) {
|
|
mPhoneStateListener = new PhoneStateListener() {
|
|
@Override
|
|
public void onServiceStateChanged(ServiceState serviceState) {
|
|
if (mPreference != null) {
|
|
mPreference.setSummary(mTelephonyManager.getNetworkOperatorName());
|
|
}
|
|
}
|
|
};
|
|
}
|
|
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onPause() {
|
|
if (mPhoneStateListener != null) {
|
|
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
|
|
}
|
|
}
|
|
}
|