From 25c70d79d18056cc5517584c6ba543a9913ca631 Mon Sep 17 00:00:00 2001 From: brianxcli Date: Fri, 13 Dec 2019 17:25:17 +0800 Subject: [PATCH 01/15] proj init --- Advanced-Audio-Android/.gitignore | 14 + .../.idea/codeStyles/Project.xml | 116 ++++++++ Advanced-Audio-Android/.idea/gradle.xml | 16 + Advanced-Audio-Android/.idea/misc.xml | 10 + .../.idea/runConfigurations.xml | 12 + Advanced-Audio-Android/.idea/vcs.xml | 6 + Advanced-Audio-Android/app/.gitignore | 1 + Advanced-Audio-Android/app/build.gradle | 29 ++ Advanced-Audio-Android/app/proguard-rules.pro | 21 ++ .../ExampleInstrumentedTest.java | 27 ++ .../app/src/main/AndroidManifest.xml | 11 + .../agora/advancedaudio/AgoraApplication.java | 37 +++ .../activities/BaseActivity.java | 122 ++++++++ .../activities/MainActivity.java | 280 ++++++++++++++++++ .../advancedaudio/rtc/AgoraEventHandler.java | 80 +++++ .../agora/advancedaudio/rtc/EventHandler.java | 23 ++ .../agora/advancedaudio/utils/FileUtil.java | 34 +++ .../agora/advancedaudio/utils/WindowUtil.java | 28 ++ .../res/color/start_broadcast_text_color.xml | 5 + .../res/drawable-xxhdpi/live_room_bg_logo.png | Bin 0 -> 65246 bytes .../main/res/drawable-xxhdpi/main_logo.png | Bin 0 -> 70289 bytes .../res/drawable/ic_launcher_background.xml | 170 +++++++++++ .../src/main/res/drawable/main_background.xml | 7 + .../main/res/drawable/start_broadcast_bg.xml | 5 + .../drawable/start_broadcast_bg_clicked.xml | 5 + .../drawable/start_broadcast_bg_normal.xml | 6 + .../app/src/main/res/layout/activity_main.xml | 72 +++++ .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6387 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10413 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9128 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15132 bytes .../app/src/main/res/values/colors.xml | 21 ++ .../app/src/main/res/values/dimens.xml | 27 ++ .../app/src/main/res/values/strings.xml | 12 + .../src/main/res/values/strings_config.xml | 11 + .../app/src/main/res/values/styles.xml | 11 + .../agora/advancedaudio/ExampleUnitTest.java | 17 ++ Advanced-Audio-Android/build.gradle | 27 ++ Advanced-Audio-Android/gradle.properties | 20 ++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54329 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + Advanced-Audio-Android/gradlew | 172 +++++++++++ Advanced-Audio-Android/gradlew.bat | 84 ++++++ Advanced-Audio-Android/settings.gradle | 2 + 44 files changed, 1547 insertions(+) create mode 100644 Advanced-Audio-Android/.gitignore create mode 100644 Advanced-Audio-Android/.idea/codeStyles/Project.xml create mode 100644 Advanced-Audio-Android/.idea/gradle.xml create mode 100644 Advanced-Audio-Android/.idea/misc.xml create mode 100644 Advanced-Audio-Android/.idea/runConfigurations.xml create mode 100644 Advanced-Audio-Android/.idea/vcs.xml create mode 100644 Advanced-Audio-Android/app/.gitignore create mode 100644 Advanced-Audio-Android/app/build.gradle create mode 100644 Advanced-Audio-Android/app/proguard-rules.pro create mode 100644 Advanced-Audio-Android/app/src/androidTest/java/io/agora/advancedaudio/ExampleInstrumentedTest.java create mode 100644 Advanced-Audio-Android/app/src/main/AndroidManifest.xml create mode 100644 Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/AgoraApplication.java create mode 100644 Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/activities/BaseActivity.java create mode 100644 Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/activities/MainActivity.java create mode 100644 Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/rtc/AgoraEventHandler.java create mode 100644 Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/rtc/EventHandler.java create mode 100644 Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/utils/FileUtil.java create mode 100644 Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/utils/WindowUtil.java create mode 100644 Advanced-Audio-Android/app/src/main/res/color/start_broadcast_text_color.xml create mode 100644 Advanced-Audio-Android/app/src/main/res/drawable-xxhdpi/live_room_bg_logo.png create mode 100644 Advanced-Audio-Android/app/src/main/res/drawable-xxhdpi/main_logo.png create mode 100644 Advanced-Audio-Android/app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 Advanced-Audio-Android/app/src/main/res/drawable/main_background.xml create mode 100644 Advanced-Audio-Android/app/src/main/res/drawable/start_broadcast_bg.xml create mode 100644 Advanced-Audio-Android/app/src/main/res/drawable/start_broadcast_bg_clicked.xml create mode 100644 Advanced-Audio-Android/app/src/main/res/drawable/start_broadcast_bg_normal.xml create mode 100644 Advanced-Audio-Android/app/src/main/res/layout/activity_main.xml create mode 100644 Advanced-Audio-Android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 Advanced-Audio-Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 Advanced-Audio-Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 Advanced-Audio-Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 Advanced-Audio-Android/app/src/main/res/values/colors.xml create mode 100644 Advanced-Audio-Android/app/src/main/res/values/dimens.xml create mode 100644 Advanced-Audio-Android/app/src/main/res/values/strings.xml create mode 100644 Advanced-Audio-Android/app/src/main/res/values/strings_config.xml create mode 100644 Advanced-Audio-Android/app/src/main/res/values/styles.xml create mode 100644 Advanced-Audio-Android/app/src/test/java/io/agora/advancedaudio/ExampleUnitTest.java create mode 100644 Advanced-Audio-Android/build.gradle create mode 100644 Advanced-Audio-Android/gradle.properties create mode 100644 Advanced-Audio-Android/gradle/wrapper/gradle-wrapper.jar create mode 100644 Advanced-Audio-Android/gradle/wrapper/gradle-wrapper.properties create mode 100644 Advanced-Audio-Android/gradlew create mode 100644 Advanced-Audio-Android/gradlew.bat create mode 100644 Advanced-Audio-Android/settings.gradle diff --git a/Advanced-Audio-Android/.gitignore b/Advanced-Audio-Android/.gitignore new file mode 100644 index 0000000..603b140 --- /dev/null +++ b/Advanced-Audio-Android/.gitignore @@ -0,0 +1,14 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx diff --git a/Advanced-Audio-Android/.idea/codeStyles/Project.xml b/Advanced-Audio-Android/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..681f41a --- /dev/null +++ b/Advanced-Audio-Android/.idea/codeStyles/Project.xml @@ -0,0 +1,116 @@ + + + + + + + +
+ + + + xmlns:android + + ^$ + + + +
+
+ + + + xmlns:.* + + ^$ + + + BY_NAME + +
+
+ + + + .*:id + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:name + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + name + + ^$ + + + +
+
+ + + + style + + ^$ + + + +
+
+ + + + .* + + ^$ + + + BY_NAME + +
+
+ + + + .* + + http://schemas.android.com/apk/res/android + + + ANDROID_ATTRIBUTE_ORDER + +
+
+ + + + .* + + .* + + + BY_NAME + +
+
+
+
+
+
\ No newline at end of file diff --git a/Advanced-Audio-Android/.idea/gradle.xml b/Advanced-Audio-Android/.idea/gradle.xml new file mode 100644 index 0000000..d291b3d --- /dev/null +++ b/Advanced-Audio-Android/.idea/gradle.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/Advanced-Audio-Android/.idea/misc.xml b/Advanced-Audio-Android/.idea/misc.xml new file mode 100644 index 0000000..be0cc41 --- /dev/null +++ b/Advanced-Audio-Android/.idea/misc.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/Advanced-Audio-Android/.idea/runConfigurations.xml b/Advanced-Audio-Android/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/Advanced-Audio-Android/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/Advanced-Audio-Android/.idea/vcs.xml b/Advanced-Audio-Android/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/Advanced-Audio-Android/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Advanced-Audio-Android/app/.gitignore b/Advanced-Audio-Android/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/Advanced-Audio-Android/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/Advanced-Audio-Android/app/build.gradle b/Advanced-Audio-Android/app/build.gradle new file mode 100644 index 0000000..b6a95fa --- /dev/null +++ b/Advanced-Audio-Android/app/build.gradle @@ -0,0 +1,29 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 29 + buildToolsVersion "29.0.2" + defaultConfig { + applicationId "io.agora.advancedaudio" + minSdkVersion 16 + targetSdkVersion 29 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'androidx.appcompat:appcompat:1.1.0' + api 'io.agora.rtc:voice-sdk:2.9.2' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'androidx.test.ext:junit:1.1.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' +} diff --git a/Advanced-Audio-Android/app/proguard-rules.pro b/Advanced-Audio-Android/app/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/Advanced-Audio-Android/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# 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 *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/Advanced-Audio-Android/app/src/androidTest/java/io/agora/advancedaudio/ExampleInstrumentedTest.java b/Advanced-Audio-Android/app/src/androidTest/java/io/agora/advancedaudio/ExampleInstrumentedTest.java new file mode 100644 index 0000000..04022a4 --- /dev/null +++ b/Advanced-Audio-Android/app/src/androidTest/java/io/agora/advancedaudio/ExampleInstrumentedTest.java @@ -0,0 +1,27 @@ +package io.agora.advancedaudio; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + + assertEquals("io.agora.advancedaudio", appContext.getPackageName()); + } +} diff --git a/Advanced-Audio-Android/app/src/main/AndroidManifest.xml b/Advanced-Audio-Android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..5beffb3 --- /dev/null +++ b/Advanced-Audio-Android/app/src/main/AndroidManifest.xml @@ -0,0 +1,11 @@ + + + + diff --git a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/AgoraApplication.java b/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/AgoraApplication.java new file mode 100644 index 0000000..d3f9785 --- /dev/null +++ b/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/AgoraApplication.java @@ -0,0 +1,37 @@ +package io.agora.advancedaudio; + +import android.app.Application; + +import io.agora.advancedaudio.rtc.AgoraEventHandler; +import io.agora.advancedaudio.rtc.EventHandler; +import io.agora.advancedaudio.utils.FileUtil; +import io.agora.rtc.RtcEngine; + +public class AgoraApplication extends Application { + private RtcEngine mRtcEngine; + private AgoraEventHandler mHandler = new AgoraEventHandler(); + + @Override + public void onCreate() { + super.onCreate(); + try { + mRtcEngine = RtcEngine.create(getApplicationContext(), getString(R.string.private_app_id), mHandler); + mRtcEngine.setChannelProfile(io.agora.rtc.Constants.CHANNEL_PROFILE_LIVE_BROADCASTING); + mRtcEngine.setLogFile(FileUtil.initializeLogFile(this)); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public RtcEngine rtcEngine() { return mRtcEngine; } + + public void registerEventHandler(EventHandler handler) { mHandler.addHandler(handler); } + + public void removeEventHandler(EventHandler handler) { mHandler.removeHandler(handler); } + + @Override + public void onTerminate() { + super.onTerminate(); + RtcEngine.destroy(); + } +} diff --git a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/activities/BaseActivity.java b/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/activities/BaseActivity.java new file mode 100644 index 0000000..03a2ad7 --- /dev/null +++ b/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/activities/BaseActivity.java @@ -0,0 +1,122 @@ +package io.agora.advancedaudio.activities; + +import android.os.Bundle; +import android.util.DisplayMetrics; +import android.view.View; +import android.view.ViewTreeObserver; +import android.view.Window; + +import androidx.appcompat.app.AppCompatActivity; + +import io.agora.advancedaudio.AgoraApplication; +import io.agora.advancedaudio.rtc.EventHandler; +import io.agora.advancedaudio.utils.WindowUtil; +import io.agora.rtc.IRtcEngineEventHandler; +import io.agora.rtc.RtcEngine; + +public abstract class BaseActivity extends AppCompatActivity implements EventHandler { + protected DisplayMetrics mDisplayMetrics = new DisplayMetrics(); + protected int mStatusBarHeight; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + WindowUtil.hideWindowStatusBar(getWindow()); + setGlobalLayoutListener(); + getDisplayMetrics(); + initStatusBarHeight(); + } + + private void setGlobalLayoutListener() { + final View layout = findViewById(Window.ID_ANDROID_CONTENT); + ViewTreeObserver observer = layout.getViewTreeObserver(); + observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + layout.getViewTreeObserver().removeOnGlobalLayoutListener(this); + onGlobalLayoutCompleted(); + } + }); + } + + /** + * Give a chance to obtain view layout attributes when the + * content view layout process is completed. + * Some layout attributes will be available here but not + * in onCreate(), like measured width/height. + * This callback will be called ONLY ONCE before the whole + * window content is ready to be displayed for first time. + */ + protected void onGlobalLayoutCompleted() { + + } + + private void getDisplayMetrics() { + getWindowManager().getDefaultDisplay().getMetrics(mDisplayMetrics); + } + + private void initStatusBarHeight() { + mStatusBarHeight = WindowUtil.getSystemStatusBarHeight(this); + } + + protected AgoraApplication application() { + return (AgoraApplication) getApplication(); + } + + protected RtcEngine rtcEngine() { + return application().rtcEngine(); + } + + protected void registerRtcEventHandler(EventHandler handler) { + application().registerEventHandler(handler); + } + + protected void removeRtcEventHandler(EventHandler handler) { + application().removeEventHandler(handler); + } + + @Override + public void onLeaveChannel(IRtcEngineEventHandler.RtcStats stats) { + + } + + @Override + public void onJoinChannelSuccess(String channel, int uid, int elapsed) { + + } + + @Override + public void onUserOffline(int uid, int reason) { + + } + + @Override + public void onUserJoined(int uid, int elapsed) { + + } + + @Override + public void onLastmileQuality(int quality) { + + } + + @Override + public void onLastmileProbeResult(IRtcEngineEventHandler.LastmileProbeResult result) { + + } + + @Override + public void onRtcStats(IRtcEngineEventHandler.RtcStats stats) { + + } + + @Override + public void onNetworkQuality(int uid, int txQuality, int rxQuality) { + + } + + @Override + public void onRemoteAudioStats(IRtcEngineEventHandler.RemoteAudioStats stats) { + + } +} diff --git a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/activities/MainActivity.java b/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/activities/MainActivity.java new file mode 100644 index 0000000..331e659 --- /dev/null +++ b/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/activities/MainActivity.java @@ -0,0 +1,280 @@ +package io.agora.advancedaudio.activities; + +import android.Manifest; +import android.animation.Animator; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.Rect; +import android.os.Bundle; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.View; +import android.view.ViewTreeObserver; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + +import io.agora.advancedaudio.R; + +public class MainActivity extends BaseActivity { + private static final String TAG = MainActivity.class.getSimpleName(); + private static final int MIN_INPUT_METHOD_HEIGHT = 200; + private static final int ANIM_DURATION = 200; + + // Permission request code of any integer value + private static final int PERMISSION_REQ_CODE = 1 << 4; + + private String[] PERMISSIONS = { + Manifest.permission.RECORD_AUDIO, + Manifest.permission.WRITE_EXTERNAL_STORAGE + }; + + private Rect mVisibleRect = new Rect(); + private int mLastVisibleHeight = 0; + private RelativeLayout mBodyLayout; + private int mBodyDefaultMarginTop; + private EditText mTopicEdit; + private TextView mStartBtn; + private ImageView mLogo; + + private Animator.AnimatorListener mLogoAnimListener = new Animator.AnimatorListener() { + @Override + public void onAnimationStart(Animator animator) { + // Do nothing + } + + @Override + public void onAnimationEnd(Animator animator) { + mLogo.setVisibility(View.VISIBLE); + } + + @Override + public void onAnimationCancel(Animator animator) { + mLogo.setVisibility(View.VISIBLE); + } + + @Override + public void onAnimationRepeat(Animator animator) { + // Do nothing + } + }; + + private TextWatcher mTextWatcher = new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { + // Do nothing + } + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { + // Do nothing + } + + @Override + public void afterTextChanged(Editable editable) { + mStartBtn.setEnabled(!TextUtils.isEmpty(editable)); + } + }; + + private ViewTreeObserver.OnGlobalLayoutListener mLayoutObserverListener = + new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + checkInputMethodWindowState(); + } + }; + + private void checkInputMethodWindowState() { + getWindow().getDecorView().getRootView().getWindowVisibleDisplayFrame(mVisibleRect); + int visibleHeight = mVisibleRect.bottom - mVisibleRect.top; + if (visibleHeight == mLastVisibleHeight) return; + + boolean inputShown = mDisplayMetrics.heightPixels - visibleHeight > MIN_INPUT_METHOD_HEIGHT; + mLastVisibleHeight = visibleHeight; + + // Log.i(TAG, "onGlobalLayout:" + inputShown + + // "|" + getWindow().getDecorView().getRootView().getViewTreeObserver()); + + // There is no official way to determine whether the + // input method dialog has already shown. + // This is a workaround, and if the visible content + // height is significantly less than the screen height, + // we should know that the input method dialog takes + // up some screen space. + if (inputShown) { + if (mLogo.getVisibility() == View.VISIBLE) { + mBodyLayout.animate().translationYBy(-mLogo.getMeasuredHeight()) + .setDuration(ANIM_DURATION).setListener(null).start(); + mLogo.setVisibility(View.INVISIBLE); + } + } else if (mLogo.getVisibility() != View.VISIBLE) { + mBodyLayout.animate().translationYBy(mLogo.getMeasuredHeight()) + .setDuration(ANIM_DURATION).setListener(mLogoAnimListener).start(); + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + initUI(); + } + + private void initUI() { + mBodyLayout = findViewById(R.id.middle_layout); + mLogo = findViewById(R.id.main_logo); + + mTopicEdit = findViewById(R.id.topic_edit); + mTopicEdit.addTextChangedListener(mTextWatcher); + + mStartBtn = findViewById(R.id.start_broadcast_button); + if (TextUtils.isEmpty(mTopicEdit.getText())) mStartBtn.setEnabled(false); + } + + @Override + protected void onGlobalLayoutCompleted() { + adjustViewPositions(); + } + + private void adjustViewPositions() { + // Setting btn move downward away the status bar + ImageView settingBtn = findViewById(R.id.setting_button); + RelativeLayout.LayoutParams param = (RelativeLayout.LayoutParams) settingBtn.getLayoutParams(); + param.topMargin += mStatusBarHeight; + settingBtn.setLayoutParams(param); + + // Logo is 0.48 times the screen width + // ImageView logo = findViewById(R.id.main_logo); + param = (RelativeLayout.LayoutParams) mLogo.getLayoutParams(); + int size = (int) (mDisplayMetrics.widthPixels * 0.48); + param.width = size; + param.height = size; + mLogo.setLayoutParams(param); + + // Bottom margin of the main body should be two times it's top margin. + param = (RelativeLayout.LayoutParams) mBodyLayout.getLayoutParams(); + param.topMargin = (mDisplayMetrics.heightPixels - + mBodyLayout.getMeasuredHeight() - mStatusBarHeight) / 3; + mBodyLayout.setLayoutParams(param); + mBodyDefaultMarginTop = param.topMargin; + + // The width of the start button is roughly 0.72 + // times the width of the screen + mStartBtn = findViewById(R.id.start_broadcast_button); + param = (RelativeLayout.LayoutParams) mStartBtn.getLayoutParams(); + param.width = (int) (mDisplayMetrics.widthPixels * 0.72); + mStartBtn.setLayoutParams(param); + } + + public void onStartBroadcastClicked(View view) { + checkPermission(); + } + + private void checkPermission() { + boolean granted = true; + for (String per : PERMISSIONS) { + if (!permissionGranted(per)) { + granted = false; + break; + } + } + + if (granted) { + resetLayoutAndForward(); + } else { + requestPermissions(); + } + } + + private boolean permissionGranted(String permission) { + return ContextCompat.checkSelfPermission( + this, permission) == PackageManager.PERMISSION_GRANTED; + } + + private void requestPermissions() { + ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_REQ_CODE); + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) { + if (requestCode == PERMISSION_REQ_CODE) { + boolean granted = true; + for (int result : grantResults) { + granted = (result == PackageManager.PERMISSION_GRANTED); + if (!granted) break; + } + + if (granted) { + resetLayoutAndForward(); + } else { + toastNeedPermissions(); + } + } + } + + private void resetLayoutAndForward() { + closeImeDialogIfNeeded(); + gotoRoleActivity(); + } + + private void closeImeDialogIfNeeded() { + InputMethodManager manager = (InputMethodManager) + getSystemService(Context.INPUT_METHOD_SERVICE); + manager.hideSoftInputFromWindow(mTopicEdit.getWindowToken(), + InputMethodManager.HIDE_NOT_ALWAYS); + } + + public void gotoRoleActivity() { +// Intent intent = new Intent(MainActivity.this, RoleActivity.class); +// String room = mTopicEdit.getText().toString(); +// config().setChannelName(room); +// startActivity(intent); + } + + private void toastNeedPermissions() { + Toast.makeText(this, R.string.need_necessary_permissions, Toast.LENGTH_LONG).show(); + } + + @Override + protected void onResume() { + super.onResume(); + resetUI(); + registerLayoutObserverForSoftKeyboard(); + } + + private void resetUI() { + resetLogo(); + closeImeDialogIfNeeded(); + } + + private void resetLogo() { + mLogo.setVisibility(View.VISIBLE); + mBodyLayout.setY(mBodyDefaultMarginTop); + } + + private void registerLayoutObserverForSoftKeyboard() { + View view = getWindow().getDecorView().getRootView(); + ViewTreeObserver observer = view.getViewTreeObserver(); + observer.addOnGlobalLayoutListener(mLayoutObserverListener); + } + + @Override + protected void onPause() { + super.onPause(); + removeLayoutObserverForSoftKeyboard(); + } + + private void removeLayoutObserverForSoftKeyboard() { + View view = getWindow().getDecorView().getRootView(); + view.getViewTreeObserver().removeOnGlobalLayoutListener(mLayoutObserverListener); + } +} diff --git a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/rtc/AgoraEventHandler.java b/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/rtc/AgoraEventHandler.java new file mode 100644 index 0000000..23b4538 --- /dev/null +++ b/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/rtc/AgoraEventHandler.java @@ -0,0 +1,80 @@ +package io.agora.advancedaudio.rtc; + +import java.util.ArrayList; + +import io.agora.rtc.IRtcEngineEventHandler; + +public class AgoraEventHandler extends IRtcEngineEventHandler { + private ArrayList mHandler = new ArrayList<>(); + + public void addHandler(EventHandler handler) { + mHandler.add(handler); + } + + public void removeHandler(EventHandler handler) { + mHandler.remove(handler); + } + + @Override + public void onJoinChannelSuccess(String channel, int uid, int elapsed) { + for (EventHandler handler : mHandler) { + handler.onJoinChannelSuccess(channel, uid, elapsed); + } + } + + @Override + public void onLeaveChannel(RtcStats stats) { + for (EventHandler handler : mHandler) { + handler.onLeaveChannel(stats); + } + } + + @Override + public void onUserJoined(int uid, int elapsed) { + for (EventHandler handler : mHandler) { + handler.onUserJoined(uid, elapsed); + } + } + + @Override + public void onUserOffline(int uid, int reason) { + for (EventHandler handler : mHandler) { + handler.onUserOffline(uid, reason); + } + } + + @Override + public void onRtcStats(IRtcEngineEventHandler.RtcStats stats) { + for (EventHandler handler : mHandler) { + handler.onRtcStats(stats); + } + } + + @Override + public void onNetworkQuality(int uid, int txQuality, int rxQuality) { + for (EventHandler handler : mHandler) { + handler.onNetworkQuality(uid, txQuality, rxQuality); + } + } + + @Override + public void onRemoteAudioStats(IRtcEngineEventHandler.RemoteAudioStats stats) { + for (EventHandler handler : mHandler) { + handler.onRemoteAudioStats(stats); + } + } + + @Override + public void onLastmileQuality(int quality) { + for (EventHandler handler : mHandler) { + handler.onLastmileQuality(quality); + } + } + + @Override + public void onLastmileProbeResult(IRtcEngineEventHandler.LastmileProbeResult result) { + for (EventHandler handler : mHandler) { + handler.onLastmileProbeResult(result); + } + } +} diff --git a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/rtc/EventHandler.java b/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/rtc/EventHandler.java new file mode 100644 index 0000000..61aa167 --- /dev/null +++ b/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/rtc/EventHandler.java @@ -0,0 +1,23 @@ +package io.agora.advancedaudio.rtc; + +import io.agora.rtc.IRtcEngineEventHandler; + +public interface EventHandler { + void onLeaveChannel(IRtcEngineEventHandler.RtcStats stats); + + void onJoinChannelSuccess(String channel, int uid, int elapsed); + + void onUserOffline(int uid, int reason); + + void onUserJoined(int uid, int elapsed); + + void onLastmileQuality(int quality); + + void onLastmileProbeResult(IRtcEngineEventHandler.LastmileProbeResult result); + + void onRtcStats(IRtcEngineEventHandler.RtcStats stats); + + void onNetworkQuality(int uid, int txQuality, int rxQuality); + + void onRemoteAudioStats(IRtcEngineEventHandler.RemoteAudioStats stats); +} diff --git a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/utils/FileUtil.java b/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/utils/FileUtil.java new file mode 100644 index 0000000..7d9236b --- /dev/null +++ b/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/utils/FileUtil.java @@ -0,0 +1,34 @@ +package io.agora.advancedaudio.utils; + +import android.content.Context; +import android.os.Build; +import android.os.Environment; + +import java.io.File; + +public class FileUtil { + private static final String LOG_FOLDER_NAME = "log"; + private static final String LOG_FILE_NAME = "agora-rtc.log"; + + /** + * Initialize the log folder + * @param context Context to find the accessible file folder + * @return the absolute path of the log file + */ + public static String initializeLogFile(Context context) { + File folder; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + folder = new File(context.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS), LOG_FOLDER_NAME); + } else { + String path = Environment.getExternalStorageDirectory() + .getAbsolutePath() + File.separator + + context.getPackageName() + File.separator + + LOG_FOLDER_NAME; + folder = new File(path); + if (!folder.exists() && !folder.mkdir()) folder = null; + } + + if (folder != null && !folder.exists() && !folder.mkdir()) return ""; + else return new File(folder, LOG_FILE_NAME).getAbsolutePath(); + } +} diff --git a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/utils/WindowUtil.java b/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/utils/WindowUtil.java new file mode 100644 index 0000000..bfcb245 --- /dev/null +++ b/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/utils/WindowUtil.java @@ -0,0 +1,28 @@ +package io.agora.advancedaudio.utils; + +import android.content.Context; +import android.graphics.Color; +import android.os.Build; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; + +public class WindowUtil { + public static void hideWindowStatusBar(Window window) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.setStatusBarColor(Color.TRANSPARENT); + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + } + } + + public static int getSystemStatusBarHeight(Context context) { + int id = context.getResources().getIdentifier( + "status_bar_height", "dimen", "android"); + return id > 0 ? context.getResources().getDimensionPixelSize(id) : id; + } +} diff --git a/Advanced-Audio-Android/app/src/main/res/color/start_broadcast_text_color.xml b/Advanced-Audio-Android/app/src/main/res/color/start_broadcast_text_color.xml new file mode 100644 index 0000000..956e309 --- /dev/null +++ b/Advanced-Audio-Android/app/src/main/res/color/start_broadcast_text_color.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/Advanced-Audio-Android/app/src/main/res/drawable-xxhdpi/live_room_bg_logo.png b/Advanced-Audio-Android/app/src/main/res/drawable-xxhdpi/live_room_bg_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ca3defca763a5dfddacf7a69c7a870d27b15601d GIT binary patch literal 65246 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

