ParkSangGwon / TedBottomPicker

TedBottomPicker is simple image picker using bottom sheet
1.11k stars 186 forks source link

SAMSUNG DEVICE CAPTURE FROM CAMERA ISSUE #22

Open kushanshah11 opened 7 years ago

kushanshah11 commented 7 years ago

Hi @ParkSangGwon ,

Can you please Check Error :::

Here Is crash Report :::

                                                         Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=65537, result=-1, data=null} to activity {com.iotconnect/com.iotconnect.activity.DrawerActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getPath()' on a null object reference
                                                            at android.app.ActivityThread.deliverResults(ActivityThread.java:4067)
                                                            at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3389)
                                                            at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3434) 
                                                            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2772) 
                                                            at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4471) 
                                                            at android.app.ActivityThread.access$1000(ActivityThread.java:177) 
                                                            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1455) 
                                                            at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                            at android.os.Looper.loop(Looper.java:145) 
                                                            at android.app.ActivityThread.main(ActivityThread.java:5951) 
                                                            at java.lang.reflect.Method.invoke(Native Method) 
                                                            at java.lang.reflect.Method.invoke(Method.java:372) 
                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388) 
                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183) 
                                                         Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getPath()' on a null object reference
                                                            at gun0912.tedbottompicker.TedBottomPicker.onActivityResultCamera(TedBottomPicker.java:467)
                                                            at gun0912.tedbottompicker.TedBottomPicker.onActivityResult(TedBottomPicker.java:453)
                                                            at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:164)
                                                            at android.app.Activity.dispatchActivityResult(Activity.java:6549)
                                                            at android.app.ActivityThread.deliverResults(ActivityThread.java:4063)
                                                            at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3389) 
                                                            at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3434) 
                                                            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2772) 
                                                            at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4471) 
                                                            at android.app.ActivityThread.access$1000(ActivityThread.java:177) 
                                                            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1455) 
                                                            at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                            at android.os.Looper.loop(Looper.java:145) 
                                                            at android.app.ActivityThread.main(ActivityThread.java:5951) 
                                                            at java.lang.reflect.Method.invoke(Native Method) 
                                                            at java.lang.reflect.Method.invoke(Method.java:372) 
                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388) 
                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183) 

Here is my Code ::

 bottomPicker = new TedBottomPicker.Builder(mActivity)
                                .setPeekHeight(getResources().getDisplayMetrics().heightPixels / 2)
                                .setCameraTile(R.drawable.icon_camera)
                                .setTitle("Choose Image")
                                .setPreviewMaxCount(99999)
                                .showGalleryTile(false)
                                .setOnImageSelectedListener(new TedBottomPicker.OnImageSelectedListener() {

                                    @Override public void onImageSelected(Uri uri) {

                                        imageUri = uri;
                                            Glide.with(mActivity)
                                                .load(uri)
                                                .placeholder(R.drawable.menu_profile_placeholder)
                                                .bitmapTransform(new CropCircleTransformation(mActivity))
                                                .into(ivUserProfile);
                    }
                }).create();

            bottomPicker.show(getFragmentManager());

Here is the Gradle ::: compile 'gun0912.ted:tedbottompicker:1.0.6'

I m Only getting Crash While taking Image from Camera Device is SAMSUNG manufacture(other Device Works Perfectly).

can you please look into this issue and Resolve as soon as Possible.

Thanks.

kushanshah11 commented 7 years ago

Hey @ParkSangGwon Have you looked into this issue?

please reply as soon as possible.

Thanks.

ParkSangGwon commented 7 years ago

@kushanshah11 Do you still have problem?

kushanshah11 commented 7 years ago

yes @ParkSangGwon i still face same issue .

Most of camera issue in SAMSUNG Manufacture and mostly in Samsung Galaxy S4.

can you please check and resolve this issue asap?

Thank you.

ParkSangGwon commented 7 years ago

