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.ViewGroup;
import android.view.Window; import android.view.Window;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText; import android.widget.EditText;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.Spinner; import android.widget.Spinner;
@ -133,12 +132,8 @@ public class SendTransactionFragment extends DialogFragment implements UIValidat
@BindView(R.id.viewCamera) @BindView(R.id.viewCamera)
View viewCamera; View viewCamera;
/* /* Flag to control when the camera is visible and when is hidden */
* Flag to control when the camera is visible and when is hide private boolean cameraVisible = false;
* */
private boolean cameraVisible = true;
Button btnScanQrCode;
private long cryptoNetAccountId; private long cryptoNetAccountId;
private CryptoNetAccount cryptoNetAccount; private CryptoNetAccount cryptoNetAccount;
@ -233,41 +228,9 @@ public class SendTransactionFragment extends DialogFragment implements UIValidat
loadUserImage(); loadUserImage();
/* /* Check for CAMERA permission */
* Check for CAMERA permission if (Build.VERSION.SDK_INT >= 23 && !checkCameraPermission())
* */ requestCameraPermission();
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();
}
}
return builder.setView(view).create(); 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)) { if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.CAMERA)) {
Toast.makeText(getActivity(), getActivity().getString(R.string.permission_denied_camera), Toast.LENGTH_LONG).show(); Toast.makeText(getActivity(), getActivity().getString(R.string.permission_denied_camera), Toast.LENGTH_LONG).show();
/* /* Disable the button of the camera visibility */
* Disable the button of the camera visibility btnCloseCamera.setVisibility(View.INVISIBLE);
* */
disableVisibilityCamera();
} else { } else {
requestPermissions(new String[] {android.Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION); 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 @Override
@ -374,15 +323,6 @@ public class SendTransactionFragment extends DialogFragment implements UIValidat
} }
}); });
/*
* Init the camera
* */
try {
beginScanQrCode();
}catch(Exception e){
e.printStackTrace();
}
} else { } else {
Log.e("value", "Permission Denied, You cannot use the camera."); Log.e("value", "Permission Denied, You cannot use the camera.");
@ -401,12 +341,6 @@ public class SendTransactionFragment extends DialogFragment implements UIValidat
super.onResume(); super.onResume();
mScannerView.setResultHandler(this); mScannerView.setResultHandler(this);
mScannerView.startCamera(); 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 // Force dialog fragment to use the full width of the screen
Window dialogWindow = getDialog().getWindow(); Window dialogWindow = getDialog().getWindow();
@ -475,67 +409,44 @@ public class SendTransactionFragment extends DialogFragment implements UIValidat
@OnClick(R.id.fabCloseCamera) @OnClick(R.id.fabCloseCamera)
public void onClicCloseCamera(){ public void onClickCloseCamera(){
mScannerView.stopCamera(); if(cameraVisible)
/*
* Hide the camera or show it
* */
if(cameraVisible){
hideCamera(); hideCamera();
} else
else{
showCamera(); showCamera();
}
} }
/* /**
* Show the camera and hide the black background * Shows the camera and hide the black background
* */ * */
private void showCamera(){ private void showCamera(){
/* Change visibilities of views */
/*
* Change visibilities of views
* */
viewCamera.setVisibility(View.GONE); viewCamera.setVisibility(View.GONE);
mScannerView.setVisibility(View.VISIBLE); mScannerView.setVisibility(View.VISIBLE);
/* /* Change icon */
* Change icon
* */
btnCloseCamera.setImageDrawable(getResources().getDrawable(R.drawable.ic_close)); btnCloseCamera.setImageDrawable(getResources().getDrawable(R.drawable.ic_close));
/* /* Reset variable */
* Reset variable
* */
cameraVisible = true; cameraVisible = true;
/* /* Star the camera again */
* Star the camera again
* */
beginScanQrCode(); beginScanQrCode();
} }
/* /**
* Hide the camera and show the black background * Hides the camera and show the black background
* */ * */
private void hideCamera(){ private void hideCamera(){
/* Change visibilities of views */
/*
* Change visibilities of views
* */
viewCamera.setVisibility(View.VISIBLE); viewCamera.setVisibility(View.VISIBLE);
mScannerView.setVisibility(View.INVISIBLE); mScannerView.setVisibility(View.INVISIBLE);
/* /* Change icon */
* Change icon
* */
btnCloseCamera.setImageDrawable(getResources().getDrawable(R.drawable.ok)); btnCloseCamera.setImageDrawable(getResources().getDrawable(R.drawable.ok));
/* /* Reset variable */
* Reset variable
* */
cameraVisible = false; 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_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<RelativeLayout <android.support.constraint.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingBottom="24dp"> 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 <View
android:id="@+id/topView" android:id="@+id/topView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:background="@drawable/receive_transaction_top_view"
android:layout_height="120dp" android:layout_height="120dp"
android:layout_marginEnd="0dp" android:layout_marginEnd="0dp"
android:layout_marginStart="0dp" android:layout_marginStart="0dp"
android:layout_marginTop="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 <TextView
android:id="@+id/txtTittle" android:id="@+id/txtTittle"
@ -30,91 +38,105 @@
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="20sp" android:textSize="20sp"
android:textStyle="bold" android:textStyle="bold"
android:layout_alignParentTop="true" /> app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<cy.agorise.crystalwallet.util.CircularImageView <cy.agorise.crystalwallet.util.CircularImageView
android:id="@+id/gravatar" android:id="@+id/gravatar"
android:layout_width="60dp" android:layout_width="60dp"
android:layout_height="60dp" android:layout_height="60dp"
android:layout_below="@+id/txtTittle"
android:layout_marginStart="32dp" android:layout_marginStart="32dp"
android:layout_marginTop="30dp" 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 <Spinner
android:id="@+id/spTo" android:id="@+id/spTo"
android:layout_width="200dp" android:layout_width="200dp"
android:layout_height="50dp" android:layout_height="50dp"
android:layout_marginTop="30dp" android:layout_marginTop="30dp"
android:layout_below="@+id/txtTittle" android:layout_marginEnd="20dp"
android:layout_alignParentRight="true" app:layout_constraintTop_toBottomOf="@+id/txtTittle"
android:layout_marginRight="20dp"/> app:layout_constraintEnd_toEndOf="parent" />
<TextView <TextView
android:id="@+id/tvFromError" android:id="@+id/tvFromError"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textColor="@color/red" android:textColor="@color/red"
android:layout_below="@+id/gravatar" app:layout_constraintTop_toBottomOf="@+id/spTo"
android:layout_marginTop="10dp"/> app:layout_constraintStart_toStartOf="@id/spTo"
app:layout_constraintEnd_toEndOf="@id/spTo" />
<EditText <EditText
android:id="@+id/etAmount" android:id="@+id/etAmount"
android:layout_width="150dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/tvFromError"
android:layout_marginStart="24dp"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:layout_marginStart="24dp"
android:layout_marginEnd="12dp"
android:hint="@string/amount" android:hint="@string/amount"
android:inputType="numberDecimal" 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 <TextView
android:id="@+id/tvAmountError" android:id="@+id/tvAmountError"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textColor="@color/red" 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 <Spinner
android:id="@+id/spAsset" android:id="@+id/spAsset"
android:layout_width="150dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
android:layout_marginTop="25dp" android:layout_marginBottom="4dp"
android:gravity="top"
android:inputType="textMultiLine" android:inputType="textMultiLine"
android:layout_below="@+id/tvFromError"
android:textColor="@color/white" android:textColor="@color/white"
android:layout_alignParentRight="true" app:layout_constraintStart_toEndOf="@id/centeredVerticalGuideline"
android:layout_marginRight="20dp"/> app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/viewSpinner"/>
<View <View
android:id="@+id/viewSpinner" android:id="@+id/viewSpinner"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="3dp" android:layout_height="1dp"
android:layout_marginTop="5dp" android:layout_marginBottom="8dp"
android:background="@color/gray" /> android:background="@color/gray"
app:layout_constraintBottom_toBottomOf="@id/etAmount"
app:layout_constraintStart_toStartOf="@id/spAsset"
app:layout_constraintEnd_toEndOf="@id/spAsset"/>
<TextView <TextView
android:id="@+id/tvAssetError" android:id="@+id/tvAssetError"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textColor="@color/red" 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:id="@+id/ivQrCode"
android:layout_width="match_parent" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="0dp"
android:layout_marginEnd="24dp" android:layout_marginLeft="24dp"
android:layout_marginStart="24dp"
android:layout_marginTop="5dp" android:layout_marginTop="5dp"
android:layout_marginRight="24dp"
android:adjustViewBounds="true" android:adjustViewBounds="true"
android:contentDescription="@string/qr_code" android:contentDescription="@string/qr_code"
android:src="@color/gray" android:src="@color/gray"
android:layout_below="@+id/tvAmountError" app:layout_constraintDimensionRatio="w,1:1"
android:layout_centerHorizontal="true"/> app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvAmountError" />
<TextView <TextView
android:id="@+id/tvShare" android:id="@+id/tvShare"
@ -126,7 +148,8 @@
android:text="@string/share_this_qr" android:text="@string/share_this_qr"
android:textSize="18sp" android:textSize="18sp"
android:textStyle="bold" android:textStyle="bold"
android:layout_below="@+id/ivQrCode" /> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ivQrCode" />
<TextView <TextView
android:id="@+id/tvCancel" android:id="@+id/tvCancel"
@ -137,9 +160,9 @@
android:text="@string/close" android:text="@string/close"
android:textSize="18sp" android:textSize="18sp"
android:textStyle="bold" android:textStyle="bold"
android:layout_below="@+id/ivQrCode" app:layout_constraintTop_toBottomOf="@+id/ivQrCode"
android:layout_alignParentRight="true"/> app:layout_constraintRight_toRightOf="parent" />
</RelativeLayout> </android.support.constraint.ConstraintLayout>
</ScrollView> </ScrollView>

View File

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

View File

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