[Settings] Adjusted the API of Settings app
The API of Settings app get changed in order to support large screen. This is a fix to adopt the change related to this work. A short brief: 1. Accept ACTION_MAIN for launching MobileNetworkActivity. 2. Support deep-link intent while MobileNetworkActivity in foreground. 3. Avoid from binding MobileNetworkActivity as a single instance. Bug: 230047450 Bug: 234406562 Bug: 229371407 Test: local & unittest Change-Id: Ifcb9d4c564839199d998bd503f390f021c6bf3ad
This commit is contained in:
@@ -0,0 +1,192 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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 static com.google.common.truth.Truth.assertThat;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.spy;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
import android.telephony.ims.ImsRcsManager;
|
||||
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
|
||||
import com.android.settings.Settings.MobileNetworkActivity;
|
||||
import com.android.settings.SettingsActivity;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.network.telephony.MobileNetworkSettings;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class MobileNetworkIntentConverterTest {
|
||||
|
||||
private static final String ACTIONS_ALLOWED [] = {
|
||||
Intent.ACTION_MAIN,
|
||||
Settings.ACTION_NETWORK_OPERATOR_SETTINGS,
|
||||
Settings.ACTION_DATA_ROAMING_SETTINGS,
|
||||
Settings.ACTION_MMS_MESSAGE_SETTING,
|
||||
ImsRcsManager.ACTION_SHOW_CAPABILITY_DISCOVERY_OPT_IN
|
||||
};
|
||||
|
||||
private static final int TEST_SUBSCRIPTION_ID = 3;
|
||||
|
||||
private static final CharSequence TEST_TITLE_CHAR_SEQUENCE =
|
||||
"Test Title".subSequence(0, 10);
|
||||
|
||||
@Mock
|
||||
private Activity mActivity;
|
||||
|
||||
private MobileNetworkIntentConverter mIntentConverter;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
Context context = spy(ApplicationProvider.getApplicationContext());
|
||||
ComponentName componentName = ComponentName.createRelative(Utils.SETTINGS_PACKAGE_NAME,
|
||||
MobileNetworkActivity.class.getTypeName());
|
||||
|
||||
doReturn(context).when(mActivity).getApplicationContext();
|
||||
doReturn(componentName).when(mActivity).getComponentName();
|
||||
|
||||
mIntentConverter = new MobileNetworkIntentConverter(mActivity) {
|
||||
@Override
|
||||
protected boolean isAttachedToExposedComponents() {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Test
|
||||
public void converter_returnNull_whenNotInterested() {
|
||||
Intent intent = new Intent(Intent.ACTION_USER_INITIALIZE);
|
||||
assertThat(mIntentConverter.apply(intent)).isEqualTo(null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void converter_acceptableIntent_whenInterested() {
|
||||
Arrays.stream(ACTIONS_ALLOWED).forEach(action -> {
|
||||
Intent intent = new Intent(action);
|
||||
assertThat(mIntentConverter.apply(intent)).isNotEqualTo(null);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void convertSubscriptionId_fromIntentExtra_copyToBundleArgument() {
|
||||
Intent intent = new Intent(ACTIONS_ALLOWED[0]);
|
||||
intent.putExtra(Settings.EXTRA_SUB_ID, TEST_SUBSCRIPTION_ID);
|
||||
|
||||
Intent convertedIntent = mIntentConverter.apply(intent);
|
||||
|
||||
Bundle args = convertedIntent.getBundleExtra(
|
||||
SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS);
|
||||
assertThat(args.getInt(Settings.EXTRA_SUB_ID)).isEqualTo(TEST_SUBSCRIPTION_ID);
|
||||
|
||||
int intExtra = convertedIntent.getIntExtra(
|
||||
Settings.EXTRA_SUB_ID, TEST_SUBSCRIPTION_ID - 1);
|
||||
assertThat(intExtra).isEqualTo(TEST_SUBSCRIPTION_ID);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void supportMms_addExtra_whenIntentForMms() {
|
||||
Intent intent = new Intent(Settings.ACTION_MMS_MESSAGE_SETTING);
|
||||
|
||||
Intent convertedIntent = mIntentConverter.apply(intent);
|
||||
|
||||
Bundle args = convertedIntent.getBundleExtra(
|
||||
SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS);
|
||||
assertThat(args).isNotEqualTo(null);
|
||||
assertThat(args.getString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY)).isEqualTo(
|
||||
MobileNetworkActivity.EXTRA_MMS_MESSAGE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void supportContacts_addExtra_whenIntentForContacts() {
|
||||
Intent intent = new Intent(ImsRcsManager.ACTION_SHOW_CAPABILITY_DISCOVERY_OPT_IN);
|
||||
MobileNetworkIntentConverter converter = new MobileNetworkIntentConverter(mActivity) {
|
||||
@Override
|
||||
protected boolean isAttachedToExposedComponents() {
|
||||
return false;
|
||||
}
|
||||
@Override
|
||||
protected boolean mayShowContactDiscoveryDialog(Context context, int subId) {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
Intent convertedIntent = converter.apply(intent);
|
||||
|
||||
Bundle args = convertedIntent.getBundleExtra(
|
||||
SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS);
|
||||
assertThat(args).isNotEqualTo(null);
|
||||
assertThat(args.getBoolean(MobileNetworkActivity.EXTRA_SHOW_CAPABILITY_DISCOVERY_OPT_IN))
|
||||
.isEqualTo(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void convertFormat_forSettings_fragmentPresentation() {
|
||||
MobileNetworkIntentConverter converter = new MobileNetworkIntentConverter(mActivity) {
|
||||
@Override
|
||||
protected boolean isAttachedToExposedComponents() {
|
||||
return false;
|
||||
}
|
||||
@Override
|
||||
protected CharSequence getFragmentTitle(Context context, int subId) {
|
||||
return TEST_TITLE_CHAR_SEQUENCE;
|
||||
}
|
||||
};
|
||||
|
||||
Intent intent = new Intent(ACTIONS_ALLOWED[0]);
|
||||
|
||||
Intent convertedIntent = converter.apply(intent);
|
||||
|
||||
assertThat(convertedIntent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE))
|
||||
.isEqualTo(TEST_TITLE_CHAR_SEQUENCE.toString());
|
||||
assertThat(convertedIntent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT))
|
||||
.isEqualTo(MobileNetworkSettings.class.getTypeName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void convertFormat_deepLink_unwrapIntent() {
|
||||
MobileNetworkIntentConverter converter = new MobileNetworkIntentConverter(mActivity) {
|
||||
@Override
|
||||
protected boolean isAttachedToExposedComponents() {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
Intent intent = new Intent(ACTIONS_ALLOWED[0]);
|
||||
String intentUri = intent.toUri(Intent.URI_INTENT_SCHEME);
|
||||
|
||||
Intent deepLinkIntent = new Intent(Settings.ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY);
|
||||
deepLinkIntent.putExtra(Settings.EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI, intentUri);
|
||||
|
||||
assertThat(converter.apply(deepLinkIntent)).isNotEqualTo(null);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user