Improve Send and Receive Transaction layouts to dynamically adjust to different screen sizes. Removed unnecessary SquaredImageView, the same effect can now be achieved with Android's ConstraintLayout.

feat_androidx_migration
Severiano Jaramillo 2018-11-21 11:45:57 -06:00
parent aec93ddb22
commit 96881f3292
5 changed files with 100 additions and 199 deletions

View File

@ -31,7 +31,6 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Spinner;
@ -133,12 +132,8 @@ public class SendTransactionFragment extends DialogFragment implements UIValidat
@BindView(R.id.viewCamera)
View viewCamera;
/*
* Flag to control when the camera is visible and when is hide
* */
private boolean cameraVisible = true;
Button btnScanQrCode;
/* Flag to control when the camera is visible and when is hidden */
private boolean cameraVisible = false;
private long cryptoNetAccountId;
private CryptoNetAccount cryptoNetAccount;
@ -233,41 +228,9 @@ public class SendTransactionFragment extends DialogFragment implements UIValidat
loadUserImage();
/*
* Check for CAMERA permission
* */
if (Build.VERSION.SDK_INT >= 23) {
if (checkPermission()) {
// Code for above or equal 23 API Oriented Device
// Your Permission granted already .Do next code
/*
* Init the camera
* */
try {
beginScanQrCode();
}catch(Exception e){
e.printStackTrace();
}
} else {
requestPermission(); // Code for permission
}
}
else {
// Code for Below 23 API Oriented Device
// Do next code
/*
* Init the camera
* */
try {
beginScanQrCode();
}catch(Exception e){
e.printStackTrace();
}
}
/* Check for CAMERA permission */
if (Build.VERSION.SDK_INT >= 23 && !checkCameraPermission())
requestCameraPermission();
return builder.setView(view).create();
}
@ -325,38 +288,24 @@ public class SendTransactionFragment extends DialogFragment implements UIValidat
}
}
private void requestPermission() {
private boolean checkCameraPermission() {
int result = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA);
return result == PackageManager.PERMISSION_GRANTED;
}
private void requestCameraPermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.CAMERA)) {
Toast.makeText(getActivity(), getActivity().getString(R.string.permission_denied_camera), Toast.LENGTH_LONG).show();
/*
* Disable the button of the camera visibility
* */
disableVisibilityCamera();
/* Disable the button of the camera visibility */
btnCloseCamera.setVisibility(View.INVISIBLE);
} else {
requestPermissions(new String[] {android.Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);
}
}
private void disableVisibilityCamera(){
/*
* Hide the button, the user can not modify the visibility
* */
btnCloseCamera.setVisibility(View.INVISIBLE);
}
private boolean checkPermission() {
int result = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA);
if (result == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
return false;
}
}
@Override
@ -374,15 +323,6 @@ public class SendTransactionFragment extends DialogFragment implements UIValidat
}
});
/*
* Init the camera
* */
try {
beginScanQrCode();
}catch(Exception e){
e.printStackTrace();
}
} else {
Log.e("value", "Permission Denied, You cannot use the camera.");
@ -401,12 +341,6 @@ public class SendTransactionFragment extends DialogFragment implements UIValidat
super.onResume();
mScannerView.setResultHandler(this);
mScannerView.startCamera();
/*builder.setNeutralButton("Scan QR Code", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
beginScanQrCode();
}
});*/
// Force dialog fragment to use the full width of the screen
Window dialogWindow = getDialog().getWindow();
@ -475,67 +409,44 @@ public class SendTransactionFragment extends DialogFragment implements UIValidat
@OnClick(R.id.fabCloseCamera)
public void onClicCloseCamera(){
mScannerView.stopCamera();
/*
* Hide the camera or show it
* */
if(cameraVisible){
public void onClickCloseCamera(){
if(cameraVisible)
hideCamera();
}
else{
else
showCamera();
}
}
/*
* Show the camera and hide the black background
/**
* Shows the camera and hide the black background
* */
private void showCamera(){
/*
* Change visibilities of views
* */
/* Change visibilities of views */
viewCamera.setVisibility(View.GONE);
mScannerView.setVisibility(View.VISIBLE);
/*
* Change icon
* */
/* Change icon */
btnCloseCamera.setImageDrawable(getResources().getDrawable(R.drawable.ic_close));
/*
* Reset variable
* */
/* Reset variable */
cameraVisible = true;
/*
* Star the camera again
* */
/* Star the camera again */
beginScanQrCode();
}
/*
* Hide the camera and show the black background
/**
* Hides the camera and show the black background
* */
private void hideCamera(){
/*
* Change visibilities of views
* */
/* Change visibilities of views */
viewCamera.setVisibility(View.VISIBLE);
mScannerView.setVisibility(View.INVISIBLE);
/*
* Change icon
* */
/* Change icon */
btnCloseCamera.setImageDrawable(getResources().getDrawable(R.drawable.ok));
/*
* Reset variable
* */
/* Reset variable */
cameraVisible = false;
}

View File

@ -1,33 +0,0 @@
package cy.agorise.crystalwallet.util;
import android.content.Context;
import android.support.annotation.Nullable;
import android.support.v7.widget.AppCompatImageView;
import android.util.AttributeSet;
/**
* Created by xd on 1/24/18.
* ImageView which adjusts its size to always create a square
*/
public class SquaredImageView extends AppCompatImageView {
public SquaredImageView(Context context) {
super(context);
}
public SquaredImageView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public SquaredImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int size = Math.min(getMeasuredWidth(), getMeasuredHeight());
setMeasuredDimension(size, size);
}
}

View File

@ -5,20 +5,28 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="24dp">
<android.support.constraint.Guideline
android:id="@+id/centeredVerticalGuideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5"/>
<View
android:id="@+id/topView"
android:layout_width="match_parent"
android:background="@drawable/receive_transaction_top_view"
android:layout_height="120dp"
android:layout_marginEnd="0dp"
android:layout_marginStart="0dp"
android:layout_marginTop="0dp"
android:layout_alignParentTop="true"/>
android:background="@drawable/receive_transaction_top_view"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/txtTittle"
@ -30,91 +38,105 @@
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold"
android:layout_alignParentTop="true" />
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<cy.agorise.crystalwallet.util.CircularImageView
android:id="@+id/gravatar"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_below="@+id/txtTittle"
android:layout_marginStart="32dp"
android:layout_marginTop="30dp"
android:src="@drawable/avatar_placeholder" />
android:src="@drawable/avatar_placeholder"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txtTittle" />
<Spinner
android:id="@+id/spTo"
android:layout_width="200dp"
android:layout_height="50dp"
android:layout_marginTop="30dp"
android:layout_below="@+id/txtTittle"
android:layout_alignParentRight="true"
android:layout_marginRight="20dp"/>
android:layout_marginEnd="20dp"
app:layout_constraintTop_toBottomOf="@+id/txtTittle"
app:layout_constraintEnd_toEndOf="parent" />
<TextView
android:id="@+id/tvFromError"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textColor="@color/red"
android:layout_below="@+id/gravatar"
android:layout_marginTop="10dp"/>
app:layout_constraintTop_toBottomOf="@+id/spTo"
app:layout_constraintStart_toStartOf="@id/spTo"
app:layout_constraintEnd_toEndOf="@id/spTo" />
<EditText
android:id="@+id/etAmount"
android:layout_width="150dp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_below="@+id/tvFromError"
android:layout_marginStart="24dp"
android:layout_marginTop="10dp"
android:layout_marginStart="24dp"
android:layout_marginEnd="12dp"
android:hint="@string/amount"
android:inputType="numberDecimal"
android:textSize="20sp" />
android:textSize="20sp"
app:layout_constraintTop_toBottomOf="@+id/tvFromError"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/centeredVerticalGuideline"/>
<TextView
android:id="@+id/tvAmountError"
android:layout_width="wrap_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textColor="@color/red"
android:layout_below="@+id/etAmount"/>
app:layout_constraintTop_toBottomOf="@+id/etAmount"
app:layout_constraintStart_toStartOf="@id/etAmount"
app:layout_constraintEnd_toEndOf="@id/etAmount"/>
<Spinner
android:id="@+id/spAsset"
android:layout_width="150dp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginEnd="24dp"
android:layout_marginTop="25dp"
android:gravity="top"
android:layout_marginBottom="4dp"
android:inputType="textMultiLine"
android:layout_below="@+id/tvFromError"
android:textColor="@color/white"
android:layout_alignParentRight="true"
android:layout_marginRight="20dp"/>
app:layout_constraintStart_toEndOf="@id/centeredVerticalGuideline"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/viewSpinner"/>
<View
android:id="@+id/viewSpinner"
android:layout_width="0dp"
android:layout_height="3dp"
android:layout_marginTop="5dp"
android:background="@color/gray" />
android:layout_height="1dp"
android:layout_marginBottom="8dp"
android:background="@color/gray"
app:layout_constraintBottom_toBottomOf="@id/etAmount"
app:layout_constraintStart_toStartOf="@id/spAsset"
app:layout_constraintEnd_toEndOf="@id/spAsset"/>
<TextView
android:id="@+id/tvAssetError"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/red"
android:layout_below="@+id/spAsset"/>
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/spAsset" />
<cy.agorise.crystalwallet.util.SquaredImageView
<ImageView
android:id="@+id/ivQrCode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:layout_marginStart="24dp"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginLeft="24dp"
android:layout_marginTop="5dp"
android:layout_marginRight="24dp"
android:adjustViewBounds="true"
android:contentDescription="@string/qr_code"
android:src="@color/gray"
android:layout_below="@+id/tvAmountError"
android:layout_centerHorizontal="true"/>
app:layout_constraintDimensionRatio="w,1:1"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvAmountError" />
<TextView
android:id="@+id/tvShare"
@ -126,7 +148,8 @@
android:text="@string/share_this_qr"
android:textSize="18sp"
android:textStyle="bold"
android:layout_below="@+id/ivQrCode" />
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ivQrCode" />
<TextView
android:id="@+id/tvCancel"
@ -137,9 +160,9 @@
android:text="@string/close"
android:textSize="18sp"
android:textStyle="bold"
android:layout_below="@+id/ivQrCode"
android:layout_alignParentRight="true"/>
app:layout_constraintTop_toBottomOf="@+id/ivQrCode"
app:layout_constraintRight_toRightOf="parent" />
</RelativeLayout>
</android.support.constraint.ConstraintLayout>
</ScrollView>

View File

@ -120,15 +120,17 @@
<EditText
android:id="@+id/etAmount"
android:layout_width="150dp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginStart="24dp"
android:layout_marginEnd="12dp"
android:inputType="numberDecimal"
android:textSize="20sp"
android:hint="@string/amount"
app:layout_constraintTop_toBottomOf="@+id/tvToError"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvToError" />
app:layout_constraintEnd_toStartOf="@id/centeredVerticalGuideline"/>
<TextView
android:id="@+id/tvAmountError"
@ -141,15 +143,15 @@
<Spinner
android:id="@+id/spAsset"
android:layout_width="150dp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="24dp"
android:layout_marginStart="12dp"
android:gravity="top"
android:inputType="textMultiLine"
android:textColor="@color/white"
app:layout_constraintTop_toTopOf="@+id/etAmount"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/etAmount" />
app:layout_constraintStart_toEndOf="@id/centeredVerticalGuideline"/>
<View
android:id="@+id/viewSpinner"
@ -212,7 +214,7 @@
app:fabSize="mini"
app:layout_constraintStart_toEndOf="@id/centeredVerticalGuideline"
app:layout_constraintTop_toBottomOf="@+id/tvScan"
app:srcCompat="@drawable/ic_close" />
app:srcCompat="@drawable/ok" />
<me.dm7.barcodescanner.zxing.ZXingScannerView
android:id="@+id/ivCamera"
@ -232,10 +234,7 @@
android:background="@color/black"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="24dp"
android:layout_marginStart="24dp"
android:layout_marginTop="8dp"
android:visibility="gone"
android:visibility="visible"
android:src="#666"
app:layout_constraintTop_toTopOf="@id/ivCamera"
app:layout_constraintStart_toStartOf="@id/ivCamera"

View File

@ -14,6 +14,7 @@
<style name="dialog_theme_full" parent="android:Theme" >
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">false</item>
<item name="android:windowAnimationStyle">@style/SendTransactionAnimation.Window</item>
</style>
<style name="ActivityDialog" parent="Theme.AppCompat.Light.NoActionBar">