From 9ab2ca6fb9463c9d942bd3f0af75acc28602334b Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Wed, 21 Dec 2016 08:33:57 +0000 Subject: Re #1986: Convert pjsua sample app Android project from Eclipse to Android Studio. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@5506 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip-apps/src/pjsua/android/.classpath | 9 - pjsip-apps/src/pjsua/android/.project | 33 --- pjsip-apps/src/pjsua/android/AndroidManifest.xml | 47 ---- pjsip-apps/src/pjsua/android/app/build.gradle | 23 ++ .../pjsua/android/app/src/main/AndroidManifest.xml | 47 ++++ .../main/java/org/pjsip/pjsua/MainActivity.java | 277 +++++++++++++++++++++ .../app/src/main/res/drawable-hdpi/main_image.png | Bin 0 -> 8269 bytes .../app/src/main/res/drawable-ldpi/main_image.png | Bin 0 -> 3863 bytes .../app/src/main/res/drawable-mdpi/main_image.png | Bin 0 -> 5059 bytes .../app/src/main/res/drawable-xhdpi/main_image.png | Bin 0 -> 12058 bytes .../app/src/main/res/layout/activity_main.xml | 46 ++++ .../android/app/src/main/res/values-v11/styles.xml | 5 + .../android/app/src/main/res/values-v14/styles.xml | 5 + .../android/app/src/main/res/values/strings.xml | 6 + .../android/app/src/main/res/values/styles.xml | 5 + pjsip-apps/src/pjsua/android/build.gradle | 15 ++ .../android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53636 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + pjsip-apps/src/pjsua/android/gradlew | 160 ++++++++++++ pjsip-apps/src/pjsua/android/gradlew.bat | 90 +++++++ pjsip-apps/src/pjsua/android/jni/Android.mk | 63 ----- pjsip-apps/src/pjsua/android/jni/Application.mk | 2 - pjsip-apps/src/pjsua/android/jni/Makefile | 56 +++++ pjsip-apps/src/pjsua/android/jni/pjsua.i | 4 +- pjsip-apps/src/pjsua/android/lint.xml | 3 - pjsip-apps/src/pjsua/android/proguard-project.txt | 20 -- pjsip-apps/src/pjsua/android/project.properties | 14 -- .../pjsua/android/res/drawable-hdpi/main_image.png | Bin 8269 -> 0 bytes .../pjsua/android/res/drawable-ldpi/main_image.png | Bin 3863 -> 0 bytes .../pjsua/android/res/drawable-mdpi/main_image.png | Bin 5059 -> 0 bytes .../android/res/drawable-xhdpi/main_image.png | Bin 12058 -> 0 bytes .../src/pjsua/android/res/layout/activity_main.xml | 46 ---- .../src/pjsua/android/res/values-v11/styles.xml | 5 - .../src/pjsua/android/res/values-v14/styles.xml | 5 - .../src/pjsua/android/res/values/strings.xml | 6 - pjsip-apps/src/pjsua/android/res/values/styles.xml | 5 - pjsip-apps/src/pjsua/android/settings.gradle | 1 + .../android/src/org/pjsip/pjsua/MainActivity.java | 277 --------------------- 38 files changed, 744 insertions(+), 537 deletions(-) delete mode 100644 pjsip-apps/src/pjsua/android/.classpath delete mode 100644 pjsip-apps/src/pjsua/android/.project delete mode 100644 pjsip-apps/src/pjsua/android/AndroidManifest.xml create mode 100644 pjsip-apps/src/pjsua/android/app/build.gradle create mode 100644 pjsip-apps/src/pjsua/android/app/src/main/AndroidManifest.xml create mode 100644 pjsip-apps/src/pjsua/android/app/src/main/java/org/pjsip/pjsua/MainActivity.java create mode 100644 pjsip-apps/src/pjsua/android/app/src/main/res/drawable-hdpi/main_image.png create mode 100644 pjsip-apps/src/pjsua/android/app/src/main/res/drawable-ldpi/main_image.png create mode 100644 pjsip-apps/src/pjsua/android/app/src/main/res/drawable-mdpi/main_image.png create mode 100644 pjsip-apps/src/pjsua/android/app/src/main/res/drawable-xhdpi/main_image.png create mode 100644 pjsip-apps/src/pjsua/android/app/src/main/res/layout/activity_main.xml create mode 100644 pjsip-apps/src/pjsua/android/app/src/main/res/values-v11/styles.xml create mode 100644 pjsip-apps/src/pjsua/android/app/src/main/res/values-v14/styles.xml create mode 100644 pjsip-apps/src/pjsua/android/app/src/main/res/values/strings.xml create mode 100644 pjsip-apps/src/pjsua/android/app/src/main/res/values/styles.xml create mode 100644 pjsip-apps/src/pjsua/android/build.gradle create mode 100644 pjsip-apps/src/pjsua/android/gradle/wrapper/gradle-wrapper.jar create mode 100644 pjsip-apps/src/pjsua/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 pjsip-apps/src/pjsua/android/gradlew create mode 100644 pjsip-apps/src/pjsua/android/gradlew.bat delete mode 100644 pjsip-apps/src/pjsua/android/jni/Android.mk delete mode 100644 pjsip-apps/src/pjsua/android/jni/Application.mk create mode 100644 pjsip-apps/src/pjsua/android/jni/Makefile delete mode 100644 pjsip-apps/src/pjsua/android/lint.xml delete mode 100644 pjsip-apps/src/pjsua/android/proguard-project.txt delete mode 100644 pjsip-apps/src/pjsua/android/project.properties delete mode 100755 pjsip-apps/src/pjsua/android/res/drawable-hdpi/main_image.png delete mode 100755 pjsip-apps/src/pjsua/android/res/drawable-ldpi/main_image.png delete mode 100755 pjsip-apps/src/pjsua/android/res/drawable-mdpi/main_image.png delete mode 100755 pjsip-apps/src/pjsua/android/res/drawable-xhdpi/main_image.png delete mode 100644 pjsip-apps/src/pjsua/android/res/layout/activity_main.xml delete mode 100644 pjsip-apps/src/pjsua/android/res/values-v11/styles.xml delete mode 100644 pjsip-apps/src/pjsua/android/res/values-v14/styles.xml delete mode 100644 pjsip-apps/src/pjsua/android/res/values/strings.xml delete mode 100644 pjsip-apps/src/pjsua/android/res/values/styles.xml create mode 100644 pjsip-apps/src/pjsua/android/settings.gradle delete mode 100644 pjsip-apps/src/pjsua/android/src/org/pjsip/pjsua/MainActivity.java diff --git a/pjsip-apps/src/pjsua/android/.classpath b/pjsip-apps/src/pjsua/android/.classpath deleted file mode 100644 index d57ec025..00000000 --- a/pjsip-apps/src/pjsua/android/.classpath +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/pjsip-apps/src/pjsua/android/.project b/pjsip-apps/src/pjsua/android/.project deleted file mode 100644 index 937a12d5..00000000 --- a/pjsip-apps/src/pjsua/android/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - pjsua - - - - - - com.android.ide.eclipse.adt.ResourceManagerBuilder - - - - - com.android.ide.eclipse.adt.PreCompilerBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - com.android.ide.eclipse.adt.ApkBuilder - - - - - - com.android.ide.eclipse.adt.AndroidNature - org.eclipse.jdt.core.javanature - - diff --git a/pjsip-apps/src/pjsua/android/AndroidManifest.xml b/pjsip-apps/src/pjsua/android/AndroidManifest.xml deleted file mode 100644 index 97da16d3..00000000 --- a/pjsip-apps/src/pjsua/android/AndroidManifest.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/pjsip-apps/src/pjsua/android/app/build.gradle b/pjsip-apps/src/pjsua/android/app/build.gradle new file mode 100644 index 00000000..35fa39c7 --- /dev/null +++ b/pjsip-apps/src/pjsua/android/app/build.gradle @@ -0,0 +1,23 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 15 + buildToolsVersion "23.0.3" + + defaultConfig { + applicationId "org.pjsip.pjsua" + minSdkVersion 15 + targetSdkVersion 15 + + ndk { + moduleName "libpjsua" + } + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' + } + } +} diff --git a/pjsip-apps/src/pjsua/android/app/src/main/AndroidManifest.xml b/pjsip-apps/src/pjsua/android/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..97da16d3 --- /dev/null +++ b/pjsip-apps/src/pjsua/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pjsip-apps/src/pjsua/android/app/src/main/java/org/pjsip/pjsua/MainActivity.java b/pjsip-apps/src/pjsua/android/app/src/main/java/org/pjsip/pjsua/MainActivity.java new file mode 100644 index 00000000..927a70b6 --- /dev/null +++ b/pjsip-apps/src/pjsua/android/app/src/main/java/org/pjsip/pjsua/MainActivity.java @@ -0,0 +1,277 @@ +/* $Id: MainActivity.java $ */ +/* + * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package org.pjsip.pjsua; + +import java.lang.ref.WeakReference; + +import android.app.Activity; +import android.content.pm.ApplicationInfo; +import android.os.Bundle; +import android.util.Log; +import android.view.SurfaceHolder; +import android.view.SurfaceView; +import android.os.Handler; +import android.os.Message; +import android.widget.TextView; + +class CONST { + public static final String LIB_FILENAME = "pjsua"; + public static final String TAG = "pjsua"; + public static final Boolean AUTOKILL_ON_FINISH = true; + public enum MSG_TYPE { + STR_DEBUG, + STR_INFO, + STR_ERROR, + CLI_STOP, + CLI_RESTART, + QUIT + }; +} + +class LOG { + public static void DEBUG(Handler h, String str) { + Message msg = Message.obtain(h, CONST.MSG_TYPE.STR_DEBUG.ordinal(), + str); + msg.sendToTarget(); + } + public static void INFO(Handler h, String str) { + Message msg = Message.obtain(h, CONST.MSG_TYPE.STR_INFO.ordinal(), + str); + msg.sendToTarget(); + } + public static void ERROR(Handler h, String str) { + Message msg = Message.obtain(h, CONST.MSG_TYPE.STR_ERROR.ordinal(), + str); + msg.sendToTarget(); + } +} + +public class MainActivity extends Activity implements SurfaceHolder.Callback { + private MyHandler ui_handler = new MyHandler(this); + private static MyCallback callback; + + private static class MyHandler extends Handler { + private final WeakReference mTarget; + + public MyHandler(MainActivity target) { + mTarget = new WeakReference(target); + } + + @Override + public void handleMessage(Message m) { + MainActivity target = mTarget.get(); + if (target == null) + return; + + if (m.what == CONST.MSG_TYPE.STR_DEBUG.ordinal()) { + Log.d(CONST.TAG, (String)m.obj); + } else if (m.what == CONST.MSG_TYPE.STR_INFO.ordinal()) { + target.updateStatus((String)m.obj); + Log.i(CONST.TAG, (String)m.obj); + } else if (m.what == CONST.MSG_TYPE.STR_ERROR.ordinal()) { + target.updateStatus((String)m.obj); + Log.e(CONST.TAG, (String)m.obj); + } else if (m.what == CONST.MSG_TYPE.CLI_STOP.ordinal()) { + pjsua.pjsuaDestroy(); + LOG.INFO(this, "Telnet Unavailable"); + } else if (m.what == CONST.MSG_TYPE.CLI_RESTART.ordinal()) { + int status = pjsua.pjsuaRestart(); + if (status != 0) { + LOG.INFO(this, "Failed restarting telnet"); + } + } else if (m.what == CONST.MSG_TYPE.QUIT.ordinal()) { + target.finish(); + System.gc(); + android.os.Process.killProcess(android.os.Process.myPid()); + } + } + } + + /** Callback object **/ + private static class MyCallback extends PjsuaAppCallback { + private WeakReference ui_handler; + + public MyCallback(Handler in_ui_handler) { + set_ui_handler(in_ui_handler); + } + + public void set_ui_handler(Handler in_ui_handler) { + ui_handler = new WeakReference(in_ui_handler); + } + + @Override + public void onStarted(String msg) { + Handler ui = ui_handler.get(); + LOG.INFO(ui, msg); + } + + @Override + public void onStopped(int restart) { + Handler ui = ui_handler.get(); + /** Use timer to stopped/restart **/ + if (restart != 0) { + LOG.INFO(ui, "Telnet Restarting"); + Message msg = Message.obtain(ui, + CONST.MSG_TYPE.CLI_RESTART.ordinal()); + ui.sendMessageDelayed(msg, 100); + } else { + LOG.INFO(ui, "Telnet Stopping"); + Message msg = Message.obtain(ui, + CONST.MSG_TYPE.CLI_STOP.ordinal()); + ui.sendMessageDelayed(msg, 100); + } + } + } + + private void updateStatus(String output) { + TextView tStatus = (TextView) findViewById(R.id.textStatus); + tStatus.setText(output); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + LOG.DEBUG(ui_handler, "=== Activity::onCreate() ==="); + super.onCreate(savedInstanceState); + + init_view(); + + init_lib(); + } + + @Override + protected void onStart() { + LOG.DEBUG(ui_handler, "=== Activity::onStart() ==="); + super.onStart(); + } + + @Override + protected void onRestart() { + LOG.DEBUG(ui_handler, "=== Activity::onRestart() ==="); + super.onRestart(); + } + + @Override + protected void onResume() { + LOG.DEBUG(ui_handler, "=== Activity::onResume() ==="); + super.onResume(); + } + + @Override + protected void onPause() { + LOG.DEBUG(ui_handler, "=== Activity::onPause() ==="); + super.onPause(); + } + + @Override + protected void onStop() { + LOG.DEBUG(ui_handler, "=== Activity::onStop() ==="); + super.onStop(); + } + + @Override + protected void onDestroy() { + LOG.DEBUG(ui_handler, "=== Activity::onDestroy() ==="); + super.onDestroy(); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + } + + @Override + protected void onRestoreInstanceState(Bundle savedInstanceState) { + super.onRestoreInstanceState(savedInstanceState); + } + + private void init_view() { + setContentView(R.layout.activity_main); + } + + private int init_lib() { + LOG.INFO(ui_handler, "Loading module..."); + + // Try loading video dependency libs + try { + System.loadLibrary("openh264"); + System.loadLibrary("yuv"); + } catch (UnsatisfiedLinkError e) { + LOG.ERROR(ui_handler, "UnsatisfiedLinkError: " + e.getMessage()); + LOG.ERROR(ui_handler, "This could be safely ignored if you "+ + "don't need video."); + } + + // Load pjsua + try { + System.loadLibrary(CONST.LIB_FILENAME); + } catch (UnsatisfiedLinkError e) { + LOG.ERROR(ui_handler, "UnsatisfiedLinkError: " + e.getMessage()); + return -1; + } + + // Wait for GDB to init, for native debugging only + if (false && (getApplicationInfo().flags & + ApplicationInfo.FLAG_DEBUGGABLE) != 0) + { + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + LOG.ERROR(ui_handler, "InterruptedException: " + + e.getMessage()); + } + } + + // Set callback object + if (callback == null) + callback = new MyCallback(ui_handler); + + pjsua.setCallbackObject(callback); + + SurfaceView surfaceView = (SurfaceView) + findViewById(R.id.surfaceViewIncomingCall); + surfaceView.getHolder().addCallback(this); + + LOG.INFO(ui_handler, "Starting module.."); + + int rc = pjsua.pjsuaStart(); + + if (rc != 0) { + LOG.INFO(ui_handler, "Failed starting telnet"); + } + + return 0; + } + + public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) + { + pjsua.setIncomingVideoRenderer(holder.getSurface()); + } + + public void surfaceCreated(SurfaceHolder holder) + { + pjsua.setIncomingVideoRenderer(holder.getSurface()); + } + + public void surfaceDestroyed(SurfaceHolder holder) + { + pjsua.setIncomingVideoRenderer(null); + } + +} diff --git a/pjsip-apps/src/pjsua/android/app/src/main/res/drawable-hdpi/main_image.png b/pjsip-apps/src/pjsua/android/app/src/main/res/drawable-hdpi/main_image.png new file mode 100644 index 00000000..a9c5328c Binary files /dev/null and b/pjsip-apps/src/pjsua/android/app/src/main/res/drawable-hdpi/main_image.png differ diff --git a/pjsip-apps/src/pjsua/android/app/src/main/res/drawable-ldpi/main_image.png b/pjsip-apps/src/pjsua/android/app/src/main/res/drawable-ldpi/main_image.png new file mode 100644 index 00000000..969971f8 Binary files /dev/null and b/pjsip-apps/src/pjsua/android/app/src/main/res/drawable-ldpi/main_image.png differ diff --git a/pjsip-apps/src/pjsua/android/app/src/main/res/drawable-mdpi/main_image.png b/pjsip-apps/src/pjsua/android/app/src/main/res/drawable-mdpi/main_image.png new file mode 100644 index 00000000..8312fcf2 Binary files /dev/null and b/pjsip-apps/src/pjsua/android/app/src/main/res/drawable-mdpi/main_image.png differ diff --git a/pjsip-apps/src/pjsua/android/app/src/main/res/drawable-xhdpi/main_image.png b/pjsip-apps/src/pjsua/android/app/src/main/res/drawable-xhdpi/main_image.png new file mode 100644 index 00000000..9978b0af Binary files /dev/null and b/pjsip-apps/src/pjsua/android/app/src/main/res/drawable-xhdpi/main_image.png differ diff --git a/pjsip-apps/src/pjsua/android/app/src/main/res/layout/activity_main.xml b/pjsip-apps/src/pjsua/android/app/src/main/res/layout/activity_main.xml new file mode 100644 index 00000000..24a13372 --- /dev/null +++ b/pjsip-apps/src/pjsua/android/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/pjsip-apps/src/pjsua/android/app/src/main/res/values-v11/styles.xml b/pjsip-apps/src/pjsua/android/app/src/main/res/values-v11/styles.xml new file mode 100644 index 00000000..d408cbc3 --- /dev/null +++ b/pjsip-apps/src/pjsua/android/app/src/main/res/values-v11/styles.xml @@ -0,0 +1,5 @@ + + +