Merge "Fix SSID in notification for RTL languages" into main
This commit is contained in:
commit
e1564ce3c8
2 changed files with 45 additions and 3 deletions
|
|
@ -38,6 +38,7 @@ import android.os.Bundle;
|
|||
import android.os.UserHandle;
|
||||
import android.telephony.SubscriptionManager;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.text.BidiFormatter;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.util.SparseArray;
|
||||
|
|
@ -87,6 +88,7 @@ public class NetworkNotificationManager {
|
|||
|
||||
// The context is for the current user (system server)
|
||||
private final Context mContext;
|
||||
private final Dependencies mDependencies;
|
||||
private final ConnectivityResources mResources;
|
||||
private final TelephonyManager mTelephonyManager;
|
||||
// The notification manager is created from a context for User.ALL, so notifications
|
||||
|
|
@ -96,7 +98,15 @@ public class NetworkNotificationManager {
|
|||
private final SparseIntArray mNotificationTypeMap;
|
||||
|
||||
public NetworkNotificationManager(@NonNull final Context c, @NonNull final TelephonyManager t) {
|
||||
this(c, t, new Dependencies());
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
protected NetworkNotificationManager(@NonNull final Context c,
|
||||
@NonNull final TelephonyManager t,
|
||||
@NonNull Dependencies dependencies) {
|
||||
mContext = c;
|
||||
mDependencies = dependencies;
|
||||
mTelephonyManager = t;
|
||||
mNotificationManager =
|
||||
(NotificationManager) c.createContextAsUser(UserHandle.ALL, 0 /* flags */)
|
||||
|
|
@ -105,6 +115,13 @@ public class NetworkNotificationManager {
|
|||
mResources = new ConnectivityResources(mContext);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
protected static class Dependencies {
|
||||
public BidiFormatter getBidiFormatter() {
|
||||
return BidiFormatter.getInstance();
|
||||
}
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
protected static int approximateTransportType(NetworkAgentInfo nai) {
|
||||
return nai.isVPN() ? TRANSPORT_VPN : getFirstTransportType(nai);
|
||||
|
|
@ -174,7 +191,7 @@ public class NetworkNotificationManager {
|
|||
name = extraInfo;
|
||||
} else {
|
||||
final String ssid = WifiInfo.sanitizeSsid(nai.networkCapabilities.getSsid());
|
||||
name = ssid == null ? "" : ssid;
|
||||
name = ssid == null ? "" : mDependencies.getBidiFormatter().unicodeWrap(ssid);
|
||||
}
|
||||
// Only notify for Internet-capable networks.
|
||||
if (!nai.networkCapabilities.hasCapability(NET_CAPABILITY_INTERNET)) return;
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import static com.android.server.connectivity.NetworkNotificationManager.Notific
|
|||
import static com.android.server.connectivity.NetworkNotificationManager.NotificationType.SIGN_IN;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.any;
|
||||
import static org.mockito.Mockito.anyInt;
|
||||
|
|
@ -61,6 +62,7 @@ import android.os.PowerManager;
|
|||
import android.os.UserHandle;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.testing.PollingCheck;
|
||||
import android.text.BidiFormatter;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.widget.TextView;
|
||||
|
|
@ -95,13 +97,14 @@ import java.util.ArrayList;
|
|||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
@RunWith(DevSdkIgnoreRunner.class)
|
||||
@SmallTest
|
||||
@DevSdkIgnoreRule.IgnoreUpTo(Build.VERSION_CODES.R)
|
||||
public class NetworkNotificationManagerTest {
|
||||
|
||||
private static final String TEST_SSID = "Test SSID";
|
||||
private static final String TEST_SSID = "?Test SSID+";
|
||||
private static final String TEST_EXTRA_INFO = "extra";
|
||||
private static final int TEST_NOTIF_ID = 101;
|
||||
private static final String TEST_NOTIF_TAG = NetworkNotificationManager.tagFor(TEST_NOTIF_ID);
|
||||
|
|
@ -166,6 +169,7 @@ public class NetworkNotificationManagerTest {
|
|||
@Mock NetworkAgentInfo mBluetoothNai;
|
||||
@Mock NetworkInfo mNetworkInfo;
|
||||
@Mock NetworkInfo mEmptyNetworkInfo;
|
||||
@Mock NetworkNotificationManager.Dependencies mDependencies;
|
||||
ArgumentCaptor<Notification> mCaptor;
|
||||
|
||||
NetworkNotificationManager mManager;
|
||||
|
|
@ -192,6 +196,7 @@ public class NetworkNotificationManagerTest {
|
|||
doReturn(asUserCtx).when(mCtx).createContextAsUser(eq(UserHandle.ALL), anyInt());
|
||||
doReturn(mNotificationManager).when(mCtx)
|
||||
.getSystemService(eq(Context.NOTIFICATION_SERVICE));
|
||||
doReturn(BidiFormatter.getInstance(Locale.US)).when(mDependencies).getBidiFormatter();
|
||||
doReturn(TEST_EXTRA_INFO).when(mNetworkInfo).getExtraInfo();
|
||||
ConnectivityResources.setResourcesContextForTest(mCtx);
|
||||
doReturn(0xFF607D8B).when(mResources).getColor(anyInt(), any());
|
||||
|
|
@ -209,7 +214,7 @@ public class NetworkNotificationManagerTest {
|
|||
.thenReturn(transportNames);
|
||||
when(mResources.getBoolean(R.bool.config_autoCancelNetworkNotifications)).thenReturn(true);
|
||||
|
||||
mManager = new NetworkNotificationManager(mCtx, mTelephonyManager);
|
||||
mManager = new NetworkNotificationManager(mCtx, mTelephonyManager, mDependencies);
|
||||
}
|
||||
|
||||
@After
|
||||
|
|
@ -534,6 +539,26 @@ public class NetworkNotificationManagerTest {
|
|||
R.string.wifi_no_internet_detailed);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNotificationText_NoInternet_WithSsid() {
|
||||
doReturn(null).when(mNetworkInfo).getExtraInfo();
|
||||
doNotificationTextTest(NO_INTERNET,
|
||||
R.string.wifi_no_internet, TEST_SSID,
|
||||
R.string.wifi_no_internet_detailed);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNotificationText_NoInternet_WithRtlSsid() {
|
||||
final BidiFormatter formatter = BidiFormatter.getInstance(Locale.forLanguageTag("ar"));
|
||||
final String wrappedString = formatter.unicodeWrap(TEST_SSID);
|
||||
doReturn(formatter).when(mDependencies).getBidiFormatter();
|
||||
doReturn(null).when(mNetworkInfo).getExtraInfo();
|
||||
assertNotEquals(TEST_SSID, wrappedString);
|
||||
doNotificationTextTest(NO_INTERNET,
|
||||
R.string.wifi_no_internet, wrappedString,
|
||||
R.string.wifi_no_internet_detailed);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNotificationText_Partial() {
|
||||
doNotificationTextTest(PARTIAL_CONNECTIVITY,
|
||||
|
|
|
|||
Loading…
Reference in a new issue