From 64e194d2e23e01afd423e382c2c6f29015ee9b4e Mon Sep 17 00:00:00 2001 From: codingtosh Date: Wed, 10 Nov 2021 23:02:23 +0530 Subject: [PATCH] [Kotlin Migration] SystemContextMenu Package: com.ichi2.anki.contextmenu --- AnkiDroid/kotlinMigration.gradle | 2 +- .../anki/contextmenu/SystemContextMenu.kt | 103 +++++++----------- 2 files changed, 39 insertions(+), 66 deletions(-) diff --git a/AnkiDroid/kotlinMigration.gradle b/AnkiDroid/kotlinMigration.gradle index e987bfeb4c..45448327ee 100644 --- a/AnkiDroid/kotlinMigration.gradle +++ b/AnkiDroid/kotlinMigration.gradle @@ -43,7 +43,7 @@ permission notice: // Example of class name: "/com/ichi2/anki/UIUtils.kt" // Ensure that it starts with '/' (slash) def source = Source.MAIN -def className = "/com/ichi2/anki/contextmenu/SystemContextMenu.kt" +def className = "" enum Source { MAIN("/src/main/java"), diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/contextmenu/SystemContextMenu.kt b/AnkiDroid/src/main/java/com/ichi2/anki/contextmenu/SystemContextMenu.kt index 00f5d35455..c5ef1b0877 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/contextmenu/SystemContextMenu.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/contextmenu/SystemContextMenu.kt @@ -13,83 +13,56 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +package com.ichi2.anki.contextmenu -package com.ichi2.anki.contextmenu; +import android.content.ComponentName +import android.content.Context +import android.content.pm.PackageManager +import androidx.annotation.CheckResult +import com.ichi2.anki.AnkiDroidApp +import timber.log.Timber +import java.lang.Exception -import android.content.ComponentName; -import android.content.Context; -import android.content.pm.PackageManager; +abstract class SystemContextMenu(private val context: Context) { + protected abstract val defaultEnabledStatus: Boolean + protected abstract val preferenceKey: String -import com.ichi2.anki.AnkiDroidApp; - -import androidx.annotation.CheckResult; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import timber.log.Timber; - -import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED; -import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED; -import static android.content.pm.PackageManager.DONT_KILL_APP; - -public abstract class SystemContextMenu { - - protected abstract boolean getDefaultEnabledStatus(); - @NonNull - protected abstract String getPreferenceKey(); - /** We use an activity alias as the name so we can disable the context menu without disabling the activity */ - @NonNull - protected abstract String getActivityName(); - - @NonNull - private final Context mContext; - - public SystemContextMenu(@NonNull Context context) { - mContext = context; - } - - @SuppressWarnings("WeakerAccess") - public void setSystemMenuEnabled(boolean enabled) { + /** We use an activity alias as the name so we can disable the context menu without disabling the activity */ + protected abstract val activityName: String + fun setSystemMenuEnabled(enabled: Boolean) { try { - int enabledState = enabled ? COMPONENT_ENABLED_STATE_ENABLED : COMPONENT_ENABLED_STATE_DISABLED; - getPackageManager().setComponentEnabledSetting(getComponentName(), enabledState, DONT_KILL_APP); - } catch (Exception e) { - Timber.w(e, "Failed to set Context Menu state"); + val enabledState = if (enabled) PackageManager.COMPONENT_ENABLED_STATE_ENABLED else PackageManager.COMPONENT_ENABLED_STATE_DISABLED + packageManager.setComponentEnabledSetting(componentName, enabledState, PackageManager.DONT_KILL_APP) + } catch (e: Exception) { + Timber.w(e, "Failed to set Context Menu state") } } - @SuppressWarnings("WeakerAccess") - public void ensureConsistentStateWithSharedPreferences() { - boolean preferenceStatus = getPreferenceStatus(); - Boolean actualStatus = getSystemMenuStatus(); + fun ensureConsistentStateWithSharedPreferences() { + val preferenceStatus = preferenceStatus + val actualStatus = systemMenuStatus if (actualStatus == null || actualStatus != preferenceStatus) { - Timber.d("Modifying Context Menu Status: Preference was %b", preferenceStatus); - setSystemMenuEnabled(preferenceStatus); + Timber.d("Modifying Context Menu Status: Preference was %b", preferenceStatus) + setSystemMenuEnabled(preferenceStatus) } } - protected boolean getPreferenceStatus() { - return AnkiDroidApp.getSharedPrefs(mContext).getBoolean(getPreferenceKey(), getDefaultEnabledStatus()); - } + protected val preferenceStatus: Boolean + get() = AnkiDroidApp.getSharedPrefs(context).getBoolean(preferenceKey, defaultEnabledStatus) - - @CheckResult - @Nullable - private Boolean getSystemMenuStatus() { - try { - return getPackageManager().getComponentEnabledSetting(getComponentName()) == COMPONENT_ENABLED_STATE_ENABLED; - } catch (Exception e) { - Timber.w(e, "Failed to read context menu status setting"); - return null; + @get:CheckResult + private val systemMenuStatus: Boolean? + get() = try { + packageManager.getComponentEnabledSetting(componentName) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED + } catch (e: Exception) { + Timber.w(e, "Failed to read context menu status setting") + null } - } + private val packageManager: PackageManager + get() = context.packageManager - private PackageManager getPackageManager() { - return mContext.getPackageManager(); - } - - //this can throw if context.getPackageName() throws - @CheckResult - private ComponentName getComponentName() { - return new ComponentName(mContext, getActivityName()); - } + // this can throw if context.getPackageName() throws + @get:CheckResult + private val componentName: ComponentName + get() = ComponentName(context, activityName) }