瀏覽代碼

Google Camera

詹子聪 5 年之前
父節點
當前提交
871e79f290

+ 2 - 1
app/src/main/AndroidManifest.xml

@@ -51,7 +51,8 @@
 
         <activity
             android:name=".ui.camera.google.GoogleCameraActivity"
-            android:screenOrientation="portrait" />
+            android:screenOrientation="portrait"
+            android:theme="@style/MaterialTheme"/>
     </application>
 
 </manifest>

+ 24 - 27
app/src/main/java/com/miekir/ocr/OCRApplication.java

@@ -2,9 +2,6 @@ package com.miekir.ocr;
 
 import android.app.Application;
 
-import com.yc.toollib.crash.CrashHandler;
-import com.yc.toollib.crash.CrashListener;
-
 
 /**
  *
@@ -19,29 +16,29 @@ public class OCRApplication extends Application {
 
         //RxActivityResult.register(this);
 
-        CrashHandler.getInstance().init(this, new CrashListener() {
-            /**
-             * 重启app
-             */
-            @Override
-            public void againStartApp() {
-                //CrashToolUtils.reStartApp1(App.this,1000);
-                //CrashToolUtils.reStartApp2(App.this,1000, MainActivity.class);
-                //CrashToolUtils.reStartApp3(AppManager.getAppManager().currentActivity());
-            }
-
-            /**
-             * 自定义上传crash,支持开发者上传自己捕获的crash数据
-             * @param ex                        ex
-             */
-            @Override
-            public void recordException(Throwable ex) {
-                //崩溃文件存储路径:/storage/emulated/0/Android/data/你的包名/cache/crashLogs
-                //崩溃文件存储路径:/storage/emulated/0/Android/data/com.miekir.ocr/cache/crashLogs
-                //崩溃页面截图存储路径:/storage/emulated/0/Android/data/你的包名/cache/crashPics
-                //自定义上传crash,支持开发者上传自己捕获的crash数据
-                //StatService.recordException(getApplication(), ex);
-            }
-        });
+//        CrashHandler.getInstance().init(this, new CrashListener() {
+//            /**
+//             * 重启app
+//             */
+//            @Override
+//            public void againStartApp() {
+//                //CrashToolUtils.reStartApp1(App.this,1000);
+//                //CrashToolUtils.reStartApp2(App.this,1000, MainActivity.class);
+//                //CrashToolUtils.reStartApp3(AppManager.getAppManager().currentActivity());
+//            }
+//
+//            /**
+//             * 自定义上传crash,支持开发者上传自己捕获的crash数据
+//             * @param ex                        ex
+//             */
+//            @Override
+//            public void recordException(Throwable ex) {
+//                //崩溃文件存储路径:/storage/emulated/0/Android/data/你的包名/cache/crashLogs
+//                //崩溃文件存储路径:/storage/emulated/0/Android/data/com.miekir.ocr/cache/crashLogs
+//                //崩溃页面截图存储路径:/storage/emulated/0/Android/data/你的包名/cache/crashPics
+//                //自定义上传crash,支持开发者上传自己捕获的crash数据
+//                //StatService.recordException(getApplication(), ex);
+//            }
+//        });
     }
 }

+ 3 - 2
app/src/main/java/com/miekir/ocr/PermissionActivity.java

@@ -10,7 +10,7 @@ import androidx.annotation.Nullable;
 import androidx.appcompat.app.AlertDialog;
 import androidx.appcompat.app.AppCompatActivity;
 
-import com.miekir.ocr.ui.OperationActivity;
+import com.miekir.ocr.ui.camera.google.GoogleCameraActivity;
 import com.tbruyelle.rxpermissions2.RxPermissions;
 
 
