Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fbede9c0 authored by jackqdyulei's avatar jackqdyulei
Browse files

Add ConnectedAccessPointPreference

This preference contains:
1. All the logic from AccessPointPreference
2. Gear icon on the right

Bug: 68807544
Test: RunSettingsRoboTests & Screenshot
Change-Id: I128401d81b075c4e9c5ca711562de26e73147745
parent e717a5fd
Loading
Loading
Loading
Loading
+78 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 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.support.annotation.DrawableRes;
import android.support.v7.preference.PreferenceViewHolder;
import android.view.View;

import com.android.settings.R;
import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.AccessPointPreference;

/**
 * An AP preference for the currently connected AP
 */
public class ConnectedAccessPointPreference extends AccessPointPreference implements
        View.OnClickListener {

    private OnGearClickListener mOnGearClickListener;

    public ConnectedAccessPointPreference(AccessPoint accessPoint, Context context,
            UserBadgeCache cache, @DrawableRes int iconResId, boolean forSavedNetworks) {
        super(accessPoint, context, cache, iconResId, forSavedNetworks);
    }

    public void setOnGearClickListener(OnGearClickListener l) {
        mOnGearClickListener = l;
        notifyChanged();
    }

    @Override
    protected int getSecondTargetResId() {
        return R.layout.preference_widget_gear;
    }

    @Override
    protected boolean shouldHideSecondTarget() {
        return mOnGearClickListener == null;
    }

    @Override
    public void onBindViewHolder(PreferenceViewHolder holder) {
        super.onBindViewHolder(holder);
        final View gear = holder.findViewById(R.id.settings_button);
        if (gear != null) {
            gear.setOnClickListener(this);
        }
        setDividerVisibility(holder, View.VISIBLE);
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.settings_button) {
            if (mOnGearClickListener != null) {
                mOnGearClickListener.onGearClick(this);
            }
        }
    }

    public interface OnGearClickListener {
        void onGearClick(ConnectedAccessPointPreference p);
    }
}
+17 −20
Original line number Diff line number Diff line
@@ -782,7 +782,7 @@ public class WifiSettings extends RestrictedSettingsFragment
                    continue;
                }
                LongPressAccessPointPreference preference =
                        createLongPressActionPointPreference(accessPoint);
                        createLongPressAccessPointPreference(accessPoint);
                preference.setKey(key);
                preference.setOrder(index);
                if (mOpenSsid != null && mOpenSsid.equals(accessPoint.getSsidStr())
@@ -817,10 +817,17 @@ public class WifiSettings extends RestrictedSettingsFragment
    }

    @NonNull
    private LongPressAccessPointPreference createLongPressActionPointPreference(
    private LongPressAccessPointPreference createLongPressAccessPointPreference(
            AccessPoint accessPoint) {
        return new LongPressAccessPointPreference(accessPoint, getPrefContext(), mUserBadgeCache,
                false, R.drawable.ic_wifi_signal_0, this);
                false /* forSavedNetworks */, R.drawable.ic_wifi_signal_0, this);
    }

    @NonNull
    private ConnectedAccessPointPreference createConnectedAccessPointPreference(
            AccessPoint accessPoint) {
        return new ConnectedAccessPointPreference(accessPoint, getPrefContext(), mUserBadgeCache,
                R.drawable.ic_wifi_signal_0, false /* forSavedNetworks */);
    }

    /**
@@ -859,7 +866,7 @@ public class WifiSettings extends RestrictedSettingsFragment

        // Else same AP is connected, simply refresh the connected access point preference
        // (first and only access point in this category).
        ((LongPressAccessPointPreference) mConnectedAccessPointPreferenceCategory.getPreference(0))
        ((AccessPointPreference) mConnectedAccessPointPreferenceCategory.getPreference(0))
                .refresh();
        return true;
    }
@@ -869,20 +876,19 @@ public class WifiSettings extends RestrictedSettingsFragment
     * {@link #mConnectedAccessPointPreferenceCategory}.
     */
    private void addConnectedAccessPointPreference(AccessPoint connectedAp) {
        final LongPressAccessPointPreference pref = getOrCreatePreference(connectedAp);
        final ConnectedAccessPointPreference pref = createConnectedAccessPointPreference(
                connectedAp);

        // Launch details page on click.
        pref.setOnPreferenceClickListener(preference -> {
            // Save the state of the current access point in the bundle so that we can restore it
            // in the Wifi Network Details Fragment
        pref.setOnGearClickListener(l -> {
            pref.getAccessPoint().saveWifiState(pref.getExtras());

            SettingsActivity activity = (SettingsActivity) WifiSettings.this.getActivity();
            activity.startPreferencePanel(this,
                    WifiNetworkDetailsFragment.class.getName(), pref.getExtras(),
                    R.string.wifi_details_title, null, null, 0);
            return true;
        });

        pref.refresh();

        mConnectedAccessPointPreferenceCategory.addPreference(pref);
@@ -893,15 +899,6 @@ public class WifiSettings extends RestrictedSettingsFragment
        }
    }

    private LongPressAccessPointPreference getOrCreatePreference(AccessPoint ap) {
        LongPressAccessPointPreference pref = (LongPressAccessPointPreference)
                getCachedPreference(AccessPointPreference.generatePreferenceKey(ap));
        if (pref == null) {
            pref = createLongPressActionPointPreference(ap);
        }
        return pref;
    }

    /** Removes all preferences and hide the {@link #mConnectedAccessPointPreferenceCategory}. */
    private void removeConnectedAccessPointPreference() {
        mConnectedAccessPointPreferenceCategory.removeAll();
@@ -1093,7 +1090,7 @@ public class WifiSettings extends RestrictedSettingsFragment
                public void run() {
                    Object tag = accessPoint.getTag();
                    if (tag != null) {
                        ((LongPressAccessPointPreference) tag).refresh();
                        ((AccessPointPreference) tag).refresh();
                    }
                }
            });
@@ -1102,7 +1099,7 @@ public class WifiSettings extends RestrictedSettingsFragment

    @Override
    public void onLevelChanged(AccessPoint accessPoint) {
        ((LongPressAccessPointPreference) accessPoint.getTag()).onLevelChanged();
        ((AccessPointPreference) accessPoint.getTag()).onLevelChanged();
    }

    public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+78 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 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 org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;

import android.content.Context;
import android.view.View;

import com.android.settings.R;
import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.wifi.AccessPoint;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;

@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class ConnectedAccessPointPreferenceTest {
    @Mock
    private AccessPoint mAccessPoint;
    @Mock
    private View mView;
    @Mock
    private ConnectedAccessPointPreference.OnGearClickListener mOnGearClickListener;
    private Context mContext;
    private ConnectedAccessPointPreference mConnectedAccessPointPreference;


    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);

        mContext = RuntimeEnvironment.application;
        mConnectedAccessPointPreference = new ConnectedAccessPointPreference(mAccessPoint, mContext,
                null, 0 /* iconResId */, false /* forSavedNetworks */);
        mConnectedAccessPointPreference.setOnGearClickListener(mOnGearClickListener);
    }

    @Test
    public void testOnClick_gearClicked_listenerInvoked() {
        doReturn(R.id.settings_button).when(mView).getId();

        mConnectedAccessPointPreference.onClick(mView);

        verify(mOnGearClickListener).onGearClick(mConnectedAccessPointPreference);
    }

    @Test
    public void testOnClick_gearNotClicked_listenerNotInvoked() {
        mConnectedAccessPointPreference.onClick(mView);

        verify(mOnGearClickListener, never()).onGearClick(mConnectedAccessPointPreference);
    }

}