From cb13108a1177e33ccbba5a2126b4ff6e31c9159c Mon Sep 17 00:00:00 2001 From: Yuriy Liskov Date: Tue, 18 Sep 2018 00:37:14 +0300 Subject: [PATCH] fix: home activity not found: update 2 --- leankeykeyboard/build.gradle | 4 +- leankeykeyboard/src/main/AndroidManifest.xml | 2 + .../other/GenericLaunchActivity.java | 112 ++++++++++++------ 3 files changed, 81 insertions(+), 37 deletions(-) diff --git a/leankeykeyboard/build.gradle b/leankeykeyboard/build.gradle index 209789f..1396fd8 100644 --- a/leankeykeyboard/build.gradle +++ b/leankeykeyboard/build.gradle @@ -8,8 +8,8 @@ android { applicationId "org.liskovsoft.leankeykeyboard.pro" minSdkVersion project.properties.minSdkVersion targetSdkVersion project.properties.targetSdkVersion - versionCode 79 - versionName "4.3.29" + versionCode 80 + versionName "4.3.30" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" diff --git a/leankeykeyboard/src/main/AndroidManifest.xml b/leankeykeyboard/src/main/AndroidManifest.xml index b8af890..a5d89f4 100644 --- a/leankeykeyboard/src/main/AndroidManifest.xml +++ b/leankeykeyboard/src/main/AndroidManifest.xml @@ -11,6 +11,8 @@ + + diff --git a/leankeykeyboard/src/main/java/com/liskovsoft/other/GenericLaunchActivity.java b/leankeykeyboard/src/main/java/com/liskovsoft/other/GenericLaunchActivity.java index 6d95e78..fd4f2ad 100644 --- a/leankeykeyboard/src/main/java/com/liskovsoft/other/GenericLaunchActivity.java +++ b/leankeykeyboard/src/main/java/com/liskovsoft/other/GenericLaunchActivity.java @@ -1,7 +1,3 @@ -// -// Decompiled by Procyon v0.5.30 -// - package com.liskovsoft.other; import android.annotation.SuppressLint; @@ -15,12 +11,25 @@ import android.content.pm.ActivityInfo; import android.content.Intent; import android.app.Activity; +import java.util.ArrayList; +import java.util.List; + public class GenericLaunchActivity extends Activity { - private boolean isSecondLaunch = false; + private static final String META_PACKAGE_NAME = "package"; + private static final String META_CLASS_NAME = "class"; + private static final String META_PACKAGE_NAME_ALT = "package_alt"; + private static final String META_CLASS_NAME_ALT = "class_alt"; + private static final String META_INTENT_NAME = "intent"; + private List mIntents = new ArrayList<>(); + + protected void onCreate(final Bundle bundle) { + super.onCreate(bundle); + launchApp(); + } @SuppressLint("WrongConstant") - private void addIntentFlags(final Intent intent) { + private void addCommonIntentFlags(final Intent intent) { intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); } @@ -32,57 +41,90 @@ public class GenericLaunchActivity extends Activity } catch (NameNotFoundException ex) { ex.printStackTrace(); - makeLongToast(ex.getLocalizedMessage(), 10); + makeLongToast(ex.getLocalizedMessage()); return null; } } private void launchApp() { - final Intent intent = makeIntent(getCurrentActivityInfo()); - addIntentFlags(intent); - startIntent(intent); + makeIntentList(); + startIntents(); finish(); } - - private Intent makeIntent(final ActivityInfo activityInfo) { - String metaPackage = isSecondLaunch ? "package_alt" : "package"; - String metaClass = isSecondLaunch ? "class_alt" : "class"; - final Bundle metaData = activityInfo.metaData; - final Intent intent = new Intent(); - if (metaData.getString("intent") != null) { - intent.setAction(metaData.getString("intent")); - } else { - intent.setComponent(new ComponentName(metaData.getString(metaPackage), metaData.getString(metaClass))); + private void startIntents() { + for (Intent intent : mIntents) { + boolean result = startIntent(intent); + if (result) { // run until first successful attempt + break; + } } + } + + private void makeIntentList() { + final ActivityInfo activityInfo = getCurrentActivityInfo(); + if (activityInfo == null) { + return; + } + final Bundle metaData = activityInfo.metaData; + + String metaPackageName = metaData.getString(META_PACKAGE_NAME); + String metaClassName = metaData.getString(META_CLASS_NAME); + mIntents.add(createIntent(metaPackageName, metaClassName)); + + String metaPackageNameAlt = metaData.getString(META_PACKAGE_NAME_ALT); + String metaClassNameAlt = metaData.getString(META_CLASS_NAME_ALT); + mIntents.add(createIntent(metaPackageNameAlt, metaClassNameAlt)); + + String metaIntentName = metaData.getString(META_INTENT_NAME); + mIntents.add(createIntent(metaIntentName)); + } + + private Intent createIntent(String intentName) { + if (intentName == null) { + return null; + } + + final Intent intent = new Intent(); + intent.setAction(intentName); + addCommonIntentFlags(intent); return intent; } + private Intent createIntent(String packageName, String className) { + if (packageName == null || className == null) { + return null; + } + + final Intent intent = new Intent(); + intent.setComponent(new ComponentName(packageName, className)); + addCommonIntentFlags(intent); + return intent; + } + + private void makeLongToast(final String s) { + makeLongToast(s, 10); + } + private void makeLongToast(final String s, int nums) { int n; for (n = nums / 2, nums = 0; nums < n; ++nums) { Toast.makeText(this, s, Toast.LENGTH_LONG).show(); } } - - private void startIntent(final Intent intent) { + + private boolean startIntent(final Intent intent) { + if (intent == null) { + return false; + } + try { startActivity(intent); } catch (ActivityNotFoundException ex) { - if (!isSecondLaunch) { - isSecondLaunch = true; - launchApp(); - return; - } - - ex.printStackTrace(); - makeLongToast(ex.getLocalizedMessage(), 10); + return false; } - } - - protected void onCreate(final Bundle bundle) { - super.onCreate(bundle); - launchApp(); + + return true; } }