Snap for 8618453 from d84a2b10f8 to tm-qpr1-release

Change-Id: I274dece855f90b5bc872d513ba5d20e66f1875eb
This commit is contained in:
Android Build Coastguard Worker
2022-05-20 03:10:23 +00:00
9 changed files with 148 additions and 28 deletions

View File

@@ -30,7 +30,15 @@ import com.android.settingslib.R;
import com.android.settingslib.bluetooth.BluetoothBroadcastUtils; import com.android.settingslib.bluetooth.BluetoothBroadcastUtils;
import com.android.settingslib.bluetooth.BluetoothUtils; import com.android.settingslib.bluetooth.BluetoothUtils;
//TODO (b/232365943): Add test case for tthe QrCode UI. /**
* Finding a broadcast through QR code.
*
* To use intent action {@link BluetoothBroadcastUtils#ACTION_BLUETOOTH_LE_AUDIO_QR_CODE_SCANNER},
* specify the bluetooth device sink of the broadcast to be provisioned in
* {@link BluetoothBroadcastUtils#EXTRA_BLUETOOTH_DEVICE_SINK} and check the operation for all
* coordinated set members throughout one session or not by
* {@link BluetoothBroadcastUtils#EXTRA_BLUETOOTH_SINK_IS_GROUP}.
*/
public class QrCodeScanModeActivity extends QrCodeScanModeBaseActivity { public class QrCodeScanModeActivity extends QrCodeScanModeBaseActivity {
private static final boolean DEBUG = BluetoothUtils.D; private static final boolean DEBUG = BluetoothUtils.D;
private static final String TAG = "QrCodeScanModeActivity"; private static final String TAG = "QrCodeScanModeActivity";

View File

@@ -260,6 +260,9 @@ public class SettingsBaseActivity extends FragmentActivity implements CategoryHa
} }
private int getTransitionType(Intent intent) { private int getTransitionType(Intent intent) {
if (intent == null) {
return TransitionType.TRANSITION_NONE;
}
return intent.getIntExtra(EXTRA_PAGE_TRANSITION_TYPE, TransitionType.TRANSITION_NONE); return intent.getIntExtra(EXTRA_PAGE_TRANSITION_TYPE, TransitionType.TRANSITION_NONE);
} }
} }

View File

@@ -456,7 +456,11 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl
} }
@Override @Override
public void onTelephonyDisplayInfoChanged(TelephonyDisplayInfo telephonyDisplayInfo) { public void onTelephonyDisplayInfoChanged(int subId,
TelephonyDisplayInfo telephonyDisplayInfo) {
if (subId != mSubsPrefCtrlInjector.getDefaultDataSubscriptionId()) {
return;
}
mTelephonyDisplayInfo = telephonyDisplayInfo; mTelephonyDisplayInfo = telephonyDisplayInfo;
update(); update();
} }

View File

