Merge branch '1.06' into 1.07
This commit is contained in:
		
							
								
								
									
										2
									
								
								src/java/KP2ASoftkeyboard_AS/.idea/misc.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								src/java/KP2ASoftkeyboard_AS/.idea/misc.xml
									
									
									
										generated
									
									
									
								
							| @@ -24,7 +24,7 @@ | ||||
|       </value> | ||||
|     </option> | ||||
|   </component> | ||||
|   <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> | ||||
|   <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> | ||||
|     <output url="file://$PROJECT_DIR$/build/classes" /> | ||||
|   </component> | ||||
|   <component name="ProjectType"> | ||||
|   | ||||
| @@ -521,6 +521,7 @@ public class KP2AKeyboard extends InputMethodService | ||||
|             mOrientation = conf.orientation; | ||||
|             reloadKeyboards(); | ||||
|         } | ||||
|         updateKp2aKeyLabels(); | ||||
|         mConfigurationChanging = true; | ||||
|         super.onConfigurationChanged(conf); | ||||
|         mConfigurationChanging = false; | ||||
| @@ -545,6 +546,7 @@ public class KP2AKeyboard extends InputMethodService | ||||
|         	mKeyboardSwitcher.setKeyboardMode( | ||||
|                     KeyboardSwitcher.MODE_TEXT, 0); | ||||
|         } | ||||
|         updateKp2aKeyLabels(); | ||||
|          | ||||
|         return mKeyboardSwitcher.getInputView(); | ||||
|     } | ||||
| @@ -706,6 +708,7 @@ public class KP2AKeyboard extends InputMethodService | ||||
| 	                        attribute.imeOptions); | ||||
| 	        } | ||||
|         } | ||||
|         updateKp2aKeyLabels(); | ||||
| 	} | ||||
|  | ||||
| 	private void updateShowKp2aMode() { | ||||
| @@ -1394,38 +1397,61 @@ public class KP2AKeyboard extends InputMethodService | ||||
|         updateKp2aKeyLabels(); | ||||
|     } | ||||
|  | ||||
|     String makeShort(String input, int lineLength) | ||||
|     { | ||||
|         String result = input; | ||||
|         if (input.length() > lineLength) | ||||
|         { | ||||
|             result = input.substring(0,lineLength-1)+"…"; | ||||
|         } | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     private void updateKp2aKeyLabels() { | ||||
|         for (Keyboard.Key key : mKeyboardSwitcher.getInputView().getKeyboard().getKeys()) { | ||||
|  | ||||
|             boolean isFirstKey = false; | ||||
|             boolean isSecondKey = false; | ||||
|             for (int code : key.codes) { | ||||
|                 if (code == -201) | ||||
|                     isFirstKey = true; | ||||
|                 if (code == -202) | ||||
|                     isSecondKey = true; | ||||
|             } | ||||
|         if ((mKeyboardSwitcher.getInputView() != null) | ||||
|             && (mKeyboardSwitcher.getInputView().getKeyboard() != null)) | ||||
|         { | ||||
|             for (Keyboard.Key key : mKeyboardSwitcher.getInputView().getKeyboard().getKeys()) { | ||||
|  | ||||
|                 boolean isFirstKey = false; | ||||
|                 boolean isSecondKey = false; | ||||
|                 for (int code : key.codes) { | ||||
|                     if (code == -201) | ||||
|                         isFirstKey = true; | ||||
|                     if (code == -202) | ||||
|                         isSecondKey = true; | ||||
|                 } | ||||
|  | ||||
|  | ||||
|             int fieldIndex = -1; | ||||
|             if (isFirstKey) { | ||||
|                 fieldIndex = KeyboardData.kp2aFieldIndex; | ||||
|             } | ||||
|             if (isSecondKey) | ||||
|             { | ||||
|                 fieldIndex = KeyboardData.kp2aFieldIndex+1; | ||||
|             } | ||||
|             if (fieldIndex >= 0) | ||||
|             { | ||||
|                 String displayName = KeyboardData.availableFields.get(fieldIndex).displayName; | ||||
|                 if ("Password".equals(KeyboardData.availableFields.get(fieldIndex).key)) | ||||
|                     displayName = getString(R.string.kp2a_password); //might be a shorter variant | ||||
|                 if ("UserName".equals(KeyboardData.availableFields.get(fieldIndex).key )) | ||||
|                     displayName = getString(R.string.kp2a_user); //might be a shorter variant | ||||
|                 key.label = displayName; | ||||
|                 int fieldIndex = -1; | ||||
|                 if (isFirstKey) { | ||||
|                     fieldIndex = KeyboardData.kp2aFieldIndex; | ||||
|                 } | ||||
|                 if (isSecondKey) { | ||||
|                     fieldIndex = KeyboardData.kp2aFieldIndex + 1; | ||||
|                 } | ||||
|  | ||||
|                 if (fieldIndex >= 0) { | ||||
|                     key.label = ""; | ||||
|                     if (fieldIndex < KeyboardData.availableFields.size()) { | ||||
|                         String displayName = ""; | ||||
|                         StringForTyping fieldData = KeyboardData.availableFields.get(fieldIndex); | ||||
|                         if (fieldData != null) { | ||||
|                             displayName = makeShort(fieldData.displayName, 10); | ||||
|  | ||||
|                             if ("Password".equals(fieldData.key)) | ||||
|                                 displayName = getString(R.string.kp2a_password); //might be a shorter variant | ||||
|                             if ("UserName".equals(fieldData.key)) | ||||
|                                 displayName = getString(R.string.kp2a_user); //might be a shorter variant | ||||
|                         } | ||||
|                         key.label = displayName; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             mKeyboardSwitcher.getInputView().invalidateAllKeys(); | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     private void onKp2aKeyPressed() { | ||||
| @@ -1455,14 +1481,135 @@ public class KP2AKeyboard extends InputMethodService | ||||
|         } | ||||
|     } | ||||
|  | ||||
| 	private void showKp2aDialog() { | ||||
|         final EditorInfo attribute = getCurrentInputEditorInfo(); | ||||
|         final String clientPackageName = attribute.packageName; | ||||
| 	private void showKp2aDialog() | ||||
|     { | ||||
|         boolean androidP = android.os.Build.VERSION.SDK_INT >= 28; | ||||
|         //due to a change in Android P, showing the dialog as dialog does not work (only visible | ||||
|         // above the keyboard, not above the target application). Use an activity here. | ||||
|         // However, this is not perfect as it has another behavior regarding which task is | ||||
|         // in foreground, e.g. Chrome closes the IME when the activity is brought up which causes | ||||
|         // trouble entering data. So we still use the dialog in previous android versions. | ||||
|         if (androidP) | ||||
|         { | ||||
|             final EditorInfo attribute = getCurrentInputEditorInfo(); | ||||
|             final String clientPackageName = attribute.packageName; | ||||
|  | ||||
|             Intent i = new Intent(this, Kp2aDialog.class); | ||||
|             i.putExtra("clientPackageName", clientPackageName); | ||||
|             i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); | ||||
|             startActivity(i); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|  | ||||
|             AlertDialog.Builder builder = new AlertDialog.Builder(this); | ||||
|             String title = "Keepass2Android"; | ||||
|             List<StringForTyping> availableFields = keepass2android.kbbridge.KeyboardData.availableFields; | ||||
|  | ||||
|             final EditorInfo attribute = getCurrentInputEditorInfo(); | ||||
|             attribute.dump(new Printer() { | ||||
|  | ||||
|                 @Override | ||||
|                 public void println(String x) { | ||||
|                     Log.d("KP2AK", x); | ||||
|  | ||||
|                 } | ||||
|             }, ""); | ||||
|             final ArrayList<StringForTyping> items = new ArrayList<StringForTyping>(); | ||||
|             for (StringForTyping entry : availableFields) { | ||||
|                 items.add(entry.clone()); | ||||
|             } | ||||
|  | ||||
|  | ||||
|             StringForTyping openOrChangeEntry = new StringForTyping(); | ||||
|             if (keepass2android.kbbridge.KeyboardData.entryName == null) { | ||||
|                 openOrChangeEntry.displayName = openOrChangeEntry.key = getString(R.string.open_entry); | ||||
|             } else { | ||||
|                 openOrChangeEntry.displayName = openOrChangeEntry.key = getString(R.string.change_entry); | ||||
|             } | ||||
|             openOrChangeEntry.value = "KP2ASPECIAL_SelectEntryTask"; | ||||
|             items.add(openOrChangeEntry); | ||||
|  | ||||
|  | ||||
|             final String clientPackageName = attribute.packageName; | ||||
|  | ||||
|             if ((clientPackageName != null) && (clientPackageName != "")) { | ||||
|                 StringForTyping searchEntry = new StringForTyping(); | ||||
|                 try { | ||||
|                     searchEntry.key = searchEntry.displayName | ||||
|                             = getString(R.string.open_entry_for_app, new Object[]{clientPackageName}); | ||||
|                 } catch (java.util.FormatFlagsConversionMismatchException e) //buggy crowdin support for Arabic? | ||||
|                 { | ||||
|                     android.util.Log.e("KP2A", "Please report this error to crocoapps@gmail.com"); | ||||
|                     android.util.Log.e("KP2A", e.toString()); | ||||
|  | ||||
|                     searchEntry.key = searchEntry.displayName | ||||
|                             = "Search entry for app"; | ||||
|                 } | ||||
|  | ||||
|                 searchEntry.value = "KP2ASPECIAL_SearchUrlTask"; | ||||
|                 items.add(searchEntry); | ||||
|             } | ||||
|  | ||||
|  | ||||
|             builder.setTitle(title); | ||||
|  | ||||
|             CharSequence[] itemNames = new CharSequence[items.size()]; | ||||
|             int i = 0; | ||||
|             for (StringForTyping sft : items) | ||||
|                 itemNames[i++] = sft.displayName; | ||||
|  | ||||
|             builder.setItems(itemNames, | ||||
|                     new DialogInterface.OnClickListener() { | ||||
|                         public void onClick(DialogInterface dialog, int item) { | ||||
|  | ||||
|  | ||||
|                             if (items.get(item).value.startsWith("KP2ASPECIAL")) { | ||||
|                                 //change entry | ||||
|                                 String packageName = getApplicationContext().getPackageName(); | ||||
|                                 Intent startKp2aIntent = getPackageManager().getLaunchIntentForPackage(packageName); | ||||
|                                 if (startKp2aIntent != null) { | ||||
|                                     startKp2aIntent.addCategory(Intent.CATEGORY_LAUNCHER); | ||||
|                                     startKp2aIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); | ||||
|                                     String value = items.get(item).value; | ||||
|                                     String taskName = value.substring("KP2ASPECIAL_".length()); | ||||
|                                     startKp2aIntent.putExtra("KP2A_APPTASK", taskName); | ||||
|                                     if (taskName.equals("SearchUrlTask")) { | ||||
|                                         startKp2aIntent.putExtra("UrlToSearch", "androidapp://" + clientPackageName); | ||||
|                                     } | ||||
|                                     startActivity(startKp2aIntent); | ||||
|                                 } else Log.w("KP2AK", "didn't find intent for " + packageName); | ||||
|                             } else { | ||||
|  | ||||
|                                 StringForTyping theItem = items.get(item); | ||||
|  | ||||
|                                 commitStringForTyping(theItem); | ||||
|  | ||||
|                             } | ||||
|                         } | ||||
|  | ||||
|                     }); | ||||
|  | ||||
|             builder.setNegativeButton(android.R.string.cancel, | ||||
|                     new DialogInterface.OnClickListener() { | ||||
|                         public void onClick(DialogInterface dialog, int id) { | ||||
|                             // User cancelled the dialog | ||||
|                         } | ||||
|                     }); | ||||
|  | ||||
|             // Create the AlertDialog | ||||
|             AlertDialog dialog = builder.create(); | ||||
|             Window window = dialog.getWindow(); | ||||
|             WindowManager.LayoutParams lp = window.getAttributes(); | ||||
|             LatinKeyboardView inputView = mKeyboardSwitcher.getInputView(); | ||||
|             lp.token = inputView.getWindowToken(); | ||||
|             lp.type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG; | ||||
|             window.setAttributes(lp); | ||||
|             window.addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); | ||||
|  | ||||
|             dialog.show(); | ||||
|         } | ||||
|  | ||||
|         Intent i = new Intent(this, Kp2aDialog.class); | ||||
|         i.putExtra("clientPackageName", clientPackageName); | ||||
|         i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); | ||||
|         startActivity(i); | ||||
| 	} | ||||
| 	public void commitStringForTyping(StringForTyping theItem) { | ||||
| 		 | ||||
| @@ -1480,7 +1627,7 @@ public class KP2AKeyboard extends InputMethodService | ||||
| 		 | ||||
| 		 | ||||
| 										 | ||||
| 		Log.d("KP2AK", "committing text for " + theItem.key); | ||||
|  | ||||
| 		commitKp2aString(theItem.value, getCurrentInputEditorInfo()); | ||||
| 	} | ||||
|  | ||||
| @@ -1789,6 +1936,7 @@ public class KP2AKeyboard extends InputMethodService | ||||
|               } | ||||
|               setCandidatesViewShown(true); | ||||
|               updateInputViewShown(); | ||||
|               updateKp2aKeyLabels(); | ||||
|               postUpdateSuggestions(); | ||||
|           } | ||||
|       }); | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android"  | ||||
| 			android:versionCode="124"  | ||||
| 			android:versionName="1.06c"  | ||||
| 			android:versionCode="127"  | ||||
| 			android:versionName="1.06f"  | ||||
| 			package="keepass2android.keepass2android"  | ||||
| 			android:installLocation="auto"> | ||||
| 	<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="26" /> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Philipp Crocoll
					Philipp Crocoll