@kushanshah11 Please use recent version (1.0.9) and test. And then tell me result same issue or not

kushanshah11 commented 7 years ago

Okay @ParkSangGwon Thanks for quick reply,

i will check and update status of same.

Thank you.

kushanshah11 commented 7 years ago

HI @ParkSangGwon ,

Issue still Continue Here I attach what your code Generate Error Log and What MyApp Generate Error Log.

Your Code ERROR Log :::

02-22 12:44:08.031 9333-9333/gun0912.tedbottompickerdemo E/AndroidRuntime: FATAL EXCEPTION: main Process: gun0912.tedbottompickerdemo, PID: 9333 java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity at com.bumptech.glide.manager.RequestManagerRetriever.assertNotDestroyed(RequestManagerRetriever.java:134) at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:102) at com.bumptech.glide.Glide.with(Glide.java:644) at gun0912.tedbottompickerdemo.MainActivity$1$1$1.onImageSelected(MainActivity.java:69) at gun0912.tedbottompicker.TedBottomPicker.complete(TedBottomPicker.java:279) at gun0912.tedbottompicker.TedBottomPicker.access$300(TedBottomPicker.java:55) at gun0912.tedbottompicker.TedBottomPicker$5$1.run(TedBottomPicker.java:510) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5951) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)

MyAPP Error Code :::::

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.iotconnect, PID: 7935 java.lang.IllegalArgumentException: You cannot start a load on a fragment before it is attached at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:110) at com.bumptech.glide.Glide.with(Glide.java:678) at com.iotconnect.fragment.ProfileFragment.onSuccess(ProfileFragment.java:339) at com.iotconnect.retrofit.AppWs$4.onResponse(AppWs.java:125) at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5951) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)

Thanks in Advance.

ParkSangGwon commented 7 years ago

@kushanshah11 Do you use landscape orientation? That is not library's error. I updated repository ( using android:screenOrientation="portrait") pull repository and test again

kushanshah11 commented 7 years ago

@ParkSangGwon ,

Here is crash report after pull :::

02-22 12:59:18.621 15106-15106/gun0912.tedbottompickerdemo E/AndroidRuntime: FATAL EXCEPTION: main Process: gun0912.tedbottompickerdemo, PID: 15106 java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity at com.bumptech.glide.manager.RequestManagerRetriever.assertNotDestroyed(RequestManagerRetriever.java:134) at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:102) at com.bumptech.glide.Glide.with(Glide.java:644) at gun0912.tedbottompickerdemo.MainActivity$1$1$1.onImageSelected(MainActivity.java:69) at gun0912.tedbottompicker.TedBottomPicker.complete(TedBottomPicker.java:279) at gun0912.tedbottompicker.TedBottomPicker.access$300(TedBottomPicker.java:55) at gun0912.tedbottompicker.TedBottomPicker$5$1.run(TedBottomPicker.java:510) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5951) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)

I m also using portrait Mode in my App but its camera behavior of samsung default anyways you can check above Error Log of your app after pull.

Thanks

ParkSangGwon commented 7 years ago

@kushanshah11 Okay. I changed glide loading method. Pull repository and test again. Thanks.

kushanshah11 commented 7 years ago

@ParkSangGwon , No Luck , Crash Gone but image not loading in ImageView.

please check from your side if i m wrong.

Thanks.

vinaywadhwa commented 7 years ago

Just FYI, I am facing the same issue.

ParkSangGwon commented 7 years ago

@kushanshah11 @vinaywadhwa Please upload your sample project file. I will test. I can not find error in my project

kushanshah11 commented 7 years ago

@ParkSangGwon i will send sample file in couple of days.

Thanks.

kushanshah11 commented 7 years ago

HI @ParkSangGwon ,

package gun0912.tedbottompickerdemo;

import android.Manifest; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.Toast;

import com.bumptech.glide.Glide; import com.gun0912.tedpermission.PermissionListener; import com.gun0912.tedpermission.TedPermission;

