Browse Source

Volume keys adjust the volume now. Removed some unnecessary debug stuff.

Joachim Meyer 9 years ago
parent
commit
b72a352fcd
2 changed files with 52 additions and 10 deletions
  1. 3 9
      src/core/PolyAndroidCore.cpp
  2. 49 1
      src/view/android/PolycodeView.cpp

+ 3 - 9
src/core/PolyAndroidCore.cpp

@@ -372,24 +372,18 @@ String AndroidCore::getClipboardString() {
 
 	// Runs clipboard.getPrimaryClip()
 	jmethodID MethodGetPrimaryClip = jniEnv->GetMethodID(ClassClipboardManager, "getPrimaryClip", "()Landroid/content/ClipData;");
-	jniEnv->ExceptionDescribe();
 	jobject lClipData = jniEnv->CallObjectMethod(lCliboardManager, MethodGetPrimaryClip);
-	jniEnv->ExceptionDescribe();
+	
 	//Runs clipdata.getItemAt(0)
 	jclass ClassClipDataItem = jniEnv->FindClass("android/content/ClipData$Item");
-	jniEnv->ExceptionDescribe();
 	jclass ClassClipData = jniEnv->FindClass("android/content/ClipData");
-	jniEnv->ExceptionDescribe();
 	jmethodID MethodGetItemAt = jniEnv->GetMethodID(ClassClipData, "getItemAt", "(I)Landroid/content/ClipData$Item;");
-	jniEnv->ExceptionDescribe();
 	jobject lClipDataItem = jniEnv->CallObjectMethod(lClipData, MethodGetItemAt, 0);
-	jniEnv->ExceptionDescribe();
-	//Runs clipdescription.getText()
 	
+	//Runs clipdescription.getText()
 	jmethodID MethodGetText = jniEnv->GetMethodID(ClassClipDataItem, "getText", "()Ljava/lang/CharSequence;");
-	jniEnv->ExceptionDescribe();
 	jobject lCharSequence = jniEnv->CallObjectMethod(lClipDataItem, MethodGetText);
-	jniEnv->ExceptionDescribe();
+	
 	//Runs charseuquence.toString()
 	jclass ClassCharSequence = jniEnv->FindClass("java/lang/CharSequence");
 	jmethodID MethodtoString = jniEnv->GetMethodID(ClassCharSequence, "toString", "()Ljava/lang/String;");

+ 49 - 1
src/view/android/PolycodeView.cpp

@@ -260,8 +260,14 @@ static int inputLoop(int fd, int events, void* data){
 			if(type == AINPUT_EVENT_TYPE_KEY){
 				event.eventTime = AKeyEvent_getEventTime(aev);
 				int kC = AKeyEvent_getKeyCode(aev);
-				if(core)
+				if(core){
 					event.keyCode = core->mapKey(kC);
+					if(kC == AKEYCODE_VOLUME_DOWN){
+						JNIVolumeControl(((PolycodeView*)data)->native_activity, false);
+					} else if (kC == AKEYCODE_VOLUME_UP){
+						JNIVolumeControl(((PolycodeView*)data)->native_activity, true);
+					}
+				}
 				
 				action = AKeyEvent_getAction(aev);
 				if(action == AKEY_EVENT_ACTION_DOWN){
@@ -566,6 +572,48 @@ void JNIWakeLock(ANativeActivity* native_activity, bool acquire){
 		}
 	}
 	
+	if(attached)
+		javaVM->DetachCurrentThread();
+}
+
+void JNIVolumeControl(ANativeActivity* native_activity, bool up){
+	JavaVM* javaVM = native_activity->vm;
+	JNIEnv* jniEnv;
+	bool attached = false;
+	
+	if(javaVM->GetEnv((void**)&jniEnv, JNI_VERSION_1_6) ==JNI_EDETACHED){
+		JavaVMAttachArgs attachArgs;
+		attachArgs.version = JNI_VERSION_1_6;
+		attachArgs.name = "NativeThread";
+		attachArgs.group = NULL;
+		
+		jint result = javaVM->AttachCurrentThread(&jniEnv, &attachArgs);
+		if(result == JNI_ERR){
+			return;
+		}
+		attached = true;
+	}
+
+	jclass classNativeActivity = jniEnv->FindClass("android/app/NativeActivity");
+	jclass classAudioManager = jniEnv->FindClass("android/media/AudioManager");
+	
+	jclass ClassContext = jniEnv->FindClass("android/content/Context");
+	jfieldID FieldAUDIO_SERVICE = jniEnv->GetStaticFieldID(ClassContext, "AUDIO_SERVICE", "Ljava/lang/String;");
+	jobject AUDIO_SERVICE = jniEnv->GetStaticObjectField(ClassContext, FieldAUDIO_SERVICE);
+	
+	jmethodID getSystemServiceID = jniEnv->GetMethodID(classNativeActivity, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;");
+	jobject AudioManager = jniEnv->CallObjectMethod(native_activity->clazz, getSystemServiceID, AUDIO_SERVICE);
+	
+	int ADJUST_RAISE = 1;
+	int ADJUST_LOWER = -1;
+	jmethodID adjustVolumeID = jniEnv->GetMethodID(classAudioManager, "adjustVolume", "(II)V");
+	
+	if (up){
+		jniEnv->CallVoidMethod(AudioManager, adjustVolumeID, ADJUST_RAISE, 0);
+	} else {
+		jniEnv->CallVoidMethod(AudioManager, adjustVolumeID, ADJUST_LOWER, 0);
+	}
+	
 	if(attached)
 		javaVM->DetachCurrentThread();
 }