Loading AndroidManifest.xml +1 −0 Original line number Original line Diff line number Diff line Loading @@ -2016,6 +2016,7 @@ <activity android:name=".bluetooth.BluetoothPairingDialog" <activity android:name=".bluetooth.BluetoothPairingDialog" android:excludeFromRecents="true" android:excludeFromRecents="true" android:windowSoftInputMode="stateVisible|adjustResize" android:theme="@*android:style/Theme.DeviceDefault.Settings.Dialog.NoActionBar"> android:theme="@*android:style/Theme.DeviceDefault.Settings.Dialog.NoActionBar"> <intent-filter android:priority="1"> <intent-filter android:priority="1"> <action android:name="android.bluetooth.device.action.PAIRING_REQUEST" /> <action android:name="android.bluetooth.device.action.PAIRING_REQUEST" /> Loading src/com/android/settings/bluetooth/BluetoothPairingDialogFragment.java +13 −1 Original line number Original line Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.settings.bluetooth; import android.app.AlertDialog; import android.app.AlertDialog; import android.app.Dialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.DialogInterface.OnClickListener; import android.os.Bundle; import android.os.Bundle; Loading @@ -27,10 +28,12 @@ import android.text.InputType; import android.text.TextWatcher; import android.text.TextWatcher; import android.util.Log; import android.util.Log; import android.view.View; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.Button; import android.widget.CheckBox; import android.widget.CheckBox; import android.widget.EditText; import android.widget.EditText; import android.widget.TextView; import android.widget.TextView; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.R; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; Loading Loading @@ -192,7 +195,16 @@ public class BluetoothPairingDialogFragment extends InstrumentedDialogFragment i mBuilder.setPositiveButton(getString(android.R.string.ok), this); mBuilder.setPositiveButton(getString(android.R.string.ok), this); mBuilder.setNegativeButton(getString(android.R.string.cancel), this); mBuilder.setNegativeButton(getString(android.R.string.cancel), this); AlertDialog dialog = mBuilder.create(); AlertDialog dialog = mBuilder.create(); dialog.setOnShowListener(d -> mDialog.getButton(Dialog.BUTTON_POSITIVE).setEnabled(false)); dialog.setOnShowListener(d -> { mDialog.getButton(Dialog.BUTTON_POSITIVE).setEnabled(false); if (mPairingView != null && mPairingView.requestFocus()) { InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { imm.showSoftInput(mPairingView, InputMethodManager.SHOW_IMPLICIT); } } }); return dialog; return dialog; } } Loading tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java +37 −14 Original line number Original line Diff line number Diff line Loading @@ -15,17 +15,31 @@ */ */ package com.android.settings.bluetooth; package com.android.settings.bluetooth; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.fail; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.AlertDialog; import android.app.AlertDialog; import android.content.Context; import android.content.Context; import android.text.SpannableStringBuilder; import android.text.SpannableStringBuilder; import android.text.TextUtils; import android.text.TextUtils; import android.view.View; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.CheckBox; import android.widget.CheckBox; import android.widget.TextView; import android.widget.TextView; import com.android.settings.R; import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.TestConfig; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.ShadowEventLogWriter; import org.junit.Before; import org.junit.Before; import org.junit.Test; import org.junit.Test; Loading @@ -36,16 +50,9 @@ import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowApplication; import org.robolectric.shadows.ShadowApplication; import org.robolectric.util.FragmentTestUtil; import org.robolectric.util.FragmentTestUtil; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.fail; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows=ShadowEventLogWriter.class) public class BluetoothPairingDialogTest { public class BluetoothPairingDialogTest { private static final String FILLER = "text that goes in a view"; private static final String FILLER = "text that goes in a view"; Loading Loading @@ -130,12 +137,24 @@ public class BluetoothPairingDialogTest { when(controller.getDeviceVariantMessageHintId()) when(controller.getDeviceVariantMessageHintId()) .thenReturn(BluetoothPairingController.INVALID_DIALOG_TYPE); .thenReturn(BluetoothPairingController.INVALID_DIALOG_TYPE); Context context = spy(ShadowApplication.getInstance().getApplicationContext()); InputMethodManager imm = mock(InputMethodManager.class); doReturn(imm).when(context).getSystemService(Context.INPUT_METHOD_SERVICE); // build the fragment // build the fragment BluetoothPairingDialogFragment frag = makeFragment(); BluetoothPairingDialogFragment frag = spy(new BluetoothPairingDialogFragment()); when(frag.getContext()).thenReturn(context); setupFragment(frag); AlertDialog alertDialog = frag.getmDialog(); // check that the pin/passkey input field is visible to the user // check that the pin/passkey input field is visible to the user View view = frag.getmDialog().findViewById(R.id.text); View view = alertDialog.findViewById(R.id.text); assertThat(view.getVisibility()).isEqualTo(View.VISIBLE); assertThat(view.getVisibility()).isEqualTo(View.VISIBLE); // check that showSoftInput was called to make input method appear when the dialog was shown assertThat(view.isFocused()).isTrue(); assertThat(imm.isActive()); verify(imm).showSoftInput(view, InputMethodManager.SHOW_IMPLICIT); } } @Test @Test Loading Loading @@ -393,8 +412,7 @@ public class BluetoothPairingDialogTest { verify(dialogActivity, times(1)).dismiss(); verify(dialogActivity, times(1)).dismiss(); } } private BluetoothPairingDialogFragment makeFragment() { private void setupFragment(BluetoothPairingDialogFragment frag) { BluetoothPairingDialogFragment frag = new BluetoothPairingDialogFragment(); assertThat(frag.isPairingControllerSet()).isFalse(); assertThat(frag.isPairingControllerSet()).isFalse(); frag.setPairingController(controller); frag.setPairingController(controller); assertThat(frag.isPairingDialogActivitySet()).isFalse(); assertThat(frag.isPairingDialogActivitySet()).isFalse(); Loading @@ -403,6 +421,11 @@ public class BluetoothPairingDialogTest { assertThat(frag.getmDialog()).isNotNull(); assertThat(frag.getmDialog()).isNotNull(); assertThat(frag.isPairingControllerSet()).isTrue(); assertThat(frag.isPairingControllerSet()).isTrue(); assertThat(frag.isPairingDialogActivitySet()).isTrue(); assertThat(frag.isPairingDialogActivitySet()).isTrue(); } private BluetoothPairingDialogFragment makeFragment() { BluetoothPairingDialogFragment frag = new BluetoothPairingDialogFragment(); setupFragment(frag); return frag; return frag; } } } } Loading
AndroidManifest.xml +1 −0 Original line number Original line Diff line number Diff line Loading @@ -2016,6 +2016,7 @@ <activity android:name=".bluetooth.BluetoothPairingDialog" <activity android:name=".bluetooth.BluetoothPairingDialog" android:excludeFromRecents="true" android:excludeFromRecents="true" android:windowSoftInputMode="stateVisible|adjustResize" android:theme="@*android:style/Theme.DeviceDefault.Settings.Dialog.NoActionBar"> android:theme="@*android:style/Theme.DeviceDefault.Settings.Dialog.NoActionBar"> <intent-filter android:priority="1"> <intent-filter android:priority="1"> <action android:name="android.bluetooth.device.action.PAIRING_REQUEST" /> <action android:name="android.bluetooth.device.action.PAIRING_REQUEST" /> Loading
src/com/android/settings/bluetooth/BluetoothPairingDialogFragment.java +13 −1 Original line number Original line Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.settings.bluetooth; import android.app.AlertDialog; import android.app.AlertDialog; import android.app.Dialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.DialogInterface.OnClickListener; import android.os.Bundle; import android.os.Bundle; Loading @@ -27,10 +28,12 @@ import android.text.InputType; import android.text.TextWatcher; import android.text.TextWatcher; import android.util.Log; import android.util.Log; import android.view.View; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.Button; import android.widget.CheckBox; import android.widget.CheckBox; import android.widget.EditText; import android.widget.EditText; import android.widget.TextView; import android.widget.TextView; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.R; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; Loading Loading @@ -192,7 +195,16 @@ public class BluetoothPairingDialogFragment extends InstrumentedDialogFragment i mBuilder.setPositiveButton(getString(android.R.string.ok), this); mBuilder.setPositiveButton(getString(android.R.string.ok), this); mBuilder.setNegativeButton(getString(android.R.string.cancel), this); mBuilder.setNegativeButton(getString(android.R.string.cancel), this); AlertDialog dialog = mBuilder.create(); AlertDialog dialog = mBuilder.create(); dialog.setOnShowListener(d -> mDialog.getButton(Dialog.BUTTON_POSITIVE).setEnabled(false)); dialog.setOnShowListener(d -> { mDialog.getButton(Dialog.BUTTON_POSITIVE).setEnabled(false); if (mPairingView != null && mPairingView.requestFocus()) { InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { imm.showSoftInput(mPairingView, InputMethodManager.SHOW_IMPLICIT); } } }); return dialog; return dialog; } } Loading
tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java +37 −14 Original line number Original line Diff line number Diff line Loading @@ -15,17 +15,31 @@ */ */ package com.android.settings.bluetooth; package com.android.settings.bluetooth; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.fail; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.AlertDialog; import android.app.AlertDialog; import android.content.Context; import android.content.Context; import android.text.SpannableStringBuilder; import android.text.SpannableStringBuilder; import android.text.TextUtils; import android.text.TextUtils; import android.view.View; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.CheckBox; import android.widget.CheckBox; import android.widget.TextView; import android.widget.TextView; import com.android.settings.R; import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.TestConfig; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.ShadowEventLogWriter; import org.junit.Before; import org.junit.Before; import org.junit.Test; import org.junit.Test; Loading @@ -36,16 +50,9 @@ import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowApplication; import org.robolectric.shadows.ShadowApplication; import org.robolectric.util.FragmentTestUtil; import org.robolectric.util.FragmentTestUtil; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.fail; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows=ShadowEventLogWriter.class) public class BluetoothPairingDialogTest { public class BluetoothPairingDialogTest { private static final String FILLER = "text that goes in a view"; private static final String FILLER = "text that goes in a view"; Loading Loading @@ -130,12 +137,24 @@ public class BluetoothPairingDialogTest { when(controller.getDeviceVariantMessageHintId()) when(controller.getDeviceVariantMessageHintId()) .thenReturn(BluetoothPairingController.INVALID_DIALOG_TYPE); .thenReturn(BluetoothPairingController.INVALID_DIALOG_TYPE); Context context = spy(ShadowApplication.getInstance().getApplicationContext()); InputMethodManager imm = mock(InputMethodManager.class); doReturn(imm).when(context).getSystemService(Context.INPUT_METHOD_SERVICE); // build the fragment // build the fragment BluetoothPairingDialogFragment frag = makeFragment(); BluetoothPairingDialogFragment frag = spy(new BluetoothPairingDialogFragment()); when(frag.getContext()).thenReturn(context); setupFragment(frag); AlertDialog alertDialog = frag.getmDialog(); // check that the pin/passkey input field is visible to the user // check that the pin/passkey input field is visible to the user View view = frag.getmDialog().findViewById(R.id.text); View view = alertDialog.findViewById(R.id.text); assertThat(view.getVisibility()).isEqualTo(View.VISIBLE); assertThat(view.getVisibility()).isEqualTo(View.VISIBLE); // check that showSoftInput was called to make input method appear when the dialog was shown assertThat(view.isFocused()).isTrue(); assertThat(imm.isActive()); verify(imm).showSoftInput(view, InputMethodManager.SHOW_IMPLICIT); } } @Test @Test Loading Loading @@ -393,8 +412,7 @@ public class BluetoothPairingDialogTest { verify(dialogActivity, times(1)).dismiss(); verify(dialogActivity, times(1)).dismiss(); } } private BluetoothPairingDialogFragment makeFragment() { private void setupFragment(BluetoothPairingDialogFragment frag) { BluetoothPairingDialogFragment frag = new BluetoothPairingDialogFragment(); assertThat(frag.isPairingControllerSet()).isFalse(); assertThat(frag.isPairingControllerSet()).isFalse(); frag.setPairingController(controller); frag.setPairingController(controller); assertThat(frag.isPairingDialogActivitySet()).isFalse(); assertThat(frag.isPairingDialogActivitySet()).isFalse(); Loading @@ -403,6 +421,11 @@ public class BluetoothPairingDialogTest { assertThat(frag.getmDialog()).isNotNull(); assertThat(frag.getmDialog()).isNotNull(); assertThat(frag.isPairingControllerSet()).isTrue(); assertThat(frag.isPairingControllerSet()).isTrue(); assertThat(frag.isPairingDialogActivitySet()).isTrue(); assertThat(frag.isPairingDialogActivitySet()).isTrue(); } private BluetoothPairingDialogFragment makeFragment() { BluetoothPairingDialogFragment frag = new BluetoothPairingDialogFragment(); setupFragment(frag); return frag; return frag; } } } }