blob: 117b0eaf7ee6db8f57821068049094fb06e2c77b [file] [log] [blame]
/*
* Copyright (C) 2020 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.internal.telephony.vendor;
import android.content.Context;
import android.provider.Settings;
import android.telephony.SubscriptionInfo;
import android.telephony.TelephonyManager;
import android.util.Log;
import com.android.internal.telephony.GlobalSettingsHelper;
import com.android.internal.telephony.MultiSimSettingController;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.SubscriptionController;
import java.util.List;
/*
* Extending VendorMultiSimSettingController to override default
* behavior for mobile data
*/
public class VendorMultiSimSettingController extends MultiSimSettingController {
private static final String LOG_TAG = "VendorMultiSimSettingController";
public static MultiSimSettingController init(Context context, SubscriptionController sc) {
synchronized (VendorMultiSimSettingController.class) {
if (sInstance == null) {
sInstance = new VendorMultiSimSettingController(context,
SubscriptionController.getInstance());
} else {
Log.wtf(LOG_TAG, "init() called multiple times! sInstance = " + sInstance);
}
}
return sInstance;
}
private VendorMultiSimSettingController(Context context, SubscriptionController sc) {
super(context, sc);
}
public static VendorMultiSimSettingController getInstance() {
return (VendorMultiSimSettingController)sInstance;
}
@Override
protected void disableDataForNonDefaultNonOpportunisticSubscriptions() {
log("disableDataForNonDefaultNonOpportunisticSubscriptions - do nothing");
}
protected synchronized void onUserDataEnabled(int subId, boolean enable) {
log("onUserDataEnabled");
// Make sure MOBILE_DATA of subscriptions in same group are synced.
setUserDataEnabledForGroup(subId, enable);
}
/**
* Make sure MOBILE_DATA of subscriptions in the same group with the subId
* are synced.
*/
@Override
protected synchronized void setUserDataEnabledForGroup(int subId, boolean enable) {
log("setUserDataEnabledForGroup subId " + subId + " enable " + enable);
List<SubscriptionInfo> infoList = mSubController.getSubscriptionsInGroup(
mSubController.getGroupUuid(subId), mContext.getOpPackageName(),
null);
if (infoList == null) return;
for (SubscriptionInfo info : infoList) {
int currentSubId = info.getSubscriptionId();
if (currentSubId == subId) continue;
// TODO: simplify when setUserDataEnabled becomes singleton
if (mSubController.isActiveSubId(currentSubId)) {
// For active subscription, call setUserDataEnabled through DataEnabledSettings.
Phone phone = PhoneFactory.getPhone(mSubController.getPhoneId(currentSubId));
if (phone != null) {
phone.getDataEnabledSettings().setDataEnabled(
TelephonyManager.DATA_ENABLED_REASON_USER, enable);
}
} else {
// For inactive subscription, directly write into global settings.
GlobalSettingsHelper.setBoolean(
mContext, Settings.Global.MOBILE_DATA, currentSubId, enable);
}
}
}
@Override
protected void updateDefaults() {
log("updateDefaults");
}
protected void log(String msg) {
Log.d(LOG_TAG, msg);
}
}