@@ -35,7 +35,8 @@ public class PermissionActivity extends AppCompatActivity {
                         // 打开相机
                         //startActivity(new Intent(PermissionActivity.this, CropImageActivity.class));
 
-                        startActivity(new Intent(PermissionActivity.this, OperationActivity.class));
+                        //startActivity(new Intent(PermissionActivity.this, OperationActivity.class));
+                        startActivity(new Intent(PermissionActivity.this, GoogleCameraActivity.class));
                         finish();
                         //photoSelect();
                     } else {

+ 1 - 1
app/src/main/java/com/miekir/ocr/ui/camera/CameraActivity.java

@@ -150,7 +150,7 @@ public class CameraActivity extends BaseCameraActivity {
     @SuppressLint("CheckResult")
     @Override
     public void initViews(Bundle savedInstanceState) {
-        textureView = findViewById(R.id.textureView);
+        textureView = findViewById(R.id.texture);
         textureView.setSurfaceTextureListener(textureListener);
         iv_flash = findViewById(R.id.iv_flash);
         iv_flash.setOnClickListener(v -> {

+ 16 - 19
app/src/main/java/com/miekir/ocr/ui/camera/google/Camera2BasicFragment.java

@@ -54,7 +54,6 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.widget.Toast;
 
-import androidx.annotation.NonNull;
 import androidx.core.app.ActivityCompat;
 import androidx.core.content.ContextCompat;
 import androidx.fragment.app.DialogFragment;
@@ -191,7 +190,7 @@ public class Camera2BasicFragment extends Fragment
     private final CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() {
 
         @Override
-        public void onOpened(@NonNull CameraDevice cameraDevice) {
+        public void onOpened(CameraDevice cameraDevice) {
             // This method is called when the camera is opened.  We start camera preview here.
             mCameraOpenCloseLock.release();
             mCameraDevice = cameraDevice;
@@ -199,14 +198,14 @@ public class Camera2BasicFragment extends Fragment
         }
 
         @Override
-        public void onDisconnected(@NonNull CameraDevice cameraDevice) {
+        public void onDisconnected(CameraDevice cameraDevice) {
             mCameraOpenCloseLock.release();
             cameraDevice.close();
             mCameraDevice = null;
         }
 
         @Override
-        public void onError(@NonNull CameraDevice cameraDevice, int error) {
+        public void onError(CameraDevice cameraDevice, int error) {
             mCameraOpenCloseLock.release();
             cameraDevice.close();
             mCameraDevice = null;
@@ -340,16 +339,16 @@ public class Camera2BasicFragment extends Fragment
         }
 
         @Override
-        public void onCaptureProgressed(@NonNull CameraCaptureSession session,
-                                        @NonNull CaptureRequest request,
-                                        @NonNull CaptureResult partialResult) {
+        public void onCaptureProgressed(CameraCaptureSession session,
+                                        CaptureRequest request,
+                                        CaptureResult partialResult) {
             process(partialResult);
         }
 
         @Override
-        public void onCaptureCompleted(@NonNull CameraCaptureSession session,
-                                       @NonNull CaptureRequest request,
-                                       @NonNull TotalCaptureResult result) {
+        public void onCaptureCompleted(CameraCaptureSession session,
+                                       CaptureRequest request,
+                                       TotalCaptureResult result) {
             process(result);
         }
 
@@ -475,8 +474,8 @@ public class Camera2BasicFragment extends Fragment
     }
 
     @Override
-    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
-                                           @NonNull int[] grantResults) {
+    public void onRequestPermissionsResult(int requestCode, String[] permissions,
+                                           int[] grantResults) {
         if (requestCode == REQUEST_CAMERA_PERMISSION) {
             if (grantResults.length != 1 || grantResults[0] != PackageManager.PERMISSION_GRANTED) {
                 ErrorDialog.newInstance("This sample needs camera permission.")
@@ -699,7 +698,7 @@ public class Camera2BasicFragment extends Fragment
                     new CameraCaptureSession.StateCallback() {
 
                         @Override
-                        public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
+                        public void onConfigured(CameraCaptureSession cameraCaptureSession) {
                             // The camera is already closed
                             if (null == mCameraDevice) {
                                 return;
@@ -725,7 +724,7 @@ public class Camera2BasicFragment extends Fragment
 
                         @Override
                         public void onConfigureFailed(
-                                @NonNull CameraCaptureSession cameraCaptureSession) {
+                                CameraCaptureSession cameraCaptureSession) {
                             showToast("Failed");
                         }
                     }, null
@@ -838,9 +837,9 @@ public class Camera2BasicFragment extends Fragment
                     = new CameraCaptureSession.CaptureCallback() {
 
                 @Override
-                public void onCaptureCompleted(@NonNull CameraCaptureSession session,
-                                               @NonNull CaptureRequest request,
-                                               @NonNull TotalCaptureResult result) {
+                public void onCaptureCompleted(CameraCaptureSession session,
+                                               CaptureRequest request,
+                                               TotalCaptureResult result) {
                     showToast("Saved: " + mFile);
                     Log.d(TAG, mFile.toString());
                     unlockFocus();
@@ -982,7 +981,6 @@ public class Camera2BasicFragment extends Fragment
             return dialog;
         }
 
-        @NonNull
         @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             final Activity activity = getActivity();
@@ -1004,7 +1002,6 @@ public class Camera2BasicFragment extends Fragment
      */
     public static class ConfirmationDialog extends DialogFragment {
 
-        @NonNull
         @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             final Fragment parent = getParentFragment();

+ 1 - 1
app/src/main/java/com/miekir/ocr/ui/camera/google/GoogleCameraActivity.java

@@ -30,7 +30,7 @@ public class GoogleCameraActivity extends AppCompatActivity {
         setContentView(R.layout.activity_google_camera);
         if (null == savedInstanceState) {
             getSupportFragmentManager().beginTransaction()
-                    .replace(R.id.container, Camera2BasicFragment.newInstance())
+                    .replace(R.id.container, GoogleCameraFragment.newInstance())
                     .commit();
         }
     }

File diff suppressed because it is too large
+ 1034 - 0
app/src/main/java/com/miekir/ocr/ui/camera/google/GoogleCameraFragment.java


+ 76 - 0
app/src/main/java/com/miekir/ocr/widget/GoogleAutoFitTextureView.java

@@ -0,0 +1,76 @@
+/*
+ * Copyright 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.miekir.ocr.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.TextureView;
+
+/**
+ * A {@link TextureView} that can be adjusted to a specified aspect ratio.
+ */
+public class GoogleAutoFitTextureView extends TextureView {
+
+    private int mRatioWidth = 0;
+    private int mRatioHeight = 0;
+
+    public GoogleAutoFitTextureView(Context context) {
+        this(context, null);
+    }
+
+    public GoogleAutoFitTextureView(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public GoogleAutoFitTextureView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    /**
+     * Sets the aspect ratio for this view. The size of the view will be measured based on the ratio
+     * calculated from the parameters. Note that the actual sizes of parameters don't matter, that
+     * is, calling setAspectRatio(2, 3) and setAspectRatio(4, 6) make the same result.
+     *
+     * @param width  Relative horizontal size
+     * @param height Relative vertical size
+     */
+    public void setAspectRatio(int width, int height) {
+        if (width < 0 || height < 0) {
+            throw new IllegalArgumentException("Size cannot be negative.");
+        }
+        mRatioWidth = width;
+        mRatioHeight = height;
+        requestLayout();
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        int width = MeasureSpec.getSize(widthMeasureSpec);
+        int height = MeasureSpec.getSize(heightMeasureSpec);
+        if (0 == mRatioWidth || 0 == mRatioHeight) {
+            setMeasuredDimension(width, height);
+        } else {
+            if (width < height * mRatioWidth / mRatioHeight) {
+                setMeasuredDimension(width, width * mRatioHeight / mRatioWidth);
+            } else {
+                setMeasuredDimension(height * mRatioWidth / mRatioHeight, height);
+            }
+        }
+    }
+
+}

+ 1 - 1
app/src/main/res/layout/activity_camera.xml

@@ -48,7 +48,7 @@
         android:layout_height="match_parent">
 
         <com.miekir.ocr.widget.AutoFitTextureView
-            android:id="@+id/textureView"
+            android:id="@+id/texture"
             android:layout_width="match_parent"
             android:layout_height="match_parent" />
 

+ 1 - 1
app/src/main/res/layout/activity_google_camera.xml

@@ -19,4 +19,4 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:background="#000"
-    tools:context="com.example.android.camera2basic.CameraActivity" />
+    tools:context=".ui.camera.google.GoogleCameraActivity"/>

+ 1 - 1
app/src/main/res/layout/fragment_camera2_basic.xml

@@ -17,7 +17,7 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <com.example.android.camera2basic.AutoFitTextureView
+    <com.miekir.ocr.widget.AutoFitTextureView
         android:id="@+id/texture"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"

+ 3 - 0
app/src/main/res/values/styles.xml

@@ -12,4 +12,7 @@
         <item name="android:windowNoTitle">true</item>
     </style>
 
+    <style name="MaterialTheme" parent="Theme.AppCompat.Light.NoActionBar">
+        <item name="android:windowFullscreen">true</item>
+    </style>
 </resources>