blob: ef2ca985858da2a8a3f38bfd11d60c6dbf790fd3 [file] [log] [blame]
/*
* Copyright (C) 2014 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.systemui.statusbar.policy;
import android.content.Context;
import android.content.Intent;
import android.telephony.SubscriptionInfo;
import com.android.settingslib.net.DataUsageController;
import com.android.systemui.demomode.DemoMode;
import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
import com.android.wifitrackerlib.WifiEntry;
import java.util.List;
public interface NetworkController extends CallbackController<SignalCallback>, DemoMode {
boolean hasMobileDataFeature();
void setWifiEnabled(boolean enabled);
AccessPointController getAccessPointController();
DataUsageController getMobileDataController();
DataSaverController getDataSaverController();
String getMobileDataNetworkName();
boolean isMobileDataNetworkInService();
int getNumberSubscriptions();
boolean hasVoiceCallingFeature();
void addEmergencyListener(EmergencyListener listener);
void removeEmergencyListener(EmergencyListener listener);
boolean hasEmergencyCryptKeeperText();
boolean isRadioOn();
/**
* Wrapper class for all the WiFi signals used for WiFi indicators.
*/
final class WifiIndicators {
public boolean enabled;
public IconState statusIcon;
public IconState qsIcon;
public boolean activityIn;
public boolean activityOut;
public String description;
public boolean isTransient;
public String statusLabel;
public WifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon,
boolean activityIn, boolean activityOut, String description,
boolean isTransient, String statusLabel) {
this.enabled = enabled;
this.statusIcon = statusIcon;
this.qsIcon = qsIcon;
this.activityIn = activityIn;
this.activityOut = activityOut;
this.description = description;
this.isTransient = isTransient;
this.statusLabel = statusLabel;
}
@Override
public String toString() {
return new StringBuilder("WifiIndicators[")
.append("enabled=").append(enabled)
.append(",statusIcon=").append(statusIcon == null ? "" : statusIcon.toString())
.append(",qsIcon=").append(qsIcon == null ? "" : qsIcon.toString())
.append(",activityIn=").append(activityIn)
.append(",activityOut=").append(activityOut)
.append(",description=").append(description)
.append(",isTransient=").append(isTransient)
.append(",statusLabel=").append(statusLabel)
.append(']').toString();
}
}
/**
* Wrapper class for all the mobile signals used for mobile data indicators.
*/
final class MobileDataIndicators {
public IconState statusIcon;
public IconState qsIcon;
public int statusType;
public int qsType;
public boolean activityIn;
public boolean activityOut;
public CharSequence typeContentDescription;
public CharSequence typeContentDescriptionHtml;
public CharSequence description;
public boolean isWide;
public int subId;
public boolean roaming;
public boolean showTriangle;
public MobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType,
int qsType, boolean activityIn, boolean activityOut,
CharSequence typeContentDescription, CharSequence typeContentDescriptionHtml,
CharSequence description, boolean isWide, int subId, boolean roaming,
boolean showTriangle) {
this.statusIcon = statusIcon;
this.qsIcon = qsIcon;
this.statusType = statusType;
this.qsType = qsType;
this.activityIn = activityIn;
this.activityOut = activityOut;
this.typeContentDescription = typeContentDescription;
this.typeContentDescriptionHtml = typeContentDescriptionHtml;
this.description = description;
this.isWide = isWide;
this.subId = subId;
this.roaming = roaming;
this.showTriangle = showTriangle;
}
@Override
public String toString() {
return new StringBuilder("MobileDataIndicators[")
.append("statusIcon=").append(statusIcon == null ? "" : statusIcon.toString())
.append(",qsIcon=").append(qsIcon == null ? "" : qsIcon.toString())
.append(",statusType=").append(statusType)
.append(",qsType=").append(qsType)
.append(",activityIn=").append(activityIn)
.append(",activityOut=").append(activityOut)
.append(",typeContentDescription=").append(typeContentDescription)
.append(",typeContentDescriptionHtml=").append(typeContentDescriptionHtml)
.append(",description=").append(description)
.append(",isWide=").append(isWide)
.append(",subId=").append(subId)
.append(",roaming=").append(roaming)
.append(",showTriangle=").append(showTriangle)
.append(']').toString();
}
}
public interface SignalCallback {
/**
* Callback for listeners to be able to update the state of any UI tracking connectivity of
* WiFi networks.
*/
default void setWifiIndicators(WifiIndicators wifiIndicators) {}
/**
* Callback for listeners to be able to update the state of any UI tracking connectivity
* of Mobile networks.
*/
default void setMobileDataIndicators(MobileDataIndicators mobileDataIndicators) {}
default void setSubs(List<SubscriptionInfo> subs) {}
default void setNoSims(boolean show, boolean simDetected) {}
default void setEthernetIndicators(IconState icon) {}
default void setIsAirplaneMode(IconState icon) {}
default void setMobileDataEnabled(boolean enabled) {}
/**
* Callback for listeners to be able to update the connectivity status
* @param noDefaultNetwork whether there is any default network.
* @param noValidatedNetwork whether there is any validated network.
* @param noNetworksAvailable whether there is any WiFi networks available.
*/
default void setConnectivityStatus(boolean noDefaultNetwork, boolean noValidatedNetwork,
boolean noNetworksAvailable) {}
/**
* Callback for listeners to be able to update the call indicator
* @param statusIcon the icon for the call indicator
* @param subId subscription ID for which to update the UI
*/
default void setCallIndicator(IconState statusIcon, int subId) {}
}
public interface EmergencyListener {
void setEmergencyCallsOnly(boolean emergencyOnly);
}
public static class IconState {
public final boolean visible;
public final int icon;
public final String contentDescription;
public IconState(boolean visible, int icon, String contentDescription) {
this.visible = visible;
this.icon = icon;
this.contentDescription = contentDescription;
}
public IconState(boolean visible, int icon, int contentDescription,
Context context) {
this(visible, icon, context.getString(contentDescription));
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
return builder.append("[visible=").append(visible).append(',')
.append("icon=").append(icon).append(',')
.append("contentDescription=").append(contentDescription).append(']')
.toString();
}
}
/**
* Tracks changes in access points. Allows listening for changes, scanning for new APs,
* and connecting to new ones.
*/
public interface AccessPointController {
void addAccessPointCallback(AccessPointCallback callback);
void removeAccessPointCallback(AccessPointCallback callback);
void scanForAccessPoints();
int getIcon(WifiEntry ap);
boolean connect(WifiEntry ap);
boolean canConfigWifi();
public interface AccessPointCallback {
void onAccessPointsChanged(List<WifiEntry> accessPoints);
void onSettingsActivityTriggered(Intent settingsIntent);
}
}
}