import java.util.ArrayList;

import gun0912.tedbottompicker.TedBottomPicker;

public class MainActivity extends AppCompatActivity {

ImageView iv_image;
private ViewGroup mSelectedImagesContainer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    iv_image = (ImageView) findViewById(R.id.iv_image);
    mSelectedImagesContainer = (ViewGroup) findViewById(R.id.selected_photos_container);

    setSingleShowButton();
    setMultiShowButton();

}

private void setSingleShowButton() {

    Button btn_single_show = (Button) findViewById(R.id.btn_single_show);
    btn_single_show.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            PermissionListener permissionlistener = new PermissionListener() {
                @Override
                public void onPermissionGranted() {

                    TedBottomPicker bottomSheetDialogFragment = new TedBottomPicker.Builder(MainActivity.this)
                            .setOnImageSelectedListener(new TedBottomPicker.OnImageSelectedListener() {
                                @Override
                                public void onImageSelected(Uri uri) {
                                    Log.d("ted","uri: "+uri);
                                    Log.d("ted","uri.getPath(): "+uri.getPath());

                                    iv_image.setVisibility(View.VISIBLE);
                                    mSelectedImagesContainer.setVisibility(View.GONE);
                                    Glide.with(MainActivity.this)
                                            //.load(uri.toString())
                                            .load(uri)
                                            .into(iv_image);

                                }
                            })
                            //.setPeekHeight(getResources().getDisplayMetrics().heightPixels/2)
                            .setPeekHeight(1200)
                            .create();

                    bottomSheetDialogFragment.show(getSupportFragmentManager());

                }

                @Override
                public void onPermissionDenied(ArrayList<String> deniedPermissions) {
                    Toast.makeText(MainActivity.this, "Permission Denied\n" + deniedPermissions.toString(), Toast.LENGTH_SHORT).show();
                }

            };

            new TedPermission(MainActivity.this)
                    .setPermissionListener(permissionlistener)
                    .setDeniedMessage("If you reject permission,you can not use this service\n\nPlease turn on permissions at [Setting] > [Permission]")
                    .setPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    .check();

        }
    });
}

private void setMultiShowButton() {

Button btn_multi_show = (Button) findViewById(R.id.btn_multi_show);
    btn_multi_show.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            PermissionListener permissionlistener = new PermissionListener() {
                @Override
                public void onPermissionGranted() {

                    TedBottomPicker bottomSheetDialogFragment = new TedBottomPicker.Builder(MainActivity.this)
                           .setOnMultiImageSelectedListener(new TedBottomPicker.OnMultiImageSelectedListener() {
                               @Override
                               public void onImagesSelected(ArrayList<Uri> uriList) {
                                    showUriList(uriList);
                               }
                           })
                            //.setPeekHeight(getResources().getDisplayMetrics().heightPixels/2)
                            .setPeekHeight(1600)
                            .showTitle(false)
                            .setCompleteButtonText("Done")
                            .setEmptySelectionText("No Select")
                            .create();

                    bottomSheetDialogFragment.show(getSupportFragmentManager());

                }

                @Override
                public void onPermissionDenied(ArrayList<String> deniedPermissions) {
                    Toast.makeText(MainActivity.this, "Permission Denied\n" + deniedPermissions.toString(), Toast.LENGTH_SHORT).show();
                }

            };

            new TedPermission(MainActivity.this)
                    .setPermissionListener(permissionlistener)
                    .setDeniedMessage("If you reject permission,you can not use this service\n\nPlease turn on permissions at [Setting] > [Permission]")
                    .setPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    .check();

        }
    });

}