@@ -37,8 +37,9 @@ public class TelephonyDisplayInfoListener {
private TelephonyManager mBaseTelephonyManager; private TelephonyManager mBaseTelephonyManager;
private Callback mCallback; private Callback mCallback;
private Map<Integer, PhoneStateListener> mListeners; private Map<Integer, PhoneStateListener> mListeners;
private Map<Integer, TelephonyDisplayInfo> mDisplayInfos;
private TelephonyDisplayInfo mTelephonyDisplayInfo = private static final TelephonyDisplayInfo mDefaultTelephonyDisplayInfo =
new TelephonyDisplayInfo(TelephonyManager.NETWORK_TYPE_UNKNOWN, new TelephonyDisplayInfo(TelephonyManager.NETWORK_TYPE_UNKNOWN,
TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE); TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE);
/** /**
@@ -48,19 +49,20 @@ public class TelephonyDisplayInfoListener {
/** /**
* Used to notify TelephonyDisplayInfo change. * Used to notify TelephonyDisplayInfo change.
*/ */
void onTelephonyDisplayInfoChanged(TelephonyDisplayInfo telephonyDisplayInfo); void onTelephonyDisplayInfoChanged(int subId, TelephonyDisplayInfo telephonyDisplayInfo);
} }
public TelephonyDisplayInfoListener(Context context, Callback callback) { public TelephonyDisplayInfoListener(Context context, Callback callback) {
mBaseTelephonyManager = context.getSystemService(TelephonyManager.class); mBaseTelephonyManager = context.getSystemService(TelephonyManager.class);
mCallback = callback; mCallback = callback;
mListeners = new HashMap<>(); mListeners = new HashMap<>();
mDisplayInfos = new HashMap<>();
} }
/** /**
* Get TelephonyDisplayInfo. * Get TelephonyDisplayInfo.
*/ */
public TelephonyDisplayInfo getTelephonyDisplayInfo() { public TelephonyDisplayInfo getTelephonyDisplayInfo(int subId) {
return mTelephonyDisplayInfo; return mDisplayInfos.get(subId);
} }
/** Resumes listening telephony display info changes to the set of ids from the last call to /** Resumes listening telephony display info changes to the set of ids from the last call to
@@ -85,15 +87,17 @@ public class TelephonyDisplayInfoListener {
for (int idToRemove : Sets.difference(currentIds, ids)) { for (int idToRemove : Sets.difference(currentIds, ids)) {
stopListening(idToRemove); stopListening(idToRemove);
mListeners.remove(idToRemove); mListeners.remove(idToRemove);
mDisplayInfos.remove(idToRemove);
} }
for (int idToAdd : Sets.difference(ids, currentIds)) { for (int idToAdd : Sets.difference(ids, currentIds)) {
PhoneStateListener listener = new PhoneStateListener() { PhoneStateListener listener = new PhoneStateListener() {
@Override @Override
public void onDisplayInfoChanged(TelephonyDisplayInfo telephonyDisplayInfo) { public void onDisplayInfoChanged(TelephonyDisplayInfo telephonyDisplayInfo) {
mTelephonyDisplayInfo = telephonyDisplayInfo; mDisplayInfos.put(idToAdd, telephonyDisplayInfo);
mCallback.onTelephonyDisplayInfoChanged(telephonyDisplayInfo); mCallback.onTelephonyDisplayInfoChanged(idToAdd, telephonyDisplayInfo);
} }
}; };
mDisplayInfos.put(idToAdd, mDefaultTelephonyDisplayInfo);
mListeners.put(idToAdd, listener); mListeners.put(idToAdd, listener);
startListening(idToAdd); startListening(idToAdd);
} }

View File

@@ -52,6 +52,8 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
/** /**
* Preference controller for "Auto Select Network" * Preference controller for "Auto Select Network"
@@ -70,11 +72,17 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon
ProgressDialog mProgressDialog; ProgressDialog mProgressDialog;
@VisibleForTesting @VisibleForTesting
SwitchPreference mSwitchPreference; SwitchPreference mSwitchPreference;
private AtomicBoolean mUpdatingConfig;
private int mCacheOfModeStatus;
private AtomicLong mRecursiveUpdate;
public AutoSelectPreferenceController(Context context, String key) { public AutoSelectPreferenceController(Context context, String key) {
super(context, key); super(context, key);
mTelephonyManager = context.getSystemService(TelephonyManager.class); mTelephonyManager = context.getSystemService(TelephonyManager.class);
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
mRecursiveUpdate = new AtomicLong();
mUpdatingConfig = new AtomicBoolean();
mCacheOfModeStatus = TelephonyManager.NETWORK_SELECTION_MODE_UNKNOWN;
mListeners = new ArrayList<>(); mListeners = new ArrayList<>();
mUiHandler = new Handler(Looper.getMainLooper()); mUiHandler = new Handler(Looper.getMainLooper());
mAllowedNetworkTypesListener = new AllowedNetworkTypesListener( mAllowedNetworkTypesListener = new AllowedNetworkTypesListener(
@@ -88,7 +96,9 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon
displayPreference(mPreferenceScreen); displayPreference(mPreferenceScreen);
} }
if (mSwitchPreference != null) { if (mSwitchPreference != null) {
mRecursiveUpdate.getAndIncrement();
updateState(mSwitchPreference); updateState(mSwitchPreference);
mRecursiveUpdate.decrementAndGet();
} }
} }
@@ -118,8 +128,13 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon
@Override @Override
public boolean isChecked() { public boolean isChecked() {
return mTelephonyManager.getNetworkSelectionMode() if (!mUpdatingConfig.get()) {
== TelephonyManager.NETWORK_SELECTION_MODE_AUTO; mCacheOfModeStatus = mTelephonyManager.getNetworkSelectionMode();
for (OnNetworkSelectModeListener lsn : mListeners) {
lsn.onNetworkSelectModeUpdated(mCacheOfModeStatus);
}
}
return mCacheOfModeStatus == TelephonyManager.NETWORK_SELECTION_MODE_AUTO;
} }
@Override @Override
@@ -147,6 +162,10 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon
@Override @Override
public boolean setChecked(boolean isChecked) { public boolean setChecked(boolean isChecked) {
if (mRecursiveUpdate.get() != 0) {
// Changing from software are allowed and changing presentation only.
return true;
}
if (isChecked) { if (isChecked) {
setAutomaticSelectionMode(); setAutomaticSelectionMode();
} else { } else {
@@ -171,18 +190,17 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon
} }
return ThreadUtils.postOnBackgroundThread(() -> { return ThreadUtils.postOnBackgroundThread(() -> {
// set network selection mode in background // set network selection mode in background
mUpdatingConfig.set(true);
mTelephonyManager.setNetworkSelectionModeAutomatic(); mTelephonyManager.setNetworkSelectionModeAutomatic();
final int mode = mTelephonyManager.getNetworkSelectionMode(); mUpdatingConfig.set(false);
//Update UI in UI thread //Update UI in UI thread
final long durationMillis = SystemClock.elapsedRealtime() - startMillis; final long durationMillis = SystemClock.elapsedRealtime() - startMillis;
mUiHandler.postDelayed(() -> { mUiHandler.postDelayed(() -> {
mRecursiveUpdate.getAndIncrement();
mSwitchPreference.setEnabled(true); mSwitchPreference.setEnabled(true);
mSwitchPreference.setChecked( mSwitchPreference.setChecked(isChecked());
mode == TelephonyManager.NETWORK_SELECTION_MODE_AUTO); mRecursiveUpdate.decrementAndGet();
for (OnNetworkSelectModeListener lsn : mListeners) {
lsn.onNetworkSelectModeChanged();
}
dismissProgressBar(); dismissProgressBar();
}, Math.max(MINIMUM_DIALOG_TIME_MILLIS - durationMillis, 0)); }, Math.max(MINIMUM_DIALOG_TIME_MILLIS - durationMillis, 0));
}); });
@@ -232,11 +250,11 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon
} }
/** /**
* Callback when network select mode is changed * Callback when network select mode might get updated
* *
* @see TelephonyManager#getNetworkSelectionMode() * @see TelephonyManager#getNetworkSelectionMode()
*/ */
public interface OnNetworkSelectModeListener { public interface OnNetworkSelectModeListener {
void onNetworkSelectModeChanged(); void onNetworkSelectModeUpdated(int mode);
} }
} }

