浏览代码

Add privacy policy of tradefiling
Add new barcode scanner module
Fix raimage crash issue
Modify raimage, replace barcode scanner with the new module

Ray Zhang 2 年之前
父节点
当前提交
0c18b30068
共有 41 个文件被更改,包括 1275 次插入231 次删除
  1. 4 4
      ApexDrivers/CommonEditorLib/build.gradle
  2. 1 0
      ApexDrivers/CommonEditorLib/src/main/AndroidManifest.xml
  3. 6 6
      ApexDrivers/FunctionTest/build.gradle
  4. 5 5
      ApexDrivers/RALocationLib/build.gradle
  5. 24 3
      ApexDrivers/RAUtilsLibrary/build.gradle
  6. 20 2
      ApexDrivers/RAUtilsLibrary/src/main/AndroidManifest.xml
  7. 17 18
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/application/RAApplication.java
  8. 126 0
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/barcodescanner/BeepManager.java
  9. 485 0
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/barcodescanner/CaptureActivityNew.java
  10. 150 0
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/barcodescanner/MaskViewNew.java
  11. 9 2
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/service/RATask3Upload.java
  12. 2 2
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/signature/SignatureActivity.java
  13. 23 10
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/upload/UploadListActivity.java
  14. 4 5
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/utils/ImageUtil.java
  15. 12 14
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/utils/Network.java
  16. 5 5
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/utils/RACrashHandler.java
  17. 11 11
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/utils/RAUtil.java
  18. 16 1
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/zxing/codescanner/InactivityTimer.java
  19. 46 0
      ApexDrivers/RAUtilsLibrary/src/main/res/layout/activity_capture_new.xml
  20. 1 1
      ApexDrivers/apexcrm/src/main/java/com/usai/apex/apexcrm/MainActivity.java
  21. 5 4
      ApexDrivers/apexmap/build.gradle
  22. 1 3
      ApexDrivers/apexmap/src/main/AndroidManifest.xml
  23. 22 18
      ApexDrivers/build.gradle
  24. 3 0
      ApexDrivers/gradle.properties
  25. 3 3
      ApexDrivers/gradle/wrapper/gradle-wrapper.properties
  26. 6 6
      ApexDrivers/raimage/build.gradle
  27. 3 2
      ApexDrivers/raimage/src/main/AndroidManifest.xml
  28. 14 4
      ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/MainActivity.java
  29. 8 2
      ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/ServerSettingActivity.java
  30. 1 3
      ApexDrivers/raimage/src/main/java/com/usai/service/RAImageBackgroundService3.java
  31. 5 5
      ApexDrivers/rapdflib/build.gradle
  32. 4 4
      ApexDrivers/ratradefiling/build.gradle
  33. 3 0
      ApexDrivers/ratradefiling/src/main/AndroidManifest.xml
  34. 93 0
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/PrivacyActivity.java
  35. 14 15
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/RootActivity.java
  36. 18 11
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/about/AboutFragment.java
  37. 14 47
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/dataprovider/OnlineDataProvider.java
  38. 25 15
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/home/HomeFragment.java
  39. 28 0
      ApexDrivers/ratradefiling/src/main/res/layout/activity_html.xml
  40. 28 0
      ApexDrivers/ratradefiling/src/main/res/raw/privacy.html
  41. 10 0
      ApexDrivers/ratradefiling/src/main/res/values/dimens.xml

+ 4 - 4
ApexDrivers/CommonEditorLib/build.gradle

