package com.james.status.data.icon;
import android.content.Context;
import android.telephony.PhoneStateListener;
import android.telephony.SignalStrength;
import android.telephony.TelephonyManager;
import com.james.status.R;
import com.james.status.data.IconStyleData;
import java.lang.ref.SoftReference;
import java.util.Arrays;
import java.util.List;
import james.signalstrengthslib.SignalStrengths;
public class NetworkIconData extends IconData {
private TelephonyManager telephonyManager;
private NetworkListener networkListener;
private boolean isRegistered;
public NetworkIconData(Context context) {
super(context);
telephonyManager = (TelephonyManager) getContext().getSystemService(Context.TELEPHONY_SERVICE);
}
@Override
public void register() {
if (networkListener == null) {
networkListener = new NetworkListener(this);
telephonyManager.listen(networkListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
}
isRegistered = true;
}
@Override
public void unregister() {
isRegistered = false;
}
@Override
public String getTitle() {
return getContext().getString(R.string.icon_network);
}
@Override
public int getIconStyleSize() {
return 5;
}
@Override
public List<IconStyleData> getIconStyles() {
List<IconStyleData> styles = super.getIconStyles();
styles.addAll(
Arrays.asList(
new IconStyleData(
getContext().getString(R.string.icon_style_default),
IconStyleData.TYPE_VECTOR,
R.drawable.ic_signal_0,
R.drawable.ic_signal_1,
R.drawable.ic_signal_2,
R.drawable.ic_signal_3,
R.drawable.ic_signal_4
),
new IconStyleData(
getContext().getString(R.string.icon_style_square),
IconStyleData.TYPE_VECTOR,
R.drawable.ic_signal_square_0,
R.drawable.ic_signal_square_1,
R.drawable.ic_signal_square_2,
R.drawable.ic_signal_square_3,
R.drawable.ic_signal_square_4
),
new IconStyleData(
getContext().getString(R.string.icon_style_retro),
IconStyleData.TYPE_VECTOR,
R.drawable.ic_signal_retro_0,
R.drawable.ic_signal_retro_1,
R.drawable.ic_signal_retro_2,
R.drawable.ic_signal_retro_3,
R.drawable.ic_signal_retro_4
),
new IconStyleData(
getContext().getString(R.string.icon_style_circle),
IconStyleData.TYPE_VECTOR,
R.drawable.ic_network_circle_0,
R.drawable.ic_network_circle_1,
R.drawable.ic_network_circle_2,
R.drawable.ic_network_circle_3,
R.drawable.ic_network_circle_4
),
new IconStyleData(
getContext().getString(R.string.icon_style_curved),
IconStyleData.TYPE_VECTOR,
R.drawable.ic_network_curved_0,
R.drawable.ic_network_curved_1,
R.drawable.ic_network_curved_2,
R.drawable.ic_network_curved_3,
R.drawable.ic_network_curved_4
),
new IconStyleData(
getContext().getString(R.string.icon_style_clip),
IconStyleData.TYPE_VECTOR,
R.drawable.ic_number_clip_0,
R.drawable.ic_number_clip_1,
R.drawable.ic_number_clip_2,
R.drawable.ic_number_clip_3,
R.drawable.ic_number_clip_4
)
)
);
return styles;
}
private static class NetworkListener extends PhoneStateListener {
private SoftReference<NetworkIconData> reference;
private NetworkListener(NetworkIconData iconData) {
reference = new SoftReference<>(iconData);
}
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
super.onSignalStrengthsChanged(signalStrength);
NetworkIconData icon = null;
if (reference != null) icon = reference.get();
if (icon != null && icon.isRegistered)
icon.onDrawableUpdate((int) Math.round(SignalStrengths.getFirstValid(signalStrength)));
}
}
}