leon преди 1 година
родител
ревизия
8b1573ed77

+ 1 - 1
android/app/build.gradle

@@ -144,7 +144,7 @@ aaptOptions.useNewCruncher = false
         applicationId app_id
         minSdkVersion rootProject.ext.minSdkVersion
         targetSdkVersion rootProject.ext.targetSdkVersion
-        versionCode 24
+        versionCode 28
         versionName "1.0.0"
         buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
 //        manifestPlaceholders = [

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
android/app/src/main/assets/index.android.bundle


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
android/app/src/main/assets/index.android.map


+ 36 - 57
android/app/src/main/java/com/hola/MainActivity.java

@@ -15,7 +15,10 @@ import android.media.AudioFormat;
 import android.media.AudioManager;
 import android.media.AudioRecord;
 import android.media.AudioTrack;
+import android.media.MediaMetadataRetriever;
+import android.media.MediaPlayer;
 import android.media.MediaRecorder;
+import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
@@ -85,75 +88,51 @@ public class MainActivity extends ReactActivity {
     super.onCreate(null);
     checkNotification(getIntent());
 //    demo2();
-    demo();
+//      try {
+//          demo();
+//      } catch (IOException e) {
+//          throw new RuntimeException(e);
+//      }
 //    getLastKnownLocation();
 //    String action = getIntent().getAction();
 //    System.out.println("notification receive action action:"+action);
   }
 
 
-  private void demo() {
+  private void demo() throws IOException {
+    Uri audioUri1 = Uri.parse(Uri.parse("android.resource://")+getPackageName()+"/"+R.raw.sound1);
+    Uri audioUri2 = Uri.parse(Uri.parse("android.resource://")+getPackageName()+"/"+R.raw.sound2);
 
-  }
+    // 创建MediaPlayer对象来读取音频文件
+    MediaPlayer mediaPlayer1 = new MediaPlayer();
+    mediaPlayer1.setDataSource(getApplicationContext(), audioUri1);
+    mediaPlayer1.prepare();
 
-  public void mixAudio(File inputFile1, File inputFile2, File outputFile) throws IOException {
-    int SAMPLE_RATE = 44100;
-    int BUFFER_SIZE = 1024;
-
-    int bufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE,
-            AudioFormat.CHANNEL_IN_STEREO,
-            AudioFormat.ENCODING_PCM_16BIT);
-    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.RECORD_AUDIO) != 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;
-    }
-    AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
-            SAMPLE_RATE,
-            AudioFormat.CHANNEL_IN_STEREO,
-            AudioFormat.ENCODING_PCM_16BIT,
-            bufferSize);
-
-    AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
-            SAMPLE_RATE,
-            AudioFormat.CHANNEL_OUT_STEREO,
-            AudioFormat.ENCODING_PCM_16BIT,
-            bufferSize,
-            AudioTrack.MODE_STREAM);
-
-    short[] buffer = new short[bufferSize];
-    FileOutputStream fos = new FileOutputStream(outputFile);
-
-    audioRecord.startRecording();
-    audioTrack.play();
-
-    while (/* condition to keep mixing */) {
-      // Read audio from microphone
-      int bufferReadResult = audioRecord.read(buffer, 0, bufferSize);
-      // Process audio (if needed)
-      // ...
-
-      // Write to output file
-      fos.write(buffer, 0, bufferReadResult);
-
-      // Optionally, read from another AudioRecord or file and mix with buffer
-      // ...
-
-      // Pass to AudioTrack
-      audioTrack.write(buffer, 0, bufferReadResult);
-    }
+    MediaPlayer mediaPlayer2 = new MediaPlayer();
+    mediaPlayer2.setDataSource(getApplicationContext(), audioUri2);
+    mediaPlayer2.prepare();
+
+    MediaMetadataRetriever retriever1 = new MediaMetadataRetriever();
+    retriever1.setDataSource(getApplicationContext(), audioUri1);
+    long duration1 = Long.parseLong(retriever1.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION));
 