@@ -3,11 +3,11 @@ plugins {
 }
 
 android {
-    compileSdk 33
+    compileSdk 34
 
     defaultConfig {
         minSdkVersion 28
-        targetSdkVersion 33
+        targetSdkVersion 34
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         consumerProguardFiles "consumer-rules.pro"
@@ -35,8 +35,8 @@ android {
 
 dependencies {
 
-    implementation 'androidx.appcompat:appcompat:1.5.1'
-    implementation 'com.google.android.material:material:1.7.0'
+    implementation 'androidx.appcompat:appcompat:1.6.1'
+    implementation 'com.google.android.material:material:1.8.0'
     implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
     implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
 //    testImplementation 'junit:junit:4.+'

+ 1 - 0
ApexDrivers/CommonEditorLib/src/main/AndroidManifest.xml

@@ -57,6 +57,7 @@
     </activity>
     <activity
         android:name=".SignatureActivity"
+        android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen"
         >
 
     </activity>

+ 6 - 6
ApexDrivers/FunctionTest/build.gradle

@@ -1,12 +1,12 @@
 apply plugin: 'com.android.application'
 
 android {
-    compileSdkVersion 33
+    compileSdk 34
 
     defaultConfig {
         applicationId "com.example.functiontest"
         minSdkVersion 28
-        targetSdkVersion 33
+        targetSdkVersion 34
         versionCode 1
         versionName "1.0"
 
@@ -35,10 +35,10 @@ android {
 
 dependencies {
     implementation fileTree(dir: "libs", include: ["*.jar"])
-    implementation 'androidx.appcompat:appcompat:1.5.1'
+    implementation 'androidx.appcompat:appcompat:1.6.1'
     implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
-    testImplementation 'junit:junit:4.13.2'
-    androidTestImplementation 'androidx.test.ext:junit:1.1.4'
-    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
+//    testImplementation 'junit:junit:4.13.2'
+//    androidTestImplementation 'androidx.test.ext:junit:1.1.4'
+//    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
     implementation project(path: ':RAUtilsLibrary')
 }

+ 5 - 5
ApexDrivers/RALocationLib/build.gradle

@@ -1,11 +1,11 @@
 apply plugin: 'com.android.library'
 
 android {
-    compileSdk 33
+    compileSdk 34
 
     defaultConfig {
         minSdkVersion 28
-        targetSdkVersion 33
+        targetSdkVersion 34
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         consumerProguardFiles "consumer-rules.pro"
@@ -35,10 +35,10 @@ android {
 
 dependencies {
     implementation fileTree(dir: "libs", include: ["*.jar"])
-    implementation 'androidx.appcompat:appcompat:1.5.1'
+    implementation 'androidx.appcompat:appcompat:1.6.1'
     testImplementation 'junit:junit:4.13.2'
-    androidTestImplementation 'androidx.test.ext:junit:1.1.4'
-    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
+    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
+    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
     api project(':RAUtilsLibrary')
     api 'com.google.android.gms:play-services-location:21.0.1'
 

+ 24 - 3
ApexDrivers/RAUtilsLibrary/build.gradle

@@ -1,12 +1,12 @@
 apply plugin: 'com.android.library'
 
 android {
-    compileSdkVersion 33
+    compileSdk 34
     defaultConfig {
         minSdk 28
 
 //        applicationId "com.usai.redant.rautils"
-        targetSdkVersion 33
+        targetSdkVersion 34
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
     }
     buildTypes {
@@ -55,7 +55,20 @@ android {
 }
 
 dependencies {
-    implementation 'androidx.appcompat:appcompat:1.5.1'
+
+
+    implementation 'com.google.android.material:material:1.8.0'
+
+
+    implementation 'com.google.mlkit:barcode-scanning:17.2.0'
+    implementation 'com.google.mlkit:camera:16.0.0-beta3'
+
+    implementation 'com.google.guava:guava:32.1.3-jre'
+
+    implementation "androidx.lifecycle:lifecycle-livedata:2.6.1"
+    implementation "androidx.lifecycle:lifecycle-viewmodel:2.6.1"
+
+    implementation 'androidx.appcompat:appcompat:1.6.1'
 //    testImplementation 'junit:junit:4.12'
 //    androidTestImplementation 'com.android.support.test:runner:1.0.2'
 //    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
@@ -65,6 +78,14 @@ dependencies {
     api files('libs/core-2.3.0.jar')
 //    api 'com.github.barteksc:android-pdf-viewer:3.2.0-beta.1'
     implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
+
+    // CameraX
+    implementation "androidx.camera:camera-camera2:1.3.0-alpha05"
+    implementation "androidx.camera:camera-lifecycle:1.3.0-alpha05"
+    implementation "androidx.camera:camera-view:1.3.0-alpha05"
+
+
+    implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))
 }
 
 

+ 20 - 2
ApexDrivers/RAUtilsLibrary/src/main/AndroidManifest.xml

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools">
+    xmlns:tools="http://schemas.android.com/tools"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
 
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
     <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
@@ -74,10 +75,27 @@
         <activity
             android:name=".infinitephoto.InfinitePhotoActivity"
             android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen" />
-        <activity android:name=".signature.SignatureActivity" />
+        <activity android:name=".signature.SignatureActivity"
+            android:theme="@style/Theme.AppCompat.DayNight"/>
         <activity
             android:name=".upload.TaskActivity"
           android:theme="@style/Theme.AppCompat.Light" />
+
+
+
+
+        <activity
+            android:name=".barcodescanner.CaptureActivityNew"
+            android:clearTaskOnLaunch="true"
+            android:label="Scan"
+            android:screenOrientation="sensorLandscape"
+            android:stateNotNeeded="true"
+            android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen"
+
+
+            android:windowSoftInputMode="stateAlwaysHidden" >
+
+        </activity>
                 </application>
 
             </manifest>

+ 17 - 18
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/application/RAApplication.java

@@ -1,6 +1,5 @@
 package com.usai.redant.rautils.application;
 
-import static android.app.Notification.VISIBILITY_PUBLIC;
 import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;
 
 import android.app.Activity;
@@ -284,7 +283,7 @@ public abstract class RAApplication extends RedantApplication {
 //        Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
         Uri soundUri = Settings.System.DEFAULT_NOTIFICATION_URI;
 
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
 
             /**
              * Oreo不用Priority了,用importance
@@ -315,22 +314,22 @@ public abstract class RAApplication extends RedantApplication {
                     .setSound(soundUri)
                     .setLights(0xff00bbff,500,200)
                     .build();
-            noti.vibrate = vibrates;
-        } else {
-
-            noti = new Notification.Builder(this)
-                    .setContentTitle(content.title)
-                    .setContentText(content.body)
-                    .setSmallIcon(content.smallIcon)
-                    .setLargeIcon(BitmapFactory.decodeResource(getResources(),content.largeIcon))
-                    .setContentIntent(contentIntent)
-                    .setVisibility(VISIBILITY_PUBLIC)
-                    .setSound(soundUri)
-                    .setLights(0xff00bbff,500,20)
-                    .build();
-            noti.vibrate = vibrates;
-
-        }
+//            noti.vibrate = vibrates;
+//        } else {
+//
+//            noti = new Notification.Builder(this)
+//                    .setContentTitle(content.title)
+//                    .setContentText(content.body)
+//                    .setSmallIcon(content.smallIcon)
+//                    .setLargeIcon(BitmapFactory.decodeResource(getResources(),content.largeIcon))
+//                    .setContentIntent(contentIntent)
+//                    .setVisibility(VISIBILITY_PUBLIC)
+//                    .setSound(soundUri)
+//                    .setLights(0xff00bbff,500,20)
+//                    .build();
+//            noti.vibrate = vibrates;
+//
+//        }
 
         /**
          * vibrate属性是一个长整型的数组,用于设置手机静止和振动的时长,以毫秒为单位。

+ 126 - 0
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/barcodescanner/BeepManager.java

@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2010 ZXing authors
+ *
+ * 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.usai.redant.rautils.barcodescanner;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.res.AssetFileDescriptor;
+import android.media.AudioManager;
+import android.media.MediaPlayer;
+import android.os.Vibrator;
+import android.util.Log;
+
+import com.usai.redant.rautils.R;
+
+import java.io.IOException;
+
+/**
+ * Manages beeps and vibrations for {@link CaptureActivityNew}.
+ */
+final class BeepManager implements MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener {
+
+  private static final String TAG = BeepManager.class.getSimpleName();
+
+  private static final float BEEP_VOLUME = 0.10f;
+  private static final long VIBRATE_DURATION = 200L;
+
+  private final Activity activity;
+  private MediaPlayer mediaPlayer;
+  public boolean playBeep;
+  public boolean vibrate;
+
+  BeepManager(Activity activity) {
+    this.activity = activity;
+    this.mediaPlayer = null;
+    updatePrefs();
+  }
+
+  synchronized void updatePrefs() {
+//    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
+    playBeep = shouldBeep( activity);
+    vibrate = true;//prefs.getBoolean(PreferencesActivity.KEY_VIBRATE, false);
+    if (playBeep && mediaPlayer == null) {
+      // The volume on STREAM_SYSTEM is not adjustable, and users found it too loud,
+      // so we now play on the music stream.
+      activity.setVolumeControlStream(AudioManager.STREAM_MUSIC);
+      mediaPlayer = buildMediaPlayer(activity);
+    }
+  }
+
+  synchronized void playBeepSoundAndVibrate() {
+	  Log.i(TAG,"playBeep=========>"+playBeep);
+	  Log.i(TAG, "ok");
+	  Log.i(TAG,"vibrate=========>"+vibrate);
+    if (playBeep && mediaPlayer != null) {
+      mediaPlayer.start();
+    }
+    if (vibrate) {
+      Vibrator vibrator = (Vibrator) activity.getSystemService(Context.VIBRATOR_SERVICE);
+      vibrator.vibrate(VIBRATE_DURATION);
+    }
+  }
+
+  private static boolean shouldBeep( Context activity) {
+    boolean shouldPlayBeep = true;//prefs.getBoolean(PreferencesActivity.KEY_PLAY_BEEP, true);
+    // See if sound settings overrides this
+    AudioManager audioService = (AudioManager) activity.getSystemService(Context.AUDIO_SERVICE);
+    if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) {
+      shouldPlayBeep = false;
+    }
+    return shouldPlayBeep;
+  }
+
+  private MediaPlayer buildMediaPlayer(Context activity) {
+    MediaPlayer mediaPlayer = new MediaPlayer();
+    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
+    mediaPlayer.setOnCompletionListener(this);
+    mediaPlayer.setOnErrorListener(this);
+
+    AssetFileDescriptor file = activity.getResources().openRawResourceFd(R.raw.beep);
+    try {
+      mediaPlayer.setDataSource(file.getFileDescriptor(), file.getStartOffset(), file.getLength());
+      file.close();
+      mediaPlayer.setVolume(BEEP_VOLUME, BEEP_VOLUME);
+      mediaPlayer.prepare();
+    } catch (IOException ioe) {
+      Log.w(TAG, ioe);
+      mediaPlayer = null;
+    }
+    return mediaPlayer;
+  }
+
+  @Override
+  public void onCompletion(MediaPlayer mp) {
+    // When the beep has finished playing, rewind to queue up another one.      
+    mp.seekTo(0);
+  }
+
+  @Override
+  public synchronized boolean onError(MediaPlayer mp, int what, int extra) {
+    if (what == MediaPlayer.MEDIA_ERROR_SERVER_DIED) {
+      // we are finished, so put up an appropriate error toast if required and finish
+      activity.finish();
+    } else {
+      // possibly media player error, so release and recreate
+      mp.release();
+      mediaPlayer = null;
+      updatePrefs();
+    }
+    return true;
+  }
+
+}

+ 485 - 0
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/barcodescanner/CaptureActivityNew.java

@@ -0,0 +1,485 @@
+package com.usai.redant.rautils.barcodescanner;
+
+
+import android.Manifest;
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.Rect;
+import android.media.Image;
+import android.os.Build;
+import android.os.Bundle;
+import android.util.Log;
+import android.util.Size;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.Button;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.camera.core.AspectRatio;
+import androidx.camera.core.CameraSelector;
+import androidx.camera.core.ImageAnalysis;
+import androidx.camera.core.ImageCapture;
+import androidx.camera.core.ImageProxy;
+import androidx.camera.core.Preview;
+import androidx.camera.lifecycle.ProcessCameraProvider;
+import androidx.camera.view.PreviewView;
+import androidx.core.content.ContextCompat;
+
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.OnFailureListener;
+import com.google.android.gms.tasks.OnSuccessListener;
+import com.google.android.gms.tasks.Task;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.mlkit.vision.barcode.BarcodeScanner;
+import com.google.mlkit.vision.barcode.BarcodeScannerOptions;
+import com.google.mlkit.vision.barcode.BarcodeScanning;
+import com.google.mlkit.vision.barcode.common.Barcode;
+import com.usai.redant.rautils.R;
+
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+public class CaptureActivityNew extends AppCompatActivity {
+
+//Button btn_photo;
+//    Button btn_video;
+
+    private BeepManager beepManager;
+    Button swith_button;
+
+    boolean bscan = false;
+    private ImageCapture imageCapture = null;
+
+    private MaskViewNew mv ;
+//    private VideoCapture<Recorder> videoCapture = null;
+//    private Recording recording = null;
+
+    private ExecutorService cameraExecutor;
+    BarcodeScanner barcodeScanner;
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+
+        Window window = getWindow();
+        window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+
+         barcodeScanner =
+                BarcodeScanning.getClient(
+                        new BarcodeScannerOptions.Builder()
+//                                .setBarcodeFormats(Barcode.FORMAT_PDF417)
+                                .build());
+
+        setContentView(R.layout.activity_capture_new);
+
+        swith_button = (Button) findViewById(R.id.button);
+        swith_button.setTag("false");
+        swith_button.setBackground(getDrawable(R.drawable.ra_redbg_round_corner_25));
+        swith_button.setOnClickListener(new View.OnClickListener()
+        {
+
+            @Override
+            public void onClick(View v)
+            {
+
+                // inactivityTimer.onPause();
+
+                if (Boolean.parseBoolean(v.getTag().toString()) == false)
+                {
+                    // inactivityTimer.onResume();
+                    v.setTag("true");
+                    v.setBackground(getDrawable(R.drawable.ra_greenbg_round_corner_25));
+                }
+                else
+                {
+
+                    // inactivityTimer.onPause();
+                    v.setTag("false");
+                    v.setBackground(getDrawable(R.drawable.ra_redbg_round_corner_25));
+                }
+
+            }
+        });
+
+        mv = findViewById(R.id.maskview);
+        // 请求相机权限
+//        if (allPermissionsGranted()) {
+            startCamera();
+//        } else {
+//            ActivityCompat.requestPermissions(this, Configuration.REQUIRED_PERMISSIONS,
+//                    Configuration.REQUEST_CODE_PERMISSIONS);
+//        }
+
+        // 设置拍照按钮监听
+
+//         btn_photo = findViewById(R.id.image_capture_button);
+//         btn_video = findViewById(R.id.video_capture_button);
+
+//        btn_photo.setOnClickListener(new View.OnClickListener()
+//        {
+//            @Override
+//            public void onClick(View v)
+//            {
+//                takePhoto();
+//            }
+//        });
+//        btn_video.setOnClickListener(new View.OnClickListener()
+//        {
+//            @Override
+//            public void onClick(View v)
+//            {
+//                captureVideo();
+//            }
+//        });
+
+
+        cameraExecutor = Executors.newSingleThreadExecutor();
+
+        beepManager = new BeepManager(this);
+    }
+
+    @Override
+    protected void onResume()
+    {
+        super.onResume();
+
+        beepManager.updatePrefs();
+    }
+
+
+    //    @SuppressLint("CheckResult")
+//    private void captureVideo() {
+//        // 确保videoCapture 已经被实例化,否则程序可能崩溃
+//        if (videoCapture != null) {
+//
+////            btn_video.setEnabled(false);
+//            Recording curRecording = recording;
+//            if (curRecording != null) {
+//                // 停止当前的 recording session(录制会话)
+//                curRecording.stop();
+//                recording = null;
+//                return;
+//            }
+//
+//            // 创建一个新的 recording session
+//            String name = new SimpleDateFormat(Configuration.FILENAME_FORMAT, Locale.SIMPLIFIED_CHINESE)
+//                    .format(System.currentTimeMillis());
+//            ContentValues contentValues = new ContentValues();
+//            contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, name);
+//            contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "video/mp4");
+//            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
+//                contentValues.put(MediaStore.Video.Media.RELATIVE_PATH, "Movies/CameraX-Video");
+//            }
+//
+//            MediaStoreOutputOptions mediaStoreOutputOptions = new MediaStoreOutputOptions
+//                    .Builder(getContentResolver(), MediaStore.Video.Media.EXTERNAL_CONTENT_URI)
+//                    .setContentValues(contentValues)
+//                    .build();
+//            // 申请音频权限
+//            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
+//                ActivityCompat.requestPermissions(this,
+//                        new String[]{Manifest.permission.RECORD_AUDIO},
+//                        Configuration.REQUEST_CODE_PERMISSIONS);
+//            }
+//            recording = videoCapture.getOutput().prepareRecording(this, mediaStoreOutputOptions)
+//                    .withAudioEnabled() // 开启音频录制
+//                    .start(ContextCompat.getMainExecutor(this), videoRecordEvent -> {
+//                        if (videoRecordEvent instanceof VideoRecordEvent.Start) {
+////                            btn_video.setEnabled(true);
+////                            btn_video.setText("stop");
+//                        } else if (videoRecordEvent instanceof VideoRecordEvent.Finalize) {
+//                            if (!((VideoRecordEvent.Finalize) videoRecordEvent).hasError()) {
+//                                String msg = "Video capture succeeded: " +
+//                                        ((VideoRecordEvent.Finalize) videoRecordEvent).getOutputResults()
+//                                                .getOutputUri();
+//                                Toast.makeText(getBaseContext(), msg, Toast.LENGTH_SHORT).show();
+//                                Log.d(Configuration.TAG, msg);
+//                            } else {
+//                                if (recording != null) {
+//                                    recording.close();
+//                                    recording = null;
+//                                    Log.e(Configuration.TAG, "Video capture end with error: " +
+//                                            ((VideoRecordEvent.Finalize) videoRecordEvent).getError());
+//                                }
+//                            }
+////                            btn_video.setEnabled(false);
+////                            btn_video.setText("start capture");
+//
+//                        }
+//                    });
+//        }
+//    }
+
+//    private void takePhoto() {
+//        // 确保imageCapture 已经被实例化, 否则程序将可能崩溃
+//        if (imageCapture != null) {
+//            // 创建带时间戳的输出文件以保存图片,带时间戳是为了保证文件名唯一
+//            String name = new SimpleDateFormat(Configuration.FILENAME_FORMAT,
+//                    Locale.SIMPLIFIED_CHINESE).format(System.currentTimeMillis());
+//            ContentValues contentValues = new ContentValues();
+//            contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, name);
+//            contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg");
+//            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
+//                contentValues.put(MediaStore.Images.Media.RELATIVE_PATH, "Pictures/CameraX-Image");
+//            }
+//
+//            // 创建 output option 对象,用以指定照片的输出方式。
+//            // 在这个对象中指定有关我们希望输出如何的方式。我们希望将输出保存在 MediaStore 中,以便其他应用可以显示它
+//            ImageCapture.OutputFileOptions outputFileOptions = new ImageCapture.OutputFileOptions
+//                    .Builder(getContentResolver(),
+//                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
+//                    contentValues)
+//                    .build();
+//
+//            // 设置拍照监听,用以在照片拍摄后执行takePicture(拍照)方法
+//            imageCapture.takePicture(outputFileOptions,
+//                    ContextCompat.getMainExecutor(this),
+//                    new ImageCapture.OnImageSavedCallback() {// 保存照片时的回调
+//                        @Override
+//                        public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) {
+//                            String msg = "照片捕获成功! " + outputFileResults.getSavedUri();
+//                            Toast.makeText(getBaseContext(), msg, Toast.LENGTH_SHORT).show();
+//                            Log.d(Configuration.TAG, msg);
+//                        }
+//
+//                        @Override
+//                        public void onError(@NonNull ImageCaptureException exception) {
+//                            Log.e(Configuration.TAG, "Photo capture failed: " + exception.getMessage());
+//                        }
+//                    });
+//        }
+//    }
+
+    private void startCamera() {
+        // 将Camera的生命周期和Activity绑定在一起(设定生命周期所有者),这样就不用手动控制相机的启动和关闭。
+        ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(this);
+
+        cameraProviderFuture.addListener(() -> {
+            try {
+                // 将你的相机和当前生命周期的所有者绑定所需的对象
+                ProcessCameraProvider processCameraProvider = cameraProviderFuture.get();
+
+                // 创建一个Preview 实例,并设置该实例的 surface 提供者(provider)。
+                Preview preview = new Preview.Builder()
+                        .setTargetResolution(new Size(1920,1080))
+
+                        .build();
+
+
+                PreviewView v = findViewById(R.id.viewFinder);
+                preview.setSurfaceProvider(v.getSurfaceProvider());
+
+
+//                ResolutionInfo rinfo=preview.getResolutionInfo();
+
+//                // 创建录像所需实例
+//                Recorder recorder = new Recorder.Builder()
+//                        .setQualitySelector(QualitySelector.from(Quality.HIGHEST))
+//                        .build();
+//                videoCapture = VideoCapture.withOutput(recorder);
+
+                // 选择后置摄像头作为默认摄像头
+                CameraSelector cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA;
+
+                // 创建拍照所需的实例
+                imageCapture = new ImageCapture.Builder().build();
+
+
+                // 设置预览帧分析
+                ImageAnalysis imageAnalysis = new ImageAnalysis.Builder()
+//                        .setTargetResolution(new Size(1920,1080))
+                        .setTargetAspectRatio(AspectRatio.RATIO_16_9)
+                        .build();
+                imageAnalysis.setAnalyzer(cameraExecutor, new MyAnalyzer());
+
+                // 重新绑定用例前先解绑
+                processCameraProvider.unbindAll();
+
+                // 绑定用例至相机
+                /*此步骤具有 Camera2 设备文档中指定的设备级别要求:
+                    预览 + 视频捕获 + 图像捕获:LIMITED设备及以上。
+                    预览 + 视频捕获 + 图像分析:LEVEL_3(最高)设备添加到 Android 7(N)。
+                    预览 + 视频捕获 + 图像分析 + 图像捕获:不支持。
+                */
+                processCameraProvider.bindToLifecycle(CaptureActivityNew.this, cameraSelector,
+                        preview,
+//                        imageCapture,
+                        imageAnalysis/*,
+                        videoCapture*/);
+
+            } catch (Exception e) {
+                Log.e(Configuration.TAG, "用例绑定失败!" + e);
+            }
+        }, ContextCompat.getMainExecutor(this));
+
+    }
+
+//    private boolean allPermissionsGranted() {
+//        for (String permission : Configuration.REQUIRED_PERMISSIONS) {
+//            if (ContextCompat.checkSelfPermission(this, permission)
+//                    != PackageManager.PERMISSION_GRANTED) {
+//                return false;
+//            }
+//        }
+//        return true;
+//    }
+
+//    @Override
+//    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+//        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+//        if (requestCode == Configuration.REQUEST_CODE_PERMISSIONS) {
+//            if (allPermissionsGranted()) {// 申请权限通过
+//                startCamera();
+//            } else {// 申请权限失败
+//                Toast.makeText(this, "用户拒绝授予权限!", Toast.LENGTH_LONG).show();
+//                finish();
+//            }
+//        } else if (requestCode == Configuration.REQUEST_AUDIO_CODE_PERMISSIONS) {
+//            if (ContextCompat.checkSelfPermission(this,
+//                    "Manifest.permission.RECORD_AUDIO") != PackageManager.PERMISSION_GRANTED) {
+//                Toast.makeText(this, "未授权录制音频权限!", Toast.LENGTH_LONG).show();
+//            }
+//        }
+//    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        cameraExecutor.shutdown();
+    }
+
+    static class Configuration {
+        public static final String TAG = "CameraxBasic";
+        public static final String FILENAME_FORMAT = "yyyy-MM-dd-HH-mm-ss-SSS";
+        public static final int REQUEST_CODE_PERMISSIONS = 10;
+        public static final int REQUEST_AUDIO_CODE_PERMISSIONS = 12;
+        public static final String[] REQUIRED_PERMISSIONS =
+                Build.VERSION.SDK_INT <= Build.VERSION_CODES.P ?
+                        new String[]{Manifest.permission.CAMERA,
+                                Manifest.permission.RECORD_AUDIO,
+                                Manifest.permission.WRITE_EXTERNAL_STORAGE} :
+                        new String[]{Manifest.permission.CAMERA,
+                                Manifest.permission.RECORD_AUDIO};
+    }
+
+    private class MyAnalyzer implements ImageAnalysis.Analyzer{
+
+        @SuppressLint("UnsafeOptInUsageError")
+        @Override
+        public void analyze(@NonNull ImageProxy image) {
+
+
+
+
+            String tag = swith_button.getTag().toString();
+            if (!Boolean.parseBoolean(tag))
+            {
+                image.close();
+                return;
+            }
+            Log.e("barcode","barcode: begin");
+//            Log.e(Configuration.TAG, "Image's stamp is " + Objects.requireNonNull(image.getImage()).getTimestamp());
+
+       double ratio = mv.getRatio();
+
+            Image img=image.getImage();
+
+            int width = (int) (img.getWidth() * ratio);
+            int height = (int) (img.getHeight() * ratio);
+
+            int left = (img.getWidth() - width) / 2;
+            int top = (img.getHeight() - height) / 2;
+            int right = width + left;
+            int bottom = height + top;
+
+            Rect frame = new Rect();
+            frame.left = left;
+            frame.top = top;
+            frame.right = right;
+            frame.bottom = bottom;
+
+
+
+            image.setCropRect(frame);
+
+
+
+            Bitmap bitmapImage = image.toBitmap();
+
+            Bitmap cbitmap = Bitmap.createBitmap(bitmapImage, left , top, width, height, null, false);
+
+
+//            Bitmap.createBitmap(bitmap, retX, retY, wh, wh, null, false);
+//            Image imgc = img.crop
+//            ImageInfo info = image.getImageInfo();
+
+//            img.setCropRect();
+
+//            InputImage i = InputImage.fromMediaImage(image.getImage(), image.getImageInfo().getRotationDegrees());
+
+
+//            Task<List<Barcode>> task = barcodeScanner.process(i);
+
+            Task<List<Barcode>> task =barcodeScanner.process(cbitmap,image.getImageInfo().getRotationDegrees());
+            task.addOnSuccessListener(new OnSuccessListener<List<Barcode>>()
+            {
+                @Override
+                public void onSuccess(List<Barcode> barcodes)
+                {
+
+                    if(barcodes.size()<1)
+                        return;
+//
+                    beepManager.playBeepSoundAndVibrate();
+                    swith_button.setTag("false");
+                    Log.e("barcodes","count:"+barcodes.size());
+//                    for (int i = 0; i < barcodes.size(); ++i)
+                    {
+                        Barcode barcode = barcodes.get(0);
+
+//                        image.close();
+                        Log.e("barcode","barcode:"+barcode.getDisplayValue());
+
+                        Intent result = new Intent();
+                        result.putExtra("pid", barcode.getDisplayValue());
+                        setResult(Activity.RESULT_OK, result);
+                        finish();
+
+
+
+                    }
+
+                }
+            });
+            task.addOnFailureListener(new OnFailureListener()
+            {
+                @Override
+                public void onFailure(@NonNull Exception e)
+                {
+
+//                    Log.e("barcode","barcode: failed");
+                }
+            });
+            task.addOnCompleteListener(new OnCompleteListener<List<Barcode>>()
+            {
+                @Override
+                public void onComplete(@NonNull Task<List<Barcode>> task)
+                {
+                    image.close();
+//                    Log.e("barcode","barcode: complete");
+
+                }
+            });
+
+//            task.addOnSuccessListener(...).addOnFailureListener(...);
+
+
+        }
+    }
+
+}

+ 150 - 0
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/barcodescanner/MaskViewNew.java

@@ -0,0 +1,150 @@
+package com.usai.redant.rautils.barcodescanner;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.view.View;
+
+import androidx.annotation.Nullable;
+
+public class MaskViewNew extends View
+{
+
+    /**
+     * 遮罩颜色
+     */
+    private int maskColor = Color.argb(100, 0, 0, 0);
+
+    /**
+     * 镂空矩形
+     */
+    private Rect frame = new Rect();
+
+    /**
+     * 镂空边框
+     */
+    private Paint border = new Paint(Paint.ANTI_ALIAS_FLAG);
+
+    /**
+     * 镂空区域
+     */
+    private Paint eraser = new Paint(Paint.ANTI_ALIAS_FLAG);
+    private Path path = new Path();
+
+    private  Rect rect = new Rect();
+
+    public MaskViewNew(Context context) {
+        super(context);
+        init();
+    }
+
+    public MaskViewNew(Context context, @Nullable AttributeSet attrs) {
+        super(context, attrs);
+        init();
+    }
+
+    public MaskViewNew(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init();
+    }
+
+    private void init() {
+        // 硬件加速不支持,图层混合。
+        setLayerType(View.LAYER_TYPE_SOFTWARE, null);
+        // 取景框颜色、线宽
+        border.setColor(Color.WHITE);
+        border.setStyle(Paint.Style.STROKE);
+        border.setStrokeWidth(5);
+
+        eraser.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
+    }
+
+    @Override
+    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+        super.onSizeChanged(w, h, oldw, oldh);
+
+        int width = (int) (w * ratio);
+        int height = (int) (h * ratio);
+
+        int left = (w - width) / 2;
+        int top = (h - height) / 2;
+        int right = width + left;
+        int bottom = height + top;
+
+        frame.left = left;
+        frame.top = top;
+        frame.right = right;
+        frame.bottom = bottom;
+
+    }
+
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        super.onDraw(canvas);
+
+        int left = frame.left;
+        int top = frame.top;
+        int right = frame.right;
+        int bottom = frame.bottom;
+
+//        fillRectRound(left, top, right, bottom, 30, 30);
+
+//        fillRectRound(left, top, right, bottom, 0, 0);
+
+        canvas.drawColor(maskColor);
+        canvas.drawRect(frame,border);
+        canvas.drawRect(frame,eraser);
+//        canvas.drawPath(path, border);
+//        canvas.drawPath(path, eraser);
+
+    }
+
+
+//    private void fillRect(float left, float top, float right, float bottom)
+//    {
+//        rect.
+//    }
+//    private void fillRectRound(float left, float top, float right, float bottom, float rx, float ry) {
+//        path.reset();
+//
+//        float width = right - left;
+//        float height = bottom - top;
+//
+//        float lineWidth = (width - (2 * rx));
+//        float lineHeight = (height - (2 * ry));
+//
+//        path.moveTo(left, top + ry);
+//        path.rQuadTo(0, -ry, rx, -ry);
+//        path.rLineTo(lineWidth, 0);
+//        path.rQuadTo(rx, 0, rx, ry);
+//        path.rLineTo(0, lineHeight);
+//        path.rQuadTo(0, ry, -rx, ry);
+//        path.rLineTo(-lineWidth, 0);
+//        path.rQuadTo(-rx, 0, -rx, -ry);
+//        path.rLineTo(0, -lineHeight);
+//
+//        path.close();
+//
+////        RectF roundRect = new RectF(left, top, right, bottom);
+////        path.addRoundRect(roundRect, rx, ry, Path.Direction.CW);
+//
+//    }
+
+    public Rect getFrameRect() {
+        return new Rect(frame);
+    }
+
+    private double ratio = 0.6f;
+
+    public double getRatio()
+    {
+        return ratio;
+    }
+}

+ 9 - 2
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/service/RATask3Upload.java

@@ -5,6 +5,7 @@ import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.net.ConnectivityManager;
+import android.os.Build;
 import android.os.Bundle;
 import android.util.Log;
 
@@ -161,8 +162,14 @@ public class RATask3Upload extends RATask3{
         msgFilter.addAction("REDANT.BROADCAST.ACTION_UPLOAD_ADD_TASK");
         msgFilter.addAction(RAUploadManager.UPLOAD_COUNT_CHANGED_NOTIFICATION);
         msgFilter.addAction(RAUploadManager.UPLOAD_FINISH_TASK_NOTIFICATION);
-
-        context.registerReceiver(uploadReceiver, msgFilter);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+        {
+            context.registerReceiver(uploadReceiver, msgFilter,context.RECEIVER_NOT_EXPORTED);
+        }
+        else
+        {
+            context.registerReceiver(uploadReceiver, msgFilter);
+        }
     }
 
     @Override

+ 2 - 2
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/signature/SignatureActivity.java

@@ -58,11 +58,11 @@ public class SignatureActivity extends AppCompatActivity {
 
         MenuItem saveItem = menu.getItem(1);
         Drawable saveItemIcon = saveItem.getIcon();
-        ImageUtil.renderingDrawable(saveItemIcon,mCtx,R.color.ra_white);
+        ImageUtil.renderingDrawable(saveItemIcon,mCtx,R.color.viewfinder_mask);
 
         MenuItem clearItem = menu.getItem(0);
         Drawable clearItemIcon = clearItem.getIcon();
-        ImageUtil.renderingDrawable(clearItemIcon,mCtx,R.color.ra_white);
+        ImageUtil.renderingDrawable(clearItemIcon,mCtx,R.color.viewfinder_mask);
 
         return true;
     }

+ 23 - 10
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/upload/UploadListActivity.java

@@ -1,5 +1,7 @@
 package com.usai.redant.rautils.upload;
 
+import static com.usai.redant.rautils.upload.RAUploadManager.UPLOAD_COUNT_CHANGED_NOTIFICATION;
+
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
@@ -7,14 +9,9 @@ import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.ServiceConnection;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.IBinder;
-import androidx.annotation.LayoutRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.appcompat.app.ActionBar;
-import androidx.appcompat.app.AlertDialog;
-import androidx.appcompat.app.AppCompatActivity;
 import android.util.Log;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -23,8 +20,14 @@ import android.view.ViewGroup;
 import android.widget.ArrayAdapter;
 import android.widget.ListView;
 
+import androidx.annotation.LayoutRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+
 import com.usai.redant.rautils.R;
-//import com.usai.redant.rautils.service.RAService;
 import com.usai.redant.rautils.application.RedantApplication;
 import com.usai.redant.rautils.service.RAService3;
 import com.usai.redant.rautils.service.RATask3Upload;
@@ -32,8 +35,6 @@ import com.usai.redant.rautils.service.RATask3Upload;
 import java.util.ArrayList;
 import java.util.Collections;
 
-import static com.usai.redant.rautils.upload.RAUploadManager.UPLOAD_COUNT_CHANGED_NOTIFICATION;
-
 public class UploadListActivity extends AppCompatActivity {
 
     ArrayList<Bundle> task_arr= new ArrayList<>();
@@ -83,7 +84,19 @@ public class UploadListActivity extends AppCompatActivity {
         IntentFilter intentFilter = new IntentFilter();
         intentFilter.addAction(UPLOAD_COUNT_CHANGED_NOTIFICATION);
 
-        registerReceiver(uploadReceiver,intentFilter);
+
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+        {
+
+            registerReceiver(uploadReceiver,intentFilter,RECEIVER_NOT_EXPORTED);
+
+        }
+        else
+        {
+            registerReceiver(uploadReceiver,intentFilter);
+        }
+
     }
 
 

+ 4 - 5
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/utils/ImageUtil.java

@@ -7,7 +7,6 @@ import android.graphics.BitmapFactory;
 import android.graphics.Matrix;
 import android.graphics.drawable.Drawable;
 import android.media.ExifInterface;
-import android.os.Build;
 import android.util.Log;
 
 import androidx.core.content.ContextCompat;
@@ -351,10 +350,10 @@ public class ImageUtil {
         //避免出现内存溢出的情况,进行相应的属性设置。
         options.inPreferredConfig = Bitmap.Config.RGB_565;
 
-        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M)
-        {
-            options.inDither = true;
-        }
+//        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M)
+//        {
+//            options.inDither = true;
+//        }
 
 
 //        //置入一个不设防的VmPolicy,否则7.0文件读取会失败

+ 12 - 14
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/utils/Network.java

@@ -6,8 +6,6 @@ import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.net.ConnectivityManager;
 import android.net.NetworkCapabilities;
-import android.net.NetworkInfo;
-import android.os.Build;
 import android.os.Bundle;
 import android.os.Environment;
 import android.util.Log;
@@ -916,32 +914,32 @@ public class Network {
     }
     public static Boolean isNetworkAvailable(Application application) {
         ConnectivityManager connectivityManager = (ConnectivityManager) application.getSystemService(Context.CONNECTIVITY_SERVICE);
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
 
             android.net.Network nw = connectivityManager.getActiveNetwork();
             if (nw == null) return false;
             NetworkCapabilities actNw = connectivityManager.getNetworkCapabilities(nw);
             return actNw != null && (actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || actNw.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || actNw.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) || actNw.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH));
-        } else {
-            NetworkInfo nwInfo = connectivityManager.getActiveNetworkInfo();
-            return nwInfo != null && nwInfo.isConnected();
-        }
+//        } else {
+//            NetworkInfo nwInfo = connectivityManager.getActiveNetworkInfo();
+//            return nwInfo != null && nwInfo.isConnected();
+//        }
     }
 
     public static Boolean isNetworkWifi(Application application) {
         ConnectivityManager connectivityManager = (ConnectivityManager) application.getSystemService(Context.CONNECTIVITY_SERVICE);
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
 
             android.net.Network nw = connectivityManager.getActiveNetwork();
             if (nw == null) return false;
             NetworkCapabilities actNw = connectivityManager.getNetworkCapabilities(nw);
             return actNw != null && (actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI));
-        } else {
-
-            NetworkInfo nwInfo = connectivityManager.getActiveNetworkInfo();
-
-            return nwInfo != null && (nwInfo.getType() == ConnectivityManager.TYPE_WIFI);
-        }
+//        } else {
+//
+//            NetworkInfo nwInfo = connectivityManager.getActiveNetworkInfo();
+//
+//            return nwInfo != null && (nwInfo.getType() == ConnectivityManager.TYPE_WIFI);
+//        }
     }
 
     public static boolean isNetConnected(NetworkCapabilities capabilities) {

+ 5 - 5
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/utils/RACrashHandler.java

@@ -121,7 +121,7 @@ public class RACrashHandler implements Thread.UncaughtExceptionHandler
         stringBuilder.append(packageInfo.versionName);
         stringBuilder.append("\n");
         stringBuilder.append("App_VersionCode : ");
-        stringBuilder.append(packageInfo.versionCode);
+        stringBuilder.append(packageInfo.getLongVersionCode());
         stringBuilder.append("\n");
 
         //Android版本号
@@ -144,11 +144,11 @@ public class RACrashHandler implements Thread.UncaughtExceptionHandler
 
         //CPU架构
         stringBuilder.append("CPU : ");
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             stringBuilder.append(Arrays.toString(Build.SUPPORTED_ABIS));
-        } else {
-            stringBuilder.append(Build.CPU_ABI);
-        }
+//        } else {
+//            stringBuilder.append(Build.CPU_ABI);
+//        }
         stringBuilder.append("\n");
 
         return stringBuilder.toString();

+ 11 - 11
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/utils/RAUtil.java

@@ -703,10 +703,10 @@ public class RAUtil {
         return (int) (dpValue * scale + 0.5f);
     }
 
-    public static int px2sp(Context context, float pxValue) {
-        float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
-        return (int) (pxValue / fontScale + 0.5f);
-    }
+//    public static int px2sp(Context context, float pxValue) {
+//        float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
+//        return (int) (pxValue / fontScale + 0.5f);
+//    }
 
     public static int sp2px(Context context, float spValue) {
         float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
@@ -816,14 +816,14 @@ public class RAUtil {
 
     public static String getSystemLanguageCode(Context context) {
         Locale curLocale = null;
-        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
-        {
+//        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
+//        {
             curLocale = context.getResources().getConfiguration().getLocales().get(0);
-        }
-        else
-        {
-            curLocale= context.getResources().getConfiguration().locale;
-        }
+//        }
+//        else
+//        {
+//            curLocale= context.getResources().getConfiguration().locale;
+//        }
 
         String languageCode = curLocale.getLanguage();
         return languageCode;

+ 16 - 1
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/zxing/codescanner/InactivityTimer.java

@@ -23,6 +23,7 @@ import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.AsyncTask;
 import android.os.BatteryManager;
+import android.os.Build;
 import android.util.Log;
 
 /**
@@ -66,7 +67,21 @@ final class InactivityTimer {
     if (registered) {
       Log.w(TAG, "PowerStatusReceiver was already registered?");
     } else {
-      activity.registerReceiver(powerStatusReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
+
+
+      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+      {
+
+
+
+        activity.registerReceiver(powerStatusReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED),activity.RECEIVER_NOT_EXPORTED);
+      }
+      else
+      {
+        activity.registerReceiver(powerStatusReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
+      }
+
+
       registered = true;
     }
     onActivity();

+ 46 - 0
ApexDrivers/RAUtilsLibrary/src/main/res/layout/activity_capture_new.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".barcodescanner.CaptureActivityNew">
+
+    <androidx.camera.view.PreviewView
+        android:id="@+id/viewFinder"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:scaleType="fitCenter">
+
+    </androidx.camera.view.PreviewView>
+    <com.usai.redant.rautils.barcodescanner.MaskViewNew
+        android:id="@+id/maskview"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
+
+    <Button
+        android:id="@+id/button"
+        android:layout_width="50dp"
+        android:layout_height="50dp"
+        android:layout_gravity="center_vertical|right"
+        android:layout_marginEnd="50dp"
+        android:background="@drawable/ra_redbg_round_corner_25"
+        app:layout_constraintBottom_toBottomOf="@+id/viewFinder"
+        app:layout_constraintEnd_toEndOf="@+id/viewFinder"
+        app:layout_constraintTop_toTopOf="@+id/viewFinder" />
+
+    <TextView
+        android:id="@+id/status_view"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="bottom|center_horizontal"
+
+        android:layout_marginBottom="20dp"
+        android:text="@string/msg_default_status"
+        android:textColor="#FFFFFF"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent" />
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 1 - 1
ApexDrivers/apexcrm/src/main/java/com/usai/apex/apexcrm/MainActivity.java

@@ -51,7 +51,7 @@ import com.usai.redant.rautils.utils.FileManager;
 import com.usai.redant.rautils.utils.ImageUtil;
 import com.usai.redant.rautils.utils.RAUtil;
 import com.usai.redant.rautils.utils.dbgUtil;
-import com.usai.redant.rautils.zxing.codescanner.CaptureActivity;
+//import com.usai.redant.rautils.zxing.codescanner.CaptureActivity;
 
 import org.json.JSONArray;
 import org.json.JSONException;

+ 5 - 4
ApexDrivers/apexmap/build.gradle

@@ -3,13 +3,13 @@ plugins {
 }
 android {
 //    namespace 'redant.usai.com.apexmap'
-    compileSdkVersion 33
+    compileSdk 34
 
 
 
     defaultConfig {
         minSdk 28
-        targetSdkVersion 33
+        targetSdkVersion 34
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
 
@@ -31,6 +31,7 @@ android {
     buildFeatures {
         viewBinding true
     }
+    namespace 'redant.usai.com.apexmap'
     gradle.projectsEvaluated {
         tasks.withType(JavaCompile) {
 //            options.compilerArgs << "-Xlint:deprecation"
@@ -43,9 +44,9 @@ android {
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
 
-    implementation 'androidx.appcompat:appcompat:1.5.1'
+    implementation 'androidx.appcompat:appcompat:1.6.1'
 //    testImplementation 'junit:junit:4.12'
 //    androidTestImplementation 'com.android.support.test:runner:1.0.2'
 //    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
-    api 'org.osmdroid:osmdroid-android:6.1.14'
+    api 'org.osmdroid:osmdroid-android:6.1.17'
 }

+ 1 - 3
ApexDrivers/apexmap/src/main/AndroidManifest.xml

@@ -1,3 +1 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="redant.usai.com.apexmap"
-    />
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" />

+ 22 - 18
ApexDrivers/build.gradle

@@ -1,20 +1,24 @@
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
+buildscript {
+    ext {
+        agp_version = '8.1.2'
+    }
+}// Top-level build file where you can add configuration options common to all sub-projects/modules.
 
-//buildscript {
-//
-//    repositories {
-//        gradlePluginPortal()
-//        google()
-//        mavenCentral()
-//    }
-//    dependencies {
-//        classpath 'com.android.tools.build:gradle:4.2.2'
-//
-//
-//        // NOTE: Do not place your application dependencies here; they belong
-//        // in the individual module build.gradle files
-//    }
-//}
+buildscript {
+
+    repositories {
+        gradlePluginPortal()
+        google()
+        mavenCentral()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:8.1.2'
+
+
+        // NOTE: Do not place your application dependencies here; they belong
+        // in the individual module build.gradle files
+    }
+}
 //
 //allprojects {
 //    repositories {
@@ -25,10 +29,10 @@
 //}
 
 plugins {
-    id 'com.android.application' version '7.3.1' apply false
+    id 'com.android.application' version '8.1.2' apply false
     id 'com.android.library' version '7.3.1' apply false
 }
 
-task clean(type: Delete) {
+tasks.register('clean', Delete) {
     delete rootProject.buildDir
 }

+ 3 - 0
ApexDrivers/gradle.properties

@@ -10,6 +10,9 @@ org.gradle.jvmargs=-Xmx1536m
 android.injected.testOnly = false
 android.useAndroidX=true
 android.enableJetifier=true
+android.defaults.buildfeatures.buildconfig=true
+android.nonTransitiveRClass=false
+android.nonFinalResIds=false
 # When configured, Gradle will run in incubating parallel mode.
 # This option should only be used with decoupled projects. More details, visit
 # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects

+ 3 - 3
ApexDrivers/gradle/wrapper/gradle-wrapper.properties

@@ -1,6 +1,6 @@
-#Tue Nov 22 11:36:05 CST 2022
+#Mon Nov 06 15:38:11 CST 2023
 distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
 distributionPath=wrapper/dists
-zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
 zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists

+ 6 - 6
ApexDrivers/raimage/build.gradle

@@ -10,12 +10,12 @@ android {
 //            universalApk true
 //        }
 //    }
-    compileSdkVersion 33
+    compileSdk 34
     defaultConfig {
         applicationId "com.usai.redant.raimage"
         minSdkVersion 28
-        targetSdkVersion 33
-        versionCode 9
+        targetSdkVersion 34
+        versionCode 10
         versionName "1.22.53225"
 //        ndk.abiFilters 'armeabi-v7a',"arm64-v8a"
     }
@@ -51,12 +51,12 @@ dependencies {
 
     //    compile 'com.android.support:support-v4:18.0.0'
     //    compile 'org.bouncycastle.bcprov-jdk15on.1.57.org.bouncycastle:bcprov-jdk15on:1.57'
-    implementation 'androidx.appcompat:appcompat:1.5.1'
+    implementation 'androidx.appcompat:appcompat:1.6.1'
     api 'androidx.legacy:legacy-support-v4:1.0.0'
     api 'androidx.constraintlayout:constraintlayout:2.1.4'
-    api 'androidx.recyclerview:recyclerview:1.2.1'
+    api 'androidx.recyclerview:recyclerview:1.3.0'
     api project(path: ':RAUtilsLibrary')
-    implementation 'com.google.android.material:material:1.7.0'
+    implementation 'com.google.android.material:material:1.8.0'
     //    implementation files('libs/core-2.3.0.jar')
     //    implementation files('libs/bcprov-jdk15on-157.jar')
     //    implementation files('libs/httpmime-4.1.1.jar')

+ 3 - 2
ApexDrivers/raimage/src/main/AndroidManifest.xml

@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    package="com.usai.redant.raimage">
+    xmlns:tools="http://schemas.android.com/tools">
     <queries>
         <intent>
             <action android:name="android.media.action.IMAGE_CAPTURE" />
@@ -9,6 +8,7 @@
     </queries>
     <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
     <uses-permission android:name="android.permission.CAMERA" />
+    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
     <uses-permission android:name="android.permission.VIBRATE" />
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
@@ -48,6 +48,7 @@
         <service
             android:name="com.usai.service.RAImageBackgroundService3"
             android:enabled="true"
+            android:foregroundServiceType="dataSync"
             android:exported="false" /> <!-- <service -->
         <!-- android:name="com.usai.service.RAImageBackgroundService" -->
         <!-- android:enabled="true" -->

+ 14 - 4
ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/MainActivity.java

@@ -13,7 +13,6 @@ import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.SharedPreferences;
 import android.content.res.Resources;
-import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Shader;
@@ -54,11 +53,12 @@ import androidx.core.content.FileProvider;
 
 import com.usai.redant.raimage.Model.ManufactureListActivity;
 import com.usai.redant.raimage.PhotoList.PhotoGridActivity;
+import com.usai.redant.rautils.barcodescanner.CaptureActivityNew;
 import com.usai.redant.rautils.receiver.RABroadcast;
 import com.usai.redant.rautils.signature.SignatureActivity;
 import com.usai.redant.rautils.upload.TaskActivity;
 import com.usai.redant.rautils.utils.RAUtil;
-import com.usai.redant.rautils.zxing.codescanner.CaptureActivity;
+//import com.usai.redant.rautils.zxing.codescanner.CaptureActivity;
 import com.usai.util.AES;
 import com.usai.util.MD5;
 import com.usai.util.Network;
@@ -1312,7 +1312,7 @@ public class MainActivity extends AppCompatActivity
 
                 Intent intent = new Intent();
 
-                intent.setClass(MainActivity.this, CaptureActivity.class);
+                intent.setClass(MainActivity.this, CaptureActivityNew.class);
                 requestScanBarcodeResultLauncher.launch(intent);
 //                startActivityForResult(intent, REQUEST_SCAN_BARCODE);
             }
@@ -2194,7 +2194,17 @@ public class MainActivity extends AppCompatActivity
         msgFilter.addAction("REDANT.RAImage.UPLOAD_COMPLETE");
 
         msgFilter.setPriority(2147483647);
-        registerReceiver(MainActivityReceiver, msgFilter);
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+        {
+            registerReceiver(MainActivityReceiver, msgFilter,RECEIVER_NOT_EXPORTED);
+        }
+        else
+        {
+            registerReceiver(MainActivityReceiver, msgFilter);
+        }
+
+
         Log.d(TAG, "=======================>msgFilter registed!");
 
         if (newVersion)

+ 8 - 2
ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/ServerSettingActivity.java

@@ -22,7 +22,12 @@ import androidx.activity.result.ActivityResultLauncher;
 import androidx.activity.result.contract.ActivityResultContracts;
 import androidx.appcompat.app.AppCompatActivity;
 
-import com.usai.redant.rautils.zxing.codescanner.CaptureActivity;
+import com.usai.redant.rautils.barcodescanner.CaptureActivityNew;
+
+//import com.usai.redant.rautils.zxing.codescanner.CaptureActivity;
+
+
+
 
 public class ServerSettingActivity extends AppCompatActivity
 {
@@ -99,7 +104,8 @@ public class ServerSettingActivity extends AppCompatActivity
 
 				Intent intent = new Intent();
 
-				intent.setClass(ServerSettingActivity.this, CaptureActivity.class);
+				intent.setClass(ServerSettingActivity.this, CaptureActivityNew.class);
+//				intent.setClass(ServerSettingActivity.this, CaptureActivity.class);
 //				startActivityForResult(intent, REQUEST_SCAN_BARCODE);
 
 				scanbarcodeActivityResultLauncher.launch(intent);

+ 1 - 3
ApexDrivers/raimage/src/main/java/com/usai/service/RAImageBackgroundService3.java

@@ -1,8 +1,6 @@
 package com.usai.service;
 
 import android.content.Context;
-import android.content.Intent;
-import android.os.IBinder;
 
 import com.usai.redant.raimage.RAImageApplication;
 import com.usai.redant.rautils.service.RAService3;
@@ -34,7 +32,7 @@ public class RAImageBackgroundService3 extends RAService3 {
 
 //        tracingTask.Setup(this.getApplicationContext(), false, new RATask3Tracing.TracingTaskCallback() {
 //            @Override
-//            public void onLocationChanged(Location location) {
+//            public void onLocationChanged(Location location) {RAImageBackgroundService3
 //                Log.i(TAG, "onLocationChanged " + location);
 //            }
 //        });

+ 5 - 5
ApexDrivers/rapdflib/build.gradle

@@ -1,11 +1,11 @@
 apply plugin: 'com.android.library'
 
 android {
-    compileSdkVersion 33
+    compileSdk 34
 
     defaultConfig {
         minSdkVersion 28
-        targetSdkVersion 33
+        targetSdkVersion 34
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         consumerProguardFiles "consumer-rules.pro"
@@ -33,10 +33,10 @@ android {
 
 dependencies {
     implementation fileTree(dir: "libs", include: ["*.jar"])
-    implementation 'androidx.appcompat:appcompat:1.5.1'
+    implementation 'androidx.appcompat:appcompat:1.6.1'
     testImplementation 'junit:junit:4.13.2'
-    androidTestImplementation 'androidx.test.ext:junit:1.1.4'
-    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
+    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
+    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
     implementation 'com.github.barteksc:android-pdf-viewer:3.2.0-beta.1'
     api project(path: ':RAUtilsLibrary')
 

+ 4 - 4
ApexDrivers/ratradefiling/build.gradle

@@ -1,7 +1,7 @@
 apply plugin: 'com.android.application'
 
 android {
-    compileSdk 33
+    compileSdk 34
 
 
 //    splits {
@@ -17,7 +17,7 @@ android {
     defaultConfig {
         applicationId "com.usai.ratradefiling"
         minSdkVersion 28
-        targetSdkVersion 33
+        targetSdkVersion 34
         versionCode 3
         versionName "1.11"
 //        ndk.abiFilters 'armeabi-v7a',"arm64-v8a"
@@ -58,10 +58,10 @@ android {
 
 dependencies {
 //    implementation fileTree(dir: "libs", include: ["*.jar"])
-    api 'androidx.appcompat:appcompat:1.5.1'
+    api 'androidx.appcompat:appcompat:1.6.1'
     api 'androidx.legacy:legacy-support-v4:1.0.0'
     api 'androidx.constraintlayout:constraintlayout:2.1.4'
-    implementation 'com.google.android.material:material:1.7.0'
+    implementation 'com.google.android.material:material:1.8.0'
 
 
 //    implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.18'

+ 3 - 0
ApexDrivers/ratradefiling/src/main/AndroidManifest.xml

@@ -56,6 +56,9 @@
         <activity android:name=".my.CheckSavedActivity"/>
         <activity android:name=".my.ChangePasswordActivity"/>
         <activity android:name=".login.RetrievePasswordActivity"/>
+
+        <activity
+            android:name=".PrivacyActivity" />
         <activity
             android:name=".tfeditor.TFEditorActivity"/>
     </application>

+ 93 - 0
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/PrivacyActivity.java

@@ -0,0 +1,93 @@
+package com.usai.ratradefiling;
+
+import android.content.Intent;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.webkit.WebView;
+import android.widget.TextView;
+
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+
+public class PrivacyActivity extends AppCompatActivity
+{
+	@Override
+	public boolean onOptionsItemSelected(MenuItem item)
+	{
+		Intent intent = new Intent();
+		switch (item.getItemId())
+		{
+			case android.R.id.home:
+				finish();
+				break;
+
+			default:
+				break;
+		}
+		return super.onOptionsItemSelected(item);
+	}
+
+	private void setCustomActionBar() {
+		ActionBar.LayoutParams lp =new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.MATCH_PARENT, Gravity.CENTER);
+		View mActionBarView = LayoutInflater.from(this).inflate(R.layout.actionbar_customtitle, null);
+
+		TextView titleview = mActionBarView.findViewById(R.id.title);
+		titleview.setText("PRIVACY POLICY");
+		setTitle("PRIVACY POLICY");
+		ActionBar actionBar = getSupportActionBar();
+		actionBar.setCustomView(mActionBarView, lp);
+//		actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
+//		actionBar.setDisplayShowCustomEnabled(true);
+		actionBar.setDisplayHomeAsUpEnabled(true);
+
+
+		actionBar.setDisplayShowTitleEnabled(true);
+	}
+	@Override
+	protected void onCreate(Bundle savedInstanceState)
+	{
+		Log.d("AboutActivity", "onCreate");
+
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.activity_html);
+
+		setCustomActionBar();
+		WebView wv = (WebView) findViewById(R.id.webView1);
+
+		wv.setBackgroundColor(Color.WHITE); // 设置背景色
+//
+//
+//		Uri uri= Uri.parse("R.raw.privacy");
+//
+//String url = uri.getPath();
+		wv.loadUrl("file:///android_res/raw/privacy.html");
+//		wv.getBackground().setAlpha(); // 设置填充透明度 范围:0-255
+
+//		String content = "";
+//		try
+//		{
+//			InputStream in = getResources().openRawResource(R.raw.privacy);
+//			// 获取文件的字节数
+//			int lenght = in.available();
+//			// 创建byte数组
+//			byte[] buffer = new byte[lenght];
+//			// 将文件中的数据读到byte数组中
+//			in.read(buffer);
+//			content = EncodingUtils.getString(buffer, "UTF-8");
+//		}
+//		catch (Exception e)
+//		{
+//			e.printStackTrace();
+//		}
+//		wv.getSettings().setDefaultTextEncodingName("UTF-8");
+//		String encodedHtml = Base64.encodeToString(content.getBytes(), Base64.NO_PADDING);
+//		wv.loadData(encodedHtml, "text/html", "base64");
+//		wv.loadData(content, "text/html", null);
+		
+	}
+}

+ 14 - 15
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/RootActivity.java

@@ -1,6 +1,5 @@
 package com.usai.ratradefiling;
 
-import android.Manifest;
 import android.app.AlertDialog;
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -8,41 +7,28 @@ import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.PackageManager;
-import android.graphics.Color;
 import android.graphics.drawable.Drawable;
-import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
 import android.text.TextUtils;
 import android.view.Menu;
 import android.view.MenuItem;
-import android.view.View;
 
 import androidx.annotation.NonNull;
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.Toolbar;
 import androidx.core.app.ActivityCompat;
-import androidx.fragment.app.Fragment;
 import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 import androidx.viewpager.widget.ViewPager;
 
 import com.google.android.material.bottomnavigation.BottomNavigationView;
-//import com.usai.apex.TradeFilingApplication;
-//import com.usai.apex.ContainerSearchActivity;
-//import com.usai.apex.ViewPagerAdapter;
 import com.usai.ratradefiling.about.AboutFragment;
 import com.usai.ratradefiling.base.BasicActivity;
-import com.usai.ratradefiling.fields.CustomizeFieldsActivity;
 import com.usai.ratradefiling.home.FunctionPanelSettingActivity;
 import com.usai.ratradefiling.home.HomeFragment;
 import com.usai.ratradefiling.login.LoginFragment;
 import com.usai.ratradefiling.my.MyFragment;
-import com.usai.ratradefiling.result.ResultActivity;
 import com.usai.redant.rautils.utils.RAUtil;
 
-import static android.view.View.GONE;
-
 //import static androidx.constraintlayout.widget.ConstraintSet.GONE;
 //import com.usai.util.commonUtil;
 
@@ -247,7 +233,20 @@ public class RootActivity extends BasicActivity {
             }
 
         };
-        localBroadcastManager.registerReceiver(br, intentFilter);
+
+//
+//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+//        {
+//
+//
+//
+//            localBroadcastManager.registerReceiver(br, intentFilter,RECEIVER_NOT_EXPORTED);
+//        }
+//        else
+        {
+            localBroadcastManager.registerReceiver(br, intentFilter);
+        }
+
 //        registerReceiver(br, intentFilter);
 
         setContentView(R.layout.activity_root);

+ 18 - 11
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/about/AboutFragment.java

@@ -3,9 +3,6 @@ package com.usai.ratradefiling.about;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
-
-import androidx.fragment.app.Fragment;
-
 import android.text.Html;
 import android.text.method.LinkMovementMethod;
 import android.text.method.ScrollingMovementMethod;
@@ -15,13 +12,13 @@ import android.view.ViewGroup;
 import android.widget.Button;
 import android.widget.TextView;
 
+import androidx.fragment.app.Fragment;
+
+import com.usai.ratradefiling.PrivacyActivity;
 import com.usai.ratradefiling.R;
 import com.usai.ratradefiling.TradeFilingApplication;
-import com.usai.redant.rautils.WebActivity;
 import com.usai.redant.rautils.utils.RAUtil;
 
-import static com.usai.ratradefiling.dataprovider.OnlineDataProvider.URL_PRIVACY_POLICY;
-
 /**
  * A simple {@link Fragment} subclass.
  * Use the {@link AboutFragment#newInstance} factory method to
@@ -107,17 +104,27 @@ public class AboutFragment extends Fragment {
             @Override
             public void onClick(View view)
             {
+//                Intent intent = new Intent();
+//
+//
+//                intent.setClass(getActivity(), WebActivity.class);
+//                // intent.putExtra("user", ApexTrackingApplication.get_user());
+//                // intent.putExtra("password", password);
+//                intent.putExtra("url", URL_PRIVACY_POLICY);
+//                intent.putExtra("title", "Privacy Policy");
+//                startActivity(intent);
                 Intent intent = new Intent();
-
-
-                intent.setClass(getActivity(), WebActivity.class);
+                intent.setClass(getActivity(), PrivacyActivity.class);
                 // intent.putExtra("user", ApexTrackingApplication.get_user());
                 // intent.putExtra("password", password);
-                intent.putExtra("url", URL_PRIVACY_POLICY);
+
+//                Uri uri= Uri.parse("R.raw.privacy");
+//
+//
+//                intent.putExtra("url", uri.getPath());
                 intent.putExtra("title", "Privacy Policy");
                 startActivity(intent);
 
-
             }
         });
 

+ 14 - 47
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/dataprovider/OnlineDataProvider.java

@@ -1,55 +1,22 @@
 package com.usai.ratradefiling.dataprovider;
 
-import android.app.Activity;
-import android.app.AlertDialog;
 import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.SharedPreferences.Editor;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteStatement;
 import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
 import android.text.TextUtils;
 import android.util.Log;
 
-//import com.usai.apex.TradeFilingApplication;
-import androidx.localbroadcastmanager.content.LocalBroadcastManager;
-
 import com.usai.ratradefiling.R;
-import com.usai.ratradefiling.RootActivity;
 import com.usai.ratradefiling.TradeFilingApplication;
-import com.usai.ratradefiling.my.CheckSavedActivity;
-import com.usai.redant.rautils.utils.FileManager;
 import com.usai.redant.rautils.utils.RAUtil;
 
-import org.apache.http.conn.ssl.SSLSocketFactory;
-import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
 
 import java.io.File;
-import java.io.IOException;
-import java.net.Socket;
-import java.net.UnknownHostException;
-import java.security.KeyManagementException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.UnrecoverableKeyException;
-import java.util.Iterator;
 import java.util.Locale;
 
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-import com.usai.ratradefiling.dataprovider.RADataProvider;
-
 public class OnlineDataProvider extends com.usai.redant.rautils.utils.Network
 {
 	public static final String SHORT_VER ="1.11";
@@ -83,29 +50,29 @@ public class OnlineDataProvider extends com.usai.redant.rautils.utils.Network
 
 
 	//DEBUG
-	public static String		BASE_URL						= "http://192.168.0.161/ACE_ISF_NEW";
+//	public static String		BASE_URL						= "http://192.168.0.161/ACE_ISF_NEW";
 
 	//RELEASE
-//	public static String		BASE_URL						= "https://ra.united-us.net/doc/bk";
+	public static String		BASE_URL						= "https://ra.united-us.net/doc/bk";
 
 
 //	URL
-	public static String		URL_LOGIN						= BASE_URL+"/loginMobile_v1.php";
-	public static String		URL_CHANGE_PASS						= BASE_URL+"/loginMobile_v1.php";
-	public static String		URL_LOGOUT						= BASE_URL+"/loginMobile_v1.php";
-	public static String		URL_RETRIEVE_PASS						= BASE_URL+"/loginMobile_v1.php";
-	public static String		URL_SIGNUP						= BASE_URL+"/loginMobile_v1.php";
+	public static String		URL_LOGIN						= BASE_URL+"/loginMobile.php";
+	public static String		URL_CHANGE_PASS						= BASE_URL+"/loginMobile.php";
+	public static String		URL_LOGOUT						= BASE_URL+"/loginMobile.php";
+	public static String		URL_RETRIEVE_PASS						= BASE_URL+"/loginMobile.php";
+	public static String		URL_SIGNUP						= BASE_URL+"/loginMobile.php";
 
 
-	public static String		URL_HOME						= BASE_URL+"/mobileMain_v1.php";
-	public static String		URL_SEARCH_RESULT					= BASE_URL+"/resultMobile_v1.php";
+	public static String		URL_HOME						= BASE_URL+"/mobileMain.php";
+	public static String		URL_SEARCH_RESULT					= BASE_URL+"/resultMobile.php";
 
-	public static String		URL_REQUEST_DETAIL					= BASE_URL+"/resultMobile_v1.php";
+	public static String		URL_REQUEST_DETAIL					= BASE_URL+"/resultMobile.php";
 
 	public static String		URL_UPLOAD_IMG					= BASE_URL+"";
-	public static String		URL_SAVE_EDITOR					= BASE_URL+"/editorMobile_v1.php";
-	public static String		URL_EDIT					= BASE_URL+"/editorMobile_v1.php";
-	public static String		URL_CADEDATE					= BASE_URL+"/resultMobile_v1.php";
+	public static String		URL_SAVE_EDITOR					= BASE_URL+"/editorMobile.php";
+	public static String		URL_EDIT					= BASE_URL+"/editorMobile.php";
+	public static String		URL_CADEDATE					= BASE_URL+"/resultMobile.php";
 
 
 
@@ -113,7 +80,7 @@ public class OnlineDataProvider extends com.usai.redant.rautils.utils.Network
 	public static String		URL_LOG							= "";
 	public static String		URL_CHECK_UPDATE				= "";
 
-	public static String		URL_PRIVACY_POLICY					= "http://united-us.net/privacy.html";
+	public static String		URL_PRIVACY_POLICY					= "https://www.united-us.net/privacy.html";
 
 
 //

+ 25 - 15
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/home/HomeFragment.java

@@ -1,5 +1,15 @@
 package com.usai.ratradefiling.home;
 
+import static com.usai.ratradefiling.base.ResultBaseModel.HomeDashResultType.DashResultTypeACEM1Error;
+import static com.usai.ratradefiling.base.ResultBaseModel.HomeDashResultType.DashResultTypeACEM1Pending;
+import static com.usai.ratradefiling.base.ResultBaseModel.HomeDashResultType.DashResultTypeACIError;
+import static com.usai.ratradefiling.base.ResultBaseModel.HomeDashResultType.DashResultTypeACIPending;
+import static com.usai.ratradefiling.base.ResultBaseModel.HomeDashResultType.DashResultTypeEmpty;
+import static com.usai.ratradefiling.base.ResultBaseModel.HomeDashResultType.DashResultTypeISFError;
+import static com.usai.ratradefiling.base.ResultBaseModel.HomeDashResultType.DashResultTypeISFPending;
+import static com.usai.ratradefiling.base.ResultBaseModel.HomeDashResultType.DashResultTypeeManifestError;
+import static com.usai.ratradefiling.base.ResultBaseModel.HomeDashResultType.DashResultTypeeManifestPending;
+
 import android.app.Activity;
 import android.app.ProgressDialog;
 import android.content.BroadcastReceiver;
@@ -7,6 +17,7 @@ import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
@@ -27,15 +38,11 @@ import androidx.constraintlayout.widget.ConstraintLayout;
 import androidx.fragment.app.Fragment;
 import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
 
-//import com.usai.ratradefiling.MainActivity;
 import com.usai.ratradefiling.R;
-//import com.usai.ratradefiling.SaveInstanceHelper;
-//import com.usai.ratradefiling.badgeview.BadgeView;
 import com.usai.ratradefiling.RootActivity;
 import com.usai.ratradefiling.TradeFilingApplication;
 import com.usai.ratradefiling.base.ResultBaseModel;
 import com.usai.ratradefiling.dataprovider.RADataProvider;
-//import com.usai.ratradefiling.message.MessageActivity;
 import com.usai.ratradefiling.detail.NewDetailActivity;
 import com.usai.ratradefiling.home.dashcell.HomeDashEmptyCell;
 import com.usai.ratradefiling.home.dashcell.error.HomeDashACEM1CellE;
@@ -66,16 +73,6 @@ import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.Iterator;
 
-import static com.usai.ratradefiling.base.ResultBaseModel.HomeDashResultType.DashResultTypeACEM1Error;
-import static com.usai.ratradefiling.base.ResultBaseModel.HomeDashResultType.DashResultTypeACEM1Pending;
-import static com.usai.ratradefiling.base.ResultBaseModel.HomeDashResultType.DashResultTypeACIError;
-import static com.usai.ratradefiling.base.ResultBaseModel.HomeDashResultType.DashResultTypeACIPending;
-import static com.usai.ratradefiling.base.ResultBaseModel.HomeDashResultType.DashResultTypeEmpty;
-import static com.usai.ratradefiling.base.ResultBaseModel.HomeDashResultType.DashResultTypeISFError;
-import static com.usai.ratradefiling.base.ResultBaseModel.HomeDashResultType.DashResultTypeISFPending;
-import static com.usai.ratradefiling.base.ResultBaseModel.HomeDashResultType.DashResultTypeeManifestError;
-import static com.usai.ratradefiling.base.ResultBaseModel.HomeDashResultType.DashResultTypeeManifestPending;
-
 //import com.usai.ratradefiling.settings;
 
 public class HomeFragment extends Fragment
@@ -573,7 +570,20 @@ public class HomeFragment extends Fragment
 //        intentFilter.addAction(DetailActivity.CheckDetailNotification);
 
         mReceiver = new HomeBroadCastReceiver();
-        mCtx.registerReceiver(mReceiver, intentFilter);
+
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+        {
+
+            mCtx.registerReceiver(mReceiver, intentFilter,mCtx.RECEIVER_NOT_EXPORTED);
+        }
+        else
+        {
+            mCtx.registerReceiver(mReceiver, intentFilter);
+        }
+
+
+
     }
 
     private void updateEmptyViewState(boolean empty)

+ 28 - 0
ApexDrivers/ratradefiling/src/main/res/layout/activity_html.xml

@@ -0,0 +1,28 @@
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/scrollView1"
+    android:layout_width="fill_parent"
+    android:layout_height="match_parent"
+    android:paddingBottom="@dimen/activity_vertical_margin"
+    android:paddingLeft="@dimen/activity_horizontal_margin"
+    android:paddingRight="@dimen/activity_horizontal_margin"
+    android:paddingTop="@dimen/activity_vertical_margin"
+    tools:context="com.usai.ratradefiling.PrivacyActivity" >
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/linearLayout"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <WebView
+            android:id="@+id/webView1"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:background="@color/colorPrimary"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</ScrollView>

+ 28 - 0
ApexDrivers/ratradefiling/src/main/res/raw/privacy.html

@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Insert title here</title>
+</head>
+<body>
+	<div>
+			<center><h1>PRIVACY POLICY</h1></center>
+
+			<h2>TYPE OF INFORMATION WE COLLECT</h2>
+				<ul style="font-size:22px;">
+					<li>United Software Application, Inc. does not automatically collect personal information about you when you use our products. However depending on how you use the App, we may collect below information</li>
+					<li>Use user information to login.</li>
+					<li>Use camera and album to take business card, transport evidence picture.</li>
+					<li>Use camera to scan barcode.</li>
+					<li>Collect error log and crash log.</li>
+
+				</ul>
+
+			<h2>INFORMATION WE SHARE WITH THIRD PARTIES</h2>
+				<ul style="font-size:22px;">
+					<li>We do not provide your personal information to anyone or any third party except for sharing current location for the purpose of navigation.</li>
+				</ul>
+				
+	</div>
+</body>
+</html>

+ 10 - 0
ApexDrivers/ratradefiling/src/main/res/values/dimens.xml

@@ -12,4 +12,14 @@
     inner_frame_layout_padding (below variable) on round screens.
     -->
     <dimen name="inner_frame_layout_padding">5dp</dimen>
+
+
+    <dimen name="activity_horizontal_margin">16dp</dimen>
+    <dimen name="activity_vertical_margin">16dp</dimen>
+
+    <!-- Used by CaptureActivity. -->
+    <dimen name="standard_padding">8dip</dimen>
+    <dimen name="half_padding">4dip</dimen>
+    <dimen name="text_margin">16dp</dimen>
+    <dimen name="padding_middle">12dp</dimen>
 </resources>