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:
parent
16035325b1
commit
64e194d2e2
@ -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"),
|
||||
|
@ -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)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user