소스 검색

Android 15 compatible fix
minor bug fix

Ray Zhang 10 달 전
부모
커밋
71a234fbda
69개의 변경된 파일2190개의 추가작업 그리고 720개의 파일을 삭제
  1. 2 2
      ApexDrivers/CommonEditorLib/build.gradle
  2. 2 2
      ApexDrivers/RALocationLib/build.gradle
  3. 10 10
      ApexDrivers/RAUtilsLibrary/build.gradle
  4. 2 0
      ApexDrivers/RAUtilsLibrary/src/main/AndroidManifest.xml
  5. 73 8
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/barcodescanner/BeepManager.java
  6. 105 34
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/barcodescanner/CaptureActivityNew.java
  7. 58 3
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/carousel/CarouselView.java
  8. 128 126
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/contactkit/ContactHelper.java
  9. 38 39
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/contactkit/ContactUIHelper.java
  10. 3 3
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/location/SystemLocation.java
  11. 89 2
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/operationqueue/OperationQueue.java
  12. 157 119
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/service/RAService.java
  13. 61 31
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/service/RATask3Notifiacation.java
  14. 55 42
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/service/RATask3Upload.java
  15. 86 59
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/upload/TaskActivity.java
  16. 15 4
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/upload/UploadListActivity.java
  17. 274 8
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/utils/Network.java
  18. 1 1
      ApexDrivers/apexcrm/src/main/java/com/usai/apex/apexcrm/MainActivity.java
  19. 2 2
      ApexDrivers/apexmap/build.gradle
  20. 2 2
      ApexDrivers/build.gradle
  21. 1 1
      ApexDrivers/gradle/wrapper/gradle-wrapper.properties
  22. 4 4
      ApexDrivers/raimage/build.gradle
  23. 6 2
      ApexDrivers/raimage/src/main/AndroidManifest.xml
  24. 35 0
      ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/LActivity.java
  25. 4 87
      ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/MainActivity.java
  26. 92 1
      ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/ModeActivity.java
  27. 38 4
      ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/Model/ManufactureListActivity.java
  28. 40 0
      ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/Model/ModelActivity.java
  29. 36 1
      ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/POD/PodActivity.java
  30. 36 1
      ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/POP/PopActivity.java
  31. 33 0
      ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/PhotoList/NewPhotoPreviewActivity.java
  32. 32 0
      ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/PhotoList/PhotoGridActivity.java
  33. 38 0
      ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/PrivacyActivity.java
  34. 36 0
      ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/ServerSettingActivity.java
  35. 34 1
      ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/receiving/ReceivingPalletIDActivity.java
  36. 39 2
      ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/uploadSettingActivity.java
  37. 6 1
      ApexDrivers/raimage/src/main/java/com/usai/util/Network.java
  38. 2 1
      ApexDrivers/raimage/src/main/res/layout-land/activity_model.xml
  39. 2 1
      ApexDrivers/raimage/src/main/res/layout-land/activity_pod.xml
  40. 2 1
      ApexDrivers/raimage/src/main/res/layout-land/activity_pop.xml
  41. 2 1
      ApexDrivers/raimage/src/main/res/layout-land/activity_receivingpalletid.xml
  42. 2 1
      ApexDrivers/raimage/src/main/res/layout/activity_full_screen_login.xml
  43. 3 0
      ApexDrivers/raimage/src/main/res/layout/activity_history.xml
  44. 2 0
      ApexDrivers/raimage/src/main/res/layout/activity_manufacture_list.xml
  45. 12 1
      ApexDrivers/raimage/src/main/res/layout/activity_mode.xml
  46. 3 1
      ApexDrivers/raimage/src/main/res/layout/activity_model.xml
  47. 2 1
      ApexDrivers/raimage/src/main/res/layout/activity_new_photo_preview.xml
  48. 2 0
      ApexDrivers/raimage/src/main/res/layout/activity_photo_grid.xml
  49. 2 1
      ApexDrivers/raimage/src/main/res/layout/activity_pod.xml
  50. 2 1
      ApexDrivers/raimage/src/main/res/layout/activity_pop.xml
  51. 2 1
      ApexDrivers/raimage/src/main/res/layout/activity_receivingpalletid.xml
  52. 2 0
      ApexDrivers/raimage/src/main/res/layout/activity_service_setting.xml
  53. 5 4
      ApexDrivers/raimage/src/main/res/layout/activity_splash.xml
  54. 2 0
      ApexDrivers/raimage/src/main/res/layout/activity_upload_setting.xml
  55. 2 2
      ApexDrivers/raimage/src/main/res/values/colors.xml
  56. 5 1
      ApexDrivers/raimage/src/main/res/values/styles.xml
  57. 3 2
      ApexDrivers/rapdflib/build.gradle
  58. 33 0
      ApexDrivers/rapdflib/src/main/java/com/redant/usai/rapdflib/preview/RAPDFPreviewActivity.java
  59. 3 1
      ApexDrivers/rapdflib/src/main/res/layout/pdf_preview_activity.xml
  60. 5 5
      ApexDrivers/ratradefiling/build.gradle
  61. 36 0
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/RootActivity.java
  62. 20 30
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/detail/DetailFragment.java
  63. 1 1
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/detail/NewDetailActivity.java
  64. 35 2
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/login/RetrievePasswordActivity.java
  65. 8 18
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/my/SavedDetailFragment.java
  66. 38 22
      ApexDrivers/ratradefiling/src/main/res/layout/activity_retrieve_password.xml
  67. 4 0
      ApexDrivers/ratradefiling/src/main/res/layout/activity_root.xml
  68. 1 1
      ApexDrivers/ratradefiling/src/main/res/raw/about_en.txt
  69. 274 18
      ApexDrivers/ratradefiling/src/main/res/raw/privacy.html

+ 2 - 2
ApexDrivers/CommonEditorLib/build.gradle

