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

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

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

parents 7429fd13 e41c89da
Loading
Loading
Loading
Loading
+13 −19
Original line number Original line Diff line number Diff line
@@ -24,8 +24,10 @@ import android.os.UserManager;
import android.text.format.DateUtils;
import android.text.format.DateUtils;
import android.util.ArrayMap;
import android.util.ArrayMap;
import android.util.Log;
import android.util.Log;
import android.util.Slog;
import android.view.View;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.Switch;


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


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


    public static final AppFilter FILTER_APP_NOTIFICATION_RECENCY = new AppFilter() {
    public static final AppFilter FILTER_APP_NOTIFICATION_RECENCY = new AppFilter() {
        @Override
        @Override
+2 −2
Original line number Original line 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) {
        if (mSwitch != null && mWidgetContainer != null) {
            mWidgetContainer.setOnClickListener(listener);
            mWidgetContainer.setFocusable(false);
            mWidgetContainer.setFocusable(false);
            mWidgetContainer.setClickable(false);
            mWidgetContainer.setClickable(false);
            mSwitch.setFocusable(true);
            mSwitch.setFocusable(true);
            mSwitch.setClickable(true);
            mSwitch.setClickable(true);
            mSwitch.setOnCheckedChangeListener(listener);
            mSwitch.setChecked(checked);
            mSwitch.setChecked(checked);
            mSwitch.setEnabled(enabled);
            mSwitch.setEnabled(enabled);
        }
        }
+1 −1
Original line number Original line Diff line number Diff line
@@ -1505,7 +1505,7 @@ public class ManageApplications extends InstrumentedFragment
            switch (mManageApplications.mListType) {
            switch (mManageApplications.mListType) {
                case LIST_TYPE_NOTIFICATION:
                case LIST_TYPE_NOTIFICATION:
                    holder.updateSwitch(((AppStateNotificationBridge) mExtraInfoBridge)
                    holder.updateSwitch(((AppStateNotificationBridge) mExtraInfoBridge)
                                    .getSwitchOnClickListener(entry),
                                    .getSwitchOnCheckedListener(entry),
                            AppStateNotificationBridge.enableSwitch(entry),
                            AppStateNotificationBridge.enableSwitch(entry),
                            AppStateNotificationBridge.checkSwitch(entry));
                            AppStateNotificationBridge.checkSwitch(entry));
                    if (entry.extraInfo != null
                    if (entry.extraInfo != null
+4 −6
Original line number Original line Diff line number Diff line
@@ -53,6 +53,7 @@ import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.UserManager;
import android.view.ViewGroup;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.Switch;


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


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


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


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


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


import java.util.concurrent.CountDownLatch;

@RunWith(RobolectricTestRunner.class)
@RunWith(RobolectricTestRunner.class)
public class ApplicationViewHolderTest {
public class ApplicationViewHolderTest {


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


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


        assertThat(mHolder.mSwitch.isChecked()).isTrue();
        assertThat(mHolder.mSwitch.isChecked()).isTrue();
        assertThat(mHolder.mSwitch.isEnabled()).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);
    }
    }
}
}