-    audioRecord.stop();
-    audioTrack.stop();
-    fos.close();
+    MediaMetadataRetriever retriever2 = new MediaMetadataRetriever();
+    retriever2.setDataSource(getApplicationContext(), audioUri2);
+    long duration2 = Long.parseLong(retriever2.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION));
+
+    // 创建MediaPlayer对象来合成音频
+    MediaPlayer compositeMediaPlayer = new MediaPlayer();
+    compositeMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
+
+//    // 创建 MediaComposition 对象
+//    MediaComposition composition = new MediaComposition();
+//
+//// 创建音频轨道
+//    MediaCompositionTrack audioTrack = composition.addAudioTrack();
   }
 
 
+
   public static void deleteIfExists(String filePath) {
     File file = new File(filePath);
 

BIN
android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.png


BIN
android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.png


BIN
android/app/src/main/res/raw/sound1.m4a


BIN
android/app/src/main/res/raw/sound2.m4a


+ 1 - 1
android/build.gradle

@@ -3,7 +3,7 @@
 buildscript {
     ext {
         buildToolsVersion = "31.0.0"
-        minSdkVersion = 21
+        minSdkVersion = 24
         compileSdkVersion = 33
         targetSdkVersion = 35
 //        compileSdkVersion = 33

+ 1 - 1
config/env.ts

@@ -1,3 +1,3 @@
 
 export const APP_VERSION = '1.0.2'
-export const WX_VERSION = '1.4.6'
+export const WX_VERSION = '1.4.7'

+ 1 - 1
ios/AppDelegate.mm

@@ -97,7 +97,7 @@ static NSString *const kRNConcurrentRoot = @"concurrentRoot";
   
   [self clearAllDeliveredNotifications];
   
-  [self mixAudio];
+//  [self mixAudio];
   return YES;
 }
 

+ 2 - 2
ios/hola.xcodeproj/project.pbxproj

@@ -580,7 +580,7 @@
 				CODE_SIGN_ENTITLEMENTS = hola/hola.entitlements;
 				CODE_SIGN_IDENTITY = "Apple Development";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 114;
+				CURRENT_PROJECT_VERSION = 118;
 				DEVELOPMENT_TEAM = GPMXAZ9G5N;
 				ENABLE_BITCODE = NO;
 				INFOPLIST_FILE = hola/Info.plist;
@@ -613,7 +613,7 @@
 				CODE_SIGN_ENTITLEMENTS = hola/hola.entitlements;
 				CODE_SIGN_IDENTITY = "Apple Development";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 114;
+				CURRENT_PROJECT_VERSION = 118;
 				DEVELOPMENT_TEAM = GPMXAZ9G5N;
 				INFOPLIST_FILE = hola/Info.plist;
 				LD_RUNPATH_SEARCH_PATHS = (

+ 1 - 1
ios/hola/Info.plist

@@ -32,7 +32,7 @@
 		</dict>
 	</array>
 	<key>CFBundleVersion</key>
-	<string>114</string>
+	<string>118</string>
 	<key>ITSAppUsesNonExemptEncryption</key>
 	<false/>
 	<key>LSApplicationCategoryType</key>

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
ios/main.jsbundle


+ 8 - 8
src/components/input/SlidngScale.tsx

@@ -57,7 +57,6 @@ export default function Component(props: {
     }, [props.unit, props.default_value, props.special])
 
 
-
     if (isFT_IN) {
         for (var i: number = minNum; i <= maxNum * 1.2; i += props.step) {
             i = parseFloat(i.toFixed(props.scale == 0 ? 1 : props.scale));
@@ -72,7 +71,6 @@ export default function Component(props: {
         }
     }
     else {
-
         for (var i: number = minNum; i <= maxNum; i += props.step) {
             i = parseFloat(i.toFixed(props.scale == 0 ? 1 : props.scale))
             var value: number = parseFloat(i.toFixed(props.scale == 0 ? 1 : props.scale));
@@ -225,7 +223,8 @@ export default function Component(props: {
     else {
         for (var i = 0; i < 10; i++) {
             var obj = list[i];
-            svgLine += `<line x1="${i * 10 + 1}" y1="0" x2="${i * 10 + 1}" y2="${obj.showBig ? rpxToPx(28) : obj.showMiddle ? rpxToPx(24) : rpxToPx(16)}" stroke="${props.themeColor}"  stroke-width="2"/>`
+            if (obj)
+                svgLine += `<line x1="${i * 10 + 1}" y1="0" x2="${i * 10 + 1}" y2="${obj.showBig ? rpxToPx(28) : obj.showMiddle ? rpxToPx(24) : rpxToPx(16)}" stroke="${props.themeColor}"  stroke-width="2"/>`
 
         }
     }
@@ -257,7 +256,8 @@ export default function Component(props: {
     else {
         for (var i = 0; i < 10; i++) {
             var obj = list[i];
-            svgLine2 += `<line x1="${i * 10 + 1}" y1="0" x2="${i * 10 + 1}" y2="${obj.showBig ? rpxToPx(28) : obj.showMiddle ? rpxToPx(24) : rpxToPx(16)}" stroke="${props.themeColor}"  stroke-width="2"/>`
+            if (obj)
+                svgLine2 += `<line x1="${i * 10 + 1}" y1="0" x2="${i * 10 + 1}" y2="${obj.showBig ? rpxToPx(28) : obj.showMiddle ? rpxToPx(24) : rpxToPx(16)}" stroke="${props.themeColor}"  stroke-width="2"/>`
         }
     }
 
@@ -304,7 +304,7 @@ export default function Component(props: {
                     position: 'absolute',
                     left: 0,
                     top: 0,
-                    height: parseInt(rpxToPx(70) + ''),
+                    height: parseInt(rpxToPx(80) + ''),
                     width: parseInt(rpxToPx(375) + ''),
                     zIndex: 100,
                     pointerEvents: 'none'
@@ -318,7 +318,7 @@ export default function Component(props: {
                     position: 'absolute',
                     right: 0,
                     top: 0,
-                    height: parseInt(rpxToPx(70) + ''),
+                    height: parseInt(rpxToPx(80) + ''),
                     width: parseInt(rpxToPx(375) + ''),
                     zIndex: 100,
                     pointerEvents: 'none'
@@ -329,7 +329,7 @@ export default function Component(props: {
             }
             <View className="top_line" style={{ backgroundColor: props.themeColor }} />
             <ScrollView
-                style={{ zIndex: 0, position: 'relative', marginTop: -40 }} ref={scrollViewRef}
+                style={{ zIndex: 0, position: 'relative', marginTop: -60 }} ref={scrollViewRef}
                 showsHorizontalScrollIndicator={false}
                 scrollX scrollLeft={left} className="scroll"
                 enablePassive={true}
@@ -342,7 +342,7 @@ export default function Component(props: {
                 onScroll={scrollContent}
                 enhanced
             >
-                <View className="scrollContent" style={{ paddingTop: 40 }}>
+                <View className="scrollContent" style={{ paddingTop: 60 }}>
                     <View className="scrollPadding" style={{ width: rpxToPx(372) }} />
                     <View className="content">
                         <View>

+ 2 - 1
src/context/locales/en.js

@@ -813,7 +813,8 @@ export default {
                 choose_metric: 'Choose metric',
                 choose_metric_desc: 'Select metrics based on your needs.',
                 order: 'Adjust order',
-                composite: 'Comp'
+                combo: 'Combo',
+                derived:'Derived'
 
             },
             werun_auth: {

+ 2 - 1
src/context/locales/zh.js

@@ -810,7 +810,8 @@ export default {
                 choose_metric: '选择指标项',
                 choose_metric_desc: '按需选择自己常用的指标',
                 order: '调整排序',
-                composite: '复合'
+                combo: '组合',
+                derived:'计算'
             },
             werun_auth: {
                 modal_open_setting_title: '提示',

+ 2 - 2
src/features/trackSomething/components/Metric.tsx

@@ -280,8 +280,8 @@ export default function Component(props: any) {
                             themeColor={item.theme_color}
                             onClickDetail={() => { goDetail(item) }}
                             onClick={() => { record(item) }}
-                            showTag={item.classification == 'derived'}
-                            tagName={t('feature.track_something.metric.composite')}
+                            showTag={item.classification != 'single'}
+                            tagName={item.classification == 'combo'?t('feature.track_something.metric.combo'):t('feature.track_something.metric.derived')}
                         />
                     })
                 }

+ 3 - 3
src/features/trackSomething/components/MetricModalChoose.tsx

@@ -161,10 +161,10 @@ export default function Component(props: {
                                             obj.is_following ? <IconRadioCheck width={16} color='#fff' /> : <IconRadio width={16} color='#fff' />
                                         }
 
-                                        <Text className='modal_item_text' style={{ color: color, marginLeft: 10,marginRight:10 }}>{obj.name}</Text>
+                                        <Text className='modal_item_text' style={{ color: color, marginLeft: 10, marginRight: 10 }}>{obj.name}</Text>
                                         {
-                                            obj.type=='composite' && <View className="metric_tag_bg" style={{position:'relative'}}>
-                                                <Text className="metric_tag_text" style={{ color: color }}>{t('feature.track_something.metric.composite')}</Text>
+                                            obj.classification != 'single' && <View className="metric_tag_bg" style={{ position: 'relative' }}>
+                                                <Text className="metric_tag_text" style={{ color: color }}>{obj.classification == 'combo' ? t('feature.track_something.metric.combo') : t('feature.track_something.metric.derived')}</Text>
                                             </View>
                                         }
                                         <View style={{ flex: 1 }} />

+ 4 - 4
src/pages/clock/ClockMain.tsx

@@ -849,7 +849,7 @@ export default function Page() {
     function demo(){
         Taro.addPhoneCalendar({
             title:'单次日历标题',
-            startTime:(new Date().getTime()+60*1000),
+            startTime:(new Date().getTime()/1000+60),
             success:(res)=>{
                 console.log('success')
             },
@@ -866,7 +866,7 @@ export default function Page() {
         Taro.addPhoneRepeatCalendar({
             title:'重复日历标题',
             repeatInterval:'day',
-            startTime:(new Date().getTime()+60*1000),
+            startTime:(new Date().getTime()/1000+60),
             success:(res)=>{
                 console.log('success')
             },
@@ -931,8 +931,8 @@ export default function Page() {
                         }
                     </View>
                 }
-                <Text style={{color:'#fff',fontSize:30}} onClick={demo}>单次日历提醒</Text>
-                <Text style={{color:'#fff',fontSize:30}} onClick={demo2}>重复日历提醒</Text>
+                {/* <Text style={{color:'#fff',fontSize:30}} onClick={demo}>单次日历提醒</Text>
+                <Text style={{color:'#fff',fontSize:30}} onClick={demo2}>重复日历提醒</Text> */}
                 {
                     user.isLogin && records && records.length == 0 && <View style={{ marginTop: -rpxToPx(25) }} />
                 }

+ 1 - 1
src/services/http/api.js

@@ -1,4 +1,4 @@
-const online = process.env.TARO_ENV == 'weapp' ? false : false;
+const online = process.env.TARO_ENV == 'weapp' ? true : true;
 
 import { WX_VERSION as _WX_VERSION, APP_VERSION as _APP_VERSION } from "../../../config/env";
 

Някои файлове не бяха показани, защото твърде много файлове са промени