0
0
mirror of https://github.com/ankidroid/Anki-Android.git synced 2024-09-20 12:02:16 +02:00

[Kotlin Migration] SystemContextMenu

Package: com.ichi2.anki.contextmenu
This commit is contained in:
codingtosh 2021-11-10 23:02:23 +05:30 committed by Mike Hardy
parent 16035325b1
commit 64e194d2e2
2 changed files with 39 additions and 66 deletions

View File

@ -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"),

View File

@ -13,83 +13,56 @@
You should have received a copy of the GNU General Public License along with
this program. If not, see <http://www.gnu.org/licenses/>.
*/
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)
}