diff --git a/changeAppSettings.sh b/changeAppSettings.sh index 392455b11..be6dd2032 100755 --- a/changeAppSettings.sh +++ b/changeAppSettings.sh @@ -6,13 +6,16 @@ JAVA_SRC_PATH=project/java if [ "X$1" = "X-a" ]; then AUTO=a + shift fi if [ "X$1" = "X-v" ]; then AUTO=v + shift fi if [ "X$1" = "X-u" ]; then CHANGED=1 AUTO=a + shift fi if [ "X$1" = "X-h" ]; then echo "Usage: $0 [-a] [-v] [-u]" @@ -22,6 +25,25 @@ if [ "X$1" = "X-h" ]; then exit fi +if [ "$#" -gt 0 ]; then + echo "Switching build target to $1" + if [ -e project/jni/application/$1 ]; then + rm -f project/jni/application/src + ln -s "$1" project/jni/application/src + else + echo "Error: no app $1 under project/jni/application" + echo "Available applications:" + cd project/jni/application + for f in *; do + if [ -e "$f/AndroidAppSettings.cfg" ]; then + echo "$f" + fi + done + exit 1 + fi + shift +fi + . ./AndroidAppSettings.cfg var="" diff --git a/project/AndroidManifestTemplate.xml b/project/AndroidManifestTemplate.xml index 3f5601df0..124b769c0 100644 --- a/project/AndroidManifestTemplate.xml +++ b/project/AndroidManifestTemplate.xml @@ -38,6 +38,10 @@ android:windowSoftInputMode="stateUnspecified" android:process=":RestartMainActivity" /> + diff --git a/project/java/DummyService.java b/project/java/DummyService.java new file mode 100644 index 000000000..179c339b7 --- /dev/null +++ b/project/java/DummyService.java @@ -0,0 +1,137 @@ +/* +Simple DirectMedia Layer +Java source code (C) 2009-2014 Sergii Pylypenko + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ + +package net.sourceforge.clonekeenplus; + +import android.app.Activity; +import android.app.Service; +import android.content.Context; +import android.os.Bundle; +import android.os.IBinder; +import android.view.MotionEvent; +import android.view.KeyEvent; +import android.view.Window; +import android.view.WindowManager; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import android.widget.EditText; +import android.text.Editable; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.FrameLayout; +import android.graphics.drawable.Drawable; +import android.graphics.Color; +import android.content.res.Configuration; +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Intent; +import android.view.View.OnKeyListener; +import android.view.MenuItem; +import android.view.Menu; +import android.view.Gravity; +import android.text.method.TextKeyListener; +import java.util.LinkedList; +import java.io.SequenceInputStream; +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.FileOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.CheckedInputStream; +import java.util.zip.CRC32; +import java.util.Set; +import android.text.SpannedString; +import java.io.BufferedReader; +import java.io.BufferedInputStream; +import java.io.InputStreamReader; +import android.view.inputmethod.InputMethodManager; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.os.Handler; +import android.os.Message; +import android.os.SystemClock; +import java.util.concurrent.Semaphore; +import android.content.pm.ActivityInfo; +import android.view.Display; +import android.util.DisplayMetrics; +import android.text.InputType; +import android.util.Log; +import android.view.Surface; +import android.app.ProgressDialog; +import android.app.KeyguardManager; +import android.view.ViewTreeObserver; +import android.graphics.Rect; +import android.view.InputDevice; +import android.inputmethodservice.KeyboardView; +import android.inputmethodservice.Keyboard; +import android.app.Notification; +import android.app.PendingIntent; +import android.widget.RemoteViews; + +public class DummyService extends Service +{ + public DummyService() + { + super(); + } + @Override + public int onStartCommand(Intent intent, int flags, int startId) + { + if (intent != null && Intent.ACTION_DELETE.equals(intent.getAction())) + { + Log.v("SDL", "User dismissed notification, killing myself"); + System.exit(0); + } + Log.v("SDL", "Starting dummy service - displaying notification"); + Notification ntf = new Notification(); + ntf.icon = R.drawable.icon; + ntf.flags |= Notification.FLAG_NO_CLEAR; + PendingIntent killIntent = PendingIntent.getService(this, 5, new Intent(Intent.ACTION_DELETE, null, this, DummyService.class), PendingIntent.FLAG_CANCEL_CURRENT); + PendingIntent showIntent = PendingIntent.getActivity(this, 0, new Intent("", null, this, MainActivity.class), PendingIntent.FLAG_CANCEL_CURRENT); + ntf.deleteIntent = killIntent; + ntf.tickerText = getString(getApplicationInfo().labelRes); + RemoteViews view = new RemoteViews(getPackageName(), R.layout.notification); + view.setCharSequence(R.id.notificationText, "setText", getString(R.string.notification_app_is_running, getString(getApplicationInfo().labelRes))); + view.setOnClickPendingIntent(R.id.notificationText, showIntent); + view.setOnClickPendingIntent(R.id.notificationIcon, showIntent); + view.setOnClickPendingIntent(R.id.notificationView, showIntent); + view.setOnClickPendingIntent(R.id.notificationStop, killIntent); + ntf.contentView = view; + startForeground(1, ntf); + return Service.START_STICKY; + } + @Override + public void onDestroy() + { + } + @Override + public IBinder onBind(Intent intent) + { + return null; + } +} diff --git a/project/java/MainActivity.java b/project/java/MainActivity.java index ddde7b8d0..fd5daf4ac 100644 --- a/project/java/MainActivity.java +++ b/project/java/MainActivity.java @@ -89,6 +89,8 @@ import android.graphics.Rect; import android.view.InputDevice; import android.inputmethodservice.KeyboardView; import android.inputmethodservice.Keyboard; +import android.app.Notification; +import android.app.PendingIntent; public class MainActivity extends Activity { @@ -226,6 +228,7 @@ public class MainActivity extends Activity (new Thread(new Callback(this))).start(); if( Globals.CreateService ) { + Log.v("SDL", "Starting dummy service - displaying notification"); Intent intent = new Intent(this, DummyService.class); startService(intent); } @@ -1485,25 +1488,3 @@ abstract class SetLayerType } } } - -class DummyService extends Service -{ - public DummyService() - { - super(); - } - @Override - public int onStartCommand(Intent intent, int flags, int startId) - { - return Service.START_STICKY; - } - @Override - public void onDestroy() - { - } - @Override - public IBinder onBind(Intent intent) - { - return null; - } -} diff --git a/project/java/translations/values/strings.xml b/project/java/translations/values/strings.xml index 6a36e9aec..fe178a1a6 100644 --- a/project/java/translations/values/strings.xml +++ b/project/java/translations/values/strings.xml @@ -199,4 +199,7 @@ Restarting, please wait. + %s is running + Stop + diff --git a/project/jni/application/commandergenius/commandergenius b/project/jni/application/commandergenius/commandergenius index 29d9fe23e..32b2e006f 160000 --- a/project/jni/application/commandergenius/commandergenius +++ b/project/jni/application/commandergenius/commandergenius @@ -1 +1 @@ -Subproject commit 29d9fe23e29a021d8e659dfb176cf2b6104e9bb4 +Subproject commit 32b2e006f9facb81db41125ddf2e9365e6b5075b diff --git a/project/jni/application/hid-pc-keyboard/src b/project/jni/application/hid-pc-keyboard/src index 5d839bd53..470f8b02c 160000 --- a/project/jni/application/hid-pc-keyboard/src +++ b/project/jni/application/hid-pc-keyboard/src @@ -1 +1 @@ -Subproject commit 5d839bd53d61c59ea75be8ab1792787757421b78 +Subproject commit 470f8b02ca0bd8f4f0cc24fbdf40651326fa7667 diff --git a/project/jni/boost/src b/project/jni/boost/src index 5824acb45..bc9ea9d30 160000 --- a/project/jni/boost/src +++ b/project/jni/boost/src @@ -1 +1 @@ -Subproject commit 5824acb451e671205afeb188576be1dd9a2674bd +Subproject commit bc9ea9d3032eb1e2b095484e2052aa2bc2e91767 diff --git a/project/jni/icuuc/src b/project/jni/icuuc/src index a63fa87d2..a6a653107 160000 --- a/project/jni/icuuc/src +++ b/project/jni/icuuc/src @@ -1 +1 @@ -Subproject commit a63fa87d2e1658428d3eace6432e9d6a206ea393 +Subproject commit a6a6531070409723b8b04ce4741a4f97e718dce8 diff --git a/project/jni/shmem b/project/jni/shmem index c2a28f528..f6b49516c 160000 --- a/project/jni/shmem +++ b/project/jni/shmem @@ -1 +1 @@ -Subproject commit c2a28f528d0b1b2528dda125e8fe8018609e7e9a +Subproject commit f6b49516cf4b13f455a19ec989626be5472830c5 diff --git a/project/res/layout/notification.xml b/project/res/layout/notification.xml new file mode 100644 index 000000000..76a3b8114 --- /dev/null +++ b/project/res/layout/notification.xml @@ -0,0 +1,53 @@ + + + + + + + + + +