Browse Source

Image cropping flow added

master
preyearegmi 6 years ago
parent
commit
72934398bc
  1. 14
      app/src/main/AndroidManifest.xml
  2. 25
      app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV2/view/KYCFormV2Activity.java
  3. 145
      app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV2/view/view3/KYCView3Fragment.java
  4. 10
      app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/Utils.java
  5. 2
      app/src/main/res/xml/file_paths.xml

14
app/src/main/AndroidManifest.xml

@ -40,6 +40,20 @@
android:roundIcon="@mipmap/ic_launcher"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.gmeremit.online.gmeremittance_native.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths">
</meta-data>
</provider>
<activity
android:name=".MainActivity"
android:theme="@style/AppTheme.NoActionBar" />

25
app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV2/view/KYCFormV2Activity.java

@ -1,5 +1,6 @@
package com.gmeremit.online.gmeremittance_native.kycV2.view;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
@ -21,6 +22,7 @@ import com.gmeremit.online.gmeremittance_native.kycV2.presenter.KYCV2PresenterIn
import com.gmeremit.online.gmeremittance_native.kycV2.view.view1.KYCView1Fragment;
import com.gmeremit.online.gmeremittance_native.kycV2.view.view2.KYCView2Fragment;
import com.gmeremit.online.gmeremittance_native.kycV2.view.view3.KYCView3Fragment;
import com.yalantis.ucrop.UCrop;
import java.util.ArrayList;
import java.util.List;
@ -31,7 +33,6 @@ import butterknife.ButterKnife;
public class KYCFormV2Activity extends BaseActivity implements KYCV2ActionListener, ViewPager.OnPageChangeListener, View.OnClickListener, KYCV2PresenterInterface.KYCV2ContractInterface {
@BindView(R.id.kycFormViewPager)
SwipeDisabledViewPager viewPager;
@ -112,7 +113,6 @@ public class KYCFormV2Activity extends BaseActivity implements KYCV2ActionListen
viewPager.setAdapter(kycViewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
}
@ -139,7 +139,6 @@ public class KYCFormV2Activity extends BaseActivity implements KYCV2ActionListen
}).setDuration(170).start();
}
@Override
@ -168,8 +167,7 @@ public class KYCFormV2Activity extends BaseActivity implements KYCV2ActionListen
@Override
public void onPageSelected(int position) {
hideKeyBoard();
switch(position)
{
switch (position) {
case 0:
changeTitleInHeader("Tell us a few things about yourself");
changeSelectedTabTextColor(position);
@ -190,8 +188,7 @@ public class KYCFormV2Activity extends BaseActivity implements KYCV2ActionListen
private void changeSelectedTabTextColor(int position) {
for(int i=0;i<tabLayout.getTabCount();i++)
{
for (int i = 0; i < tabLayout.getTabCount(); i++) {
TextView tv = (TextView) tabLayout.getTabAt(i).getCustomView();
if (i == position)
tv.setTextColor(ContextCompat.getColor(this, R.color.colorAccent));
@ -207,16 +204,24 @@ public class KYCFormV2Activity extends BaseActivity implements KYCV2ActionListen
@Override
public void onClick(View v) {
switch(v.getId())
{
switch (v.getId()) {
case R.id.iv_back:
onBackPressed();
break;
}
}
// @Override
// protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// super.onActivityResult(requestCode, resultCode, data);
// if (requestCode == UCrop.REQUEST_CROP)
// kycView3.onActivityResult(requestCode, resultCode, data);
// }
@Override
public KYCView1ContractInterface getView1Contract() { return kycView1; }
public KYCView1ContractInterface getView1Contract() {
return kycView1;
}
@Override
public KYCView2ContractInterface getView2Contract() {

145
app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV2/view/view3/KYCView3Fragment.java

@ -14,6 +14,8 @@ import android.provider.Settings;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.FileProvider;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -26,13 +28,19 @@ import com.gmeremit.online.gmeremittance_native.R;
import com.gmeremit.online.gmeremittance_native.base.BaseFragment;
import com.gmeremit.online.gmeremittance_native.kycV2.KYCV2ActionListener;
import com.gmeremit.online.gmeremittance_native.kycV2.presenter.KYCV2PresenterInterface;
import com.gmeremit.online.gmeremittance_native.kycV2.view.KYCFormV2Activity;
import com.gmeremit.online.gmeremittance_native.user_profile.view.ProfileActivity;
import com.gmeremit.online.gmeremittance_native.utils.other.DisplayUtils;
import com.gmeremit.online.gmeremittance_native.utils.other.Utility;
import com.yalantis.ucrop.UCrop;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import butterknife.BindView;
import butterknife.ButterKnife;
@ -40,6 +48,8 @@ import butterknife.OnClick;
import io.reactivex.Observable;
import io.reactivex.disposables.CompositeDisposable;
import static android.app.Activity.RESULT_OK;
public class KYCView3Fragment extends BaseFragment implements View.OnClickListener, KYCV2PresenterInterface.KYCV2ContractInterface.KYCView3ContractInterface {
public static final int FRONT_REGID = 1;
@ -73,7 +83,6 @@ public class KYCView3Fragment extends BaseFragment implements View.OnClickListen
Bitmap frontBitmap, backtBitmap, passbookBitmap, passportBitmap, selfieBitmap;
Uri imageUriFront;
@BindView(R.id.btn_submit)
@ -81,6 +90,8 @@ public class KYCView3Fragment extends BaseFragment implements View.OnClickListen
CompositeDisposable compositeDisposable = null;
private Uri photoURI=null;
private Uri croppedFileUri=null;
@Override
@ -128,11 +139,48 @@ public class KYCView3Fragment extends BaseFragment implements View.OnClickListen
}
public void takeAPicture(int requestCode, int i) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUriFront);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
intent.putExtra("android.intent.extras.CAMERA_FACING", i);
startActivityForResult(intent, requestCode);
// Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUriFront);
// intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
// intent.putExtra("android.intent.extras.CAMERA_FACING", i);
// startActivityForResult(intent, requestCode);
takeAPictureV2(requestCode);
}
private void takeAPictureV2(int requestCode) {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
// Error occurred while creating the File
}
// Continue only if the File was successfully created
if (photoFile != null) {
photoURI = FileProvider.getUriForFile(getActivity(),
"com.gmeremit.online.gmeremittance_native.fileprovider",
photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, requestCode);
}
}
}
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = getActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
// Save a file: path for use with ACTION_VIEW intents
return image;
}
private void galleryIntent(int requestCode) {
@ -269,26 +317,85 @@ public class KYCView3Fragment extends BaseFragment implements View.OnClickListen
break;
}
}
//
// @Override
// public void onActivityResult(int requestCode, int resultCode, Intent data) {
// super.onActivityResult(requestCode, resultCode, data);
// Bitmap bitmap;
// try {
// if (requestCode == SELFIE_REGID_CAMERA ||
// requestCode == FRONT_REGID_CAMERA ||
// requestCode == BACK_REGID_CAMERA ||
// requestCode == PASSBOOKREQ_CAMERA ||
// requestCode == PASSPORTREQ_CAMERA)
// bitmap = (Bitmap) data.getExtras().get("data");
// else
// bitmap = createBitmapFromGallerData(data);
// } catch (NullPointerException ex) {
// ex.printStackTrace();
// return;
// }
// ((KYCV2ActionListener) getActivity()).getPresenter().checkImageStatus(requestCode, resultCode, bitmap);
// }
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Bitmap bitmap;
try {
if (requestCode == SELFIE_REGID_CAMERA ||
requestCode == FRONT_REGID_CAMERA ||
requestCode == BACK_REGID_CAMERA ||
requestCode == PASSBOOKREQ_CAMERA ||
requestCode == PASSPORTREQ_CAMERA)
bitmap = (Bitmap) data.getExtras().get("data");
requestCode == PASSPORTREQ_CAMERA) {
//TODO uri is available from camera
requestToCropImage();
}
else if(requestCode== UCrop.REQUEST_CROP)
{
if(resultCode==RESULT_OK){
//TODO create a thumbnail maintaining current aspect ratio and save the uri for later sending to server
}
frontRegIdImage.setImageBitmap(createBitmapFromUri(croppedFileUri));
else
bitmap = createBitmapFromGallerData(data);
Log.d("IMAGE_FILE", UCrop.getError(data).getMessage());
}
else {
//TODO uri is available from gallery
photoURI = data.getData();
requestToCropImage();
}
} catch (NullPointerException ex) {
ex.printStackTrace();
return;
Log.d("IMAGE_FILE", ex.getMessage());
}
}
private void requestToCropImage()
{
try {
croppedFileUri=Uri.fromFile(createImageFile());
UCrop cropper= UCrop.of(photoURI, croppedFileUri)
.withAspectRatio(16, 9)
.withMaxResultSize(400, 400);
cropper= DisplayUtils.advancedConfig(getActivity(), cropper);
cropper.start(getActivity(),this);
}
((KYCV2ActionListener) getActivity()).getPresenter().checkImageStatus(requestCode, resultCode, bitmap);
catch (Exception e)
{
Log.d("IMAGE_FILE", e.getMessage());
}
}
private Bitmap createBitmapFromGallerData(Intent data) {
@ -320,6 +427,20 @@ public class KYCView3Fragment extends BaseFragment implements View.OnClickListen
}
return bm;
}
private Bitmap createBitmapFromUri(Uri data) {
Bitmap bm = null;
if (data != null) {
try {
bm = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), data);
} catch (IOException e) {
e.printStackTrace();
}
}
return bm;
}
@OnClick(R.id.selfieImage_layout)

10
app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/Utils.java

@ -2,7 +2,9 @@ package com.gmeremit.online.gmeremittance_native.utils;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
@ -551,4 +553,12 @@ public class Utils {
}
}
public static boolean isIntentAvailable(Context context, String action) {
final PackageManager packageManager = context.getPackageManager();
final Intent intent = new Intent(action);
List<ResolveInfo> list =
packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
}

2
app/src/main/res/xml/file_paths.xml

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="my_images" path="Android/kycRelatedDataModel/com.example.package.name/files/Pictures" />
<external-files-path name="my_images" path="/" />
</paths>
Loading…
Cancel
Save