aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/app/src/main/java/com/wireguard/android/widget/MultiselectableRelativeLayout.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/com/wireguard/android/widget/MultiselectableRelativeLayout.java')
-rw-r--r--app/src/main/java/com/wireguard/android/widget/MultiselectableRelativeLayout.java57
1 files changed, 57 insertions, 0 deletions
diff --git a/app/src/main/java/com/wireguard/android/widget/MultiselectableRelativeLayout.java b/app/src/main/java/com/wireguard/android/widget/MultiselectableRelativeLayout.java
new file mode 100644
index 00000000..c64dc320
--- /dev/null
+++ b/app/src/main/java/com/wireguard/android/widget/MultiselectableRelativeLayout.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright © 2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.wireguard.android.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.RelativeLayout;
+
+import com.wireguard.android.R;
+
+public class MultiselectableRelativeLayout extends RelativeLayout {
+ public MultiselectableRelativeLayout(final Context context) {
+ super(context);
+ }
+ public MultiselectableRelativeLayout(final Context context, final AttributeSet attrs) {
+ super(context, attrs);
+ }
+ public MultiselectableRelativeLayout(final Context context, final AttributeSet attrs, final int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+ public MultiselectableRelativeLayout(final Context context, final AttributeSet attrs, final int defStyleAttr, final int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ }
+
+ private static final int[] STATE_MULTISELECTED = { R.attr.state_multiselected };
+
+ private boolean multiselected;
+
+ @Override
+ protected int[] onCreateDrawableState(final int extraSpace) {
+ if (multiselected) {
+ final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
+ mergeDrawableStates(drawableState, STATE_MULTISELECTED);
+ return drawableState;
+ }
+ return super.onCreateDrawableState(extraSpace);
+ }
+
+ public void setMultiSelected(final boolean on) {
+ if (!multiselected) {
+ multiselected = true;
+ refreshDrawableState();
+ }
+ setActivated(on);
+ }
+
+ public void setSingleSelected(final boolean on) {
+ if (multiselected) {
+ multiselected = false;
+ refreshDrawableState();
+ }
+ setActivated(on);
+ }
+}