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

Commit 07e63ea2 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add ConnectedAccessPointPreference"

parents 75623cb8 fbede9c0
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);
    }

}