View File

@@ -48,11 +48,13 @@ public class OpenNetworkSelectPagePreferenceController extends
private Preference mPreference; private Preference mPreference;
private PreferenceScreen mPreferenceScreen; private PreferenceScreen mPreferenceScreen;
private AllowedNetworkTypesListener mAllowedNetworkTypesListener; private AllowedNetworkTypesListener mAllowedNetworkTypesListener;
private int mCacheOfModeStatus;
public OpenNetworkSelectPagePreferenceController(Context context, String key) { public OpenNetworkSelectPagePreferenceController(Context context, String key) {
super(context, key); super(context, key);
mTelephonyManager = context.getSystemService(TelephonyManager.class); mTelephonyManager = context.getSystemService(TelephonyManager.class);
mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
mCacheOfModeStatus = TelephonyManager.NETWORK_SELECTION_MODE_UNKNOWN;
mAllowedNetworkTypesListener = new AllowedNetworkTypesListener( mAllowedNetworkTypesListener = new AllowedNetworkTypesListener(
context.getMainExecutor()); context.getMainExecutor());
mAllowedNetworkTypesListener.setAllowedNetworkTypesListener( mAllowedNetworkTypesListener.setAllowedNetworkTypesListener(
@@ -96,7 +98,7 @@ public class OpenNetworkSelectPagePreferenceController extends
@Override @Override
public void updateState(Preference preference) { public void updateState(Preference preference) {
super.updateState(preference); super.updateState(preference);
preference.setEnabled(mTelephonyManager.getNetworkSelectionMode() preference.setEnabled(mCacheOfModeStatus
!= TelephonyManager.NETWORK_SELECTION_MODE_AUTO); != TelephonyManager.NETWORK_SELECTION_MODE_AUTO);
Intent intent = new Intent(); Intent intent = new Intent();
@@ -125,7 +127,10 @@ public class OpenNetworkSelectPagePreferenceController extends
} }
@Override @Override
public void onNetworkSelectModeChanged() { public void onNetworkSelectModeUpdated(int mode) {
mCacheOfModeStatus = mode;
if (mPreference != null) {
updateState(mPreference); updateState(mPreference);
} }
}
} }

View File

@@ -0,0 +1,72 @@
/**
* 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.bluetooth;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Intent;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;
import com.android.settingslib.bluetooth.BluetoothBroadcastUtils;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
@RunWith(AndroidJUnit4.class)
public class QrCodeScanModeActivityTest {
@Mock
private Intent mIntent;
private QrCodeScanModeActivity mActivity;
@Before
public void setUp() {
mIntent = new Intent(BluetoothBroadcastUtils.ACTION_BLUETOOTH_LE_AUDIO_QR_CODE_SCANNER);
InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
try {
mActivity =
spy((QrCodeScanModeActivity) InstrumentationRegistry
.getInstrumentation().newActivity(
getClass().getClassLoader(),
QrCodeScanModeActivity.class.getName(), mIntent));
} catch (Exception e) {
throw new RuntimeException(e); // nothing to do
}
});
}
@Test
public void handleIntent_noIntentAction_shouldFinish() {
mIntent = new Intent();
mActivity.handleIntent(mIntent);
verify(mActivity).finish();
}
@Test
public void handleIntent_hasIntentExtra_shouldShowFragment() {
doNothing().when(mActivity).showQrCodeScannerFragment(mIntent);
mActivity.handleIntent(mIntent);
verify(mActivity).showQrCodeScannerFragment(mIntent);
}
}

View File

@@ -364,7 +364,8 @@ public class SubscriptionsPreferenceControllerTest {
mController.onResume(); mController.onResume();
mController.displayPreference(mPreferenceScreen); mController.displayPreference(mPreferenceScreen);
mController.onTelephonyDisplayInfoChanged(telephonyDisplayInfo); mController.onTelephonyDisplayInfoChanged(sub.get(0).getSubscriptionId(),
telephonyDisplayInfo);
assertThat(mPreferenceCategory.getPreference(0).getSummary()).isEqualTo(expectedSummary); assertThat(mPreferenceCategory.getPreference(0).getSummary()).isEqualTo(expectedSummary);
} }
@@ -388,7 +389,8 @@ public class SubscriptionsPreferenceControllerTest {
mController.onResume(); mController.onResume();
mController.displayPreference(mPreferenceScreen); mController.displayPreference(mPreferenceScreen);
mController.onTelephonyDisplayInfoChanged(telephonyDisplayInfo); mController.onTelephonyDisplayInfoChanged(sub.get(0).getSubscriptionId(),
telephonyDisplayInfo);
assertThat(mPreferenceCategory.getPreference(0).getSummary()).isEqualTo(expectedSummary); assertThat(mPreferenceCategory.getPreference(0).getSummary()).isEqualTo(expectedSummary);
} }
@@ -414,7 +416,8 @@ public class SubscriptionsPreferenceControllerTest {
mController.onResume(); mController.onResume();
mController.displayPreference(mPreferenceScreen); mController.displayPreference(mPreferenceScreen);
mController.onTelephonyDisplayInfoChanged(telephonyDisplayInfo); mController.onTelephonyDisplayInfoChanged(sub.get(0).getSubscriptionId(),
telephonyDisplayInfo);
assertThat(mPreferenceCategory.getPreference(0).getSummary()).isEqualTo(expectedSummary); assertThat(mPreferenceCategory.getPreference(0).getSummary()).isEqualTo(expectedSummary);
} }

View File

@@ -93,15 +93,18 @@ public class OpenNetworkSelectPagePreferenceControllerTest {
mPreference = new Preference(mContext); mPreference = new Preference(mContext);
mController = new OpenNetworkSelectPagePreferenceController(mContext, mController = new OpenNetworkSelectPagePreferenceController(mContext,
"open_network_select"); "open_network_select") {
@Override
public void updateState(Preference preference) {
super.updateState(mPreference);
}
};
mController.init(mLifecycle, SUB_ID); mController.init(mLifecycle, SUB_ID);
} }
@Test @Test
public void updateState_modeAuto_disabled() { public void updateState_modeAuto_disabled() {
when(mTelephonyManager.getNetworkSelectionMode()).thenReturn( mController.onNetworkSelectModeUpdated(TelephonyManager.NETWORK_SELECTION_MODE_AUTO);
TelephonyManager.NETWORK_SELECTION_MODE_AUTO);
mController.updateState(mPreference); mController.updateState(mPreference);
assertThat(mPreference.isEnabled()).isFalse(); assertThat(mPreference.isEnabled()).isFalse();