OGXg2Jk?D>8+&?P}XBCoS8)zELhNjjXk*~ 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 LNkvXXu0mjfV$nc4 literal 0 HcmV?d00001 diff --git a/Advanced-Audio-Android/app/src/main/res/drawable-xxhdpi/main_logo.png b/Advanced-Audio-Android/app/src/main/res/drawable-xxhdpi/main_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3c2d267cbd28594b5dec2448f499fb4ecd30c92e GIT binary patch literal 70289 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≫3}km%2(|-96ztyN~P# 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 literal 0 HcmV?d00001 diff --git a/Advanced-Audio-Android/app/src/main/res/drawable/ic_launcher_background.xml b/Advanced-Audio-Android/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..0d025f9 --- /dev/null +++ b/Advanced-Audio-Android/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Advanced-Audio-Android/app/src/main/res/drawable/main_background.xml b/Advanced-Audio-Android/app/src/main/res/drawable/main_background.xml new file mode 100644 index 0000000..68f88bf --- /dev/null +++ b/Advanced-Audio-Android/app/src/main/res/drawable/main_background.xml @@ -0,0 +1,7 @@ + + + + diff --git a/Advanced-Audio-Android/app/src/main/res/drawable/start_broadcast_bg.xml b/Advanced-Audio-Android/app/src/main/res/drawable/start_broadcast_bg.xml new file mode 100644 index 0000000..51d749b --- /dev/null +++ b/Advanced-Audio-Android/app/src/main/res/drawable/start_broadcast_bg.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/Advanced-Audio-Android/app/src/main/res/drawable/start_broadcast_bg_clicked.xml b/Advanced-Audio-Android/app/src/main/res/drawable/start_broadcast_bg_clicked.xml new file mode 100644 index 0000000..4a02ac5 --- /dev/null +++ b/Advanced-Audio-Android/app/src/main/res/drawable/start_broadcast_bg_clicked.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/Advanced-Audio-Android/app/src/main/res/drawable/start_broadcast_bg_normal.xml b/Advanced-Audio-Android/app/src/main/res/drawable/start_broadcast_bg_normal.xml new file mode 100644 index 0000000..0c24ade --- /dev/null +++ b/Advanced-Audio-Android/app/src/main/res/drawable/start_broadcast_bg_normal.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/Advanced-Audio-Android/app/src/main/res/layout/activity_main.xml b/Advanced-Audio-Android/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..7e33c5d --- /dev/null +++ b/Advanced-Audio-Android/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + diff --git a/Advanced-Audio-Android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/Advanced-Audio-Android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..b0907cac3bfd8fbfdc46e1108247f0a1055387ec GIT binary patch literal 6387 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 literal 0 HcmV?d00001 diff --git a/Advanced-Audio-Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/Advanced-Audio-Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ae03154975f397f8ed1b84f2d4bf9783ecfa26 GIT binary patch literal 10413 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 XdJ+W}DiIkV00000NkvXXu0mjfKBlg6 literal 0 HcmV?d00001 diff --git a/Advanced-Audio-Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/Advanced-Audio-Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2c18de9e66108411737e910f5c1972476f03ddbf GIT binary patch literal 9128 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 I20H400LcNok^lez literal 0 HcmV?d00001 diff --git a/Advanced-Audio-Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/Advanced-Audio-Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..beed3cdd2c32af5114a7dc70b9ef5b698eb8797e GIT binary patch literal 15132 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 literal 0 HcmV?d00001 diff --git a/Advanced-Audio-Android/app/src/main/res/values/colors.xml b/Advanced-Audio-Android/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..8afc89d --- /dev/null +++ b/Advanced-Audio-Android/app/src/main/res/values/colors.xml @@ -0,0 +1,21 @@ + + + #008577 + #00574B + #D81B60 + + #DEDEDE + #CCCCCC + #989898 + #666666 + #333333 + + #007AFF + #44A2FC + #0ECFFF + #9CD9FF + + #CC262626 + #66000000 + #22000000 + diff --git a/Advanced-Audio-Android/app/src/main/res/values/dimens.xml b/Advanced-Audio-Android/app/src/main/res/values/dimens.xml new file mode 100644 index 0000000..240bf8b --- /dev/null +++ b/Advanced-Audio-Android/app/src/main/res/values/dimens.xml @@ -0,0 +1,27 @@ + + + + 16dp + 16dp + + 240dp + 224dp + + 12sp + 14sp + 16sp + 18sp + + + 12dp + 18dp + 36dp + 158dp + 48dp + 42dp + 16dp + 48dp + 25dp + 45dp + 48dp + diff --git a/Advanced-Audio-Android/app/src/main/res/values/strings.xml b/Advanced-Audio-Android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..b682cbf --- /dev/null +++ b/Advanced-Audio-Android/app/src/main/res/values/strings.xml @@ -0,0 +1,12 @@ + + Advanced-Audio-Android + + + Start Live Broadcast + Pick a topic to chat + Powered by agora.io + Necessary permissions acquired + + +  abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%&()+,-:;<=.>?@[]^_`{|}~ + diff --git a/Advanced-Audio-Android/app/src/main/res/values/strings_config.xml b/Advanced-Audio-Android/app/src/main/res/values/strings_config.xml new file mode 100644 index 0000000..530ef60 --- /dev/null +++ b/Advanced-Audio-Android/app/src/main/res/values/strings_config.xml @@ -0,0 +1,11 @@ + + + + + <#YOUR APP ID#> + + + + <#YOUR ACCESS TOKEN#> + + diff --git a/Advanced-Audio-Android/app/src/main/res/values/styles.xml b/Advanced-Audio-Android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..5885930 --- /dev/null +++ b/Advanced-Audio-Android/app/src/main/res/values/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/Advanced-Audio-Android/app/src/test/java/io/agora/advancedaudio/ExampleUnitTest.java b/Advanced-Audio-Android/app/src/test/java/io/agora/advancedaudio/ExampleUnitTest.java new file mode 100644 index 0000000..307c9fb --- /dev/null +++ b/Advanced-Audio-Android/app/src/test/java/io/agora/advancedaudio/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package io.agora.advancedaudio; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/Advanced-Audio-Android/build.gradle b/Advanced-Audio-Android/build.gradle new file mode 100644 index 0000000..fb516be --- /dev/null +++ b/Advanced-Audio-Android/build.gradle @@ -0,0 +1,27 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + repositories { + google() + jcenter() + + } + dependencies { + classpath 'com.android.tools.build:gradle:3.5.2' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + google() + jcenter() + + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/Advanced-Audio-Android/gradle.properties b/Advanced-Audio-Android/gradle.properties new file mode 100644 index 0000000..199d16e --- /dev/null +++ b/Advanced-Audio-Android/gradle.properties @@ -0,0 +1,20 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx1536m +# 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 +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Automatically convert third-party libraries to use AndroidX +android.enableJetifier=true + diff --git a/Advanced-Audio-Android/gradle/wrapper/gradle-wrapper.jar b/Advanced-Audio-Android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..f6b961fd5a86aa5fbfe90f707c3138408be7c718 GIT binary patch literal 54329 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

<5G2M1WZP5 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 F{|7XC?P&l2 literal 0 HcmV?d00001 diff --git a/Advanced-Audio-Android/gradle/wrapper/gradle-wrapper.properties b/Advanced-Audio-Android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..9ffcaba --- /dev/null +++ b/Advanced-Audio-Android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Dec 13 15:32:56 CST 2019 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip diff --git a/Advanced-Audio-Android/gradlew b/Advanced-Audio-Android/gradlew new file mode 100644 index 0000000..cccdd3d --- /dev/null +++ b/Advanced-Audio-Android/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/Advanced-Audio-Android/gradlew.bat b/Advanced-Audio-Android/gradlew.bat new file mode 100644 index 0000000..f955316 --- /dev/null +++ b/Advanced-Audio-Android/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/Advanced-Audio-Android/settings.gradle b/Advanced-Audio-Android/settings.gradle new file mode 100644 index 0000000..e374cad --- /dev/null +++ b/Advanced-Audio-Android/settings.gradle @@ -0,0 +1,2 @@ +include ':app' +rootProject.name='Advanced-Audio-Android' From 8dfe28105b02fd22c16f49b28ced9e307acb44dd Mon Sep 17 00:00:00 2001 From: brianxcli Date: Mon, 16 Dec 2019 16:15:18 +0800 Subject: [PATCH 02/15] add custom audio recording sample --- .../app/src/main/AndroidManifest.xml | 11 -- Advanced-Audio-Android/build.gradle | 2 +- .../{app => component}/build.gradle | 3 +- .../{app => component}/proguard-rules.pro | 0 .../ExampleInstrumentedTest.java | 0 .../component/src/main/AndroidManifest.xml | 20 +++ .../agora/advancedaudio/AgoraApplication.java | 7 +- .../io/agora/advancedaudio/Constants.java | 5 + .../component}/activities/BaseActivity.java | 11 +- .../component}/activities/MainActivity.java | 50 ++++-- .../annotations/DisplayActivity.java | 9 + .../component}/rtc/AgoraEventHandler.java | 2 +- .../component}/rtc/EventHandler.java | 2 +- .../component}/utils/FileUtil.java | 2 +- .../component}/utils/WindowUtil.java | 2 +- .../res/color/start_broadcast_text_color.xml | 0 .../res/drawable-xxhdpi/live_room_bg_logo.png | Bin .../main/res/drawable-xxhdpi/main_logo.png | Bin .../res/drawable/ic_launcher_background.xml | 0 .../src/main/res/drawable/main_background.xml | 0 .../main/res/drawable/start_broadcast_bg.xml | 0 .../drawable/start_broadcast_bg_clicked.xml | 0 .../drawable/start_broadcast_bg_normal.xml | 0 .../src/main/res/layout/activity_main.xml | 71 ++++++++ .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin .../src/main/res/values-zh/strings.xml | 9 + .../src/main/res/values/colors.xml | 0 .../src/main/res/values/dimens.xml | 0 .../src/main/res/values/strings.xml | 0 .../src/main/res/values/styles.xml | 2 +- .../agora/advancedaudio/ExampleUnitTest.java | 0 .../custom-recorder/.gitignore | 1 + .../custom-recorder/build.gradle | 35 ++++ .../custom-recorder/proguard-rules.pro | 21 +++ .../ExampleInstrumentedTest.java | 27 +++ .../src/main/AndroidManifest.xml | 20 +++ .../customrecorder/CustomRecorder.java | 45 +++++ .../CustomRecorderActivity.java | 77 ++++++++ .../customrecorder/CustomRecorderConfig.java | 66 +++++++ .../customrecorder/CustomRecorderService.java | 124 +++++++++++++ .../drawable-xxhdpi/btn_audio_disabled.png | Bin 0 -> 4144 bytes .../res/drawable-xxhdpi/btn_audio_enabled.png | Bin 0 -> 2310 bytes .../main/res/drawable-xxhdpi/btn_leave.png | Bin 0 -> 1732 bytes .../res/drawable-xxhdpi/live_room_bg_logo.png | Bin 0 -> 65246 bytes .../src/main/res/drawable/btn_mute_audio.xml | 5 + .../res/drawable/ic_launcher_background.xml | 170 ++++++++++++++++++ .../src/main/res/drawable/live_room_bg.xml | 13 ++ .../drawable/rounded_bg_full_transparent.xml | 6 + .../drawable/rounded_bg_half_transparent.xml | 6 + .../main/res/layout/activity_audio_room.xml | 47 +++++ .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6387 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10413 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9128 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15132 bytes .../src/main/res/values-zh/strings.xml | 3 + .../src/main/res/values/colors.xml | 6 + .../src/main/res/values/dimens.xml | 21 +++ .../src/main/res/values/strings.xml | 3 + .../src/main/res/values/styles.xml | 11 ++ .../agora/advancedaudio/ExampleUnitTest.java | 17 ++ Advanced-Audio-Android/settings.gradle | 2 +- 64 files changed, 894 insertions(+), 40 deletions(-) delete mode 100644 Advanced-Audio-Android/app/src/main/AndroidManifest.xml rename Advanced-Audio-Android/{app => component}/build.gradle (90%) rename Advanced-Audio-Android/{app => component}/proguard-rules.pro (100%) rename Advanced-Audio-Android/{app => component}/src/androidTest/java/io/agora/advancedaudio/ExampleInstrumentedTest.java (100%) create mode 100644 Advanced-Audio-Android/component/src/main/AndroidManifest.xml rename Advanced-Audio-Android/{app => component}/src/main/java/io/agora/advancedaudio/AgoraApplication.java (82%) create mode 100644 Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/Constants.java rename Advanced-Audio-Android/{app/src/main/java/io/agora/advancedaudio => component/src/main/java/io/agora/advancedaudio/component}/activities/BaseActivity.java (90%) rename Advanced-Audio-Android/{app/src/main/java/io/agora/advancedaudio => component/src/main/java/io/agora/advancedaudio/component}/activities/MainActivity.java (86%) create mode 100644 Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/annotations/DisplayActivity.java rename Advanced-Audio-Android/{app/src/main/java/io/agora/advancedaudio => component/src/main/java/io/agora/advancedaudio/component}/rtc/AgoraEventHandler.java (97%) rename Advanced-Audio-Android/{app/src/main/java/io/agora/advancedaudio => component/src/main/java/io/agora/advancedaudio/component}/rtc/EventHandler.java (93%) rename Advanced-Audio-Android/{app/src/main/java/io/agora/advancedaudio => component/src/main/java/io/agora/advancedaudio/component}/utils/FileUtil.java (96%) rename Advanced-Audio-Android/{app/src/main/java/io/agora/advancedaudio => component/src/main/java/io/agora/advancedaudio/component}/utils/WindowUtil.java (96%) rename Advanced-Audio-Android/{app => component}/src/main/res/color/start_broadcast_text_color.xml (100%) rename Advanced-Audio-Android/{app => component}/src/main/res/drawable-xxhdpi/live_room_bg_logo.png (100%) rename Advanced-Audio-Android/{app => component}/src/main/res/drawable-xxhdpi/main_logo.png (100%) rename Advanced-Audio-Android/{app => component}/src/main/res/drawable/ic_launcher_background.xml (100%) rename Advanced-Audio-Android/{app => component}/src/main/res/drawable/main_background.xml (100%) rename Advanced-Audio-Android/{app => component}/src/main/res/drawable/start_broadcast_bg.xml (100%) rename Advanced-Audio-Android/{app => component}/src/main/res/drawable/start_broadcast_bg_clicked.xml (100%) rename Advanced-Audio-Android/{app => component}/src/main/res/drawable/start_broadcast_bg_normal.xml (100%) create mode 100644 Advanced-Audio-Android/component/src/main/res/layout/activity_main.xml rename Advanced-Audio-Android/{app => component}/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename Advanced-Audio-Android/{app => component}/src/main/res/mipmap-xxhdpi/ic_launcher_round.png (100%) rename Advanced-Audio-Android/{app => component}/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename Advanced-Audio-Android/{app => component}/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png (100%) create mode 100644 Advanced-Audio-Android/component/src/main/res/values-zh/strings.xml rename Advanced-Audio-Android/{app => component}/src/main/res/values/colors.xml (100%) rename Advanced-Audio-Android/{app => component}/src/main/res/values/dimens.xml (100%) rename Advanced-Audio-Android/{app => component}/src/main/res/values/strings.xml (100%) rename Advanced-Audio-Android/{app => component}/src/main/res/values/styles.xml (80%) rename Advanced-Audio-Android/{app => component}/src/test/java/io/agora/advancedaudio/ExampleUnitTest.java (100%) create mode 100644 Advanced-Audio-Android/custom-recorder/.gitignore create mode 100644 Advanced-Audio-Android/custom-recorder/build.gradle create mode 100644 Advanced-Audio-Android/custom-recorder/proguard-rules.pro create mode 100644 Advanced-Audio-Android/custom-recorder/src/androidTest/java/io/agora/advancedaudio/ExampleInstrumentedTest.java create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/AndroidManifest.xml create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorder.java create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderActivity.java create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderConfig.java create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderService.java create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/res/drawable-xxhdpi/btn_audio_disabled.png create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/res/drawable-xxhdpi/btn_audio_enabled.png create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/res/drawable-xxhdpi/btn_leave.png create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/res/drawable-xxhdpi/live_room_bg_logo.png create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/res/drawable/btn_mute_audio.xml create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/res/drawable/ic_launcher_background.xml create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/res/drawable/live_room_bg.xml create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/res/drawable/rounded_bg_full_transparent.xml create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/res/drawable/rounded_bg_half_transparent.xml create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/res/layout/activity_audio_room.xml create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/res/values-zh/strings.xml create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/res/values/colors.xml create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/res/values/dimens.xml create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/res/values/strings.xml create mode 100644 Advanced-Audio-Android/custom-recorder/src/main/res/values/styles.xml create mode 100644 Advanced-Audio-Android/custom-recorder/src/test/java/io/agora/advancedaudio/ExampleUnitTest.java diff --git a/Advanced-Audio-Android/app/src/main/AndroidManifest.xml b/Advanced-Audio-Android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 5beffb3..0000000 --- a/Advanced-Audio-Android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - diff --git a/Advanced-Audio-Android/build.gradle b/Advanced-Audio-Android/build.gradle index fb516be..a5bb815 100644 --- a/Advanced-Audio-Android/build.gradle +++ b/Advanced-Audio-Android/build.gradle @@ -7,7 +7,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.2' + classpath 'com.android.tools.build:gradle:3.5.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/Advanced-Audio-Android/app/build.gradle b/Advanced-Audio-Android/component/build.gradle similarity index 90% rename from Advanced-Audio-Android/app/build.gradle rename to Advanced-Audio-Android/component/build.gradle index b6a95fa..18018f0 100644 --- a/Advanced-Audio-Android/app/build.gradle +++ b/Advanced-Audio-Android/component/build.gradle @@ -1,10 +1,9 @@ -apply plugin: 'com.android.application' +apply plugin: 'com.android.library' android { compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { - applicationId "io.agora.advancedaudio" minSdkVersion 16 targetSdkVersion 29 versionCode 1 diff --git a/Advanced-Audio-Android/app/proguard-rules.pro b/Advanced-Audio-Android/component/proguard-rules.pro similarity index 100% rename from Advanced-Audio-Android/app/proguard-rules.pro rename to Advanced-Audio-Android/component/proguard-rules.pro diff --git a/Advanced-Audio-Android/app/src/androidTest/java/io/agora/advancedaudio/ExampleInstrumentedTest.java b/Advanced-Audio-Android/component/src/androidTest/java/io/agora/advancedaudio/ExampleInstrumentedTest.java similarity index 100% rename from Advanced-Audio-Android/app/src/androidTest/java/io/agora/advancedaudio/ExampleInstrumentedTest.java rename to Advanced-Audio-Android/component/src/androidTest/java/io/agora/advancedaudio/ExampleInstrumentedTest.java diff --git a/Advanced-Audio-Android/component/src/main/AndroidManifest.xml b/Advanced-Audio-Android/component/src/main/AndroidManifest.xml new file mode 100644 index 0000000..1b5d0b4 --- /dev/null +++ b/Advanced-Audio-Android/component/src/main/AndroidManifest.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + diff --git a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/AgoraApplication.java b/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/AgoraApplication.java similarity index 82% rename from Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/AgoraApplication.java rename to Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/AgoraApplication.java index d3f9785..10e749a 100644 --- a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/AgoraApplication.java +++ b/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/AgoraApplication.java @@ -2,9 +2,10 @@ import android.app.Application; -import io.agora.advancedaudio.rtc.AgoraEventHandler; -import io.agora.advancedaudio.rtc.EventHandler; -import io.agora.advancedaudio.utils.FileUtil; +import io.agora.advancedaudio.component.R; +import io.agora.advancedaudio.component.rtc.AgoraEventHandler; +import io.agora.advancedaudio.component.rtc.EventHandler; +import io.agora.advancedaudio.component.utils.FileUtil; import io.agora.rtc.RtcEngine; public class AgoraApplication extends Application { diff --git a/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/Constants.java b/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/Constants.java new file mode 100644 index 0000000..5a3f95b --- /dev/null +++ b/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/Constants.java @@ -0,0 +1,5 @@ +package io.agora.advancedaudio; + +public class Constants { + public static final String KEY_CHANNEL_NAME = "channel-name"; +} diff --git a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/activities/BaseActivity.java b/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/activities/BaseActivity.java similarity index 90% rename from Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/activities/BaseActivity.java rename to Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/activities/BaseActivity.java index 03a2ad7..37c0e16 100644 --- a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/activities/BaseActivity.java +++ b/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/activities/BaseActivity.java @@ -1,4 +1,4 @@ -package io.agora.advancedaudio.activities; +package io.agora.advancedaudio.component.activities; import android.os.Bundle; import android.util.DisplayMetrics; @@ -9,11 +9,16 @@ import androidx.appcompat.app.AppCompatActivity; import io.agora.advancedaudio.AgoraApplication; -import io.agora.advancedaudio.rtc.EventHandler; -import io.agora.advancedaudio.utils.WindowUtil; +import io.agora.advancedaudio.component.annotations.DisplayActivity; +import io.agora.advancedaudio.component.rtc.EventHandler; +import io.agora.advancedaudio.component.utils.WindowUtil; import io.agora.rtc.IRtcEngineEventHandler; import io.agora.rtc.RtcEngine; +@DisplayActivity( +SubClasses = { + "io.agora.advancedaudio.customrecorder.CustomRecorderActivity" +}) public abstract class BaseActivity extends AppCompatActivity implements EventHandler { protected DisplayMetrics mDisplayMetrics = new DisplayMetrics(); protected int mStatusBarHeight; diff --git a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/activities/MainActivity.java b/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/activities/MainActivity.java similarity index 86% rename from Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/activities/MainActivity.java rename to Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/activities/MainActivity.java index 331e659..361dd3b 100644 --- a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/activities/MainActivity.java +++ b/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/activities/MainActivity.java @@ -1,4 +1,4 @@ -package io.agora.advancedaudio.activities; +package io.agora.advancedaudio.component.activities; import android.Manifest; import android.animation.Animator; @@ -23,7 +23,11 @@ import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; -import io.agora.advancedaudio.R; +import java.lang.annotation.Annotation; + +import io.agora.advancedaudio.Constants; +import io.agora.advancedaudio.component.R; +import io.agora.advancedaudio.component.annotations.DisplayActivity; public class MainActivity extends BaseActivity { private static final String TAG = MainActivity.class.getSimpleName(); @@ -146,14 +150,9 @@ protected void onGlobalLayoutCompleted() { } private void adjustViewPositions() { - // Setting btn move downward away the status bar - ImageView settingBtn = findViewById(R.id.setting_button); - RelativeLayout.LayoutParams param = (RelativeLayout.LayoutParams) settingBtn.getLayoutParams(); - param.topMargin += mStatusBarHeight; - settingBtn.setLayoutParams(param); + RelativeLayout.LayoutParams param; // Logo is 0.48 times the screen width - // ImageView logo = findViewById(R.id.main_logo); param = (RelativeLayout.LayoutParams) mLogo.getLayoutParams(); int size = (int) (mDisplayMetrics.widthPixels * 0.48); param.width = size; @@ -223,7 +222,7 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String permissi private void resetLayoutAndForward() { closeImeDialogIfNeeded(); - gotoRoleActivity(); + gotoActivity(); } private void closeImeDialogIfNeeded() { @@ -233,11 +232,34 @@ private void closeImeDialogIfNeeded() { InputMethodManager.HIDE_NOT_ALWAYS); } - public void gotoRoleActivity() { -// Intent intent = new Intent(MainActivity.this, RoleActivity.class); -// String room = mTopicEdit.getText().toString(); -// config().setChannelName(room); -// startActivity(intent); + public void gotoActivity() { + Annotation[] annotations = BaseActivity.class.getDeclaredAnnotations(); + Class targetActivity = null; + for (Annotation annotation : annotations) { + if (annotation instanceof DisplayActivity) { + boolean found; + String[] targets = ((DisplayActivity) annotation).SubClasses(); + for (String className : targets) { + try { + targetActivity = Class.forName(className); + found = true; + } catch (ClassNotFoundException e) { + found = false; + } + + if (targetActivity != null && found) { + break; + } + } + } + } + + if (targetActivity != null) { + Intent intent = new Intent(this, targetActivity); + intent.putExtra(Constants.KEY_CHANNEL_NAME, + mTopicEdit.getText().toString()); + startActivity(intent); + } } private void toastNeedPermissions() { diff --git a/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/annotations/DisplayActivity.java b/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/annotations/DisplayActivity.java new file mode 100644 index 0000000..f54eae3 --- /dev/null +++ b/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/annotations/DisplayActivity.java @@ -0,0 +1,9 @@ +package io.agora.advancedaudio.component.annotations; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface DisplayActivity { + String[] SubClasses(); +} diff --git a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/rtc/AgoraEventHandler.java b/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/rtc/AgoraEventHandler.java similarity index 97% rename from Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/rtc/AgoraEventHandler.java rename to Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/rtc/AgoraEventHandler.java index 23b4538..6bb78eb 100644 --- a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/rtc/AgoraEventHandler.java +++ b/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/rtc/AgoraEventHandler.java @@ -1,4 +1,4 @@ -package io.agora.advancedaudio.rtc; +package io.agora.advancedaudio.component.rtc; import java.util.ArrayList; diff --git a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/rtc/EventHandler.java b/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/rtc/EventHandler.java similarity index 93% rename from Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/rtc/EventHandler.java rename to Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/rtc/EventHandler.java index 61aa167..8a856de 100644 --- a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/rtc/EventHandler.java +++ b/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/rtc/EventHandler.java @@ -1,4 +1,4 @@ -package io.agora.advancedaudio.rtc; +package io.agora.advancedaudio.component.rtc; import io.agora.rtc.IRtcEngineEventHandler; diff --git a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/utils/FileUtil.java b/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/utils/FileUtil.java similarity index 96% rename from Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/utils/FileUtil.java rename to Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/utils/FileUtil.java index 7d9236b..1e820bb 100644 --- a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/utils/FileUtil.java +++ b/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/utils/FileUtil.java @@ -1,4 +1,4 @@ -package io.agora.advancedaudio.utils; +package io.agora.advancedaudio.component.utils; import android.content.Context; import android.os.Build; diff --git a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/utils/WindowUtil.java b/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/utils/WindowUtil.java similarity index 96% rename from Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/utils/WindowUtil.java rename to Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/utils/WindowUtil.java index bfcb245..b5e4f63 100644 --- a/Advanced-Audio-Android/app/src/main/java/io/agora/advancedaudio/utils/WindowUtil.java +++ b/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/utils/WindowUtil.java @@ -1,4 +1,4 @@ -package io.agora.advancedaudio.utils; +package io.agora.advancedaudio.component.utils; import android.content.Context; import android.graphics.Color; diff --git a/Advanced-Audio-Android/app/src/main/res/color/start_broadcast_text_color.xml b/Advanced-Audio-Android/component/src/main/res/color/start_broadcast_text_color.xml similarity index 100% rename from Advanced-Audio-Android/app/src/main/res/color/start_broadcast_text_color.xml rename to Advanced-Audio-Android/component/src/main/res/color/start_broadcast_text_color.xml diff --git a/Advanced-Audio-Android/app/src/main/res/drawable-xxhdpi/live_room_bg_logo.png b/Advanced-Audio-Android/component/src/main/res/drawable-xxhdpi/live_room_bg_logo.png similarity index 100% rename from Advanced-Audio-Android/app/src/main/res/drawable-xxhdpi/live_room_bg_logo.png rename to Advanced-Audio-Android/component/src/main/res/drawable-xxhdpi/live_room_bg_logo.png diff --git a/Advanced-Audio-Android/app/src/main/res/drawable-xxhdpi/main_logo.png b/Advanced-Audio-Android/component/src/main/res/drawable-xxhdpi/main_logo.png similarity index 100% rename from Advanced-Audio-Android/app/src/main/res/drawable-xxhdpi/main_logo.png rename to Advanced-Audio-Android/component/src/main/res/drawable-xxhdpi/main_logo.png diff --git a/Advanced-Audio-Android/app/src/main/res/drawable/ic_launcher_background.xml b/Advanced-Audio-Android/component/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from Advanced-Audio-Android/app/src/main/res/drawable/ic_launcher_background.xml rename to Advanced-Audio-Android/component/src/main/res/drawable/ic_launcher_background.xml diff --git a/Advanced-Audio-Android/app/src/main/res/drawable/main_background.xml b/Advanced-Audio-Android/component/src/main/res/drawable/main_background.xml similarity index 100% rename from Advanced-Audio-Android/app/src/main/res/drawable/main_background.xml rename to Advanced-Audio-Android/component/src/main/res/drawable/main_background.xml diff --git a/Advanced-Audio-Android/app/src/main/res/drawable/start_broadcast_bg.xml b/Advanced-Audio-Android/component/src/main/res/drawable/start_broadcast_bg.xml similarity index 100% rename from Advanced-Audio-Android/app/src/main/res/drawable/start_broadcast_bg.xml rename to Advanced-Audio-Android/component/src/main/res/drawable/start_broadcast_bg.xml diff --git a/Advanced-Audio-Android/app/src/main/res/drawable/start_broadcast_bg_clicked.xml b/Advanced-Audio-Android/component/src/main/res/drawable/start_broadcast_bg_clicked.xml similarity index 100% rename from Advanced-Audio-Android/app/src/main/res/drawable/start_broadcast_bg_clicked.xml rename to Advanced-Audio-Android/component/src/main/res/drawable/start_broadcast_bg_clicked.xml diff --git a/Advanced-Audio-Android/app/src/main/res/drawable/start_broadcast_bg_normal.xml b/Advanced-Audio-Android/component/src/main/res/drawable/start_broadcast_bg_normal.xml similarity index 100% rename from Advanced-Audio-Android/app/src/main/res/drawable/start_broadcast_bg_normal.xml rename to Advanced-Audio-Android/component/src/main/res/drawable/start_broadcast_bg_normal.xml diff --git a/Advanced-Audio-Android/component/src/main/res/layout/activity_main.xml b/Advanced-Audio-Android/component/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..d16c12b --- /dev/null +++ b/Advanced-Audio-Android/component/src/main/res/layout/activity_main.xml @@ -0,0 +1,71 @@ + + + + + + + + + + diff --git a/Advanced-Audio-Android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/Advanced-Audio-Android/component/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from Advanced-Audio-Android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to Advanced-Audio-Android/component/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/Advanced-Audio-Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/Advanced-Audio-Android/component/src/main/res/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from Advanced-Audio-Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png rename to Advanced-Audio-Android/component/src/main/res/mipmap-xxhdpi/ic_launcher_round.png diff --git a/Advanced-Audio-Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/Advanced-Audio-Android/component/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from Advanced-Audio-Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to Advanced-Audio-Android/component/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/Advanced-Audio-Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/Advanced-Audio-Android/component/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from Advanced-Audio-Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png rename to Advanced-Audio-Android/component/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/Advanced-Audio-Android/component/src/main/res/values-zh/strings.xml b/Advanced-Audio-Android/component/src/main/res/values-zh/strings.xml new file mode 100644 index 0000000..dc5bf79 --- /dev/null +++ b/Advanced-Audio-Android/component/src/main/res/values-zh/strings.xml @@ -0,0 +1,9 @@ + + Advanced-Audio-Android + + + 开始直播 + 输入一个话题 + Powered by agora.io + 缺少必要权限 + diff --git a/Advanced-Audio-Android/app/src/main/res/values/colors.xml b/Advanced-Audio-Android/component/src/main/res/values/colors.xml similarity index 100% rename from Advanced-Audio-Android/app/src/main/res/values/colors.xml rename to Advanced-Audio-Android/component/src/main/res/values/colors.xml diff --git a/Advanced-Audio-Android/app/src/main/res/values/dimens.xml b/Advanced-Audio-Android/component/src/main/res/values/dimens.xml similarity index 100% rename from Advanced-Audio-Android/app/src/main/res/values/dimens.xml rename to Advanced-Audio-Android/component/src/main/res/values/dimens.xml diff --git a/Advanced-Audio-Android/app/src/main/res/values/strings.xml b/Advanced-Audio-Android/component/src/main/res/values/strings.xml similarity index 100% rename from Advanced-Audio-Android/app/src/main/res/values/strings.xml rename to Advanced-Audio-Android/component/src/main/res/values/strings.xml diff --git a/Advanced-Audio-Android/app/src/main/res/values/styles.xml b/Advanced-Audio-Android/component/src/main/res/values/styles.xml similarity index 80% rename from Advanced-Audio-Android/app/src/main/res/values/styles.xml rename to Advanced-Audio-Android/component/src/main/res/values/styles.xml index 5885930..28aab42 100644 --- a/Advanced-Audio-Android/app/src/main/res/values/styles.xml +++ b/Advanced-Audio-Android/component/src/main/res/values/styles.xml @@ -1,7 +1,7 @@ - + + diff --git a/Advanced-Audio-Android/custom-recorder/src/test/java/io/agora/advancedaudio/ExampleUnitTest.java b/Advanced-Audio-Android/custom-recorder/src/test/java/io/agora/advancedaudio/ExampleUnitTest.java new file mode 100644 index 0000000..307c9fb --- /dev/null +++ b/Advanced-Audio-Android/custom-recorder/src/test/java/io/agora/advancedaudio/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package io.agora.advancedaudio; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/Advanced-Audio-Android/settings.gradle b/Advanced-Audio-Android/settings.gradle index e374cad..f013a6f 100644 --- a/Advanced-Audio-Android/settings.gradle +++ b/Advanced-Audio-Android/settings.gradle @@ -1,2 +1,2 @@ -include ':app' +include ':component', ':custom-recorder' rootProject.name='Advanced-Audio-Android' From 64756aea95b539e3742a490f864766a6ee36cfeb Mon Sep 17 00:00:00 2001 From: brianxcli Date: Mon, 16 Dec 2019 16:37:39 +0800 Subject: [PATCH 03/15] global default audio configuration & recording error printing --- .../CustomRecorderActivity.java | 15 +++++++- .../customrecorder/CustomRecorderConfig.java | 27 ++++++++------ .../customrecorder/CustomRecorderService.java | 36 +++++++++++++------ 3 files changed, 55 insertions(+), 23 deletions(-) diff --git a/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderActivity.java b/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderActivity.java index 6ddc48f..50ec2e9 100644 --- a/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderActivity.java +++ b/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderActivity.java @@ -31,8 +31,21 @@ private void joinChannel() { String channelName = getIntent(). getStringExtra(Constants.KEY_CHANNEL_NAME); rtcEngine().setClientRole(io.agora.rtc.Constants.CLIENT_ROLE_BROADCASTER); + + // Notify the Rtc Engine that we want to use external + // audio sources, instead of creating a recorder inside + // the engine. + // This must be called before joining a channel. So + // there must be a way to obtain the recording + // parameters globally. + // Here we take the default recording configuration + // as an example. Developers should implement the + // mechanism of their own. + CustomRecorderConfig config = + CustomRecorderConfig.createDefaultConfig(); rtcEngine().setExternalAudioSource(true, - CustomRecorderConfig.DEFAULT_SAMPLE_RATE, 1); + config.getSampleRate(), + config.getChannelCount()); rtcEngine().joinChannel(null, channelName, null, 0); } diff --git a/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderConfig.java b/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderConfig.java index bc86ef4..cc04ae5 100644 --- a/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderConfig.java +++ b/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderConfig.java @@ -4,13 +4,15 @@ import android.media.AudioRecord; class CustomRecorderConfig { - public static final int DEFAULT_SAMPLE_RATE = 16000; + static final int DEFAULT_SAMPLE_RATE = 16000; private int mSampleRate; private int mChannelCount; private int mAudioFormat; private int mBufferSize; + private static CustomRecorderConfig sDefaultConfig; + int getSampleRate() { return mSampleRate; } @@ -52,15 +54,18 @@ void setBufferSize(int mBufferSize) { * @return */ static CustomRecorderConfig createDefaultConfig() { - CustomRecorderConfig config = new CustomRecorderConfig(); - config.setSampleRate(DEFAULT_SAMPLE_RATE); - config.setChannelCount(AudioFormat.CHANNEL_IN_MONO); - config.setAudioFormat(AudioFormat.ENCODING_PCM_16BIT); - int bufSize = AudioRecord.getMinBufferSize( - config.getSampleRate(), - config.getChannelCount(), - config.getAudioFormat()); - config.setBufferSize(bufSize * 2); - return config; + if (sDefaultConfig == null) { + sDefaultConfig = new CustomRecorderConfig(); + sDefaultConfig.setSampleRate(DEFAULT_SAMPLE_RATE); + sDefaultConfig.setChannelCount(AudioFormat.CHANNEL_IN_MONO); + sDefaultConfig.setAudioFormat(AudioFormat.ENCODING_PCM_16BIT); + int bufSize = AudioRecord.getMinBufferSize( + sDefaultConfig.getSampleRate(), + sDefaultConfig.getChannelCount(), + sDefaultConfig.getAudioFormat()); + sDefaultConfig.setBufferSize(bufSize * 2); + } + + return sDefaultConfig; } } diff --git a/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderService.java b/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderService.java index c935ef1..e8eeb45 100644 --- a/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderService.java +++ b/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderService.java @@ -6,8 +6,10 @@ import android.app.PendingIntent; import android.app.Service; import android.content.Intent; +import android.media.AudioRecord; import android.os.Build; import android.os.IBinder; +import android.util.Log; import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; @@ -83,7 +85,6 @@ public void onDestroy() { } private class RecordThread extends Thread { - private static final int RECORD_WAIT = 20; private CustomRecorder mRecorder; private byte[] mBuffer; @@ -96,22 +97,35 @@ private class RecordThread extends Thread { @Override public void run() { mRecorder.start(); - while (!mStopped) { - int size = mRecorder.read(mBuffer, 0, mBuffer.length); - rtcEngine().pushExternalAudioFrame( - mBuffer, System.currentTimeMillis()); - // sleepForNextConsume(); + int result = mRecorder.read(mBuffer, 0, mBuffer.length); + if (result >= 0) { + rtcEngine().pushExternalAudioFrame( + mBuffer, System.currentTimeMillis()); + } else { + logRecordError(result); + } } release(); } - void sleepForNextConsume() { - try { - Thread.sleep(RECORD_WAIT); - } catch (InterruptedException e) { - e.printStackTrace(); + private void logRecordError(int error) { + String message = ""; + switch (error) { + case AudioRecord.ERROR: + message = "generic operation failure"; + break; + case AudioRecord.ERROR_BAD_VALUE: + message = "failure due to the use of an invalid value"; + break; + case AudioRecord.ERROR_DEAD_OBJECT: + message = "object is no longer valid and needs to be recreated"; + break; + case AudioRecord.ERROR_INVALID_OPERATION: + message = "failure due to the improper use of method"; + break; } + Log.e(TAG, message); } private void release() { From 4acdb932343f5b0e1f3c2ae7161c0b192c6f8bf1 Mon Sep 17 00:00:00 2001 From: brianxcli Date: Mon, 16 Dec 2019 16:55:50 +0800 Subject: [PATCH 04/15] global default audio configuration & fix error --- .../customrecorder/CustomRecorder.java | 2 +- .../CustomRecorderActivity.java | 2 +- .../customrecorder/CustomRecorderConfig.java | 32 ++++++++++++++----- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorder.java b/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorder.java index 9a59e55..658636c 100644 --- a/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorder.java +++ b/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorder.java @@ -8,7 +8,7 @@ class CustomRecorder { private CustomRecorderConfig mConfig; CustomRecorder() { - mConfig = CustomRecorderConfig.createDefaultConfig(); + mConfig = CustomRecorderConfig.getDefaultConfig(); mAudioRecord = new AudioRecord( MediaRecorder.AudioSource.MIC, mConfig.getSampleRate(), diff --git a/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderActivity.java b/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderActivity.java index 50ec2e9..2e1e918 100644 --- a/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderActivity.java +++ b/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderActivity.java @@ -42,7 +42,7 @@ private void joinChannel() { // as an example. Developers should implement the // mechanism of their own. CustomRecorderConfig config = - CustomRecorderConfig.createDefaultConfig(); + CustomRecorderConfig.getDefaultConfig(); rtcEngine().setExternalAudioSource(true, config.getSampleRate(), config.getChannelCount()); diff --git a/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderConfig.java b/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderConfig.java index cc04ae5..4d2701d 100644 --- a/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderConfig.java +++ b/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderConfig.java @@ -4,10 +4,10 @@ import android.media.AudioRecord; class CustomRecorderConfig { - static final int DEFAULT_SAMPLE_RATE = 16000; + private static final int DEFAULT_SAMPLE_RATE = 16000; private int mSampleRate; - private int mChannelCount; + private int mChannel; private int mAudioFormat; private int mBufferSize; @@ -22,11 +22,27 @@ void setSampleRate(int mSampleRate) { } int getChannelCount() { - return mChannelCount; + switch (mChannel) { + case AudioFormat.CHANNEL_IN_MONO: + return 1; + case AudioFormat.CHANNEL_IN_STEREO: + return 2; + default: + return 0; + } } - void setChannelCount(int mChannelCount) { - this.mChannelCount = mChannelCount; + /** + * Set audio channel count + * @param channel One of AudioFormat.CHANNEL_IN_MONO + * or AudioFormat.CHANNEL_IN_STEREO + */ + void setChannel(int channel) { + mChannel = channel; + } + + int getChannelType() { + return mChannel; } int getAudioFormat() { @@ -53,15 +69,15 @@ void setBufferSize(int mBufferSize) { * 4) Buffer size: twice the minimum buffer size * @return */ - static CustomRecorderConfig createDefaultConfig() { + static CustomRecorderConfig getDefaultConfig() { if (sDefaultConfig == null) { sDefaultConfig = new CustomRecorderConfig(); sDefaultConfig.setSampleRate(DEFAULT_SAMPLE_RATE); - sDefaultConfig.setChannelCount(AudioFormat.CHANNEL_IN_MONO); + sDefaultConfig.setChannel(AudioFormat.CHANNEL_IN_MONO); sDefaultConfig.setAudioFormat(AudioFormat.ENCODING_PCM_16BIT); int bufSize = AudioRecord.getMinBufferSize( sDefaultConfig.getSampleRate(), - sDefaultConfig.getChannelCount(), + sDefaultConfig.getChannelType(), sDefaultConfig.getAudioFormat()); sDefaultConfig.setBufferSize(bufSize * 2); } From 878d6a6acd110ba6daddfba8dbe32fb202535fa0 Mon Sep 17 00:00:00 2001 From: brianxcli Date: Mon, 16 Dec 2019 18:18:29 +0800 Subject: [PATCH 05/15] name change --- .../{app => component}/src/main/res/values/strings_config.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename Advanced-Audio-Android/{app => component}/src/main/res/values/strings_config.xml (74%) diff --git a/Advanced-Audio-Android/app/src/main/res/values/strings_config.xml b/Advanced-Audio-Android/component/src/main/res/values/strings_config.xml similarity index 74% rename from Advanced-Audio-Android/app/src/main/res/values/strings_config.xml rename to Advanced-Audio-Android/component/src/main/res/values/strings_config.xml index 530ef60..0519354 100644 --- a/Advanced-Audio-Android/app/src/main/res/values/strings_config.xml +++ b/Advanced-Audio-Android/component/src/main/res/values/strings_config.xml @@ -2,10 +2,10 @@ - <#YOUR APP ID#> + ce8673eb931840dbbe7fd3848ebc037f - <#YOUR ACCESS TOKEN#> + From d81f278d48b9106a224111ba84a4d5b0922617a9 Mon Sep 17 00:00:00 2001 From: brianxcli Date: Mon, 16 Dec 2019 19:24:07 +0800 Subject: [PATCH 06/15] delete files & update string config --- Advanced-Audio-Android/app/.gitignore | 1 - .../app/src/main/res/layout/activity_main.xml | 72 ------------------- .../src/main/res/values/strings_config.xml | 5 +- 3 files changed, 2 insertions(+), 76 deletions(-) delete mode 100644 Advanced-Audio-Android/app/.gitignore delete mode 100644 Advanced-Audio-Android/app/src/main/res/layout/activity_main.xml diff --git a/Advanced-Audio-Android/app/.gitignore b/Advanced-Audio-Android/app/.gitignore deleted file mode 100644 index 796b96d..0000000 --- a/Advanced-Audio-Android/app/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/Advanced-Audio-Android/app/src/main/res/layout/activity_main.xml b/Advanced-Audio-Android/app/src/main/res/layout/activity_main.xml deleted file mode 100644 index 7e33c5d..0000000 --- a/Advanced-Audio-Android/app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - diff --git a/Advanced-Audio-Android/component/src/main/res/values/strings_config.xml b/Advanced-Audio-Android/component/src/main/res/values/strings_config.xml index 0519354..9b04438 100644 --- a/Advanced-Audio-Android/component/src/main/res/values/strings_config.xml +++ b/Advanced-Audio-Android/component/src/main/res/values/strings_config.xml @@ -2,10 +2,9 @@ - ce8673eb931840dbbe7fd3848ebc037f + <#YOUR APP ID#> - - + <#YOUR ACCESS TOKEN#> From 1f6d4fb231bb73e20cf5e893de040d58120ce7fc Mon Sep 17 00:00:00 2001 From: brianxcli Date: Mon, 16 Dec 2019 19:24:32 +0800 Subject: [PATCH 07/15] add azure ci --- Advanced-Audio-Android/azure-pipelines.yml | 14 ++++++++ .../build-template/build-android.yml | 34 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 Advanced-Audio-Android/azure-pipelines.yml create mode 100644 Advanced-Audio-Android/build-template/build-android.yml diff --git a/Advanced-Audio-Android/azure-pipelines.yml b/Advanced-Audio-Android/azure-pipelines.yml new file mode 100644 index 0000000..7ec6fc0 --- /dev/null +++ b/Advanced-Audio-Android/azure-pipelines.yml @@ -0,0 +1,14 @@ +trigger: +- master +- dev/3.1.0_android_ci + +pool: + vmImage: 'macos-latest' + +jobs: + +- template: Advanced-Audio-Android/build-template/build-android.yml + parameters: + project: 'Advanced-Audio-Android' + module: 'custom-recorder' + name: 'CustomRecorder' \ No newline at end of file diff --git a/Advanced-Audio-Android/build-template/build-android.yml b/Advanced-Audio-Android/build-template/build-android.yml new file mode 100644 index 0000000..e92da54 --- /dev/null +++ b/Advanced-Audio-Android/build-template/build-android.yml @@ -0,0 +1,34 @@ +parameters: + project: '' + module: '' + name: '' + +jobs: + +- job: ${{ parameters.name }}_Build + displayName: ${{ parameters.mame }} + pool: + vmImage: 'macos-latest' + steps: + - script: cd ${{ parameters.project }} && ls && python ci.env.py + env: + AGORA_APP_ID: $(agora.appId) + + - task: Gradle@2 + inputs: + workingDirectory: ${{ parameters.project }}/${{ parameters.module }} + gradleWrapperFile: ${{ parameters.project }}/gradlew + gradleOptions: '-Xmx3072m' + publishJUnitResults: false + testResultsFiles: '**/TEST-*.xml' + tasks: 'assembleDebug' + + - task: CopyFiles@2 + inputs: + Contents: '**/*.apk' + TargetFolder: '$(Build.ArtifactStagingDirectory)' + + - task: PublishBuildArtifacts@1 + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)' + ArtifactName: ${{ parameters.name }} \ No newline at end of file From 1f977ddc188a9795d50f0d3e17f4b03130596697 Mon Sep 17 00:00:00 2001 From: brianxcli Date: Mon, 16 Dec 2019 19:28:03 +0800 Subject: [PATCH 08/15] move ci script --- Advanced-Audio-Android/azure-pipelines.yml => azure-pipelines.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Advanced-Audio-Android/azure-pipelines.yml => azure-pipelines.yml (100%) diff --git a/Advanced-Audio-Android/azure-pipelines.yml b/azure-pipelines.yml similarity index 100% rename from Advanced-Audio-Android/azure-pipelines.yml rename to azure-pipelines.yml From 55b69f0c842fc7cf529dc155a6d9ed15982c2fac Mon Sep 17 00:00:00 2001 From: brianxcli Date: Mon, 16 Dec 2019 19:32:32 +0800 Subject: [PATCH 09/15] add azure ci command --- Advanced-Audio-Android/ci.env.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Advanced-Audio-Android/ci.env.py diff --git a/Advanced-Audio-Android/ci.env.py b/Advanced-Audio-Android/ci.env.py new file mode 100644 index 0000000..f9c6fcc --- /dev/null +++ b/Advanced-Audio-Android/ci.env.py @@ -0,0 +1,22 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +import re +import os + +def main(): + appId = "" + if "AGORA_APP_ID" in os.environ: + appId = os.environ["AGORA_APP_ID"] + token = "" + + f = open("./component/src/main/res/values/strings_config.xml", 'r+') + content = f.read() + contentNew = re.sub(r'<#YOUR APP ID#>', appId, content) + contentNew = re.sub(r'<#YOUR ACCESS TOKEN#>', token, contentNew) + f.seek(0) + f.write(contentNew) + f.truncate() + + +if __name__ == "__main__": + main() \ No newline at end of file From b5ad349e26ee3398c1838abae29380d2b1a3f727 Mon Sep 17 00:00:00 2001 From: brianxcli Date: Mon, 16 Dec 2019 19:35:01 +0800 Subject: [PATCH 10/15] rename parameter --- .../src/main/java/io/agora/advancedaudio/AgoraApplication.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/AgoraApplication.java b/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/AgoraApplication.java index 10e749a..d77bb74 100644 --- a/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/AgoraApplication.java +++ b/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/AgoraApplication.java @@ -16,7 +16,7 @@ public class AgoraApplication extends Application { public void onCreate() { super.onCreate(); try { - mRtcEngine = RtcEngine.create(getApplicationContext(), getString(R.string.private_app_id), mHandler); + mRtcEngine = RtcEngine.create(getApplicationContext(), getString(R.string.agora_app_id), mHandler); mRtcEngine.setChannelProfile(io.agora.rtc.Constants.CHANNEL_PROFILE_LIVE_BROADCASTING); mRtcEngine.setLogFile(FileUtil.initializeLogFile(this)); } catch (Exception e) { From a5b1cb244b01d3730fca2510042b93c3cc3c5d05 Mon Sep 17 00:00:00 2001 From: brianxcli Date: Mon, 16 Dec 2019 20:36:06 +0800 Subject: [PATCH 11/15] declare to use Azure variables --- azure-pipelines.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 7ec6fc0..2e5078b 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -5,6 +5,9 @@ trigger: pool: vmImage: 'macos-latest' +variables: +- group: AgoraKeys + jobs: - template: Advanced-Audio-Android/build-template/build-android.yml From 55d33f2f940a3fffede8ed10b70098776e40d59f Mon Sep 17 00:00:00 2001 From: Xiaochen Li Date: Tue, 17 Dec 2019 12:14:40 +0800 Subject: [PATCH 12/15] Update azure-pipelines.yml for Azure Pipelines --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 2e5078b..ec434f9 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1,6 +1,6 @@ trigger: - master -- dev/3.1.0_android_ci +- dev/* pool: vmImage: 'macos-latest' From 6f422a119a1b6613682d6f1b63a22fb8c5b22196 Mon Sep 17 00:00:00 2001 From: Xiaochen Li Date: Tue, 17 Dec 2019 13:34:41 +0800 Subject: [PATCH 13/15] Update azure-pipelines.yml for Azure Pipelines --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index ec434f9..e7c25b9 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -10,7 +10,7 @@ variables: jobs: -- template: Advanced-Audio-Android/build-template/build-android.yml +- template: Advanced-Audio-Android/build-templates/build-android.yml parameters: project: 'Advanced-Audio-Android' module: 'custom-recorder' From 0e31bf61c8a6a7b140275f8a952250fe9c5d16ad Mon Sep 17 00:00:00 2001 From: Xiaochen Li Date: Tue, 17 Dec 2019 13:36:04 +0800 Subject: [PATCH 14/15] Update azure-pipelines.yml for Azure Pipelines --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index e7c25b9..ec434f9 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -10,7 +10,7 @@ variables: jobs: -- template: Advanced-Audio-Android/build-templates/build-android.yml +- template: Advanced-Audio-Android/build-template/build-android.yml parameters: project: 'Advanced-Audio-Android' module: 'custom-recorder' From 319237050b7a135f82d913726ddd4e4e4466511a Mon Sep 17 00:00:00 2001 From: brianxcli Date: Thu, 26 Dec 2019 16:46:13 +0800 Subject: [PATCH 15/15] change module names --- Advanced-Audio-Android/ci.env.py | 2 +- .../{component => lib-component}/build.gradle | 0 .../{component => lib-component}/proguard-rules.pro | 0 .../advancedaudio/ExampleInstrumentedTest.java | 0 .../src/main/AndroidManifest.xml | 0 .../io/agora/advancedaudio/AgoraApplication.java | 0 .../main/java/io/agora/advancedaudio/Constants.java | 0 .../component/activities/BaseActivity.java | 0 .../component/activities/MainActivity.java | 0 .../component/annotations/DisplayActivity.java | 0 .../component/rtc/AgoraEventHandler.java | 0 .../advancedaudio/component/rtc/EventHandler.java | 0 .../advancedaudio/component/utils/FileUtil.java | 0 .../advancedaudio/component/utils/WindowUtil.java | 0 .../main/res/color/start_broadcast_text_color.xml | 0 .../main/res/drawable-xxhdpi/live_room_bg_logo.png | Bin .../src/main/res/drawable-xxhdpi/main_logo.png | Bin .../main/res/drawable/ic_launcher_background.xml | 0 .../src/main/res/drawable/main_background.xml | 0 .../src/main/res/drawable/start_broadcast_bg.xml | 0 .../res/drawable/start_broadcast_bg_clicked.xml | 0 .../main/res/drawable/start_broadcast_bg_normal.xml | 0 .../src/main/res/layout/activity_main.xml | 0 .../src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher_round.png | Bin .../src/main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher_round.png | Bin .../src/main/res/values-zh/strings.xml | 0 .../src/main/res/values/colors.xml | 0 .../src/main/res/values/dimens.xml | 0 .../src/main/res/values/strings.xml | 0 .../src/main/res/values/strings_config.xml | 0 .../src/main/res/values/styles.xml | 0 .../io/agora/advancedaudio/ExampleUnitTest.java | 0 .../.gitignore | 0 .../build.gradle | 2 +- .../proguard-rules.pro | 0 .../advancedaudio/ExampleInstrumentedTest.java | 0 .../src/main/AndroidManifest.xml | 0 .../customrecorder/CustomRecorder.java | 0 .../customrecorder/CustomRecorderActivity.java | 0 .../customrecorder/CustomRecorderConfig.java | 0 .../customrecorder/CustomRecorderService.java | 0 .../main/res/drawable-xxhdpi/btn_audio_disabled.png | Bin .../main/res/drawable-xxhdpi/btn_audio_enabled.png | Bin .../src/main/res/drawable-xxhdpi/btn_leave.png | Bin .../main/res/drawable-xxhdpi/live_room_bg_logo.png | Bin .../src/main/res/drawable/btn_mute_audio.xml | 0 .../main/res/drawable/ic_launcher_background.xml | 0 .../src/main/res/drawable/live_room_bg.xml | 0 .../res/drawable/rounded_bg_full_transparent.xml | 0 .../res/drawable/rounded_bg_half_transparent.xml | 0 .../src/main/res/layout/activity_audio_room.xml | 0 .../src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher_round.png | Bin .../src/main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher_round.png | Bin .../src/main/res/values-zh/strings.xml | 0 .../src/main/res/values/colors.xml | 0 .../src/main/res/values/dimens.xml | 0 .../src/main/res/values/strings.xml | 0 .../src/main/res/values/styles.xml | 0 .../io/agora/advancedaudio/ExampleUnitTest.java | 0 Advanced-Audio-Android/settings.gradle | 2 +- azure-pipelines.yml | 2 +- 65 files changed, 4 insertions(+), 4 deletions(-) rename Advanced-Audio-Android/{component => lib-component}/build.gradle (100%) rename Advanced-Audio-Android/{component => lib-component}/proguard-rules.pro (100%) rename Advanced-Audio-Android/{component => lib-component}/src/androidTest/java/io/agora/advancedaudio/ExampleInstrumentedTest.java (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/AndroidManifest.xml (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/java/io/agora/advancedaudio/AgoraApplication.java (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/java/io/agora/advancedaudio/Constants.java (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/java/io/agora/advancedaudio/component/activities/BaseActivity.java (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/java/io/agora/advancedaudio/component/activities/MainActivity.java (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/java/io/agora/advancedaudio/component/annotations/DisplayActivity.java (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/java/io/agora/advancedaudio/component/rtc/AgoraEventHandler.java (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/java/io/agora/advancedaudio/component/rtc/EventHandler.java (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/java/io/agora/advancedaudio/component/utils/FileUtil.java (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/java/io/agora/advancedaudio/component/utils/WindowUtil.java (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/res/color/start_broadcast_text_color.xml (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/res/drawable-xxhdpi/live_room_bg_logo.png (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/res/drawable-xxhdpi/main_logo.png (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/res/drawable/ic_launcher_background.xml (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/res/drawable/main_background.xml (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/res/drawable/start_broadcast_bg.xml (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/res/drawable/start_broadcast_bg_clicked.xml (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/res/drawable/start_broadcast_bg_normal.xml (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/res/layout/activity_main.xml (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/res/mipmap-xxhdpi/ic_launcher_round.png (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/res/values-zh/strings.xml (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/res/values/colors.xml (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/res/values/dimens.xml (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/res/values/strings.xml (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/res/values/strings_config.xml (100%) rename Advanced-Audio-Android/{component => lib-component}/src/main/res/values/styles.xml (100%) rename Advanced-Audio-Android/{component => lib-component}/src/test/java/io/agora/advancedaudio/ExampleUnitTest.java (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/.gitignore (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/build.gradle (94%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/proguard-rules.pro (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/androidTest/java/io/agora/advancedaudio/ExampleInstrumentedTest.java (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/AndroidManifest.xml (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorder.java (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderActivity.java (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderConfig.java (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderService.java (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/res/drawable-xxhdpi/btn_audio_disabled.png (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/res/drawable-xxhdpi/btn_audio_enabled.png (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/res/drawable-xxhdpi/btn_leave.png (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/res/drawable-xxhdpi/live_room_bg_logo.png (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/res/drawable/btn_mute_audio.xml (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/res/drawable/ic_launcher_background.xml (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/res/drawable/live_room_bg.xml (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/res/drawable/rounded_bg_full_transparent.xml (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/res/drawable/rounded_bg_half_transparent.xml (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/res/layout/activity_audio_room.xml (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/res/mipmap-xxhdpi/ic_launcher_round.png (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/res/values-zh/strings.xml (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/res/values/colors.xml (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/res/values/dimens.xml (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/res/values/strings.xml (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/main/res/values/styles.xml (100%) rename Advanced-Audio-Android/{custom-recorder => sample-custom-recorder}/src/test/java/io/agora/advancedaudio/ExampleUnitTest.java (100%) diff --git a/Advanced-Audio-Android/ci.env.py b/Advanced-Audio-Android/ci.env.py index f9c6fcc..8c1a2dd 100644 --- a/Advanced-Audio-Android/ci.env.py +++ b/Advanced-Audio-Android/ci.env.py @@ -9,7 +9,7 @@ def main(): appId = os.environ["AGORA_APP_ID"] token = "" - f = open("./component/src/main/res/values/strings_config.xml", 'r+') + f = open("./lib-component/src/main/res/values/strings_config.xml", 'r+') content = f.read() contentNew = re.sub(r'<#YOUR APP ID#>', appId, content) contentNew = re.sub(r'<#YOUR ACCESS TOKEN#>', token, contentNew) diff --git a/Advanced-Audio-Android/component/build.gradle b/Advanced-Audio-Android/lib-component/build.gradle similarity index 100% rename from Advanced-Audio-Android/component/build.gradle rename to Advanced-Audio-Android/lib-component/build.gradle diff --git a/Advanced-Audio-Android/component/proguard-rules.pro b/Advanced-Audio-Android/lib-component/proguard-rules.pro similarity index 100% rename from Advanced-Audio-Android/component/proguard-rules.pro rename to Advanced-Audio-Android/lib-component/proguard-rules.pro diff --git a/Advanced-Audio-Android/component/src/androidTest/java/io/agora/advancedaudio/ExampleInstrumentedTest.java b/Advanced-Audio-Android/lib-component/src/androidTest/java/io/agora/advancedaudio/ExampleInstrumentedTest.java similarity index 100% rename from Advanced-Audio-Android/component/src/androidTest/java/io/agora/advancedaudio/ExampleInstrumentedTest.java rename to Advanced-Audio-Android/lib-component/src/androidTest/java/io/agora/advancedaudio/ExampleInstrumentedTest.java diff --git a/Advanced-Audio-Android/component/src/main/AndroidManifest.xml b/Advanced-Audio-Android/lib-component/src/main/AndroidManifest.xml similarity index 100% rename from Advanced-Audio-Android/component/src/main/AndroidManifest.xml rename to Advanced-Audio-Android/lib-component/src/main/AndroidManifest.xml diff --git a/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/AgoraApplication.java b/Advanced-Audio-Android/lib-component/src/main/java/io/agora/advancedaudio/AgoraApplication.java similarity index 100% rename from Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/AgoraApplication.java rename to Advanced-Audio-Android/lib-component/src/main/java/io/agora/advancedaudio/AgoraApplication.java diff --git a/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/Constants.java b/Advanced-Audio-Android/lib-component/src/main/java/io/agora/advancedaudio/Constants.java similarity index 100% rename from Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/Constants.java rename to Advanced-Audio-Android/lib-component/src/main/java/io/agora/advancedaudio/Constants.java diff --git a/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/activities/BaseActivity.java b/Advanced-Audio-Android/lib-component/src/main/java/io/agora/advancedaudio/component/activities/BaseActivity.java similarity index 100% rename from Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/activities/BaseActivity.java rename to Advanced-Audio-Android/lib-component/src/main/java/io/agora/advancedaudio/component/activities/BaseActivity.java diff --git a/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/activities/MainActivity.java b/Advanced-Audio-Android/lib-component/src/main/java/io/agora/advancedaudio/component/activities/MainActivity.java similarity index 100% rename from Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/activities/MainActivity.java rename to Advanced-Audio-Android/lib-component/src/main/java/io/agora/advancedaudio/component/activities/MainActivity.java diff --git a/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/annotations/DisplayActivity.java b/Advanced-Audio-Android/lib-component/src/main/java/io/agora/advancedaudio/component/annotations/DisplayActivity.java similarity index 100% rename from Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/annotations/DisplayActivity.java rename to Advanced-Audio-Android/lib-component/src/main/java/io/agora/advancedaudio/component/annotations/DisplayActivity.java diff --git a/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/rtc/AgoraEventHandler.java b/Advanced-Audio-Android/lib-component/src/main/java/io/agora/advancedaudio/component/rtc/AgoraEventHandler.java similarity index 100% rename from Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/rtc/AgoraEventHandler.java rename to Advanced-Audio-Android/lib-component/src/main/java/io/agora/advancedaudio/component/rtc/AgoraEventHandler.java diff --git a/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/rtc/EventHandler.java b/Advanced-Audio-Android/lib-component/src/main/java/io/agora/advancedaudio/component/rtc/EventHandler.java similarity index 100% rename from Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/rtc/EventHandler.java rename to Advanced-Audio-Android/lib-component/src/main/java/io/agora/advancedaudio/component/rtc/EventHandler.java diff --git a/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/utils/FileUtil.java b/Advanced-Audio-Android/lib-component/src/main/java/io/agora/advancedaudio/component/utils/FileUtil.java similarity index 100% rename from Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/utils/FileUtil.java rename to Advanced-Audio-Android/lib-component/src/main/java/io/agora/advancedaudio/component/utils/FileUtil.java diff --git a/Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/utils/WindowUtil.java b/Advanced-Audio-Android/lib-component/src/main/java/io/agora/advancedaudio/component/utils/WindowUtil.java similarity index 100% rename from Advanced-Audio-Android/component/src/main/java/io/agora/advancedaudio/component/utils/WindowUtil.java rename to Advanced-Audio-Android/lib-component/src/main/java/io/agora/advancedaudio/component/utils/WindowUtil.java diff --git a/Advanced-Audio-Android/component/src/main/res/color/start_broadcast_text_color.xml b/Advanced-Audio-Android/lib-component/src/main/res/color/start_broadcast_text_color.xml similarity index 100% rename from Advanced-Audio-Android/component/src/main/res/color/start_broadcast_text_color.xml rename to Advanced-Audio-Android/lib-component/src/main/res/color/start_broadcast_text_color.xml diff --git a/Advanced-Audio-Android/component/src/main/res/drawable-xxhdpi/live_room_bg_logo.png b/Advanced-Audio-Android/lib-component/src/main/res/drawable-xxhdpi/live_room_bg_logo.png similarity index 100% rename from Advanced-Audio-Android/component/src/main/res/drawable-xxhdpi/live_room_bg_logo.png rename to Advanced-Audio-Android/lib-component/src/main/res/drawable-xxhdpi/live_room_bg_logo.png diff --git a/Advanced-Audio-Android/component/src/main/res/drawable-xxhdpi/main_logo.png b/Advanced-Audio-Android/lib-component/src/main/res/drawable-xxhdpi/main_logo.png similarity index 100% rename from Advanced-Audio-Android/component/src/main/res/drawable-xxhdpi/main_logo.png rename to Advanced-Audio-Android/lib-component/src/main/res/drawable-xxhdpi/main_logo.png diff --git a/Advanced-Audio-Android/component/src/main/res/drawable/ic_launcher_background.xml b/Advanced-Audio-Android/lib-component/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from Advanced-Audio-Android/component/src/main/res/drawable/ic_launcher_background.xml rename to Advanced-Audio-Android/lib-component/src/main/res/drawable/ic_launcher_background.xml diff --git a/Advanced-Audio-Android/component/src/main/res/drawable/main_background.xml b/Advanced-Audio-Android/lib-component/src/main/res/drawable/main_background.xml similarity index 100% rename from Advanced-Audio-Android/component/src/main/res/drawable/main_background.xml rename to Advanced-Audio-Android/lib-component/src/main/res/drawable/main_background.xml diff --git a/Advanced-Audio-Android/component/src/main/res/drawable/start_broadcast_bg.xml b/Advanced-Audio-Android/lib-component/src/main/res/drawable/start_broadcast_bg.xml similarity index 100% rename from Advanced-Audio-Android/component/src/main/res/drawable/start_broadcast_bg.xml rename to Advanced-Audio-Android/lib-component/src/main/res/drawable/start_broadcast_bg.xml diff --git a/Advanced-Audio-Android/component/src/main/res/drawable/start_broadcast_bg_clicked.xml b/Advanced-Audio-Android/lib-component/src/main/res/drawable/start_broadcast_bg_clicked.xml similarity index 100% rename from Advanced-Audio-Android/component/src/main/res/drawable/start_broadcast_bg_clicked.xml rename to Advanced-Audio-Android/lib-component/src/main/res/drawable/start_broadcast_bg_clicked.xml diff --git a/Advanced-Audio-Android/component/src/main/res/drawable/start_broadcast_bg_normal.xml b/Advanced-Audio-Android/lib-component/src/main/res/drawable/start_broadcast_bg_normal.xml similarity index 100% rename from Advanced-Audio-Android/component/src/main/res/drawable/start_broadcast_bg_normal.xml rename to Advanced-Audio-Android/lib-component/src/main/res/drawable/start_broadcast_bg_normal.xml diff --git a/Advanced-Audio-Android/component/src/main/res/layout/activity_main.xml b/Advanced-Audio-Android/lib-component/src/main/res/layout/activity_main.xml similarity index 100% rename from Advanced-Audio-Android/component/src/main/res/layout/activity_main.xml rename to Advanced-Audio-Android/lib-component/src/main/res/layout/activity_main.xml diff --git a/Advanced-Audio-Android/component/src/main/res/mipmap-xxhdpi/ic_launcher.png b/Advanced-Audio-Android/lib-component/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from Advanced-Audio-Android/component/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to Advanced-Audio-Android/lib-component/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/Advanced-Audio-Android/component/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/Advanced-Audio-Android/lib-component/src/main/res/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from Advanced-Audio-Android/component/src/main/res/mipmap-xxhdpi/ic_launcher_round.png rename to Advanced-Audio-Android/lib-component/src/main/res/mipmap-xxhdpi/ic_launcher_round.png diff --git a/Advanced-Audio-Android/component/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/Advanced-Audio-Android/lib-component/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from Advanced-Audio-Android/component/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to Advanced-Audio-Android/lib-component/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/Advanced-Audio-Android/component/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/Advanced-Audio-Android/lib-component/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from Advanced-Audio-Android/component/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png rename to Advanced-Audio-Android/lib-component/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/Advanced-Audio-Android/component/src/main/res/values-zh/strings.xml b/Advanced-Audio-Android/lib-component/src/main/res/values-zh/strings.xml similarity index 100% rename from Advanced-Audio-Android/component/src/main/res/values-zh/strings.xml rename to Advanced-Audio-Android/lib-component/src/main/res/values-zh/strings.xml diff --git a/Advanced-Audio-Android/component/src/main/res/values/colors.xml b/Advanced-Audio-Android/lib-component/src/main/res/values/colors.xml similarity index 100% rename from Advanced-Audio-Android/component/src/main/res/values/colors.xml rename to Advanced-Audio-Android/lib-component/src/main/res/values/colors.xml diff --git a/Advanced-Audio-Android/component/src/main/res/values/dimens.xml b/Advanced-Audio-Android/lib-component/src/main/res/values/dimens.xml similarity index 100% rename from Advanced-Audio-Android/component/src/main/res/values/dimens.xml rename to Advanced-Audio-Android/lib-component/src/main/res/values/dimens.xml diff --git a/Advanced-Audio-Android/component/src/main/res/values/strings.xml b/Advanced-Audio-Android/lib-component/src/main/res/values/strings.xml similarity index 100% rename from Advanced-Audio-Android/component/src/main/res/values/strings.xml rename to Advanced-Audio-Android/lib-component/src/main/res/values/strings.xml diff --git a/Advanced-Audio-Android/component/src/main/res/values/strings_config.xml b/Advanced-Audio-Android/lib-component/src/main/res/values/strings_config.xml similarity index 100% rename from Advanced-Audio-Android/component/src/main/res/values/strings_config.xml rename to Advanced-Audio-Android/lib-component/src/main/res/values/strings_config.xml diff --git a/Advanced-Audio-Android/component/src/main/res/values/styles.xml b/Advanced-Audio-Android/lib-component/src/main/res/values/styles.xml similarity index 100% rename from Advanced-Audio-Android/component/src/main/res/values/styles.xml rename to Advanced-Audio-Android/lib-component/src/main/res/values/styles.xml diff --git a/Advanced-Audio-Android/component/src/test/java/io/agora/advancedaudio/ExampleUnitTest.java b/Advanced-Audio-Android/lib-component/src/test/java/io/agora/advancedaudio/ExampleUnitTest.java similarity index 100% rename from Advanced-Audio-Android/component/src/test/java/io/agora/advancedaudio/ExampleUnitTest.java rename to Advanced-Audio-Android/lib-component/src/test/java/io/agora/advancedaudio/ExampleUnitTest.java diff --git a/Advanced-Audio-Android/custom-recorder/.gitignore b/Advanced-Audio-Android/sample-custom-recorder/.gitignore similarity index 100% rename from Advanced-Audio-Android/custom-recorder/.gitignore rename to Advanced-Audio-Android/sample-custom-recorder/.gitignore diff --git a/Advanced-Audio-Android/custom-recorder/build.gradle b/Advanced-Audio-Android/sample-custom-recorder/build.gradle similarity index 94% rename from Advanced-Audio-Android/custom-recorder/build.gradle rename to Advanced-Audio-Android/sample-custom-recorder/build.gradle index 044cb40..37fcfea 100644 --- a/Advanced-Audio-Android/custom-recorder/build.gradle +++ b/Advanced-Audio-Android/sample-custom-recorder/build.gradle @@ -31,5 +31,5 @@ dependencies { testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - implementation project(path: ':component') + implementation project(path: ':lib-component') } diff --git a/Advanced-Audio-Android/custom-recorder/proguard-rules.pro b/Advanced-Audio-Android/sample-custom-recorder/proguard-rules.pro similarity index 100% rename from Advanced-Audio-Android/custom-recorder/proguard-rules.pro rename to Advanced-Audio-Android/sample-custom-recorder/proguard-rules.pro diff --git a/Advanced-Audio-Android/custom-recorder/src/androidTest/java/io/agora/advancedaudio/ExampleInstrumentedTest.java b/Advanced-Audio-Android/sample-custom-recorder/src/androidTest/java/io/agora/advancedaudio/ExampleInstrumentedTest.java similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/androidTest/java/io/agora/advancedaudio/ExampleInstrumentedTest.java rename to Advanced-Audio-Android/sample-custom-recorder/src/androidTest/java/io/agora/advancedaudio/ExampleInstrumentedTest.java diff --git a/Advanced-Audio-Android/custom-recorder/src/main/AndroidManifest.xml b/Advanced-Audio-Android/sample-custom-recorder/src/main/AndroidManifest.xml similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/AndroidManifest.xml rename to Advanced-Audio-Android/sample-custom-recorder/src/main/AndroidManifest.xml diff --git a/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorder.java b/Advanced-Audio-Android/sample-custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorder.java similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorder.java rename to Advanced-Audio-Android/sample-custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorder.java diff --git a/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderActivity.java b/Advanced-Audio-Android/sample-custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderActivity.java similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderActivity.java rename to Advanced-Audio-Android/sample-custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderActivity.java diff --git a/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderConfig.java b/Advanced-Audio-Android/sample-custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderConfig.java similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderConfig.java rename to Advanced-Audio-Android/sample-custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderConfig.java diff --git a/Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderService.java b/Advanced-Audio-Android/sample-custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderService.java similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderService.java rename to Advanced-Audio-Android/sample-custom-recorder/src/main/java/io/agora/advancedaudio/customrecorder/CustomRecorderService.java diff --git a/Advanced-Audio-Android/custom-recorder/src/main/res/drawable-xxhdpi/btn_audio_disabled.png b/Advanced-Audio-Android/sample-custom-recorder/src/main/res/drawable-xxhdpi/btn_audio_disabled.png similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/res/drawable-xxhdpi/btn_audio_disabled.png rename to Advanced-Audio-Android/sample-custom-recorder/src/main/res/drawable-xxhdpi/btn_audio_disabled.png diff --git a/Advanced-Audio-Android/custom-recorder/src/main/res/drawable-xxhdpi/btn_audio_enabled.png b/Advanced-Audio-Android/sample-custom-recorder/src/main/res/drawable-xxhdpi/btn_audio_enabled.png similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/res/drawable-xxhdpi/btn_audio_enabled.png rename to Advanced-Audio-Android/sample-custom-recorder/src/main/res/drawable-xxhdpi/btn_audio_enabled.png diff --git a/Advanced-Audio-Android/custom-recorder/src/main/res/drawable-xxhdpi/btn_leave.png b/Advanced-Audio-Android/sample-custom-recorder/src/main/res/drawable-xxhdpi/btn_leave.png similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/res/drawable-xxhdpi/btn_leave.png rename to Advanced-Audio-Android/sample-custom-recorder/src/main/res/drawable-xxhdpi/btn_leave.png diff --git a/Advanced-Audio-Android/custom-recorder/src/main/res/drawable-xxhdpi/live_room_bg_logo.png b/Advanced-Audio-Android/sample-custom-recorder/src/main/res/drawable-xxhdpi/live_room_bg_logo.png similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/res/drawable-xxhdpi/live_room_bg_logo.png rename to Advanced-Audio-Android/sample-custom-recorder/src/main/res/drawable-xxhdpi/live_room_bg_logo.png diff --git a/Advanced-Audio-Android/custom-recorder/src/main/res/drawable/btn_mute_audio.xml b/Advanced-Audio-Android/sample-custom-recorder/src/main/res/drawable/btn_mute_audio.xml similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/res/drawable/btn_mute_audio.xml rename to Advanced-Audio-Android/sample-custom-recorder/src/main/res/drawable/btn_mute_audio.xml diff --git a/Advanced-Audio-Android/custom-recorder/src/main/res/drawable/ic_launcher_background.xml b/Advanced-Audio-Android/sample-custom-recorder/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/res/drawable/ic_launcher_background.xml rename to Advanced-Audio-Android/sample-custom-recorder/src/main/res/drawable/ic_launcher_background.xml diff --git a/Advanced-Audio-Android/custom-recorder/src/main/res/drawable/live_room_bg.xml b/Advanced-Audio-Android/sample-custom-recorder/src/main/res/drawable/live_room_bg.xml similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/res/drawable/live_room_bg.xml rename to Advanced-Audio-Android/sample-custom-recorder/src/main/res/drawable/live_room_bg.xml diff --git a/Advanced-Audio-Android/custom-recorder/src/main/res/drawable/rounded_bg_full_transparent.xml b/Advanced-Audio-Android/sample-custom-recorder/src/main/res/drawable/rounded_bg_full_transparent.xml similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/res/drawable/rounded_bg_full_transparent.xml rename to Advanced-Audio-Android/sample-custom-recorder/src/main/res/drawable/rounded_bg_full_transparent.xml diff --git a/Advanced-Audio-Android/custom-recorder/src/main/res/drawable/rounded_bg_half_transparent.xml b/Advanced-Audio-Android/sample-custom-recorder/src/main/res/drawable/rounded_bg_half_transparent.xml similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/res/drawable/rounded_bg_half_transparent.xml rename to Advanced-Audio-Android/sample-custom-recorder/src/main/res/drawable/rounded_bg_half_transparent.xml diff --git a/Advanced-Audio-Android/custom-recorder/src/main/res/layout/activity_audio_room.xml b/Advanced-Audio-Android/sample-custom-recorder/src/main/res/layout/activity_audio_room.xml similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/res/layout/activity_audio_room.xml rename to Advanced-Audio-Android/sample-custom-recorder/src/main/res/layout/activity_audio_room.xml diff --git a/Advanced-Audio-Android/custom-recorder/src/main/res/mipmap-xxhdpi/ic_launcher.png b/Advanced-Audio-Android/sample-custom-recorder/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to Advanced-Audio-Android/sample-custom-recorder/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/Advanced-Audio-Android/custom-recorder/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/Advanced-Audio-Android/sample-custom-recorder/src/main/res/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/res/mipmap-xxhdpi/ic_launcher_round.png rename to Advanced-Audio-Android/sample-custom-recorder/src/main/res/mipmap-xxhdpi/ic_launcher_round.png diff --git a/Advanced-Audio-Android/custom-recorder/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/Advanced-Audio-Android/sample-custom-recorder/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to Advanced-Audio-Android/sample-custom-recorder/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/Advanced-Audio-Android/custom-recorder/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/Advanced-Audio-Android/sample-custom-recorder/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png rename to Advanced-Audio-Android/sample-custom-recorder/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/Advanced-Audio-Android/custom-recorder/src/main/res/values-zh/strings.xml b/Advanced-Audio-Android/sample-custom-recorder/src/main/res/values-zh/strings.xml similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/res/values-zh/strings.xml rename to Advanced-Audio-Android/sample-custom-recorder/src/main/res/values-zh/strings.xml diff --git a/Advanced-Audio-Android/custom-recorder/src/main/res/values/colors.xml b/Advanced-Audio-Android/sample-custom-recorder/src/main/res/values/colors.xml similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/res/values/colors.xml rename to Advanced-Audio-Android/sample-custom-recorder/src/main/res/values/colors.xml diff --git a/Advanced-Audio-Android/custom-recorder/src/main/res/values/dimens.xml b/Advanced-Audio-Android/sample-custom-recorder/src/main/res/values/dimens.xml similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/res/values/dimens.xml rename to Advanced-Audio-Android/sample-custom-recorder/src/main/res/values/dimens.xml diff --git a/Advanced-Audio-Android/custom-recorder/src/main/res/values/strings.xml b/Advanced-Audio-Android/sample-custom-recorder/src/main/res/values/strings.xml similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/res/values/strings.xml rename to Advanced-Audio-Android/sample-custom-recorder/src/main/res/values/strings.xml diff --git a/Advanced-Audio-Android/custom-recorder/src/main/res/values/styles.xml b/Advanced-Audio-Android/sample-custom-recorder/src/main/res/values/styles.xml similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/main/res/values/styles.xml rename to Advanced-Audio-Android/sample-custom-recorder/src/main/res/values/styles.xml diff --git a/Advanced-Audio-Android/custom-recorder/src/test/java/io/agora/advancedaudio/ExampleUnitTest.java b/Advanced-Audio-Android/sample-custom-recorder/src/test/java/io/agora/advancedaudio/ExampleUnitTest.java similarity index 100% rename from Advanced-Audio-Android/custom-recorder/src/test/java/io/agora/advancedaudio/ExampleUnitTest.java rename to Advanced-Audio-Android/sample-custom-recorder/src/test/java/io/agora/advancedaudio/ExampleUnitTest.java diff --git a/Advanced-Audio-Android/settings.gradle b/Advanced-Audio-Android/settings.gradle index f013a6f..08f95ae 100644 --- a/Advanced-Audio-Android/settings.gradle +++ b/Advanced-Audio-Android/settings.gradle @@ -1,2 +1,2 @@ -include ':component', ':custom-recorder' +include ':lib-component', ':sample-custom-recorder' rootProject.name='Advanced-Audio-Android' diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 2e5078b..7909470 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -13,5 +13,5 @@ jobs: - template: Advanced-Audio-Android/build-template/build-android.yml parameters: project: 'Advanced-Audio-Android' - module: 'custom-recorder' + module: 'sample-custom-recorder' name: 'CustomRecorder' \ No newline at end of file