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

Commit 8bb404d5 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Fix switch listener on app notif page" into sc-dev am: bef076df

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/15273047

Change-Id: I4928c1a96fafefa6039a89f6c03e832c9cffd1e0
parents d1ef1482 bef076df
Loading
Loading
Loading
Loading
+13 −19
Original line number Diff line number Diff line
@@ -24,8 +24,10 @@ import android.os.UserManager;
import android.text.format.DateUtils;
import android.util.ArrayMap;
import android.util.Log;
import android.util.Slog;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.Switch;

import com.android.settings.R;
@@ -222,27 +224,19 @@ public class AppStateNotificationBridge extends AppStateBaseBridge {
        return userId + "|" + pkg;
    }

    public View.OnClickListener getSwitchOnClickListener(final AppEntry entry) {
        if (entry != null) {
            return v -> {
                ViewGroup view = (ViewGroup) v;
                Switch toggle = view.findViewById(R.id.switchWidget);
                if (toggle != null) {
                    if (!toggle.isEnabled()) {
                        return;
    public CompoundButton.OnCheckedChangeListener getSwitchOnCheckedListener(final AppEntry entry) {
        if (entry == null) {
            return null;
        }
                    toggle.toggle();
        return (buttonView, isChecked) -> {
            mBackend.setNotificationsEnabledForPackage(
                            entry.info.packageName, entry.info.uid, toggle.isChecked());
                    entry.info.packageName, entry.info.uid, isChecked);
            NotificationsSentState stats = getNotificationsSentState(entry);
            if (stats != null) {
                        stats.blocked = !toggle.isChecked();
                    }
                stats.blocked = !isChecked;
            }
        };
    }
        return null;
    }

    public static final AppFilter FILTER_APP_NOTIFICATION_RECENCY = new AppFilter() {
        @Override
+2 −2
Original line number Diff line number Diff line
@@ -155,13 +155,13 @@ public class ApplicationViewHolder extends RecyclerView.ViewHolder {
        }
    }

    void updateSwitch(View.OnClickListener listener, boolean enabled, boolean checked) {
    void updateSwitch(Switch.OnCheckedChangeListener listener, boolean enabled, boolean checked) {
        if (mSwitch != null && mWidgetContainer != null) {
            mWidgetContainer.setOnClickListener(listener);
            mWidgetContainer.setFocusable(false);
            mWidgetContainer.setClickable(false);
            mSwitch.setFocusable(true);
            mSwitch.setClickable(true);
            mSwitch.setOnCheckedChangeListener(listener);
            mSwitch.setChecked(checked);
            mSwitch.setEnabled(enabled);
        }
+1 −1
Original line number Diff line number Diff line
@@ -1505,7 +1505,7 @@ public class ManageApplications extends InstrumentedFragment
            switch (mManageApplications.mListType) {
                case LIST_TYPE_NOTIFICATION:
                    holder.updateSwitch(((AppStateNotificationBridge) mExtraInfoBridge)
                                    .getSwitchOnClickListener(entry),
                                    .getSwitchOnCheckedListener(entry),
                            AppStateNotificationBridge.enableSwitch(entry),
                            AppStateNotificationBridge.checkSwitch(entry));
                    if (entry.extraInfo != null
+4 −6
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.Switch;

import com.android.settings.R;
@@ -550,12 +551,10 @@ public class AppStateNotificationBridgeTest {
    }

    @Test
    public void testSwitchOnClickListener() {
        ViewGroup parent = mock(ViewGroup.class);
    public void testSwitchOnChangeListener() {
        Switch toggle = mock(Switch.class);
        when(toggle.isChecked()).thenReturn(true);
        when(toggle.isEnabled()).thenReturn(true);
        when(parent.findViewById(anyInt())).thenReturn(toggle);

        AppEntry entry = mock(AppEntry.class);
        entry.info = new ApplicationInfo();
@@ -563,10 +562,9 @@ public class AppStateNotificationBridgeTest {
        entry.info.uid = 1356;
        entry.extraInfo = new NotificationsSentState();

        ViewGroup.OnClickListener listener = mBridge.getSwitchOnClickListener(entry);
        listener.onClick(parent);
        CompoundButton.OnCheckedChangeListener listener = mBridge.getSwitchOnCheckedListener(entry);
        listener.onCheckedChanged(toggle, true);

        verify(toggle).toggle();
        verify(mBackend).setNotificationsEnabledForPackage(
                entry.info.packageName, entry.info.uid, true);
        assertThat(((NotificationsSentState) entry.extraInfo).blocked).isFalse();
+8 −3
Original line number Diff line number Diff line
@@ -35,6 +35,8 @@ import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;

import java.util.concurrent.CountDownLatch;

@RunWith(RobolectricTestRunner.class)
public class ApplicationViewHolderTest {

@@ -123,13 +125,16 @@ public class ApplicationViewHolderTest {

    @Test
    public void updateSwitch() {
        final CountDownLatch latch = new CountDownLatch(1);
        mView = ApplicationViewHolder.newView(new FrameLayout(mContext), true);
        mHolder = new ApplicationViewHolder(mView);
        mHolder.updateSwitch(v -> {
        } /* listener */, true, true);
        mHolder.updateSwitch((buttonView, isChecked) -> latch.countDown(), true, true);

        assertThat(mHolder.mSwitch.isChecked()).isTrue();
        assertThat(mHolder.mSwitch.isEnabled()).isTrue();
        assertThat(mHolder.mWidgetContainer.hasOnClickListeners()).isTrue();
        assertThat(mHolder.mSwitch.isFocusable()).isTrue();
        assertThat(mHolder.mSwitch.isClickable()).isTrue();
        mHolder.mSwitch.callOnClick();
        assertThat(latch.getCount()).isEqualTo(0);
    }
}