Bladeren bron

ra image 1.28 fix samsung crash issue

Ray Zhang 3 maanden geleden
bovenliggende
commit
bd120f0b7a
75 gewijzigde bestanden met toevoegingen van 3894 en 2761 verwijderingen
  1. 18 12
      ApexDrivers/CommonEditorLib/build.gradle
  2. 49 0
      ApexDrivers/CommonEditorLib/src/main/java/com/usai/commoneditorlib/CommonEditorActivity.java
  3. 5 4
      ApexDrivers/FunctionTest/build.gradle
  4. 5 5
      ApexDrivers/RALocationLib/build.gradle
  5. 17 12
      ApexDrivers/RAUtilsLibrary/build.gradle
  6. 1 1
      ApexDrivers/RAUtilsLibrary/src/main/AndroidManifest.xml
  7. 1 1
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/operationqueue/OperationQueue.java
  8. 41 37
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/service/RAService3.java
  9. 13 2
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/upload/RAOperationQueue.java
  10. 4 4
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/utils/TextScaleUtil.java
  11. 19 15
      ApexDrivers/apexmap/build.gradle
  12. 2 2
      ApexDrivers/build.gradle
  13. 1 1
      ApexDrivers/gradle.properties
  14. 1 1
      ApexDrivers/gradle/wrapper/gradle-wrapper.properties
  15. 2 2
      ApexDrivers/local.properties
  16. 26 12
      ApexDrivers/raimage/build.gradle
  17. 27 29
      ApexDrivers/raimage/proguard-project.txt
  18. 11 0
      ApexDrivers/raimage/src/main/AndroidManifest.xml
  19. 192 1
      ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/FullScreenLoginActivity.java
  20. 54 743
      ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/MainActivity.java
  21. 19 0
      ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/PhotoList/NewPhotoPreviewActivity.java
  22. 1 0
      ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/PrivacyActivity.java
  23. 219 164
      ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/RAImageApplication.java
  24. 5 3
      ApexDrivers/rapdflib/build.gradle
  25. 34 23
      ApexDrivers/ratradefiling/build.gradle
  26. 9 2
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/EmptyActivity.java
  27. 26 27
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/PrivacyActivity.java
  28. 340 301
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/RootActivity.java
  29. 71 21
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/TradeFilingApplication.java
  30. 6 18
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/about/AboutFragment.java
  31. 48 3
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/base/BasicActivity.java
  32. 5 3
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/dataprovider/OnlineDataProvider.java
  33. 280 474
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/detail/DetailFragment.java
  34. 286 66
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/detail/NewDetailActivity.java
  35. 8 0
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/fields/CustomizeFieldsActivity.java
  36. 24 6
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/fields/DragListView.java
  37. 11 0
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/home/CompanySelectActivity.java
  38. 40 19
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/home/CompanySelectFragment.java
  39. 12 0
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/home/FunctionPanelSettingActivity.java
  40. 288 17
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/home/HomeFragment.java
  41. 12 4
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/home/HomeHeaderView.java
  42. 344 245
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/login/LoginFragment.java
  43. 350 171
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/login/RetrievePasswordActivity.java
  44. 249 118
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/my/ChangePasswordActivity.java
  45. 46 1
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/my/CheckSavedActivity.java
  46. 70 57
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/my/MyFragment.java
  47. 87 2
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/my/SavedDetailFragment.java
  48. 86 10
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/my/SavedSearchFragment.java
  49. 39 9
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/result/ResultActivity.java
  50. 3 2
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/result/cell/ResulteManifestCell.java
  51. 8 1
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/search/SearchActivity.java
  52. 116 5
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/signup/SignupActivity.java
  53. 8 2
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/swipemenulistview/SwipeMenuItem.java
  54. 10 11
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/swipemenulistview/SwipeMenuLayout.java
  55. 6 1
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/swipemenulistview/SwipeMenuView.java
  56. 115 6
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/tfeditor/TFEditorActivity.java
  57. 3 1
      ApexDrivers/ratradefiling/src/main/res/layout/activity_change_password.xml
  58. 5 5
      ApexDrivers/ratradefiling/src/main/res/layout/activity_check_saved.xml
  59. 1 1
      ApexDrivers/ratradefiling/src/main/res/layout/activity_company_select.xml
  60. 3 1
      ApexDrivers/ratradefiling/src/main/res/layout/activity_customize_fields.xml
  61. 3 1
      ApexDrivers/ratradefiling/src/main/res/layout/activity_function_panel_setting.xml
  62. 13 8
      ApexDrivers/ratradefiling/src/main/res/layout/activity_html.xml
  63. 7 6
      ApexDrivers/ratradefiling/src/main/res/layout/activity_new_detail.xml
  64. 20 7
      ApexDrivers/ratradefiling/src/main/res/layout/activity_result.xml
  65. 6 1
      ApexDrivers/ratradefiling/src/main/res/layout/activity_retrieve_password.xml
  66. 5 5
      ApexDrivers/ratradefiling/src/main/res/layout/activity_root.xml
  67. 4 1
      ApexDrivers/ratradefiling/src/main/res/layout/activity_search_list.xml
  68. 8 2
      ApexDrivers/ratradefiling/src/main/res/layout/activity_signup.xml
  69. 1 0
      ApexDrivers/ratradefiling/src/main/res/layout/fragment_about.xml
  70. 1 0
      ApexDrivers/ratradefiling/src/main/res/layout/fragment_company_select.xml
  71. 5 1
      ApexDrivers/ratradefiling/src/main/res/layout/fragment_login1.xml
  72. 1 1
      ApexDrivers/ratradefiling/src/main/res/layout/home_header_view1.xml
  73. 28 0
      ApexDrivers/ratradefiling/src/main/res/values/arrays.xml
  74. 8 42
      ApexDrivers/ratradefiling/src/main/res/values/styles.xml
  75. 2 2
      ApexDrivers/settings.gradle

+ 18 - 12
ApexDrivers/CommonEditorLib/build.gradle