@@ -3,11 +3,11 @@ plugins {
 }
 
 android {
-    compileSdk 34
+    compileSdk 35
 
     defaultConfig {
         minSdkVersion 28
-        targetSdkVersion 34
+        targetSdkVersion 35
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         consumerProguardFiles "consumer-rules.pro"

+ 2 - 2
ApexDrivers/RALocationLib/build.gradle

@@ -1,11 +1,11 @@
 apply plugin: 'com.android.library'
 
 android {
-    compileSdk 34
+    compileSdk 35
 
     defaultConfig {
         minSdkVersion 28
-        targetSdkVersion 34
+        targetSdkVersion 35
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         consumerProguardFiles "consumer-rules.pro"

+ 10 - 10
ApexDrivers/RAUtilsLibrary/build.gradle

@@ -1,12 +1,12 @@
 apply plugin: 'com.android.library'
 
 android {
-    compileSdk 34
+    compileSdk 35
     defaultConfig {
         minSdk 28
 
 //        applicationId "com.usai.redant.rautils"
-        targetSdkVersion 34
+        targetSdkVersion 35
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
     }
     buildTypes {
@@ -57,18 +57,18 @@ android {
 dependencies {
 
 
-    implementation 'com.google.android.material:material:1.8.0'
+    implementation 'com.google.android.material:material:1.12.0'
 
 
-    implementation 'com.google.mlkit:barcode-scanning:17.2.0'
+    implementation 'com.google.mlkit:barcode-scanning:17.3.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.lifecycle:lifecycle-livedata:2.8.4"
+    implementation "androidx.lifecycle:lifecycle-viewmodel:2.8.4"
 
-    implementation 'androidx.appcompat:appcompat:1.6.1'
+    implementation 'androidx.appcompat:appcompat:1.7.0'
 //    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'
@@ -80,9 +80,9 @@ dependencies {
     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 "androidx.camera:camera-camera2:1.4.0-rc01"
+    implementation "androidx.camera:camera-lifecycle:1.4.0-rc01"
+    implementation "androidx.camera:camera-view:1.4.0-rc01"
 
 
     implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))

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

@@ -3,6 +3,8 @@
     xmlns:tools="http://schemas.android.com/tools"
     xmlns:app="http://schemas.android.com/apk/res-auto">
 
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
     <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
 

+ 73 - 8
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/barcodescanner/BeepManager.java

@@ -16,12 +16,20 @@
 
 package com.usai.redant.rautils.barcodescanner;
 
+import static android.content.Context.VIBRATOR_MANAGER_SERVICE;
+import static android.content.Context.VIBRATOR_SERVICE;
+import static android.os.VibrationEffect.createOneShot;
+
 import android.app.Activity;
 import android.content.Context;
 import android.content.res.AssetFileDescriptor;
+import android.media.AudioAttributes;
 import android.media.AudioManager;
 import android.media.MediaPlayer;
+import android.os.Build;
+import android.os.VibrationEffect;
 import android.os.Vibrator;
+import android.os.VibratorManager;
 import android.util.Log;
 
 import com.usai.redant.rautils.R;
@@ -61,19 +69,68 @@ final class BeepManager implements MediaPlayer.OnCompletionListener, MediaPlayer
     }
   }
 
+//  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);
+//    }
+//  }
+
+
+
+  @SuppressWarnings("deprecation")
   synchronized void playBeepSoundAndVibrate() {
-	  Log.i(TAG,"playBeep=========>"+playBeep);
-	  Log.i(TAG, "ok");
-	  Log.i(TAG,"vibrate=========>"+vibrate);
+    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);
+    if (vibrate)
+    {
+
+
+      Vibrator vibrator;
+
+      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
+      {
+
+        VibratorManager vibratorManager = (VibratorManager) activity.getSystemService(VIBRATOR_MANAGER_SERVICE);
+
+        vibrator = vibratorManager.getDefaultVibrator();
+
+      }
+      else
+      {
+        // backward compatibility for Android API < 31,
+        // VibratorManager was only added on API level 31 release.
+
+
+
+        vibrator = (Vibrator) activity.getSystemService(VIBRATOR_SERVICE);
+
+      }
+
+//      final int DELAY = 0, VIBRATE = 1000, SLEEP = 1000, START = 0;
+//      long[] vibratePattern = {DELAY, VIBRATE, SLEEP};
+
+
+      // backward compatibility for Android API < 26
+      // noinspection deprecation
+//        vibrator.vibrate(vibratePattern, START);
+      vibrator.vibrate(createOneShot(1000, VibrationEffect.DEFAULT_AMPLITUDE));
+
+//
+//      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
@@ -86,10 +143,18 @@ final class BeepManager implements MediaPlayer.OnCompletionListener, MediaPlayer
 
   private MediaPlayer buildMediaPlayer(Context activity) {
     MediaPlayer mediaPlayer = new MediaPlayer();
-    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
+//    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
     mediaPlayer.setOnCompletionListener(this);
     mediaPlayer.setOnErrorListener(this);
 
+
+    mediaPlayer.setAudioAttributes(
+            new AudioAttributes
+                    .Builder()
+                    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
+                    .build());
+
+
     AssetFileDescriptor file = activity.getResources().openRawResourceFd(R.raw.beep);
     try {
       mediaPlayer.setDataSource(file.getFileDescriptor(), file.getStartOffset(), file.getLength());

+ 105 - 34
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/barcodescanner/CaptureActivityNew.java

@@ -19,12 +19,14 @@ 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.core.resolutionselector.AspectRatioStrategy;
+import androidx.camera.core.resolutionselector.ResolutionSelector;
+import androidx.camera.core.resolutionselector.ResolutionStrategy;
 import androidx.camera.lifecycle.ProcessCameraProvider;
 import androidx.camera.view.PreviewView;
 import androidx.core.content.ContextCompat;
@@ -254,25 +256,28 @@ public class CaptureActivityNew extends AppCompatActivity {
 //                    });
 //        }
 //    }
+private void startCamera() {
+    // 将Camera的生命周期和Activity绑定在一起(设定生命周期所有者),这样就不用手动控制相机的启动和关闭。
+    ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(this);
 
-    private void startCamera() {
-        // 将Camera的生命周期和Activity绑定在一起(设定生命周期所有者),这样就不用手动控制相机的启动和关闭。
-        ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(this);
+    cameraProviderFuture.addListener(() -> {
+        try {
+            // 将你的相机和当前生命周期的所有者绑定所需的对象
+            ProcessCameraProvider processCameraProvider = cameraProviderFuture.get();
 
-        cameraProviderFuture.addListener(() -> {
-            try {
-                // 将你的相机和当前生命周期的所有者绑定所需的对象
-                ProcessCameraProvider processCameraProvider = cameraProviderFuture.get();
+            // 创建一个Preview 实例,并设置该实例的 surface 提供者(provider)。
 
-                // 创建一个Preview 实例,并设置该实例的 surface 提供者(provider)。
-                Preview preview = new Preview.Builder()
-                        .setTargetResolution(new Size(1920,1080))
 
-                        .build();
 
 
-                PreviewView v = findViewById(R.id.viewFinder);
-                preview.setSurfaceProvider(v.getSurfaceProvider());
+            Preview preview = new Preview.Builder()
+//                        .setTargetResolution(new Size(1920,1080))
+                    .setResolutionSelector(new ResolutionSelector.Builder().setResolutionStrategy(new ResolutionStrategy(new Size(1920, 1080), ResolutionStrategy.FALLBACK_RULE_NONE)).build())
+                    .build();
+
+
+            PreviewView v = findViewById(R.id.viewFinder);
+            preview.setSurfaceProvider(v.getSurfaceProvider());
 
 
 //                ResolutionInfo rinfo=preview.getResolutionInfo();
@@ -283,41 +288,107 @@ public class CaptureActivityNew extends AppCompatActivity {
 //                        .build();
 //                videoCapture = VideoCapture.withOutput(recorder);
 
-                // 选择后置摄像头作为默认摄像头
-                CameraSelector cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA;
+            // 选择后置摄像头作为默认摄像头
+            CameraSelector cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA;
+
+            // 创建拍照所需的实例
+            imageCapture = new ImageCapture.Builder().build();
 
-                // 创建拍照所需的实例
-                imageCapture = new ImageCapture.Builder().build();
 
 
-                // 设置预览帧分析
-                ImageAnalysis imageAnalysis = new ImageAnalysis.Builder()
+            // 设置预览帧分析
+            ImageAnalysis imageAnalysis = new ImageAnalysis.Builder()
 //                        .setTargetResolution(new Size(1920,1080))
-                        .setTargetAspectRatio(AspectRatio.RATIO_16_9)
-                        .build();
-                imageAnalysis.setAnalyzer(cameraExecutor, new MyAnalyzer());
+//                        .setTargetAspectRatio(AspectRatio.RATIO_16_9)
+                    .setResolutionSelector(new ResolutionSelector.Builder().setAspectRatioStrategy(AspectRatioStrategy.RATIO_16_9_FALLBACK_AUTO_STRATEGY).build())
+                    .build();
+            imageAnalysis.setAnalyzer(cameraExecutor, new MyAnalyzer());
 
-                // 重新绑定用例前先解绑
-                processCameraProvider.unbindAll();
+            // 重新绑定用例前先解绑
+            processCameraProvider.unbindAll();
 
-                // 绑定用例至相机
+            // 绑定用例至相机
                 /*此步骤具有 Camera2 设备文档中指定的设备级别要求:
                     预览 + 视频捕获 + 图像捕获:LIMITED设备及以上。
                     预览 + 视频捕获 + 图像分析:LEVEL_3(最高)设备添加到 Android 7(N)。
                     预览 + 视频捕获 + 图像分析 + 图像捕获:不支持。
                 */
-                processCameraProvider.bindToLifecycle(CaptureActivityNew.this, cameraSelector,
-                        preview,
+            processCameraProvider.bindToLifecycle(CaptureActivityNew.this, cameraSelector,
+                    preview,
 //                        imageCapture,
-                        imageAnalysis/*,
+                    imageAnalysis/*,
                         videoCapture*/);
 
-            } catch (Exception e) {
-                Log.e(Configuration.TAG, "用例绑定失败!" + e);
-            }
-        }, ContextCompat.getMainExecutor(this));
+        } catch (Exception e) {
+            Log.e(Configuration.TAG, "用例绑定失败!" + e);
+        }
+    }, ContextCompat.getMainExecutor(this));
 
-    }
+}
+
+//    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) {

+ 58 - 3
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/carousel/CarouselView.java

@@ -30,6 +30,9 @@ public class CarouselView extends RelativeLayout {
     private CarouselAdapter mAdapter;
     private int mCurrentItem = 1;
     private int mItemCount;
+
+    private ViewPager.OnPageChangeListener mpcl;
+
     private HashMap<Integer, Object> mPositionViewMap = new HashMap<>();
 
     public CarouselView(Context context) {
@@ -46,6 +49,12 @@ public class CarouselView extends RelativeLayout {
         super(context, attrs, defStyleAttr);
         init(context);
     }
+    @Override
+    protected void finalize() throws Throwable
+    {
+        mPager.removeOnPageChangeListener(mpcl);
+        super.finalize();
+    }
 
     private void init(Context context) {
         mContext = context;
@@ -57,8 +66,7 @@ public class CarouselView extends RelativeLayout {
         RelativeLayout.LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
         addView(mPager,layoutParams);
 
-
-        mPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+        mpcl=new ViewPager.OnPageChangeListener() {
             @Override
             public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
 
@@ -101,7 +109,54 @@ public class CarouselView extends RelativeLayout {
                     }
                 }
             }
-        });
+        };
+
+        mPager.addOnPageChangeListener(mpcl);
+
+//        mPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+//            @Override
+//            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+//
+//            }
+//
+//            @Override
+//            public void onPageSelected(int position) {
+//
+//                Log.d("Carousel", "onPageSelected: " + position);
+//                mCurrentItem = position;
+//                int display_index = mCurrentItem;
+//                if (position == 0) {
+//                    display_index = mItemCount;
+//                } else if (position == mItemCount + 1) {
+//                    display_index = 1;
+//                } else {
+//                    display_index = position;
+//
+//                    // 代理方法在此调用避免两端点的索引重复出现
+//                    if (mDelegate != null) {
+//                        View cell = (View) mPositionViewMap.get(position);
+//                        mDelegate.carouselDidShowItem(self,cell,display_index - 1);
+//                    }
+//                }
+//
+//
+//            }
+//
+//            @Override
+//            public void onPageScrollStateChanged(int state) {
+//
+//                Log.d("Carousel", "onPageScrollStateChanged: " + mCurrentItem);
+//                // 解决两端切换时闪屏
+//                if (state == ViewPager.SCROLL_STATE_IDLE) {
+//                    if (mCurrentItem == mPager.getAdapter().getCount() - 1) {
+//                        mPager.setCurrentItem(1, false);
+//                    }
+//                    else if (mCurrentItem == 0) {
+//                        mPager.setCurrentItem(mPager.getAdapter().getCount() - 2, false);
+//                    }
+//                }
+//            }
+//        });
         mPager.setAdapter(mAdapter);
         reloadData();
     }

+ 128 - 126
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/contactkit/ContactHelper.java

@@ -186,51 +186,51 @@ public class ContactHelper {
         return null;
     }
 
-    private ArrayList<SocialProfile> traverseSocialProfileByID(Integer ID) {
-
-        Uri socialUri = ContactsContract.Data.CONTENT_URI;
-
-        String[] socialProjections = new String[] {
-                ContactsContract.CommonDataKinds.Im.DATA,
-                ContactsContract.CommonDataKinds.Im.TYPE,
-                ContactsContract.CommonDataKinds.Im.LABEL,
-                ContactsContract.CommonDataKinds.Im.PROTOCOL,
-                ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL,
-                ContactsContract.Data._ID
-        };
-
-        String socialSelection = ContactsContract.Data.CONTACT_ID + "='" + ID + "'" + " And " + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE + "'";
-
-        Cursor socialCur = mContentResolver.query(socialUri, socialProjections, socialSelection, null, null);
-        if (socialCur != null) {
-
-            ArrayList<SocialProfile> socialProfileArray = new ArrayList<>();
-            while (socialCur.moveToNext()) {
-
-
-                String socialValue = socialCur.getString(0);
-                Integer socialType = socialCur.getInt(1);
-                String socialLabel = socialCur.getString(2);
-                Integer socialProtocol = socialCur.getInt(3);
-                String socialCustomProtocol = socialCur.getString(4);
-                Integer id = socialCur.getInt(5);
-
-                SocialProfile socialProfile = new SocialProfile(id);
-                socialProfile.value = socialValue;
-                socialProfile.label = socialLabel;
-                socialProfile.type = SocialProfile.SocialProfileType.values()[socialType];
-                socialProfile.localizedLabel = ContactsContract.CommonDataKinds.Im.getTypeLabel(mContext.getResources(), socialType, socialLabel).toString();
-                socialProfile.setSocialProtocol(SocialProfile.SocialProfileProtocol.values()[socialProtocol + 1]);
-                socialProfile.localizedProtocol = ContactsContract.CommonDataKinds.Im.getProtocolLabel(mContext.getResources(), socialProtocol, socialCustomProtocol).toString();
-
-                socialProfileArray.add(socialProfile);
-            }
-            socialCur.close();
-            return socialProfileArray;
-        }
-
-        return null;
-    }
+//    private ArrayList<SocialProfile> traverseSocialProfileByID(Integer ID) {
+//
+//        Uri socialUri = ContactsContract.Data.CONTENT_URI;
+//
+//        String[] socialProjections = new String[] {
+//                ContactsContract.CommonDataKinds.Im.DATA,
+//                ContactsContract.CommonDataKinds.Im.TYPE,
+//                ContactsContract.CommonDataKinds.Im.LABEL,
+//                ContactsContract.CommonDataKinds.Im.PROTOCOL,
+//                ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL,
+//                ContactsContract.Data._ID
+//        };
+//
+//        String socialSelection = ContactsContract.Data.CONTACT_ID + "='" + ID + "'" + " And " + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE + "'";
+//
+//        Cursor socialCur = mContentResolver.query(socialUri, socialProjections, socialSelection, null, null);
+//        if (socialCur != null) {
+//
+//            ArrayList<SocialProfile> socialProfileArray = new ArrayList<>();
+//            while (socialCur.moveToNext()) {
+//
+//
+//                String socialValue = socialCur.getString(0);
+//                Integer socialType = socialCur.getInt(1);
+//                String socialLabel = socialCur.getString(2);
+//                Integer socialProtocol = socialCur.getInt(3);
+//                String socialCustomProtocol = socialCur.getString(4);
+//                Integer id = socialCur.getInt(5);
+//
+//                SocialProfile socialProfile = new SocialProfile(id);
+//                socialProfile.value = socialValue;
+//                socialProfile.label = socialLabel;
+//                socialProfile.type = SocialProfile.SocialProfileType.values()[socialType];
+//                socialProfile.localizedLabel = ContactsContract.CommonDataKinds.Im.getTypeLabel(mContext.getResources(), socialType, socialLabel).toString();
+//                socialProfile.setSocialProtocol(SocialProfile.SocialProfileProtocol.values()[socialProtocol + 1]);
+//                socialProfile.localizedProtocol = ContactsContract.CommonDataKinds.Im.getProtocolLabel(mContext.getResources(), socialProtocol, socialCustomProtocol).toString();
+//
+//                socialProfileArray.add(socialProfile);
+//            }
+//            socialCur.close();
+//            return socialProfileArray;
+//        }
+//
+//        return null;
+//    }
 
     private ArrayList<WebSite> traverseWebSiteByID(Integer ID) {
 
@@ -427,7 +427,7 @@ public class ContactHelper {
         contact.postalAddresses = traversePostalAddressByID(ID);
 
         // Fetch Social
-        contact.socialProfiles = traverseSocialProfileByID(ID);
+//        contact.socialProfiles = traverseSocialProfileByID(ID);
 
         // Fetch URL
         contact.webSites = traverseWebSiteByID(ID);
@@ -855,58 +855,58 @@ public class ContactHelper {
     /**
      * Social Profile
      * */
-    private ContentProviderOperation insertSocialProfileForContact(SocialProfile socialProfile, int rawContactID) {
-
-        if (socialProfile != null && socialProfile.value != null) {
-
-            ContentValues values = new ContentValues();
-            values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE);
-
-            values.put(ContactsContract.CommonDataKinds.Im.DATA, socialProfile.value);
-
-            if (socialProfile.type == null) {
-                socialProfile.type = SocialProfile.SocialProfileType.TYPE_HOME;
-            }
-            values.put(ContactsContract.CommonDataKinds.Im.TYPE, socialProfile.type.ordinal());
-
-            if (socialProfile.type == SocialProfile.SocialProfileType.TYPE_CUSTOM && socialProfile.localizedLabel != null) {
-                values.put(ContactsContract.CommonDataKinds.Im.LABEL, socialProfile.localizedLabel);
-            }
-
-            int protocol = socialProfile.getImProtocol();
-            values.put(ContactsContract.CommonDataKinds.Im.PROTOCOL, protocol);
-            if (protocol == ContactsContract.CommonDataKinds.Im.PROTOCOL_CUSTOM && socialProfile.localizedProtocol != null) {
-                values.put(ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL, socialProfile.localizedProtocol);
-            }
-
-            return ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
-                    .withValueBackReference(ContactsContract.CommonDataKinds.Im.RAW_CONTACT_ID, rawContactID)
-                    .withValues(values)
-                    .build();
-        }
-        return null;
-    }
-
-    private ArrayList<ContentProviderOperation> insertSocialProfiles(ArrayList<SocialProfile> socialProfiles) {
-
-        if (socialProfiles != null && socialProfiles.size() > 0) {
-
-            ArrayList<ContentProviderOperation> ops = new ArrayList<>();
-
-            for (SocialProfile socialProfile : socialProfiles) {
-
-                if (socialProfile.value != null) {
-                    ops.add(insertSocialProfileForContact(socialProfile, 0));
-                }
-
-            }
-
-            return ops;
-
-        }
-
-        return null;
-    }
+//    private ContentProviderOperation insertSocialProfileForContact(SocialProfile socialProfile, int rawContactID) {
+//
+//        if (socialProfile != null && socialProfile.value != null) {
+//
+//            ContentValues values = new ContentValues();
+//            values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE);
+//
+//            values.put(ContactsContract.CommonDataKinds.Im.DATA, socialProfile.value);
+//
+//            if (socialProfile.type == null) {
+//                socialProfile.type = SocialProfile.SocialProfileType.TYPE_HOME;
+//            }
+//            values.put(ContactsContract.CommonDataKinds.Im.TYPE, socialProfile.type.ordinal());
+//
+//            if (socialProfile.type == SocialProfile.SocialProfileType.TYPE_CUSTOM && socialProfile.localizedLabel != null) {
+//                values.put(ContactsContract.CommonDataKinds.Im.LABEL, socialProfile.localizedLabel);
+//            }
+//
+//            int protocol = socialProfile.getImProtocol();
+//            values.put(ContactsContract.CommonDataKinds.Im.PROTOCOL, protocol);
+//            if (protocol == ContactsContract.CommonDataKinds.Im.PROTOCOL_CUSTOM && socialProfile.localizedProtocol != null) {
+//                values.put(ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL, socialProfile.localizedProtocol);
+//            }
+//
+//            return ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
+//                    .withValueBackReference(ContactsContract.CommonDataKinds.Im.RAW_CONTACT_ID, rawContactID)
+//                    .withValues(values)
+//                    .build();
+//        }
+//        return null;
+//    }
+
+//    private ArrayList<ContentProviderOperation> insertSocialProfiles(ArrayList<SocialProfile> socialProfiles) {
+//
+//        if (socialProfiles != null && socialProfiles.size() > 0) {
+//
+//            ArrayList<ContentProviderOperation> ops = new ArrayList<>();
+//
+//            for (SocialProfile socialProfile : socialProfiles) {
+//
+//                if (socialProfile.value != null) {
+//                    ops.add(insertSocialProfileForContact(socialProfile, 0));
+//                }
+//
+//            }
+//
+//            return ops;
+//
+//        }
+//
+//        return null;
+//    }
 
     /**
      * Website
@@ -1029,11 +1029,11 @@ public class ContactHelper {
                         operations.addAll(addressOps);
                     }
 
-                    // insert social profile
-                    ArrayList<ContentProviderOperation> socialProfileOps = insertSocialProfiles(contact.socialProfiles);
-                    if (socialProfileOps != null && socialProfileOps.size() > 0) {
-                        operations.addAll(socialProfileOps);
-                    }
+//                    // insert social profile
+//                    ArrayList<ContentProviderOperation> socialProfileOps = insertSocialProfiles(contact.socialProfiles);
+//                    if (socialProfileOps != null && socialProfileOps.size() > 0) {
+//                        operations.addAll(socialProfileOps);
+//                    }
 
                     // insert url
                     ArrayList<ContentProviderOperation> urlOps = insertWebSites(contact.webSites);
@@ -1116,12 +1116,14 @@ public class ContactHelper {
                         PostalAddress postalAddress = (PostalAddress)element;
                         op = insertPostalAddressForContact(postalAddress, contact.getID());
 
-                    } else if (element instanceof SocialProfile) {
-
-                        SocialProfile socialProfile = (SocialProfile)element;
-                        op = insertSocialProfileForContact(socialProfile, contact.getID());
-
-                    } else if (element instanceof WebSite) {
+                    }
+//                    else if (element instanceof SocialProfile) {
+//
+//                        SocialProfile socialProfile = (SocialProfile)element;
+//                        op = insertSocialProfileForContact(socialProfile, contact.getID());
+//
+//                    }
+                    else if (element instanceof WebSite) {
 
                         WebSite web = (WebSite)element;
                         op = insertWebSiteForContact(web, contact.getID());
@@ -1637,23 +1639,23 @@ public class ContactHelper {
                 }
             }
 
-            // update social profile
-            if (contact.socialProfiles != null && contact.socialProfiles.size() > 0) {
-                for (SocialProfile socialProfile : contact.socialProfiles) {
-
-                    ContentProviderOperation socialProfileOp;
-                    if (socialProfile.getId().intValue() != BaseElement.NEW_ELEMENT_ID.intValue()) {
-
-                        socialProfileOp = updateSocialProfile(socialProfile);
-                    } else {
-                        socialProfileOp = insertSocialProfileForContact(socialProfile, contact.getID());
-                    }
-
-                    if (socialProfileOp != null) {
-                        operations.add(socialProfileOp);
-                    }
-                }
-            }
+//            // update social profile
+//            if (contact.socialProfiles != null && contact.socialProfiles.size() > 0) {
+//                for (SocialProfile socialProfile : contact.socialProfiles) {
+//
+//                    ContentProviderOperation socialProfileOp;
+//                    if (socialProfile.getId().intValue() != BaseElement.NEW_ELEMENT_ID.intValue()) {
+//
+//                        socialProfileOp = updateSocialProfile(socialProfile);
+//                    } else {
+//                        socialProfileOp = insertSocialProfileForContact(socialProfile, contact.getID());
+//                    }
+//
+//                    if (socialProfileOp != null) {
+//                        operations.add(socialProfileOp);
+//                    }
+//                }
+//            }
 
             // update url
             if (contact.webSites != null && contact.webSites.size() > 0) {

+ 38 - 39
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/contactkit/ContactUIHelper.java

@@ -15,7 +15,6 @@ import com.usai.redant.rautils.contactkit.element.Organization;
 import com.usai.redant.rautils.contactkit.element.PhoneNumber;
 import com.usai.redant.rautils.contactkit.element.Photo;
 import com.usai.redant.rautils.contactkit.element.PostalAddress;
-import com.usai.redant.rautils.contactkit.element.SocialProfile;
 import com.usai.redant.rautils.contactkit.element.WebSite;
 
 import java.util.ArrayList;
@@ -216,34 +215,34 @@ public class ContactUIHelper {
     /**
      * Social Profile
      * */
-    private static ContentValues valuesForSocialProfile(SocialProfile socialProfile) {
-
-        if (socialProfile != null && socialProfile.value != null) {
-
-            ContentValues values = new ContentValues();
-            values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE);
-
-            values.put(ContactsContract.CommonDataKinds.Im.DATA, socialProfile.value);
-
-            if (socialProfile.type == null) {
-                socialProfile.type = SocialProfile.SocialProfileType.TYPE_HOME;
-            }
-            values.put(ContactsContract.CommonDataKinds.Im.TYPE, socialProfile.type.ordinal());
-
-            if (socialProfile.type == SocialProfile.SocialProfileType.TYPE_CUSTOM && socialProfile.localizedLabel != null) {
-                values.put(ContactsContract.CommonDataKinds.Im.LABEL, socialProfile.localizedLabel);
-            }
-
-            int protocol = socialProfile.getImProtocol();
-            values.put(ContactsContract.CommonDataKinds.Im.PROTOCOL, protocol);
-            if (protocol == ContactsContract.CommonDataKinds.Im.PROTOCOL_CUSTOM && socialProfile.localizedProtocol != null) {
-                values.put(ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL, socialProfile.localizedProtocol);
-            }
-
-            return values;
-        }
-        return null;
-    }
+//    private static ContentValues valuesForSocialProfile(SocialProfile socialProfile) {
+//
+//        if (socialProfile != null && socialProfile.value != null) {
+//
+//            ContentValues values = new ContentValues();
+//            values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE);
+//
+//            values.put(ContactsContract.CommonDataKinds.Im.DATA, socialProfile.value);
+//
+//            if (socialProfile.type == null) {
+//                socialProfile.type = SocialProfile.SocialProfileType.TYPE_HOME;
+//            }
+//            values.put(ContactsContract.CommonDataKinds.Im.TYPE, socialProfile.type.ordinal());
+//
+//            if (socialProfile.type == SocialProfile.SocialProfileType.TYPE_CUSTOM && socialProfile.localizedLabel != null) {
+//                values.put(ContactsContract.CommonDataKinds.Im.LABEL, socialProfile.localizedLabel);
+//            }
+//
+//            int protocol = socialProfile.getImProtocol();
+//            values.put(ContactsContract.CommonDataKinds.Im.PROTOCOL, protocol);
+//            if (protocol == ContactsContract.CommonDataKinds.Im.PROTOCOL_CUSTOM && socialProfile.localizedProtocol != null) {
+//                values.put(ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL, socialProfile.localizedProtocol);
+//            }
+//
+//            return values;
+//        }
+//        return null;
+//    }
 
     /**
      * Website
@@ -370,16 +369,16 @@ public class ContactUIHelper {
                     }
                 }
 
-                if (contact.socialProfiles != null && contact.socialProfiles.size() > 0) {
-
-                    for (SocialProfile socialProfile : contact.socialProfiles) {
-
-                        ContentValues socialProfileValues = valuesForSocialProfile(socialProfile);
-                        if (socialProfileValues != null) {
-                            data.add(socialProfileValues);
-                        }
-                    }
-                }
+//                if (contact.socialProfiles != null && contact.socialProfiles.size() > 0) {
+//
+//                    for (SocialProfile socialProfile : contact.socialProfiles) {
+//
+//                        ContentValues socialProfileValues = valuesForSocialProfile(socialProfile);
+//                        if (socialProfileValues != null) {
+//                            data.add(socialProfileValues);
+//                        }
+//                    }
+//                }
 
                 if (contact.webSites != null && contact.webSites.size() > 0) {
 

+ 3 - 3
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/location/SystemLocation.java

@@ -8,12 +8,12 @@ import android.content.pm.PackageManager;
 import android.location.Location;
 import android.location.LocationListener;
 import android.location.LocationManager;
-import android.os.Bundle;
 import android.provider.Settings;
-import androidx.core.app.ActivityCompat;
-import androidx.appcompat.app.AlertDialog;
 import android.util.Log;
 
+import androidx.appcompat.app.AlertDialog;
+import androidx.core.app.ActivityCompat;
+
 public class SystemLocation {
 
     private Context mCtx;

+ 89 - 2
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/operationqueue/OperationQueue.java

@@ -1,7 +1,11 @@
 package com.usai.redant.rautils.operationqueue;
 
 import android.os.AsyncTask;
+import android.os.Build;
+import android.os.Handler;
+import android.os.Looper;
 
+import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -33,8 +37,91 @@ public class OperationQueue {
 
     public void addOperationTask(OperationBackgroundCallBack backgroundCallBack, OperationCompletionCallBack completion, OperationCancelCallBack cancelCallBack) {
 
-        OperationTask task = new OperationTask(backgroundCallBack,completion,cancelCallBack);
-        task.executeOnExecutor(limitedTaskExecutor);
+        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
+        {
+            OperationTaskNew task = new OperationTaskNew(backgroundCallBack, completion, cancelCallBack);
+            task.executeOnExecutor(limitedTaskExecutor);
+        }
+        else
+        {
+            OperationTask task = new OperationTask(backgroundCallBack, completion, cancelCallBack);
+            task.executeOnExecutor(limitedTaskExecutor);
+        }
+
+
+    }
+
+    private static class OperationTaskNew {
+
+        private OperationBackgroundCallBack mBackgroundCallBack;
+        private OperationCompletionCallBack mCompletion;
+        private OperationCancelCallBack mCancelCallBack;
+
+        OperationTaskNew(OperationBackgroundCallBack backgroundCallBack, OperationCompletionCallBack completion, OperationCancelCallBack cancelCallBack) {
+            mBackgroundCallBack = backgroundCallBack;
+            mCompletion = completion;
+            mCancelCallBack = cancelCallBack;
+        }
+
+        //        ExecutorService executor = Executors.newSingleThreadExecutor();
+        Handler handler = new Handler(Looper.getMainLooper());
+
+        Object o=null;
+        public final void executeOnExecutor(Executor exec)
+        {
+
+//            Handler handler = new Handler(Looper.getMainLooper());
+
+            exec.execute(new Runnable() {
+                @Override
+                public void run() {
+
+                    //背景處理邏輯程式區塊
+                    if (mBackgroundCallBack != null) {
+                        o= mBackgroundCallBack.operationDoInBackground();
+                    }
+                    handler.post(new Runnable() {
+                        @Override
+                        public void run() {
+                            //處理 UI 邏輯程式區塊
+
+                            if (mCompletion != null) {
+                                mCompletion.operationCompletion(o);
+                            }
+                        }
+                    });
+                }
+            });
+        }
+
+
+
+
+        protected Object doInBackground(Void... voids) {
+
+            if (mBackgroundCallBack != null) {
+                return mBackgroundCallBack.operationDoInBackground();
+            }
+
+            return null;
+        }
+
+
+        protected void onPostExecute(Object object) {
+
+            if (mCompletion != null) {
+                mCompletion.operationCompletion(object);
+            }
+        }
+//
+//        @Override
+//        protected void onCancelled() {
+//            super.onCancelled();
+//
+//            if (mCancelCallBack != null) {
+//                mCancelCallBack.operationCancelled();
+//            }
+//        }
     }
 
     private class OperationTask extends AsyncTask<Void, Void, Object> {

+ 157 - 119
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/service/RAService.java

@@ -101,12 +101,12 @@ public abstract class RAService extends Service {
             {
 
 
-                ConnectivityManager connManager = (ConnectivityManager) RAService.this.getSystemService(Context.CONNECTIVITY_SERVICE);
+//                ConnectivityManager connManager = (ConnectivityManager) RAService.this.getSystemService(Context.CONNECTIVITY_SERVICE);
 
-                NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
-                if (networkInfo == null) {
-                    dbgUtil.Logd("Current Network info","can not get Active NetworkInfo!");
-                }
+//                NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
+//                if (networkInfo == null) {
+//                    dbgUtil.Logd("Current Network info","can not get Active NetworkInfo!");
+//                }
 
                 if (uploadManager != null) {
                     uploadManager.networkStateConnect();
@@ -147,12 +147,12 @@ public abstract class RAService extends Service {
             {
 
 
-                ConnectivityManager connManager = (ConnectivityManager) RAService.this.getSystemService(Context.CONNECTIVITY_SERVICE);
+//                ConnectivityManager connManager = (ConnectivityManager) RAService.this.getSystemService(Context.CONNECTIVITY_SERVICE);
 
-                NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
-                if (networkInfo == null) {
-                    dbgUtil.Logd("Current Network info","can not get Active NetworkInfo!");
-                }
+//                NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
+//                if (networkInfo == null) {
+//                    dbgUtil.Logd("Current Network info","can not get Active NetworkInfo!");
+//                }
 
                 if (uploadManager != null) {
                     uploadManager.networkStateDisconnect();
@@ -833,6 +833,7 @@ public abstract class RAService extends Service {
         super.onDestroy();
     }
 
+
     private BroadcastReceiver uploadReceiver = new RABroadcastReceiver() {
 
         public void onReceive(Context context, Intent intent) {
@@ -845,33 +846,53 @@ public abstract class RAService extends Service {
 
             if (RABroadcast.ACTION_UPLOAD_ADD_TASK.equals(action)) {
 
-                ArrayList<Bundle> tasks = intent.getParcelableArrayListExtra("tasks");
+                ArrayList<Bundle> tasks = null;
+
+
+
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)
+                {
+                    tasks = intent.getParcelableArrayListExtra("tasks", Bundle.class);
+                }
+                else
+                {
+
+                    tasks = intent.getParcelableArrayListExtra("tasks");
+                }
 
 
                 uploadManager.addTasks(tasks);
             }
-//            else if ("REDANT.RAImage.SAVE_TASK".equals(action)) {
-//                uploadManager.stopAllTasks();
-//            }
-//            else if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
-//
+
+
+
+        }
+    };
+
+
+
+//    private BroadcastReceiver uploadReceiver = new RABroadcastReceiver() {
 //
-//                ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+//        public void onReceive(Context context, Intent intent) {
+//            String action = intent
+//                    .getAction();
 //
-//                NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
-//                if (networkInfo == null) {
-//                    dbgUtil.Logd("Current Network info","can not get Active NetworkInfo!");
-//                }
+//            Log.d(TAG, "onReceive: " + action);
+//            dbgUtil.fileLog(context,TAG+"   RABroadcastReceiver: onReceive  " + action);
+//            // 如果捕捉到的action是ACTION_BATTERY_CHANGED
 //
-//                if (uploadManager != null) {
-//                    uploadManager.networkStateChanged(networkInfo);
-//                }
+//            if (RABroadcast.ACTION_UPLOAD_ADD_TASK.equals(action)) {
 //
-////                if (reachabilityCallback != null) {
-////                    reachabilityCallback.networkStateChanged(networkInfo);
-////                }
+//                ArrayList<Bundle> tasks = intent.getParcelableArrayListExtra("tasks");
 //
 //
+//                uploadManager.addTasks(tasks);
+//            }
+////            else if ("REDANT.RAImage.SAVE_TASK".equals(action)) {
+////                uploadManager.stopAllTasks();
+////            }
+////            else if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
+////
 ////
 ////                ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
 ////
@@ -879,112 +900,129 @@ public abstract class RAService extends Service {
 ////                if (networkInfo == null) {
 ////                    dbgUtil.Logd("Current Network info","can not get Active NetworkInfo!");
 ////                }
+////
+////                if (uploadManager != null) {
+////                    uploadManager.networkStateChanged(networkInfo);
+////                }
+////
+//////                if (reachabilityCallback != null) {
+//////                    reachabilityCallback.networkStateChanged(networkInfo);
+//////                }
+////
+////
+//////
+//////                ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+//////
+//////                NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
+//////                if (networkInfo == null) {
+//////                    dbgUtil.Logd("Current Network info","can not get Active NetworkInfo!");
+//////                }
+////
+////
+////
+////                if (reachabilityCallback != null) {
+////
+////
+////                    boolean bavailable= Network.isNetworkAvailable((Application) context.getApplicationContext());//RATask3Notifiacation.this.isNetworkAvailable((Application) context.getApplicationContext());
+////                    if(bavailable)
+////                    {
+////                        reachabilityCallback.networkStateConnect();
+////                    }
+////                    else
+////                    {
+////                        reachabilityCallback.networkStateDisconnect();
+////                    }
+//////                    reachabilityCallback.networkStateChanged(networkInfo);
+////                }
+////
+////            }
 //
+//            //=============去掉 servicelocation==================
+////            else
+////                if (RABroadcast.ACTION_LOCATION_ENABLE_TRACING.equals(action)) {
+////                enable_locationTracing();
+////            } else
+////                if (RABroadcast.ACTION_LOCATION_DISABLE_TRACING
+////                    .equals(action)) {
+////
+////                disable_locationTracing();
+////            } else
+////                if (RABroadcast.ACTION_LOCATION_REQUEST_LOCATION
+////                    .equals(action)) {
+////
+////
+////                String receiverID = intent.getStringExtra("receiverID");
+//////                locationManager.requestSingleUpdate();
+////                request_location(receiverID);
+//////                locationCallback.onLocationChanged();
+////            }
+//            /*
+//            else if (RABroadcast.ACTION_PUSHNOTIFICATION_CHECK.equals(action)) {
 //
+//                // 重复定时任务
 //
-//                if (reachabilityCallback != null) {
+////                Intent iAlarm = new Intent(RAService.this, RABroadcastReceiver.class);
+////        iAlarm.putExtra("caller", caller);
+//                Intent iAlarm = new Intent(RABroadcast.ACTION_PUSHNOTIFICATION_CHECK);
+////                iAlarm.setAction(RABroadcast.ACTION_PUSHNOTIFICATION_CHECK);
+//                PendingIntent sender = PendingIntent.getBroadcast(RAService.this, 0,
+//                        iAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
 //
 //
-//                    boolean bavailable= Network.isNetworkAvailable((Application) context.getApplicationContext());//RATask3Notifiacation.this.isNetworkAvailable((Application) context.getApplicationContext());
-//                    if(bavailable)
-//                    {
-//                        reachabilityCallback.networkStateConnect();
-//                    }
-//                    else
-//                    {
-//                        reachabilityCallback.networkStateDisconnect();
-//                    }
-////                    reachabilityCallback.networkStateChanged(networkInfo);
+//
+//                AlarmManager am = (AlarmManager) RAService.this.getSystemService(
+//                        Context.ALARM_SERVICE);
+//
+//
+//                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+//                    am.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + pushcheck_timeInterval, sender);
+//                } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+//                    am.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + pushcheck_timeInterval, sender);
 //                }
 //
+////                Log.d(TAG, "onReceive: " + RABroadcast.ACTION_PUSHNOTIFICATION_CHECK);
+//                checkpush(context);
 //            }
-
-            //=============去掉 servicelocation==================
-//            else
-//                if (RABroadcast.ACTION_LOCATION_ENABLE_TRACING.equals(action)) {
-//                enable_locationTracing();
-//            } else
-//                if (RABroadcast.ACTION_LOCATION_DISABLE_TRACING
-//                    .equals(action)) {
 //
-//                disable_locationTracing();
-//            } else
-//                if (RABroadcast.ACTION_LOCATION_REQUEST_LOCATION
+//            else if (RABroadcast.ACTION_PUSHNOTIFICATION_ENABLE_CHECK
 //                    .equals(action)) {
 //
+//                String tag = "onReceive@Alarmreceiver";
+////                Log.i( tag, "receive alarm broadcast caller =="
+////                        + intent.getStringExtra("caller"));
 //
-//                String receiverID = intent.getStringExtra("receiverID");
-////                locationManager.requestSingleUpdate();
-//                request_location(receiverID);
-////                locationCallback.onLocationChanged();
+//                startalarm();
+//
+////                checkpush(context);
+//
+////                if (SystemClock.elapsedRealtime()
+////                        - ApexTrackingApplication.getLastCheckMessageTime() > 120000)
+////                {
+////                    Log.i(tag, "check messsage");
+////                    ApexTrackingApplication.UpdateLastCheckMessageTime();
+////                    checkpush(context);
+////
+////                }
 //            }
-            /*
-            else if (RABroadcast.ACTION_PUSHNOTIFICATION_CHECK.equals(action)) {
-
-                // 重复定时任务
-
-//                Intent iAlarm = new Intent(RAService.this, RABroadcastReceiver.class);
-//        iAlarm.putExtra("caller", caller);
-                Intent iAlarm = new Intent(RABroadcast.ACTION_PUSHNOTIFICATION_CHECK);
-//                iAlarm.setAction(RABroadcast.ACTION_PUSHNOTIFICATION_CHECK);
-                PendingIntent sender = PendingIntent.getBroadcast(RAService.this, 0,
-                        iAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
-
-
-
-                AlarmManager am = (AlarmManager) RAService.this.getSystemService(
-                        Context.ALARM_SERVICE);
-
-
-                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
-                    am.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + pushcheck_timeInterval, sender);
-                } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
-                    am.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + pushcheck_timeInterval, sender);
-                }
-
-//                Log.d(TAG, "onReceive: " + RABroadcast.ACTION_PUSHNOTIFICATION_CHECK);
-                checkpush(context);
-            }
-
-            else if (RABroadcast.ACTION_PUSHNOTIFICATION_ENABLE_CHECK
-                    .equals(action)) {
-
-                String tag = "onReceive@Alarmreceiver";
-//                Log.i( tag, "receive alarm broadcast caller =="
-//                        + intent.getStringExtra("caller"));
-
-                startalarm();
-
-//                checkpush(context);
-
-//                if (SystemClock.elapsedRealtime()
-//                        - ApexTrackingApplication.getLastCheckMessageTime() > 120000)
-//                {
-//                    Log.i(tag, "check messsage");
-//                    ApexTrackingApplication.UpdateLastCheckMessageTime();
-//                    checkpush(context);
 //
-//                }
-            }
-
-            else if (RABroadcast.ACTION_PUSHNOTIFICATION_DISABLE_CHECK
-                    .equals(action)) {
-                if (m_task != null)
-                    m_task.cancel(true);
-//                NotificationManager nManager = (NotificationManager) context
-//                        .getSystemService(Context.NOTIFICATION_SERVICE);
-//                nManager.cancel(R.layout.activity_apex);
-                cancelalarm();
-                // ApexTrackingApplication.put_password("");
-                // ApexTrackingApplication.put_sessionid("");
-                // ApexTrackingApplication.put_user("");
-//                ApexTrackingApplication.logout();
-            }
-            */
-
-
-        }
-    };
+//            else if (RABroadcast.ACTION_PUSHNOTIFICATION_DISABLE_CHECK
+//                    .equals(action)) {
+//                if (m_task != null)
+//                    m_task.cancel(true);
+////                NotificationManager nManager = (NotificationManager) context
+////                        .getSystemService(Context.NOTIFICATION_SERVICE);
+////                nManager.cancel(R.layout.activity_apex);
+//                cancelalarm();
+//                // ApexTrackingApplication.put_password("");
+//                // ApexTrackingApplication.put_sessionid("");
+//                // ApexTrackingApplication.put_user("");
+////                ApexTrackingApplication.logout();
+//            }
+//            */
+//
+//
+//        }
+//    };
 
 //    private void startalarm()
 //

+ 61 - 31
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/service/RATask3Notifiacation.java

@@ -8,6 +8,7 @@ import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.net.ConnectivityManager;
+import android.os.Build;
 import android.text.TextUtils;
 import android.util.Log;
 
@@ -27,50 +28,79 @@ public class RATask3Notifiacation extends RATask3 {
     protected static final int NOTIFICATION_TYPE_SILENCECOMMAND = 1;
     protected boolean enable_pushNotification = false;
 //    private ReachabilityCallback reachabilityCallback;
+
     private BroadcastReceiver uploadReceiver = new RABroadcastReceiver() {
 
         public void onReceive(Context context, Intent intent) {
             String action = intent
                     .getAction();
-
             Log.d(TAG, "onReceive: " + action);
             dbgUtil.fileLog(context,TAG+"   RABroadcastReceiver: onReceive  " + action);
             // 如果捕捉到的action是ACTION_BATTERY_CHANGED
-
-
-             if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
-
-
-//                ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
-//
-//                NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
-//                if (networkInfo == null) {
-//                    dbgUtil.Logd("Current Network info","can not get Active NetworkInfo!");
-//                }
-
-
-
-                if (reachabilityCallback != null) {
-
-
-                    boolean bavailable= Network.isNetworkAvailable((Application) context.getApplicationContext()); //RATask3Notifiacation.this.isNetworkAvailable((Application) context.getApplicationContext());
-                    if(bavailable)
-                    {
-                        reachabilityCallback.networkStateConnect();
+            if (Build.VERSION.SDK_INT <=28) {
+                if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
+                    if (reachabilityCallback != null) {
+                        boolean bavailable= Network.isNetworkAvailable((Application) context.getApplicationContext()); //RATask3Notifiacation.this.isNetworkAvailable((Application) context.getApplicationContext());
+                        if(bavailable)
+                        {
+                            reachabilityCallback.networkStateConnect();
+                        }
+                        else
+                        {
+                            reachabilityCallback.networkStateDisconnect();
+                        }
                     }
-                    else
-                    {
-                        reachabilityCallback.networkStateDisconnect();
-                    }
-//                    reachabilityCallback.networkStateChanged(networkInfo);
-                }
 
+                }
             }
-
-
-
         }
     };
+
+
+//    private BroadcastReceiver uploadReceiver = new RABroadcastReceiver() {
+//
+//        public void onReceive(Context context, Intent intent) {
+//            String action = intent
+//                    .getAction();
+//
+//            Log.d(TAG, "onReceive: " + action);
+//            dbgUtil.fileLog(context,TAG+"   RABroadcastReceiver: onReceive  " + action);
+//            // 如果捕捉到的action是ACTION_BATTERY_CHANGED
+//
+//
+//             if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
+//
+//
+////                ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+////
+////                NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
+////                if (networkInfo == null) {
+////                    dbgUtil.Logd("Current Network info","can not get Active NetworkInfo!");
+////                }
+//
+//
+//
+//                if (reachabilityCallback != null) {
+//
+//
+//                    boolean bavailable= Network.isNetworkAvailable((Application) context.getApplicationContext()); //RATask3Notifiacation.this.isNetworkAvailable((Application) context.getApplicationContext());
+//                    if(bavailable)
+//                    {
+//                        reachabilityCallback.networkStateConnect();
+//                    }
+//                    else
+//                    {
+//                        reachabilityCallback.networkStateDisconnect();
+//                    }
+////                    reachabilityCallback.networkStateChanged(networkInfo);
+//                }
+//
+//            }
+//
+//
+//
+//        }
+//    };
     private ServicePushNotification pushNotificationCallback = null;
 
     public interface ServicePushNotification {

+ 55 - 42
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/service/RATask3Upload.java

@@ -1,18 +1,17 @@
 package com.usai.redant.rautils.service;
 
-import android.app.Application;
 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;
 
+import androidx.core.content.IntentCompat;
+
 import com.usai.redant.rautils.receiver.RABroadcast;
 import com.usai.redant.rautils.receiver.RABroadcastReceiver;
 import com.usai.redant.rautils.upload.RAUploadManager;
-import com.usai.redant.rautils.utils.Network;
 import com.usai.redant.rautils.utils.dbgUtil;
 
 import java.util.ArrayList;
@@ -36,54 +35,68 @@ public class RATask3Upload extends RATask3{
 
             if (RABroadcast.ACTION_UPLOAD_ADD_TASK.equals(action)) {
 
-                ArrayList<Bundle> tasks = intent.getParcelableArrayListExtra("tasks");
 
+                ArrayList<Bundle> tasks=null;
+
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)
+                {
+                    tasks = intent.getParcelableArrayListExtra("tasks", Bundle.class);
+                }
+                else
+                {
+//                    tasks = intent.getParcelableArrayListExtra("tasks");
+
+
+                    tasks = IntentCompat.getParcelableArrayListExtra(intent, "tasks", Bundle.class);
+
+                }
 
                 uploadManager.addTasks(tasks);
             }
 //            else if ("REDANT.RAImage.SAVE_TASK".equals(action)) {
 //                uploadManager.stopAllTasks();
 //            }
-            else if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
-
-
-//                ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+//            else if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
+//
 //
-//                NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
-//                if (networkInfo == null) {
-//                    dbgUtil.Logd("Current Network info","can not get Active NetworkInfo!");
+////                ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+////
+////                NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
+////                if (networkInfo == null) {
+////                    dbgUtil.Logd("Current Network info","can not get Active NetworkInfo!");
+////                }
+//                boolean bavailable= Network.isNetworkAvailable((Application) context.getApplicationContext());
+//                if (uploadManager != null) {
+////                    uploadManager.networkStateChanged(networkInfo);
+//
+//                    if(bavailable)
+//                    {
+//                        uploadManager.networkStateConnect();
+//                    }
+//                    else
+//                    {
+//                        uploadManager.networkStateDisconnect();
+//                    }
 //                }
-                boolean bavailable= Network.isNetworkAvailable((Application) context.getApplicationContext());
-                if (uploadManager != null) {
-//                    uploadManager.networkStateChanged(networkInfo);
-
-                    if(bavailable)
-                    {
-                        uploadManager.networkStateConnect();
-                    }
-                    else
-                    {
-                        uploadManager.networkStateDisconnect();
-                    }
-                }
-
-
-                if (reachabilityCallback != null) {
-
-
-                    //RATask3Upload.this.isNetworkAvailable((Application) context.getApplicationContext());
-                   if(bavailable)
-                   {
-                       reachabilityCallback.networkStateConnect();
-                   }
-                   else
-                   {
-                       reachabilityCallback.networkStateDisconnect();
-                   }
-//                    reachabilityCallback.networkStateChanged(networkInfo);
-                }
-
-            }else
+//
+//
+//                if (reachabilityCallback != null) {
+//
+//
+//                    //RATask3Upload.this.isNetworkAvailable((Application) context.getApplicationContext());
+//                   if(bavailable)
+//                   {
+//                       reachabilityCallback.networkStateConnect();
+//                   }
+//                   else
+//                   {
+//                       reachabilityCallback.networkStateDisconnect();
+//                   }
+////                    reachabilityCallback.networkStateChanged(networkInfo);
+//                }
+//
+//            }
+            else
             if (action.equals(RAUploadManager.UPLOAD_COUNT_CHANGED_NOTIFICATION)) {
 
                 Log.e(TAG, "onReceive: com.usai.upload.count.change.notification" );

+ 86 - 59
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/upload/TaskActivity.java

@@ -3,7 +3,6 @@ package com.usai.redant.rautils.upload;
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.Gravity;
@@ -19,7 +18,7 @@ import androidx.annotation.Nullable;
 
 import com.usai.redant.rautils.R;
 import com.usai.redant.rautils.application.RedantApplication;
-import com.usai.redant.rautils.utils.dbgUtil;
+import com.usai.redant.rautils.utils.Network;
 //import com.usai.service.RAImageBackgroundService3;
 //import com.usai.util.dbgUtil;
 
@@ -122,74 +121,99 @@ public class TaskActivity extends UploadListActivity {
 
                     ConnectivityManager connManager = (ConnectivityManager) RedantApplication.getInstance().getSystemService(Context.CONNECTIVITY_SERVICE);
 
-                    NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
-                    if (networkInfo == null)
+//                    NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
+//                    if (networkInfo == null)
+//                    {
+//                        dbgUtil.Logd(
+//                                "Current Network info",
+//                                "can not get Active NetworkInfo!");
+////                                canstart = false;
+//                        Toast toast = Toast.makeText(getApplicationContext(),
+//                                "No available network. Please try upload manually later.",
+//                                Toast.LENGTH_LONG);
+//                        toast.setGravity(Gravity.CENTER, 0, 0);
+//                        toast.show();
+//                        return;
+//                    }
+//                    else
+//                    {
+//                        NetworkInfo.State netState = networkInfo
+//                                .getState();
+//                        if (netState != NetworkInfo.State.CONNECTED)
+//                        {
+//
+//                            dbgUtil.Logd(
+//                                    "Current Network info",
+//                                    "not Connected!State="
+//                                            + netState);
+////                                    canstart = false;
+//
+//                            Toast toast = Toast.makeText(getApplicationContext(),
+//                                    "App network connection. Please try upload manually later.",
+//                                    Toast.LENGTH_LONG);
+//                            toast.setGravity(Gravity.CENTER, 0, 0);
+//                            toast.show();
+//                            return;
+//                        }
+//                        else
+//                        {
+//                            int iconntype = -1;
+//                            iconntype = networkInfo
+//                                    .getType();
+//
+//                            SharedPreferences pref = RedantApplication
+//                                    .getInstance()
+//                                    .getSharedPreferences(
+//                                            "UploadManager",
+//                                            0);
+//                            boolean
+//                                    wifi_only
+//                                    =pref.getBoolean("wifi_only",
+//                                    false);
+//                            if(wifi_only == true
+//                                    && iconntype !=
+//                                    ConnectivityManager.TYPE_WIFI
+//                                    && iconntype !=
+//                                    9/* earthnet */)
+//                            {
+////                                    canstart = false;
+//
+//                                Toast toast = Toast.makeText(getApplicationContext(),
+//                                        "App is set to upload via WIFI only. Please change your setting or try upload manually later.",
+//                                        Toast.LENGTH_LONG);
+//                                toast.setGravity(Gravity.CENTER, 0, 0);
+//                                toast.show();
+//                                return;
+//                            }
+//                        }
+//
+//                    }
+                    if(Network.isNetworkAvailableToast(RedantApplication.getInstance()))
                     {
-                        dbgUtil.Logd(
-                                "Current Network info",
-                                "can not get Active NetworkInfo!");
-//                                canstart = false;
-                        Toast toast = Toast.makeText(getApplicationContext(),
-                                "No available network. Please try upload manually later.",
-                                Toast.LENGTH_LONG);
-                        toast.setGravity(Gravity.CENTER, 0, 0);
-                        toast.show();
-                        return;
-                    }
-                    else
-                    {
-                        NetworkInfo.State netState = networkInfo
-                                .getState();
-                        if (netState != NetworkInfo.State.CONNECTED)
+                        Boolean bwifi=Network.isNetworkWifi(RedantApplication.getInstance());
+
+                        SharedPreferences pref = RedantApplication
+                                .getInstance()
+                                .getSharedPreferences(
+                                        "UploadManager",
+                                        0);
+                        boolean
+                                wifi_only
+                                =pref.getBoolean("wifi_only",
+                                false);
+                        if(wifi_only
+                                && !bwifi)
                         {
-
-                            dbgUtil.Logd(
-                                    "Current Network info",
-                                    "not Connected!State="
-                                            + netState);
 //                                    canstart = false;
 
                             Toast toast = Toast.makeText(getApplicationContext(),
-                                    "App network connection. Please try upload manually later.",
+                                    "App is set to upload via WIFI only. Please change your setting or try upload manually later.",
                                     Toast.LENGTH_LONG);
                             toast.setGravity(Gravity.CENTER, 0, 0);
                             toast.show();
                             return;
                         }
-                        else
-                        {
-                            int iconntype = -1;
-                            iconntype = networkInfo
-                                    .getType();
-
-                            SharedPreferences pref = RedantApplication
-                                    .getInstance()
-                                    .getSharedPreferences(
-                                            "UploadManager",
-                                            0);
-                            boolean
-                                    wifi_only
-                                    =pref.getBoolean("wifi_only",
-                                    false);
-                            if(wifi_only == true
-                                    && iconntype !=
-                                    ConnectivityManager.TYPE_WIFI
-                                    && iconntype !=
-                                    9/* earthnet */)
-                            {
-//                                    canstart = false;
-
-                                Toast toast = Toast.makeText(getApplicationContext(),
-                                        "App is set to upload via WIFI only. Please change your setting or try upload manually later.",
-                                        Toast.LENGTH_LONG);
-                                toast.setGravity(Gravity.CENTER, 0, 0);
-                                toast.show();
-                                return;
-                            }
-                        }
-
                     }
-
                     v.setVisibility(View.GONE);
                     startTask(task);
                 }
@@ -220,4 +244,7 @@ public class TaskActivity extends UploadListActivity {
         public TextView err_tv;
         public ImageButton btn_reload;
     }
+
+
+
 }

+ 15 - 4
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/upload/UploadListActivity.java

@@ -71,7 +71,7 @@ public class UploadListActivity extends AppCompatActivity {
     public void notifyDataChanged() {
 
         if (uploadManager != null && taskList != null) {
-            task_arr = (ArrayList<Bundle>) uploadManager.get_arr_queue().clone(); //uploadManager.arr_queue;
+            task_arr =new ArrayList<>(uploadManager.get_arr_queue());// (ArrayList<Bundle>) uploadManager.get_arr_queue().clone(); //uploadManager.arr_queue;
             TaskAdapter adapter = (TaskAdapter) taskList.getAdapter();
             if (adapter != null) {
                 adapter.notifyDataSetChanged();
@@ -79,6 +79,17 @@ public class UploadListActivity extends AppCompatActivity {
         }
     }
 
+//    public void notifyDataChanged() {
+//
+//        if (uploadManager != null && taskList != null) {
+//            task_arr = (ArrayList<Bundle>) uploadManager.get_arr_queue().clone(); //uploadManager.arr_queue;
+//            TaskAdapter adapter = (TaskAdapter) taskList.getAdapter();
+//            if (adapter != null) {
+//                adapter.notifyDataSetChanged();
+//            }
+//        }
+//    }
+
     private void registerBroadcastReceiver() {
 
         IntentFilter intentFilter = new IntentFilter();
@@ -166,8 +177,8 @@ public class UploadListActivity extends AppCompatActivity {
                 if (uploadManager == null) {
                     return;
                 }
-
-                task_arr = (ArrayList<Bundle>) uploadManager.get_arr_queue().clone(); //uploadManager.arr_queue;
+                task_arr = new ArrayList<Bundle>(uploadManager.get_arr_queue()) ;
+//                task_arr = (ArrayList<Bundle>) uploadManager.get_arr_queue().clone(); //uploadManager.arr_queue;
 
                 Collections.reverse(task_arr);
                 final TaskAdapter adapter = (TaskAdapter) taskList.getAdapter();
@@ -200,7 +211,7 @@ public class UploadListActivity extends AppCompatActivity {
                             runOnUiThread(new Runnable() {
                                 @Override
                                 public void run() {
-                                    task_arr = (ArrayList<Bundle>) newlist.clone();
+                                    task_arr = new ArrayList<>(newlist);//task_arr = (ArrayList<Bundle>) newlist.clone();
                                     Collections.reverse(task_arr);
                                     adapter.notifyDataSetChanged();
                                 }

+ 274 - 8
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/utils/Network.java

@@ -9,6 +9,8 @@ import android.net.NetworkCapabilities;
 import android.os.Bundle;
 import android.os.Environment;
 import android.util.Log;
+import android.view.Gravity;
+import android.widget.Toast;
 
 import org.json.JSONException;
 import org.json.JSONObject;
@@ -117,7 +119,50 @@ public class Network {
 //
 //    }
 
+    public static Boolean isNetworkAvailableToast(Application application) {
+        ConnectivityManager connectivityManager = (ConnectivityManager) application.getSystemService(Context.CONNECTIVITY_SERVICE);
+//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+
+        android.net.Network nw = connectivityManager.getActiveNetwork();
+        if (nw == null)
+        {
+            dbgUtil.Logd(
+                    "Current Network info",
+                    "can not get Active NetworkInfo!");
+//                                canstart = false;
+            Toast toast = Toast.makeText(application,
+                    "No available network. Please try upload manually later.",
+                    Toast.LENGTH_LONG);
+            toast.setGravity(Gravity.CENTER, 0, 0);
+            toast.show();
+            return false;
+        }
+
+        NetworkCapabilities actNw = connectivityManager.getNetworkCapabilities(nw);
+        Boolean b= actNw != null && (actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || actNw.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || actNw.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) || actNw.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH));
+
+        if(b==false)
+        {
+
+            dbgUtil.Logd(
+                    "Current Network info",
+                    "not Connected!");
+//                                    canstart = false;
+
+            Toast toast = Toast.makeText(application,
+                    "App network connection. Please try upload manually later.",
+                    Toast.LENGTH_LONG);
+            toast.setGravity(Gravity.CENTER, 0, 0);
+            toast.show();
+
+        }
+        return b;
 
+//        } else {
+//            NetworkInfo nwInfo = connectivityManager.getActiveNetworkInfo();
+//            return nwInfo != null && nwInfo.isConnected();
+//        }
+    }
     public static String getJson(String url, Bundle parms,int timeout)
     {
         String TAG = "net_dbg@GetJson";
@@ -162,10 +207,28 @@ public class Network {
                 }
                 else
                 {
-                    if(parms.getString(key)!=null)
-                        Log.d(TAG, "key=" + key + "    val=" + parms.getString(key).toString());
-                    else
-                        Log.e(TAG, "key=" + key + "    val=null");
+                    try{
+                        String o = parms.getString(key);
+                        if(o==null)
+                        {
+                            o = parms.get(key).toString();
+                            if(o==null)
+                                Log.e(TAG, "key=" + key + "    val=null");
+                            else
+                                Log.d(TAG, "key=" + key + "    val=" + o);
+
+                        }
+                        else
+                            Log.d(TAG, "key=" + key + "    val=" + o);
+                    }catch (Exception e)
+                    {
+
+                        int i=0;
+
+                    }
+
+
+
                 }
 
             }
@@ -256,11 +319,153 @@ public class Network {
         }
         return ret;
     }
+//    public static String getJson(String url, Bundle parms,int timeout)
+//    {
+//        String TAG = "net_dbg@GetJson";
+//        Log.d(TAG, "getJson begin");
+//        String ret=null;
+//
+//
+//
+//        HttpURLConnection connection = null;
+//
+//        try {
+//
+//
+//            URL _url;
+//            _url = new URL(url);
+//            connection = (HttpURLConnection) _url.openConnection();
+//
+////            connection.setHostnameVerifier(new HostnameVerifier() {
+////                @Override
+////                public boolean verify(String hostname, SSLSession session) {
+////                    return true;
+////                }
+////            });
+//
+//
+//            connection.setReadTimeout(timeout);
+//            connection.setConnectTimeout(timeout);
+//            // 设置请求方式
+//            connection.setRequestMethod("POST");
+//            // 设置编码格式
+//            connection.setRequestProperty("Charset", "UTF-8");
+//            // 传递自定义参数
+////			connection.setRequestProperty("MyProperty", "this is me!");
+//
+//            Set<String> keys = parms.keySet();
+//            Log.d(TAG, "================parms============");
+//            for (String key : keys)
+//            {
+//                if (key.contains("_file"))
+//                {
+//
+//                }
+//                else
+//                {
+//
+//                    Object o = parms.get(key);
+//                    if(o==null)
+//                        Log.e(TAG, "key=" + key + "    val=null");
+//                    else
+//                        Log.d(TAG, "key=" + key + "    val=" + o.toString());
+//
+//                }
+//
+//            }
+//            Log.d(TAG, "================parms============");
+//
+//            Log.d(TAG,"URL: "+url);
+//            // 设置容许输出
+//            connection.setDoInput(true);
+//            connection.setDoOutput(true);
+//
+//
+//            OutputStream os = connection.getOutputStream();
+//            BufferedWriter writer = new BufferedWriter(
+//                    new OutputStreamWriter(os, "UTF-8"));
+//            writer.write(createPostParameters(parms));
+//
+//            writer.flush();
+//            writer.close();
+//            os.close();
+//
+//            // 获取返回数据
+//            int responseCode = connection.getResponseCode();
+//
+//            Log.d(TAG, "getJson: " + "Request " + url + " Get Response Code" + responseCode);
+//
+//
+//
+//
+//            if(connection.getResponseCode() == 200){
+//                InputStream is = connection.getInputStream();
+//
+//                BufferedReader br = new BufferedReader(
+//                        new InputStreamReader(is, "utf-8"), 8);
+//                StringBuilder sb = new StringBuilder();
+//                String line = null;
+//                while ((line = br.readLine()) != null)
+//                {
+//                    sb.append(line + "\n");
+//                }
+//
+//                Log.d(TAG, "Response: content begin");
+//
+//                dbgUtil.Logd(TAG,sb.toString());
+////                Log.d(TAG, sb.toString());
+//                Log.d(TAG, "Response: content end");
+//
+//                if (sb.length() <= 0)
+//                {
+//
+//                    ret= null;
+//                }
+//                ret= sb.toString();
+//
+//                JSONObject json = new JSONObject(ret);
+//                String msg = json.optString("message");
+//                json.put("err_msg",msg);
+//                ret = json.toString();
+//            }
+//
+//        } catch (UnsupportedEncodingException e) {
+//            e.printStackTrace();
+//
+//            Log.e(TAG, e.toString());
+//
+//        } catch (ProtocolException e) {
+//            e.printStackTrace();
+//
+//            Log.e(TAG, e.toString());
+//
+//        } catch (MalformedURLException e) {
+//            e.printStackTrace();
+//
+//            Log.e(TAG, e.toString());
+//
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//
+//            Log.e(TAG, e.toString());
+//
+//        } catch (JSONException e)
+//        {
+//            e.printStackTrace();
+//        } finally {
+//
+//            if(connection!=null){
+//                connection.disconnect();
+//            }
+//        }
+//        return ret;
+//    }
 
     private static String createPostParameters(Bundle parms) throws UnsupportedEncodingException {
         StringBuilder result = new StringBuilder();
         boolean first = true;
-        for(String key : parms.keySet()){
+        for(String key : parms.keySet())
+        {
             if (first)
                 first = false;
             else
@@ -268,12 +473,65 @@ public class Network {
 
             result.append(URLEncoder.encode(key, "UTF-8"));
             result.append("=");
-            result.append(URLEncoder.encode(parms.getString(key), "UTF-8"));
+
+            String o = parms.getString(key);
+
+
+            int dbg = 9;
+
+            if(o==null )
+            {
+
+                dbg=1;
+
+//                parms.get(key);
+                o = parms.get(key).toString();
+
+                int b =0;
+
+
+            }
+
+
+            assert o != null;
+
+            if(o==null )
+            {
+
+                continue;
+            }
+//            class c = o.getClass();
+            result.append(URLEncoder.encode(o, "UTF-8"));
         }
 
         return result.toString();
     }
 
+
+//    private static String createPostParameters(Bundle parms) throws UnsupportedEncodingException {
+//        StringBuilder result = new StringBuilder();
+//        boolean first = true;
+//        for(String key : parms.keySet())
+//        {
+//            if (first)
+//                first = false;
+//            else
+//                result.append("&");
+//
+//            result.append(URLEncoder.encode(key, "UTF-8"));
+//            result.append("=");
+//
+//            Object o = parms.get(key);
+//
+//            if(o==null )
+//                continue;
+////            class c = o.getClass();
+//            result.append(URLEncoder.encode(o.toString(), "UTF-8"));
+//        }
+//
+//        return result.toString();
+//    }
+
 //    public static boolean isNetworkAvailable(Application application)// Context context)
 //    {
 //        String TAG = "net_dbg@CheckNetwork";
@@ -410,12 +668,20 @@ public class Network {
                         sb.append("Content-Type: text/plain; charset=" + CHARSET + LINE_END);
                         sb.append("Content-Transfer-Encoding: 8bit" + LINE_END);
                         sb.append(LINE_END);
-                        sb.append(params.getString(key));
+
+                        Object o = params.get(key);
+                        if(o==null)
+                            sb.append("null");
+                        else
+                            sb.append(o.toString());
+//                        sb.append(params.getString(key));
                         sb.append(LINE_END);//换行!
 
 //					connection.setRequestProperty(key, parms.get(key).toString());
+//                        Log.d(TAG, "key=" + key + "    val="
+//                                + params.getString(key));
                         Log.d(TAG, "key=" + key + "    val="
-                                + params.getString(key));
+                                + o.toString());
 
 //					reqEntity.addPart(key, new StringBody());
 

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

@@ -499,7 +499,7 @@ public class MainActivity extends AppCompatActivity implements RAWebView.WebView
         } else {
 
             // webView还未加载完,此时需要延后执行
-            new Handler().postDelayed(new Runnable() {
+            new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
                 @Override
                 public void run() {
 

+ 2 - 2
ApexDrivers/apexmap/build.gradle

@@ -3,13 +3,13 @@ plugins {
 }
 android {
 //    namespace 'redant.usai.com.apexmap'
-    compileSdk 34
+    compileSdk 35
 
 
 
     defaultConfig {
         minSdk 28
-        targetSdkVersion 34
+        targetSdkVersion 35
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
 

+ 2 - 2
ApexDrivers/build.gradle

@@ -12,7 +12,7 @@ buildscript {
         mavenCentral()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:8.1.2'
+        classpath 'com.android.tools.build:gradle:8.7.3'
 
 
         // NOTE: Do not place your application dependencies here; they belong
@@ -29,7 +29,7 @@ buildscript {
 //}
 
 plugins {
-    id 'com.android.application' version '8.1.2' apply false
+    id 'com.android.application' version '8.7.3' apply false
     id 'com.android.library' version '7.3.1' apply false
 }
 

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

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

+ 4 - 4
ApexDrivers/raimage/build.gradle

@@ -10,13 +10,13 @@ android {
 //            universalApk true
 //        }
 //    }
-    compileSdk 34
+    compileSdk 35
     defaultConfig {
         applicationId "com.usai.redant.raimage"
         minSdkVersion 28
-        targetSdkVersion 34
-        versionCode 10
-        versionName "1.22.53225"
+        targetSdkVersion 35
+        versionCode 11
+        versionName "1.24.54934"
 //        ndk.abiFilters 'armeabi-v7a',"arm64-v8a"
     }
     buildTypes {

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

@@ -1,6 +1,10 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools">
+
+    <uses-feature
+        android:name="android.hardware.camera"
+        android:required="false" />
     <queries>
         <intent>
             <action android:name="android.media.action.IMAGE_CAPTURE" />
@@ -110,7 +114,7 @@
         <!-- android:theme="@style/FullscreenTheme" /> -->
         <activity
             android:name=".ModeActivity"
-            android:theme="@style/Base.Theme.AppCompat.Light" />
+            android:theme="@style/FullscreenTheme1" />
         <activity
             android:name=".uploadSettingActivity"
             android:theme="@style/Base.Theme.AppCompat.Light" /> <!-- <activity -->
@@ -130,7 +134,7 @@
             android:name=".LActivity"
             android:exported="true"
             android:screenOrientation="portrait"
-            android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
+            android:theme="@style/Theme.AppCompat.Light">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <action android:name="android.intent.action.VIEW" />

+ 35 - 0
ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/LActivity.java

@@ -2,9 +2,15 @@ package com.usai.redant.raimage;
 
 import android.app.Activity;
 import android.content.Intent;
+import android.graphics.Insets;
 import android.os.Bundle;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowInsets;
 import android.widget.ImageView;
 
+import androidx.annotation.NonNull;
+
 public class LActivity extends Activity {
 
     @Override
@@ -12,7 +18,36 @@ public class LActivity extends Activity {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_splash);
 
+        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
+        {
+
+
+            ViewGroup c = findViewById(R.id.container_root);
+            c.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener()
+            {
+                @NonNull
+                @Override
+                public WindowInsets onApplyWindowInsets(@NonNull View view, @NonNull WindowInsets windowInsets)
+                {
+                    Insets innerPadding = null;
+
+
+
+                    innerPadding = windowInsets.getInsets(WindowInsets.Type.statusBars());
+
+                    view.setPadding(
+                            innerPadding.left,
+                            innerPadding.top,
+                            innerPadding.right,
+                            innerPadding.bottom);
+
+
+
+                    return windowInsets;
+                }
+            });
 
+        }
         ImageView iv = (ImageView) findViewById(R.id.splashImage);
         iv.setImageResource(R.drawable.splash);
 

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

@@ -1218,16 +1218,7 @@ public class MainActivity extends AppCompatActivity
             {
                 final EditText edit = new EditText(MainActivity.this);
                 String msg = "Please enter " + name;
-//                if (MainActivity.this.getClass().equals(ModelActivity.class)) { // model
-//
-//
-//                }
-//                else
-//                    if (MainActivity.this.getClass().equals(PopActivity.class))
-//                {
-//                    edit.setInputType(InputType.TYPE_CLASS_NUMBER);
-//                    msg = "Please enter PIID code";
-//                }
+
 
                 if (mode.equals("POP") || mode.equals("Returns"))
                 {
@@ -1283,15 +1274,6 @@ public class MainActivity extends AppCompatActivity
                 }
 
 
-//				Intent intent = new Intent(MainActivity.this,
-//						PhotoPreviewActivity.class);
-//				intent.putExtra("pic_list", (Serializable) photoList);
-//				startActivityForResult(intent, REQUEST_PREVIEW);
-
-//				Intent intent = new Intent(MainActivity.this,
-//						PhotoListActivity.class);
-//				intent.putExtra("pic_list", (Serializable) photoList);
-//				startActivityForResult(intent, REQUEST_PREVIEW);
 
                 Intent intent = new Intent(MainActivity.this, PhotoGridActivity.class);
                 intent.putExtra("pic_list", (Serializable) photoList);
@@ -1390,53 +1372,10 @@ public class MainActivity extends AppCompatActivity
                             })
                             .show();
                 }
-//                ConnectivityManager connManager = (ConnectivityManager) RAImageApplication.getInstance()
-//                        .getSystemService(Context.CONNECTIVITY_SERVICE);
-//
-//                NetworkInfo networkInfo = connManager
-//                        .getActiveNetworkInfo();
-//                if (networkInfo == null)
-//                {
-//                    dbgUtil.Logd(
-//                            "Current Network info",
-//                            "can not get Active NetworkInfo!");
-////					canstart = false;
-//                    new AlertDialog.Builder(MainActivity.this)
-//                            .setTitle("Warning")
-//                            .setMessage("No available network, new task will not start, you must start it manually.")
-//                            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
-//                                @Override
-//                                public void onClick(DialogInterface dialog, int which) {
-//
-//                                }
-//                            })
-//                            .show();
-//                }
+
                 else
                 {
-//                    NetworkInfo.State netState = networkInfo
-//                            .getState();
-//                    if (netState != NetworkInfo.State.CONNECTED)
-//                    {
-//                        dbgUtil.Logd(
-//                                "Current Network info",
-//                                "not Connected!State="
-//                                        + netState);
-////						canstart = false;
-//
-//                        new AlertDialog.Builder(MainActivity.this)
-//                                .setTitle("Warning")
-//                                .setMessage("No network connection, new task will not start, you must start it manually.")
-//                                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
-//                                    @Override
-//                                    public void onClick(DialogInterface dialog, int which) {
-//
-//                                    }
-//                                })
-//                                .show();
-//
-//                    }
-//                    else
+
                     {
                         boolean iswifi = com.usai.redant.rautils.utils.Network.isWifi(capabilities);
 //                        int iconntype = -1;
@@ -1476,33 +1415,11 @@ public class MainActivity extends AppCompatActivity
                     }
 
                 }
-//				if(!canstart)
-//				{
-//
 
-////                    new AlertDialog.Builder(MainActivity.this)
-////                            .setTitle("Warning")
-////                            .setMessage("App is set to upload via WIFI only. Please change your setting or try upload later.")
-////                            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
-////                                @Override
-////                                public void onClick(DialogInterface dialog, int which) {
-////
-////                                }
-////                            })
-////                            .show();
-////                    return;
-//
-//				}
                 try
                 {
 
-//                    String name = "POP";
-//
-////					if(MainActivity.this instanceof ModelActivity)
-////						name=name = "Model";
-//                    if (MainActivity.this.getClass().equals(ModelActivity.class)) {
-//                        name = "Model";
-//                    }
+
                     String encryptUser = AES.encrypt("usai", RAImageApplication.user);
                     String encryptPwd = AES.encrypt("usai", RAImageApplication.password);
 

+ 92 - 1
ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/ModeActivity.java

@@ -4,6 +4,7 @@ import android.content.Context;
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.graphics.Color;
+import android.graphics.Insets;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
@@ -19,6 +20,8 @@ import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.Window;
+import android.view.WindowInsets;
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
 import android.widget.Button;
@@ -68,6 +71,95 @@ public class ModeActivity extends AppCompatActivity {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_mode);
 
+        Window window = this.getWindow();
+//        int aaa=window.getcolor();
+
+
+//        ActionBar actionBar = getSupportActionBar();
+//
+//        if(actionBar!=null)
+//        {
+//            int aaaaa=0;
+//        }
+
+        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
+        {
+
+
+            ViewGroup c = findViewById(R.id.container_root);
+
+//            Window window = this.getWindow();
+
+//            window.statusBarColor = Color.TRANSPARENT //设置底色
+//            WindowInsetsControllerCompat cc = ViewCompat.getWindowInsetsController(c);
+//
+////            ?.let {controller ->
+////                controller.show(WindowInsetsCompat.Type.statusBars())
+//            cc.setAppearanceLightStatusBars(true);
+//
+
+
+//           WindowCompat.getWindowInsetsController(c);
+//            new WindowInsetsControllerCompat()
+//            WindowInsetsControllerCompat(window,window.getDecorView());
+//
+//            new WindowInsetsControllerCompat(window.getInsetsController());
+//            WindowInsetsControllerCompat((context as Activity).window, context.window.decorView).isAppearanceLightStatusBars
+
+//
+//            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+//
+////            //View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN设置为沉浸式
+////            //View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR 设置字体颜色为深色
+////            //View.SYSTEM_UI_FLAG_VISIBLE 设置字体颜色为浅色
+////            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+////                    | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+////            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+//
+//
+//            Objects.requireNonNull(window.getInsetsController()).setSystemBarsAppearance(WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS, WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS);
+//
+//            window.getInsetsController().setSystemBarsAppearance(0, WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS);
+//            // OLD: // Statusbar background is now transparent, but the icons and text are probably white and not really readable, as we have a bright background color
+//            // OLD: // We set/force a light theme for the status bar to make those dark
+//            // OLD: View decor = window.getDecorView();
+//            // OLD: decor.setSystemUiVisibility(decor.getSystemUiVisibility() | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);          // DEPRECATED
+//            // NOTE: Use WindowInsetsController#APPEARANCE_LIGHT_NAVIGATION_BARS instead. I guess something like:
+////            window.insetsController?.setSystemBarsAppearance(WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS, WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS);     // for light mode, therefore dark foreground (text/icons)... NOTE: does it works on its own or do I need to set something specific, like addFlags() to make this work?
+////            //window.insetsController?.setSystemBarsAppearance(0, WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS);     // for dark mode, therefore light foreground (text/icons)... NOTE: does it works on its own or do I need to set something specific, like addFlags() to make this work
+////
+////            // NOTE: Use WindowInsetsController#APPEARANCE_LIGHT_STATUS_BARS instead. I guess something like:
+////            window.insetsController?.setSystemBarsAppearance(WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS, WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS);     // for light mode, therefore dark foreground (text/icons)... NOTE: does it works on its own or do I need to set something specific, like addFlags() to make this work?
+////            //window.insetsController?.setSystemBarsAppearance(0, WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS);     // for dark mode, therefore light foreground (text/icons)... NOTE: does it works on its own or do I need to set something specific, like addFlags() to make this work
+////
+
+
+            c.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener()
+            {
+                @NonNull
+                @Override
+                public WindowInsets onApplyWindowInsets(@NonNull View view, @NonNull WindowInsets windowInsets)
+                {
+                    Insets innerPadding = null;
+
+
+
+                    innerPadding = windowInsets.getInsets(WindowInsets.Type.statusBars());
+
+                    view.setPadding(
+                            innerPadding.left,
+                            innerPadding.top,
+                            innerPadding.right,
+                            innerPadding.bottom);
+
+
+
+                    return windowInsets;
+                }
+            });
+
+        }
+
         /**获取控件*/
         mode_list = (ListView)findViewById(R.id.mode_list);
         upload_setting_btn = (Button)findViewById(R.id.upload_setting_btn);
@@ -147,7 +239,6 @@ public class ModeActivity extends AppCompatActivity {
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         getMenuInflater().inflate(R.menu.logout_menu,menu);
-
         return true;
     }
 

+ 38 - 4
ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/Model/ManufactureListActivity.java

@@ -2,20 +2,23 @@ package com.usai.redant.raimage.Model;
 
 import android.content.Context;
 import android.content.Intent;
+import android.graphics.Insets;
 import android.os.Bundle;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.appcompat.app.ActionBar;
-import androidx.appcompat.app.AppCompatActivity;
 import android.view.LayoutInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.WindowInsets;
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
 import android.widget.ListView;
 import android.widget.TextView;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+
 import com.usai.redant.raimage.R;
 
 import java.util.ArrayList;
@@ -30,8 +33,39 @@ public class ManufactureListActivity extends AppCompatActivity {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_manufacture_list);
 
+        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
+        {
+
+
+            ViewGroup c = findViewById(R.id.container_root);
 
 
+            c.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener()
+            {
+                @NonNull
+                @Override
+                public WindowInsets onApplyWindowInsets(@NonNull View view, @NonNull WindowInsets windowInsets)
+                {
+                    Insets innerPadding = null;
+
+
+
+                    innerPadding = windowInsets.getInsets(WindowInsets.Type.statusBars());
+
+                    view.setPadding(
+                            innerPadding.left,
+                            innerPadding.top,
+                            innerPadding.right,
+                            innerPadding.bottom);
+
+
+
+                    return windowInsets;
+                }
+            });
+
+        }
+
         ActionBar mActionBar = getSupportActionBar();
         mActionBar.setHomeButtonEnabled(true);
         mActionBar.setDisplayHomeAsUpEnabled(true);

+ 40 - 0
ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/Model/ModelActivity.java

@@ -1,6 +1,12 @@
 package com.usai.redant.raimage.Model;
 
+import android.graphics.Insets;
 import android.os.Bundle;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowInsets;
+
+import androidx.annotation.NonNull;
 import androidx.appcompat.app.ActionBar;
 
 import com.usai.redant.raimage.MainActivity;
@@ -13,6 +19,40 @@ public class ModelActivity extends MainActivity {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_model);
 
+
+        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
+        {
+
+
+            ViewGroup c = findViewById(R.id.container_root);
+
+
+            c.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener()
+            {
+                @NonNull
+                @Override
+                public WindowInsets onApplyWindowInsets(@NonNull View view, @NonNull WindowInsets windowInsets)
+                {
+                    Insets innerPadding = null;
+
+
+
+                    innerPadding = windowInsets.getInsets(WindowInsets.Type.statusBars());
+
+                    view.setPadding(
+                            innerPadding.left,
+                            innerPadding.top,
+                            innerPadding.right,
+                            innerPadding.bottom);
+
+
+
+                    return windowInsets;
+                }
+            });
+
+        }
+
         ActionBar mActionBar = getSupportActionBar();
         mActionBar.setHomeButtonEnabled(true);
         mActionBar.setDisplayHomeAsUpEnabled(true);

+ 36 - 1
ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/POD/PodActivity.java

@@ -1,12 +1,17 @@
 package com.usai.redant.raimage.POD;
 
 import android.graphics.Bitmap;
+import android.graphics.Insets;
 import android.os.Bundle;
-import androidx.appcompat.app.ActionBar;
 import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowInsets;
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.ActionBar;
+
 import com.usai.redant.raimage.MainActivity;
 import com.usai.redant.raimage.R;
 import com.usai.redant.rautils.utils.ImageUtil;
@@ -26,6 +31,36 @@ public class PodActivity extends MainActivity {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_pod);
+        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
+        {
+
+
+            ViewGroup c = findViewById(R.id.container_root);
+            c.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener()
+            {
+                @NonNull
+                @Override
+                public WindowInsets onApplyWindowInsets(@NonNull View view, @NonNull WindowInsets windowInsets)
+                {
+                    Insets innerPadding = null;
+
+
+
+                    innerPadding = windowInsets.getInsets(WindowInsets.Type.statusBars());
+
+                    view.setPadding(
+                            innerPadding.left,
+                            innerPadding.top,
+                            innerPadding.right,
+                            innerPadding.bottom);
+
+
+
+                    return windowInsets;
+                }
+            });
+
+        }
 
         ActionBar mActionBar = getSupportActionBar();
         mActionBar.setHomeButtonEnabled(true);

+ 36 - 1
ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/POP/PopActivity.java

@@ -1,9 +1,15 @@
 package com.usai.redant.raimage.POP;
 
+import android.graphics.Insets;
 import android.os.Bundle;
-import androidx.appcompat.app.ActionBar;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowInsets;
 import android.widget.TextView;
 
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.ActionBar;
+
 import com.usai.redant.raimage.MainActivity;
 import com.usai.redant.raimage.R;
 
@@ -14,7 +20,36 @@ public class PopActivity extends MainActivity {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_pop);
+        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
+        {
+
+
+            ViewGroup c = findViewById(R.id.container_root);
+            c.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener()
+            {
+                @NonNull
+                @Override
+                public WindowInsets onApplyWindowInsets(@NonNull View view, @NonNull WindowInsets windowInsets)
+                {
+                    Insets innerPadding = null;
+
+
+
+                    innerPadding = windowInsets.getInsets(WindowInsets.Type.statusBars());
+
+                    view.setPadding(
+                            innerPadding.left,
+                            innerPadding.top,
+                            innerPadding.right,
+                            innerPadding.bottom);
+
+
+
+                    return windowInsets;
+                }
+            });
 
+        }
         ActionBar mActionBar = getSupportActionBar();
         mActionBar.setHomeButtonEnabled(true);
         mActionBar.setDisplayHomeAsUpEnabled(true);

+ 33 - 0
ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/PhotoList/NewPhotoPreviewActivity.java

@@ -4,12 +4,14 @@ import android.annotation.SuppressLint;
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
+import android.graphics.Insets;
 import android.os.Build;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.WindowInsets;
 import android.widget.TextView;
 
 import androidx.annotation.NonNull;
@@ -39,7 +41,38 @@ public class NewPhotoPreviewActivity extends AppCompatActivity {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_new_photo_preview);
+        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
+        {
+
+
+            ViewGroup c = findViewById(R.id.container_root);
+
+
+            c.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener()
+            {
+                @NonNull
+                @Override
+                public WindowInsets onApplyWindowInsets(@NonNull View view, @NonNull WindowInsets windowInsets)
+                {
+                    Insets innerPadding = null;
+
+
 
+                    innerPadding = windowInsets.getInsets(WindowInsets.Type.statusBars());
+
+                    view.setPadding(
+                            innerPadding.left,
+                            innerPadding.top,
+                            innerPadding.right,
+                            innerPadding.bottom);
+
+
+
+                    return windowInsets;
+                }
+            });
+
+        }
         /*Action Bar*/
         ActionBar mActionBar = getSupportActionBar();
         assert mActionBar != null;

+ 32 - 0
ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/PhotoList/PhotoGridActivity.java

@@ -23,6 +23,7 @@ import android.widget.Button;
 import android.widget.ImageButton;
 import android.widget.ImageView;
 
+import androidx.annotation.NonNull;
 import androidx.appcompat.app.ActionBar;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.core.content.ContextCompat;
@@ -58,7 +59,38 @@ public class PhotoGridActivity extends AppCompatActivity implements RAGridView.G
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_photo_grid);
+        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
+        {
+
+
+            ViewGroup c = findViewById(R.id.container_root);
+
+
+            c.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener()
+            {
+                @NonNull
+                @Override
+                public WindowInsets onApplyWindowInsets(@NonNull View view, @NonNull WindowInsets windowInsets)
+                {
+                    Insets innerPadding = null;
+
+
 
+                    innerPadding = windowInsets.getInsets(WindowInsets.Type.statusBars());
+
+                    view.setPadding(
+                            innerPadding.left,
+                            innerPadding.top,
+                            innerPadding.right,
+                            innerPadding.bottom);
+
+
+
+                    return windowInsets;
+                }
+            });
+
+        }
         Intent intent = getIntent();
         ArrayList<String> photos = null;
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)

+ 38 - 0
ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/PrivacyActivity.java

@@ -2,15 +2,19 @@ package com.usai.redant.raimage;
 
 import android.content.Intent;
 import android.graphics.Color;
+import android.graphics.Insets;
 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.view.ViewGroup;
+import android.view.WindowInsets;
 import android.webkit.WebView;
 import android.widget.TextView;
 
+import androidx.annotation.NonNull;
 import androidx.appcompat.app.ActionBar;
 import androidx.appcompat.app.AppCompatActivity;
 
@@ -56,6 +60,40 @@ public class PrivacyActivity extends AppCompatActivity
 		super.onCreate(savedInstanceState);
 		setContentView(R.layout.activity_history);
 
+		if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
+		{
+
+
+			ViewGroup c = findViewById(R.id.scrollView1);
+
+
+			c.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener()
+			{
+				@NonNull
+				@Override
+				public WindowInsets onApplyWindowInsets(@NonNull View view, @NonNull WindowInsets windowInsets)
+				{
+					Insets innerPadding = null;
+
+
+
+					innerPadding = windowInsets.getInsets(WindowInsets.Type.statusBars());
+
+					view.setPadding(
+							innerPadding.left,
+							innerPadding.top,
+							innerPadding.right,
+							innerPadding.bottom);
+
+
+
+					return windowInsets;
+				}
+			});
+
+		}
+
+
 		setCustomActionBar();
 		WebView wv = (WebView) findViewById(R.id.webView1);
 

+ 36 - 0
ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/ServerSettingActivity.java

@@ -5,6 +5,7 @@ import android.app.AlertDialog;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.SharedPreferences;
+import android.graphics.Insets;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.view.Gravity;
@@ -12,6 +13,8 @@ import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.view.WindowInsets;
 import android.widget.EditText;
 import android.widget.ImageButton;
 import android.widget.Toast;
@@ -20,6 +23,7 @@ import androidx.activity.result.ActivityResult;
 import androidx.activity.result.ActivityResultCallback;
 import androidx.activity.result.ActivityResultLauncher;
 import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.annotation.NonNull;
 import androidx.appcompat.app.AppCompatActivity;
 
 import com.usai.redant.rautils.barcodescanner.CaptureActivityNew;
@@ -67,6 +71,38 @@ public class ServerSettingActivity extends AppCompatActivity
 		super.onCreate(savedInstanceState);
 		setContentView(R.layout.activity_service_setting);
 
+		if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
+		{
+
+
+			ViewGroup c = findViewById(R.id.container_root);
+			c.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener()
+			{
+				@NonNull
+				@Override
+				public WindowInsets onApplyWindowInsets(@NonNull View view, @NonNull WindowInsets windowInsets)
+				{
+					Insets innerPadding = null;
+
+
+
+					innerPadding = windowInsets.getInsets(WindowInsets.Type.statusBars());
+
+					view.setPadding(
+							innerPadding.left,
+							innerPadding.top,
+							innerPadding.right,
+							innerPadding.bottom);
+
+
+
+					return windowInsets;
+				}
+			});
+
+		}
+
+
 		SharedPreferences pref = RAImageApplication.getInstance()
 				.getSharedPreferences("RA Image", 0);
 

+ 34 - 1
ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/receiving/ReceivingPalletIDActivity.java

@@ -1,9 +1,13 @@
 package com.usai.redant.raimage.receiving;
 
+import android.graphics.Insets;
 import android.os.Bundle;
-import android.widget.EditText;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowInsets;
 import android.widget.TextView;
 
+import androidx.annotation.NonNull;
 import androidx.appcompat.app.ActionBar;
 
 import com.usai.redant.raimage.MainActivity;
@@ -17,7 +21,36 @@ public class ReceivingPalletIDActivity extends MainActivity {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_receivingpalletid);
+        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
+        {
 
+
+            ViewGroup c = findViewById(R.id.container_root);
+            c.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener()
+            {
+                @NonNull
+                @Override
+                public WindowInsets onApplyWindowInsets(@NonNull View view, @NonNull WindowInsets windowInsets)
+                {
+                    Insets innerPadding = null;
+
+
+
+                    innerPadding = windowInsets.getInsets(WindowInsets.Type.statusBars());
+
+                    view.setPadding(
+                            innerPadding.left,
+                            innerPadding.top,
+                            innerPadding.right,
+                            innerPadding.bottom);
+
+
+
+                    return windowInsets;
+                }
+            });
+
+        }
         ActionBar mActionBar = getSupportActionBar();
         mActionBar.setHomeButtonEnabled(true);
         mActionBar.setDisplayHomeAsUpEnabled(true);

+ 39 - 2
ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/uploadSettingActivity.java

@@ -1,14 +1,20 @@
 package com.usai.redant.raimage;
 
 import android.content.SharedPreferences;
+import android.graphics.Insets;
 import android.os.Bundle;
-import androidx.appcompat.app.ActionBar;
-import androidx.appcompat.app.AppCompatActivity;
 import android.view.Menu;
 import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowInsets;
 import android.widget.EditText;
 import android.widget.Switch;
 
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+
 import com.usai.redant.rautils.upload.RAUploadManager;
 
 public class uploadSettingActivity extends AppCompatActivity {
@@ -97,8 +103,39 @@ public class uploadSettingActivity extends AppCompatActivity {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_upload_setting);
 
+        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
+        {
+
+
+            ViewGroup c = findViewById(R.id.container_root);
+
+
+            c.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener()
+            {
+                @NonNull
+                @Override
+                public WindowInsets onApplyWindowInsets(@NonNull View view, @NonNull WindowInsets windowInsets)
+                {
+                    Insets innerPadding = null;
 
 
+
+                    innerPadding = windowInsets.getInsets(WindowInsets.Type.statusBars());
+
+                    view.setPadding(
+                            innerPadding.left,
+                            innerPadding.top,
+                            innerPadding.right,
+                            innerPadding.bottom);
+
+
+
+                    return windowInsets;
+                }
+            });
+
+        }
+
         sw_wifiOnly = (Switch)findViewById(R.id.sw_wifyonly);
 //        auto_start_swt = (Switch)findViewById(R.id.auto_start_swt);
 //        auto_rm_fs_swt = (Switch)findViewById(R.id.auto_rm_fs_swt);

+ 6 - 1
ApexDrivers/raimage/src/main/java/com/usai/util/Network.java

@@ -106,7 +106,12 @@ public class Network
 			// TODO Auto-generated catch block
 			dbgUtil.fileLog(e.toString());
 			e.printStackTrace();
-			return null;
+//			return null;
+			try {
+				return new JSONObject("{result:" + Network.RESULT_NET_ERROR+ "}");
+			} catch (JSONException e1) {
+				e1.printStackTrace();
+			}
 		}
 		return null;
 	}

+ 2 - 1
ApexDrivers/raimage/src/main/res/layout-land/activity_model.xml

@@ -4,7 +4,8 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:background="@color/white_color"
+    android:background="@color/light_gray"
+    android:id="@+id/container_root"
     tools:context="com.usai.redant.raimage.Model.ModelActivity">
 
     <Button

+ 2 - 1
ApexDrivers/raimage/src/main/res/layout-land/activity_pod.xml

@@ -4,7 +4,8 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:background="@color/white_color"
+    android:id="@+id/container_root"
+    android:background="@color/light_gray"
     tools:context="com.usai.redant.raimage.POD.PodActivity">
 
     <ImageView

+ 2 - 1
ApexDrivers/raimage/src/main/res/layout-land/activity_pop.xml

@@ -4,7 +4,8 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:background="@color/white_color"
+    android:id="@+id/container_root"
+    android:background="@color/light_gray"
     tools:context="com.usai.redant.raimage.POP.PopActivity">
 
     <ImageView

+ 2 - 1
ApexDrivers/raimage/src/main/res/layout-land/activity_receivingpalletid.xml

@@ -4,7 +4,8 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:background="@color/white_color"
+    android:id="@+id/container_root"
+    android:background="@color/light_gray"
     tools:context="com.usai.redant.raimage.receiving.ReceivingPalletIDActivity">
 
     <EditText

+ 2 - 1
ApexDrivers/raimage/src/main/res/layout/activity_full_screen_login.xml

@@ -255,10 +255,11 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginEnd="10dp"
-            android:layout_marginBottom="20dp"
+            android:layout_marginBottom="25dp"
             android:fontFamily="sans-serif-black"
             android:text="Privacy Policy"
             android:textColor="#FFFFFF"
+            android:textSize="16sp"
             app:layout_constraintBottom_toTopOf="@+id/tv_ver"
             app:layout_constraintEnd_toEndOf="parent" />
     </androidx.constraintlayout.widget.ConstraintLayout>

+ 3 - 0
ApexDrivers/raimage/src/main/res/layout/activity_history.xml

@@ -8,6 +8,9 @@
     android:paddingLeft="@dimen/activity_horizontal_margin"
     android:paddingRight="@dimen/activity_horizontal_margin"
     android:paddingTop="@dimen/activity_vertical_margin"
+
+
+    android:background="@color/light_gray"
     tools:context="com.usai.redant.raimage.PrivacyActivity" >
 
     <androidx.constraintlayout.widget.ConstraintLayout

+ 2 - 0
ApexDrivers/raimage/src/main/res/layout/activity_manufacture_list.xml

@@ -4,6 +4,8 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:id="@+id/container_root"
+    android:background="@color/light_gray"
     tools:context="com.usai.redant.raimage.Model.ManufactureListActivity">
 
     <ListView

+ 12 - 1
ApexDrivers/raimage/src/main/res/layout/activity_mode.xml

@@ -1,11 +1,21 @@
 <?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+
+
+<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"
+    android:id="@+id/container_root"
+    android:background="@color/light_gray"
     tools:context="com.usai.redant.raimage.ModeActivity">
 
+
+<RelativeLayout
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    >
+
     <ImageView
         android:id="@+id/company_name_icon"
         android:layout_width="40dp"
@@ -76,3 +86,4 @@
 
 
 </RelativeLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 3 - 1
ApexDrivers/raimage/src/main/res/layout/activity_model.xml

@@ -4,7 +4,9 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:background="@color/white_color"
+    android:background="@color/light_gray"
+    android:id="@+id/container_root"
+
     tools:context="com.usai.redant.raimage.Model.ModelActivity">
 
     <Button

+ 2 - 1
ApexDrivers/raimage/src/main/res/layout/activity_new_photo_preview.xml

@@ -2,7 +2,8 @@
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:background="#000000"
+    android:id="@+id/container_root"
+    android:background="@color/light_gray"
     >
 
 

+ 2 - 0
ApexDrivers/raimage/src/main/res/layout/activity_photo_grid.xml

@@ -5,6 +5,8 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical"
+    android:id="@+id/container_root"
+    android:background="@color/light_gray"
     tools:context="com.usai.redant.raimage.PhotoList.PhotoGridActivity">
 
     <com.usai.redant.raimage.PhotoList.RAGridView

+ 2 - 1
ApexDrivers/raimage/src/main/res/layout/activity_pod.xml

@@ -4,7 +4,8 @@
                                              xmlns:tools="http://schemas.android.com/tools"
                                              android:layout_width="match_parent"
                                              android:layout_height="match_parent"
-                                             android:background="@color/white_color"
+    android:id="@+id/container_root"
+    android:background="@color/light_gray"
                                              tools:context="com.usai.redant.raimage.POD.PodActivity">
 
     <ImageView

+ 2 - 1
ApexDrivers/raimage/src/main/res/layout/activity_pop.xml

@@ -4,7 +4,8 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:background="@color/white_color"
+    android:id="@+id/container_root"
+    android:background="@color/light_gray"
     tools:context="com.usai.redant.raimage.receiving.ReceivingPalletIDActivity">
 
     <ImageView

+ 2 - 1
ApexDrivers/raimage/src/main/res/layout/activity_receivingpalletid.xml

@@ -4,7 +4,8 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:background="@color/white_color"
+    android:id="@+id/container_root"
+    android:background="@color/light_gray"
     tools:context="com.usai.redant.raimage.POP.PopActivity">
 
     <EditText

+ 2 - 0
ApexDrivers/raimage/src/main/res/layout/activity_service_setting.xml

@@ -3,6 +3,8 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:id="@+id/container_root"
+    android:background="@color/light_gray"
     tools:context="com.usai.redant.raimage.ServerSettingActivity">
 
     <TextView

+ 5 - 4
ApexDrivers/raimage/src/main/res/layout/activity_splash.xml

@@ -4,6 +4,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:id="@+id/container_root"
     android:background="@color/white_color"
     tools:context="com.usai.redant.raimage.LActivity">
 
@@ -11,10 +12,10 @@
         android:id="@+id/splashImage"
         android:layout_width="0dp"
         android:layout_height="0dp"
-        android:layout_marginBottom="8dp"
-        android:layout_marginLeft="24dp"
-        android:layout_marginRight="24dp"
-        android:layout_marginTop="8dp"
+        android:layout_marginBottom="0dp"
+        android:layout_marginLeft="0dp"
+        android:layout_marginRight="0dp"
+        android:layout_marginTop="0dp"
         android:background="@color/clear_color"
         android:scaleType="fitCenter"
         app:layout_constraintBottom_toBottomOf="parent"

+ 2 - 0
ApexDrivers/raimage/src/main/res/layout/activity_upload_setting.xml

@@ -5,6 +5,8 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:visibility="visible"
+    android:id="@+id/container_root"
+    android:background="@color/light_gray"
     tools:context="com.usai.redant.raimage.uploadSettingActivity">
 
     <Switch

+ 2 - 2
ApexDrivers/raimage/src/main/res/values/colors.xml

@@ -38,7 +38,7 @@
     <color name="dark_gray">#555555</color>
 
     <color name="clear_color">#00000000</color>
-
-    <color name="blue">#2172ff</color>
+    <color name="light_gray">#EBEBEB</color>
+    <color name="blue">#2172FF</color>
     <color name="white_color">#ffffff</color>
 </resources>

+ 5 - 1
ApexDrivers/raimage/src/main/res/values/styles.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android">
+<resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
 
     <!--
         Base application theme, dependent on API level. This theme is replaced
@@ -13,6 +13,7 @@
             backward-compatibility can go here.
 
         -->
+        <item name="android:windowLightStatusBar" tools:targetApi="R">true</item>
     </style>
 
     <!-- Application theme. -->
@@ -50,7 +51,10 @@
             <!--@+android:style/Animation.Translucent-->
         <!--</item>-->
     <!--</style>-->
+    <style name="FullscreenTheme1" parent="Theme.AppCompat.Light">
+<!--        <item name="android:windowLightStatusBar" tools:targetApi="R">true</item>-->
 
+    </style>
     <style name="FullscreenTheme" parent="AppTheme">
         <item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
         <item name="android:windowActionBarOverlay">true</item>

+ 3 - 2
ApexDrivers/rapdflib/build.gradle

@@ -1,11 +1,11 @@
 apply plugin: 'com.android.library'
 
 android {
-    compileSdk 34
+    compileSdk 35
 
     defaultConfig {
         minSdkVersion 28
-        targetSdkVersion 34
+        targetSdkVersion 35
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         consumerProguardFiles "consumer-rules.pro"
@@ -34,6 +34,7 @@ android {
 dependencies {
     implementation fileTree(dir: "libs", include: ["*.jar"])
     implementation 'androidx.appcompat:appcompat:1.6.1'
+    implementation 'androidx.constraintlayout:constraintlayout:2.2.1'
     testImplementation 'junit:junit:4.13.2'
     androidTestImplementation 'androidx.test.ext:junit:1.1.5'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'

+ 33 - 0
ApexDrivers/rapdflib/src/main/java/com/redant/usai/rapdflib/preview/RAPDFPreviewActivity.java

@@ -7,6 +7,7 @@ import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.graphics.Color;
+import android.graphics.Insets;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
@@ -16,8 +17,11 @@ import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowInsets;
 import android.widget.TextView;
 
+import androidx.annotation.NonNull;
 import androidx.appcompat.app.ActionBar;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.core.content.FileProvider;
@@ -216,7 +220,36 @@ public class RAPDFPreviewActivity extends AppCompatActivity implements OnPageCha
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.pdf_preview_activity);
+        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
+        {
 
+
+            ViewGroup c = findViewById(R.id.container_root);
+            c.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener()
+            {
+                @NonNull
+                @Override
+                public WindowInsets onApplyWindowInsets(@NonNull View view, @NonNull WindowInsets windowInsets)
+                {
+                    Insets innerPadding = null;
+
+
+
+                    innerPadding = windowInsets.getInsets(WindowInsets.Type.statusBars());
+
+                    view.setPadding(
+                            innerPadding.left,
+                            innerPadding.top,
+                            innerPadding.right,
+                            innerPadding.bottom);
+
+
+
+                    return windowInsets;
+                }
+            });
+
+        }
         mFilePath = getIntent().getStringExtra(FilePathKey);
 
         setCustomActionBar();

+ 3 - 1
ApexDrivers/rapdflib/src/main/res/layout/pdf_preview_activity.xml

@@ -4,7 +4,9 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context="com.usai.redant.rautils.preview.RAPDFPreviewActivity">
+    android:id="@+id/container_root"
+    android:background="@color/light_gray"
+    tools:context="com.redant.usai.rapdflib.preview.RAPDFPreviewActivity">
 
     <com.github.barteksc.pdfviewer.PDFView
         android:id="@+id/pdfView"

+ 5 - 5
ApexDrivers/ratradefiling/build.gradle

@@ -1,7 +1,7 @@
 apply plugin: 'com.android.application'
 
 android {
-    compileSdk 34
+    compileSdk 35
 
 
 //    splits {
@@ -17,10 +17,10 @@ android {
     defaultConfig {
         applicationId "com.usai.ratradefiling"
         minSdkVersion 28
-        targetSdkVersion 34
-        versionCode 3
-        versionName "1.11"
-//        ndk.abiFilters 'armeabi-v7a',"arm64-v8a"
+        targetSdkVersion 35
+        versionCode 5
+        versionName "1.18"
+        ndk.abiFilters 'armeabi-v7a',"arm64-v8a"
 
 //        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
     }

+ 36 - 0
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/RootActivity.java

@@ -7,6 +7,7 @@ import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.PackageManager;
+import android.graphics.Insets;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.os.Handler;
@@ -14,6 +15,9 @@ import android.os.Looper;
 import android.text.TextUtils;
 import android.view.Menu;
 import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowInsets;
 
 import androidx.annotation.NonNull;
 import androidx.core.app.ActivityCompat;
@@ -251,6 +255,38 @@ public class RootActivity extends BasicActivity {
 
         setContentView(R.layout.activity_root);
 
+
+        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
+        {
+
+
+            ViewGroup c = findViewById(R.id.activity_main);
+            c.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener()
+            {
+                @NonNull
+                @Override
+                public WindowInsets onApplyWindowInsets(@NonNull View view, @NonNull WindowInsets windowInsets)
+                {
+                    Insets innerPadding = null;
+
+
+
+                    innerPadding = windowInsets.getInsets(WindowInsets.Type.statusBars());
+
+                    view.setPadding(
+                            innerPadding.left,
+                            innerPadding.top,
+                            innerPadding.right,
+                            innerPadding.bottom);
+
+
+
+                    return windowInsets;
+                }
+            });
+
+        }
+
         if (savedInstanceState != null) {
             login = savedInstanceState.getBoolean("login");
         }

+ 20 - 30
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/detail/DetailFragment.java

@@ -1,5 +1,9 @@
 package com.usai.ratradefiling.detail;
 
+import static com.usai.commoneditorlib.CommonEditorActivity.URL_REMOTE;
+import static com.usai.ratradefiling.dataprovider.OnlineDataProvider.URL_EDIT;
+import static com.usai.redant.rautils.utils.Network.RESULT_TRUE;
+
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.app.AlertDialog;
@@ -8,17 +12,13 @@ import android.content.ClipboardManager;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
-import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.Color;
-import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Build;
 import android.os.Bundle;
-import android.provider.ContactsContract;
 import android.text.Editable;
 import android.text.Html;
-import android.text.TextUtils;
 import android.text.TextWatcher;
 import android.util.Log;
 import android.util.SparseIntArray;
@@ -38,8 +38,6 @@ import android.webkit.WebView;
 import android.webkit.WebViewClient;
 import android.widget.Button;
 import android.widget.EditText;
-import android.widget.ImageButton;
-import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.RelativeLayout;
 import android.widget.ScrollView;
@@ -48,21 +46,12 @@ import android.widget.Toast;
 
 import androidx.constraintlayout.widget.ConstraintLayout;
 import androidx.fragment.app.Fragment;
-//
-//import com.usai.apex.pdf.PDFPreviewActivity;
-//import com.usai.apex.shipmap.ShipMap;
-//import com.usai.util.Network;
-//import com.usai.util.RAUtil;
-//import com.usai.util.RAUtil;
-//import com.usai.util.dbUtil;
-//
-//import org.apache.http.util.EncodingUtils;
+
 import com.redant.usai.rapdflib.preview.RAPDFPreviewActivity;
 import com.usai.ratradefiling.R;
 import com.usai.ratradefiling.TradeFilingApplication;
 import com.usai.ratradefiling.dataprovider.OnlineDataProvider;
 import com.usai.ratradefiling.dataprovider.RADataProvider;
-import com.usai.ratradefiling.my.ChangePasswordActivity;
 import com.usai.ratradefiling.tfeditor.TFEditorActivity;
 import com.usai.redant.rautils.utils.RAUtil;
 
@@ -74,10 +63,6 @@ import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.util.regex.Pattern;
 
-import static com.usai.commoneditorlib.CommonEditorActivity.URL_REMOTE;
-import static com.usai.ratradefiling.dataprovider.OnlineDataProvider.URL_EDIT;
-import static com.usai.redant.rautils.utils.Network.RESULT_TRUE;
-
 public class DetailFragment extends Fragment implements OnClickListener /*
 																		 * ,
 																		 * OnGestureListener
@@ -641,8 +626,14 @@ public class DetailFragment extends Fragment implements OnClickListener /*
 					{
 						// String keygroup = (String) itgroup.next();
 						JSONObject itemobj = groupobj.getJSONObject("item" + j);
-						final String key = (String) itemobj.keys().next();
-						final String val = itemobj.getString(key);
+						 String key = (String) itemobj.keys().next();
+						 String val = null;
+						Object o = itemobj.get(key);
+						if(o==null)
+							val = "";
+						else
+							val = o.toString();
+//						itemobj.getString(key);
 						LinearLayout mappingitem = (LinearLayout) inflater
 								.inflate(R.layout.detail_cell_kv, null);
 						TextView tvkey = (TextView) mappingitem
@@ -653,17 +644,16 @@ public class DetailFragment extends Fragment implements OnClickListener /*
 								.findViewById(R.id.tv_value);
 						tvval.setText(Html.fromHtml(val));
 						// tvval.setBackgroundResource(R.drawable.detail_item);
+						final String vvv = val;
+						tvval.setOnTouchListener((view, motionEvent) ->
+						{
 
-						tvval.setOnTouchListener(new View.OnTouchListener() {
-							@Override
-							public boolean onTouch(View view, MotionEvent motionEvent) {
 
-								copiedKey = key;
-								copiedVal = val;
-								detector.onTouchEvent(motionEvent);
+							copiedKey = key;
+							copiedVal = vvv;
+							detector.onTouchEvent(motionEvent);
 
-								return true;
-							}
+							return true;
 						});
 
 						mappingview.addView(mappingitem);

+ 1 - 1
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/detail/NewDetailActivity.java

@@ -43,7 +43,7 @@ public class NewDetailActivity extends AppCompatActivity {
     HashMap<String,String> contentmap = new HashMap<String ,String>();
     HashMap<Integer, Integer> menu_map		= new HashMap<Integer, Integer>();
 
-    String sub_type;
+    String sub_type="";
     Bundle paramsB;
 //    String							_schema;
 //    String							_id;

+ 35 - 2
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/login/RetrievePasswordActivity.java

@@ -1,5 +1,7 @@
 package com.usai.ratradefiling.login;
 
+import static com.usai.redant.rautils.utils.Network.RESULT_FAILED_WITH_MESSAGE;
+
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.annotation.TargetApi;
@@ -8,6 +10,7 @@ import android.content.Context;
 import android.content.DialogInterface;
 import android.content.DialogInterface.OnClickListener;
 import android.content.Intent;
+import android.graphics.Insets;
 import android.os.AsyncTask;
 import android.os.Build;
 import android.os.Bundle;
@@ -18,12 +21,15 @@ import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.MenuItem;
 import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowInsets;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.EditText;
 import android.widget.TextView;
 import android.widget.Toast;
 
+import androidx.annotation.NonNull;
 import androidx.appcompat.app.ActionBar;
 import androidx.appcompat.app.AppCompatActivity;
 
@@ -33,8 +39,6 @@ import com.usai.ratradefiling.dataprovider.RADataProvider;
 
 import org.json.JSONObject;
 
-import static com.usai.redant.rautils.utils.Network.RESULT_FAILED_WITH_MESSAGE;
-
 
 /**
  * Activity which displays a login screen to the user, offering registration as
@@ -100,7 +104,36 @@ public class RetrievePasswordActivity extends AppCompatActivity
 		super.onCreate(savedInstanceState);
 
 		setContentView(R.layout.activity_retrieve_password);
+		if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
+		{
+
+
+			ViewGroup c = findViewById(R.id.container_root);
+			c.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener()
+			{
+				@NonNull
+				@Override
+				public WindowInsets onApplyWindowInsets(@NonNull View view, @NonNull WindowInsets windowInsets)
+				{
+					Insets innerPadding = null;
 
+
+
+					innerPadding = windowInsets.getInsets(WindowInsets.Type.statusBars());
+
+					view.setPadding(
+							innerPadding.left,
+							innerPadding.top,
+							innerPadding.right,
+							innerPadding.bottom);
+
+
+
+					return windowInsets;
+				}
+			});
+
+		}
 		setCustomActionBar();
 		// Set up the login form.
 		m_userView = (EditText) findViewById(R.id.user);

+ 8 - 18
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/my/SavedDetailFragment.java

@@ -2,13 +2,10 @@ package com.usai.ratradefiling.my;
 
 import android.content.Context;
 import android.content.Intent;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
 import android.graphics.Color;
 import android.graphics.drawable.ColorDrawable;
 import android.os.Bundle;
 import android.text.TextUtils;
-import android.text.format.DateFormat;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -18,20 +15,9 @@ import android.widget.ImageView;
 import android.widget.ListView;
 import android.widget.TextView;
 
-//import com.usai.apex.ApexTrackingApplication;
-//import com.usai.apex.R;
-//import com.usai.apex.swipemenulistview.BaseSwipListAdapter;
-//import com.usai.apex.swipemenulistview.SwipeMenu;
-//import com.usai.apex.swipemenulistview.SwipeMenuCreator;
-//import com.usai.apex.swipemenulistview.SwipeMenuItem;
-//import com.usai.apex.swipemenulistview.SwipeMenuListView;
-//import com.usai.util.commonUtil;
-//import com.usai.util.dbUtil;
-
 import com.usai.ratradefiling.R;
 import com.usai.ratradefiling.dataprovider.RADataProvider;
 import com.usai.ratradefiling.detail.NewDetailActivity;
-import com.usai.ratradefiling.result.ResultActivity;
 import com.usai.ratradefiling.swipemenulistview.BaseSwipListAdapter;
 import com.usai.ratradefiling.swipemenulistview.SwipeMenu;
 import com.usai.ratradefiling.swipemenulistview.SwipeMenuCreator;
@@ -43,7 +29,6 @@ import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
 
-import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -169,18 +154,23 @@ public class SavedDetailFragment extends TFListFragment
 
 
 
-			Iterator<?> it = obj.keys();
+			JSONObject bp = obj.optJSONObject("bundle_params");
+			Iterator<?> it = bp.keys();
 			while (it.hasNext())
 			{
 
 				String key = (String) it.next();
-				parms.putString(key, obj.getString(key));
+				parms.putString(key, bp.getString(key));
 
 //					obj.put(key, searchParms.get(key).toString());
 
 
 
 			}
+
+
+			;
+
 			String sub_type=(String)searchresult.getData().get(position).get("module_name");
 			JSONArray actions =obj.optJSONArray("actions");
 
@@ -220,7 +210,7 @@ public class SavedDetailFragment extends TFListFragment
 
 
 
-		startActivity(intent);
+//		startActivity(intent);
 
 	}
 

+ 38 - 22
ApexDrivers/ratradefiling/src/main/res/layout/activity_retrieve_password.xml

@@ -1,32 +1,48 @@
 <merge 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"
-    tools:context=".RetrievePasswordActivity" >
+
+    tools:context=".login.RetrievePasswordActivity" >
+
+
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:id="@+id/container_root"
+        android:background="@color/light_gray"
+        >
 
     <!-- Login progress -->
 
-    <LinearLayout
-        android:id="@+id/login_status"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center"
-        android:gravity="center_horizontal"
-        android:orientation="vertical"
-        android:visibility="gone" >
-
-        <ProgressBar
-            style="?android:attr/progressBarStyleLarge"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginBottom="8dp" />
+        <LinearLayout
 
-        <TextView
-            android:id="@+id/login_status_message"
+            android:id="@+id/login_status"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_marginBottom="16dp"
-            android:text="Connecting..."
-            android:textAppearance="?android:attr/textAppearanceMedium" />
-    </LinearLayout>
+            android:layout_gravity="center"
+            android:gravity="center_horizontal"
+            android:orientation="vertical"
+            android:visibility="gone"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent">
+
+            <ProgressBar
+                style="?android:attr/progressBarStyleLarge"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="8dp" />
+
+            <TextView
+                android:id="@+id/login_status_message"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="16dp"
+                android:text="Connecting..."
+                android:textAppearance="?android:attr/textAppearanceMedium" />
+        </LinearLayout>
 
     <!-- Login form -->
 
@@ -92,5 +108,5 @@
             </LinearLayout>
         </LinearLayout>
     </ScrollView>
-
+    </androidx.constraintlayout.widget.ConstraintLayout>
 </merge>

+ 4 - 0
ApexDrivers/ratradefiling/src/main/res/layout/activity_root.xml

@@ -5,6 +5,10 @@
     android:id="@+id/activity_main"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+
+
+    android:background="@color/light_gray"
+
     android:orientation="vertical">
 
     <androidx.appcompat.widget.Toolbar

+ 1 - 1
ApexDrivers/ratradefiling/src/main/res/raw/about_en.txt

@@ -4,4 +4,4 @@
 
 <p>RA-Trade Filing App is easy to use and gives complete visibility to US & Canada customs responses for your cargo.</p>
 
-<p>With 27x7 support and quick response time, we are here to help.</p>
+<p>With 24x7 support and quick response time, we are here to help.</p>

+ 274 - 18
ApexDrivers/ratradefiling/src/main/res/raw/privacy.html

@@ -5,24 +5,280 @@
 <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>
-				
+	<p>
+	<h2 style="font-size:var(--text-xxl);font-weight:normal;vertical-align:baseline;color:var(--color-text-one);text-align:center;font-family:&quot;background-color:#FFFFFF;">
+		<span style="font-size:24px;"><strong>Privacy Policy</strong></span>
+	</h2>
+	<div class="privacy-box" style="margin:0px 0px 10px;padding:0px;border:0px;font-size:16px;vertical-align:baseline;font-family:&quot;background-color:#FFFFFF;">
+		<p class="title" style="font-size:var(--text-sm);font-weight:bold;vertical-align:baseline;color:var(--color-text-one);">
+			RedAnt USAI Privacy Statement
+		</p>
+		<div class="content" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;">
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				This is the privacy statement of<span style="font-size:14px;font-weight:bold;vertical-align:baseline;">RedAnt USAI</span>.In these pages we will review where,how and why personal information is collected and the action we take to protect it.We define Personal information as identifying user information,such as name,telephone number,and email address.This personal information is collected as we build personal relationships with our website users(“you),and our customers.Interactions where personal information may be shared may be when you register for newsletters,or webinars,or when customers decide to order our products.
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				RedAnt USAI's privacy statement governs the personal information<span style="font-size:14px;font-weight:bold;vertical-align:baseline;">RedAnt USAI</span>collects from you and our customers and RedAnt USAI's Privacy Statement does not apply to any other business,third party,partner,vendor,other entity or service.
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				Other information may be collected as well through website intelligence such as online user interests,languages,pages viewed,and information trends
+			</p>
+		</div>
 	</div>
+	<div class="privacy-box" style="margin:0px 0px 10px;padding:0px;border:0px;font-size:16px;vertical-align:baseline;font-family:&quot;background-color:#FFFFFF;">
+		<p class="title" style="font-size:var(--text-sm);font-weight:bold;vertical-align:baseline;color:var(--color-text-one);">
+			1. Information Collected
+		</p>
+		<div class="content" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;">
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				There are various ways information can be collected.RedAnt USAI's collection points are always centered on customer service,the context of the interaction and user choices:
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				<span style="font-size:14px;font-weight:bold;vertical-align:baseline;">Collection points:</span>
+			</p>
+			<ul style="vertical-align:baseline;">
+				<li style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+					Website visitors
+				</li>
+				<li style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+					Surveys,webinars or other promotional activities participation
+				</li>
+				<li style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+					Newsletters,promotional emails,or other materials subscriptions;
+				</li>
+				<li style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+					Job applications,or submission of resume/CV,or create a candidate profiles
+				</li>
+				<li style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+					Contact requests
+				</li>
+				<li style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+					Request for quotes,services,support,or information
+				</li>
+				<li style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+					Order placement for products or services.
+				</li>
+			</ul>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				In each of these collection points,we may request some personal information such as name,email address,company name and address,home address,fax number and telephone number.Purchases by credit card number may need more information for billing purposes.If we are asked to process financing requests,we may also ask for buyers Social Security Number and additional information.Job applicants may be requested to provide background information such as education,employment experience,and job interests.Over the course of building strong customer relationships,markets,industries,business or company information,age,gender,interests,preferences and preference favorites may be collected.Should we ask our customers to complete any forms we will indicate whether information requested is mandatory or voluntary.RedAnt USAI's collection points are always centered on customer service,the context of the interaction and user choices.
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				As we build a better understanding of demographics,financial profiles,product enhancements and so on;
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				we try to learn more about visitors to our websites including the pages viewed,searches entered,the links and ads clicked,the internet protocol(IP)addresses,the browser types,languages,access times,uniform resource locator(URL)of the referral websites,and other actions visitors may take to learn more about RedAnt USAI websites and services.
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				Some RedAnt USAI services maybe co-branded or offered in conjunction with another company's services.If website users,customers,register for,or use,such services,both RedAnt USAI and the other company may receive the same collected information for their own records.That same collected information will be governed by their respective privacy statements.
+			</p>
+		</div>
+	</div>
+	<div class="privacy-box" style="margin:0px 0px 10px;padding:0px;border:0px;font-size:16px;vertical-align:baseline;font-family:&quot;background-color:#FFFFFF;">
+		<p class="title" style="font-size:var(--text-sm);font-weight:bold;vertical-align:baseline;color:var(--color-text-one);">
+			2. How We Use Personal Data
+		</p>
+		<div class="content" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;">
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				RedAnt USAI's collection points are always centered on customer service,the context of the interaction and user choices.Some examples of how personal information is used are:
+			</p>
+			<ul style="vertical-align:baseline;">
+				<li style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+					Requests for services and support
+				</li>
+				<li style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+					Statuses for activities related to order confirmations,product information,webinars,services,surveys,or promotional offers.
+				</li>
+				<li style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+					Requests and communications related to products,services,product improvement recommendations,and other communications.
+				</li>
+				<li style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+					Transactions related to fraud prevention,and other prohibited or illegal activities.
+				</li>
+				<li style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+					Transactions related to ensuring compliance with website terms,conditions of sale,website security,business or products or services,or otherwise disclosed at data collection points.
+				</li>
+				<li style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+					RedAnt USAI operates in the United States,and personal information collected is stored and processed in the United States.
+				</li>
+			</ul>
+		</div>
+	</div>
+	<div class="privacy-box" style="margin:0px 0px 10px;padding:0px;border:0px;font-size:16px;vertical-align:baseline;font-family:&quot;background-color:#FFFFFF;">
+		<p class="title" style="font-size:var(--text-sm);font-weight:bold;vertical-align:baseline;color:var(--color-text-one);">
+			3. How you're Personal Information Is Shared
+		</p>
+		<div class="content" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;">
+			<ul style="vertical-align:baseline;">
+				<li style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+					Transactions related to fraud prevention,and other prohibited or illegal activities,disclosing personal information with law enforcement or as required by law or regulation to protect RedAnt USAI,customers or the public.
+				</li>
+				<li style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+					Transactions related to ensuring compliance with website terms,conditions of sale,website security,business or products or services,or otherwise disclosed at the data collection points.
+				</li>
+				<li style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+					Once above exceptions are applied,we will not disclose personal information unless consent is provided.
+				</li>
+			</ul>
+		</div>
+	</div>
+	<div class="privacy-box" style="margin:0px 0px 10px;padding:0px;border:0px;font-size:16px;vertical-align:baseline;font-family:&quot;background-color:#FFFFFF;">
+		<p class="title" style="font-size:var(--text-sm);font-weight:bold;vertical-align:baseline;color:var(--color-text-one);">
+			4. How You Can Access Your Information
+		</p>
+		<div class="content" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;">
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				Customers,who want to update their personal information and have an account with us,can sign in to their accounts with their login ID and password to review and edit their contact details.
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				Any of our website users who have registered for marketing materials can also view or edit their personal information if it has been stored online,by contacting us to review,update or edit their contact details.
+			</p>
+		</div>
+	</div>
+	<div class="privacy-box" style="margin:0px 0px 10px;padding:0px;border:0px;font-size:16px;vertical-align:baseline;font-family:&quot;background-color:#FFFFFF;">
+		<p class="title" style="font-size:var(--text-sm);font-weight:bold;vertical-align:baseline;color:var(--color-text-one);">
+			5. Monitoring Networks
+		</p>
+		<div class="content" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;">
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				We may collect logs and other data when users of our products and services create network traffic passing through our systems (networks and equipment)
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				This additional data collection point supports our efforts to generate statistics, trend analysis, assess processing performance, run maintenance routines, run security monitoring and investigations, conduct spam prevention, assess threats and initiate other scientific research, run tests on new product and service developments, or analyze the enhancement of existing products and services.
+			</p>
+		</div>
+	</div>
+	<div class="privacy-box" style="margin:0px 0px 10px;padding:0px;border:0px;font-size:16px;vertical-align:baseline;font-family:&quot;background-color:#FFFFFF;">
+		<p class="title" style="font-size:var(--text-sm);font-weight:bold;vertical-align:baseline;color:var(--color-text-one);">
+			6. Communication Preferences
+		</p>
+		<div class="content" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;">
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				Communication preferences are available when a customer registers to receive marketing materials and advertising including:
+			</p>
+			<ul style="vertical-align:baseline;">
+				<li style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+					Choosing to receive marketing communications from RedAnt USAI by subscribing or unsubscribing to newsletters about our products and services
+				</li>
+				<li style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+					Choosing to consent or withdrawing consent to the processing of personal data by RedAnt USAI according to this privacy statement and policies
+				</li>
+			</ul>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				Consent withdrawals will not affect the lawfulness of any processing RedAnt USAI conducted prior to any consent withdrawal,nor will it affect processing of personal data conducted in reliance on lawful processing grounds other than consent.
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				Also,some marketing promotions may already be in process when we receive updated requests resulting in solicitations being sent after we receive preferences withdrawing from marketing communication updates.
+			</p>
+		</div>
+	</div>
+	<div class="privacy-box" style="margin:0px 0px 10px;padding:0px;border:0px;font-size:16px;vertical-align:baseline;font-family:&quot;background-color:#FFFFFF;">
+		<p class="title" style="font-size:var(--text-sm);font-weight:bold;vertical-align:baseline;color:var(--color-text-one);">
+			7. How We Secure Your Personal Information
+		</p>
+		<div class="content" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;">
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				RedAnt USAI takes the security and protection of our customers and users personal information very seriously.We will not require the transmission of SSN on the internet unless the connection is secure or the SSN is encrypted.
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				However,irrespective of all the technologies we may use to protect personal information or private communications transmitted to us,we cannot warrant or ensure the information will always remain private,and you do so at your own risk.
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				Every individual is responsible to protect and keep their passwords confidential.If they share a computer with anyone,they should always logout and leave the website or service site they just accessed to keep their personal information protected from subsequent users.
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				Every individual puts themselves at risk if they don't follow minimal protective activity.
+			</p>
+		</div>
+	</div>
+	<div class="privacy-box" style="margin:0px 0px 10px;padding:0px;border:0px;font-size:16px;vertical-align:baseline;font-family:&quot;background-color:#FFFFFF;">
+		<p class="title" style="font-size:var(--text-sm);font-weight:bold;vertical-align:baseline;color:var(--color-text-one);">
+			8. Collection and Use of Children's Personal Information
+		</p>
+		<div class="content" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;">
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				<span style="font-size:14px;font-weight:bold;vertical-align:baseline;">Please Read Carefully:</span>
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				RedAnt USAI does not knowingly collect personal information from any child under the age of 18 who visits our websites.
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				<span style="font-size:14px;font-weight:bold;vertical-align:baseline;">Please read carefully this message for children visiting our websites:</span>&nbsp;Please do not submit any personal information through any of our websites without the express consent and participation of a parent or guardian
+			</p>
+		</div>
+	</div>
+	<div class="privacy-box" style="margin:0px 0px 10px;padding:0px;border:0px;font-size:16px;vertical-align:baseline;font-family:&quot;background-color:#FFFFFF;">
+		<p class="title" style="font-size:var(--text-sm);font-weight:bold;vertical-align:baseline;color:var(--color-text-one);">
+			9. Cookies and similar technologies
+		</p>
+		<div class="content" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;">
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				Please be aware that RedAnt does use cookies to facilitate user site preferences,settings and sign on.Cookies also provide targeted ads,and can be used to analyze site operations.
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				Users can manage their cookies through their web browser settings and are under their control.
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				Cookies are simple text files placed on the user's device when they access a website;they contain user settings,preferences,may contain ad preferences which web servers utilize and include the domain used at the time the cookie was created..
+			</p>
+		</div>
+	</div>
+	<div class="privacy-box" style="margin:0px 0px 10px;padding:0px;border:0px;font-size:16px;vertical-align:baseline;font-family:&quot;background-color:#FFFFFF;">
+		<p class="title" style="font-size:var(--text-sm);font-weight:bold;vertical-align:baseline;color:var(--color-text-one);">
+			10. Third-Party Websites and Services
+		</p>
+		<div class="content" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;">
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				<span style="font-size:14px;font-weight:bold;vertical-align:baseline;">Please Read:</span>
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				RedAnt USAI's privacy statement recites RedAnt USAI's privacy policies only.
+			</p>
+		</div>
+	</div>
+	<div class="privacy-box" style="margin:0px 0px 10px;padding:0px;border:0px;font-size:16px;vertical-align:baseline;font-family:&quot;background-color:#FFFFFF;">
+		<p class="title" style="font-size:var(--text-sm);font-weight:bold;vertical-align:baseline;color:var(--color-text-one);">
+			11. Changes to Our Privacy Statement
+		</p>
+		<div class="content" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;">
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				RedAnt's privacy statement will be updated from time to time.If we make changes to the Privacy Statement we will revise the statement's effective date noted at the end of this document.We encourage a regular review of this statement to learn how RedAnt USAI is protecting and securing our users and customers personal information
+			</p>
+		</div>
+	</div>
+	<div class="privacy-box" style="margin:0px 0px 10px;padding:0px;border:0px;font-size:16px;vertical-align:baseline;font-family:&quot;background-color:#FFFFFF;">
+		<p class="title" style="font-size:var(--text-sm);font-weight:bold;vertical-align:baseline;color:var(--color-text-one);">
+			12. Contact
+		</p>
+		<div class="content" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;">
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				If you would like to contact us about our privacy policies or you have other questions,then please write to us at the following address:
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				<span style="font-size:14px;font-weight:bold;vertical-align:baseline;">RedAnt USAI</span>
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				Attention:SocialMedia
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				7411 Central Avenue
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				Newark,California 94560
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				USA
+			</p>
+			<p style="font-size:var(--text-xs);vertical-align:baseline;color:var(--color-text-two);">
+				You may also email us at<span style="font-size:14px;font-weight:bold;vertical-align:baseline;"></span>SocialMedia@united-us.net
+			</p>
+		</div>
+	</div>
+	<p class="privacy-footer" style="font-size:var(--text-xs);font-weight:bold;vertical-align:baseline;color:var(--color-text-two);font-family:&quot;background-color:#FFFFFF;">
+		RedAnt USAI Privacy Statement: 2020
+	</p>
+	</p>
+	<p>
+		<br />
+	</p>
 </body>
 </html>