private void showUriList(ArrayList<Uri> uriList) {
    // Remove all views before
    // adding the new ones.
    mSelectedImagesContainer.removeAllViews();

    iv_image.setVisibility(View.GONE);
    mSelectedImagesContainer.setVisibility(View.VISIBLE);

    int wdpx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics());
    int htpx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics());

    for (Uri uri : uriList) {

        View imageHolder = LayoutInflater.from(this).inflate(R.layout.image_item, null);
        ImageView thumbnail = (ImageView) imageHolder.findViewById(R.id.media_image);

        Glide.with(this)
                .load(uri.toString())
                .fitCenter()
                .into(thumbnail);

        mSelectedImagesContainer.addView(imageHolder);

        thumbnail.setLayoutParams(new FrameLayout.LayoutParams(wdpx, htpx));

    }

}

}

compile 'gun0912.ted:tedbottompicker:1.0.12' compile 'gun0912.ted:tedpermission:1.0.0'

=====================================Error===========================

java.lang.RuntimeException: Unable to start activity ComponentInfo{gun0912.tedbottompickerdemo/gun0912.tedbottompickerdemo.MainActivity}: java.lang.NullPointerException: Attempt to read from field 'boolean gun0912.tedbottompicker.TedBottomPicker$Builder.showTitle' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2702) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4471) at android.app.ActivityThread.access$1000(ActivityThread.java:177) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1455) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5951) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183) Caused by: java.lang.NullPointerException: Attempt to read from field 'boolean gun0912.tedbottompicker.TedBottomPicker$Builder.showTitle' on a null object reference at gun0912.tedbottompicker.TedBottomPicker.setTitle(TedBottomPicker.java:483) at gun0912.tedbottompicker.TedBottomPicker.setupDialog(TedBottomPicker.java:168) at android.support.v4.app.DialogFragment.getLayoutInflater(DialogFragment.java:315) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1298) at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1523) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1585) at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:2832) at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:201) at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:603) at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:181) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1234) at android.app.Activity.performStart(Activity.java:6329) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767)  at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4471)  at android.app.ActivityThread.access$1000(ActivityThread.java:177)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1455)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:145)  at android.app.ActivityThread.main(ActivityThread.java:5951)  at java.lang.reflect.Method.invoke(Native Method)  at java.lang.reflect.Method.invoke(Method.java:372)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183) 

this one is your Main Activity code just run this in Samsung s4. after capturing image press Save image and BOOMMMM!!! App gets crash.....

Thanks.

ParkSangGwon commented 7 years ago

@kushanshah11 So curious...I had tested. But my sample app is fine. Hmm... only samsung s4 occur error? or do you have problem with other device?

kushanshah11 commented 7 years ago

hi @ParkSangGwon currently i have only issue with Samsung S4 but it may be possible in all samsung manufacture phone. currently checked in Nexus 4 , 5 ,motorola and working fine.

Thanks

sw-tt-darshanmistry commented 7 years ago

hi @ParkSangGwon

I have checked this issue, in Samsung camera after capture image screen is rotating. While screen rotate your builder object(public Builder builder;) become null. So application getting crash because of getting null builder reference.

Can you please look at this issue as soon as possible.

Thanks.

iammert commented 7 years ago

The issue is about recreating the activity after picture is taken. In some devices, camera intent needs a great amount of memory, which means system can destroy your activity. When you take a picture and and turn back to your activity, activity will be recreated with null builder. I couldn't find any solution about that issue btw.

DiegoCastellano commented 7 years ago

I had the same problem in Samsung S4 Android 5 and LG device Android 5. The problem was the Activity being recreating (because some camera's devices rotate screen). My solution, add this code line in Manifest in Activity where you call the library (or any activity where you call camera intent). android:configChanges="orientation|keyboardHidden|screenSize"

kushanshah11 commented 6 years ago

@ParkSangGwon have you looked into this issue? i have attach crash feedback of your play store Apk.

please review crash and resolve as soon as possible.

Thanks in advance.

screenshot_2017-11-15-14-04-05

MoaazElneshawy commented 6 years ago

@DiegoCastellano android:configChanges="orientation|keyboardHidden|screenSize" works very well Thank you