mirror of
https://github.com/oxen-io/session-android.git
synced 2025-04-28 03:40:47 +00:00
Remove leftover half-height camera code.
This commit is contained in:
parent
b572fce658
commit
42e94d8f92
@ -1,106 +1,106 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.InputAwareLayout
|
<org.thoughtcrime.securesms.components.InputAwareLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
android:id="@+id/layout_container"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
android:layout_width="match_parent"
|
||||||
android:id="@+id/layout_container"
|
android:layout_height="match_parent">
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.camera.QuickAttachmentDrawer
|
<LinearLayout
|
||||||
android:id="@+id/quick_attachment_drawer"
|
android:id="@+id/conversation_container"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical">
|
android:clipChildren="false"
|
||||||
|
android:clipToPadding="false"
|
||||||
<LinearLayout android:id="@+id/conversation_container"
|
android:gravity="bottom"
|
||||||
android:layout_width="match_parent"
|
android:orientation="vertical"
|
||||||
android:layout_height="match_parent"
|
android:paddingTop="?attr/actionBarSize">
|
||||||
android:orientation="vertical"
|
|
||||||
android:paddingTop="?attr/actionBarSize"
|
|
||||||
android:gravity="bottom"
|
|
||||||
android:clipToPadding="false"
|
|
||||||
android:clipChildren="false">
|
|
||||||
|
|
||||||
<ViewStub android:id="@+id/group_share_profile_view_stub"
|
|
||||||
android:layout="@layout/conversation_activity_group_share_profile_stub"
|
|
||||||
android:inflatedId="@+id/group_share_profile_view"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"/>
|
|
||||||
|
|
||||||
<ViewStub android:id="@+id/unverified_banner_stub"
|
|
||||||
android:layout="@layout/conversation_activity_unverified_banner_stub"
|
|
||||||
android:inflatedId="@+id/unverified_banner"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"/>
|
|
||||||
|
|
||||||
<ViewStub
|
<ViewStub
|
||||||
android:id="@+id/reminder_stub"
|
android:id="@+id/group_share_profile_view_stub"
|
||||||
android:layout="@layout/conversation_activity_reminderview_stub"
|
android:layout_width="match_parent"
|
||||||
android:inflatedId="@+id/reminder"
|
android:layout_height="wrap_content"
|
||||||
android:layout_width="match_parent"
|
android:inflatedId="@+id/group_share_profile_view"
|
||||||
android:layout_height="wrap_content"/>
|
android:layout="@layout/conversation_activity_group_share_profile_stub" />
|
||||||
|
|
||||||
<FrameLayout android:id="@+id/fragment_content"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:layout_weight="1" />
|
|
||||||
|
|
||||||
<ViewStub
|
<ViewStub
|
||||||
android:id="@+id/attachment_editor_stub"
|
android:id="@+id/unverified_banner_stub"
|
||||||
android:inflatedId="@+id/attachment_editor"
|
android:layout_width="match_parent"
|
||||||
android:layout="@layout/conversation_activity_attachment_editor_stub"
|
android:layout_height="wrap_content"
|
||||||
android:layout_width="match_parent"
|
android:inflatedId="@+id/unverified_banner"
|
||||||
android:layout_height="wrap_content"/>
|
android:layout="@layout/conversation_activity_unverified_banner_stub" />
|
||||||
|
|
||||||
|
<ViewStub
|
||||||
|
android:id="@+id/reminder_stub"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:inflatedId="@+id/reminder"
|
||||||
|
android:layout="@layout/conversation_activity_reminderview_stub" />
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@+id/fragment_content"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="1" />
|
||||||
|
|
||||||
|
<ViewStub
|
||||||
|
android:id="@+id/attachment_editor_stub"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:inflatedId="@+id/attachment_editor"
|
||||||
|
android:layout="@layout/conversation_activity_attachment_editor_stub" />
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<include layout="@layout/conversation_input_panel"/>
|
<include layout="@layout/conversation_input_panel" />
|
||||||
|
|
||||||
<include layout="@layout/conversation_search_nav" />
|
<include layout="@layout/conversation_search_nav" />
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
<Button android:id="@+id/register_button"
|
<Button
|
||||||
android:layout_width="fill_parent"
|
android:id="@+id/register_button"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="fill_parent"
|
||||||
android:padding="20dp"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/conversation_activity__enable_signal_messages"
|
android:padding="20dp"
|
||||||
android:visibility="gone"/>
|
android:text="@string/conversation_activity__enable_signal_messages"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
<Button android:id="@+id/unblock_button"
|
<Button
|
||||||
android:layout_width="fill_parent"
|
android:id="@+id/unblock_button"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="fill_parent"
|
||||||
android:padding="20dp"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/ConversationActivity_unblock"
|
android:padding="20dp"
|
||||||
android:visibility="gone"/>
|
android:text="@string/ConversationActivity_unblock"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
<Button android:id="@+id/make_default_sms_button"
|
<Button
|
||||||
android:layout_width="fill_parent"
|
android:id="@+id/make_default_sms_button"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="fill_parent"
|
||||||
android:padding="20dp"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/conversation_activity__enable_signal_for_sms"
|
android:padding="20dp"
|
||||||
android:visibility="gone"/>
|
android:text="@string/conversation_activity__enable_signal_for_sms"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
<TextView android:id="@+id/space_left"
|
<TextView
|
||||||
android:paddingLeft="5dip"
|
android:id="@+id/space_left"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:visibility="gone"
|
android:background="?android:windowBackground"
|
||||||
android:background="?android:windowBackground"
|
android:paddingLeft="5dip"
|
||||||
android:text="160/160 (1)" />
|
android:text="160/160 (1)"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
|
|
||||||
<ViewStub
|
<ViewStub
|
||||||
android:id="@+id/emoji_drawer_stub"
|
android:id="@+id/emoji_drawer_stub"
|
||||||
android:layout="@layout/conversation_activity_emojidrawer_stub"
|
android:layout_width="match_parent"
|
||||||
android:inflatedId="@+id/emoji_drawer"
|
android:layout_height="wrap_content"
|
||||||
android:layout_width="match_parent"
|
android:inflatedId="@+id/emoji_drawer"
|
||||||
android:layout_height="wrap_content"/>
|
android:layout="@layout/conversation_activity_emojidrawer_stub" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</org.thoughtcrime.securesms.components.camera.QuickAttachmentDrawer>
|
|
||||||
</org.thoughtcrime.securesms.components.InputAwareLayout>
|
</org.thoughtcrime.securesms.components.InputAwareLayout>
|
||||||
|
@ -1,576 +0,0 @@
|
|||||||
package org.thoughtcrime.securesms.components.camera;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.pm.PackageManager;
|
|
||||||
import android.graphics.Canvas;
|
|
||||||
import android.graphics.Rect;
|
|
||||||
import android.hardware.Camera;
|
|
||||||
import android.os.Build.VERSION;
|
|
||||||
import android.os.Build.VERSION_CODES;
|
|
||||||
import android.support.annotation.NonNull;
|
|
||||||
import android.support.v4.view.MotionEventCompat;
|
|
||||||
import android.support.v4.view.ViewCompat;
|
|
||||||
import android.support.v4.view.animation.FastOutSlowInInterpolator;
|
|
||||||
import android.support.v4.widget.ViewDragHelper;
|
|
||||||
import android.util.AttributeSet;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.MotionEvent;
|
|
||||||
import android.view.Surface;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.ImageButton;
|
|
||||||
|
|
||||||
import com.nineoldandroids.animation.ObjectAnimator;
|
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.R;
|
|
||||||
import org.thoughtcrime.securesms.components.InputAwareLayout.InputView;
|
|
||||||
import org.thoughtcrime.securesms.components.KeyboardAwareLinearLayout;
|
|
||||||
import org.thoughtcrime.securesms.components.camera.CameraView.CameraViewListener;
|
|
||||||
import org.thoughtcrime.securesms.logging.Log;
|
|
||||||
import org.thoughtcrime.securesms.util.ServiceUtil;
|
|
||||||
import org.thoughtcrime.securesms.util.Util;
|
|
||||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
|
||||||
|
|
||||||
public class QuickAttachmentDrawer extends ViewGroup implements InputView, CameraViewListener {
|
|
||||||
private static final String TAG = QuickAttachmentDrawer.class.getSimpleName();
|
|
||||||
|
|
||||||
private final ViewDragHelper dragHelper;
|
|
||||||
|
|
||||||
private CameraView cameraView;
|
|
||||||
private int coverViewPosition;
|
|
||||||
private KeyboardAwareLinearLayout container;
|
|
||||||
private View coverView;
|
|
||||||
private View controls;
|
|
||||||
private ImageButton fullScreenButton;
|
|
||||||
private ImageButton swapCameraButton;
|
|
||||||
private ImageButton shutterButton;
|
|
||||||
private int slideOffset;
|
|
||||||
private float initialMotionX;
|
|
||||||
private float initialMotionY;
|
|
||||||
private int rotation;
|
|
||||||
private AttachmentDrawerListener listener;
|
|
||||||
private int halfExpandedHeight;
|
|
||||||
private ObjectAnimator animator;
|
|
||||||
|
|
||||||
private DrawerState drawerState = DrawerState.COLLAPSED;
|
|
||||||
private Rect drawChildrenRect = new Rect();
|
|
||||||
private boolean paused = false;
|
|
||||||
|
|
||||||
public QuickAttachmentDrawer(Context context) {
|
|
||||||
this(context, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public QuickAttachmentDrawer(Context context, AttributeSet attrs) {
|
|
||||||
this(context, attrs, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public QuickAttachmentDrawer(Context context, AttributeSet attrs, int defStyle) {
|
|
||||||
super(context, attrs, defStyle);
|
|
||||||
dragHelper = ViewDragHelper.create(this, 1.f, new ViewDragHelperCallback());
|
|
||||||
initializeView();
|
|
||||||
updateHalfExpandedAnchorPoint();
|
|
||||||
onConfigurationChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initializeView() {
|
|
||||||
inflate(getContext(), R.layout.quick_attachment_drawer, this);
|
|
||||||
cameraView = ViewUtil.findById(this, R.id.quick_camera);
|
|
||||||
updateControlsView();
|
|
||||||
|
|
||||||
coverViewPosition = getChildCount();
|
|
||||||
controls.setVisibility(GONE);
|
|
||||||
cameraView.setVisibility(GONE);
|
|
||||||
cameraView.addListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isDeviceSupported(Context context) {
|
|
||||||
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA) &&
|
|
||||||
Camera.getNumberOfCameras() > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isShowing() {
|
|
||||||
return drawerState.isVisible();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void hide(boolean immediate) {
|
|
||||||
setDrawerStateAndUpdate(DrawerState.COLLAPSED, immediate);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void show(int height, boolean immediate) {
|
|
||||||
setDrawerStateAndUpdate(DrawerState.HALF_EXPANDED, immediate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onConfigurationChanged() {
|
|
||||||
int rotation = ServiceUtil.getWindowManager(getContext()).getDefaultDisplay().getRotation();
|
|
||||||
final boolean rotationChanged = this.rotation != rotation;
|
|
||||||
this.rotation = rotation;
|
|
||||||
if (rotationChanged) {
|
|
||||||
if (isShowing()) {
|
|
||||||
cameraView.onPause();
|
|
||||||
}
|
|
||||||
updateControlsView();
|
|
||||||
setDrawerStateAndUpdate(drawerState, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateControlsView() {
|
|
||||||
Log.i(TAG, "updateControlsView()");
|
|
||||||
View controls = LayoutInflater.from(getContext()).inflate(isLandscape() ? R.layout.quick_camera_controls_land
|
|
||||||
: R.layout.quick_camera_controls,
|
|
||||||
this, false);
|
|
||||||
shutterButton = (ImageButton) controls.findViewById(R.id.shutter_button);
|
|
||||||
swapCameraButton = (ImageButton) controls.findViewById(R.id.swap_camera_button);
|
|
||||||
fullScreenButton = (ImageButton) controls.findViewById(R.id.fullscreen_button);
|
|
||||||
if (cameraView.isMultiCamera()) {
|
|
||||||
swapCameraButton.setVisibility(View.VISIBLE);
|
|
||||||
swapCameraButton.setImageResource(cameraView.isRearCamera() ? R.drawable.quick_camera_front
|
|
||||||
: R.drawable.quick_camera_rear);
|
|
||||||
swapCameraButton.setOnClickListener(new CameraFlipClickListener());
|
|
||||||
}
|
|
||||||
shutterButton.setOnClickListener(new ShutterClickListener());
|
|
||||||
fullScreenButton.setOnClickListener(new FullscreenClickListener());
|
|
||||||
ViewUtil.swapChildInPlace(this, this.controls, controls, indexOfChild(cameraView) + 1);
|
|
||||||
this.controls = controls;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isLandscape() {
|
|
||||||
return rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270;
|
|
||||||
}
|
|
||||||
|
|
||||||
private View getCoverView() {
|
|
||||||
if (coverView == null) coverView = getChildAt(coverViewPosition);
|
|
||||||
return coverView;
|
|
||||||
}
|
|
||||||
|
|
||||||
private KeyboardAwareLinearLayout getContainer() {
|
|
||||||
if (container == null) container = (KeyboardAwareLinearLayout)getParent();
|
|
||||||
return container;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateHalfExpandedAnchorPoint() {
|
|
||||||
if (getContainer() != null) {
|
|
||||||
halfExpandedHeight = getContainer().getKeyboardHeight();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
|
||||||
if (changed && drawerState == DrawerState.FULL_EXPANDED) {
|
|
||||||
setSlideOffset(getMeasuredHeight());
|
|
||||||
}
|
|
||||||
|
|
||||||
final int paddingLeft = getPaddingLeft();
|
|
||||||
final int paddingTop = getPaddingTop();
|
|
||||||
|
|
||||||
for (int i = 0; i < getChildCount(); i++) {
|
|
||||||
final View child = getChildAt(i);
|
|
||||||
final int childHeight = child.getMeasuredHeight();
|
|
||||||
|
|
||||||
int childTop = paddingTop;
|
|
||||||
int childLeft = paddingLeft;
|
|
||||||
int childBottom;
|
|
||||||
|
|
||||||
if (child == cameraView) {
|
|
||||||
childTop = computeCameraTopPosition(slideOffset);
|
|
||||||
childBottom = childTop + childHeight;
|
|
||||||
if (cameraView.getMeasuredWidth() < getMeasuredWidth())
|
|
||||||
childLeft = (getMeasuredWidth() - cameraView.getMeasuredWidth()) / 2 + paddingLeft;
|
|
||||||
} else if (child == controls) {
|
|
||||||
childBottom = getMeasuredHeight();
|
|
||||||
} else {
|
|
||||||
childTop = computeCoverTopPosition(slideOffset);
|
|
||||||
childBottom = childTop + childHeight;
|
|
||||||
}
|
|
||||||
final int childRight = childLeft + child.getMeasuredWidth();
|
|
||||||
|
|
||||||
child.layout(childLeft, childTop, childRight, childBottom);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
|
||||||
final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
|
|
||||||
final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
|
|
||||||
final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
|
|
||||||
final int heightSize = MeasureSpec.getSize(heightMeasureSpec);
|
|
||||||
|
|
||||||
if (widthMode != MeasureSpec.EXACTLY) {
|
|
||||||
throw new IllegalStateException("Width must have an exact value or MATCH_PARENT");
|
|
||||||
} else if (heightMode != MeasureSpec.EXACTLY) {
|
|
||||||
throw new IllegalStateException("Height must have an exact value or MATCH_PARENT");
|
|
||||||
}
|
|
||||||
|
|
||||||
int layoutHeight = heightSize - getPaddingTop() - getPaddingBottom();
|
|
||||||
|
|
||||||
for (int i = 0; i < getChildCount(); i++) {
|
|
||||||
final View child = getChildAt(i);
|
|
||||||
final LayoutParams lp = child.getLayoutParams();
|
|
||||||
|
|
||||||
if (child.getVisibility() == GONE && i == 0) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
int childWidthSpec;
|
|
||||||
switch (lp.width) {
|
|
||||||
case LayoutParams.WRAP_CONTENT:
|
|
||||||
childWidthSpec = MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.AT_MOST);
|
|
||||||
break;
|
|
||||||
case LayoutParams.MATCH_PARENT:
|
|
||||||
childWidthSpec = MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.EXACTLY);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
childWidthSpec = MeasureSpec.makeMeasureSpec(lp.width, MeasureSpec.EXACTLY);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
int childHeightSpec;
|
|
||||||
switch (lp.height) {
|
|
||||||
case LayoutParams.WRAP_CONTENT:
|
|
||||||
childHeightSpec = MeasureSpec.makeMeasureSpec(layoutHeight, MeasureSpec.AT_MOST);
|
|
||||||
break;
|
|
||||||
case LayoutParams.MATCH_PARENT:
|
|
||||||
childHeightSpec = MeasureSpec.makeMeasureSpec(layoutHeight, MeasureSpec.EXACTLY);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
childHeightSpec = MeasureSpec.makeMeasureSpec(lp.height, MeasureSpec.EXACTLY);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
child.measure(childWidthSpec, childHeightSpec);
|
|
||||||
}
|
|
||||||
|
|
||||||
setMeasuredDimension(widthSize, heightSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
|
|
||||||
super.onSizeChanged(w, h, oldw, oldh);
|
|
||||||
if (h != oldh) updateHalfExpandedAnchorPoint();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected boolean drawChild(@NonNull Canvas canvas, @NonNull View child, long drawingTime) {
|
|
||||||
boolean result;
|
|
||||||
final int save = canvas.save();
|
|
||||||
|
|
||||||
canvas.getClipBounds(drawChildrenRect);
|
|
||||||
if (child == coverView) {
|
|
||||||
drawChildrenRect.bottom = Math.min(drawChildrenRect.bottom, child.getBottom());
|
|
||||||
} else if (coverView != null) {
|
|
||||||
drawChildrenRect.top = Math.max(drawChildrenRect.top, coverView.getBottom());
|
|
||||||
}
|
|
||||||
canvas.clipRect(drawChildrenRect);
|
|
||||||
result = super.drawChild(canvas, child, drawingTime);
|
|
||||||
canvas.restoreToCount(save);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void computeScroll() {
|
|
||||||
if (dragHelper.continueSettling(true)) {
|
|
||||||
ViewCompat.postInvalidateOnAnimation(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (slideOffset == 0 && cameraView.isStarted()) {
|
|
||||||
cameraView.onPause();
|
|
||||||
controls.setVisibility(GONE);
|
|
||||||
cameraView.setVisibility(GONE);
|
|
||||||
} else if (slideOffset != 0 && !cameraView.isStarted() & !paused) {
|
|
||||||
controls.setVisibility(VISIBLE);
|
|
||||||
cameraView.setVisibility(VISIBLE);
|
|
||||||
cameraView.onResume();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setDrawerState(DrawerState drawerState) {
|
|
||||||
switch (drawerState) {
|
|
||||||
case COLLAPSED:
|
|
||||||
fullScreenButton.setImageResource(R.drawable.quick_camera_fullscreen);
|
|
||||||
break;
|
|
||||||
case HALF_EXPANDED:
|
|
||||||
if (isLandscape()) {
|
|
||||||
setDrawerState(DrawerState.FULL_EXPANDED);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
fullScreenButton.setImageResource(R.drawable.quick_camera_fullscreen);
|
|
||||||
break;
|
|
||||||
case FULL_EXPANDED:
|
|
||||||
fullScreenButton.setImageResource(isLandscape() ? R.drawable.quick_camera_hide
|
|
||||||
: R.drawable.quick_camera_exit_fullscreen);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (listener != null && drawerState != this.drawerState) {
|
|
||||||
this.drawerState = drawerState;
|
|
||||||
listener.onAttachmentDrawerStateChanged(drawerState);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public void setSlideOffset(int slideOffset) {
|
|
||||||
this.slideOffset = slideOffset;
|
|
||||||
requestLayout();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getTargetSlideOffset() {
|
|
||||||
switch (drawerState) {
|
|
||||||
case FULL_EXPANDED: return getMeasuredHeight();
|
|
||||||
case HALF_EXPANDED: return halfExpandedHeight;
|
|
||||||
default: return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDrawerStateAndUpdate(final DrawerState requestedDrawerState) {
|
|
||||||
setDrawerStateAndUpdate(requestedDrawerState, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDrawerStateAndUpdate(final DrawerState requestedDrawerState, boolean instant) {
|
|
||||||
DrawerState oldDrawerState = this.drawerState;
|
|
||||||
setDrawerState(requestedDrawerState);
|
|
||||||
if (oldDrawerState != drawerState) {
|
|
||||||
updateHalfExpandedAnchorPoint();
|
|
||||||
slideTo(getTargetSlideOffset(), instant);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setListener(AttachmentDrawerListener listener) {
|
|
||||||
this.listener = listener;
|
|
||||||
cameraView.addListener(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onImageCapture(@NonNull byte[] imageBytes) {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCameraFail() {
|
|
||||||
swapCameraButton.setEnabled(false);
|
|
||||||
shutterButton.setEnabled(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCameraStart() {
|
|
||||||
swapCameraButton.setEnabled(true);
|
|
||||||
shutterButton.setEnabled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCameraStop() {
|
|
||||||
swapCameraButton.setEnabled(false);
|
|
||||||
shutterButton.setEnabled(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface AttachmentDrawerListener extends CameraViewListener {
|
|
||||||
void onAttachmentDrawerStateChanged(DrawerState drawerState);
|
|
||||||
}
|
|
||||||
|
|
||||||
private class ViewDragHelperCallback extends ViewDragHelper.Callback {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean tryCaptureView(View child, int pointerId) {
|
|
||||||
return child == controls;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onViewDragStateChanged(int state) {
|
|
||||||
if (dragHelper.getViewDragState() == ViewDragHelper.STATE_IDLE) {
|
|
||||||
setDrawerState(drawerState);
|
|
||||||
slideOffset = getTargetSlideOffset();
|
|
||||||
requestLayout();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onViewCaptured(View capturedChild, int activePointerId) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) {
|
|
||||||
slideOffset = Util.clamp(slideOffset - dy, 0, getMeasuredHeight());
|
|
||||||
requestLayout();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onViewReleased(View releasedChild, float xvel, float yvel) {
|
|
||||||
if (releasedChild == controls) {
|
|
||||||
float direction = -yvel;
|
|
||||||
DrawerState drawerState = DrawerState.COLLAPSED;
|
|
||||||
|
|
||||||
if (direction > 1) {
|
|
||||||
drawerState = DrawerState.FULL_EXPANDED;
|
|
||||||
} else if (direction < -1) {
|
|
||||||
boolean halfExpand = (slideOffset > halfExpandedHeight && !isLandscape());
|
|
||||||
drawerState = halfExpand ? DrawerState.HALF_EXPANDED : DrawerState.COLLAPSED;
|
|
||||||
} else if (!isLandscape()) {
|
|
||||||
if (slideOffset >= (halfExpandedHeight + getMeasuredHeight()) / 2) {
|
|
||||||
drawerState = DrawerState.FULL_EXPANDED;
|
|
||||||
} else if (slideOffset >= halfExpandedHeight / 2) {
|
|
||||||
drawerState = DrawerState.HALF_EXPANDED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setDrawerState(drawerState);
|
|
||||||
int slideOffset = getTargetSlideOffset();
|
|
||||||
dragHelper.captureChildView(coverView, 0);
|
|
||||||
dragHelper.settleCapturedViewAt(coverView.getLeft(), computeCoverTopPosition(slideOffset));
|
|
||||||
dragHelper.captureChildView(cameraView, 0);
|
|
||||||
dragHelper.settleCapturedViewAt(cameraView.getLeft(), computeCameraTopPosition(slideOffset));
|
|
||||||
ViewCompat.postInvalidateOnAnimation(QuickAttachmentDrawer.this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getViewVerticalDragRange(View child) {
|
|
||||||
return getMeasuredHeight();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int clampViewPositionVertical(View child, int top, int dy) {
|
|
||||||
return top;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onInterceptTouchEvent(MotionEvent event) {
|
|
||||||
final int action = MotionEventCompat.getActionMasked(event);
|
|
||||||
|
|
||||||
if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
|
|
||||||
dragHelper.cancel();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
final float x = event.getX();
|
|
||||||
final float y = event.getY();
|
|
||||||
|
|
||||||
switch (action) {
|
|
||||||
case MotionEvent.ACTION_DOWN:
|
|
||||||
initialMotionX = x;
|
|
||||||
initialMotionY = y;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MotionEvent.ACTION_MOVE:
|
|
||||||
final float adx = Math.abs(x - initialMotionX);
|
|
||||||
final float ady = Math.abs(y - initialMotionY);
|
|
||||||
final int dragSlop = dragHelper.getTouchSlop();
|
|
||||||
|
|
||||||
if (adx > dragSlop && ady < dragSlop) {
|
|
||||||
return super.onInterceptTouchEvent(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((ady > dragSlop && adx > ady) || !isDragViewUnder((int) initialMotionX, (int) initialMotionY)) {
|
|
||||||
dragHelper.cancel();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return dragHelper.shouldInterceptTouchEvent(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onTouchEvent(@NonNull MotionEvent event) {
|
|
||||||
dragHelper.processTouchEvent(event);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// NOTE: Android Studio bug misreports error, squashing the warning.
|
|
||||||
// https://code.google.com/p/android/issues/detail?id=175977
|
|
||||||
@SuppressWarnings("ResourceType")
|
|
||||||
private boolean isDragViewUnder(int x, int y) {
|
|
||||||
int[] viewLocation = new int[2];
|
|
||||||
cameraView.getLocationOnScreen(viewLocation);
|
|
||||||
int[] parentLocation = new int[2];
|
|
||||||
this.getLocationOnScreen(parentLocation);
|
|
||||||
int screenX = parentLocation[0] + x;
|
|
||||||
int screenY = parentLocation[1] + y;
|
|
||||||
return screenX >= viewLocation[0] && screenX < viewLocation[0] + cameraView.getWidth() &&
|
|
||||||
screenY >= viewLocation[1] && screenY < viewLocation[1] + cameraView.getHeight();
|
|
||||||
}
|
|
||||||
|
|
||||||
private int computeCameraTopPosition(int slideOffset) {
|
|
||||||
if (VERSION.SDK_INT < VERSION_CODES.ICE_CREAM_SANDWICH) {
|
|
||||||
return getPaddingTop();
|
|
||||||
}
|
|
||||||
|
|
||||||
final int baseCameraTop = (cameraView.getMeasuredHeight() - halfExpandedHeight) / 2;
|
|
||||||
final int baseOffset = getMeasuredHeight() - slideOffset - baseCameraTop;
|
|
||||||
final float slop = Util.clamp((float)(slideOffset - halfExpandedHeight) / (getMeasuredHeight() - halfExpandedHeight),
|
|
||||||
0f,
|
|
||||||
1f);
|
|
||||||
return baseOffset + (int)(slop * baseCameraTop);
|
|
||||||
}
|
|
||||||
|
|
||||||
private int computeCoverTopPosition(int slideOffset) {
|
|
||||||
return getMeasuredHeight() - getPaddingBottom() - slideOffset - getCoverView().getMeasuredHeight();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void slideTo(int slideOffset, boolean forceInstant) {
|
|
||||||
if (animator != null) {
|
|
||||||
animator.cancel();
|
|
||||||
animator = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!forceInstant) {
|
|
||||||
animator = ObjectAnimator.ofInt(this, "slideOffset", this.slideOffset, slideOffset);
|
|
||||||
animator.setInterpolator(new FastOutSlowInInterpolator());
|
|
||||||
animator.setDuration(400);
|
|
||||||
animator.start();
|
|
||||||
ViewCompat.postInvalidateOnAnimation(this);
|
|
||||||
} else {
|
|
||||||
this.slideOffset = slideOffset;
|
|
||||||
requestLayout();
|
|
||||||
invalidate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onPause() {
|
|
||||||
paused = true;
|
|
||||||
cameraView.onPause();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onResume() {
|
|
||||||
paused = false;
|
|
||||||
if (drawerState.isVisible()) cameraView.onResume();
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum DrawerState {
|
|
||||||
COLLAPSED, HALF_EXPANDED, FULL_EXPANDED;
|
|
||||||
|
|
||||||
public boolean isVisible() {
|
|
||||||
return this != COLLAPSED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class ShutterClickListener implements OnClickListener {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
boolean crop = drawerState != DrawerState.FULL_EXPANDED;
|
|
||||||
int imageHeight = crop ? getContainer().getKeyboardHeight() : cameraView.getMeasuredHeight();
|
|
||||||
Rect previewRect = new Rect(0, 0, cameraView.getMeasuredWidth(), imageHeight);
|
|
||||||
cameraView.takePicture(previewRect);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class CameraFlipClickListener implements OnClickListener {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
cameraView.flipCamera();
|
|
||||||
swapCameraButton.setImageResource(cameraView.isRearCamera() ? R.drawable.quick_camera_front
|
|
||||||
: R.drawable.quick_camera_rear);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class FullscreenClickListener implements OnClickListener {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
if (drawerState != DrawerState.FULL_EXPANDED) {
|
|
||||||
setDrawerStateAndUpdate(DrawerState.FULL_EXPANDED);
|
|
||||||
} else if (isLandscape()) {
|
|
||||||
setDrawerStateAndUpdate(DrawerState.COLLAPSED);
|
|
||||||
} else {
|
|
||||||
setDrawerStateAndUpdate(DrawerState.HALF_EXPANDED);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -25,6 +25,7 @@ import android.content.BroadcastReceiver;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
@ -32,6 +33,7 @@ import android.graphics.BitmapFactory;
|
|||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.PorterDuff.Mode;
|
import android.graphics.PorterDuff.Mode;
|
||||||
import android.graphics.drawable.ColorDrawable;
|
import android.graphics.drawable.ColorDrawable;
|
||||||
|
import android.hardware.Camera;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
@ -105,9 +107,6 @@ import org.thoughtcrime.securesms.components.InputAwareLayout;
|
|||||||
import org.thoughtcrime.securesms.components.InputPanel;
|
import org.thoughtcrime.securesms.components.InputPanel;
|
||||||
import org.thoughtcrime.securesms.components.KeyboardAwareLinearLayout.OnKeyboardShownListener;
|
import org.thoughtcrime.securesms.components.KeyboardAwareLinearLayout.OnKeyboardShownListener;
|
||||||
import org.thoughtcrime.securesms.components.SendButton;
|
import org.thoughtcrime.securesms.components.SendButton;
|
||||||
import org.thoughtcrime.securesms.components.camera.QuickAttachmentDrawer;
|
|
||||||
import org.thoughtcrime.securesms.components.camera.QuickAttachmentDrawer.AttachmentDrawerListener;
|
|
||||||
import org.thoughtcrime.securesms.components.camera.QuickAttachmentDrawer.DrawerState;
|
|
||||||
import org.thoughtcrime.securesms.components.emoji.EmojiDrawer;
|
import org.thoughtcrime.securesms.components.emoji.EmojiDrawer;
|
||||||
import org.thoughtcrime.securesms.components.emoji.EmojiStrings;
|
import org.thoughtcrime.securesms.components.emoji.EmojiStrings;
|
||||||
import org.thoughtcrime.securesms.components.identity.UntrustedSendDialog;
|
import org.thoughtcrime.securesms.components.identity.UntrustedSendDialog;
|
||||||
@ -237,10 +236,9 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
|||||||
AttachmentManager.AttachmentListener,
|
AttachmentManager.AttachmentListener,
|
||||||
RecipientModifiedListener,
|
RecipientModifiedListener,
|
||||||
OnKeyboardShownListener,
|
OnKeyboardShownListener,
|
||||||
AttachmentDrawerListener,
|
|
||||||
InputPanel.Listener,
|
InputPanel.Listener,
|
||||||
InputPanel.MediaListener,
|
InputPanel.MediaListener,
|
||||||
ComposeText.CursorPositionChangedListener,
|
ComposeText.CursorPositionChangedListener,
|
||||||
ConversationSearchBottomBar.EventListener
|
ConversationSearchBottomBar.EventListener
|
||||||
{
|
{
|
||||||
private static final String TAG = ConversationActivity.class.getSimpleName();
|
private static final String TAG = ConversationActivity.class.getSimpleName();
|
||||||
@ -296,7 +294,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
|||||||
private Stub<EmojiDrawer> emojiDrawerStub;
|
private Stub<EmojiDrawer> emojiDrawerStub;
|
||||||
protected HidingLinearLayout quickAttachmentToggle;
|
protected HidingLinearLayout quickAttachmentToggle;
|
||||||
protected HidingLinearLayout inlineAttachmentToggle;
|
protected HidingLinearLayout inlineAttachmentToggle;
|
||||||
private QuickAttachmentDrawer quickAttachmentDrawer;
|
|
||||||
private InputPanel inputPanel;
|
private InputPanel inputPanel;
|
||||||
|
|
||||||
private LinkPreviewViewModel linkPreviewViewModel;
|
private LinkPreviewViewModel linkPreviewViewModel;
|
||||||
@ -410,7 +407,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
|||||||
super.onResume();
|
super.onResume();
|
||||||
dynamicTheme.onResume(this);
|
dynamicTheme.onResume(this);
|
||||||
dynamicLanguage.onResume(this);
|
dynamicLanguage.onResume(this);
|
||||||
quickAttachmentDrawer.onResume();
|
|
||||||
|
|
||||||
initializeEnabledCheck();
|
initializeEnabledCheck();
|
||||||
initializeMmsEnabledCheck();
|
initializeMmsEnabledCheck();
|
||||||
@ -434,7 +430,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
|||||||
super.onPause();
|
super.onPause();
|
||||||
MessageNotifier.setVisibleThread(-1L);
|
MessageNotifier.setVisibleThread(-1L);
|
||||||
if (isFinishing()) overridePendingTransition(R.anim.fade_scale_in, R.anim.slide_to_right);
|
if (isFinishing()) overridePendingTransition(R.anim.fade_scale_in, R.anim.slide_to_right);
|
||||||
quickAttachmentDrawer.onPause();
|
|
||||||
inputPanel.onPause();
|
inputPanel.onPause();
|
||||||
|
|
||||||
fragment.setLastSeen(System.currentTimeMillis());
|
fragment.setLastSeen(System.currentTimeMillis());
|
||||||
@ -454,7 +449,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
|||||||
Log.i(TAG, "onConfigurationChanged(" + newConfig.orientation + ")");
|
Log.i(TAG, "onConfigurationChanged(" + newConfig.orientation + ")");
|
||||||
super.onConfigurationChanged(newConfig);
|
super.onConfigurationChanged(newConfig);
|
||||||
composeText.setTransport(sendButton.getSelectedTransport());
|
composeText.setTransport(sendButton.getSelectedTransport());
|
||||||
quickAttachmentDrawer.onConfigurationChanged();
|
|
||||||
|
|
||||||
if (emojiDrawerStub.resolved() && container.getCurrentInput() == emojiDrawerStub.get()) {
|
if (emojiDrawerStub.resolved() && container.getCurrentInput() == emojiDrawerStub.get()) {
|
||||||
container.hideAttachedInput(true);
|
container.hideAttachedInput(true);
|
||||||
@ -1524,7 +1518,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
|||||||
reminderView = ViewUtil.findStubById(this, R.id.reminder_stub);
|
reminderView = ViewUtil.findStubById(this, R.id.reminder_stub);
|
||||||
unverifiedBannerView = ViewUtil.findStubById(this, R.id.unverified_banner_stub);
|
unverifiedBannerView = ViewUtil.findStubById(this, R.id.unverified_banner_stub);
|
||||||
groupShareProfileView = ViewUtil.findStubById(this, R.id.group_share_profile_view_stub);
|
groupShareProfileView = ViewUtil.findStubById(this, R.id.group_share_profile_view_stub);
|
||||||
quickAttachmentDrawer = ViewUtil.findById(this, R.id.quick_attachment_drawer);
|
|
||||||
quickAttachmentToggle = ViewUtil.findById(this, R.id.quick_attachment_toggle);
|
quickAttachmentToggle = ViewUtil.findById(this, R.id.quick_attachment_toggle);
|
||||||
inlineAttachmentToggle = ViewUtil.findById(this, R.id.inline_attachment_container);
|
inlineAttachmentToggle = ViewUtil.findById(this, R.id.inline_attachment_container);
|
||||||
inputPanel = ViewUtil.findById(this, R.id.bottom_panel);
|
inputPanel = ViewUtil.findById(this, R.id.bottom_panel);
|
||||||
@ -1573,12 +1566,11 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
|||||||
composeText.setOnClickListener(composeKeyPressedListener);
|
composeText.setOnClickListener(composeKeyPressedListener);
|
||||||
composeText.setOnFocusChangeListener(composeKeyPressedListener);
|
composeText.setOnFocusChangeListener(composeKeyPressedListener);
|
||||||
|
|
||||||
if (QuickAttachmentDrawer.isDeviceSupported(this)) {
|
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA) && Camera.getNumberOfCameras() > 0) {
|
||||||
quickAttachmentDrawer.setListener(this);
|
quickCameraToggle.setVisibility(View.VISIBLE);
|
||||||
quickCameraToggle.setOnClickListener(new QuickCameraToggleListener());
|
quickCameraToggle.setOnClickListener(new QuickCameraToggleListener());
|
||||||
} else {
|
} else {
|
||||||
quickCameraToggle.setVisibility(View.GONE);
|
quickCameraToggle.setVisibility(View.GONE);
|
||||||
quickCameraToggle.setEnabled(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
searchNav.setEventListener(this);
|
searchNav.setEventListener(this);
|
||||||
@ -2224,43 +2216,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
|||||||
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAttachmentDrawerStateChanged(DrawerState drawerState) {
|
|
||||||
ActionBar supportActionBar = getSupportActionBar();
|
|
||||||
if (supportActionBar == null) throw new AssertionError();
|
|
||||||
|
|
||||||
if (drawerState == DrawerState.FULL_EXPANDED) {
|
|
||||||
supportActionBar.hide();
|
|
||||||
} else {
|
|
||||||
supportActionBar.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (drawerState == DrawerState.COLLAPSED) {
|
|
||||||
container.hideAttachedInput(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onImageCapture(@NonNull final byte[] imageBytes) {
|
|
||||||
setMedia(PersistentBlobProvider.getInstance(this)
|
|
||||||
.create(this, imageBytes, MediaUtil.IMAGE_JPEG, null),
|
|
||||||
MediaType.IMAGE);
|
|
||||||
quickAttachmentDrawer.hide(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCameraFail() {
|
|
||||||
Toast.makeText(this, R.string.ConversationActivity_quick_camera_unavailable, Toast.LENGTH_SHORT).show();
|
|
||||||
quickAttachmentDrawer.hide(false);
|
|
||||||
quickAttachmentToggle.disable();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCameraStart() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCameraStop() {}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRecorderPermissionRequired() {
|
public void onRecorderPermissionRequired() {
|
||||||
Permissions.with(this)
|
Permissions.with(this)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user