resolve merge conflicts of e58c780571 to stage-aosp-master

am: 0f7856add6

Change-Id: I7b763616c1244d3f834e33c3d6e7126c0baa1b59
This commit is contained in:
CY Cheng
2018-08-16 16:41:38 -07:00
committed by android-build-merger
8 changed files with 225 additions and 57 deletions

View File

@@ -11328,6 +11328,14 @@ public final class Settings {
*/
public static final String EMERGENCY_AFFORDANCE_NEEDED = "emergency_affordance_needed";
/**
* Enable faster emergency phone call feature.
* The value is a boolean (1 or 0).
* @hide
*/
public static final String FASTER_EMERGENCY_PHONE_CALL_ENABLED =
"faster_emergency_phone_call_enabled";
/**
* See RIL_PreferredNetworkType in ril.h
* @hide

View File

@@ -2609,6 +2609,7 @@
"silent" = silent mode
"users" = list of users
"restart" = restart device
"emergency" = Launch emergency dialer
"lockdown" = Lock down device until the user authenticates
"logout" = Logout the current user
-->
@@ -2619,6 +2620,7 @@
<item>logout</item>
<item>bugreport</item>
<item>screenshot</item>
<item>emergency</item>
</string-array>
<!-- Number of milliseconds to hold a wake lock to ensure that drawing is fully

View File

@@ -239,6 +239,7 @@ public class SettingsBackupTest {
Settings.Global.EUICC_SUPPORTED_COUNTRIES,
Settings.Global.EUICC_FACTORY_RESET_TIMEOUT_MILLIS,
Settings.Global.FANCY_IME_ANIMATIONS,
Settings.Global.FASTER_EMERGENCY_PHONE_CALL_ENABLED,
Settings.Global.FORCE_ALLOW_ON_EXTERNAL,
Settings.Global.FORCED_APP_STANDBY_ENABLED,
Settings.Global.FORCED_APP_STANDBY_FOR_SMALL_BATTERY_ENABLED,

View File

@@ -0,0 +1,30 @@
<!--
Copyright (C) 2018 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.
-->
<!-- TODO: For demo only, will change content after UI team provide new faster emergency icon. -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="#D93025"
android:pathData="M0,0h24v24H0z" />
<path
android:fillColor="#FFFFFFFF"
android:pathData="M19,3H5c-1.1,0-1.99,0.9,-1.99,2L3,19c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V5c0-1.1-0.9-2-2-2zm-1,11h-4v4h-4v-4H6v-4h4V6h4v4h4v4z" />
</vector>

View File

@@ -3,7 +3,9 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="top|right"
android:layout_marginBottom="0dp"
android:orientation="vertical"
android:paddingTop="@dimen/global_actions_top_padding"
android:clipToPadding="false"
android:theme="@style/qs_theme"
@@ -17,7 +19,19 @@
android:layout_gravity="top|right"
android:gravity="center"
android:orientation="vertical"
android:padding="12dp"
android:translationZ="9dp" />
android:padding="@dimen/global_actions_padding"
android:translationZ="@dimen/global_actions_translate" />
<!-- For separated button-->
<FrameLayout
android:id="@+id/separated_button"
android:layout_width="@dimen/global_actions_panel_width"
android:layout_height="wrap_content"
android:layout_gravity="top|right"
android:layout_marginTop="6dp"
android:gravity="center"
android:orientation="vertical"
android:padding="@dimen/global_actions_padding"
android:translationZ="@dimen/global_actions_translate" />
</com.android.systemui.HardwareUiLayout>

View File

@@ -922,6 +922,10 @@
<dimen name="global_actions_top_padding">120dp</dimen>
<dimen name="global_actions_padding">12dp</dimen>
<dimen name="global_actions_translate">9dp</dimen>
<!-- The maximum offset in either direction that elements are moved horizontally to prevent
burn-in on AOD. -->
<dimen name="burn_in_prevention_offset_x">8dp</dimen>

View File

@@ -27,32 +27,33 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.ViewOutlineProvider;
import android.view.ViewTreeObserver;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerService.Tunable;
import com.android.systemui.util.leak.RotationUtils;
import java.util.ArrayList;
import static com.android.systemui.util.leak.RotationUtils.ROTATION_LANDSCAPE;
import static com.android.systemui.util.leak.RotationUtils.ROTATION_NONE;
import static com.android.systemui.util.leak.RotationUtils.ROTATION_SEASCAPE;
public class HardwareUiLayout extends FrameLayout implements Tunable {
public class HardwareUiLayout extends LinearLayout implements Tunable {
private static final String EDGE_BLEED = "sysui_hwui_edge_bleed";
private static final String ROUNDED_DIVIDER = "sysui_hwui_rounded_divider";
private final int[] mTmp2 = new int[2];
private View mChild;
private View mList;
private View mSeparatedView;
private int mOldHeight;
private boolean mAnimating;
private AnimatorSet mAnimation;
private View mDivision;
private boolean mHasOutsideTouch;
private HardwareBgDrawable mBackground;
private HardwareBgDrawable mListBackground;
private HardwareBgDrawable mSeparatedViewBackground;
private Animator mAnimator;
private boolean mCollapse;
private boolean mHasSeparatedButton;
private int mEndPoint;
private boolean mEdgeBleed;
private boolean mRoundedDivider;
@@ -91,16 +92,19 @@ public class HardwareUiLayout extends FrameLayout implements Tunable {
mRoundedDivider = Settings.Secure.getInt(getContext().getContentResolver(),
ROUNDED_DIVIDER, 0) != 0;
updateEdgeMargin(mEdgeBleed ? 0 : getEdgePadding());
mBackground = new HardwareBgDrawable(mRoundedDivider, !mEdgeBleed, getContext());
if (mChild != null) {
mChild.setBackground(mBackground);
mListBackground = new HardwareBgDrawable(mRoundedDivider, !mEdgeBleed, getContext());
mSeparatedViewBackground = new HardwareBgDrawable(mRoundedDivider, !mEdgeBleed,
getContext());
if (mList != null) {
mList.setBackground(mListBackground);
mSeparatedView.setBackground(mSeparatedViewBackground);
requestLayout();
}
}
private void updateEdgeMargin(int edge) {
if (mChild != null) {
MarginLayoutParams params = (MarginLayoutParams) mChild.getLayoutParams();
if (mList != null) {
MarginLayoutParams params = (MarginLayoutParams) mList.getLayoutParams();
if (mRotation == ROTATION_LANDSCAPE) {
params.topMargin = edge;
} else if (mRotation == ROTATION_SEASCAPE) {
@@ -108,7 +112,19 @@ public class HardwareUiLayout extends FrameLayout implements Tunable {
} else {
params.rightMargin = edge;
}
mChild.setLayoutParams(params);
mList.setLayoutParams(params);
}
if (mSeparatedView != null) {
MarginLayoutParams params = (MarginLayoutParams) mSeparatedView.getLayoutParams();
if (mRotation == ROTATION_LANDSCAPE) {
params.topMargin = edge;
} else if (mRotation == ROTATION_SEASCAPE) {
params.bottomMargin = edge;
} else {
params.rightMargin = edge;
}
mSeparatedView.setLayoutParams(params);
}
}
@@ -119,13 +135,15 @@ public class HardwareUiLayout extends FrameLayout implements Tunable {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (mChild == null) {
if (mList == null) {
if (getChildCount() != 0) {
mChild = getChildAt(0);
mChild.setBackground(mBackground);
mList = getChildAt(0);
mList.setBackground(mListBackground);
mSeparatedView = getChildAt(1);
mSeparatedView.setBackground(mSeparatedViewBackground);
updateEdgeMargin(mEdgeBleed ? 0 : getEdgePadding());
mOldHeight = mChild.getMeasuredHeight();
mChild.addOnLayoutChangeListener(
mOldHeight = mList.getMeasuredHeight();
mList.addOnLayoutChangeListener(
(v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) ->
updatePosition());
updateRotation();
@@ -133,7 +151,7 @@ public class HardwareUiLayout extends FrameLayout implements Tunable {
return;
}
}
int newHeight = mChild.getMeasuredHeight();
int newHeight = mList.getMeasuredHeight();
if (newHeight != mOldHeight) {
animateChild(mOldHeight, newHeight);
}
@@ -170,37 +188,60 @@ public class HardwareUiLayout extends FrameLayout implements Tunable {
} else {
rotateLeft();
}
if (mHasSeparatedButton) {
if (from == ROTATION_SEASCAPE || to == ROTATION_SEASCAPE) {
// Separated view has top margin, so seascape separated view need special rotation,
// not a full left or right rotation.
swapLeftAndTop(mSeparatedView);
} else if (from == ROTATION_LANDSCAPE) {
rotateRight(mSeparatedView);
} else {
rotateLeft(mSeparatedView);
}
}
if (to != ROTATION_NONE) {
if (mChild instanceof LinearLayout) {
if (mList instanceof LinearLayout) {
mRotatedBackground = true;
mBackground.setRotatedBackground(true);
LinearLayout linearLayout = (LinearLayout) mChild;
mListBackground.setRotatedBackground(true);
mSeparatedViewBackground.setRotatedBackground(true);
LinearLayout linearLayout = (LinearLayout) mList;
if (mSwapOrientation) {
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
setOrientation(LinearLayout.HORIZONTAL);
}
swapDimens(this.mChild);
swapDimens(mList);
swapDimens(mSeparatedView);
}
} else {
if (mChild instanceof LinearLayout) {
if (mList instanceof LinearLayout) {
mRotatedBackground = false;
mBackground.setRotatedBackground(false);
LinearLayout linearLayout = (LinearLayout) mChild;
mListBackground.setRotatedBackground(false);
mSeparatedViewBackground.setRotatedBackground(false);
LinearLayout linearLayout = (LinearLayout) mList;
if (mSwapOrientation) {
linearLayout.setOrientation(LinearLayout.VERTICAL);
setOrientation(LinearLayout.VERTICAL);
}
swapDimens(mChild);
swapDimens(mList);
swapDimens(mSeparatedView);
}
}
}
private void rotateRight() {
rotateRight(this);
rotateRight(mChild);
rotateRight(mList);
swapDimens(this);
LayoutParams p = (LayoutParams) mChild.getLayoutParams();
LayoutParams p = (LayoutParams) mList.getLayoutParams();
p.gravity = rotateGravityRight(p.gravity);
mChild.setLayoutParams(p);
mList.setLayoutParams(p);
LayoutParams separatedViewLayoutParams = (LayoutParams) mSeparatedView.getLayoutParams();
separatedViewLayoutParams.gravity = rotateGravityRight(separatedViewLayoutParams.gravity);
mSeparatedView.setLayoutParams(separatedViewLayoutParams);
setGravity(p.gravity);
}
private void swapDimens(View v) {
@@ -247,12 +288,18 @@ public class HardwareUiLayout extends FrameLayout implements Tunable {
private void rotateLeft() {
rotateLeft(this);
rotateLeft(mChild);
rotateLeft(mList);
swapDimens(this);
LayoutParams p = (LayoutParams) mChild.getLayoutParams();
LayoutParams p = (LayoutParams) mList.getLayoutParams();
p.gravity = rotateGravityLeft(p.gravity);
mChild.setLayoutParams(p);
mList.setLayoutParams(p);
LayoutParams separatedViewLayoutParams = (LayoutParams) mSeparatedView.getLayoutParams();
separatedViewLayoutParams.gravity = rotateGravityLeft(separatedViewLayoutParams.gravity);
mSeparatedView.setLayoutParams(separatedViewLayoutParams);
setGravity(p.gravity);
}
private int rotateGravityLeft(int gravity) {
@@ -310,6 +357,15 @@ public class HardwareUiLayout extends FrameLayout implements Tunable {
v.setLayoutParams(params);
}
private void swapLeftAndTop(View v) {
v.setPadding(v.getPaddingTop(), v.getPaddingLeft(), v.getPaddingBottom(),
v.getPaddingRight());
MarginLayoutParams params = (MarginLayoutParams) v.getLayoutParams();
params.setMargins(params.topMargin, params.leftMargin, params.bottomMargin,
params.rightMargin);
v.setLayoutParams(params);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
@@ -329,14 +385,14 @@ public class HardwareUiLayout extends FrameLayout implements Tunable {
mAnimating = false;
}
});
int fromTop = mChild.getTop();
int fromBottom = mChild.getBottom();
int fromTop = mList.getTop();
int fromBottom = mList.getBottom();
int toTop = fromTop - ((newHeight - oldHeight) / 2);
int toBottom = fromBottom + ((newHeight - oldHeight) / 2);
ObjectAnimator top = ObjectAnimator.ofInt(mChild, "top", fromTop, toTop);
top.addUpdateListener(animation -> mBackground.invalidateSelf());
ObjectAnimator top = ObjectAnimator.ofInt(mList, "top", fromTop, toTop);
top.addUpdateListener(animation -> mListBackground.invalidateSelf());
mAnimation.playTogether(top,
ObjectAnimator.ofInt(mChild, "bottom", fromBottom, toBottom));
ObjectAnimator.ofInt(mList, "bottom", fromBottom, toBottom));
}
public void setDivisionView(View v) {
@@ -350,26 +406,30 @@ public class HardwareUiLayout extends FrameLayout implements Tunable {
}
private void updatePosition() {
if (mChild == null) return;
if (mList == null) return;
// If got separated button, setRotatedBackground to false,
// all items won't get white background.
mListBackground.setRotatedBackground(mHasSeparatedButton);
mSeparatedViewBackground.setRotatedBackground(mHasSeparatedButton);
if (mDivision != null && mDivision.getVisibility() == VISIBLE) {
int index = mRotatedBackground ? 0 : 1;
mDivision.getLocationOnScreen(mTmp2);
float trans = mRotatedBackground ? mDivision.getTranslationX()
: mDivision.getTranslationY();
int viewTop = (int) (mTmp2[index] + trans);
mChild.getLocationOnScreen(mTmp2);
mList.getLocationOnScreen(mTmp2);
viewTop -= mTmp2[index];
setCutPoint(viewTop);
} else {
setCutPoint(mChild.getMeasuredHeight());
setCutPoint(mList.getMeasuredHeight());
}
}
private void setCutPoint(int point) {
int curPoint = mBackground.getCutPoint();
int curPoint = mListBackground.getCutPoint();
if (curPoint == point) return;
if (getAlpha() == 0 || curPoint == 0) {
mBackground.setCutPoint(point);
mListBackground.setCutPoint(point);
return;
}
if (mAnimator != null) {
@@ -379,7 +439,7 @@ public class HardwareUiLayout extends FrameLayout implements Tunable {
mAnimator.cancel();
}
mEndPoint = point;
mAnimator = ObjectAnimator.ofInt(mBackground, "cutPoint", curPoint, point);
mAnimator = ObjectAnimator.ofInt(mListBackground, "cutPoint", curPoint, point);
if (mCollapse) {
mAnimator.setStartDelay(300);
mCollapse = false;
@@ -404,6 +464,10 @@ public class HardwareUiLayout extends FrameLayout implements Tunable {
mCollapse = true;
}
public void setHasSeparatedButton(boolean hasSeparatedButton) {
mHasSeparatedButton = hasSeparatedButton;
}
public static HardwareUiLayout get(View v) {
if (v instanceof HardwareUiLayout) return (HardwareUiLayout) v;
if (v.getParent() instanceof View) {
@@ -413,14 +477,14 @@ public class HardwareUiLayout extends FrameLayout implements Tunable {
}
private final ViewTreeObserver.OnComputeInternalInsetsListener mInsetsListener = inoutInfo -> {
if (mHasOutsideTouch || (mChild == null)) {
if (mHasOutsideTouch || (mList == null)) {
inoutInfo.setTouchableInsets(
ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME);
return;
}
inoutInfo.setTouchableInsets(
ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_CONTENT);
inoutInfo.contentInsets.set(mChild.getLeft(), mChild.getTop(),
0, getBottom() - mChild.getBottom());
inoutInfo.contentInsets.set(mList.getLeft(), mList.getTop(),
0, getBottom() - mList.getBottom());
};
}

View File

@@ -28,12 +28,10 @@ import android.app.WallpaperManager;
import android.app.admin.DevicePolicyManager;
import android.app.trust.TrustManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.pm.UserInfo;
import android.database.ContentObserver;
import android.graphics.Point;
@@ -42,9 +40,7 @@ import android.media.AudioManager;
import android.net.ConnectivityManager;
import android.os.Build;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemProperties;
@@ -68,9 +64,9 @@ import android.view.Window;
import android.view.WindowManager;
import android.view.WindowManagerGlobal;
import android.view.accessibility.AccessibilityEvent;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
@@ -127,6 +123,7 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener,
private static final String GLOBAL_ACTION_KEY_ASSIST = "assist";
private static final String GLOBAL_ACTION_KEY_RESTART = "restart";
private static final String GLOBAL_ACTION_KEY_LOGOUT = "logout";
private static final String GLOBAL_ACTION_KEY_EMERGENCY = "emergency";
private static final String GLOBAL_ACTION_KEY_SCREENSHOT = "screenshot";
private final Context mContext;
@@ -149,6 +146,7 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener,
private boolean mDeviceProvisioned = false;
private ToggleAction.State mAirplaneState = ToggleAction.State.Off;
private boolean mIsWaitingForEcmExit = false;
private boolean mHasFasterEmergencyButton;
private boolean mHasTelephony;
private boolean mHasVibrator;
private boolean mHasLogoutButton;
@@ -319,6 +317,7 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener,
ArraySet<String> addedKeys = new ArraySet<String>();
mHasLogoutButton = false;
mHasLockdownButton = false;
mHasFasterEmergencyButton = false;
for (int i = 0; i < defaultActions.length; i++) {
String actionKey = defaultActions[i];
if (addedKeys.contains(actionKey)) {
@@ -357,6 +356,13 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener,
mItems.add(getAssistAction());
} else if (GLOBAL_ACTION_KEY_RESTART.equals(actionKey)) {
mItems.add(new RestartAction());
} else if (GLOBAL_ACTION_KEY_EMERGENCY.equals(actionKey)) {
if (Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.FASTER_EMERGENCY_PHONE_CALL_ENABLED, 0) != 0
&& !mEmergencyAffordanceManager.needsEmergencyAffordance()) {
mItems.add(new EmergencyAction());
mHasFasterEmergencyButton = true;
}
} else if (GLOBAL_ACTION_KEY_SCREENSHOT.equals(actionKey)) {
mItems.add(new ScreenshotAction());
} else if (GLOBAL_ACTION_KEY_LOGOUT.equals(actionKey)) {
@@ -386,7 +392,8 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener,
}
return false;
};
ActionsDialog dialog = new ActionsDialog(mContext, this, mAdapter, onItemLongClickListener);
ActionsDialog dialog = new ActionsDialog(mContext, this, mAdapter, onItemLongClickListener,
mHasFasterEmergencyButton);
dialog.setCanceledOnTouchOutside(false); // Handled by the custom class.
dialog.setKeyguardShowing(mKeyguardShowing);
@@ -441,6 +448,33 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener,
}
}
private class EmergencyAction extends SinglePressAction {
private static final String ACTION_EMERGENCY_DIALER_DIAL =
"com.android.phone.EmergencyDialer.DIAL";
private EmergencyAction() {
super(com.android.systemui.R.drawable.faster_emergency_icon,
R.string.global_action_emergency);
}
@Override
public void onPress() {
Intent intent = new Intent(ACTION_EMERGENCY_DIALER_DIAL);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
mContext.startActivityAsUser(intent, UserHandle.CURRENT);
}
@Override
public boolean showDuringKeyguard() {
return true;
}
@Override
public boolean showBeforeProvisioning() {
return true;
}
}
private final class RestartAction extends SinglePressAction implements LongPressAction {
private RestartAction() {
super(R.drawable.ic_restart, R.string.global_action_restart);
@@ -1354,15 +1388,17 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener,
private final Context mContext;
private final MyAdapter mAdapter;
private final LinearLayout mListView;
private final FrameLayout mSeparatedView;
private final HardwareUiLayout mHardwareLayout;
private final OnClickListener mClickListener;
private final OnItemLongClickListener mLongClickListener;
private final GradientDrawable mGradientDrawable;
private final ColorExtractor mColorExtractor;
private boolean mKeyguardShowing;
private boolean mShouldDisplaySeparatedButton;
public ActionsDialog(Context context, OnClickListener clickListener, MyAdapter adapter,
OnItemLongClickListener longClickListener) {
OnItemLongClickListener longClickListener, boolean shouldDisplaySeparatedButton) {
super(context, com.android.systemui.R.style.Theme_SystemUI_Dialog_GlobalActions);
mContext = context;
mAdapter = adapter;
@@ -1370,6 +1406,7 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener,
mLongClickListener = longClickListener;
mGradientDrawable = new GradientDrawable(mContext);
mColorExtractor = Dependency.get(SysuiColorExtractor.class);
mShouldDisplaySeparatedButton = shouldDisplaySeparatedButton;
// Window initialization
Window window = getWindow();
@@ -1393,8 +1430,13 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener,
setContentView(com.android.systemui.R.layout.global_actions_wrapped);
mListView = findViewById(android.R.id.list);
mSeparatedView = findViewById(com.android.systemui.R.id.separated_button);
if (!mShouldDisplaySeparatedButton) {
mSeparatedView.setVisibility(View.GONE);
}
mHardwareLayout = HardwareUiLayout.get(mListView);
mHardwareLayout.setOutsideTouchListener(view -> dismiss());
mHardwareLayout.setHasSeparatedButton(mShouldDisplaySeparatedButton);
setTitle(R.string.global_actions);
mListView.setAccessibilityDelegate(new View.AccessibilityDelegate() {
@Override
@@ -1409,13 +1451,16 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener,
private void updateList() {
mListView.removeAllViews();
mSeparatedView.removeAllViews();
for (int i = 0; i < mAdapter.getCount(); i++) {
View v = mAdapter.getView(i, null, mListView);
ViewGroup parentView = mShouldDisplaySeparatedButton && i == mAdapter.getCount() - 1
? mSeparatedView : mListView;
View v = mAdapter.getView(i, null, parentView);
final int pos = i;
v.setOnClickListener(view -> mClickListener.onClick(this, pos));
v.setOnLongClickListener(view ->
mLongClickListener.onItemLongClick(null, v, pos, 0));
mListView.addView(v);
parentView.addView(v);
}
}