diff --git a/res/drawable/ic_qrcode_24dp.xml b/res/drawable/ic_qrcode_24dp.xml index ff7806f8107..6928cb97105 100644 --- a/res/drawable/ic_qrcode_24dp.xml +++ b/res/drawable/ic_qrcode_24dp.xml @@ -2,7 +2,8 @@ android:width="24dp" android:height="24dp" android:viewportWidth="24" - android:viewportHeight="24"> + android:viewportHeight="24" + android:tint="?android:attr/colorAccent"> diff --git a/res/drawable/ic_scan_24dp.xml b/res/drawable/ic_scan_24dp.xml index bcef8e32db0..c7b82d1f7e2 100644 --- a/res/drawable/ic_scan_24dp.xml +++ b/res/drawable/ic_scan_24dp.xml @@ -2,7 +2,8 @@ android:width="24dp" android:height="24dp" android:viewportWidth="24" - android:viewportHeight="24"> + android:viewportHeight="24" + android:tint="?android:attr/colorAccent"> diff --git a/res/layout/wifi_button_preference_widget.xml b/res/layout/wifi_button_preference_widget.xml index 0999d209783..4b004e32b48 100644 --- a/res/layout/wifi_button_preference_widget.xml +++ b/res/layout/wifi_button_preference_widget.xml @@ -22,5 +22,4 @@ android:minWidth="@dimen/min_tap_target_size" android:minHeight="@dimen/min_tap_target_size" android:layout_gravity="center" - android:background="@null" - android:visibility="gone"/> + android:background="?android:attr/selectableItemBackground"/> diff --git a/res/layout/wifi_dialog.xml b/res/layout/wifi_dialog.xml index 333296c95c1..d5dbb17d03f 100644 --- a/res/layout/wifi_dialog.xml +++ b/res/layout/wifi_dialog.xml @@ -50,29 +50,31 @@ android:text="@string/wifi_ssid" android:textDirection="locale" /> - + android:layout_height="wrap_content"> + android:inputType="textNoSuggestions"/> + - + - + android:layout_height="wrap_content"> + android:password="true"/> - + { + getContext().startActivity( + WifiDppUtils.getEnrolleeQrCodeScannerIntent(/* ssid */ null)); + }); + + final View divider = (View) holder.findViewById( + com.android.settingslib.R.id.two_target_divider); + divider.setVisibility(View.INVISIBLE); + } + } + + private Drawable getDrawable(@DrawableRes int iconResId) { + Drawable buttonIcon = null; + + try { + buttonIcon = getContext().getDrawable(iconResId); + } catch (Resources.NotFoundException exception) { + Log.e(TAG, "Resource does not exist: " + iconResId); + } + return buttonIcon; + } +} diff --git a/src/com/android/settings/wifi/ButtonPreference.java b/src/com/android/settings/wifi/ButtonPreference.java deleted file mode 100644 index 5169d7ac4ba..00000000000 --- a/src/com/android/settings/wifi/ButtonPreference.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (C) 2018 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.wifi; - -import android.content.Context; -import android.content.res.Resources; -import android.graphics.drawable.Drawable; -import android.util.AttributeSet; -import android.util.Log; -import android.view.View; -import android.widget.ImageButton; - -import androidx.annotation.DrawableRes; -import androidx.annotation.VisibleForTesting; -import androidx.preference.Preference; -import androidx.preference.PreferenceViewHolder; - -import com.android.settings.R; - -/** - * This preference provides one button layout with Settings style. - * It looks like below - * - * -------------------------------------------------------------- - * | icon | title | button | - * -------------------------------------------------------------- - * - * User can set icon / click listener for button. - * By default, the button is invisible. - */ -public class ButtonPreference extends Preference { - - private static final String TAG = "ButtonPreference"; - - private ImageButton mImageButton; - private Drawable mButtonIcon; - private View.OnClickListener mClickListener; - private String mContentDescription; - - // Used for dummy pref. - public ButtonPreference(Context context, AttributeSet attrs) { - super(context, attrs); - setWidgetLayoutResource(R.layout.wifi_button_preference_widget); - mImageButton = null; - mButtonIcon = null; - mClickListener = null; - mContentDescription = null; - } - - public ButtonPreference(Context context) { - this(context, /* attrs */ null); - } - - @Override - public void onBindViewHolder(final PreferenceViewHolder view) { - super.onBindViewHolder(view); - initButton(view); - } - - @Override - public void setOrder(int order) { - super.setOrder(order); - setButtonVisibility(); - } - - @VisibleForTesting - protected void initButton(final PreferenceViewHolder view) { - if (mImageButton == null) { - mImageButton = (ImageButton) view.findViewById(R.id.button_icon); - } - if (mImageButton != null) { - mImageButton.setImageDrawable(mButtonIcon); - mImageButton.setOnClickListener(mClickListener); - mImageButton.setContentDescription(mContentDescription); - } - setButtonVisibility(); - } - - private void setButtonVisibility() { - if(mImageButton != null) { - mImageButton.setVisibility(mButtonIcon == null ? View.GONE : View.VISIBLE); - } - } - - /** - * Sets the drawable to be displayed in button. - */ - public void setButtonIcon(@DrawableRes int iconResId) { - if (iconResId == 0) { - return; - } - - try { - mButtonIcon = getContext().getDrawable(iconResId); - notifyChanged(); - } catch (Resources.NotFoundException exception) { - Log.e(TAG, "Resource does not exist: " + iconResId); - } - } - - /** - * Register a callback to be invoked when button is clicked. - */ - public void setButtonOnClickListener(View.OnClickListener listener) { - if (listener != mClickListener) { - mClickListener = listener; - notifyChanged(); - } - } - - /** - * A content description briefly describes the button and is primarily used for accessibility - * support to determine how a button should be presented to the user. - */ - public void setButtonContentDescription(String contentDescription) { - if (contentDescription != mContentDescription) { - mContentDescription = contentDescription; - notifyChanged(); - } - } -} diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index a8fc34d7a8c..585cf71ac95 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -179,7 +179,8 @@ public class WifiSettings extends RestrictedSettingsFragment private PreferenceCategory mConnectedAccessPointPreferenceCategory; private PreferenceCategory mAccessPointsPreferenceCategory; - private ButtonPreference mAddPreference; + @VisibleForTesting + AddWifiNetworkPreference mAddWifiNetworkPreference; @VisibleForTesting Preference mConfigureWifiSettingsPreference; @VisibleForTesting @@ -237,20 +238,8 @@ public class WifiSettings extends RestrictedSettingsFragment (PreferenceCategory) findPreference(PREF_KEY_ACCESS_POINTS); mConfigureWifiSettingsPreference = findPreference(PREF_KEY_CONFIGURE_WIFI_SETTINGS); mSavedNetworksPreference = findPreference(PREF_KEY_SAVED_NETWORKS); - - Context prefContext = getPrefContext(); - mAddPreference = new ButtonPreference(prefContext); - mAddPreference.setIcon(R.drawable.ic_menu_add); - mAddPreference.setTitle(R.string.wifi_add_network); - mAddPreference.setButtonIcon(R.drawable.ic_scan_24dp); - mAddPreference.setButtonOnClickListener((View v) -> { - // Launch QR code scanner to join a network. - getContext().startActivity( - WifiDppUtils.getEnrolleeQrCodeScannerIntent(/* ssid */ null)); - }); - mAddPreference.setButtonContentDescription(getString(R.string.wifi_dpp_scan_qr_code)); + mAddWifiNetworkPreference = new AddWifiNetworkPreference(getPrefContext()); mStatusMessagePreference = (LinkablePreference) findPreference(PREF_KEY_STATUS_MESSAGE); - mUserBadgeCache = new AccessPointPreference.UserBadgeCache(getPackageManager()); } @@ -590,7 +579,7 @@ public class WifiSettings extends RestrictedSettingsFragment showDialog(mSelectedAccessPoint, WifiConfigUiBase.MODE_CONNECT); break; } - } else if (preference == mAddPreference) { + } else if (preference == mAddWifiNetworkPreference) { onAddNetworkPressed(); } else { return super.onPreferenceTreeClick(preference); @@ -809,8 +798,8 @@ public class WifiSettings extends RestrictedSettingsFragment } } removeCachedPrefs(mAccessPointsPreferenceCategory); - mAddPreference.setOrder(index); - mAccessPointsPreferenceCategory.addPreference(mAddPreference); + mAddWifiNetworkPreference.setOrder(index); + mAccessPointsPreferenceCategory.addPreference(mAddWifiNetworkPreference); setAdditionalSettingsSummaries(); if (!hasAvailableAccessPoints) { diff --git a/tests/robotests/src/com/android/settings/wifi/ButtonPreferenceTest.java b/tests/robotests/src/com/android/settings/wifi/ButtonPreferenceTest.java deleted file mode 100644 index 7f0598dce85..00000000000 --- a/tests/robotests/src/com/android/settings/wifi/ButtonPreferenceTest.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2018 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.wifi; - -import static com.google.common.truth.Truth.assertThat; - -import android.content.Context; -import android.view.View; -import android.widget.ImageButton; - -import androidx.preference.PreferenceViewHolder; - -import com.android.settings.R; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; - -@RunWith(RobolectricTestRunner.class) -public class ButtonPreferenceTest { - - private Context mContext; - private View mRootView; - private ButtonPreference mPref; - private PreferenceViewHolder mHolder; - private boolean mClicked; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - - mContext = RuntimeEnvironment.application; - mPref = new ButtonPreference(mContext); - mRootView = View.inflate(mContext, R.layout.wifi_button_preference_widget, /* parent */ - null); - mHolder = PreferenceViewHolder.createInstanceForTests(mRootView); - } - - @Test - public void initButton_noIcon_shouldInvisible() { - mPref.initButton(mHolder); - assertThat(mRootView.findViewById(R.id.button_icon).getVisibility()).isEqualTo(View.GONE); - } - - @Test - public void initButton_withIcon_shouldVisible() { - mPref.setButtonIcon(R.drawable.ic_qrcode_24dp); - mPref.initButton(mHolder); - assertThat(mRootView.findViewById(R.id.button_icon).getVisibility()).isEqualTo( - View.VISIBLE); - } - - @Test - public void initButton_whenClick_shouldCallback() { - mClicked = false; - mPref.setButtonIcon(R.drawable.ic_qrcode_24dp); - mPref.setButtonOnClickListener((View v) -> { - mClicked = true; - }); - mPref.initButton(mHolder); - ImageButton button = (ImageButton) mRootView.findViewById(R.id.button_icon); - button.performClick(); - assertThat(mClicked).isTrue(); - } -} diff --git a/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java index 22ccd3c2295..c811b0caf99 100644 --- a/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java +++ b/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java @@ -69,6 +69,7 @@ public class WifiSettingsTest { mWifiSettings = spy(new WifiSettings()); doReturn(mContext).when(mWifiSettings).getContext(); doReturn(mPowerManager).when(mContext).getSystemService(PowerManager.class); + mWifiSettings.mAddWifiNetworkPreference = new AddWifiNetworkPreference(mContext); mWifiSettings.mSavedNetworksPreference = new Preference(mContext); mWifiSettings.mConfigureWifiSettingsPreference = new Preference(mContext); mWifiSettings.mWifiTracker = mWifiTracker; @@ -151,4 +152,11 @@ public class WifiSettingsTest { assertThat(mWifiSettings.mConfigureWifiSettingsPreference.getSummary()).isEqualTo( mContext.getString(R.string.wifi_configure_settings_preference_summary_wakeup_off)); } -} \ No newline at end of file + + @Test + public void checkAddWifiNetworkPrefernce_preferenceVisible() { + assertThat(mWifiSettings.mAddWifiNetworkPreference.isVisible()).isTrue(); + assertThat(mWifiSettings.mAddWifiNetworkPreference.getTitle()).isEqualTo( + mContext.getString(R.string.wifi_add_network)); + } +}