Merge "[Wi-Fi] Add button in WifiEntryPreference for launching OpenRoaming help page" into rvc-dev
This commit is contained in:
25
packages/SettingsLib/res/drawable/ic_help.xml
Normal file
25
packages/SettingsLib/res/drawable/ic_help.xml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<!--
|
||||||
|
Copyright (C) 2020 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.
|
||||||
|
-->
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24.0"
|
||||||
|
android:viewportHeight="24.0"
|
||||||
|
android:tint="?android:attr/colorControlNormal">
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFFFF"
|
||||||
|
android:pathData="M11,18h2v-2h-2V18zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10s10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8s8,3.59 8,8S16.41,20 12,20zM12,6c-2.21,0 -4,1.79 -4,4h2c0,-1.1 0.9,-2 2,-2s2,0.9 2,2c0,2 -3,1.75 -3,5h2c0,-2.25 3,-2.5 3,-5C16,7.79 14.21,6 12,6z"/>
|
||||||
|
</vector>
|
||||||
@@ -93,4 +93,14 @@
|
|||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:orientation="vertical" />
|
android:orientation="vertical" />
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/icon_button"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:minWidth="64dp"
|
||||||
|
android:minHeight="@dimen/min_tap_target_size"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:background="?android:attr/selectableItemBackground"
|
||||||
|
android:visibility="gone">
|
||||||
|
</ImageButton>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|||||||
@@ -92,4 +92,6 @@
|
|||||||
<!-- Size of nearby icon -->
|
<!-- Size of nearby icon -->
|
||||||
<dimen name="bt_nearby_icon_size">24dp</dimen>
|
<dimen name="bt_nearby_icon_size">24dp</dimen>
|
||||||
|
|
||||||
|
<!-- Define minimal size of the tap area -->
|
||||||
|
<dimen name="min_tap_target_size">48dp</dimen>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -23,8 +23,10 @@ import android.graphics.drawable.Drawable;
|
|||||||
import android.graphics.drawable.StateListDrawable;
|
import android.graphics.drawable.StateListDrawable;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.widget.ImageButton;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
|
||||||
|
import androidx.annotation.DrawableRes;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
@@ -37,7 +39,8 @@ import com.android.wifitrackerlib.WifiEntry;
|
|||||||
/**
|
/**
|
||||||
* Preference to display a WifiEntry in a wifi picker.
|
* Preference to display a WifiEntry in a wifi picker.
|
||||||
*/
|
*/
|
||||||
public class WifiEntryPreference extends Preference implements WifiEntry.WifiEntryCallback {
|
public class WifiEntryPreference extends Preference implements WifiEntry.WifiEntryCallback,
|
||||||
|
View.OnClickListener {
|
||||||
|
|
||||||
private static final int[] STATE_SECURED = {
|
private static final int[] STATE_SECURED = {
|
||||||
R.attr.state_encrypted
|
R.attr.state_encrypted
|
||||||
@@ -62,6 +65,7 @@ public class WifiEntryPreference extends Preference implements WifiEntry.WifiEnt
|
|||||||
private WifiEntry mWifiEntry;
|
private WifiEntry mWifiEntry;
|
||||||
private int mLevel = -1;
|
private int mLevel = -1;
|
||||||
private CharSequence mContentDescription;
|
private CharSequence mContentDescription;
|
||||||
|
private OnButtonClickListener mOnButtonClickListener;
|
||||||
|
|
||||||
public WifiEntryPreference(@NonNull Context context, @NonNull WifiEntry wifiEntry) {
|
public WifiEntryPreference(@NonNull Context context, @NonNull WifiEntry wifiEntry) {
|
||||||
this(context, wifiEntry, new IconInjector(context));
|
this(context, wifiEntry, new IconInjector(context));
|
||||||
@@ -95,11 +99,32 @@ public class WifiEntryPreference extends Preference implements WifiEntry.WifiEnt
|
|||||||
|
|
||||||
view.itemView.setContentDescription(mContentDescription);
|
view.itemView.setContentDescription(mContentDescription);
|
||||||
|
|
||||||
final ImageView frictionImageView = (ImageView) view.findViewById(R.id.friction_icon);
|
|
||||||
bindFrictionImage(frictionImageView);
|
|
||||||
|
|
||||||
// Turn off divider
|
// Turn off divider
|
||||||
view.findViewById(R.id.two_target_divider).setVisibility(View.INVISIBLE);
|
view.findViewById(R.id.two_target_divider).setVisibility(View.INVISIBLE);
|
||||||
|
|
||||||
|
// Enable the icon button when this Entry is a canManageSubscription entry.
|
||||||
|
final ImageButton imageButton = (ImageButton) view.findViewById(R.id.icon_button);
|
||||||
|
final ImageView frictionImageView = (ImageView) view.findViewById(
|
||||||
|
R.id.friction_icon);
|
||||||
|
if (mWifiEntry.canManageSubscription() && !mWifiEntry.isSaved()
|
||||||
|
&& mWifiEntry.getConnectedState() == WifiEntry.CONNECTED_STATE_DISCONNECTED) {
|
||||||
|
final Drawable drawablehelp = getDrawable(R.drawable.ic_help);
|
||||||
|
drawablehelp.setTintList(
|
||||||
|
Utils.getColorAttr(getContext(), android.R.attr.colorControlNormal));
|
||||||
|
((ImageView) imageButton).setImageDrawable(drawablehelp);
|
||||||
|
imageButton.setVisibility(View.VISIBLE);
|
||||||
|
imageButton.setOnClickListener(this);
|
||||||
|
if (frictionImageView != null) {
|
||||||
|
frictionImageView.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
imageButton.setVisibility(View.GONE);
|
||||||
|
|
||||||
|
if (frictionImageView != null) {
|
||||||
|
frictionImageView.setVisibility(View.VISIBLE);
|
||||||
|
bindFrictionImage(frictionImageView);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -236,4 +261,44 @@ public class WifiEntryPreference extends Preference implements WifiEntry.WifiEnt
|
|||||||
return mContext.getDrawable(Utils.getWifiIconResource(level));
|
return mContext.getDrawable(Utils.getWifiIconResource(level));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set listeners, who want to listen the button client event.
|
||||||
|
*/
|
||||||
|
public void setOnButtonClickListener(OnButtonClickListener listener) {
|
||||||
|
mOnButtonClickListener = listener;
|
||||||
|
notifyChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
if (view.getId() == R.id.icon_button) {
|
||||||
|
if (mOnButtonClickListener != null) {
|
||||||
|
mOnButtonClickListener.onButtonClick(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback to inform the caller that the icon button is clicked.
|
||||||
|
*/
|
||||||
|
public interface OnButtonClickListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register to listen the button click event.
|
||||||
|
*/
|
||||||
|
void onButtonClick(WifiEntryPreference preference);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Drawable getDrawable(@DrawableRes int iconResId) {
|
||||||
|
Drawable buttonIcon = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
buttonIcon = getContext().getDrawable(iconResId);
|
||||||
|
} catch (Resources.NotFoundException exception) {
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
|
return buttonIcon;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,13 @@ import static org.mockito.Mockito.when;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
|
import androidx.preference.PreferenceViewHolder;
|
||||||
|
|
||||||
|
import com.android.settingslib.R;
|
||||||
import com.android.wifitrackerlib.WifiEntry;
|
import com.android.wifitrackerlib.WifiEntry;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -147,4 +153,18 @@ public class WifiEntryPreferenceTest {
|
|||||||
assertThat(iconList).containsExactly(mMockDrawable0, mMockDrawable1,
|
assertThat(iconList).containsExactly(mMockDrawable0, mMockDrawable1,
|
||||||
mMockDrawable2, mMockDrawable3, mMockDrawable4, null);
|
mMockDrawable2, mMockDrawable3, mMockDrawable4, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void canManageSubscription_shouldSetImageButtonVisible() {
|
||||||
|
when(mMockWifiEntry.canManageSubscription()).thenReturn(true);
|
||||||
|
final WifiEntryPreference pref =
|
||||||
|
new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
|
||||||
|
final LayoutInflater inflater = LayoutInflater.from(mContext);
|
||||||
|
final View view = inflater.inflate(pref.getLayoutResource(), new LinearLayout(mContext),
|
||||||
|
false);
|
||||||
|
final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(view);
|
||||||
|
pref.onBindViewHolder(holder);
|
||||||
|
|
||||||
|
assertThat(view.findViewById(R.id.icon_button).getVisibility()).isEqualTo(View.VISIBLE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user