@@ -3,11 +3,12 @@ plugins {
 }
 
 android {
-    compileSdk 35
+    compileSdk = 36
 
     defaultConfig {
-        minSdkVersion 28
-        targetSdkVersion 35
+        minSdk  = 28
+        targetSdk = 36
+
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         consumerProguardFiles "consumer-rules.pro"
@@ -16,29 +17,34 @@ android {
     buildTypes {
         release {
             minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+//            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
         }
     }
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_11
         targetCompatibility JavaVersion.VERSION_11
     }
-    namespace 'com.usai.commoneditorlib'
+    namespace = 'com.usai.commoneditorlib'
     gradle.projectsEvaluated {
-        tasks.withType(JavaCompile) {
-//            options.compilerArgs << "-Xlint:deprecation"
-//            options.compilerArgs << "-Xlint:unchecked"
+        tasks.withType(JavaCompile).tap {
+            configureEach {
+            options.compilerArgs << "-Xlint:deprecation"
+            options.compilerArgs << "-Xlint:unchecked"
 
+            }
         }
     }
 }
 
 dependencies {
-
-    implementation 'androidx.appcompat:appcompat:1.6.1'
-    implementation 'com.google.android.material:material:1.8.0'
+//    implementation 'androidx.appcompat:appcompat:1.6.1'
+//    implementation 'com.google.android.material:material:1.8.0'
+//    implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
+//    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
+    implementation 'androidx.appcompat:appcompat:1.7.0'
+    implementation 'com.google.android.material:material:1.12.0'
     implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
-    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
+    implementation 'androidx.constraintlayout:constraintlayout:2.2.1'
 //    testImplementation 'junit:junit:4.+'
 //    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
 //    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

+ 49 - 0
ApexDrivers/CommonEditorLib/src/main/java/com/usai/commoneditorlib/CommonEditorActivity.java

@@ -436,6 +436,55 @@ public class CommonEditorActivity extends AppCompatActivity implements View.OnLa
         }
     }
 
+    public void onActivityResult20(Intent data)
+    {
+
+            String value_str = data.getStringExtra(CommonEditorActivity.RETURN_VALUE);
+            JSONObject value = null;
+            if (value_str != null) {
+                try {
+                    value = new JSONObject(value_str);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    return;
+                }
+            }
+            int group = data.getIntExtra(CommonEditorActivity.GROUP,0);
+            int child = data.getIntExtra(CommonEditorActivity.CHILD,0);
+            handle_action_return(value,group,child,ACTION_SAVE_DATA);
+
+
+
+    }
+    public void onActivityResult15(Intent data)
+    {
+
+        String cadedate_str = data.getStringExtra(EnumSlectActivity.CADEDATE);
+        if (cadedate_str == null || cadedate_str.isEmpty()) {
+            return;
+        }
+        try {
+            JSONObject cadedate = new JSONObject(cadedate_str);
+            int group = data.getIntExtra(EnumSlectOnlineActivity.GROUP_POSITION,0);
+            int child = data.getIntExtra(EnumSlectOnlineActivity.CHILD_POSITION,0);
+            int subid = data.getIntExtra(EnumSlectOnlineActivity.SUB_ID,-1);
+            JSONObject value =cadedate.optJSONObject("val_0");
+
+            if(subid>=0)
+            {
+                value.put("is_subaction",true);
+                value.put("subaction_tag",subid);
+
+            }
+            // online enum 只返回选中项
+            handle_action_return(cadedate.optJSONObject("val_0"),group,child,ACTION_FILL_SECTION);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+
+    }
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);

+ 5 - 4
ApexDrivers/FunctionTest/build.gradle

@@ -1,12 +1,13 @@
 apply plugin: 'com.android.application'
 
 android {
-    compileSdk 34
+    compileSdk = 36
 
     defaultConfig {
         applicationId "com.example.functiontest"
-        minSdkVersion 28
-        targetSdkVersion 34
+        minSdk  = 28
+        targetSdk = 36
+
         versionCode 1
         versionName "1.0"
 
@@ -19,7 +20,7 @@ android {
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
         }
     }
-    namespace 'com.example.functiontest'
+    namespace = 'com.example.functiontest'
     compileOptions {
         targetCompatibility JavaVersion.VERSION_11
         sourceCompatibility JavaVersion.VERSION_11

+ 5 - 5
ApexDrivers/RALocationLib/build.gradle

@@ -1,11 +1,11 @@
 apply plugin: 'com.android.library'
 
 android {
-    compileSdk 35
+    compileSdk= 36
 
     defaultConfig {
-        minSdkVersion 28
-        targetSdkVersion 35
+        minSdk  = 28
+        targetSdk = 36
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         consumerProguardFiles "consumer-rules.pro"
@@ -14,10 +14,10 @@ android {
     buildTypes {
         release {
             minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+//            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
         }
     }
-    namespace 'com.usai.redant.ralocationlib'
+    namespace = 'com.usai.redant.ralocationlib'
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_11
         targetCompatibility JavaVersion.VERSION_11

+ 17 - 12
ApexDrivers/RAUtilsLibrary/build.gradle

@@ -1,23 +1,23 @@
 apply plugin: 'com.android.library'
 
 android {
-    compileSdk 35
+    compileSdk  = 36
     defaultConfig {
-        minSdk 28
+        minSdk  = 28
 
 //        applicationId "com.usai.redant.rautils"
-        targetSdkVersion 35
+        targetSdk = 36
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
     }
     buildTypes {
         release {
-//            minifyEnabled true
+            minifyEnabled false
 //            zipAlignEnabled true
 //            shrinkResources true
 //            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
         }
     }
-    namespace 'com.usai.redant.rautils'
+    namespace = 'com.usai.redant.rautils'
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_11
         targetCompatibility JavaVersion.VERSION_11
@@ -46,10 +46,12 @@ android {
 ////        }
 //    }
     gradle.projectsEvaluated {
-        tasks.withType(JavaCompile) {
-            options.compilerArgs << "-Xlint:deprecation"
-            options.compilerArgs << "-Xlint:unchecked"
+        tasks.withType(JavaCompile).tap {
+            configureEach {
+                options.compilerArgs << "-Xlint:deprecation"
+                options.compilerArgs << "-Xlint:unchecked"
 
+            }
         }
     }
 }
@@ -63,7 +65,9 @@ dependencies {
     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 'com.google.guava:guava:32.1.3-jre'
+
+    implementation 'com.google.guava:guava:33.4.8-jre'
 
     implementation "androidx.lifecycle:lifecycle-livedata:2.8.4"
     implementation "androidx.lifecycle:lifecycle-viewmodel:2.8.4"
@@ -77,15 +81,16 @@ dependencies {
 
     api files('libs/core-2.3.0.jar')
 //    api 'com.github.barteksc:android-pdf-viewer:3.2.0-beta.1'
-    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
+//    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
+    implementation 'androidx.constraintlayout:constraintlayout:2.2.1'
 
     // CameraX
     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"))
+//    implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))
+    implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.22"))
 }
 
 

+ 1 - 1
ApexDrivers/RAUtilsLibrary/src/main/AndroidManifest.xml

@@ -78,7 +78,7 @@
             android:name=".infinitephoto.InfinitePhotoActivity"
             android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen" />
         <activity android:name=".signature.SignatureActivity"
-            android:theme="@style/Theme.AppCompat.DayNight"/>
+            android:theme="@style/Theme.AppCompat.Light"/>
         <activity
             android:name=".upload.TaskActivity"
           android:theme="@style/Theme.AppCompat.Light" />

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

@@ -35,7 +35,7 @@ public class OperationQueue {
         limitedTaskExecutor = Executors.newFixedThreadPool(count);
     }
 
-    public void addOperationTask(OperationBackgroundCallBack backgroundCallBack, OperationCompletionCallBack completion, OperationCancelCallBack cancelCallBack) {
+     public void addOperationTask(OperationBackgroundCallBack backgroundCallBack, OperationCompletionCallBack completion, OperationCancelCallBack cancelCallBack) {
 
         if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
         {

+ 41 - 37
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/service/RAService3.java

@@ -1,19 +1,18 @@
 package com.usai.redant.rautils.service;
 
-
 import android.app.Notification;
 import android.app.NotificationChannel;
 import android.app.NotificationManager;
 import android.app.Service;
 import android.content.Context;
 import android.content.Intent;
-
+// [新增 Import]
+import android.content.pm.ServiceInfo;
 import android.os.Binder;
 import android.os.Build;
 import android.os.IBinder;
 import android.util.Log;
 
-
 import androidx.core.app.NotificationCompat;
 
 import com.usai.redant.rautils.R;
@@ -31,7 +30,6 @@ public abstract class RAService3 extends Service {
     public static final int DEFAULT_LOCATION_TIMEINTERVAL = 30 * 1000;
     public static final int DEFAULT_PUSHNOTIFICATION_TIMEINTERVAL = 30 * 1000;
 
-
     protected int service_flag = FLAG_SERVICE_NONE;
     public static final int FLAG_SERVICE_NONE = 0;
 
@@ -65,57 +63,66 @@ public abstract class RAService3 extends Service {
         Log.d(TAG, "onCreate: ");
         super.onCreate();
 
-
+        // 务必确保在 Android 8.0+ 即使在后台也能创建前台服务
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
-//            String CHANNEL_ID = "apex & driver";
-//            String CHANNEL_NAME = "Background Service";
+            // [优化] 使用变量而不是硬编码,虽然你之前用的 "Service Start",
+            // 但为了不出错,这里保持你原有的 String,只修改 startForeground 的逻辑
+            String channelId = "Service Start";
+            String channelName = "Service Start";
 
-            NotificationChannel channel = new NotificationChannel("Service Start",
-                    "Service Start", NotificationManager.IMPORTANCE_HIGH);
+            NotificationChannel channel = new NotificationChannel(channelId,
+                    channelName, NotificationManager.IMPORTANCE_HIGH);
             ((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(channel);
 
-            Notification notification = new NotificationCompat.Builder(this, "Service Start")
+            Notification notification = new NotificationCompat.Builder(this, channelId)
 //                    .setContentTitle("Apex Land is running.")
                     .setContentText(LAUNCH_MSG)
-                    .setCategory(Notification.CATEGORY_SERVICE).setSmallIcon(FOREGROUND_ICON).setPriority(1000).build();
-
-            startForeground(101, notification);
+                    .setCategory(Notification.CATEGORY_SERVICE)
+                    .setSmallIcon(FOREGROUND_ICON)
+                    .setPriority(1000)
+                    .build();
+
+            // [核心修改] ------------ 修复 Android 14 (API 34) 崩溃问题 ------------
+            try {
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { // Android 14
+                    // 必须带上类型,且必须与 Manifest 中的 android:foregroundServiceType="dataSync" 一致
+                    startForeground(101, notification, ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC);
+                } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { // Android 10-13
+                    // 建议带上类型,虽然不强制,但更安全
+                    startForeground(101, notification, ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC);
+                } else {
+                    // Android 8-9
+                    startForeground(101, notification);
+                }
+            } catch (Exception e) {
+                // 防止极少数机型因为权限或类型不匹配导致崩溃
+                Log.e(TAG, "startForeground failed", e);
+            }
+            // [结束] -----------------------------------------------------------
         }
         else
         {
 //            startService(serviceIntent);
         }
-
-
     }
 
     @Override
     public void onDestroy() {
         removeAllTask();
+        // 退出前台服务状态
+        stopForeground(true);
         super.onDestroy();
     }
+
     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {
         Log.d(TAG, "onStartCommand");
-//        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
-//            // TODO: Consider calling
-//            //    ActivityCompat#requestPermissions
-//            // here to request the missing permissions, and then overriding
-//            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
-//            //                                          int[] grantResults)
-//            // to handle the case where the user grants the permission. See the documentation
-//            // for ActivityCompat#requestPermissions for more details.
-////                return;
-//        }
-////        else
-////        {
-////
-////            initLocation();
-////
-////        }
-
         serviceIntent = intent;
-        return super.onStartCommand(intent,flags,startId);
+
+        // super.onStartCommand 默认返回 START_STICKY,但显式写出来更安全
+        // START_STICKY 告诉系统:如果内存不足杀了我,等内存够了要把我复活(Intent传null)
+        super.onStartCommand(intent, flags, startId);
+        return START_STICKY;
     }
 
     public void addTask(RATask3 task)
@@ -125,13 +132,11 @@ public abstract class RAService3 extends Service {
 
     public void removeTask(RATask3 task)
     {
-
         tasks.remove(task);
     }
 
     public void removeAllTask()
     {
-
         tasks.clear();
     }
 
@@ -146,5 +151,4 @@ public abstract class RAService3 extends Service {
         }
         return null;
     }
-
-}
+}

+ 13 - 2
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/upload/RAOperationQueue.java

@@ -2,6 +2,7 @@ package com.usai.redant.rautils.upload;
 
 import android.content.Context;
 import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 import android.util.Log;
 
@@ -78,8 +79,18 @@ public class RAOperationQueue {
                     while (!queue.isEmpty()) {
                         Bundle task=queue.poll();
 
-                        System.out.println("running  tid="+Thread.currentThread().getId());
-                        task.putLong("tid",Thread.currentThread().getId());
+                        long tid=-1;
+                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA)
+                        {
+                            tid = Thread.currentThread().threadId();
+                        }
+                        else
+                        {
+                            tid= Thread.currentThread().getId();
+
+                        }
+                        System.out.println("running  tid="+tid);
+                        task.putLong("tid",tid);
 //                        int min=1000;
 //                        int max=5000;
 //                        int sleep=new Random().nextInt(max)%(max-min+1) + min;

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

@@ -24,12 +24,12 @@ public class TextScaleUtil
      */
     public static Resources getResources(Context context, Resources resources, float fontScale) {
         Configuration config = resources.getConfiguration();
-        if(config.fontScale != fontScale) {
+//        if(config.fontScale != fontScale) {
             config.fontScale = fontScale;
             return context.createConfigurationContext(config).getResources();
-        } else {
-            return resources;
-        }
+//        } else {
+//            return resources;
+//        }
     }
 
     /**

+ 19 - 15
ApexDrivers/apexmap/build.gradle

@@ -3,22 +3,23 @@ plugins {
 }
 android {
 //    namespace 'redant.usai.com.apexmap'
-    compileSdk 35
+    compileSdk = 36
 
 
 
     defaultConfig {
-        minSdk 28
-        targetSdkVersion 35
+        minSdk  = 28
+        targetSdk = 36
 
-        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+
+//        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
 
     }
 
     buildTypes {
         release {
             minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+//            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
         }
     }
 
@@ -29,24 +30,27 @@ android {
 
 
     buildFeatures {
-        viewBinding true
+        viewBinding = true
     }
-    namespace 'redant.usai.com.apexmap'
+    namespace = 'redant.usai.com.apexmap'
     gradle.projectsEvaluated {
-        tasks.withType(JavaCompile) {
-//            options.compilerArgs << "-Xlint:deprecation"
-//            options.compilerArgs << "-Xlint:unchecked"
+        tasks.withType(JavaCompile).tap {
+            configureEach {
+            options.compilerArgs << "-Xlint:deprecation"
+            options.compilerArgs << "-Xlint:unchecked"
 
+            }
         }
     }
 }
 
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
+//    implementation 'androidx.appcompat:appcompat:1.6.1'
+
+    implementation 'androidx.appcompat:appcompat:1.7.0'
+
 
-    implementation 'androidx.appcompat:appcompat:1.6.1'
-//    testImplementation 'junit:junit:4.12'
-//    androidTestImplementation 'com.android.support.test:runner:1.0.2'
-//    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
-    api 'org.osmdroid:osmdroid-android:6.1.17'
+//    api 'org.osmdroid:osmdroid-android:6.1.17'
+    api 'org.osmdroid:osmdroid-android:6.1.20'
 }

+ 2 - 2
ApexDrivers/build.gradle

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

+ 1 - 1
ApexDrivers/gradle.properties

@@ -10,10 +10,10 @@ org.gradle.jvmargs=-Xmx1536m
 android.injected.testOnly = false
 android.useAndroidX=true
 android.enableJetifier=true
-android.defaults.buildfeatures.buildconfig=true
 android.nonTransitiveRClass=false
 android.nonFinalResIds=false
 # When configured, Gradle will run in incubating parallel mode.
 # This option should only be used with decoupled projects. More details, visit
 # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
 # org.gradle.parallel=true
+android.enableR8.fullMode=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.9-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists

+ 2 - 2
ApexDrivers/local.properties

@@ -4,5 +4,5 @@
 # Location of the SDK. This is only used by Gradle.
 # For customization when using a Version Control System, please read the
 # header note.
-#Thu Aug 29 10:19:02 CST 2019
-sdk.dir=/Users/ruizhang/Library/Android/sdk
+#Wed Dec 31 09:28:13 CST 2025
+sdk.dir=/Users/zhangrui/Library/Android/sdk

+ 26 - 12
ApexDrivers/raimage/build.gradle

@@ -10,21 +10,30 @@ android {
 //            universalApk true
 //        }
 //    }
-    compileSdk 35
+    compileSdk = 36
     defaultConfig {
         applicationId "com.usai.redant.raimage"
-        minSdkVersion 28
-        targetSdkVersion 35
-        versionCode 12
-        versionName "1.26.57465"
-//        ndk.abiFilters 'armeabi-v7a',"arm64-v8a"
+        minSdk  = 28
+        targetSdk = 36
+
+        versionCode 15
+        versionName "1.28.57582"
+     //   ndk.abiFilters 'armeabi-v7a',"arm64-v8a"
     }
     buildTypes {
         release {
             minifyEnabled true
-            zipAlignEnabled true
-            shrinkResources true
-            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
+//            zipAlignEnabled true
+            shrinkResources = false
+            proguardFiles 'proguard-project.txt'
+
+            ndk {
+                // 只保留 ARM 架构
+                // arm64-v8a: 适配所有新手机 + 你的 M4 模拟器 (这是主力)
+                // armeabi-v7a: 适配 2017 年以前的老旧手机 (为了兼容性建议保留)
+                // x86 / x86_64: 彻底删除,M4 不需要,真机也不需要
+                abiFilters 'arm64-v8a', 'armeabi-v7a'
+            }
         }
         debug {
 //            minifyEnabled true
@@ -32,15 +41,17 @@ android {
         }
     }
     gradle.projectsEvaluated {
-        tasks.withType(JavaCompile) {
+        tasks.withType(JavaCompile).tap {
+            configureEach {
 //            options.compilerArgs << "-Xlint:deprecation"
 //            options.compilerArgs << "-Xlint:unchecked"
 
+            }
         }
     }
 
-    useLibrary 'org.apache.http.legacy'
-    namespace 'com.usai.redant.raimage'
+    useLibrary  'org.apache.http.legacy'
+    namespace = 'com.usai.redant.raimage'
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_11
         targetCompatibility JavaVersion.VERSION_11
@@ -57,6 +68,9 @@ dependencies {
     api 'androidx.recyclerview:recyclerview:1.3.0'
     api project(path: ':RAUtilsLibrary')
     implementation 'com.google.android.material:material:1.8.0'
+
+
+
     //    implementation files('libs/core-2.3.0.jar')
     //    implementation files('libs/bcprov-jdk15on-157.jar')
     //    implementation files('libs/httpmime-4.1.1.jar')

+ 27 - 29
ApexDrivers/raimage/proguard-project.txt

@@ -1,37 +1,35 @@
-# To enable ProGuard in your project, edit project.properties
-# to define the proguard.config property as described in that file.
-#
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in ${sdk.dir}/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the ProGuard
-# include property in project.properties.
-#
-# For more details, see
-#   http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-#   public *;
-#}
--dontwarn android.support.v4.**
--dontwarn javax.naming.**
+# ============================================================
+# 保留堆栈可读性
+# ============================================================
 
+# 保留源文件名和行号
+-keepattributes SourceFile,LineNumberTable
 
+# 保留 Lambda 表达式的调试信息
+-keepattributes InnerClasses,EnclosingMethod
 
+# 【关键】不优化,防止行号偏移
+-dontoptimize
 
-#-keep class com.usai.redant.camera.CameraManager
-#-keep class javax.naming.*
-# Remove all Verbose/Debug logging
+# 保留异常类名
+-keep public class * extends java.lang.Exception
+-keep public class * extends java.lang.Error
 
--optimizations code/removal/simple,code/removal/advanced
+# ============================================================
+# 其他配置
+# ============================================================
+
+-dontwarn android.support.v4.**
+-dontwarn javax.naming.**
+
+# 不混淆
 -dontobfuscate
+
+# ============================================================
+# 移除 Debug 日志(保留 Log.e 和 Log.w)
+# ============================================================
 -assumenosideeffects class android.util.Log {
-    public static *** d(...);
-    public static *** v(...);
-    public static *** i(...);
+    public static int d(...);
+    public static int v(...);
+    public static int i(...);
 }

+ 11 - 0
ApexDrivers/raimage/src/main/AndroidManifest.xml

@@ -41,6 +41,17 @@
                 android:name="android.support.FILE_PROVIDER_PATHS"
                 android:resource="@xml/provider_paths" />
         </provider>
+
+        <provider
+            android:name="androidx.core.content.FileProvider"
+            android:authorities="${applicationId}.crashprovider"
+            android:exported="false"
+            android:grantUriPermissions="true"
+            tools:replace="android:authorities">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/crash_file_paths" />
+        </provider>
 <!--        <activity-->
 <!--            android:name=".NewUploadQueueActivity"-->
 <!--            android:exported="false">-->

+ 192 - 1
ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/FullScreenLoginActivity.java

@@ -43,6 +43,17 @@ import java.util.HashSet;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
+
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Environment;
+import android.provider.MediaStore;
+import android.widget.Toast;
+//import androidx.appcompat.app.AlertDialog;
+import androidx.core.content.FileProvider;
+import java.io.File;
+
 //import android.support.v7.app.AlertDialog;
 
 public class FullScreenLoginActivity extends Activity {
@@ -572,7 +583,7 @@ public class FullScreenLoginActivity extends Activity {
             e1.printStackTrace();
         }
 
-
+        tv_ver.setOnClickListener(v -> checkAndSendCrashLog());
 
         m_etServer = (EditText) findViewById(R.id.et_server);
         // m_etName.setText(m_sName);
@@ -672,6 +683,7 @@ public class FullScreenLoginActivity extends Activity {
                     public void onClick(View view)
                     {
 
+
                         attemptLogin();
                     }
                 });
@@ -910,4 +922,183 @@ public class FullScreenLoginActivity extends Activity {
 //        }
 //        return true;
 //    }
+
+
+
+
+    // ============================================================
+// crash report
+// ============================================================
+
+    /**
+     * 检查崩溃日志并询问用户是否发送
+     */
+    private void checkAndSendCrashLog() {
+        // 获取最新的崩溃日志
+        CrashLogInfo crashLog = getLatestCrashLog();
+
+        if (crashLog == null) {
+            Toast.makeText(this, "No crash log found", Toast.LENGTH_SHORT).show();
+            return;
+        }
+
+        // 弹窗询问用户
+        new AlertDialog.Builder(this)
+                .setTitle("Upload Crash Log")
+                .setMessage("Found crash log:\n" + crashLog.displayName + "\n\nDo you want to send it via email?")
+                .setPositiveButton("Yes", (dialog, which) -> sendCrashLogEmail(crashLog))
+                .setNegativeButton("No", null)
+                .show();
+    }
+
+    /**
+     * 获取最新的崩溃日志
+     */
+    private CrashLogInfo getLatestCrashLog() {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+            // Android 10+ 从 Downloads 目录获取
+            return getLatestCrashLogFromDownloads();
+        } else {
+            // Android 9 从 ExternalFiles 目录获取
+            return getLatestCrashLogFromFiles();
+        }
+    }
+
+    /**
+     * Android 10+ 从 Downloads 获取最新崩溃日志
+     */
+    private CrashLogInfo getLatestCrashLogFromDownloads() {
+        String[] projection = {
+                MediaStore.Downloads._ID,
+                MediaStore.Downloads.DISPLAY_NAME,
+                MediaStore.Downloads.DATE_MODIFIED
+        };
+        String selection = MediaStore.Downloads.RELATIVE_PATH + "=? AND " +
+                MediaStore.Downloads.DISPLAY_NAME + " LIKE ?";
+        String[] selectionArgs = {
+                Environment.DIRECTORY_DOWNLOADS + "/CrashLogs/",
+                "crash_%"
+        };
+
+        try (Cursor cursor = getContentResolver().query(
+                MediaStore.Downloads.EXTERNAL_CONTENT_URI,
+                projection,
+                selection,
+                selectionArgs,
+                MediaStore.Downloads.DATE_MODIFIED + " DESC")) {
+
+            if (cursor != null && cursor.moveToFirst()) {
+                int idColumn = cursor.getColumnIndexOrThrow(MediaStore.Downloads._ID);
+                int nameColumn = cursor.getColumnIndexOrThrow(MediaStore.Downloads.DISPLAY_NAME);
+
+                long id = cursor.getLong(idColumn);
+                String displayName = cursor.getString(nameColumn);
+                Uri uri = Uri.withAppendedPath(MediaStore.Downloads.EXTERNAL_CONTENT_URI, String.valueOf(id));
+
+                return new CrashLogInfo(uri, displayName);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // 如果 Downloads 没有,尝试从 Files 目录获取
+        return getLatestCrashLogFromFiles();
+    }
+
+    /**
+     * Android 9 从 ExternalFiles 获取最新崩溃日志
+     */
+    private CrashLogInfo getLatestCrashLogFromFiles() {
+        File dir = getExternalFilesDir(null);
+        if (dir == null) {
+            dir = getFilesDir();
+        }
+        File crashDir = new File(dir, "CrashLogs");
+
+        if (!crashDir.exists()) {
+            return null;
+        }
+
+        File[] files = crashDir.listFiles((d, name) -> name.startsWith("crash_") && name.endsWith(".txt"));
+        if (files == null || files.length == 0) {
+            return null;
+        }
+
+        // 按修改时间排序,取最新的
+        File latestFile = files[0];
+        for (File file : files) {
+            if (file.lastModified() > latestFile.lastModified()) {
+                latestFile = file;
+            }
+        }
+
+        // 通过 FileProvider 获取 Uri
+        Uri uri = FileProvider.getUriForFile(this,
+                getPackageName() + ".crashprovider",
+                latestFile);
+
+        return new CrashLogInfo(uri, latestFile.getName());
+    }
+
+    /**
+     * 发送崩溃日志邮件
+     */
+    private void sendCrashLogEmail(CrashLogInfo crashLog) {
+        Intent intent = new Intent(Intent.ACTION_SEND);
+        intent.setType("message/rfc822");
+
+        // 收件人和抄送
+        intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"ray.zhang@united-cn.net"});
+        intent.putExtra(Intent.EXTRA_CC, new String[]{"redantsupport@united-us.net"});
+
+        // 主题和正文
+        intent.putExtra(Intent.EXTRA_SUBJECT, "RA Image Crash Log - " + crashLog.displayName);
+        intent.putExtra(Intent.EXTRA_TEXT, "Please find the crash log attached.\n\nDevice: "
+                + Build.MANUFACTURER + " " + Build.MODEL
+                + "\nAndroid: " + Build.VERSION.RELEASE
+                + "\nApp Version: " + getAppVersion());
+
+        // 附件
+        intent.putExtra(Intent.EXTRA_STREAM, crashLog.uri);
+        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+
+        try {
+            startActivity(Intent.createChooser(intent, "Send crash log via..."));
+        } catch (Exception e) {
+            Toast.makeText(this, "No email app found", Toast.LENGTH_SHORT).show();
+        }
+    }
+
+    /**
+     * 获取 App 版本号
+     */
+    private String getAppVersion() {
+        try {
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+                return getPackageManager()
+                        .getPackageInfo(getPackageName(), PackageManager.PackageInfoFlags.of(0))
+                        .versionName;
+            } else {
+                return getPackageManager()
+                        .getPackageInfo(getPackageName(), 0)
+                        .versionName;
+            }
+        } catch (Exception e) {
+            return "unknown";
+        }
+    }
+
+    /**
+     * 崩溃日志信息
+     */
+    private static class CrashLogInfo {
+        final Uri uri;
+        final String displayName;
+
+        CrashLogInfo(Uri uri, String displayName) {
+            this.uri = uri;
+            this.displayName = displayName;
+        }
+    }
+
 }

File diff suppressed because it is too large
+ 54 - 743
ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/MainActivity.java


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

@@ -36,6 +36,25 @@ public class NewPhotoPreviewActivity extends AppCompatActivity {
 //    private ArrayList<XuanImageView> ivContainer;
     private int currentIdx;
 //    private PreviewAdapter adapter;
+
+
+
+    // 将这段代码加入到包含 ViewPager 的 Activity 中
+    @Override
+    public boolean dispatchTouchEvent(android.view.MotionEvent ev) {
+        try {
+            return super.dispatchTouchEvent(ev);
+        } catch (IllegalArgumentException e) {
+            // 捕获 ViewPager 的 "pointerIndex out of range" 异常
+            // 这是一个原生 Bug,直接忽略即可,防止 App 闪退
+            e.printStackTrace();
+            return false;
+        } catch (Exception e) {
+            // 保险起见,捕获其他可能的触摸异常
+            return false;
+        }
+    }
+
     @SuppressLint("SetTextI18n")
     @Override
     protected void onCreate(Bundle savedInstanceState) {

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

@@ -14,6 +14,7 @@ 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;

+ 219 - 164
ApexDrivers/raimage/src/main/java/com/usai/redant/raimage/RAImageApplication.java

@@ -15,7 +15,9 @@ import android.content.IntentFilter;
 import android.content.ServiceConnection;
 import android.content.SharedPreferences;
 import android.os.Build;
+import android.os.Handler;
 import android.os.IBinder;
+import android.os.Looper;
 import android.os.SystemClock;
 import android.provider.Settings;
 import android.text.TextUtils;
@@ -26,6 +28,7 @@ import androidx.core.app.NotificationCompat;
 import com.usai.redant.rautils.application.RedantApplication;
 import com.usai.redant.rautils.upload.TaskActivity;
 import com.usai.redant.rautils.utils.RACrashHandler;
+import com.usai.redant.rautils.utils.RACrashHandler26;
 import com.usai.service.RAImageBackgroundService3;
 
 import org.json.JSONObject;
@@ -34,229 +37,281 @@ import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
-import kotlinx.coroutines.scheduling.Task;
-
 public class RAImageApplication extends RedantApplication
 {
 
-	public static  String CHANNEL_ID = "RAImage";
-	public static  String CHANNEL_NAME = "RAImage";
+    public static  String CHANNEL_ID = "RAImage";
+    public static  String CHANNEL_NAME = "RAImage";
 
-//    private static RAImageApplication instance;
-    public static ReadWriteLock lock = new ReentrantReadWriteLock(true);  
-    public static ReadWriteLock loglock = new ReentrantReadWriteLock(true);  
-    public static Lock logwritelock   = loglock.writeLock();   
-    public static Lock writeLock   = lock.writeLock();   
+    //    private static RAImageApplication instance;
+    public static ReadWriteLock lock = new ReentrantReadWriteLock(true);
+    public static ReadWriteLock loglock = new ReentrantReadWriteLock(true);
+    public static Lock logwritelock   = loglock.writeLock();
+    public static Lock writeLock   = lock.writeLock();
     public static String user;
     public static String password;
     public static String active_address;
     public static String station_name;
-	public static String device_id;
-	public static JSONObject server_info;
+    public static String device_id;
+    public static JSONObject server_info;
 
-	private ServiceConnection mServiceConnection;
-	private RAImageBackgroundService3 mService;
+    private ServiceConnection mServiceConnection;
+    private RAImageBackgroundService3 mService;
 
 //    public static RedAntApplication getInstance() {
 //        return instance;
 //
 
 
-	private final BroadcastReceiver ApplicaitonReceiver = new BroadcastReceiver()
-	{
+    private final BroadcastReceiver ApplicaitonReceiver = new BroadcastReceiver()
+    {
+
+        public void onReceive(
+                Context context,
+                Intent intent)
+        {
+
+
+
+            int count = intent.getIntExtra("count",-1);
 
-		public void onReceive(
-				Context context,
-				Intent intent)
-		{
+            String action = intent
+                    .getAction();
+            if ("REDANT.RAImage.UPLOAD_UPDATE_COUNT".equals(action))
 
-			int count = intent.getIntExtra("count",-1);
+            {
+                // [修改点 1] ------------ 修复启动时序问题 ------------
+                // 如果 mService 还没绑定好(为空),则延迟 1 秒后重新执行此方法
+                if (mService == null) {
+                    Log.w("RAImage", "mService is null in onReceive, retrying in 1s...");
+                    new Handler(Looper.getMainLooper()).postDelayed(() -> {
+                        onReceive(context, intent); // 重新投递当前的任务
+                    }, 1000);
+                    return; // 暂停本次执行,等待重试
+                }
+                // [结束] ---------------------------------------
 
-			String action = intent
-					.getAction();
-			if ("REDANT.RAImage.UPLOAD_UPDATE_COUNT".equals(action))
-			{
+                TaskActivity t;
+                PendingIntent contentIntent=PendingIntent.getActivity(getApplicationContext(),
+                        0,new Intent(getApplicationContext(), TaskActivity.class),FLAG_IMMUTABLE);
+                if (count>0)
+                {
 
-				TaskActivity t;
-				PendingIntent contentIntent=PendingIntent.getActivity(getApplicationContext(),
-						0,new Intent(getApplicationContext(), TaskActivity.class),FLAG_IMMUTABLE);
-				if (count>0)
-				{
 
-//					new Intent(getApplicationContext(), TaskActivity.class);
+//              new Intent(getApplicationContext(), TaskActivity.class);
 
 
-//					new Intent (getApplicationContext(),TaskActivity.class);
-					NotificationChannel channel = new NotificationChannel("Service Start",
-							"Service Start", NotificationManager.IMPORTANCE_HIGH);
-					((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(channel);
+//              new Intent (getApplicationContext(),TaskActivity.class);
+                    NotificationChannel channel = new NotificationChannel("Service Start",
+                            "Service Start", NotificationManager.IMPORTANCE_HIGH);
+                    ((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(channel);
 
-					Notification notification = new NotificationCompat.Builder(mService, "Service Start")
+                    // [修改点 2] 将 mService 改为 context,防止 Builder 初始化崩溃
+                    Notification notification = new NotificationCompat.Builder(context, "Service Start")
 //                    .setContentTitle("Apex Land is running.")
-							.setContentText(count + " files uploading...")
-							.setContentIntent(contentIntent)
-							.setCategory(Notification.CATEGORY_SERVICE).setSmallIcon(com.usai.redant.rautils.R.drawable.ic_launcher_foreground).setPriority(1000).build();
-					mService.startForeground(101, notification);
-				}
-				else
-					if(count==0)
-					{
-						NotificationChannel channel = new NotificationChannel("Service Start",
-								"Service Start", NotificationManager.IMPORTANCE_HIGH);
-						((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(channel);
-
-						Notification notification = new NotificationCompat.Builder(mService, "Service Start")
+                            .setContentText(count + " files uploading...")
+                            .setContentIntent(contentIntent)
+                            .setCategory(Notification.CATEGORY_SERVICE).setSmallIcon(com.usai.redant.rautils.R.drawable.ic_launcher_foreground).setPriority(1000).build();
+
+                    // [修改点 3] 增加 try-catch 防止 Service 状态异常导致的闪退
+                    try {
+                        mService.startForeground(101, notification);
+                    } catch (Exception e) {
+                        Log.e("RAImage", "Failed to startForeground in onReceive", e);
+                    }
+                }
+                else
+                if(count==0)
+                {
+
+
+
+                    NotificationChannel channel = new NotificationChannel("Service Start",
+                            "Service Start", NotificationManager.IMPORTANCE_HIGH);
+                    ((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(channel);
+
+                    // [修改点 2] 将 mService 改为 context
+                    Notification notification = new NotificationCompat.Builder(context, "Service Start")
 //                    .setContentTitle("Apex Land is running.")
-								.setContentText("Upload complete.")
-								.setContentIntent(contentIntent)
-								.setCategory(Notification.CATEGORY_SERVICE).setSmallIcon(com.usai.redant.rautils.R.drawable.ic_launcher_foreground).setPriority(1000).build();
+                            .setContentText("Upload complete.")
+                            .setContentIntent(contentIntent)
+
+                            .setCategory(Notification.CATEGORY_SERVICE).setSmallIcon(com.usai.redant.rautils.R.drawable.ic_launcher_foreground).setPriority(1000).build();
 
-						mService.startForeground(101, notification);
-					}
+                    // [修改点 3] 增加 try-catch 防止 Service 状态异常导致的闪退
+                    try {
+                        mService.startForeground(101, notification);
+                    } catch (Exception e) {
+                        Log.e("RAImage", "Failed to startForeground in onReceive", e);
+                    }
+                }
 
 
 
 //
-				Log.e("Finish_msg", "Application onReceive: ");
-			}
-		}
-	};
-
-	public static void startalarm()
-	{
-
-		Intent iAlarm = new Intent("REDANT.POP.RETRY_UPLOAD");
-		//iAlarm.putExtra("caller", caller);
-//		iAlarm.setAction("com.usai.apex.push");
-		PendingIntent sender = PendingIntent.getBroadcast(getInstance(), 0,
-				iAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
-
-		long firstime = SystemClock.elapsedRealtime();
-//		UpdateLastAlermTime();
-		AlarmManager am = (AlarmManager) getInstance().getSystemService(
-				Context.ALARM_SERVICE);
-
-		// 5分钟一个周期,不停的发送广播
-		am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime,
-				300 * 1000, sender);
-		Log.d("redant pop","start alarm");
-	}
-
-	public static void cancelalarm()
-	{
-
-		// 启动完成
-		Intent iAlarm = new Intent("REDANT.POP.RETRY_UPLOAD");
-//		iAlarm.setAction("com.usai.apex.push");
-		PendingIntent sender = PendingIntent.getBroadcast(getInstance(), 0,
-				iAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
-
-		AlarmManager am = (AlarmManager) getInstance().getSystemService(
-				Context.ALARM_SERVICE);
-
-		am.cancel(sender);
-		Log.d("redant pop","cancel alarm");
-	}
-
-    @Override  
-    public void onCreate() {  
+                Log.e("Finish_msg", "Application onReceive: ");
+            }
+        }
+    };
+
+
+
+    public static void startalarm()
+    {
+
+        Intent iAlarm = new Intent("REDANT.POP.RETRY_UPLOAD");
+        //iAlarm.putExtra("caller", caller);
+//     iAlarm.setAction("com.usai.apex.push");
+        PendingIntent sender = PendingIntent.getBroadcast(getInstance(), 0,
+                iAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
+
+        long firstime = SystemClock.elapsedRealtime();
+//     UpdateLastAlermTime();
+        AlarmManager am = (AlarmManager) getInstance().getSystemService(
+                Context.ALARM_SERVICE);
+
+        // 5分钟一个周期,不停的发送广播
+        am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime,
+                300 * 1000, sender);
+        Log.d("redant pop","start alarm");
+    }
+
+    public static void cancelalarm()
+    {
+
+        // 启动完成
+        Intent iAlarm = new Intent("REDANT.POP.RETRY_UPLOAD");
+//     iAlarm.setAction("com.usai.apex.push");
+        PendingIntent sender = PendingIntent.getBroadcast(getInstance(), 0,
+                iAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
+
+        AlarmManager am = (AlarmManager) getInstance().getSystemService(
+                Context.ALARM_SERVICE);
+
+        am.cancel(sender);
+        Log.d("redant pop","cancel alarm");
+    }
+
+    @Override
+    public void onCreate() {
+
+        RACrashHandler26.init(this);
         // TODO Auto-generated method stub
-		Log.d("_RAIMAGE", "onCreate: RedAntApplication");
-		super.onCreate();
+        Log.d("_RAIMAGE", "onCreate: RedAntApplication");
+        super.onCreate();
+
+        IntentFilter msgFilter = new IntentFilter();
+        msgFilter.addAction("REDANT.RAImage.UPLOAD_UPDATE_COUNT");
 
-		IntentFilter msgFilter = new IntentFilter();
-		msgFilter.addAction("REDANT.RAImage.UPLOAD_UPDATE_COUNT");
+        msgFilter.setPriority(2147483647);
 
-		msgFilter.setPriority(2147483647);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+        {
+            registerReceiver(ApplicaitonReceiver, msgFilter,RECEIVER_NOT_EXPORTED);
+        }
+        else
+        {
 
-		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
-		{
-			registerReceiver(ApplicaitonReceiver, msgFilter,RECEIVER_NOT_EXPORTED);
-		}
-		else
-		{
-			registerReceiver(ApplicaitonReceiver, msgFilter);
-		}
 
+            registerReceiver(ApplicaitonReceiver, msgFilter);
+        }
 
-//		setInstance(this);
+
+//     setInstance(this);
         //instance = this;
 
 //        Network.handleSSLHandshake();
 
-		device_id=Settings.Secure.getString(getContentResolver(),Settings.Secure.ANDROID_ID);
-        
-		SharedPreferences pref = RAImageApplication.getInstance().getSharedPreferences("RA Image", 0);
+        device_id=Settings.Secure.getString(getContentResolver(),Settings.Secure.ANDROID_ID);
+
+        SharedPreferences pref = RAImageApplication.getInstance().getSharedPreferences("RA Image", 0);
+
+        String aa = pref.getString("aa", null);
+        String name = pref.getString("station name", null);
+        if(!TextUtils.isEmpty(aa))
+            active_address = aa;
+        if(!TextUtils.isEmpty(name))
+            station_name = name;
+
+        /** Service */
+        mServiceConnection = new ServiceConnection() {
+            @Override
+            public void onServiceConnected(ComponentName name, IBinder service) {
 
-		String aa = pref.getString("aa", null);
-		String name = pref.getString("station name", null);
-		if(!TextUtils.isEmpty(aa))
-			active_address = aa;
-		if(!TextUtils.isEmpty(name))
-			station_name = name;
+                RAImageBackgroundService3.Service3Binder binder = (RAImageBackgroundService3.Service3Binder)service;
+                mService = (RAImageBackgroundService3)binder.getService();
 
-		/** Service */
-		mServiceConnection = new ServiceConnection() {
-			@Override
-			public void onServiceConnected(ComponentName name, IBinder service) {
+            }
 
-				RAImageBackgroundService3.Service3Binder binder = (RAImageBackgroundService3.Service3Binder)service;
-				mService = (RAImageBackgroundService3)binder.getService();
+            @Override
+            public void onServiceDisconnected(ComponentName name) {
 
-			}
+                mService = null;
+            }
+        };
 
-			@Override
-			public void onServiceDisconnected(ComponentName name) {
 
-				mService = null;
-			}
-		};
 
-		Intent serviceIntent = new Intent();
-		serviceIntent.setClass(this, RAImageBackgroundService3.class);
+        Intent serviceIntent = new Intent();
+        serviceIntent.setClass(this, RAImageBackgroundService3.class);
 
-		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+        // [修改点 4] ------------ 修复 ForegroundServiceDidNotStopInTimeException ------------
+        // 策略:尽量使用普通的 startService,只有在后台被系统拦截时(IllegalStateException),
+        // 才不得已使用 startForegroundService。这能避免系统因 Service 启动慢而直接杀死 App。
+        try {
+            // 1. 优先尝试普通启动(安全,不会崩)
+            this.startService(serviceIntent);
+        } catch (IllegalStateException e) {
+            // 2. 捕获到 IllegalStateException 说明 App 在后台,必须用 Foreground Service
+            try {
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+                    this.startForegroundService(serviceIntent);
+                }
+            } catch (Exception innerE) {
+                // 如果还是起不来(比如 Android 14 后台限制),记录日志,但不要让 App 闪退
+                Log.e("RAImage", "Failed to startForegroundService fallback", innerE);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        // [修改结束] -------------------------------------------------------------------
 
-			this.startForegroundService(serviceIntent);
-		} else {
+        Intent intent = new Intent(getApplicationContext(),RAImageBackgroundService3.class);
+        bindService(intent,mServiceConnection, Context.BIND_AUTO_CREATE);
 
-			this.startService(serviceIntent);
-		}
+        /***/
 
-		Intent intent = new Intent(getApplicationContext(),RAImageBackgroundService3.class);
-		bindService(intent,mServiceConnection, Context.BIND_AUTO_CREATE);
+        RACrashHandler.init(this);
+    }
 
-		/***/
+    @Override
+    public Class getServiceClass() {
+        return mService.getClass();
+    }
 
-		RACrashHandler.init(this);
+    @Override
+    public boolean useFakeData()
+    {
+        return false;
     }
 
-	@Override
-	public Class getServiceClass() {
-		return mService.getClass();
-	}
 
-	@Override
-	public boolean useFakeData()
-	{
-		return false;
-	}
 
-	@Override
-	public void onTerminate() {
-		Log.d("_RAIMAGE", "onTerminate: RedAntApplication");
-		super.onTerminate();
+    @Override
+    public void onTerminate() {
+        Log.d("_RAIMAGE", "onTerminate: RedAntApplication");
+        super.onTerminate();
 
-		unbindService(mServiceConnection);
+        unbindService(mServiceConnection);
 
 
-		unregisterReceiver(ApplicaitonReceiver);
-	}
+        unregisterReceiver(ApplicaitonReceiver);
+    }
 
-	@Override
-	protected void finalize() throws Throwable {
+    @Override
+    protected void finalize() throws Throwable {
 
-		Log.d("_RAIMAGE", "finalize: RedAntApplication");
-		super.finalize();
-	}
-}
+        Log.d("_RAIMAGE", "finalize: RedAntApplication");
+        super.finalize();
+    }
+}

+ 5 - 3
ApexDrivers/rapdflib/build.gradle

@@ -1,11 +1,11 @@
 apply plugin: 'com.android.library'
 
 android {
-    compileSdk 35
+    compileSdk 36
 
     defaultConfig {
         minSdkVersion 28
-        targetSdkVersion 35
+        targetSdkVersion 36
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         consumerProguardFiles "consumer-rules.pro"
@@ -38,7 +38,9 @@ dependencies {
     testImplementation 'junit:junit:4.13.2'
     androidTestImplementation 'androidx.test.ext:junit:1.1.5'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
-    implementation 'com.github.barteksc:android-pdf-viewer:3.2.0-beta.1'
+//    implementation 'com.github.barteksc:android-pdf-viewer:3.2.0-beta.1'
+
+    implementation 'com.github.mhiew:android-pdf-viewer:3.2.0-beta.3'
     api project(path: ':RAUtilsLibrary')
 
 }

+ 34 - 23
ApexDrivers/ratradefiling/build.gradle

@@ -1,7 +1,7 @@
 apply plugin: 'com.android.application'
 
 android {
-    compileSdk 35
+    compileSdk = 36
 
 
 //    splits {
@@ -16,11 +16,18 @@ android {
 
     defaultConfig {
         applicationId "com.usai.ratradefiling"
-        minSdkVersion 28
-        targetSdkVersion 35
-        versionCode 6
+        minSdk  = 28
+        targetSdk = 36
+
+        versionCode 7
         versionName "1.18"
-        ndk.abiFilters 'armeabi-v7a',"arm64-v8a"
+        ndk {
+            // 只保留 ARM 架构
+            // arm64-v8a: 适配所有新手机 + 你的 M4 模拟器 (这是主力)
+            // armeabi-v7a: 适配 2017 年以前的老旧手机 (为了兼容性建议保留)
+            // x86 / x86_64: 彻底删除,M4 不需要,真机也不需要
+            abiFilters 'arm64-v8a', 'armeabi-v7a'
+        }
 
 //        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
     }
@@ -28,41 +35,45 @@ android {
     buildTypes {
         release {
             minifyEnabled true
-            shrinkResources true
-            zipAlignEnabled true
-            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-project.txt'
+//            zipAlignEnabled true
+            shrinkResources false
+            proguardFiles  'proguard-project.txt'
+            debuggable false
         }
         debug {
-            debuggable true
-//            minifyEnabled true
-//            zipAlignEnabled true
-//            shrinkResources true
-//
-//            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-project.txt'
 
+            minifyEnabled true
+
+            shrinkResources false
+            proguardFiles  'proguard-project.txt'
         }
     }
-    namespace 'com.usai.ratradefiling'
+    namespace = 'com.usai.ratradefiling'
     compileOptions {
         targetCompatibility JavaVersion.VERSION_11
         sourceCompatibility JavaVersion.VERSION_11
     }
     gradle.projectsEvaluated {
-        tasks.withType(JavaCompile) {
-//            options.compilerArgs << "-Xlint:deprecation"
-//            options.compilerArgs << "-Xlint:unchecked"
+        tasks.withType(JavaCompile).tap {
+            configureEach {
+            options.compilerArgs << "-Xlint:deprecation"
+            options.compilerArgs << "-Xlint:unchecked"
 
+            }
         }
     }
 }
 
 dependencies {
 //    implementation fileTree(dir: "libs", include: ["*.jar"])
-    api 'androidx.appcompat:appcompat:1.6.1'
+//    api 'androidx.appcompat:appcompat:1.6.1'
+//    api 'androidx.legacy:legacy-support-v4:1.0.0'
+//    api 'androidx.constraintlayout:constraintlayout:2.1.4'
+//    implementation 'com.google.android.material:material:1.8.0'
+    api 'androidx.appcompat:appcompat:1.7.0'
     api 'androidx.legacy:legacy-support-v4:1.0.0'
-    api 'androidx.constraintlayout:constraintlayout:2.1.4'
-    implementation 'com.google.android.material:material:1.8.0'
-
+    api 'androidx.constraintlayout:constraintlayout:2.2.1'
+    implementation 'com.google.android.material:material:1.12.0'
 
 //    implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.18'
 //    implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
@@ -71,7 +82,7 @@ dependencies {
 //
     implementation project(path: ':RAUtilsLibrary')
     implementation project(path: ':CommonEditorLib')
-    implementation project(path: ':rapdflib')
+//    implementation project(path: ':rapdflib')
 //    implementation 'androidx.wear:wear:1.0.0'
 //    compileOnly 'com.google.android.wearable:wearable:2.6.0'
 //    testImplementation 'junit:junit:4.12'

+ 9 - 2
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/EmptyActivity.java

@@ -1,11 +1,18 @@
 package com.usai.ratradefiling;
 
+import android.content.res.Resources;
+import android.os.Bundle;
+
 import androidx.appcompat.app.AppCompatActivity;
 
-import android.os.Bundle;
+import com.usai.redant.rautils.utils.TextScaleUtil;
 
 public class EmptyActivity extends AppCompatActivity {
-
+    @Override
+    public Resources getResources() {
+        Resources resources = super.getResources();
+        return TextScaleUtil.getResources(this,resources,1.0f);
+    }
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

+ 26 - 27
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/PrivacyActivity.java

@@ -1,6 +1,7 @@
 package com.usai.ratradefiling;
 
 import android.content.Intent;
+import android.content.res.Resources;
 import android.graphics.Color;
 import android.graphics.Insets;
 import android.os.Bundle;
@@ -18,8 +19,17 @@ import androidx.annotation.NonNull;
 import androidx.appcompat.app.ActionBar;
 import androidx.appcompat.app.AppCompatActivity;
 
+import com.usai.redant.rautils.utils.TextScaleUtil;
+
 public class PrivacyActivity extends AppCompatActivity
 {
+
+	@Override
+	public Resources getResources() {
+		Resources resources = super.getResources();
+		return TextScaleUtil.getResources(this,resources,1.0f);
+	}
+
 	@Override
 	public boolean onOptionsItemSelected(MenuItem item)
 	{
@@ -46,6 +56,7 @@ public class PrivacyActivity extends AppCompatActivity
 		titleview.setText("PRIVACY POLICY");
 		setTitle("PRIVACY POLICY");
 		ActionBar actionBar = getSupportActionBar();
+
 		actionBar.setCustomView(mActionBarView, lp);
 //		actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
 //		actionBar.setDisplayShowCustomEnabled(true);
@@ -53,6 +64,9 @@ public class PrivacyActivity extends AppCompatActivity
 
 
 		actionBar.setDisplayShowTitleEnabled(true);
+
+
+		getSupportActionBar().setElevation(0);
 	}
 	@Override
 	protected void onCreate(Bundle savedInstanceState)
@@ -60,12 +74,18 @@ public class PrivacyActivity extends AppCompatActivity
 		Log.d("AboutActivity", "onCreate");
 
 		super.onCreate(savedInstanceState);
+
+
+
+
 		setContentView(R.layout.activity_html);
+
 		if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
 		{
 
 
 			ViewGroup c = findViewById(R.id.scrollView1);
+//			c.setBackgroundResource(R.color.TFPrimary);
 			c.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener()
 			{
 				@NonNull
@@ -92,37 +112,16 @@ public class PrivacyActivity extends AppCompatActivity
 
 		}
 		setCustomActionBar();
+
+
 		WebView wv = (WebView) findViewById(R.id.webView1);
 
 		wv.setBackgroundColor(Color.WHITE); // 设置背景色
-//
-//
-//		Uri uri= Uri.parse("R.raw.privacy");
-//
-//String url = uri.getPath();
+
 		wv.loadUrl("file:///android_res/raw/privacy.html");
-//		wv.getBackground().setAlpha(); // 设置填充透明度 范围:0-255
-
-//		String content = "";
-//		try
-//		{
-//			InputStream in = getResources().openRawResource(R.raw.privacy);
-//			// 获取文件的字节数
-//			int lenght = in.available();
-//			// 创建byte数组
-//			byte[] buffer = new byte[lenght];
-//			// 将文件中的数据读到byte数组中
-//			in.read(buffer);
-//			content = EncodingUtils.getString(buffer, "UTF-8");
-//		}
-//		catch (Exception e)
-//		{
-//			e.printStackTrace();
-//		}
-//		wv.getSettings().setDefaultTextEncodingName("UTF-8");
-//		String encodedHtml = Base64.encodeToString(content.getBytes(), Base64.NO_PADDING);
-//		wv.loadData(encodedHtml, "text/html", "base64");
-//		wv.loadData(content, "text/html", null);
+
 		
 	}
+
+
 }

+ 340 - 301
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/RootActivity.java

@@ -8,24 +8,29 @@ import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.content.res.Resources;
+import android.content.res.TypedArray;
 import android.graphics.Insets;
+import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
-import android.text.TextUtils;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.WindowInsets;
+import android.widget.ImageView;
 
 import androidx.annotation.NonNull;
 import androidx.core.app.ActivityCompat;
+import androidx.core.content.ContextCompat;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
 import androidx.localbroadcastmanager.content.LocalBroadcastManager;
-import androidx.viewpager.widget.ViewPager;
+import androidx.viewpager2.adapter.FragmentStateAdapter;
+import androidx.viewpager2.widget.ViewPager2;
 
-import com.google.android.material.bottomnavigation.BottomNavigationView;
+import com.google.android.material.tabs.TabLayout;
+import com.google.android.material.tabs.TabLayoutMediator;
 import com.usai.ratradefiling.about.AboutFragment;
 import com.usai.ratradefiling.base.BasicActivity;
 import com.usai.ratradefiling.home.FunctionPanelSettingActivity;
@@ -35,6 +40,9 @@ import com.usai.ratradefiling.my.MyFragment;
 import com.usai.redant.rautils.utils.RAUtil;
 import com.usai.redant.rautils.utils.TextScaleUtil;
 
+import java.util.ArrayList;
+import java.util.List;
+
 //import static androidx.constraintlayout.widget.ConstraintSet.GONE;
 //import com.usai.util.commonUtil;
 
@@ -43,11 +51,70 @@ import com.usai.redant.rautils.utils.TextScaleUtil;
  * HomeActivity 主界面
  */
 
-public class RootActivity extends BasicActivity {
+public class RootActivity extends BasicActivity
+{
+
+    /**
+     * tab bar 相关
+     */
+    private List<Fragment> list = new ArrayList<>();
+    public class MyPagerAdapter extends FragmentStateAdapter
+    {
+
+        public MyPagerAdapter(@NonNull FragmentActivity fragmentActivity) {
+            super(fragmentActivity);
+        }
+
+        @Override
+        public Fragment createFragment(int position)
+        {
+            return list.get(position);
+        }
+
+        @Override
+        public int getItemCount() {
+            return list.size();
+        }
+    }
+
+    private ViewPager2 viewPager;
+
+
+    private TabLayout tabLayout;
+
+
+    private String[] title;
+    private TypedArray icon ;
+
+
+
+
+    private void changeIconImgBottomMargin(ViewGroup parent, int px)
+    {
+        for(int i = 0; i < parent.getChildCount(); i++)
+        {
+            View child = parent.getChildAt(i);
+            if(child instanceof ViewGroup)
+            {
+                changeIconImgBottomMargin((ViewGroup) child, px);
+            }
+            else if(child instanceof ImageView)
+            {
+                ViewGroup.MarginLayoutParams lp = ((ViewGroup.MarginLayoutParams) child.getLayoutParams());
+                lp.bottomMargin = px;
+                lp.topMargin = px;
+                child.requestLayout();
+            }
+        }
+    }
+
+
 
-    private NoScrollViewPager viewPager;
     private MenuItem menuItem;
-    private BottomNavigationView bottomNavigationView;
+//    private BottomNavigationView bottomNavigationView;
+
+
+
     int selectedMenuItem;
     boolean login=false;
 
@@ -60,6 +127,10 @@ public class RootActivity extends BasicActivity {
     }
 
 
+    /**
+     * 固定字体大小
+     */
+
     @Override
     public Resources getResources() {
         Resources resources = super.getResources();
@@ -70,11 +141,11 @@ public class RootActivity extends BasicActivity {
     protected void attachBaseContext(Context newBase) {
         super.attachBaseContext(TextScaleUtil.attachBaseContext(newBase,fontScale));
     }
-
-    public void setFontScale(float fontScale) {
-        this.fontScale = fontScale;
-        TextScaleUtil.recreate(this);
-    }
+//
+//    public void setFontScale(float fontScale) {
+//        this.fontScale = fontScale;
+//        TextScaleUtil.recreate(this);
+//    }
 
 
     @Override
@@ -82,14 +153,14 @@ public class RootActivity extends BasicActivity {
         getMenuInflater().inflate(R.menu.panel_setting,menu);
         actionbutton = menu;
 
-        MenuItem mi= menu.getItem(0);
-        if(mi!=null)
-        {
-            if(viewPager.getCurrentItem() == 0)
-                mi.setVisible(true);
-            else
-                mi.setVisible(false);
-        }
+//        MenuItem mi= menu.getItem(0);
+//        if(mi!=null)
+//        {
+//            if(viewPager.getCurrentItem() == 0)
+//                mi.setVisible(true);
+//            else
+//                mi.setVisible(false);
+//        }
 
         return  true;
     }
@@ -102,14 +173,16 @@ public class RootActivity extends BasicActivity {
 
                 if (login && (viewPager.getCurrentItem() == 0 || viewPager.getCurrentItem() == 1)) {
                     boolean personMode = TradeFilingApplication.get_instance().getPersonMode();
+
+                    // personal mode 功能已去掉,只保留切换逻辑,无实际效果。
                     personMode = !personMode;
                     TradeFilingApplication.get_instance().setPersonMode(personMode);
 
-                    if (personMode) {
-                        getSupportActionBar().setHomeAsUpIndicator(R.drawable.navigate_logo);
-                    } else {
+//                    if (personMode) {
                         getSupportActionBar().setHomeAsUpIndicator(R.drawable.navigate_logo);
-                    }
+//                    } else {
+//                        getSupportActionBar().setHomeAsUpIndicator(R.drawable.navigate_logo);
+//                    }
 
                     Intent intent = new Intent("com.usai.tradefiling.broadcast.person_mode");
                     LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
@@ -130,8 +203,10 @@ public class RootActivity extends BasicActivity {
 //                intent.putExtra("forNewResult", true);
 //                intent.putExtra("maxDisplayCount", 3);
 
-                    HomeFragment homef=(HomeFragment)((ViewPagerAdapter)viewPager.getAdapter()).getItem(viewPager.getCurrentItem());
-                    homef.startActivityForResult(intent, RequestCode.FunctionSetting);
+                    HomeFragment homef=(HomeFragment)list.get(0);
+
+//                    HomeFragment homef=(HomeFragment)(viewPager.getAdapter()).getItem(viewPager.getCurrentItem());
+                    homef.openActivity(intent, RequestCode.FunctionSetting);
                 }
 
 
@@ -163,37 +238,6 @@ public class RootActivity extends BasicActivity {
         super.onDestroy();
     }
 
-//    @Override
-//    public void changeStatusBarNormal() {
-//        initStatusBar(R.color.white);
-//
-////        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
-////            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
-////        }
-//    }
-    @Override
-    public void changeStatusBarBG()
-    {
-        super.changeStatusBarBG();
-
-        if(login)
-        {
-            changeStatusBarGradient();
-        }
-        else
-        {
-            changeStatusBarNormal();
-        }
-
-    }
-
-//    @Override
-//    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-//        super.onActivityResult(requestCode, resultCode, data);
-//
-//
-//    }
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
 //        autoSetupStatusBar=false;
@@ -220,41 +264,43 @@ public class RootActivity extends BasicActivity {
                 {
                     boolean blogin = intent.getBooleanExtra("state",true);
                     login=blogin;
-
-                    final String msg = intent.getStringExtra("msg");
-
-
                     setupViewPager(viewPager);
 
-
-                    Intent aintent = new Intent();
-
-                    aintent.setClass(RootActivity.this, RootActivity.class);
-//                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-                    aintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-                    startActivity(aintent);
-
-                    if(!TextUtils.isEmpty(msg))
-                    {
-                        Handler handler = new Handler(Looper.getMainLooper());
-
-                        handler.post(new Runnable() {
-                            @Override
-                            public void run() {
-                                AlertDialog.Builder builder = new AlertDialog.Builder(RootActivity.this);
-                                builder.setTitle("Warning");
-                                builder.setMessage(msg);
-                                builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
-                                    @Override
-                                    public void onClick(DialogInterface dialog, int which) {
-
-                                    }
-                                });
-                                builder.show();
-
-                            }
-                        });
-                    }
+//
+//                    final String msg = intent.getStringExtra("msg");
+//
+//
+//
+//
+//
+//                    Intent aintent = new Intent();
+//
+//                    aintent.setClass(RootActivity.this, RootActivity.class);
+////                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+//                    aintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+//                    startActivity(aintent);
+//
+//                    if(!TextUtils.isEmpty(msg))
+//                    {
+//                        Handler handler = new Handler(Looper.getMainLooper());
+//
+//                        handler.post(new Runnable() {
+//                            @Override
+//                            public void run() {
+//                                AlertDialog.Builder builder = new AlertDialog.Builder(RootActivity.this);
+//                                builder.setTitle("Warning");
+//                                builder.setMessage(msg);
+//                                builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
+//                                    @Override
+//                                    public void onClick(DialogInterface dialog, int which) {
+//
+//                                    }
+//                                });
+//                                builder.show();
+//
+//                            }
+//                        });
+//                    }
 
 
 
@@ -273,24 +319,98 @@ public class RootActivity extends BasicActivity {
 
         };
 
-//
-//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
-//        {
-//
-//
-//
-//            localBroadcastManager.registerReceiver(br, intentFilter,RECEIVER_NOT_EXPORTED);
-//        }
-//        else
-        {
+
             localBroadcastManager.registerReceiver(br, intentFilter);
-        }
 
-//        registerReceiver(br, intentFilter);
+
+
 
         setContentView(R.layout.activity_root);
 
 
+
+        if (savedInstanceState != null) {
+            login = savedInstanceState.getBoolean("login");
+        }
+
+
+
+
+
+
+//        Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
+
+
+
+//        setSupportActionBar(toolbar);
+
+        getSupportActionBar().setDisplayShowTitleEnabled(false);
+
+
+
+        /*
+        * 初始化分页
+         */
+        viewPager = (ViewPager2) findViewById(R.id.viewpager);
+        viewPager.setUserInputEnabled(false);
+        viewPager.setOffscreenPageLimit(3);
+
+        tabLayout = findViewById(R.id.tab);
+        tabLayout.setTabIconTint(null);
+        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener()
+        {
+            @Override
+            public void onTabSelected(TabLayout.Tab tab)
+
+            {
+//                Log.e("DEBUG LOADING", "onTabSelected: "+this.getClass().getName() );
+                changeIconImgBottomMargin(tabLayout,8);
+
+
+
+
+
+                viewPager.setCurrentItem(tab.getId(), false);
+//                viewPager.setCurrentItem();
+
+            }
+
+            @Override
+            public void onTabUnselected(TabLayout.Tab tab)
+            {
+//                super.onTabUnselected(tab);
+
+            }
+
+            @Override
+            public void onTabReselected(TabLayout.Tab tab)
+            {
+
+            }
+        });
+
+
+        getSupportActionBar().setHomeAsUpIndicator(R.drawable.navigate_logo);
+
+
+
+        setupViewPager(viewPager);
+
+
+        boolean pop = checkAllPermission();
+
+
+        if (savedInstanceState != null) {
+            login = savedInstanceState.getBoolean("login");
+        }
+        else
+        {
+            TradeFilingApplication.get_instance().checkUpdate(true,null);
+        }
+
+/*
+* android 35 full 全屏适配
+ */
         if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
         {
 
@@ -322,173 +442,75 @@ public class RootActivity extends BasicActivity {
 
         }
 
-        if (savedInstanceState != null) {
-            login = savedInstanceState.getBoolean("login");
-        }
-
-
 
 
+        viewPager.registerOnPageChangeCallback(
+                new ViewPager2.OnPageChangeCallback()
+                {
 
+                    @Override
+                    public void onPageSelected(int position)
+                    {
 
-//        toolbar = (Toolbar) findViewById(R.id.tool_bar);
-//        setSupportActionBar(toolbar);
-//        toolbar.setVisibility(GONE);
-        getSupportActionBar().setDisplayShowTitleEnabled(false);
 
+                        super.onPageSelected(position);
 
-        viewPager = (NoScrollViewPager) findViewById(R.id.viewpager);
-        bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation);
 
-        bottomNavigationView.setItemIconTintList(null);
-//        bottomNavigationView.setItemTextColor();;
-//        bottomNavigationView.getItemTextColor();
+                        if(actionbutton!=null)
+                            actionbutton.getItem(0).setVisible(true);
+//                        getSupportActionBar().setHomeAsUpIndicator(R.drawable.apexlogo);
+//                        getSupportActionBar().setDisplayShowTitleEnabled(false);
 
-//        bottomNavigationView.setlistener
 
 
 
-        bottomNavigationView.setOnNavigationItemSelectedListener(
-                new BottomNavigationView.OnNavigationItemSelectedListener() {
-                    @Override
-                    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
-                  //      MenuItem mi= actionbutton.getItem(0);//
-                  //      mi.setVisible(false);
-                        actionbutton.getItem(0).setVisible(false);
                         getSupportActionBar().setHomeAsUpIndicator(R.drawable.navigate_logo);
                         getSupportActionBar().setDisplayShowTitleEnabled(false);
-                        switch (item.getItemId()) {
-                            case R.id.item_login:
 
-                                viewPager.setCurrentItem(0);
-                                return true;
 
-                            case R.id.item_my:
-                                viewPager.setCurrentItem(1);
-                                return true;
+                        switch(title[position])
+                        {
+                            case "Home":
+                                if(actionbutton!=null)
+                                {
+                                    actionbutton.getItem(0).setVisible(true);
+                                }
 
-                            case R.id.item_about:
 
-                                viewPager.setCurrentItem(2);
-                                return true;
 
-                            case R.id.item_home:
-                    //            actionbutton.getItem(0).setVisible(true);//
-                                if (TradeFilingApplication.get_instance().getPersonMode()) {
+//                                toolbar.setNavigationIcon(R.drawable.navigate_logo);
+//                                if (TradeFilingApplication.get_instance().getPersonMode()) {
                                     getSupportActionBar().setHomeAsUpIndicator(R.drawable.navigate_logo);
-                                }
+//                                }
                                 getSupportActionBar().setDisplayShowTitleEnabled(false);
-                                viewPager.setCurrentItem(0);
-                                return true;
-
-
-                        }
-                        return false;
-                    }
-                });
-
+//                                viewPager.setCurrentItem(0);
+//                                return true;
 
-        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
-            @Override
-            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
-
-            }
-
-            @Override
-            public void onPageSelected(int position) {
-
-                MenuItem item= bottomNavigationView.getMenu().getItem(position);
-
-                switch (item.getItemId())
-                {
-                    case R.id.item_login:
-                        TradeFilingApplication.get_instance().historyactive = false;
-                        TradeFilingApplication.get_instance().homeactive = false;
-                        break;
-
-//                    case R.id.item_tool:
-//                        TradeFilingApplication.get_instance().historyactive = false;
-//                        TradeFilingApplication.get_instance().homeactive = false;
-//                        break;
+//                                if(actionbutton!=null)
+//                                {
+//                                    actionbutton.getItem(0).setVisible(true);
+//                                }
 //
-//                    case R.id.item_otool:
-//                        TradeFilingApplication.get_instance().historyactive = false;
-//                        TradeFilingApplication.get_instance().homeactive = false;
-//                        break;
-
-                    case R.id.item_home:
-                        TradeFilingApplication.get_instance().historyactive = false;
-                        TradeFilingApplication.get_instance().homeactive = true;
-
-                        HomeFragment homef=(HomeFragment)((ViewPagerAdapter)viewPager.getAdapter()).getItem(position);
-//                        homef.checkDirty();
-                        break;
-
-//                    case R.id.item_history:
-//
-//                        TradeFilingApplication.get_instance().historyactive = true;
-//                        TradeFilingApplication.get_instance().homeactive = false;
-//                        HistoryFragment historyf=(HistoryFragment)((ViewPagerAdapter)viewPager.getAdapter()).getItem(position);
-//                        historyf.checkDirty();
-//
-//                        break;
-//                    case R.id.item_search:
-//                        TradeFilingApplication.get_instance().historyactive = false;
-//                        TradeFilingApplication.get_instance().homeactive = false;
-//                        break;
-
-                    case R.id.item_my:
-                        TradeFilingApplication.get_instance().historyactive = false;
-                        TradeFilingApplication.get_instance().homeactive = false;
-                        break;
-                }
-
-
+//                                if (ApexTrackingApplication.get_instance().getPersonMode()) {
+//                                    getSupportActionBar().setHomeAsUpIndicator(R.drawable.apexlogo_p);
+//                                }
+//                                getSupportActionBar().setDisplayShowTitleEnabled(true);
+                                break;
+                            default:
+                            {
+                                if(actionbutton!=null)
+                                    actionbutton.getItem(0).setVisible(false);
+                            }
 
-//                if(viewPager.gets)
-//                if (menuItem != null) {
-//                    menuItem.setChecked(false);
-//                } else {
-//                    bottomNavigationView.getMenu().getItem(0).setChecked(false);
-//                }
-//                menuItem = bottomNavigationView.getMenu().getItem(position);
-//                menuItem.setChecked(true);
-            }
 
-            @Override
-            public void onPageScrollStateChanged(int state) {
-            }
-        });
+                        }
 
 
 
-//        viewPager.set
-////        禁止ViewPager滑动
-//        viewPager.setOnTouchListener(new View.OnTouchListener() {
-//            @Override
-//            public boolean onTouch(View v, MotionEvent event) {
-//                return true;
-//            }
-//        });
 
-        setupViewPager(viewPager);
-
-
-        boolean pop = checkAllPermission();
-//        if(!pop)
-//        {
-//            if(TextUtils.isEmpty(ApexTrackingApplication.station_name))
-//            {
-//                Intent intent = new Intent();
-//                intent.setClass(RootActivity.this,ServerSettingActivity.class);
-////            startActivity(intent);
-//                startActivityForResult(intent, 0);
-//            }
-//        }
-
-        if (savedInstanceState == null) {
-            TradeFilingApplication.get_instance().checkUpdate(true,null);
-        }
+                    }
+                }
+        );
 
     }
     public boolean checkAllPermission() {
@@ -621,50 +643,42 @@ public class RootActivity extends BasicActivity {
         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
     }
 
-    private void setupViewPager(final ViewPager viewPager) {
+    private void setupViewPager(final ViewPager2 viewPager) {
+
+        list.clear();
 
 
+        viewPager.setAdapter(new MyPagerAdapter(this));
 
 
-        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
+//        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
 
 
 //        adapter.clear();
 
+
+        ViewGroup c = findViewById(R.id.activity_main);
         if(login)
         {
-           // if(actionbutton!=null)//
-           //     actionbutton.getItem(0).setVisible(true);//
 
-            bottomNavigationView.getChildAt(0).setSelected(true);
-            bottomNavigationView.getMenu().clear();
-//                bottomNavigationView.getMenu().
-            bottomNavigationView.inflateMenu(R.menu.navi_login);
+            c.setBackgroundResource(R.color.TFPrimary);
 
+//            c.setBackgroundColor(R.color.TFPrimary);
+//            c.setBackground(R.color.TFPrimary);
+            if(actionbutton!=null)
+                actionbutton.getItem(0).setVisible(true);
 
+            title = getResources().getStringArray(R.array.login_title);
+            icon = getResources().obtainTypedArray(R.array.login_icon);
 
             HomeFragment homeFragment = new HomeFragment();
-//            HistoryFragment historyFragment = new HistoryFragment();
-//            SearchFragment searchFragment = new SearchFragment();
-//            ToolsFragment toolsFragment = new ToolsFragment();
             MyFragment myFragment = new MyFragment();
-
-
             AboutFragment aboutFragment = new AboutFragment();
 
-            adapter.addFragment(homeFragment);
-//            adapter.addFragment(historyFragment);
-//            adapter.addFragment(searchFragment);
-//            adapter.addFragment(toolsFragment);
-
-
-            adapter.addFragment(myFragment);
-
-
-
-
-            adapter.addFragment(aboutFragment);
 
+            list.add(homeFragment);
+            list.add(myFragment);
+            list.add(aboutFragment);
 
             TradeFilingApplication.get_instance().homeactive = true;
             setupLoginAppearance();
@@ -674,92 +688,117 @@ public class RootActivity extends BasicActivity {
         }
         else
         {
+
+
+
+            c.setBackgroundResource(R.color.light_gray);
+            if(actionbutton!=null)
+                actionbutton.getItem(0).setVisible(false);
+            title = getResources().getStringArray(R.array.logout_title);
+            icon = getResources().obtainTypedArray(R.array.logout_icon);
+
+
             TradeFilingApplication.get_instance().homeactive = false;
             TradeFilingApplication.get_instance().historyactive = false;
             TradeFilingApplication.get_instance().recentactive = false;
-       //     if(actionbutton!=null)
-        //        actionbutton.getItem(0).setVisible(false);
-            bottomNavigationView.getChildAt(0).setSelected(true);
-            bottomNavigationView.getMenu().clear();
-            bottomNavigationView.inflateMenu(R.menu.navi_logout);
-
 
 
             LoginFragment loginFragment = new LoginFragment();
+            AboutFragment aboutFragment = new AboutFragment();
+
+            list.add(loginFragment);
+            list.add(aboutFragment);
+
 
+            setupLogoutAppearance();
+        }
 
 
-            adapter.addFragment(loginFragment);
 
-//            SearchFragment searchFragment = new SearchFragment();
-//            adapter.addFragment(searchFragment);
 
-            AboutFragment aboutFragment = new AboutFragment();
-            adapter.addFragment(aboutFragment);
 
-            setupLogoutAppearance();
-//            toolbar.setVisibility(GONE);
-        }
+        TabLayoutMediator tm=  new TabLayoutMediator(tabLayout, viewPager, new TabLayoutMediator.TabConfigurationStrategy() {
+
 
 
 
+            @Override
+            public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
 
 
+                tab.setText(title[position]);
 
+                tab.setIcon(icon.getResourceId(position, 0));
+                tab.setId(position);
+//                tab.setIcon
+            }
+        });
 
-//        viewPager.removeAllViews();
+        tm.attach();
 
+        changeIconImgBottomMargin(tabLayout,8);
 
-        viewPager.setAdapter(adapter);
     }
 
 
 
     private void setupLoginAppearance() {
+        getSupportActionBar().show();
+
+        changeStatusBarGradient();
+
+
 
-//        changeStatusBarGradient();
 
         androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
-        actionBar.show();
         if(actionBar != null){
             actionBar.setElevation(0); // 5.0以上隐藏分割线
-
+            Drawable drawable = null;
             // 将图像渲染成白色
-            Drawable drawable = getResources().getDrawable(R.drawable.navigate_logo);
+
+                drawable = getResources().getDrawable(R.drawable.navigate_logo);
+
 //            ImageUtil.renderingDrawable(drawable,getResources(),R.color.ApexDriverWhite);
 
             actionBar.setHomeAsUpIndicator(drawable);
             actionBar.setDisplayHomeAsUpEnabled(true);
+            actionBar.setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(this, R.color.TFPrimary)));
 
         }
 
-//        setTitle(null);
+        getSupportActionBar().setElevation(0); // 5.0以上隐藏分割线
+
 
-        invalidateOptionsMenu();
+        getWindow().setStatusBarColor(getResources().getColor(R.color.TFPrimary));
 
-//        setTitle(ApexDriverApplication.sharedApplication().user + " " + ApexDriverApplication.sharedApplication().getFirstName());
     }
 
     private void setupLogoutAppearance() {
-
+//
+//        if(true)
+//            return;
+        getSupportActionBar().hide();
         changeStatusBarNormal();
 
         androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
-        actionBar.hide();
+//        actionBar.hide();
         if(actionBar != null){
-            actionBar.setElevation(1); // 5.0以上隐藏分割线
 
-//            actionBar.back
-            Drawable drawable = getResources().getDrawable(R.drawable.navigate_logo);
-//            ImageUtil.clearDrawableRendering(drawable);
-
-            actionBar.setHomeAsUpIndicator(null);
-            actionBar.setDisplayHomeAsUpEnabled(true);
 
+            actionBar.setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(this, R.color.light_gray)));
+//            actionBar.setElevation(1); // 5.0以上隐藏分割线
+//
+////            actionBar.back
+//            Drawable drawable = getResources().getDrawable(R.drawable.navigate_logo);
+////            ImageUtil.clearDrawableRendering(drawable);
+//
+//            actionBar.setHomeAsUpIndicator(null);
+//            actionBar.setDisplayHomeAsUpEnabled(true);
+//
         }
 
-        invalidateOptionsMenu();
 
-//        setTitle(getString(R.string.login_title));
+        getWindow().setStatusBarColor(getResources().getColor(R.color.light_gray));
+
     }
 }

+ 71 - 21
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/TradeFilingApplication.java

@@ -5,21 +5,27 @@ import static com.usai.ratradefiling.Const.FAKE_DATA;
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.DownloadManager;
-import android.app.ProgressDialog;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.SharedPreferences;
-import android.content.res.Configuration;
-import android.content.res.Resources;
+import android.graphics.Color;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Environment;
 import android.os.Handler;
+import android.os.Looper;
 import android.os.Message;
 import android.os.SystemClock;
 import android.text.TextUtils;
 import android.util.Log;
+import android.view.Gravity;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.TextView;
 
 import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 
@@ -139,10 +145,11 @@ public class TradeFilingApplication extends RedantApplication implements RAProvi
 			@Override
 			public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
 				mCurrentActivity = activity;
-				Resources res = TradeFilingApplication.getInstance().getResources();
-				Configuration config = new Configuration();
-				config.setToDefaults();
-				res.updateConfiguration(config, res.getDisplayMetrics());
+//				Resources res = TradeFilingApplication.getInstance().getResources();
+//				Configuration config = new Configuration();
+//				config.setToDefaults();
+//				res.updateConfiguration(config, res.getDisplayMetrics());
+//				activity.createConfigurationContext(config);
 			}
 
 			@Override
@@ -190,11 +197,11 @@ public class TradeFilingApplication extends RedantApplication implements RAProvi
 		});
 
 		// 加载系统默认设置,字体不随用户设置变化
-		Resources res = super.getResources();
-		Configuration config = new Configuration();
-		config.setToDefaults();
-		res.updateConfiguration(config, res.getDisplayMetrics());
-
+//		Resources res = super.getResources();
+//		Configuration config = new Configuration();
+//		config.setToDefaults();
+//		res.updateConfiguration(config, res.getDisplayMetrics());
+//		this.getApplicationContext().createConfigurationContext(config);
 		instance = this;
 
 		SharedPreferences pref = TradeFilingApplication.get_instance()
@@ -238,7 +245,7 @@ public class TradeFilingApplication extends RedantApplication implements RAProvi
 	}
 
 	private static final int HandlerMsgTypeCheckUpdate = 0;
-	private Handler handler = new CheckUpdateHandler(this);
+	private final Handler handler = new CheckUpdateHandler(Looper.getMainLooper(),this);
 	private Activity mCurrentActivity;
 
 //	@Override
@@ -250,8 +257,10 @@ public class TradeFilingApplication extends RedantApplication implements RAProvi
 
         WeakReference<TradeFilingApplication> mWeakApp;
 
-        public CheckUpdateHandler(TradeFilingApplication application) {
+        public CheckUpdateHandler(Looper l, TradeFilingApplication application) {
+			super(l);
             mWeakApp = new WeakReference<> (application);
+
         }
 
         @Override
@@ -378,18 +387,55 @@ public class TradeFilingApplication extends RedantApplication implements RAProvi
 
 	}
 
-	private ProgressDialog mProgressDialog;
+	private AlertDialog mProgressDialog;
 
 	public void showProgressDialog(String msg) {
 
-		if (mProgressDialog == null) {
-			mProgressDialog = new ProgressDialog(mCurrentActivity);
-			mProgressDialog.setCancelable(false);
-
+		int llPadding = 30;
+		LinearLayout ll = new LinearLayout(getApplicationContext());
+		ll.setOrientation(LinearLayout.HORIZONTAL);
+		ll.setPadding(llPadding, llPadding, llPadding, llPadding);
+		ll.setGravity(Gravity.CENTER);
+		LinearLayout.LayoutParams llParam = new LinearLayout.LayoutParams(
+				LinearLayout.LayoutParams.WRAP_CONTENT,
+				LinearLayout.LayoutParams.WRAP_CONTENT);
+		llParam.gravity = Gravity.CENTER;
+		ll.setLayoutParams(llParam);
+
+		ProgressBar progressBar = new ProgressBar(getApplicationContext());
+		progressBar.setIndeterminate(true);
+		progressBar.setPadding(0, 0, llPadding, 0);
+		progressBar.setLayoutParams(llParam);
+
+		llParam = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
+				ViewGroup.LayoutParams.WRAP_CONTENT);
+		llParam.gravity = Gravity.CENTER;
+		TextView tvText = new TextView(getApplicationContext());
+		tvText.setText(msg);
+		tvText.setTextColor(Color.parseColor("#000000"));
+		tvText.setTextSize(20);
+		tvText.setLayoutParams(llParam);
+
+		ll.addView(progressBar);
+		ll.addView(tvText);
+
+		AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
+		builder.setCancelable(true);
+		builder.setView(ll);
+
+		mProgressDialog = builder.create();
+
+		mProgressDialog.setCancelable(false);
+		mProgressDialog.show();
+		Window window = mProgressDialog.getWindow();
+		if (window != null) {
+			WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
+			layoutParams.copyFrom(mProgressDialog.getWindow().getAttributes());
+			layoutParams.width = LinearLayout.LayoutParams.WRAP_CONTENT;
+			layoutParams.height = LinearLayout.LayoutParams.WRAP_CONTENT;
+			mProgressDialog.getWindow().setAttributes(layoutParams);
 		}
 
-        mProgressDialog.setMessage(msg);
-		mProgressDialog.show();
 	}
 
 	public void dismissProgressDialog() {
@@ -504,6 +550,10 @@ public class TradeFilingApplication extends RedantApplication implements RAProvi
 
 	}
 
+	public boolean get_login()
+	{
+		return this.m_user .length()>0;
+	}
 	public static void SetAuthorizeStatus(boolean bauthorized)
 	{
 		m_bauthorized = bauthorized;

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

@@ -1,9 +1,10 @@
 package com.usai.ratradefiling.about;
 
+import static androidx.core.text.HtmlCompat.FROM_HTML_MODE_LEGACY;
+
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
-import android.text.Html;
 import android.text.method.LinkMovementMethod;
 import android.text.method.ScrollingMovementMethod;
 import android.view.LayoutInflater;
@@ -12,6 +13,7 @@ import android.view.ViewGroup;
 import android.widget.Button;
 import android.widget.TextView;
 
+import androidx.core.text.HtmlCompat;
 import androidx.fragment.app.Fragment;
 
 import com.usai.ratradefiling.PrivacyActivity;
@@ -65,7 +67,7 @@ public class AboutFragment extends Fragment {
             mParam1 = getArguments().getString(ARG_PARAM1);
             mParam2 = getArguments().getString(ARG_PARAM2);
         }
-        setHasOptionsMenu(false);
+//        setHasOptionsMenu(false);
     }
 
     @Override
@@ -89,7 +91,7 @@ public class AboutFragment extends Fragment {
         int resourceId =getResources().getIdentifier(name, "raw",TradeFilingApplication.getInstance().getPackageName());
         String html_text= RAUtil.getStringFromRAW(getActivity(),resourceId);
 
-        mTextView.setText(Html.fromHtml(html_text));
+        mTextView.setText(HtmlCompat.fromHtml(html_text,FROM_HTML_MODE_LEGACY));
 
 
         mContactView = (TextView) view.findViewById(R.id.tv_contact);
@@ -105,24 +107,10 @@ public class AboutFragment extends Fragment {
             @Override
             public void onClick(View view)
             {
-//                Intent intent = new Intent();
-//
-//
-//                intent.setClass(getActivity(), WebActivity.class);
-//                // intent.putExtra("user", ApexTrackingApplication.get_user());
-//                // intent.putExtra("password", password);
-//                intent.putExtra("url", URL_PRIVACY_POLICY);
-//                intent.putExtra("title", "Privacy Policy");
-//                startActivity(intent);
+
                 Intent intent = new Intent();
                 intent.setClass(getActivity(), PrivacyActivity.class);
-                // intent.putExtra("user", ApexTrackingApplication.get_user());
-                // intent.putExtra("password", password);
 
-//                Uri uri= Uri.parse("R.raw.privacy");
-//
-//
-//                intent.putExtra("url", uri.getPath());
                 intent.putExtra("title", "Privacy Policy");
                 startActivity(intent);
 

+ 48 - 3
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/base/BasicActivity.java

@@ -1,10 +1,10 @@
 package com.usai.ratradefiling.base;
 
-import android.graphics.Color;
 import android.os.Build;
 import android.os.Bundle;
 import android.view.View;
 import android.view.Window;
+import android.view.WindowInsetsController;
 
 import androidx.appcompat.app.AppCompatActivity;
 
@@ -67,15 +67,60 @@ public class BasicActivity extends AppCompatActivity {
 
     }
     public void changeStatusBarGradient() {
-        initStatusBar(R.drawable.gradient_color);
+//        initStatusBar(R.drawable.gradient_color);
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+            // For Android R and above, use WindowInsetsController
+
+            WindowInsetsController insetsController = getWindow().getInsetsController();
+
+            insetsController.setSystemBarsAppearance(
+                    insetsController.getSystemBarsAppearance()&~ WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS,
+                    WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS);
+
+
+
+//            View decor = getWindow().getDecorView();
+//
+//// 获取当前系统UI可见性
+//            int uiVisibility = decor.getSystemUiVisibility();
+//
+//// 移除 SYSTEM_UI_FLAG_LIGHT_STATUS_BAR 标志,恢复深色模式
+//            uiVisibility = uiVisibility & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
+//
+//// 应用新的可见性
+//            decor.setSystemUiVisibility(uiVisibility);
+        } else {
+            // For older Android versions, use the deprecated flag (if necessary for backward compatibility)
+//            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+
+            getWindow().getDecorView().setSystemUiVisibility(getWindow().getDecorView().getSystemUiVisibility()&~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+        }
     }
 
+
+
     public void changeStatusBarNormal() {
         initStatusBar(R.color.white);
 
 //        getWindow().setStatusBarColor(Color.WHITE);
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+            // For Android R and above, use WindowInsetsController
+
+            WindowInsetsController insetsController = getWindow().getInsetsController();
+            insetsController.setSystemBarsAppearance(
+                    insetsController.getSystemBarsAppearance()| WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS,
+                    WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
+            );
+
+
+
+
+        } else {
+            // For older Android versions, use the deprecated flag (if necessary for backward compatibility)
             getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
         }
+
     }
 }

+ 5 - 3
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/dataprovider/OnlineDataProvider.java

@@ -547,7 +547,9 @@ public class OnlineDataProvider extends com.usai.redant.rautils.utils.Network
 			}
 		}
 
-		Locale curLocale = TradeFilingApplication.get_instance().getResources().getConfiguration().locale;
+		Locale curLocale = TradeFilingApplication.get_instance().getResources().getConfiguration().getLocales().get(0);
+
+
 		String languageCode = curLocale.getLanguage();
 		if (languageCode != null) {
 			params.putString("language",languageCode);
@@ -1138,13 +1140,13 @@ public class OnlineDataProvider extends com.usai.redant.rautils.utils.Network
 			return null;
 		}
 		String  ver_name = null;
-		int ver_code = -1;
+		long ver_code = -1;
 		try {
 			// ---get the package info---
 			PackageManager pm = context.getPackageManager();
 			PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0);
 			ver_name = pi.versionName;
-			ver_code = pi.versionCode;
+			ver_code = pi. getLongVersionCode();
 
 		} catch (Exception e) {
 			Log.e("VersionInfo", "Exception", e);

File diff suppressed because it is too large
+ 280 - 474
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/detail/DetailFragment.java


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

@@ -6,6 +6,8 @@ import android.app.AlertDialog;
 import android.content.BroadcastReceiver;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
 import android.graphics.Insets;
 import android.os.Bundle;
 import android.text.TextUtils;
@@ -17,31 +19,88 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.view.WindowInsets;
 import android.widget.EditText;
+import android.widget.ImageView;
 import android.widget.TextView;
 
 import androidx.annotation.NonNull;
 import androidx.appcompat.app.ActionBar;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.fragment.app.Fragment;
-import androidx.viewpager.widget.ViewPager;
+import androidx.fragment.app.FragmentActivity;
+import androidx.viewpager2.adapter.FragmentStateAdapter;
+import androidx.viewpager2.widget.ViewPager2;
 
-import com.google.android.material.bottomnavigation.BottomNavigationView;
-
-import com.usai.ratradefiling.NoScrollViewPager;
+import com.google.android.material.tabs.TabLayout;
+import com.google.android.material.tabs.TabLayoutMediator;
 import com.usai.ratradefiling.R;
 import com.usai.ratradefiling.TradeFilingApplication;
-import com.usai.ratradefiling.ViewPagerAdapter;
 import com.usai.ratradefiling.dataprovider.RADataProvider;
 import com.usai.redant.rautils.utils.RAUtil;
+import com.usai.redant.rautils.utils.TextScaleUtil;
 
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 
 public class NewDetailActivity extends AppCompatActivity {
 
+    Menu m_menu=null;
+
+    private void changeIconImgBottomMargin(ViewGroup parent, int px)
+    {
+        for(int i = 0; i < parent.getChildCount(); i++)
+        {
+            View child = parent.getChildAt(i);
+            if(child instanceof ViewGroup)
+            {
+                changeIconImgBottomMargin((ViewGroup) child, px);
+            }
+            else if(child instanceof ImageView)
+            {
+                ViewGroup.MarginLayoutParams lp = ((ViewGroup.MarginLayoutParams) child.getLayoutParams());
+                lp.bottomMargin = px;
+                lp.topMargin = px;
+                child.requestLayout();
+            }
+        }
+    }
+
+
+    private List<Fragment> list = new ArrayList<>();
+    public class MyPagerAdapter extends FragmentStateAdapter
+    {
+
+        public MyPagerAdapter(@NonNull FragmentActivity fragmentActivity) {
+            super(fragmentActivity);
+        }
+
+        @Override
+        public Fragment createFragment(int position)
+        {
+            return list.get(position);
+        }
+
+        @Override
+        public int getItemCount() {
+            return list.size();
+        }
+    }
+
+
+    private ViewPager2 viewPager;
+
+
+    private TabLayout tabLayout;
+
+
+    private String[] title;
+    ArrayList<String> atitle = new ArrayList<>();
+    private TypedArray icon ;
+
 
     HashMap<String,String> contentmap = new HashMap<String ,String>();
     HashMap<Integer, Integer> menu_map		= new HashMap<Integer, Integer>();
@@ -56,9 +115,9 @@ public class NewDetailActivity extends AppCompatActivity {
     String email_to = null,email_subject = null,email_content = null;
     TextView mtitleview;
 
-    private NoScrollViewPager viewPager;
-    private MenuItem menuItem;
-    private BottomNavigationView bottomNavigationView;
+
+//    private MenuItem menuItem;
+//    private BottomNavigationView bottomNavigationView;
     int selectedMenuItem;
 //    boolean login=false;
     BroadcastReceiver br;
@@ -73,7 +132,8 @@ public class NewDetailActivity extends AppCompatActivity {
     }
     public int getTabCount()
     {
-        return bottomNavigationView.getMenu().size();
+//        return bottomNavigationView.getMenu().size();
+        return title.length;
     }
     private void setCustomActionBar() {
         ActionBar.LayoutParams lp =new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.MATCH_PARENT, Gravity.CENTER);
@@ -118,6 +178,7 @@ public class NewDetailActivity extends AppCompatActivity {
     public boolean onCreateOptionsMenu(Menu menu)
     {
 
+        m_menu=menu;
         if(sub_type.equals("container"))
             return true;
         // Inflate the menu; this adds items to the action bar if it is present.
@@ -133,20 +194,18 @@ public class NewDetailActivity extends AppCompatActivity {
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
+
+        if(item.getGroupId()==-1)
+        {
+            //fragment 植入菜单
+            DetailFragment f= (DetailFragment)list.get(viewPager.getCurrentItem());
+            return f.onMenuItemSelected(item);
+
+        }
+        else
         switch (item.getItemId())
         {
-//            case R.id.action_close:
-//
-//                finish();
-//
-//                Intent intent = new Intent(this, RootActivity.class);
-//
-////                Intent intent = new Intent(context, LoginView.class);
-//                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-//
-//
-//                startActivity(intent);
-//                break;
+
             case android.R.id.home:
                 finish();
                 break;
@@ -226,13 +285,14 @@ public class NewDetailActivity extends AppCompatActivity {
 //				share.putExtra(Intent.EXTRA_STREAM, uri);
                 share.setType("text/plain");
 
-                int selected = bottomNavigationView.getSelectedItemId();
+                int selected = tabLayout.getSelectedTabPosition();//bottomNavigationView.getSelectedItemId();
 
                 ;
-                ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
+//                MyPagerAdapter adapter = new MyPagerAdapter(this);
 
 //                Fragment f =adapter.getItem(selected);
-                String title = getIntent().getStringExtra("action" + menu_map.get(selected));
+                Intent i=getIntent();
+                String title = getIntent().getStringExtra("action" + selected);
                 String content = contentmap.get(title);
                 try {
 
@@ -284,8 +344,11 @@ public class NewDetailActivity extends AppCompatActivity {
 //        outState.putBoolean("login",login);
     }
 
-
-
+    @Override
+    public Resources getResources() {
+        Resources resources = super.getResources();
+        return TextScaleUtil.getResources(this,resources,1.0f);
+    }
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -330,11 +393,24 @@ public class NewDetailActivity extends AppCompatActivity {
 
         if (savedInstanceState != null)
         {
-            menu_map = (HashMap<Integer, Integer>) savedInstanceState
-                    .getSerializable("menu_map");
+
+
+
+            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU) {
+                menu_map = (HashMap<Integer, Integer>) savedInstanceState
+                        .getSerializable("menu_map", HashMap.class);
+
+                contentmap = (HashMap<String, String>) savedInstanceState.getSerializable("contentmap", HashMap.class);
+                // retrievedMap will be null if not found or wrong type
+            } else {
+                // For older APIs, cast the result
+                menu_map = (HashMap<Integer, Integer>) savedInstanceState
+                        .getSerializable("menu_map");
+                contentmap = (HashMap<String, String>) savedInstanceState.getSerializable("contentmap");
+            }
 //            tabmap = (LinkedHashMap<String, Integer>) savedInstanceState
 //                    .getSerializable("tabmap");
-            contentmap = (HashMap<String, String>) savedInstanceState.getSerializable("contentmap");
+
         }
         else
         {
@@ -353,66 +429,183 @@ public class NewDetailActivity extends AppCompatActivity {
 
 
 
-        viewPager = (NoScrollViewPager) findViewById(R.id.viewpager);
-        bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation);
+        viewPager = (ViewPager2) findViewById(R.id.viewpager);
+
+        viewPager.setUserInputEnabled(false);
+        viewPager.setOffscreenPageLimit(3);
+
+        tabLayout = findViewById(R.id.tab);
+        tabLayout.setTabIconTint(null);
+        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener()
+        {
+            @Override
+            public void onTabSelected(TabLayout.Tab tab)
+
+            {
+//                Log.e("DEBUG LOADING", "onTabSelected: "+this.getClass().getName() );
+                changeIconImgBottomMargin(tabLayout,8);
+
+
+
+
+
+                viewPager.setCurrentItem(tab.getId(), false);
+//                viewPager.setCurrentItem();
+
+            }
+
+            @Override
+            public void onTabUnselected(TabLayout.Tab tab)
+            {
+//                super.onTabUnselected(tab);
+
+            }
+
+            @Override
+            public void onTabReselected(TabLayout.Tab tab)
+            {
 
-        bottomNavigationView.setItemIconTintList(null);
-//        bottomNavigationView.setItemTextColor();;
-//        bottomNavigationView.getItemTextColor();
+            }
+        });
+//
+//
+//
+//        bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation);
+//
+//        bottomNavigationView.setItemIconTintList(null);
+////        bottomNavigationView.setItemTextColor();;
+////        bottomNavigationView.getItemTextColor();
+//
+////        bottomNavigationView.setlistener
+//
+//        //默认 >3 的选中效果会影响ViewPager的滑动切换时的效果,故利用反射去掉
+//
+//        bottomNavigationView.setOnNavigationItemSelectedListener(
+//                new BottomNavigationView.OnNavigationItemSelectedListener() {
+//                    @Override
+//                    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
+////                        actionbutton.getItem(0).setVisible(false);
+////                        getSupportActionBar().setHomeAsUpIndicator(R.drawable.apexlogo);
+////                        getSupportActionBar().setDisplayShowTitleEnabled(false);
+//
+////                        if(item.getItemId() == menu_map.get("Tracing").intValue())
+//                        {
+//
+//                            viewPager.setCurrentItem(menu_map.get(item.getItemId()));
+//                            return true;
+//                        }
+//
+//                    }
+//                });
+//
 
-//        bottomNavigationView.setlistener
 
-        //默认 >3 的选中效果会影响ViewPager的滑动切换时的效果,故利用反射去掉
+        setupViewPager(viewPager);
+        viewPager.registerOnPageChangeCallback(
+                new ViewPager2.OnPageChangeCallback()
+                {
 
-        bottomNavigationView.setOnNavigationItemSelectedListener(
-                new BottomNavigationView.OnNavigationItemSelectedListener() {
                     @Override
-                    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
-//                        actionbutton.getItem(0).setVisible(false);
-//                        getSupportActionBar().setHomeAsUpIndicator(R.drawable.apexlogo);
+                    public void onPageSelected(int position)
+                    {
+
+
+                        super.onPageSelected(position);
+
+                        DetailFragment d = (DetailFragment)list.get(position);
+                        d.injectmenu(m_menu);
+
+//                        if(actionbutton!=null)
+//                            actionbutton.getItem(0).setVisible(false);
+////                        getSupportActionBar().setHomeAsUpIndicator(R.drawable.apexlogo);
+////                        getSupportActionBar().setDisplayShowTitleEnabled(false);
+//
+//
+//
+//
+//                        getSupportActionBar().setHomeAsUpIndicator(R.drawable.navigate_logo);
 //                        getSupportActionBar().setDisplayShowTitleEnabled(false);
 
-//                        if(item.getItemId() == menu_map.get("Tracing").intValue())
-                        {
 
-                            viewPager.setCurrentItem(menu_map.get(item.getItemId()));
-                            return true;
-                        }
+//                        switch(title[position])
+//                        {
+//                            case "Home":
+//
+//
+////                                if (TradeFilingApplication.get_instance().getPersonMode()) {
+////                                    getSupportActionBar().setHomeAsUpIndicator(R.drawable.navigate_logo);
+////                                }
+////                                getSupportActionBar().setDisplayShowTitleEnabled(false);
+////                                viewPager.setCurrentItem(0);
+////                                return true;
+//
+////                                if(actionbutton!=null)
+////                                {
+////                                    actionbutton.getItem(0).setVisible(true);
+////                                }
+////
+////                                if (ApexTrackingApplication.get_instance().getPersonMode()) {
+////                                    getSupportActionBar().setHomeAsUpIndicator(R.drawable.apexlogo_p);
+////                                }
+////                                getSupportActionBar().setDisplayShowTitleEnabled(true);
+//                                break;
+//                            case "History":
+//                            {
+////                                HistoryFragment h=(HistoryFragment)list.get(position);
+////                                if(h!=null)
+////                                {
+////                                    h.loadonce();
+////                                }
+////                                if (ApexTrackingApplication.get_instance().getPersonMode()) {
+////                                    getSupportActionBar().setHomeAsUpIndicator(R.drawable.apexlogo_p);
+////
+////                                }
+//                                break;
+//                            }
+//
+//
+//                        }
+
+
+
 
                     }
-                });
+                }
+        );
 
 
+        getSupportActionBar().setElevation(0);
 
-        setupViewPager(viewPager);
+    }
 
+    private void setupViewPager(final ViewPager2 viewPager) {
 
 
-    }
 
-    private void setupViewPager(final ViewPager viewPager) {
+        list.clear();
 
 
+        viewPager.setAdapter(new MyPagerAdapter(this));
 
-        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
+//        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
 
 
 //        adapter.clear();
 
 //        if(true)
-        {
+
 //            if(actionbutton!=null)
 //                actionbutton.getItem(0).setVisible(true);
-
-            bottomNavigationView.getChildAt(0).setSelected(true);
-            bottomNavigationView.getMenu().clear();
-//                bottomNavigationView.getMenu().
-//            bottomNavigationView.inflateMenu();
-//            bottomNavigationView.inflateMenu(R.menu.navi_logout);
-
-//            PrepareMenu(bottomNavigationView.getMenu());
-
-            Menu menu = bottomNavigationView.getMenu();
+//
+//            bottomNavigationView.getChildAt(0).setSelected(true);
+//            bottomNavigationView.getMenu().clear();
+////                bottomNavigationView.getMenu().
+////            bottomNavigationView.inflateMenu();
+////            bottomNavigationView.inflateMenu(R.menu.navi_logout);
+//
+////            PrepareMenu(bottomNavigationView.getMenu());
+//
+//            Menu menu = bottomNavigationView.getMenu();
 
 
 
@@ -422,8 +615,9 @@ public class NewDetailActivity extends AppCompatActivity {
 
                 int vid = RAUtil.generateViewId();
                 String title = getIntent().getStringExtra("action" + i);
-                menu.add(0, vid, 0, title);
+//                menu.add(0, vid, 0, title);
 
+                atitle.add(title);
                 menu_map.put(vid,i);
 
 
@@ -447,7 +641,8 @@ public class NewDetailActivity extends AppCompatActivity {
                 ((DetailFragment)f).set_content( contentmap.get(title));
                 f.setArguments(bundle);
 
-                adapter.addFragment(f);
+                list.add(f);
+//                adapter.addFragment(f);
 //
 //            tabmap.put(getIntent().getStringExtra("action" + i), vid);
             }
@@ -458,10 +653,35 @@ public class NewDetailActivity extends AppCompatActivity {
             TradeFilingApplication.get_instance().homeactive = true;
 
 
-        }
+        title =atitle.toArray(new String[0]);
+
+
+
+//        viewPager.setAdapter(adapter);
+
+
+        TabLayoutMediator tm=  new TabLayoutMediator(tabLayout, viewPager, new TabLayoutMediator.TabConfigurationStrategy() {
+
+
+
+
+            @Override
+            public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
+
+
+                tab.setText(title[position]);
+
+//                tab.setIcon(icon.getResourceId(position, 0));
+                tab.setId(position);
+//                tab.setIcon
+            }
+        });
+
+        tm.attach();
+
 
 
-        viewPager.setAdapter(adapter);
+        changeIconImgBottomMargin(tabLayout,8);
     }
     public void save_content(String which,String content)
     {

+ 8 - 0
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/fields/CustomizeFieldsActivity.java

@@ -6,6 +6,7 @@ import android.content.Context;
 import android.content.DialogInterface;
 import android.content.SharedPreferences;
 import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Resources;
 import android.graphics.Insets;
 import android.os.Bundle;
 import android.view.Menu;
@@ -23,6 +24,7 @@ import com.usai.ratradefiling.TradeFilingApplication;
 import com.usai.ratradefiling.dataprovider.RADataProvider;
 import com.usai.redant.rautils.utils.FileManager;
 import com.usai.redant.rautils.utils.RAConverter;
+import com.usai.redant.rautils.utils.TextScaleUtil;
 
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -44,6 +46,12 @@ public class CustomizeFieldsActivity extends Activity implements
 	// setContentView(R.layout.activity_customize_fields);
 	// }
 	//
+
+	@Override
+	public Resources getResources() {
+		Resources resources = super.getResources();
+		return TextScaleUtil.getResources(this,resources,1.0f);
+	}
 	@Override
 	public boolean onCreateOptionsMenu(Menu menu)
 	{

+ 24 - 6
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/fields/DragListView.java

@@ -1,7 +1,10 @@
 package com.usai.ratradefiling.fields;
 
+import static android.content.Context.WINDOW_SERVICE;
+
 import android.content.Context;
 import android.graphics.Bitmap;
+import android.graphics.Canvas;
 import android.graphics.PixelFormat;
 import android.util.AttributeSet;
 import android.view.Gravity;
@@ -17,17 +20,13 @@ import android.widget.ImageView;
 import android.widget.ListView;
 import android.widget.TextView;
 
-
 import com.usai.ratradefiling.R;
-//import com.usai.ratradefiling.home.FunctionPanelSettingActivity;
 
 import org.json.JSONObject;
 
 import java.lang.ref.WeakReference;
 import java.util.List;
 
-import static android.content.Context.WINDOW_SERVICE;
-
 public class DragListView extends ListView
 {
 
@@ -233,8 +232,27 @@ public class DragListView extends ListView
 				downScrollBounce = Math.max(y + scaledTouchSlop,
 						getHeight() * 2 / 3);
 
-				itemView.setDrawingCacheEnabled(true);
-				Bitmap bm = Bitmap.createBitmap(itemView.getDrawingCache());
+
+
+
+//
+//					Bitmap bitmap = Bitmap.createBitmap(itemView.getWidth(), itemView.getHeight(), Bitmap.Config.ARGB_8888);
+//					HandlerThread handlerThread = new HandlerThread("PixelCopyThread");
+//					handlerThread.start();
+//					PixelCopy.request(window, view.getDrawingRect(), bitmap, listener, new Handler(handlerThread.getLooper()));
+
+
+//
+//
+//				itemView.setDrawingCacheEnabled(true);
+//				Bitmap bm = Bitmap.createBitmap(itemView.getDrawingCache());
+
+
+
+				Bitmap bm = Bitmap.createBitmap(itemView.getWidth(), itemView.getHeight(), Bitmap.Config.ARGB_8888);
+				Canvas canvas = new Canvas(bm);
+				itemView.draw(canvas);
+
 				startDrag(bm, y);
 			}
 			return false;

+ 11 - 0
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/home/CompanySelectActivity.java

@@ -1,5 +1,6 @@
 package com.usai.ratradefiling.home;
 
+import android.content.res.Resources;
 import android.graphics.Insets;
 import android.os.Bundle;
 import android.view.View;
@@ -10,6 +11,7 @@ import androidx.annotation.NonNull;
 import androidx.fragment.app.FragmentActivity;
 
 import com.usai.ratradefiling.R;
+import com.usai.redant.rautils.utils.TextScaleUtil;
 
 public class CompanySelectActivity extends FragmentActivity // AppCompatActivity
 {
@@ -27,6 +29,12 @@ public class CompanySelectActivity extends FragmentActivity // AppCompatActivity
 //        }
 //
 //    }
+
+@Override
+public Resources getResources() {
+    Resources resources = super.getResources();
+    return TextScaleUtil.getResources(this,resources,1.0f);
+}
     @Override
     protected void onCreate(Bundle savedInstanceState)
     {
@@ -62,5 +70,8 @@ public class CompanySelectActivity extends FragmentActivity // AppCompatActivity
             });
 
         }
+
+
+//        getSupportActionBar().setElevation(0);
     }
 }

+ 40 - 19
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/home/CompanySelectFragment.java

@@ -2,21 +2,15 @@ package com.usai.ratradefiling.home;
 
 import android.content.Intent;
 import android.os.Bundle;
-
-//import androidx.fragment.app.Fragment;
-
 import android.view.View;
 import android.widget.ListView;
 
-import com.usai.ratradefiling.R;
 import com.usai.ratradefiling.TradeFilingApplication;
 import com.usai.redant.rautils.list.StaticModelistFragment;
 
 import org.json.JSONException;
 import org.json.JSONObject;
 
-import java.util.Set;
-
 ///**
 // * A simple {@link Fragment} subclass.
 // * Use the {@link CompanySelectFragment#newInstance} factory method to
@@ -33,12 +27,10 @@ public class CompanySelectFragment extends StaticModelistFragment
     }
 
     @Override
-    public void onActivityCreated(Bundle savedInstanceState)
+    public void onCreate(Bundle savedInstanceState)
     {
-        super.onActivityCreated(savedInstanceState);
-
-
-
+        // TODO Auto-generated method stub
+        super.onCreate(savedInstanceState);
         Intent i=getActivity().getIntent();
         Bundle b=i.getBundleExtra("ParametersKey");
 
@@ -58,16 +50,45 @@ public class CompanySelectFragment extends StaticModelistFragment
 //        adapter.getView()
 
         customize_style();
-//        JSONObject jsonobj=loadjson(R.raw.search);
-//        adapter        = new SimpleRoundCornerAdapter(this.getActivity(),
-//                getData(jsonobj), R.layout.static_modelist_cell, new String[] { "title",
-//                "img","detail" }, new int[] { R.id.tv_name, R.id.iv_icon,R.id.tv_detail });
-//        setListAdapter(adapter);
-////        this.getListView().setDivider(R.drawable.);
-//        this.getListView().setDividerHeight(18);
-//        this.getListView().setBackgroundColor(Color.WHITE);
 
     }
+
+//    @Override
+//    public void onActivityCreated(Bundle savedInstanceState)
+//    {
+//        super.onActivityCreated(savedInstanceState);
+//
+//
+//
+//        Intent i=getActivity().getIntent();
+//        Bundle b=i.getBundleExtra("ParametersKey");
+//
+//
+////        JSONObject json = new JSONObject();
+//        try
+//        {
+//            m_Json.put("modelist", TradeFilingApplication.get_company_list());
+//            m_Json.put("title","Set Company");
+//        } catch (JSONException e)
+//        {
+//            e.printStackTrace();
+//            return;
+//        }
+//        setupAdapter(m_Json);
+//
+////        adapter.getView()
+//
+//        customize_style();
+////        JSONObject jsonobj=loadjson(R.raw.search);
+////        adapter        = new SimpleRoundCornerAdapter(this.getActivity(),
+////                getData(jsonobj), R.layout.static_modelist_cell, new String[] { "title",
+////                "img","detail" }, new int[] { R.id.tv_name, R.id.iv_icon,R.id.tv_detail });
+////        setListAdapter(adapter);
+//////        this.getListView().setDivider(R.drawable.);
+////        this.getListView().setDividerHeight(18);
+////        this.getListView().setBackgroundColor(Color.WHITE);
+//
+//    }
     @Override
     public void onListItemClick(ListView l, View v, int position, long id)
     {

+ 12 - 0
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/home/FunctionPanelSettingActivity.java

@@ -3,6 +3,7 @@ package com.usai.ratradefiling.home;
 import android.app.AlertDialog;
 import android.content.Context;
 import android.content.DialogInterface;
+import android.content.res.Resources;
 import android.graphics.Insets;
 import android.os.Bundle;
 import android.view.View;
@@ -19,6 +20,7 @@ import com.usai.ratradefiling.dataprovider.RADataProvider;
 import com.usai.ratradefiling.fields.DragListView;
 import com.usai.redant.rautils.utils.FileManager;
 import com.usai.redant.rautils.utils.RAConverter;
+import com.usai.redant.rautils.utils.TextScaleUtil;
 
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -95,6 +97,13 @@ public class FunctionPanelSettingActivity extends AppCompatActivity implements
         }
     }
 
+
+    @Override
+    public Resources getResources() {
+        Resources resources = super.getResources();
+        return TextScaleUtil.getResources(this,resources,1.0f);
+    }
+
 //    private boolean forNewResult = false;
 //    private int maxDisplayCount = 0;
 
@@ -182,6 +191,9 @@ public class FunctionPanelSettingActivity extends AppCompatActivity implements
 //            // TODO Auto-generated catch block
 //            e.printStackTrace();
 //        }
+
+
+        getSupportActionBar().setElevation(0);
     }
 //    @Override
 //    public boolean onOptionsItemSelected(MenuItem item)

+ 288 - 17
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/home/HomeFragment.java

@@ -11,26 +11,36 @@ import static com.usai.ratradefiling.base.ResultBaseModel.HomeDashResultType.Das
 import static com.usai.ratradefiling.base.ResultBaseModel.HomeDashResultType.DashResultTypeeManifestPending;
 
 import android.app.Activity;
-import android.app.ProgressDialog;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.graphics.Color;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
+import android.os.Looper;
 import android.os.Message;
+import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.Window;
+import android.view.WindowManager;
 import android.widget.AbsListView;
 import android.widget.BaseExpandableListAdapter;
 import android.widget.Button;
 import android.widget.ExpandableListView;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 
+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.annotation.Nullable;
 import androidx.appcompat.app.AlertDialog;
@@ -90,7 +100,7 @@ public class HomeFragment extends Fragment
     private ExpandableListView mListView;
     private SwipeRefreshLayout mRefresh;
     private HomeListAdapter mAdapter;
-    private HomeHandler mHandler = new HomeHandler(this);
+    private final HomeHandler mHandler = new HomeHandler(Looper.getMainLooper(),this);
     private HomeBroadCastReceiver mReceiver;
 
 
@@ -102,7 +112,9 @@ public class HomeFragment extends Fragment
     private ResultBaseModel mSelectedModel;
     private ArrayList<HomeSectionModel> mSectionArray = new ArrayList<>();
     private int mFirstVisible = 0;
-
+    ActivityResultLauncher<Intent> reqeust_more_launcher;
+    ActivityResultLauncher<Intent> company_select_launcher;
+    ActivityResultLauncher<Intent> function_setting_launcher;
     @Nullable
     @Override
     public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
@@ -121,8 +133,87 @@ public class HomeFragment extends Fragment
         {
             parent.removeView(view);
         }
+        reqeust_more_launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>()
+        {
+            @Override
+            public void onActivityResult(ActivityResult o)
+            {
+
+
+
+                    if (o.getResultCode() == Activity.RESULT_OK && o.getData() != null)
+                    {
+
+                        boolean reload = o.getData().getBooleanExtra("reload", false);
+                        if (reload)
+                        {
+                            loadData();
+                        }
+                    }
+                    return;
+
+            }
+        });
+
+
+       company_select_launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>()
+        {
+            @Override
+            public void onActivityResult(ActivityResult o)
+            {
+
+
+
+
+
+                mHeaderView.update_Company();
+                loadData();
+
+
+
+
+            }
+        });
+
+        function_setting_launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>()
+        {
+            @Override
+            public void onActivityResult(ActivityResult o)
+            {
+
+                self.mHeaderView.reloadFunctionPanel();
+            }
+        });
+
+
         return view;
     }
+
+
+
+    public void openActivity(Intent intent,int request_code)
+    {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
+        {
+
+
+if(request_code == REQUEST_MORE_CODE)
+    reqeust_more_launcher.launch(intent);
+else  if(request_code == COMPANY_SELECT)
+    reqeust_more_launcher.launch(intent);
+else
+    function_setting_launcher.launch(intent);
+
+
+
+
+
+        }
+        else
+        {
+            self.startActivityForResult(intent, request_code);
+        }
+    }
 //    private void showDetailForActionWithParams(JSONObject action, Bundle params) {
 //
 ////        String module_name = mPresenter.getParams().getString("module_name");
@@ -412,7 +503,7 @@ public class HomeFragment extends Fragment
             }
             else
             {
-                loadData();
+                loadData(view);
             }
         } // initial
 
@@ -622,26 +713,66 @@ public class HomeFragment extends Fragment
         }
     }
 
-    private ProgressDialog mProgressDialog;
+    private AlertDialog mProgressDialog;
 
     private void showProgressDialog()
     {
-        if (mProgressDialog == null)
-        {
-            mProgressDialog = new ProgressDialog(mCtx);
-            mProgressDialog.setMessage(getString(R.string.loading));
-            mProgressDialog.setCancelable(false);
-            mProgressDialog.show();
+
+        int llPadding = 30;
+        LinearLayout ll = new LinearLayout(getActivity());
+        ll.setOrientation(LinearLayout.HORIZONTAL);
+        ll.setPadding(llPadding, llPadding, llPadding, llPadding);
+        ll.setGravity(Gravity.CENTER);
+        LinearLayout.LayoutParams llParam = new LinearLayout.LayoutParams(
+                LinearLayout.LayoutParams.WRAP_CONTENT,
+                LinearLayout.LayoutParams.WRAP_CONTENT);
+        llParam.gravity = Gravity.CENTER;
+        ll.setLayoutParams(llParam);
+
+        ProgressBar progressBar = new ProgressBar(getActivity());
+        progressBar.setIndeterminate(true);
+        progressBar.setPadding(0, 0, llPadding, 0);
+        progressBar.setLayoutParams(llParam);
+
+        llParam = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
+                ViewGroup.LayoutParams.WRAP_CONTENT);
+        llParam.gravity = Gravity.CENTER;
+        TextView tvText = new TextView(getActivity());
+        tvText.setText(getString(R.string.loading));
+        tvText.setTextColor(Color.parseColor("#000000"));
+        tvText.setTextSize(20);
+        tvText.setLayoutParams(llParam);
+
+        ll.addView(progressBar);
+        ll.addView(tvText);
+
+        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+        builder.setCancelable(true);
+        builder.setView(ll);
+
+        mProgressDialog = builder.create();
+
+        mProgressDialog.setCancelable(false);
+        mProgressDialog.show();
+        Window window = mProgressDialog.getWindow();
+        if (window != null) {
+            WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
+            layoutParams.copyFrom(mProgressDialog.getWindow().getAttributes());
+            layoutParams.width = LinearLayout.LayoutParams.WRAP_CONTENT;
+            layoutParams.height = LinearLayout.LayoutParams.WRAP_CONTENT;
+            mProgressDialog.getWindow().setAttributes(layoutParams);
         }
+
+
     }
 
+
+
     private void dismissProgressDialog()
     {
-        if (mProgressDialog != null && mProgressDialog.isShowing())
-        {
+        if (mProgressDialog != null && mProgressDialog.isShowing()) {
             mProgressDialog.dismiss();
         }
-        mProgressDialog = null;
     }
 
     private void showWarningMsg(String msg)
@@ -768,11 +899,150 @@ public class HomeFragment extends Fragment
         changeData();
     }
 
-    private void loadData()
-    {
+
+
+    private void loadData(View v) {
+
+
+//        if(true)
+//            return;
+
+
+        v.findViewById(R.id.label_cache).setVisibility(View.INVISIBLE);
+
+        v.findViewById(R.id.label_cache).setVisibility(View.INVISIBLE);
+        showProgressDialog();
+
+        if (mSectionArray != null)
+        {
+            mSectionArray.clear();
+        }
+        if (mAdapter != null)
+        {
+            mAdapter.notifyDataSetChanged();
+        }
+
+        new Thread(new Runnable()
+        {
+            @Override
+            public void run()
+            {
+
+                JSONObject json = RADataProvider.LoadHome();
+                if (json != null)
+                {
+                    try
+                    {
+
+                        int restul = json.getInt("result");
+                        final JSONArray sectionArr = json.optJSONArray("sections");
+                        if (restul == Network.RESULT_TRUE)
+                        {
+                            getActivity().runOnUiThread(new Runnable()
+                            {
+                                @Override
+                                public void run()
+                                {
+                                    if (sectionArr != null && sectionArr.length() != 0)
+                                    {
+                                        mEmptyView.setVisibility(View.GONE);
+                                    }
+                                    else
+                                    {
+                                        mEmptyView.setVisibility(View.VISIBLE);
+                                    }
+                                }
+                            });
+//                            boolean requiredLocation = json.optBoolean("requiredLocation");
+//                            TradeFilingApplication.get_instance().setRequiredBackgroundLocation(requiredLocation);
+
+//                            if(json.optBoolean("iscache"))
+//                            {
+//
+//                                getActivity().runOnUiThread(new Runnable() {
+//                                    @Override
+//                                    public void run() {
+//                                        getActivity().findViewById(R.id.label_cache).setVisibility(View.VISIBLE);
+//                                    }
+//                                });
+//                            }
+                            mSelectedModel = null;
+                            handleJson(json);
+
+                        }
+                        else
+                        {
+                            getActivity().runOnUiThread(new Runnable()
+                            {
+                                @Override
+                                public void run()
+                                {
+                                    mEmptyView.setVisibility(View.VISIBLE);
+                                    ;
+                                }
+                            });
+                            // error
+                            Message msg = new Message();
+                            msg.what = HomeHandler.HomeActionError;
+
+                            String errMsg = json.optString("err_msg");
+                            if (errMsg == null || errMsg.length() == 0)
+                            {
+                                errMsg = getString(R.string.sorry);
+                            }
+                            msg.obj = errMsg;
+
+                            mHandler.sendMessage(msg);
+
+                        }
+
+                    } catch (JSONException e)
+                    {
+                        e.printStackTrace();
+                        // error
+                        Message msg = new Message();
+                        msg.what = HomeHandler.HomeActionError;
+
+                        String errMsg = getString(R.string.sorry);
+                        msg.obj = errMsg;
+
+                        mHandler.sendMessage(msg);
+                    }
+                }
+                else
+                {
+                    // error;
+                    getActivity().runOnUiThread(new Runnable()
+                    {
+                        @Override
+                        public void run()
+                        {
+                            mEmptyView.setVisibility(View.VISIBLE);
+                            ;
+                        }
+                    });
+                    Message msg = new Message();
+                    msg.what = HomeHandler.HomeActionError;
+
+                    String errMsg = getString(R.string.sorry);
+                    msg.obj = errMsg;
+
+                    mHandler.sendMessage(msg);
+                }
+
+            }
+
+        }).start();
+
+    }
+    private void loadData() {
+
 
 //        if(true)
 //            return;
+
+
+
         getActivity().findViewById(R.id.label_cache).setVisibility(View.INVISIBLE);
         showProgressDialog();
 
@@ -965,8 +1235,9 @@ public class HomeFragment extends Fragment
 
         WeakReference<HomeFragment> mWeakHome;
 
-        public HomeHandler(HomeFragment fragment)
+        public HomeHandler(Looper l,HomeFragment fragment)
         {
+            super(l);
             mWeakHome = new WeakReference<>(fragment);
         }
 

+ 12 - 4
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/home/HomeHeaderView.java

@@ -1,9 +1,10 @@
 package com.usai.ratradefiling.home;
 
+import static androidx.core.text.HtmlCompat.FROM_HTML_MODE_LEGACY;
+
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
-import android.text.Html;
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -11,6 +12,8 @@ import android.widget.AdapterView;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 
+import androidx.core.text.HtmlCompat;
+
 import com.usai.ratradefiling.R;
 import com.usai.ratradefiling.TradeFilingApplication;
 import com.usai.ratradefiling.result.ResultActivity;
@@ -96,7 +99,8 @@ public class HomeHeaderView extends RelativeLayout {
 
 //        this.s30 = s30;
 
-        tv_recent.setText(Html.fromHtml(TradeFilingApplication.get_instance().getS30()));
+        tv_recent.setText( HtmlCompat.fromHtml(TradeFilingApplication.get_instance().getS30(),FROM_HTML_MODE_LEGACY) );
+//        tv_recent.setText(Html.fromHtml(TradeFilingApplication.get_instance().getS30()));
     }
     private void init() {
 //        Log.e("DEBUG", "init: FUNCTION PANEL!!!");
@@ -173,7 +177,8 @@ public class HomeHeaderView extends RelativeLayout {
 //
 
                 Intent intent = new Intent(mCtx, CompanySelectActivity.class);
-                homeFragment.startActivityForResult(intent,COMPANY_SELECT);
+
+                homeFragment.openActivity(intent,COMPANY_SELECT);
 //                CompanySelectActivity.StartCompanySelectActivity(mCtx,null);
 
 
@@ -194,12 +199,15 @@ public class HomeHeaderView extends RelativeLayout {
 
             welcome="Welcome: "+TradeFilingApplication.get_instance().getNickname();
         else
+
             welcome="Inactive User: "+TradeFilingApplication.get_instance().getNickname();
 
         tv_welcome.setText(welcome);
 
 
-            tv_recent.setText(Html.fromHtml(TradeFilingApplication.get_instance().getS30()));
+
+        tv_recent.setText( HtmlCompat.fromHtml(TradeFilingApplication.get_instance().getS30(),FROM_HTML_MODE_LEGACY) );
+//            tv_recent.setText(Html.fromHtml(TradeFilingApplication.get_instance().getS30()));
 
 
 //        newContainer = findViewById(R.id.new_count_container);

+ 344 - 245
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/login/LoginFragment.java

@@ -2,15 +2,19 @@ package com.usai.ratradefiling.login;
 
 //import android.app.Fragment;
 
+import static com.usai.redant.rautils.utils.Network.RESULT_FAILED_WITH_MESSAGE;
+import static com.usai.redant.rautils.utils.Network.RESULT_TRUE;
+
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.content.pm.PackageManager.NameNotFoundException;
-import android.os.AsyncTask;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.Gravity;
@@ -28,20 +32,18 @@ import android.widget.Toast;
 import androidx.fragment.app.Fragment;
 import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 
+import com.usai.ratradefiling.R;
 import com.usai.ratradefiling.RootActivity;
 import com.usai.ratradefiling.TradeFilingApplication;
 import com.usai.ratradefiling.dataprovider.OnlineDataProvider;
-import com.usai.ratradefiling.R;
 import com.usai.ratradefiling.dataprovider.RADataProvider;
 import com.usai.ratradefiling.signup.SignupActivity;
 import com.usai.ratradefiling.utils.AES;
 
-import org.json.JSONException;
 import org.json.JSONObject;
 
-import static com.usai.redant.rautils.utils.Network.RESULT_AUTH_EXPIRED;
-import static com.usai.redant.rautils.utils.Network.RESULT_FAILED_WITH_MESSAGE;
-import static com.usai.redant.rautils.utils.Network.RESULT_TRUE;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 //import com.usai.util.AES;
 //import com.usai.util.Network;
 
@@ -66,7 +68,7 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 	private String m_sPassword;
 	private EditText m_etName;
 	private EditText m_etPassword;
-	private UserLoginTask mAuthTask = null;
+//	private UserLoginTask mAuthTask = null;
 	private TextView mLoginStatusMessageView;
 	private View mLoginFormView;
 	private View mLoginFormView1;
@@ -78,12 +80,7 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 	public void setCallBack(LoginCallBack callBack) {
 		this.mCallBack = callBack;
 	}
-//
-//	@Override
-//	public void onSaveInstanceState(Bundle outState) {
-//		super.onSaveInstanceState(outState);
-//		outState.putSerializable("hashmap", mCallBack);
-//	}
+
 
 	@Override
 	public View onCreateView(LayoutInflater inflater, ViewGroup container,
@@ -94,6 +91,7 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 //		pa.changeStatusBarNormal();
 
 		View view = inflater.inflate(R.layout.fragment_login1, null);
+
 		TextView tv_ver = (TextView) view.findViewById(R.id.tv_ver);
 		try {
 			tv_ver.setText(getText(R.string.str_ver)+TradeFilingApplication.get_instance().getPackageManager().getPackageInfo(
@@ -102,58 +100,7 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 			// TODO Auto-generated catch block
 			e1.printStackTrace();
 		}
-		// Button btn = (Button) view.findViewById(R.id.sign_in_button);
-		// btn.setOnClickListener(this);
-
-		// m_cbSave.setOnCheckedChangeListener(new OnCheckedChangeListener()
-		// {
-		//
-		// @Override
-		// public void onCheckedChanged(CompoundButton buttonView,
-		// boolean isChecked)
-		// {
-		// if (isChecked)
-		// {
-		// String user,password;
-		// SharedPreferences RunOnce = ApexTrackingApplication
-		// .get_instance().getSharedPreferences("Apex", 0);
-		// SharedPreferences.Editor editor = RunOnce.edit();
-		// editor.putString("user", user);
-		// editor.putString("password", user);
-		// }
-		// String vername;
-		// try
-		// {
-		// vername = ApexTrackingApplication.get_instance()
-		// .getPackageManager()
-		// .getPackageInfo("com.usai.apex", 0).versionName;
-		// boolean bFirstRun = RunOnce.getBoolean("FirstRun" + vername
-		// + "_result", true);
-		// if (bFirstRun)
-		// {
-		// SharedPreferences.Editor editor = RunOnce.edit();
-		// editor.putBoolean("FirstRun" + vername + "_result",
-		// false);
-		// // Don't forget to commit your edits!!!
-		// editor.commit();
-		// Intent intent = new Intent();
-		// intent.setClass(this, HelpActivity.class);
-		// intent.putExtra("caller", "result");
-		// startActivity(intent);
-		//
-		// }
-		// }
-		// catch (NameNotFoundException e)
-		// {
-		// // TODO Auto-generated catch block
-		// e.printStackTrace();
-		// }
-		//
-		// }
-		//
-		// });
-		// Set up the login form.
-		// mUser = getIntent().getStringExtra(EXTRA_EMAIL);
+
 		m_etName = (EditText) view.findViewById(R.id.user);
 		// mUserView.setText(mUser);
 
@@ -261,16 +208,6 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 	// */
 	public void attemptLogin() {
 
-//		if(1==1)
-//		{
-//			if(mCallBack!=null)
-//				mCallBack.onLogin();
-//			return;
-//		}
-		if (mAuthTask != null) {
-			return;
-		}
-
 		// Reset errors.
 		m_etName.setError(null);
 		m_etPassword.setError(null);
@@ -314,8 +251,170 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 			// perform the user login attempt.
 			mLoginStatusMessageView.setText(R.string.login_progress_signing_in);
 			showProgress(true);
-			mAuthTask = new UserLoginTask();
-			mAuthTask.execute((Void) null);
+//			mAuthTask = new UserLoginTask();
+//			mAuthTask.execute((Void) null);
+
+
+
+
+			ExecutorService executor = Executors.newSingleThreadExecutor();
+			Handler handler = new Handler(Looper.getMainLooper());
+
+			executor.execute(() -> {
+				int errorcode;
+
+				Log.d("Announcement executor", "execute");
+
+				JSONObject json;
+
+				json= RADataProvider.Login(m_sUser,m_sPassword);;
+				errorcode = json.optInt("result");
+
+
+				handler.post(() -> {
+					//UI Thread work here
+					showProgress(false);
+					int resultcode= errorcode;
+
+
+						Log.d("onPostExecute", "entry");
+
+
+						try {
+							int result = json.getInt("result");
+
+
+
+
+							switch (result) {
+								case RESULT_TRUE:
+								{
+									SharedPreferences pref = TradeFilingApplication.get_instance()
+											.getSharedPreferences("RA TradeFiling", 0);
+									SharedPreferences.Editor editor = pref.edit();
+
+									try {
+										if (m_cbSave.isChecked()) {
+											editor.putString("user",
+													AES.encrypt("rau", m_sUser.toLowerCase()));
+											editor.putString("password",
+													AES.encrypt("rap", m_sPassword));
+											editor.putBoolean("autologin", true);
+										} else {
+											editor.putString("user", null);
+											editor.putString("password", null);
+											editor.putBoolean("autologin", false);
+										}
+
+
+									} catch (Exception e) {
+										editor.putString("user", null);
+										editor.putString("password", null);
+										editor.putBoolean("autologin", false);
+										e.printStackTrace();
+									}
+									editor.commit();
+
+									TradeFilingApplication.getInstance().shouldCheckCache = true;
+									TradeFilingApplication.getInstance().login(m_sUser,m_sPassword,json);
+
+
+
+									if(mCallBack!=null)
+										mCallBack.onLogin();
+
+
+									{
+
+										Intent intent = new Intent("Login");
+										intent.putExtra("state", true);
+										LocalBroadcastManager.getInstance(getActivity())
+												.sendBroadcast(intent);
+									}
+									return;
+								}
+								case OnlineDataProvider.RESULT_NET_NOTAVAILABLE: {
+									Toast toast = Toast.makeText(getActivity()
+													.getApplicationContext(),
+											getText(R.string.msg_connection_none),
+											Toast.LENGTH_LONG);
+									toast.setGravity(Gravity.CENTER, 0, 0);
+									toast.show();
+									return;
+								}
+								case OnlineDataProvider.RESULT_NET_ERROR: {
+									Toast toast = Toast.makeText(getActivity()
+													.getApplicationContext(),
+											getText(R.string.msg_net_error), Toast.LENGTH_LONG);
+									toast.setGravity(Gravity.CENTER, 0, 0);
+									toast.show();
+									return;
+								}
+								case OnlineDataProvider.RESULT_VER_LOW:
+								{
+									Toast toast = Toast.makeText(getActivity()
+													.getApplicationContext(),
+											getText(R.string.msg_ver_low), Toast.LENGTH_LONG);
+									toast.setGravity(Gravity.CENTER, 0, 0);
+									toast.show();
+									return;
+								}
+								case OnlineDataProvider.RESULT_ERROR:
+
+								case RESULT_FAILED_WITH_MESSAGE:
+									// case Network.RESULT_RESPONSE_NULL:
+								{
+
+									String msg =  json.optString("err_msg");
+									Toast toast = Toast.makeText(getActivity()
+													.getApplicationContext(),
+											msg,
+											Toast.LENGTH_LONG);
+									toast.setGravity(Gravity.CENTER, 0, 0);
+									toast.show();
+									return;
+								}
+
+								case OnlineDataProvider.RESULT_FALSE: {
+									m_etPassword
+											.setError(getString(R.string.error_incorrect_password));
+									m_etPassword.requestFocus();
+									return;
+
+								}
+
+								default: {
+
+
+									String msg =  json.optString("err_msg");
+
+									if(TextUtils.isEmpty(msg))
+										msg=getText(R.string.msg_net_resulterror).toString();
+									Toast toast = Toast.makeText(
+											getActivity().getApplicationContext(),
+											msg,
+											Toast.LENGTH_LONG);
+									toast.setGravity(Gravity.CENTER, 0, 0);
+									toast.show();
+									break;
+								}
+							}
+
+						} catch (Exception e) {
+							e.printStackTrace();
+							Toast toast = Toast.makeText(getActivity()
+											.getApplicationContext(),
+									getText(R.string.msg_net_resulterror), Toast.LENGTH_LONG);
+							toast.setGravity(Gravity.CENTER, 0, 0);
+							toast.show();
+						}
+
+
+
+
+
+				});
+			});
 		}
 	}
 
@@ -380,173 +479,173 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 	// * Represents an asynchronous login/registration task used to authenticate
 	// * the user.
 	// */
-	public class UserLoginTask extends AsyncTask<Void, Void, JSONObject> {
-		// int err_code = ERR_CODE_NONE;
-//		int errorcode;
-		JSONObject json;
-
-		@Override
-		protected JSONObject doInBackground(Void... params) {
-
-
-			json= RADataProvider.Login(m_sUser,m_sPassword);;
-			return json;
-//			errorcode =
-//			errorcode = OnlineDataProvider.get_Auth(m_sUser, m_sPassword);
-//			if (errorcode == OnlineDataProvider.RESULT_TRUE)
-//				return true;
-//			else {
-//				return false;
+//	public class UserLoginTask extends AsyncTask<Void, Void, JSONObject> {
+//		// int err_code = ERR_CODE_NONE;
+////		int errorcode;
+//		JSONObject json;
+//
+//		@Override
+//		protected JSONObject doInBackground(Void... params) {
+//
+//
+//			json= RADataProvider.Login(m_sUser,m_sPassword);;
+//			return json;
+////			errorcode =
+////			errorcode = OnlineDataProvider.get_Auth(m_sUser, m_sPassword);
+////			if (errorcode == OnlineDataProvider.RESULT_TRUE)
+////				return true;
+////			else {
+////				return false;
+////			}
+//
+//		}
+//
+//		@Override
+//		protected void onPostExecute(final JSONObject jsobj) {
+//			Log.d("onPostExecute", "entry");
+//			mAuthTask = null;
+//			showProgress(false);
+//
+//			try {
+//				int result = jsobj.getInt("result");
+//
+//
+//
+//
+//					switch (result) {
+//						case RESULT_TRUE:
+//						{
+//							SharedPreferences pref = TradeFilingApplication.get_instance()
+//									.getSharedPreferences("RA TradeFiling", 0);
+//							SharedPreferences.Editor editor = pref.edit();
+//
+//							try {
+//								if (m_cbSave.isChecked()) {
+//									editor.putString("user",
+//											AES.encrypt("rau", m_sUser.toLowerCase()));
+//									editor.putString("password",
+//											AES.encrypt("rap", m_sPassword));
+//									editor.putBoolean("autologin", true);
+//								} else {
+//									editor.putString("user", null);
+//									editor.putString("password", null);
+//									editor.putBoolean("autologin", false);
+//								}
+//
+//
+//							} catch (Exception e) {
+//								editor.putString("user", null);
+//								editor.putString("password", null);
+//								editor.putBoolean("autologin", false);
+//								e.printStackTrace();
+//							}
+//							editor.commit();
+//
+//							TradeFilingApplication.getInstance().shouldCheckCache = true;
+//							TradeFilingApplication.getInstance().login(m_sUser,m_sPassword,jsobj);
+//
+//
+//
+//							if(mCallBack!=null)
+//								mCallBack.onLogin();
+//
+//
+//							{
+//
+//								Intent intent = new Intent("Login");
+//								intent.putExtra("state", true);
+//								LocalBroadcastManager.getInstance(getActivity())
+//										.sendBroadcast(intent);
+//							}
+//							return;
+//						}
+//						case OnlineDataProvider.RESULT_NET_NOTAVAILABLE: {
+//							Toast toast = Toast.makeText(getActivity()
+//											.getApplicationContext(),
+//									getText(R.string.msg_connection_none),
+//									Toast.LENGTH_LONG);
+//							toast.setGravity(Gravity.CENTER, 0, 0);
+//							toast.show();
+//							return;
+//						}
+//						case OnlineDataProvider.RESULT_NET_ERROR: {
+//							Toast toast = Toast.makeText(getActivity()
+//											.getApplicationContext(),
+//									getText(R.string.msg_net_error), Toast.LENGTH_LONG);
+//							toast.setGravity(Gravity.CENTER, 0, 0);
+//							toast.show();
+//							return;
+//						}
+//						case OnlineDataProvider.RESULT_VER_LOW:
+//						{
+//							Toast toast = Toast.makeText(getActivity()
+//											.getApplicationContext(),
+//									getText(R.string.msg_ver_low), Toast.LENGTH_LONG);
+//							toast.setGravity(Gravity.CENTER, 0, 0);
+//							toast.show();
+//							return;
+//						}
+//						case OnlineDataProvider.RESULT_ERROR:
+//
+//						case RESULT_FAILED_WITH_MESSAGE:
+//							// case Network.RESULT_RESPONSE_NULL:
+//						{
+//
+//							String msg =  json.optString("err_msg");
+//							Toast toast = Toast.makeText(getActivity()
+//											.getApplicationContext(),
+//									msg,
+//									Toast.LENGTH_LONG);
+//							toast.setGravity(Gravity.CENTER, 0, 0);
+//							toast.show();
+//							return;
+//						}
+//
+//						case OnlineDataProvider.RESULT_FALSE: {
+//							m_etPassword
+//									.setError(getString(R.string.error_incorrect_password));
+//							m_etPassword.requestFocus();
+//							return;
+//
+//						}
+//
+//						default: {
+//
+//
+//							String msg =  json.optString("err_msg");
+//
+//							if(TextUtils.isEmpty(msg))
+//								msg=getText(R.string.msg_net_resulterror).toString();
+//							Toast toast = Toast.makeText(
+//									getActivity().getApplicationContext(),
+//									msg,
+//									Toast.LENGTH_LONG);
+//							toast.setGravity(Gravity.CENTER, 0, 0);
+//							toast.show();
+//							break;
+//						}
+//					}
+//
+//			} catch (Exception e) {
+//				e.printStackTrace();
+//				Toast toast = Toast.makeText(getActivity()
+//								.getApplicationContext(),
+//						getText(R.string.msg_net_resulterror), Toast.LENGTH_LONG);
+//				toast.setGravity(Gravity.CENTER, 0, 0);
+//				toast.show();
 //			}
-
-		}
-
-		@Override
-		protected void onPostExecute(final JSONObject jsobj) {
-			Log.d("onPostExecute", "entry");
-			mAuthTask = null;
-			showProgress(false);
-
-			try {
-				int result = jsobj.getInt("result");
-
-
-
-
-					switch (result) {
-						case RESULT_TRUE:
-						{
-							SharedPreferences pref = TradeFilingApplication.get_instance()
-									.getSharedPreferences("RA TradeFiling", 0);
-							SharedPreferences.Editor editor = pref.edit();
-
-							try {
-								if (m_cbSave.isChecked()) {
-									editor.putString("user",
-											AES.encrypt("rau", m_sUser.toLowerCase()));
-									editor.putString("password",
-											AES.encrypt("rap", m_sPassword));
-									editor.putBoolean("autologin", true);
-								} else {
-									editor.putString("user", null);
-									editor.putString("password", null);
-									editor.putBoolean("autologin", false);
-								}
-
-
-							} catch (Exception e) {
-								editor.putString("user", null);
-								editor.putString("password", null);
-								editor.putBoolean("autologin", false);
-								e.printStackTrace();
-							}
-							editor.commit();
-
-							TradeFilingApplication.getInstance().shouldCheckCache = true;
-							TradeFilingApplication.getInstance().login(m_sUser,m_sPassword,jsobj);
-
-
-
-							if(mCallBack!=null)
-								mCallBack.onLogin();
-
-
-							{
-
-								Intent intent = new Intent("Login");
-								intent.putExtra("state", true);
-								LocalBroadcastManager.getInstance(getActivity())
-										.sendBroadcast(intent);
-							}
-							return;
-						}
-						case OnlineDataProvider.RESULT_NET_NOTAVAILABLE: {
-							Toast toast = Toast.makeText(getActivity()
-											.getApplicationContext(),
-									getText(R.string.msg_connection_none),
-									Toast.LENGTH_LONG);
-							toast.setGravity(Gravity.CENTER, 0, 0);
-							toast.show();
-							return;
-						}
-						case OnlineDataProvider.RESULT_NET_ERROR: {
-							Toast toast = Toast.makeText(getActivity()
-											.getApplicationContext(),
-									getText(R.string.msg_net_error), Toast.LENGTH_LONG);
-							toast.setGravity(Gravity.CENTER, 0, 0);
-							toast.show();
-							return;
-						}
-						case OnlineDataProvider.RESULT_VER_LOW:
-						{
-							Toast toast = Toast.makeText(getActivity()
-											.getApplicationContext(),
-									getText(R.string.msg_ver_low), Toast.LENGTH_LONG);
-							toast.setGravity(Gravity.CENTER, 0, 0);
-							toast.show();
-							return;
-						}
-						case OnlineDataProvider.RESULT_ERROR:
-
-						case RESULT_FAILED_WITH_MESSAGE:
-							// case Network.RESULT_RESPONSE_NULL:
-						{
-
-							String msg =  json.optString("err_msg");
-							Toast toast = Toast.makeText(getActivity()
-											.getApplicationContext(),
-									msg,
-									Toast.LENGTH_LONG);
-							toast.setGravity(Gravity.CENTER, 0, 0);
-							toast.show();
-							return;
-						}
-
-						case OnlineDataProvider.RESULT_FALSE: {
-							m_etPassword
-									.setError(getString(R.string.error_incorrect_password));
-							m_etPassword.requestFocus();
-							return;
-
-						}
-
-						default: {
-
-
-							String msg =  json.optString("err_msg");
-
-							if(TextUtils.isEmpty(msg))
-								msg=getText(R.string.msg_net_resulterror).toString();
-							Toast toast = Toast.makeText(
-									getActivity().getApplicationContext(),
-									msg,
-									Toast.LENGTH_LONG);
-							toast.setGravity(Gravity.CENTER, 0, 0);
-							toast.show();
-							break;
-						}
-					}
-
-			} catch (Exception e) {
-				e.printStackTrace();
-				Toast toast = Toast.makeText(getActivity()
-								.getApplicationContext(),
-						getText(R.string.msg_net_resulterror), Toast.LENGTH_LONG);
-				toast.setGravity(Gravity.CENTER, 0, 0);
-				toast.show();
-			}
-			// if (netconnect == )
-			// {
-			//
-			// }
-
-
-		}
-
-		@Override
-		protected void onCancelled() {
-			mAuthTask = null;
-			showProgress(false);
-		}
-	}
+//			// if (netconnect == )
+//			// {
+//			//
+//			// }
+//
+//
+//		}
+//
+//		@Override
+//		protected void onCancelled() {
+//			mAuthTask = null;
+//			showProgress(false);
+//		}
+//	}
 }

+ 350 - 171
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/login/RetrievePasswordActivity.java

@@ -10,10 +10,12 @@ import android.content.Context;
 import android.content.DialogInterface;
 import android.content.DialogInterface.OnClickListener;
 import android.content.Intent;
+import android.content.res.Resources;
 import android.graphics.Insets;
-import android.os.AsyncTask;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.Gravity;
@@ -36,9 +38,13 @@ import androidx.appcompat.app.AppCompatActivity;
 import com.usai.ratradefiling.R;
 import com.usai.ratradefiling.dataprovider.OnlineDataProvider;
 import com.usai.ratradefiling.dataprovider.RADataProvider;
+import com.usai.redant.rautils.utils.TextScaleUtil;
 
 import org.json.JSONObject;
 
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
 
 /**
  * Activity which displays a login screen to the user, offering registration as
@@ -50,7 +56,7 @@ public class RetrievePasswordActivity extends AppCompatActivity
 	/**
 	 * Keep track of the login task to ensure we can cancel it if requested.
 	 */
-	private RetrievePasswordTask	mAuthTask	= null;
+//	private RetrievePasswordTask	mAuthTask	= null;
 
 	// Values for email and password at the time of the login attempt.
 	private String			m_sEmail;
@@ -97,6 +103,15 @@ public class RetrievePasswordActivity extends AppCompatActivity
 
 
 		actionBar.setDisplayShowTitleEnabled(true);
+
+		getSupportActionBar().setElevation(0);
+	}
+
+
+	@Override
+	public Resources getResources() {
+		Resources resources = super.getResources();
+		return TextScaleUtil.getResources(this,resources,1.0f);
 	}
 	@Override
 	protected void onCreate(Bundle savedInstanceState)
@@ -109,6 +124,7 @@ public class RetrievePasswordActivity extends AppCompatActivity
 
 
 			ViewGroup c = findViewById(R.id.container_root);
+			c.setBackgroundResource(R.color.TFPrimary);
 			c.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener()
 			{
 				@NonNull
@@ -212,10 +228,10 @@ public class RetrievePasswordActivity extends AppCompatActivity
 	 */
 	public void retrivev()
 	{
-		if (mAuthTask != null)
-		{
-			return;
-		}
+//		if (mAuthTask != null)
+//		{
+//			return;
+//		}
 
 		// Reset errors.
 		mEmailView.setError(null);
@@ -267,8 +283,171 @@ public class RetrievePasswordActivity extends AppCompatActivity
 			// perform the user login attempt.
 			mLoginStatusMessageView.setText(R.string.login_progress_signing_in);
 			showProgress(true);
-			mAuthTask = new RetrievePasswordTask();
-			mAuthTask.execute((Void) null);
+//			mAuthTask = new RetrievePasswordTask();
+//			mAuthTask.execute((Void) null);
+
+
+
+			ExecutorService executor = Executors.newSingleThreadExecutor();
+			Handler handler = new Handler(Looper.getMainLooper());
+
+			executor.execute(() -> {
+				int errorcode;
+
+				Log.d("Announcement executor", "execute");
+
+				JSONObject json;
+
+				json = RADataProvider.retrieve_pass(m_sUser, m_sEmail);
+				errorcode = json.optInt("result");
+
+
+				handler.post(() -> {
+					//UI Thread work here
+					showProgress(false);
+					int resultcode= errorcode;
+
+//					Log.d("onPostExecute", "entry");
+//					mAuthTask = null;
+//					showProgress(false);
+					// if (netconnect == )
+					// {
+					//
+					// }
+
+					if (errorcode == OnlineDataProvider.RESULT_TRUE)
+					{
+						Builder builder = new Builder(
+								RetrievePasswordActivity.this);
+						builder.setMessage(getString(R.string.str_email_sent));
+
+						builder.setTitle(getString(R.string.str_retrieve_success));
+
+						builder.setPositiveButton(getString(android.R.string.ok), new OnClickListener()
+						{
+
+							@Override
+							public void onClick(DialogInterface dialog, int which)
+							{
+								dialog.dismiss();
+
+								RetrievePasswordActivity.this.finish();
+							}
+						});
+
+						// builder.setNegativeButton("取消", new OnClickListener() {
+						//
+						// @Override
+						// public void onClick(DialogInterface dialog, int which) {
+						// dialog.dismiss();
+						// }
+						// });
+
+						builder.create().show();
+
+					}
+					else
+					{
+
+						int code=json.optInt("result");
+						switch (code)
+						{
+							case OnlineDataProvider.RESULT_NET_NOTAVAILABLE:
+							{
+								Toast toast = Toast.makeText(getApplicationContext(),
+										getText(R.string.msg_connection_none),
+										Toast.LENGTH_LONG);
+								toast.setGravity(Gravity.CENTER, 0, 0);
+								toast.show();
+								return;
+							}
+							case OnlineDataProvider.RESULT_NET_ERROR:
+							{
+								Toast toast = Toast.makeText(getApplicationContext(),
+										getText(R.string.msg_net_error),
+										Toast.LENGTH_LONG);
+								toast.setGravity(Gravity.CENTER, 0, 0);
+								toast.show();
+								return;
+							}
+							case OnlineDataProvider.RESULT_ERROR:
+								// case Network.RESULT_RESPONSE_NULL:
+							{
+								String msg =  json.optString("err_msg");
+								Toast toast = Toast.makeText(RetrievePasswordActivity.this
+												.getApplicationContext(),
+										msg,
+										Toast.LENGTH_LONG);
+								toast.setGravity(Gravity.CENTER, 0, 0);
+								toast.show();
+								return;
+							}
+
+							case OnlineDataProvider.RESULT_FALSE:
+							{
+								Builder builder = new Builder(
+										RetrievePasswordActivity.this);
+								builder.setMessage(getString(R.string.str_invalid_pore));
+
+								builder.setTitle(getString(R.string.str_retrieve_failed));
+
+								builder.setPositiveButton(getString(android.R.string.ok), new OnClickListener()
+								{
+
+									@Override
+									public void onClick(DialogInterface dialog,
+														int which)
+									{
+										dialog.dismiss();
+
+										// RetrievePasswordActivity.this.finish();
+									}
+								});
+								builder.create().show();
+								return;
+
+							}
+							case RESULT_FAILED_WITH_MESSAGE:
+							{
+								Builder builder = new Builder(
+										RetrievePasswordActivity.this);
+								builder.setMessage(json.optString("err_msg"));
+
+								builder.setTitle(getString(R.string.str_retrieve_failed));
+
+								builder.setPositiveButton(getString(android.R.string.ok), new OnClickListener()
+								{
+
+									@Override
+									public void onClick(DialogInterface dialog,
+														int which)
+									{
+										dialog.dismiss();
+
+										// RetrievePasswordActivity.this.finish();
+									}
+								});
+								builder.create().show();
+								return;
+
+							}
+							default:
+							{
+								Toast toast = Toast.makeText(getApplicationContext(),
+										getText(R.string.msg_net_resulterror), Toast.LENGTH_LONG);
+								toast.setGravity(Gravity.CENTER, 0, 0);
+								toast.show();
+								break;
+							}
+						}
+					}
+
+
+
+
+
+				});
+			});
 		}
 	}
 
@@ -325,167 +504,167 @@ public class RetrievePasswordActivity extends AppCompatActivity
 	 * Represents an asynchronous login/registration task used to authenticate
 	 * the user.
 	 */
-	public class RetrievePasswordTask extends AsyncTask<Void, Void, Boolean>
-	{
-		JSONObject json;
-
-		@Override
-		protected Boolean doInBackground(Void... params)
-		{
-			json = RADataProvider.retrieve_pass(m_sUser, m_sEmail);
-			if (json.optInt("result") == OnlineDataProvider.RESULT_TRUE)
-				return true;
-			else
-			{
-				return false;
-			}
-
-		}
-
-		@Override
-		protected void onPostExecute(final Boolean success)
-		{
-			Log.d("onPostExecute", "entry");
-			mAuthTask = null;
-			showProgress(false);
-			// if (netconnect == )
-			// {
-			//
-			// }
-
-			if (success)
-			{
-				Builder builder = new Builder(
-						RetrievePasswordActivity.this);
-				builder.setMessage(getString(R.string.str_email_sent));
-
-				builder.setTitle(getString(R.string.str_retrieve_success));
-
-				builder.setPositiveButton(getString(android.R.string.ok), new OnClickListener()
-				{
-
-					@Override
-					public void onClick(DialogInterface dialog, int which)
-					{
-						dialog.dismiss();
-
-						RetrievePasswordActivity.this.finish();
-					}
-				});
-
-				// builder.setNegativeButton("取消", new OnClickListener() {
-				//
-				// @Override
-				// public void onClick(DialogInterface dialog, int which) {
-				// dialog.dismiss();
-				// }
-				// });
-
-				builder.create().show();
-
-			}
-			else
-			{
-
-				int code=json.optInt("result");
-				switch (code)
-				{
-					case OnlineDataProvider.RESULT_NET_NOTAVAILABLE:
-					{
-						Toast toast = Toast.makeText(getApplicationContext(),
-								getText(R.string.msg_connection_none),
-								Toast.LENGTH_LONG);
-						toast.setGravity(Gravity.CENTER, 0, 0);
-						toast.show();
-						return;
-					}
-					case OnlineDataProvider.RESULT_NET_ERROR:
-					{
-						Toast toast = Toast.makeText(getApplicationContext(),
-								getText(R.string.msg_net_error),
-								Toast.LENGTH_LONG);
-						toast.setGravity(Gravity.CENTER, 0, 0);
-						toast.show();
-						return;
-					}
-					case OnlineDataProvider.RESULT_ERROR:
-					// case Network.RESULT_RESPONSE_NULL:
-					{
-						String msg =  json.optString("err_msg");
-						Toast toast = Toast.makeText(RetrievePasswordActivity.this
-										.getApplicationContext(),
-								msg,
-								Toast.LENGTH_LONG);
-						toast.setGravity(Gravity.CENTER, 0, 0);
-						toast.show();
-						return;
-					}
-
-					case OnlineDataProvider.RESULT_FALSE:
-					{
-						Builder builder = new Builder(
-								RetrievePasswordActivity.this);
-						builder.setMessage(getString(R.string.str_invalid_pore));
-
-						builder.setTitle(getString(R.string.str_retrieve_failed));
-
-						builder.setPositiveButton(getString(android.R.string.ok), new OnClickListener()
-						{
-
-							@Override
-							public void onClick(DialogInterface dialog,
-									int which)
-							{
-								dialog.dismiss();
-
-								// RetrievePasswordActivity.this.finish();
-							}
-						});
-						builder.create().show();
-						return;
-
-					}
-					case RESULT_FAILED_WITH_MESSAGE:
-					{
-						Builder builder = new Builder(
-								RetrievePasswordActivity.this);
-						builder.setMessage(json.optString("err_msg"));
-
-						builder.setTitle(getString(R.string.str_retrieve_failed));
-
-						builder.setPositiveButton(getString(android.R.string.ok), new OnClickListener()
-						{
-
-							@Override
-							public void onClick(DialogInterface dialog,
-												int which)
-							{
-								dialog.dismiss();
-
-								// RetrievePasswordActivity.this.finish();
-							}
-						});
-						builder.create().show();
-						return;
-
-					}
-					default:
-					{
-						Toast toast = Toast.makeText(getApplicationContext(),
-								getText(R.string.msg_net_resulterror), Toast.LENGTH_LONG);
-						toast.setGravity(Gravity.CENTER, 0, 0);
-						toast.show();
-						break;
-					}
-				}
-			}
-		}
-
-		@Override
-		protected void onCancelled()
-		{
-			mAuthTask = null;
-			showProgress(false);
-		}
-	}
+//	public class RetrievePasswordTask extends AsyncTask<Void, Void, Boolean>
+//	{
+//		JSONObject json;
+//
+//		@Override
+//		protected Boolean doInBackground(Void... params)
+//		{
+//			json = RADataProvider.retrieve_pass(m_sUser, m_sEmail);
+//			if (json.optInt("result") == OnlineDataProvider.RESULT_TRUE)
+//				return true;
+//			else
+//			{
+//				return false;
+//			}
+//
+//		}
+//
+//		@Override
+//		protected void onPostExecute(final Boolean success)
+//		{
+//			Log.d("onPostExecute", "entry");
+//			mAuthTask = null;
+//			showProgress(false);
+//			// if (netconnect == )
+//			// {
+//			//
+//			// }
+//
+//			if (success)
+//			{
+//				Builder builder = new Builder(
+//						RetrievePasswordActivity.this);
+//				builder.setMessage(getString(R.string.str_email_sent));
+//
+//				builder.setTitle(getString(R.string.str_retrieve_success));
+//
+//				builder.setPositiveButton(getString(android.R.string.ok), new OnClickListener()
+//				{
+//
+//					@Override
+//					public void onClick(DialogInterface dialog, int which)
+//					{
+//						dialog.dismiss();
+//
+//						RetrievePasswordActivity.this.finish();
+//					}
+//				});
+//
+//				// builder.setNegativeButton("取消", new OnClickListener() {
+//				//
+//				// @Override
+//				// public void onClick(DialogInterface dialog, int which) {
+//				// dialog.dismiss();
+//				// }
+//				// });
+//
+//				builder.create().show();
+//
+//			}
+//			else
+//			{
+//
+//				int code=json.optInt("result");
+//				switch (code)
+//				{
+//					case OnlineDataProvider.RESULT_NET_NOTAVAILABLE:
+//					{
+//						Toast toast = Toast.makeText(getApplicationContext(),
+//								getText(R.string.msg_connection_none),
+//								Toast.LENGTH_LONG);
+//						toast.setGravity(Gravity.CENTER, 0, 0);
+//						toast.show();
+//						return;
+//					}
+//					case OnlineDataProvider.RESULT_NET_ERROR:
+//					{
+//						Toast toast = Toast.makeText(getApplicationContext(),
+//								getText(R.string.msg_net_error),
+//								Toast.LENGTH_LONG);
+//						toast.setGravity(Gravity.CENTER, 0, 0);
+//						toast.show();
+//						return;
+//					}
+//					case OnlineDataProvider.RESULT_ERROR:
+//					// case Network.RESULT_RESPONSE_NULL:
+//					{
+//						String msg =  json.optString("err_msg");
+//						Toast toast = Toast.makeText(RetrievePasswordActivity.this
+//										.getApplicationContext(),
+//								msg,
+//								Toast.LENGTH_LONG);
+//						toast.setGravity(Gravity.CENTER, 0, 0);
+//						toast.show();
+//						return;
+//					}
+//
+//					case OnlineDataProvider.RESULT_FALSE:
+//					{
+//						Builder builder = new Builder(
+//								RetrievePasswordActivity.this);
+//						builder.setMessage(getString(R.string.str_invalid_pore));
+//
+//						builder.setTitle(getString(R.string.str_retrieve_failed));
+//
+//						builder.setPositiveButton(getString(android.R.string.ok), new OnClickListener()
+//						{
+//
+//							@Override
+//							public void onClick(DialogInterface dialog,
+//									int which)
+//							{
+//								dialog.dismiss();
+//
+//								// RetrievePasswordActivity.this.finish();
+//							}
+//						});
+//						builder.create().show();
+//						return;
+//
+//					}
+//					case RESULT_FAILED_WITH_MESSAGE:
+//					{
+//						Builder builder = new Builder(
+//								RetrievePasswordActivity.this);
+//						builder.setMessage(json.optString("err_msg"));
+//
+//						builder.setTitle(getString(R.string.str_retrieve_failed));
+//
+//						builder.setPositiveButton(getString(android.R.string.ok), new OnClickListener()
+//						{
+//
+//							@Override
+//							public void onClick(DialogInterface dialog,
+//												int which)
+//							{
+//								dialog.dismiss();
+//
+//								// RetrievePasswordActivity.this.finish();
+//							}
+//						});
+//						builder.create().show();
+//						return;
+//
+//					}
+//					default:
+//					{
+//						Toast toast = Toast.makeText(getApplicationContext(),
+//								getText(R.string.msg_net_resulterror), Toast.LENGTH_LONG);
+//						toast.setGravity(Gravity.CENTER, 0, 0);
+//						toast.show();
+//						break;
+//					}
+//				}
+//			}
+//		}
+//
+//		@Override
+//		protected void onCancelled()
+//		{
+//			mAuthTask = null;
+//			showProgress(false);
+//		}
+//	}
 }

+ 249 - 118
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/my/ChangePasswordActivity.java

@@ -8,10 +8,12 @@ import android.content.Context;
 import android.content.DialogInterface;
 import android.content.DialogInterface.OnClickListener;
 import android.content.Intent;
+import android.content.res.Resources;
 import android.graphics.Insets;
-import android.os.AsyncTask;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.Gravity;
@@ -35,15 +37,20 @@ 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.redant.rautils.utils.Network;
+import com.usai.redant.rautils.utils.TextScaleUtil;
 
 import org.json.JSONObject;
 
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
 /**
  * Activity which displays a login screen to the user, offering registration as
  * well.
  */
 public class ChangePasswordActivity extends AppCompatActivity {
-	private UserLoginTask mAuthTask = null;
+//	private UserLoginTask mAuthTask = null;
 
 	// Values for email and password at the time of the login attempt.
 	// private String m_sUser;
@@ -92,6 +99,13 @@ public class ChangePasswordActivity extends AppCompatActivity {
 
 
 		actionBar.setDisplayShowTitleEnabled(true);
+		getSupportActionBar().setElevation(0);
+	}
+
+	@Override
+	public Resources getResources() {
+		Resources resources = super.getResources();
+		return TextScaleUtil.getResources(this,resources,1.0f);
 	}
 	@Override
 	protected void onCreate(Bundle savedInstanceState) {
@@ -199,9 +213,9 @@ public class ChangePasswordActivity extends AppCompatActivity {
 	// * errors are presented and no actual login attempt is made.
 	// */
 	public void changepassword() {
-		if (mAuthTask != null) {
-			return;
-		}
+//		if (mAuthTask != null) {
+//			return;
+//		}
 
 		// Reset errors.
 		mOldpassView.setError(null);
@@ -250,8 +264,125 @@ public class ChangePasswordActivity extends AppCompatActivity {
 			// perform the user login attempt.
 			mLoginStatusMessageView.setText(R.string.login_progress_signing_in);
 			showProgress(true);
-			mAuthTask = new UserLoginTask();
-			mAuthTask.execute((Void) null);
+//			mAuthTask = new UserLoginTask();
+//			mAuthTask.execute((Void) null);
+
+
+
+
+
+			ExecutorService executor = Executors.newSingleThreadExecutor();
+			Handler handler = new Handler(Looper.getMainLooper());
+
+			executor.execute(() -> {
+				int errorcode;
+
+				Log.d("Announcement executor", "execute");
+
+				JSONObject json;
+
+					json = RADataProvider.change_pass( m_snewPassword);
+					errorcode = json.optInt("result");
+
+
+				handler.post(() -> {
+					//UI Thread work here
+					showProgress(false);
+					int resultcode= errorcode;
+
+					if (resultcode== Network.RESULT_TRUE)
+					{
+
+
+						Builder builder = new Builder(ChangePasswordActivity.this);
+						builder.setMessage(getString(R.string.str_password_changed));
+
+						builder.setTitle(getString(R.string.str_change_success));
+
+						builder.setPositiveButton(getString(android.R.string.ok), new OnClickListener() {
+
+							@Override
+							public void onClick(DialogInterface dialog, int which) {
+								dialog.dismiss();
+								TradeFilingApplication.put_password(m_snewPassword);
+//						ApexTrackingApplication.put_password(m_snewPassword);
+//						setResult(Activity.RESULT_OK, null);
+								finish();
+							}
+						});
+
+
+						builder.create().show();
+
+					}
+					else
+					{
+						switch (errorcode) {
+							case OnlineDataProvider.RESULT_NET_NOTAVAILABLE: {
+								Toast toast = Toast.makeText(getApplicationContext(),
+										getText(R.string.msg_connection_none),
+										Toast.LENGTH_LONG);
+								toast.setGravity(Gravity.CENTER, 0, 0);
+								toast.show();
+								return;
+							}
+							case OnlineDataProvider.RESULT_NET_ERROR: {
+								Toast toast = Toast.makeText(getApplicationContext(),
+										getText(R.string.msg_net_error), Toast.LENGTH_LONG);
+								toast.setGravity(Gravity.CENTER, 0, 0);
+								toast.show();
+								return;
+							}
+							case OnlineDataProvider.RESULT_ERROR:
+								// case Network.RESULT_RESPONSE_NULL:
+							{
+								String msg =  json.optString("err_msg");
+								Toast toast = Toast.makeText(ChangePasswordActivity.this
+												.getApplicationContext(),
+										msg,
+										Toast.LENGTH_LONG);
+								toast.setGravity(Gravity.CENTER, 0, 0);
+								toast.show();
+								return;
+							}
+
+							case OnlineDataProvider.RESULT_FAILED_WITH_MESSAGE: {
+								Builder builder = new Builder(ChangePasswordActivity.this);
+								builder.setMessage(json.optString("err_msg"));
+
+								builder.setTitle(getString(R.string.str_failed_to_changepassword));
+
+								builder.setPositiveButton(getString(android.R.string.ok), new OnClickListener() {
+
+									@Override
+									public void onClick(DialogInterface dialog, int which) {
+										dialog.dismiss();
+
+//							RetrievePasswordActivity.this.finish();
+									}
+								});
+								builder.create().show();
+
+								return;
+							}
+							default: {
+								Toast toast = Toast.makeText(getApplicationContext(),
+										getText(R.string.msg_net_resulterror) , Toast.LENGTH_LONG);
+								toast.setGravity(Gravity.CENTER, 0, 0);
+								toast.show();
+								break;
+							}
+						}
+					}
+
+
+
+
+
+				});
+			});
+
+
 		}
 	}
 
@@ -301,115 +432,115 @@ public class ChangePasswordActivity extends AppCompatActivity {
 	 * Represents an asynchronous login/registration task used to authenticate
 	 * the user.
 	 */
-	public class UserLoginTask extends AsyncTask<Void, Void, Boolean> {
-		int errorcode;
-		JSONObject json;
-		@Override
-		protected Boolean doInBackground(Void... params) {
-			json = RADataProvider.change_pass( m_snewPassword);
-			errorcode = json.optInt("result");
-			if (errorcode == OnlineDataProvider.RESULT_TRUE)
-				return true;
-			else {
-				return false;
-			}
-		}
-
-		@Override
-		protected void onPostExecute(final Boolean success) {
-			Log.d("onPostExecute", "entry");
-			mAuthTask = null;
-			showProgress(false);
-			// if (netconnect == )
-			// {
-			//
-			// }
-
-			if (success) {
-				Builder builder = new Builder(ChangePasswordActivity.this);
-				builder.setMessage(getString(R.string.str_password_changed));
-
-				builder.setTitle(getString(R.string.str_change_success));
-
-				builder.setPositiveButton(getString(android.R.string.ok), new OnClickListener() {
-
-					@Override
-					public void onClick(DialogInterface dialog, int which) {
-						dialog.dismiss();
-						TradeFilingApplication.put_password(m_snewPassword);
-//						ApexTrackingApplication.put_password(m_snewPassword);
-//						setResult(Activity.RESULT_OK, null);
-						finish();
-					}
-				});
-
-
-				builder.create().show();
-
-			} else {
-				switch (errorcode) {
-				case OnlineDataProvider.RESULT_NET_NOTAVAILABLE: {
-					Toast toast = Toast.makeText(getApplicationContext(),
-							getText(R.string.msg_connection_none),
-							Toast.LENGTH_LONG);
-					toast.setGravity(Gravity.CENTER, 0, 0);
-					toast.show();
-					return;
-				}
-				case OnlineDataProvider.RESULT_NET_ERROR: {
-					Toast toast = Toast.makeText(getApplicationContext(),
-							getText(R.string.msg_net_error), Toast.LENGTH_LONG);
-					toast.setGravity(Gravity.CENTER, 0, 0);
-					toast.show();
-					return;
-				}
-				case OnlineDataProvider.RESULT_ERROR:
-				// case Network.RESULT_RESPONSE_NULL:
-				{
-					String msg =  json.optString("err_msg");
-					Toast toast = Toast.makeText(ChangePasswordActivity.this
-									.getApplicationContext(),
-							msg,
-							Toast.LENGTH_LONG);
-					toast.setGravity(Gravity.CENTER, 0, 0);
-					toast.show();
-					return;
-				}
-
-				case OnlineDataProvider.RESULT_FAILED_WITH_MESSAGE: {
-					Builder builder = new Builder(ChangePasswordActivity.this);
-					builder.setMessage(json.optString("err_msg"));
-
-					builder.setTitle(getString(R.string.str_failed_to_changepassword));
-
-					builder.setPositiveButton(getString(android.R.string.ok), new OnClickListener() {
-
-						@Override
-						public void onClick(DialogInterface dialog, int which) {
-							dialog.dismiss();
-
-//							RetrievePasswordActivity.this.finish();
-						}
-					});
-					builder.create().show();
-
-					return;
-				}
-				default: {
-					Toast toast = Toast.makeText(getApplicationContext(),
-							getText(R.string.msg_net_resulterror) , Toast.LENGTH_LONG);
-					toast.setGravity(Gravity.CENTER, 0, 0);
-					toast.show();
-					break;
-				}
-				}
-			}
-		}
-
-		@Override
-		protected void onCancelled() {
-			mAuthTask = null;
-			showProgress(false);
-		}
-	}
+//	public class UserLoginTask extends AsyncTask<Void, Void, Boolean> {
+//		int errorcode;
+//		JSONObject json;
+//		@Override
+//		protected Boolean doInBackground(Void... params) {
+//			json = RADataProvider.change_pass( m_snewPassword);
+//			errorcode = json.optInt("result");
+//			if (errorcode == OnlineDataProvider.RESULT_TRUE)
+//				return true;
+//			else {
+//				return false;
+//			}
+//		}
+//
+//		@Override
+//		protected void onPostExecute(final Boolean success) {
+//			Log.d("onPostExecute", "entry");
+//			mAuthTask = null;
+//			showProgress(false);
+//			// if (netconnect == )
+//			// {
+//			//
+//			// }
+//
+//			if (success) {
+//				Builder builder = new Builder(ChangePasswordActivity.this);
+//				builder.setMessage(getString(R.string.str_password_changed));
+//
+//				builder.setTitle(getString(R.string.str_change_success));
+//
+//				builder.setPositiveButton(getString(android.R.string.ok), new OnClickListener() {
+//
+//					@Override
+//					public void onClick(DialogInterface dialog, int which) {
+//						dialog.dismiss();
+//						TradeFilingApplication.put_password(m_snewPassword);
+////						ApexTrackingApplication.put_password(m_snewPassword);
+////						setResult(Activity.RESULT_OK, null);
+//						finish();
+//					}
+//				});
+//
+//
+//				builder.create().show();
+//
+//			} else {
+//				switch (errorcode) {
+//				case OnlineDataProvider.RESULT_NET_NOTAVAILABLE: {
+//					Toast toast = Toast.makeText(getApplicationContext(),
+//							getText(R.string.msg_connection_none),
+//							Toast.LENGTH_LONG);
+//					toast.setGravity(Gravity.CENTER, 0, 0);
+//					toast.show();
+//					return;
+//				}
+//				case OnlineDataProvider.RESULT_NET_ERROR: {
+//					Toast toast = Toast.makeText(getApplicationContext(),
+//							getText(R.string.msg_net_error), Toast.LENGTH_LONG);
+//					toast.setGravity(Gravity.CENTER, 0, 0);
+//					toast.show();
+//					return;
+//				}
+//				case OnlineDataProvider.RESULT_ERROR:
+//				// case Network.RESULT_RESPONSE_NULL:
+//				{
+//					String msg =  json.optString("err_msg");
+//					Toast toast = Toast.makeText(ChangePasswordActivity.this
+//									.getApplicationContext(),
+//							msg,
+//							Toast.LENGTH_LONG);
+//					toast.setGravity(Gravity.CENTER, 0, 0);
+//					toast.show();
+//					return;
+//				}
+//
+//				case OnlineDataProvider.RESULT_FAILED_WITH_MESSAGE: {
+//					Builder builder = new Builder(ChangePasswordActivity.this);
+//					builder.setMessage(json.optString("err_msg"));
+//
+//					builder.setTitle(getString(R.string.str_failed_to_changepassword));
+//
+//					builder.setPositiveButton(getString(android.R.string.ok), new OnClickListener() {
+//
+//						@Override
+//						public void onClick(DialogInterface dialog, int which) {
+//							dialog.dismiss();
+//
+////							RetrievePasswordActivity.this.finish();
+//						}
+//					});
+//					builder.create().show();
+//
+//					return;
+//				}
+//				default: {
+//					Toast toast = Toast.makeText(getApplicationContext(),
+//							getText(R.string.msg_net_resulterror) , Toast.LENGTH_LONG);
+//					toast.setGravity(Gravity.CENTER, 0, 0);
+//					toast.show();
+//					break;
+//				}
+//				}
+//			}
+//		}
+//
+//		@Override
+//		protected void onCancelled() {
+//			mAuthTask = null;
+//			showProgress(false);
+//		}
+//	}
 }

+ 46 - 1
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/my/CheckSavedActivity.java

@@ -4,21 +4,26 @@ import android.app.AlertDialog;
 import android.app.Dialog;
 import android.content.DialogInterface;
 import android.content.Intent;
-import android.database.sqlite.SQLiteDatabase;
+import android.content.res.Resources;
+import android.graphics.Insets;
 import android.os.Bundle;
 import android.view.Gravity;
 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.fragment.app.Fragment;
 
 import com.usai.ratradefiling.R;
 import com.usai.ratradefiling.dataprovider.RADataProvider;
+import com.usai.redant.rautils.utils.TextScaleUtil;
 
 //import com.usai.apex.ApexTrackingApplication;
 //import com.usai.apex.R;
@@ -137,7 +142,15 @@ public class CheckSavedActivity extends AppCompatActivity {
 //        actionBar.setIcon(getNumberDrawable());
 //        actionBar.setDisplayShowHomeEnabled(true);
         actionBar.setDisplayShowTitleEnabled(true);
+        getSupportActionBar().setElevation(0);
     }
+
+    @Override
+    public Resources getResources() {
+        Resources resources = super.getResources();
+        return TextScaleUtil.getResources(this,resources,1.0f);
+    }
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -180,6 +193,38 @@ public class CheckSavedActivity extends AppCompatActivity {
 //            }
 
 
+        }
+
+
+        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();
     }

+ 70 - 57
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/my/MyFragment.java

@@ -1,34 +1,23 @@
 package com.usai.ratradefiling.my;
 
 
-import android.app.Activity;
 import android.content.Intent;
-import android.os.AsyncTask;
 import android.os.Bundle;
 import android.util.Log;
-import android.view.Gravity;
 import android.view.View;
 import android.widget.ListView;
-import android.widget.Toast;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.fragment.app.Fragment;
-import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 
-//import com.usai.apex.ChangePasswordActivity;
-//import com.usai.apex.saved.CheckSavedActivity;
 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.redant.rautils.list.StaticModelistFragment;
 
-import org.json.JSONException;
 import org.json.JSONObject;
 
-import java.io.File;
-
-import static com.usai.redant.rautils.utils.Network.RESULT_TRUE;
-
 /**
  * A simple {@link Fragment} subclass.
  */
@@ -38,36 +27,36 @@ public class MyFragment extends StaticModelistFragment
     static final int PASSWORD_CHANGED = 1;
     private static final int	REQUEST_CHANGEPASSWORD_ACTIVITY	= 2;
 
-
-
-    @Override
-    public void onActivityResult(int requestCode, int resultCode, Intent data)
-    {
-        switch (requestCode)
-        {
-
-//			case REQUEST_LOGINACTIVITY:
-//				if (resultCode == Activity.RESULT_CANCELED)
-//					getActivity().finish();
-//				break;
-            case REQUEST_CHANGEPASSWORD_ACTIVITY:
-                if (resultCode == Activity.RESULT_OK)
-                {
-//					String UNIQUE_STRING = "com.usai.apex.push.cancel";
-//					Intent intent = new Intent(UNIQUE_STRING);
-//					getActivity().sendBroadcast(intent);
-//					Intent i = new Intent();
-//					i.setClass(getActivity(), ApexActivity.class);
-//					startActivityForResult(i, REQUEST_LOGINACTIVITY);
-//                    getActivity().setResult(PASSWORD_CHANGED, null);
-//                    getActivity().finish();
-                }
-                break;
-            default:
-                break;
-        }
-        super.onActivityResult(requestCode, resultCode, data);
-    }
+//
+//
+//    @Override
+//    public void onActivityResult(int requestCode, int resultCode, Intent data)
+//    {
+//        switch (requestCode)
+//        {
+//
+////			case REQUEST_LOGINACTIVITY:
+////				if (resultCode == Activity.RESULT_CANCELED)
+////					getActivity().finish();
+////				break;
+//            case REQUEST_CHANGEPASSWORD_ACTIVITY:
+//                if (resultCode == Activity.RESULT_OK)
+//                {
+////					String UNIQUE_STRING = "com.usai.apex.push.cancel";
+////					Intent intent = new Intent(UNIQUE_STRING);
+////					getActivity().sendBroadcast(intent);
+////					Intent i = new Intent();
+////					i.setClass(getActivity(), ApexActivity.class);
+////					startActivityForResult(i, REQUEST_LOGINACTIVITY);
+////                    getActivity().setResult(PASSWORD_CHANGED, null);
+////                    getActivity().finish();
+//                }
+//                break;
+//            default:
+//                break;
+//        }
+//        super.onActivityResult(requestCode, resultCode, data);
+//    }
 
 
     public interface LogoutCallBack{
@@ -82,27 +71,47 @@ public class MyFragment extends StaticModelistFragment
     public MyFragment() {
         // Required empty public constructor
     }
+
     @Override
-    public void onActivityCreated(Bundle savedInstanceState)
+    public void onCreate(@Nullable Bundle savedInstanceState)
     {
-        showIcon = false;
-        super.onActivityCreated(savedInstanceState);
 
+        super.onCreate(savedInstanceState);
+
+    }
+
+    @Override
+    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
+    {
+        showIcon = false;
         setupAdapter(R.raw.my);
 
 //        adapter.getView()
 
         customize_style();
-//        JSONObject jsonobj=loadjson(R.raw.search);
-//        adapter        = new SimpleRoundCornerAdapter(this.getActivity(),
-//                getData(jsonobj), R.layout.static_modelist_cell, new String[] { "title",
-//                "img","detail" }, new int[] { R.id.tv_name, R.id.iv_icon,R.id.tv_detail });
-//        setListAdapter(adapter);
-////        this.getListView().setDivider(R.drawable.);
-//        this.getListView().setDividerHeight(18);
-//        this.getListView().setBackgroundColor(Color.WHITE);
-
+        super.onViewCreated(view, savedInstanceState);
     }
+    //    @Override
+//    public void onActivityCreated(Bundle savedInstanceState)
+//    {
+//        showIcon = false;
+//        super.onActivityCreated(savedInstanceState);
+//
+//        setupAdapter(R.raw.my);
+//
+////        adapter.getView()
+//
+//        customize_style();
+////        JSONObject jsonobj=loadjson(R.raw.search);
+////        adapter        = new SimpleRoundCornerAdapter(this.getActivity(),
+////                getData(jsonobj), R.layout.static_modelist_cell, new String[] { "title",
+////                "img","detail" }, new int[] { R.id.tv_name, R.id.iv_icon,R.id.tv_detail });
+////        setListAdapter(adapter);
+//////        this.getListView().setDivider(R.drawable.);
+////        this.getListView().setDividerHeight(18);
+////        this.getListView().setBackgroundColor(Color.WHITE);
+//
+//    }
     @Override
     public void onListItemClick(ListView l, View v, int position, long id)
     {
@@ -159,8 +168,12 @@ public class MyFragment extends StaticModelistFragment
             Intent intent = new Intent();
 			intent.setClass(getActivity(), ChangePasswordActivity.class);
 
-			startActivityForResult(intent, REQUEST_CHANGEPASSWORD_ACTIVITY);
-			return;
+
+//			startActivityForResult(intent, REQUEST_CHANGEPASSWORD_ACTIVITY);
+
+            startActivity(intent);
+            return;
+
         }
         else if (title.equals("Logout"))
         {

+ 87 - 2
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/my/SavedDetailFragment.java

@@ -53,10 +53,12 @@ public class SavedDetailFragment extends TFListFragment
 	{
 		adapter.notifyDataSetChanged();
 	}
+
 	@Override
-	public void onActivityCreated(Bundle savedInstanceState)
+	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
 	{
-		super.onActivityCreated(savedInstanceState);
+
+		View v = super.onCreateView(inflater, container, savedInstanceState);
 		adapter = new FavoritesAdapter(searchresult, getActivity());
 
 //		getListView().setOnTouchListener(this);
@@ -133,8 +135,91 @@ public class SavedDetailFragment extends TFListFragment
 			public void onMenuClose(int position) {
 			}
 		});
+		return v;
 	}
 
+//	@Override
+//	public void onActivityCreated(Bundle savedInstanceState)
+//	{
+//		super.onActivityCreated(savedInstanceState);
+//		adapter = new FavoritesAdapter(searchresult, getActivity());
+//
+////		getListView().setOnTouchListener(this);
+//		setListAdapter(adapter);
+//		// this.getListView().setBackgroundColor(Color.WHITE);
+//
+//		// step 1. create a MenuCreator
+//		SwipeMenuCreator creator = new SwipeMenuCreator() {
+//
+//			@Override
+//			public void create(SwipeMenu menu) {
+//
+//				// create "delete" item
+//				SwipeMenuItem deleteItem = new SwipeMenuItem(mContext);
+//				// set item background
+//				deleteItem.setBackground(new ColorDrawable(Color.rgb(0xF9,0x3F, 0x25)));
+//				// set item width
+//				deleteItem.setWidth(dp2px(90));
+//				// set a icon
+//				deleteItem.setTitle("Delete");
+//				// set item title fontsize
+//				deleteItem.setTitleSize(18);
+//				// set item title font color
+//				deleteItem.setTitleColor(Color.WHITE);
+//				// add to menu
+//				menu.addMenuItem(deleteItem);
+//			}
+//		};
+//		// set creator
+//		mSwipeMenuListView.setMenuCreator(creator);
+//
+//		// step 2. listener item click event
+//		mSwipeMenuListView.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {
+//			@Override
+//			public boolean onMenuItemClick(int position, SwipeMenu menu, int index) {
+//
+//
+//				switch (index) {
+//					case 0:
+////						 delete
+//
+//
+//						searchresult.getData().remove(position);
+//						RADataProvider.removeSavedList("saved_detail",position);
+//						adapter.notifyDataSetChanged();
+//
+//						break;
+//				}
+//				return false;
+//			}
+//		});
+//
+//		// set SwipeListener
+//		mSwipeMenuListView.setOnSwipeListener(new SwipeMenuListView.OnSwipeListener() {
+//
+//			@Override
+//			public void onSwipeStart(int position) {
+//				// swipe start
+//			}
+//
+//			@Override
+//			public void onSwipeEnd(int position) {
+//				// swipe end
+//			}
+//		});
+//
+//		// set MenuStateChangeListener
+//		mSwipeMenuListView.setOnMenuStateChangeListener(new SwipeMenuListView.OnMenuStateChangeListener() {
+//			@Override
+//			public void onMenuOpen(int position) {
+//			}
+//
+//			@Override
+//			public void onMenuClose(int position) {
+//			}
+//		});
+//	}
+
 	@Override
 	public void onListItemClick(ListView l, View v, int position, long id)
 	{

+ 86 - 10
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/my/SavedSearchFragment.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,7 +15,6 @@ import android.widget.ImageView;
 import android.widget.ListView;
 import android.widget.TextView;
 
-
 import com.usai.ratradefiling.R;
 import com.usai.ratradefiling.dataprovider.RADataProvider;
 import com.usai.ratradefiling.result.ResultActivity;
@@ -30,10 +26,8 @@ import com.usai.ratradefiling.swipemenulistview.SwipeMenuListView;
 import com.usai.redant.rautils.utils.RAUtil;
 
 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;
@@ -55,10 +49,11 @@ public class SavedSearchFragment extends TFListFragment
 	{
 		adapter.notifyDataSetChanged();
 	}
+
 	@Override
-	public void onActivityCreated(Bundle savedInstanceState)
+	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
 	{
-		super.onActivityCreated(savedInstanceState);
+		View v=super.onCreateView(inflater, container, savedInstanceState);
 		adapter = new HistoryAdapter(searchresult, getActivity());
 
 //		getListView().setOnTouchListener(this);
@@ -102,8 +97,8 @@ public class SavedSearchFragment extends TFListFragment
 //						 delete
 
 						RADataProvider.removeSavedList("saved_search",position);
-							searchresult.getData().remove(position);
-							adapter.notifyDataSetChanged();
+						searchresult.getData().remove(position);
+						adapter.notifyDataSetChanged();
 
 						break;
 				}
@@ -135,8 +130,89 @@ public class SavedSearchFragment extends TFListFragment
 			public void onMenuClose(int position) {
 			}
 		});
+		return v;
 	}
 
+//	@Override public void onActivityCreated(Bundle savedInstanceState) {
+//		super.onActivityCreated(savedInstanceState);
+//		adapter = new HistoryAdapter(searchresult, getActivity());
+//
+////		getListView().setOnTouchListener(this);
+//		setListAdapter(adapter);
+////		this.getListView().setBackgroundColor(Color.WHITE);
+//
+//
+//		// step 1. create a MenuCreator
+//		SwipeMenuCreator creator = new SwipeMenuCreator() {
+//
+//			@Override
+//			public void create(SwipeMenu menu) {
+//
+//				// create "delete" item
+//				SwipeMenuItem deleteItem = new SwipeMenuItem(mContext);
+//				// set item background
+//				deleteItem.setBackground(new ColorDrawable(Color.rgb(0xF9,0x3F, 0x25)));
+//				// set item width
+//				deleteItem.setWidth(dp2px(90));
+//				// set a icon
+//				deleteItem.setTitle("Delete");
+//				// set item title fontsize
+//				deleteItem.setTitleSize(18);
+//				// set item title font color
+//				deleteItem.setTitleColor(Color.WHITE);
+//				// add to menu
+//				menu.addMenuItem(deleteItem);
+//			}
+//		};
+//		// set creator
+//		mSwipeMenuListView.setMenuCreator(creator);
+//
+//		// step 2. listener item click event
+//		mSwipeMenuListView.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {
+//			@Override
+//			public boolean onMenuItemClick(int position, SwipeMenu menu, int index) {
+//
+//
+//				switch (index) {
+//					case 0:
+////						 delete
+//
+//						RADataProvider.removeSavedList("saved_search",position);
+//							searchresult.getData().remove(position);
+//							adapter.notifyDataSetChanged();
+//
+//						break;
+//				}
+//				return false;
+//			}
+//		});
+//
+//		// set SwipeListener
+//		mSwipeMenuListView.setOnSwipeListener(new SwipeMenuListView.OnSwipeListener() {
+//
+//			@Override
+//			public void onSwipeStart(int position) {
+//				// swipe start
+//			}
+//
+//			@Override
+//			public void onSwipeEnd(int position) {
+//				// swipe end
+//			}
+//		});
+//
+//		// set MenuStateChangeListener
+//		mSwipeMenuListView.setOnMenuStateChangeListener(new SwipeMenuListView.OnMenuStateChangeListener() {
+//			@Override
+//			public void onMenuOpen(int position) {
+//			}
+//
+//			@Override
+//			public void onMenuClose(int position) {
+//			}
+//		});
+//	}
+
 	@Override
 	public void onListItemClick(ListView l, View v, int position, long id)
 	{

+ 39 - 9
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/result/ResultActivity.java

@@ -3,8 +3,10 @@ package com.usai.ratradefiling.result;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.content.res.Resources;
 import android.graphics.Color;
 import android.graphics.Insets;
+import android.os.Build;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.view.Gravity;
@@ -20,16 +22,14 @@ import android.widget.ListView;
 import android.widget.ProgressBar;
 import android.widget.TextView;
 
+import androidx.activity.result.ActivityResult;
+import androidx.activity.result.ActivityResultCallback;
+import androidx.activity.result.contract.ActivityResultContracts;
 import androidx.annotation.NonNull;
 import androidx.appcompat.app.AlertDialog;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
 
-//import com.usai..TrackingApplication;
-//import com.usai..CustomizeFieldsActivity;
-//import com.usai..R;
-//import com.usai..mainframe.NewDetailActivity;
-//import com.usai..pdf.PDFPreviewActivity;
 import com.usai.ratradefiling.R;
 import com.usai.ratradefiling.TradeFilingApplication;
 import com.usai.ratradefiling.detail.NewDetailActivity;
@@ -37,8 +37,7 @@ import com.usai.ratradefiling.fields.CustomizeFieldsActivity;
 import com.usai.ratradefiling.search.SearchActivity;
 import com.usai.redant.rautils.actionsheet.ActionSheet;
 import com.usai.redant.rautils.utils.RAUtil;
-//import com.usai.util.Network;
-//import com.usai.util.commonUtil;
+import com.usai.redant.rautils.utils.TextScaleUtil;
 
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -52,7 +51,11 @@ public class ResultActivity extends AppCompatActivity implements ResultPresenter
 
     // region Build
 
-
+    @Override
+    public Resources getResources() {
+        Resources resources = super.getResources();
+        return TextScaleUtil.getResources(this,resources,1.0f);
+    }
     private static final String ParametersKey = "_Result_Parameters_Key";
 
     public static void startResultActivity(Context context, Bundle params) {
@@ -271,6 +274,7 @@ public class ResultActivity extends AppCompatActivity implements ResultPresenter
             actionBar.setHomeButtonEnabled(true);
             actionBar.setDisplayHomeAsUpEnabled(true);
         }
+        getSupportActionBar().setElevation(0);
     }
 
     // endregion
@@ -490,7 +494,33 @@ public class ResultActivity extends AppCompatActivity implements ResultPresenter
         intent.putExtra("forNewResult", true);
         intent.putExtra("maxDisplayCount", 3);
 
-        startActivityForResult(intent, RequestCode.Field_Setting);
+//
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
+        {
+
+
+            registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>()
+            {
+                @Override
+                public void onActivityResult(ActivityResult o)
+                {
+
+
+                    if (o.getResultCode() == 1)
+                    {
+                        mPresenter.dirty = true;
+                        loadData();
+                    }
+
+
+                }
+            });
+        }
+        else
+        {
+            startActivityForResult(intent, RequestCode.Field_Setting);
+        }
     }
 
     // endregion

+ 3 - 2
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/result/cell/ResulteManifestCell.java

@@ -10,6 +10,7 @@ import android.widget.LinearLayout;
 import android.widget.TextView;
 
 import androidx.annotation.Nullable;
+import androidx.core.content.ContextCompat;
 
 import com.usai.ratradefiling.R;
 
@@ -162,9 +163,9 @@ public class ResulteManifestCell extends LinearLayout {
 
 
         if(isClose)
-            statusIv.setBackgroundColor(getResources().getColor(R.color.white));
+            statusIv.setBackgroundColor(ContextCompat.getColor(getContext(),R.color.white));
         else
-            statusIv.setBackgroundColor(getResources().getColor(R.color.TFWarring));
+            statusIv.setBackgroundColor(ContextCompat.getColor(getContext(),R.color.TFWarring));
 //        primaryCCNTv.setText(primary_ccn);
 //        primaryCCNTv.forceLayout();
         return this;

+ 8 - 1
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/search/SearchActivity.java

@@ -5,6 +5,7 @@ import android.app.DatePickerDialog;
 import android.app.Dialog;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.content.res.Resources;
 import android.graphics.Insets;
 import android.os.Bundle;
 import android.text.Editable;
@@ -46,6 +47,7 @@ import com.usai.ratradefiling.TradeFilingApplication;
 import com.usai.ratradefiling.dataprovider.RADataProvider;
 import com.usai.ratradefiling.fields.CustomizeFieldsActivity;
 import com.usai.ratradefiling.result.ResultActivity;
+import com.usai.redant.rautils.utils.TextScaleUtil;
 
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -105,7 +107,11 @@ public class SearchActivity extends AppCompatActivity implements OnClickListener
 //
 //        return new BitmapDrawable(getResources(), bmp);
 //    }
-
+	@Override
+	public Resources getResources() {
+		Resources resources = super.getResources();
+		return TextScaleUtil.getResources(this,resources,1.0f);
+	}
     private void setCustomActionBar() {
         ActionBar.LayoutParams lp =new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.MATCH_PARENT, Gravity.CENTER);
         View mActionBarView = LayoutInflater.from(this).inflate(R.layout.actionbar_customtitle, null);
@@ -127,6 +133,7 @@ public class SearchActivity extends AppCompatActivity implements OnClickListener
 //        actionBar.setIcon(getNumberDrawable());
 //        actionBar.setDisplayShowHomeEnabled(true);
         actionBar.setDisplayShowTitleEnabled(true);
+		getSupportActionBar().setElevation(0);
     }
 
     private EditText mSearchView;

+ 116 - 5
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/signup/SignupActivity.java

@@ -1,13 +1,16 @@
 package com.usai.ratradefiling.signup;
 
+import static androidx.core.text.HtmlCompat.FROM_HTML_MODE_LEGACY;
 import static com.usai.redant.rautils.utils.Network.RESULT_TRUE;
 
 import android.content.Context;
 import android.content.Intent;
+import android.content.res.Resources;
 import android.graphics.Insets;
 import android.os.AsyncTask;
 import android.os.Bundle;
-import android.text.Html;
+import android.os.Handler;
+import android.os.Looper;
 import android.text.TextUtils;
 import android.text.method.LinkMovementMethod;
 import android.text.method.ScrollingMovementMethod;
@@ -28,14 +31,19 @@ import android.widget.Toast;
 import androidx.annotation.NonNull;
 import androidx.appcompat.app.ActionBar;
 import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.text.HtmlCompat;
 
 import com.usai.ratradefiling.R;
 import com.usai.ratradefiling.dataprovider.OnlineDataProvider;
 import com.usai.ratradefiling.dataprovider.RADataProvider;
 import com.usai.redant.rautils.utils.RAUtil;
+import com.usai.redant.rautils.utils.TextScaleUtil;
 
 import org.json.JSONObject;
 
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
 public class SignupActivity extends AppCompatActivity
 {
 
@@ -87,6 +95,7 @@ public class SignupActivity extends AppCompatActivity
 
 
         actionBar.setDisplayShowTitleEnabled(true);
+        getSupportActionBar().setElevation(0);
     }
 
     @Override
@@ -100,6 +109,7 @@ public class SignupActivity extends AppCompatActivity
 
 
             ViewGroup c = findViewById(R.id.container_root);
+//            c.setBackgroundResource(R.color.TFPrimary);
             c.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener()
             {
                 @NonNull
@@ -162,7 +172,7 @@ public class SignupActivity extends AppCompatActivity
         int resourceId =getResources().getIdentifier(name, "raw", getPackageName());
         String html_text=RAUtil.getStringFromRAW(this,resourceId);
 //        Html.fromHtml(html_text);
-        mTextView.setText(Html.fromHtml(html_text));
+        mTextView.setText(HtmlCompat.fromHtml(html_text,FROM_HTML_MODE_LEGACY));
 
 
         mTextView.setMovementMethod(ScrollingMovementMethod.getInstance());
@@ -264,15 +274,116 @@ public class SignupActivity extends AppCompatActivity
 //             perform the user login attempt.
             mSignupStatusMessageView.setText(R.string.login_progress_signing_in);
             showProgress(true);
-            mAuthTask = new UserSignupTask();
-            mAuthTask.execute((Void) null);
+//            mAuthTask = new UserSignupTask();
+//            mAuthTask.execute((Void) null);
+
+
+        ExecutorService executor = Executors.newSingleThreadExecutor();
+        Handler handler = new Handler(Looper.getMainLooper());
+
+        executor.execute(() -> {
+            int errorcode;
+
+            Log.d("Announcement executor", "execute");
+
+            JSONObject json;
+
+            json= RADataProvider.Signup(user ,password);;
+            errorcode = json.optInt("result");
+
+
+            handler.post(() -> {
+                //UI Thread work here
+                showProgress(false);
+
+                try {
+
+                    int result = json.getInt("result");
+
+
+
+
+                    switch (result)
+                    {
+                        case RESULT_TRUE:
+                        {
+
+
+                            Toast toast = Toast.makeText(
+                                    getApplicationContext(),
+                                    getText(R.string.str_signup_success),
+                                    Toast.LENGTH_LONG);
+                            toast.setGravity(Gravity.CENTER, 0, 0);
+                            toast.show();
+                            finish();
+                            return;
+
+
+                        }
+                        case OnlineDataProvider.RESULT_NET_NOTAVAILABLE:
+                        {
+                            Toast toast = Toast.makeText(
+                                    getApplicationContext(),
+                                    getText(R.string.msg_connection_none),
+                                    Toast.LENGTH_LONG);
+                            toast.setGravity(Gravity.CENTER, 0, 0);
+                            toast.show();
+                            return;
+                        }
+                        case OnlineDataProvider.RESULT_NET_ERROR:
+                        {
+                            Toast toast = Toast.makeText(getApplicationContext(),
+                                    getText(R.string.msg_net_error), Toast.LENGTH_LONG);
+                            toast.setGravity(Gravity.CENTER, 0, 0);
+                            toast.show();
+                            return;
+                        }
+                        case OnlineDataProvider.RESULT_FAILED_WITH_MESSAGE:
+                        {
+                            Toast toast = Toast.makeText(getApplicationContext(),json.optString("err_msg"), Toast.LENGTH_LONG);
+                            toast.setGravity(Gravity.CENTER, 0, 0);
+                            toast.show();
+                            return;
+                        }
+
+                        default:
+                        {
+                            Toast toast = Toast.makeText(getApplicationContext(),
+                                    getText(R.string.msg_net_resulterror) , Toast.LENGTH_LONG);
+                            toast.setGravity(Gravity.CENTER, 0, 0);
+                            toast.show();
+                            break;
+                        }
+                    }
+
+
+
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+
+
+
+
+
+
+
+
+            });
+        });
+
+
 //        }
 
 
 
     }
 
-
+    @Override
+    public Resources getResources() {
+        Resources resources = super.getResources();
+        return TextScaleUtil.getResources(this,resources,1.0f);
+    }
 
     private void showProgress(final boolean show)
 

+ 8 - 2
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/swipemenulistview/SwipeMenuItem.java

@@ -4,6 +4,8 @@ package com.usai.ratradefiling.swipemenulistview;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
 
+import androidx.appcompat.content.res.AppCompatResources;
+
 /**
  * 
  * @author baoyz
@@ -70,7 +72,10 @@ public class SwipeMenuItem {
 	}
 
 	public void setIcon(int resId) {
-		this.icon = mContext.getResources().getDrawable(resId);
+//		this.icon = mContext.getResources().getDrawable(resId);
+
+		this.icon = AppCompatResources.getDrawable(mContext,resId);;
+
 	}
 
 	public Drawable getBackground() {
@@ -82,7 +87,8 @@ public class SwipeMenuItem {
 	}
 
 	public void setBackground(int resId) {
-		this.background = mContext.getResources().getDrawable(resId);
+//		this.background = mContext.getResources().getDrawable(resId);
+		this.background = AppCompatResources.getDrawable(mContext,resId);;
 	}
 
 	public int getWidth() {

+ 10 - 11
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/swipemenulistview/SwipeMenuLayout.java

@@ -4,6 +4,7 @@ import android.content.Context;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.util.TypedValue;
+import android.view.GestureDetector;
 import android.view.GestureDetector.OnGestureListener;
 import android.view.GestureDetector.SimpleOnGestureListener;
 import android.view.MotionEvent;
@@ -11,9 +12,7 @@ import android.view.View;
 import android.view.animation.Interpolator;
 import android.widget.AbsListView;
 import android.widget.FrameLayout;
-
-import androidx.core.view.GestureDetectorCompat;
-import androidx.core.widget.ScrollerCompat;
+import android.widget.OverScroller;
 
 /**
  * 
@@ -35,13 +34,13 @@ public class SwipeMenuLayout extends FrameLayout {
 	private SwipeMenuView mMenuView;
 	private int mDownX;
 	private int state = STATE_CLOSE;
-	private GestureDetectorCompat mGestureDetector;
+	private GestureDetector mGestureDetector;
 	private OnGestureListener mGestureListener;
 	private boolean isFling;
 	private int MIN_FLING = dp2px(15);
 	private int MAX_VELOCITYX = -dp2px(500);
-	private ScrollerCompat mOpenScroller;
-	private ScrollerCompat mCloseScroller;
+	private OverScroller mOpenScroller;
+	private OverScroller  mCloseScroller;
 	private int mBaseX;
 	private int position;
 	private Interpolator mCloseInterpolator;
@@ -112,22 +111,22 @@ public class SwipeMenuLayout extends FrameLayout {
 				return super.onFling(e1, e2, velocityX, velocityY);
 			}
 		};
-		mGestureDetector = new GestureDetectorCompat(getContext(),
+		mGestureDetector = new GestureDetector (getContext(),
 				mGestureListener);
 
 		// mScroller = ScrollerCompat.create(getContext(), new
 		// BounceInterpolator());
 		if (mCloseInterpolator != null) {
-			mCloseScroller = ScrollerCompat.create(getContext(),
+			mCloseScroller = new OverScroller(getContext(),
 					mCloseInterpolator);
 		} else {
-			mCloseScroller = ScrollerCompat.create(getContext());
+			mCloseScroller = new OverScroller(getContext());
 		}
 		if (mOpenInterpolator != null) {
-			mOpenScroller = ScrollerCompat.create(getContext(),
+			mOpenScroller = new OverScroller(getContext(),
 					mOpenInterpolator);
 		} else {
-			mOpenScroller = ScrollerCompat.create(getContext());
+			mOpenScroller = new OverScroller(getContext());
 		}
 
 		LayoutParams contentParams = new LayoutParams(

+ 6 - 1
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/swipemenulistview/SwipeMenuView.java

@@ -51,7 +51,12 @@ public class SwipeMenuView extends LinearLayout implements OnClickListener {
 		parent.setGravity(Gravity.CENTER);
 		parent.setOrientation(LinearLayout.VERTICAL);
 		parent.setLayoutParams(params);
-		parent.setBackgroundDrawable(item.getBackground());
+
+
+			parent.setBackground(item.getBackground());
+
+
+
 		parent.setOnClickListener(this);
 		addView(parent);
 

+ 115 - 6
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/tfeditor/TFEditorActivity.java

@@ -7,9 +7,14 @@ import static com.usai.ratradefiling.dataprovider.OnlineDataProvider.URL_SAVE_ED
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.content.res.Resources;
+import android.os.Build;
 import android.os.Bundle;
 import android.view.MenuItem;
 
+import androidx.activity.result.ActivityResult;
+import androidx.activity.result.ActivityResultCallback;
+import androidx.activity.result.contract.ActivityResultContracts;
 import androidx.appcompat.app.AlertDialog;
 
 import com.usai.commoneditorlib.CommonEditorActivity;
@@ -17,13 +22,18 @@ import com.usai.commoneditorlib.EnumSlectOnlineActivity;
 import com.usai.ratradefiling.dataprovider.OnlineDataProvider;
 import com.usai.ratradefiling.dataprovider.RADataProvider;
 import com.usai.redant.rautils.utils.RAUtil;
+import com.usai.redant.rautils.utils.TextScaleUtil;
 
 import org.json.JSONException;
 import org.json.JSONObject;
 
 public class TFEditorActivity extends CommonEditorActivity
 {
-
+    @Override
+    public Resources getResources() {
+        Resources resources = super.getResources();
+        return TextScaleUtil.getResources(this,resources,1.0f);
+    }
     private Context mContext;
 
 
@@ -377,8 +387,28 @@ public class TFEditorActivity extends CommonEditorActivity
         Intent intent = builder.build(mContext,null,URL_REMOTE,URL_EDIT,b,is_subaction,subaction_tag,groupIndex,itemIndex);
 
                     int request_code = 20;
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
+        {
+
+
+            registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>()
+            {
+                @Override
+                public void onActivityResult(ActivityResult o)
+                {
+
 
-        startActivityForResult(intent,20);
+                    onActivityResult20(o.getData());
+
+
+                }
+            });
+        }
+        else
+        {
+            startActivityForResult(intent, 20);
+        }
+//        startActivityForResult(intent,20);
 
     }
 
@@ -446,7 +476,27 @@ public class TFEditorActivity extends CommonEditorActivity
 
             int request_code = 20;
 
-            startActivityForResult(intent,20);
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
+            {
+
+
+                registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>()
+                {
+                    @Override
+                    public void onActivityResult(ActivityResult o)
+                    {
+
+
+                        onActivityResult20(o.getData());
+
+
+                    }
+                });
+            }
+            else
+            {
+                startActivityForResult(intent, 20);
+            }
 
 //            TFEditorViewController *vc = [[UIStoryboard storyboardWithName:@"TFEditor" bundle:nil] instantiateViewControllerWithIdentifier:@"TFEditorViewController"];
 //
@@ -492,7 +542,27 @@ public class TFEditorActivity extends CommonEditorActivity
 
             int request_code = 15;
 
-            startActivityForResult(intent,request_code);
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
+            {
+
+
+                registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>()
+                {
+                    @Override
+                    public void onActivityResult(ActivityResult o)
+                    {
+
+
+                        onActivityResult15(o.getData());
+
+
+                    }
+                });
+            }
+            else
+            {
+                startActivityForResult(intent, 15);
+            }
 //            EnumSelectOnlineViewController* enumvc =[[UIStoryboard storyboardWithName:@"CommonEditor" bundle:nil] instantiateViewControllerWithIdentifier:@"EnumSelectOnlineViewController"];
 //            enumvc.delegate = self;
 //            enumvc.max_select = max_select;
@@ -542,8 +612,27 @@ public class TFEditorActivity extends CommonEditorActivity
 
             int request_code = 20;
 
-            startActivityForResult(intent,20);
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
+            {
+
+
+                registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>()
+                {
+                    @Override
+                    public void onActivityResult(ActivityResult o)
+                    {
 
+
+                        onActivityResult20(o.getData());
+
+
+                    }
+                });
+            }
+            else
+            {
+                startActivityForResult(intent, 20);
+            }
 //            TFEditorViewController *vc = [[UIStoryboard storyboardWithName:@"TFEditor" bundle:nil] instantiateViewControllerWithIdentifier:@"TFEditorViewController"];
 //
 //            vc.url_type = URL_REMOTE;
@@ -581,7 +670,27 @@ public class TFEditorActivity extends CommonEditorActivity
 
             int request_code = 15;
 
-            startActivityForResult(intent,request_code);
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
+            {
+
+
+                registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>()
+                {
+                    @Override
+                    public void onActivityResult(ActivityResult o)
+                    {
+
+
+                        onActivityResult15(o.getData());
+
+
+                    }
+                });
+            }
+            else
+            {
+                startActivityForResult(intent, 15);
+            }
 //            EnumSelectOnlineViewController* enumvc =[[UIStoryboard storyboardWithName:@"CommonEditor" bundle:nil] instantiateViewControllerWithIdentifier:@"EnumSelectOnlineViewController"];
 //            enumvc.delegate = self;
 //            enumvc.max_select = max_select;

+ 3 - 1
ApexDrivers/ratradefiling/src/main/res/layout/activity_change_password.xml

@@ -8,9 +8,10 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:id="@+id/container_root"
-    android:background="@color/light_gray"
+    android:background="@color/TFPrimary"
     >
     <LinearLayout
+
         android:id="@+id/login_status"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
@@ -43,6 +44,7 @@
     <!-- Login form -->
 
     <ScrollView
+        android:background="@color/light_gray"
         android:id="@+id/login_form"
         android:layout_width="match_parent"
         android:layout_height="match_parent" >

+ 5 - 5
ApexDrivers/ratradefiling/src/main/res/layout/activity_check_saved.xml

@@ -4,16 +4,16 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:background="@color/TFPrimary"
+    android:id="@+id/container_root"
+
     tools:context=".my.CheckSavedActivity">
 
     <FrameLayout
         android:id="@+id/container"
+        android:background="@color/light_gray"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent">
+        android:layout_height="match_parent">
 
     </FrameLayout>
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 1 - 1
ApexDrivers/ratradefiling/src/main/res/layout/activity_company_select.xml

@@ -5,7 +5,7 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:id="@+id/container_root"
-    android:background="@color/light_gray"
+    android:background="@color/TFPrimary"
     tools:context=".home.CompanySelectActivity">
 
     <fragment

+ 3 - 1
ApexDrivers/ratradefiling/src/main/res/layout/activity_customize_fields.xml

@@ -3,7 +3,7 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:id="@+id/container_root"
-    android:background="@color/light_gray"
+    android:background="@color/TFPrimary"
     tools:context=".fields.CustomizeFieldsActivity" >
 
     <com.usai.ratradefiling.fields.DragListView
@@ -11,6 +11,7 @@
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:layout_above="@+id/foot"
+        android:background="@color/light_gray"
         android:cacheColorHint="#00000000" />
 
     <LinearLayout
@@ -19,6 +20,7 @@
         android:layout_height="wrap_content"
         android:layout_alignParentBottom="true"
         android:layout_alignParentLeft="true"
+        android:background="@color/light_gray"
         android:orientation="horizontal" >
 
         <Button

+ 3 - 1
ApexDrivers/ratradefiling/src/main/res/layout/activity_function_panel_setting.xml

@@ -3,13 +3,14 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:id="@+id/container_root"
-    android:background="@color/light_gray"
+    android:background="@color/TFPrimary"
     tools:context=".home.FunctionPanelSettingActivity">
 
     <com.usai.ratradefiling.fields.DragListView
         android:id="@+id/drag_list"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
+        android:background="@color/light_gray"
         android:layout_above="@+id/foot"
         android:cacheColorHint="#00000000" />
 
@@ -19,6 +20,7 @@
         android:layout_height="wrap_content"
         android:layout_alignParentBottom="true"
         android:layout_alignParentLeft="true"
+        android:background="@color/light_gray"
         android:orientation="horizontal" >
 
         <Button

+ 13 - 8
ApexDrivers/ratradefiling/src/main/res/layout/activity_html.xml

@@ -4,26 +4,31 @@
     android:id="@+id/scrollView1"
     android:layout_width="fill_parent"
     android:layout_height="match_parent"
-    android:paddingBottom="@dimen/activity_vertical_margin"
-    android:paddingLeft="@dimen/activity_horizontal_margin"
-    android:paddingRight="@dimen/activity_horizontal_margin"
-    android:paddingTop="@dimen/activity_vertical_margin"
-    android:background="@color/light_gray"
+
+    android:background="@color/TFPrimary"
     tools:context="com.usai.ratradefiling.PrivacyActivity" >
 
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/linearLayout"
         android:layout_width="match_parent"
-        android:layout_height="match_parent">
+        android:layout_height="match_parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        android:background="@color/light_gray">
 
         <WebView
+
             android:id="@+id/webView1"
-            android:layout_width="0dp"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:background="@color/colorPrimary"
+            app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent" />
+            app:layout_constraintStart_toStartOf="parent"
+            />
     </androidx.constraintlayout.widget.ConstraintLayout>
 
 </ScrollView>

+ 7 - 6
ApexDrivers/ratradefiling/src/main/res/layout/activity_new_detail.xml

@@ -5,7 +5,7 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:id="@+id/container_root"
-    android:background="@color/light_gray"
+    android:background="@color/TFPrimary"
     tools:context=".detail.NewDetailActivity"
     android:orientation="vertical">
 
@@ -19,17 +19,18 @@
         app:layout_constraintBottom_toTopOf="@+id/viewpager"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent" />
-    <com.usai.ratradefiling.NoScrollViewPager
+    <androidx.viewpager2.widget.ViewPager2
         android:id="@+id/viewpager"
         android:layout_width="0dp"
         android:layout_height="0dp"
         app:layout_constraintBottom_toTopOf="@+id/view"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
+        android:background="@color/light_gray"
         app:layout_constraintTop_toTopOf="parent" />
 
-    <com.google.android.material.bottomnavigation.BottomNavigationView
-        android:id="@+id/bottom_navigation"
+    <com.google.android.material.tabs.TabLayout
+        android:id="@+id/tab"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
 
@@ -41,14 +42,14 @@
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent">
 
-    </com.google.android.material.bottomnavigation.BottomNavigationView>
+    </com.google.android.material.tabs.TabLayout>
 
     <View
         android:id="@+id/view"
         android:layout_width="match_parent"
         android:layout_height="1dp"
         android:background="@drawable/bottom_shadow"
-        app:layout_constraintBottom_toTopOf="@+id/bottom_navigation"
+        app:layout_constraintBottom_toTopOf="@+id/tab"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent" />
     <!--app:itemIconTint="@drawable/bottom_navigation_selector"-->

+ 20 - 7
ApexDrivers/ratradefiling/src/main/res/layout/activity_result.xml

@@ -6,9 +6,16 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:id="@+id/container_root"
-    android:background="@color/light_gray"
+    android:background="@color/TFPrimary"
     tools:context=".result.ResultActivity">
 
+    <androidx.constraintlayout.widget.ConstraintLayout
+            android:background="@color/light_gray"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            >
+
+
     <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
         android:id="@+id/result_refresh_layout"
         android:layout_width="match_parent"
@@ -25,11 +32,17 @@
 
     </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
 
-    <ProgressBar
-        android:id="@+id/result_progress_bar"
-        android:layout_width="100dp"
-        android:layout_height="100dp"
-        android:layout_centerInParent="true"
-        android:visibility="gone" />
+        <ProgressBar
+            android:id="@+id/result_progress_bar"
+            android:layout_width="100dp"
+            android:layout_height="100dp"
+            android:layout_centerInParent="true"
+            android:visibility="gone"
+            app:layout_constraintTop_toTopOf="@+id/result_refresh_layout"
+            app:layout_constraintBottom_toBottomOf="@+id/result_refresh_layout"
+            app:layout_constraintStart_toStartOf="@+id/result_refresh_layout"
+            app:layout_constraintEnd_toEndOf="@+id/result_refresh_layout" />
+
 
+    </androidx.constraintlayout.widget.ConstraintLayout>
 </RelativeLayout>

+ 6 - 1
ApexDrivers/ratradefiling/src/main/res/layout/activity_retrieve_password.xml

@@ -10,9 +10,13 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:id="@+id/container_root"
+        android:background="@color/TFPrimary"
+        >
+    <androidx.constraintlayout.widget.ConstraintLayout
         android:background="@color/light_gray"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
         >
-
     <!-- Login progress -->
 
         <LinearLayout
@@ -109,4 +113,5 @@
         </LinearLayout>
     </ScrollView>
     </androidx.constraintlayout.widget.ConstraintLayout>
+    </androidx.constraintlayout.widget.ConstraintLayout>
 </merge>

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

@@ -37,7 +37,7 @@
         app:layout_constraintBottom_toTopOf="@+id/viewpager"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent" />
-    <com.usai.ratradefiling.NoScrollViewPager
+    <androidx.viewpager2.widget.ViewPager2
         android:id="@+id/viewpager"
         android:layout_width="0dp"
         android:layout_height="0dp"
@@ -46,8 +46,8 @@
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/tool_bar" />
 
-    <com.google.android.material.bottomnavigation.BottomNavigationView
-        android:id="@+id/bottom_navigation"
+    <com.google.android.material.tabs.TabLayout
+        android:id="@+id/tab"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         app:labelVisibilityMode="labeled"
@@ -59,14 +59,14 @@
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent">
 
-    </com.google.android.material.bottomnavigation.BottomNavigationView>
+    </com.google.android.material.tabs.TabLayout>
 
     <View
         android:id="@+id/view"
         android:layout_width="match_parent"
         android:layout_height="1dp"
         android:background="@drawable/bottom_shadow"
-        app:layout_constraintBottom_toTopOf="@+id/bottom_navigation"
+        app:layout_constraintBottom_toTopOf="@+id/tab"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent" />
     <!--app:itemIconTint="@drawable/bottom_navigation_selector"-->

+ 4 - 1
ApexDrivers/ratradefiling/src/main/res/layout/activity_search_list.xml

@@ -4,7 +4,7 @@
                 android:layout_height="match_parent"
                 xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/container_root"
-    android:background="@color/light_gray"
+    android:background="@color/TFPrimary"
                 tools:context=".search.SearchActivity">
 
     <LinearLayout
@@ -12,6 +12,7 @@
         android:layout_width="match_parent"
         android:layout_height="56dp"
         android:orientation="horizontal"
+        android:background="@color/light_gray"
         >
 
         <EditText
@@ -39,6 +40,7 @@
 
     <ScrollView
         android:id="@+id/scrollView1"
+        android:background="@color/light_gray"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_below="@id/search_tool_bar"
@@ -59,6 +61,7 @@
         android:layout_height="wrap_content"
         android:layout_alignParentBottom="true"
         android:layout_alignParentLeft="true"
+        android:background="@color/light_gray"
         android:orientation="horizontal">
 
         <Button

+ 8 - 2
ApexDrivers/ratradefiling/src/main/res/layout/activity_signup.xml

@@ -6,11 +6,17 @@
     android:layout_height="match_parent"
     android:scrollbars="vertical"
     android:id="@+id/container_root"
-    android:background="@color/light_gray"
+    android:background="@color/TFPrimary"
     tools:context=".EmptyActivity">
 
 
 
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:background="@color/light_gray"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        >
+
 
 
     <TextView
@@ -119,6 +125,6 @@
         app:layout_constraintBottom_toTopOf="@+id/cb_agree"
         app:layout_constraintEnd_toEndOf="@+id/edit_email"
         app:layout_constraintStart_toStartOf="@+id/edit_email" />
-
+    </androidx.constraintlayout.widget.ConstraintLayout>
 
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 1 - 0
ApexDrivers/ratradefiling/src/main/res/layout/fragment_about.xml

@@ -4,6 +4,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:background="@color/light_gray"
     tools:context=".about.AboutFragment">
 
     <androidx.constraintlayout.widget.ConstraintLayout

+ 1 - 0
ApexDrivers/ratradefiling/src/main/res/layout/fragment_company_select.xml

@@ -3,6 +3,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:background="@color/light_gray"
     tools:context=".home.CompanySelectFragment">
 
     <!-- TODO: Update blank fragment layout -->

+ 5 - 1
ApexDrivers/ratradefiling/src/main/res/layout/fragment_login1.xml

@@ -3,7 +3,11 @@
     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:layout_height="match_parent"
+
+    android:background="@color/light_gray"
+    tools:context=".login.LoginFragment"
+    >
 
     <ImageView
         android:id="@+id/imageView"

+ 1 - 1
ApexDrivers/ratradefiling/src/main/res/layout/home_header_view1.xml

@@ -15,7 +15,7 @@
             android:id="@+id/bg1"
             android:layout_width="0dp"
             android:layout_height="0dp"
-            android:background="@drawable/gradient_color"
+            android:background="@color/TFPrimary"
             app:layout_constraintBottom_toTopOf="@id/center_line"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toStartOf="parent"

+ 28 - 0
ApexDrivers/ratradefiling/src/main/res/values/arrays.xml

@@ -7,4 +7,32 @@
         <item>@string/str_false</item>
         
     </string-array>
+
+
+
+    <string-array name="login_title">
+        <item>Home</item>
+
+        <item>My</item>
+        <item>About</item>
+    </string-array>
+
+
+    <integer-array name="login_icon">
+        <item>@drawable/tab_home</item>
+        <item>@drawable/tab_my</item>
+        <item>@drawable/tab_about</item>
+    </integer-array>
+
+
+    <string-array name="logout_title">
+        <item>Login</item>
+        <item>About</item>
+
+    </string-array>
+
+    <integer-array name="logout_icon">
+    <item>@drawable/tab_login</item>
+    <item>@drawable/tab_about</item>
+    </integer-array>
 </resources>

+ 8 - 42
ApexDrivers/ratradefiling/src/main/res/values/styles.xml

@@ -1,13 +1,5 @@
 <resources>
-    <!-- Base application theme. -->
-<!--    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">-->
-<!--        &lt;!&ndash; Customize your theme here. &ndash;&gt;-->
-<!--        <item name="colorPrimary">@color/colorPrimary</item>-->
-<!--        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>-->
-<!--        <item name="colorAccent">@color/colorAccent</item>-->
-<!--    </style>-->
 
-    <!--Dialog 样式-->
 
     <style name="RedAntDialog" parent="@android:style/Theme.Dialog">
 
@@ -32,6 +24,10 @@
     <style name="TradeFilingTheme" parent="Theme.AppCompat.Light.DarkActionBar">
 
         <!--<item name="android:windowBackground">@color/ApexDriverWhite</item>-->
+
+<!--        <item name="windowActionBar">false</item>-->
+<!--        <item name="windowNoTitle">true</item>-->
+
         <item name="colorPrimary">@color/TFPrimary0</item> <!--Action Bar-->
 
         <item name="colorPrimaryDark">@color/TFPrimary</item> <!--Status Bar-->
@@ -58,12 +54,12 @@
         <item name="android:textColor">@color/white</item>
     </style>
     <style name="MyActionBar" parent="@style/Widget.AppCompat.ActionBar">
-        <item name="android:background">@drawable/gradient_color</item>
+        <item name="android:background">@color/TFPrimary</item>
         <item name="android:titleTextStyle">@style/MyActionBarTitleText</item>
         <item name="android:backgroundStacked">@color/TFPrimary</item>
 
         <!-- Support library compatibility -->
-        <item name="background">@drawable/gradient_color</item>
+        <item name="background">@color/TFPrimary</item>
         <item name="titleTextStyle">@style/MyActionBarTitleText</item>
         <item name="backgroundStacked">@color/TFPrimary</item>
     </style>
@@ -83,36 +79,6 @@
         <!--<item name="android:textColor">@color/message_text</item>-->
     </style>
 
-    <style name="FixedActionbarTheme" parent="Theme.AppCompat.Light">
-        <item name="android:screenOrientation">portrait</item>
-        <item name="actionBarSize">39dp</item>
-        <item name="colorPrimary">@color/colorPrimary</item>
-        <!--<item name="windowBackground">@color/white</item>-->
-        <item name="colorAccent">@color/icon_red</item>
-        <item name="actionOverflowMenuStyle">@style/OverflowMenuStyle</item>
-        <!--<item name="windowActionBar">false</item>-->
-        <!--<item name="toolbarStyle">@style/ToolBarMenu</item>>-->
-        <!--<item name="colorPrimaryDark">@color/colorPrimaryDark</item>-->
-        <!--<item name="statusBarColor">@color/icon_red</item>-->
-        <!--<item name="android:windowLightStatusBar">true</item>-->
-    </style>
-    <style name="toolbar_nav_button" parent="Widget.AppCompat.Toolbar.Button.Navigation">
-        <item name="android:minWidth">0dp</item>
-        <item name="android:paddingLeft">16dp</item>
-        <item name="android:paddingRight">16dp</item>
-    </style>
-    <style name="ToolbarTheme" parent="FixedActionbarTheme">
-
-        <item name="windowActionBar">false</item>
-        <item name="windowNoTitle">true</item>
-        <item name="toolbarNavigationButtonStyle">@style/toolbar_nav_button</item>
-        <!--<item name="actionBarSize">39dp</item>-->
-        <!--<item name="colorPrimary">@color/colorPrimary</item>-->
-        <!--&lt;!&ndash;<item name="windowBackground">@color/white</item>&ndash;&gt;-->
-        <!--<item name="colorAccent">@color/icon_red</item>-->
-        <!--&lt;!&ndash;<item name="colorPrimaryDark">@color/colorPrimaryDark</item>&ndash;&gt;-->
-        <!--&lt;!&ndash;<item name="statusBarColor">@color/icon_red</item>&ndash;&gt;-->
-        <!--&lt;!&ndash;<item name="android:windowLightStatusBar">true</item>&ndash;&gt;-->
-        <!--<item name="actionOverflowButtonStyle">@style/OverflowButtonStyleSetting</item>-->
-    </style>
+
+
 </resources>

+ 2 - 2
ApexDrivers/settings.gradle

@@ -10,7 +10,7 @@ dependencyResolutionManagement {
     repositories {
         google()
         mavenCentral()
-        jcenter()
+//        jcenter()
     }
 }
 
@@ -18,7 +18,7 @@ dependencyResolutionManagement {
 
 include ':CommonEditorLib'
 include ':ratradefiling'
-include ':rapdflib'
+//include ':rapdflib'
 include ':RALocationLib'
 include ':FunctionTest'
 include ':RAUtilsLibrary'

Some files were not shown because too many files changed in this diff