mirror of
https://github.com/KDE/kdeconnect-android
synced 2025-08-28 12:47:43 +00:00
Migrate PluginPreference to Kotlin
This commit is contained in:
parent
a1ce310f65
commit
7920a1a250
@ -3,112 +3,99 @@
|
|||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||||
*/
|
*/
|
||||||
|
package org.kde.kdeconnect.UserInterface
|
||||||
|
|
||||||
package org.kde.kdeconnect.UserInterface;
|
import android.content.Context
|
||||||
|
import android.util.TypedValue
|
||||||
|
import android.view.View
|
||||||
|
import androidx.preference.PreferenceViewHolder
|
||||||
|
import androidx.preference.SwitchPreference
|
||||||
|
import org.kde.kdeconnect.Device
|
||||||
|
import org.kde.kdeconnect.Plugins.Plugin
|
||||||
|
import org.kde.kdeconnect.Plugins.PluginFactory.getPluginInfo
|
||||||
|
import org.kde.kdeconnect_tp.R
|
||||||
|
|
||||||
import android.content.Context;
|
class PluginPreference : SwitchPreference {
|
||||||
import android.util.TypedValue;
|
private val device: Device
|
||||||
import android.view.View;
|
private val pluginKey: String
|
||||||
|
private val listener: View.OnClickListener?
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
constructor(context: Context, pluginKey: String, device: Device, callback: PluginPreferenceCallback) : super(context) {
|
||||||
import androidx.preference.PreferenceViewHolder;
|
layoutResource = R.layout.preference_with_button
|
||||||
import androidx.preference.SwitchPreference;
|
this.device = device
|
||||||
|
this.pluginKey = pluginKey
|
||||||
|
|
||||||
import org.kde.kdeconnect.Device;
|
val info = getPluginInfo(pluginKey)
|
||||||
import org.kde.kdeconnect.Plugins.Plugin;
|
title = info.displayName
|
||||||
import org.kde.kdeconnect.Plugins.PluginFactory;
|
summary = info.description
|
||||||
import org.kde.kdeconnect_tp.R;
|
isChecked = device.isPluginEnabled(pluginKey)
|
||||||
|
|
||||||
public class PluginPreference extends SwitchPreference {
|
fun createClickListener() = View.OnClickListener {
|
||||||
private final Device device;
|
val plugin = device.getPluginIncludingWithoutPermissions(pluginKey)
|
||||||
private final String pluginKey;
|
|
||||||
private final View.OnClickListener listener;
|
|
||||||
|
|
||||||
public PluginPreference(@NonNull final Context context, @NonNull final String pluginKey,
|
|
||||||
@NonNull final Device device, @NonNull PluginPreferenceCallback callback) {
|
|
||||||
super(context);
|
|
||||||
|
|
||||||
setLayoutResource(R.layout.preference_with_button);
|
|
||||||
|
|
||||||
this.device = device;
|
|
||||||
this.pluginKey = pluginKey;
|
|
||||||
|
|
||||||
PluginFactory.PluginInfo info = PluginFactory.getPluginInfo(pluginKey);
|
|
||||||
setTitle(info.getDisplayName());
|
|
||||||
setSummary(info.getDescription());
|
|
||||||
setChecked(device.isPluginEnabled(pluginKey));
|
|
||||||
|
|
||||||
if (info.getHasSettings()) {
|
|
||||||
this.listener = v -> {
|
|
||||||
Plugin plugin = device.getPluginIncludingWithoutPermissions(pluginKey);
|
|
||||||
if (plugin != null) {
|
if (plugin != null) {
|
||||||
callback.onStartPluginSettingsFragment(plugin);
|
callback.onStartPluginSettingsFragment(plugin)
|
||||||
} else { //Could happen if the device is not connected anymore
|
|
||||||
callback.onFinish();
|
|
||||||
}
|
}
|
||||||
};
|
else { // Could happen if the device is not connected anymore
|
||||||
} else {
|
callback.onFinish()
|
||||||
this.listener = null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
this.listener = if (info.hasSettings) createClickListener() else null
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
override fun onBindViewHolder(holder: PreferenceViewHolder) {
|
||||||
public void onBindViewHolder(@NonNull PreferenceViewHolder holder) {
|
super.onBindViewHolder(holder)
|
||||||
super.onBindViewHolder(holder);
|
|
||||||
|
|
||||||
View.OnClickListener toggleListener = v -> {
|
val toggleListener = View.OnClickListener { v: View? ->
|
||||||
boolean newState = !device.isPluginEnabled(pluginKey);
|
val newState = !device.isPluginEnabled(pluginKey)
|
||||||
setChecked(newState); //It actually works on API<14
|
isChecked = newState // It actually works on API<14
|
||||||
onStateChanged(holder, newState);
|
onStateChanged(holder, newState)
|
||||||
device.setPluginEnabled(pluginKey, newState);
|
device.setPluginEnabled(pluginKey, newState)
|
||||||
};
|
}
|
||||||
|
|
||||||
View content = holder.findViewById(R.id.content);
|
val content = holder.findViewById(R.id.content)
|
||||||
View widget = holder.findViewById(android.R.id.widget_frame);
|
val widget = holder.findViewById(android.R.id.widget_frame)
|
||||||
View parent = holder.itemView;
|
val parent = holder.itemView
|
||||||
content.setOnClickListener(listener);
|
content.setOnClickListener(listener)
|
||||||
widget.setOnClickListener(toggleListener);
|
widget.setOnClickListener(toggleListener)
|
||||||
parent.setOnClickListener(toggleListener);
|
parent.setOnClickListener(toggleListener)
|
||||||
|
|
||||||
// Disable child backgrounds when known to be unneeded to prevent duplicate ripples
|
// Disable child backgrounds when known to be unneeded to prevent duplicate ripples
|
||||||
int selectableItemBackground;
|
fun getSelectableItemBackgroundResource(): Int {
|
||||||
if (listener == null) {
|
val value = TypedValue()
|
||||||
selectableItemBackground = 0;
|
context.theme.resolveAttribute(android.R.attr.selectableItemBackground, value, true)
|
||||||
} else {
|
return value.resourceId
|
||||||
TypedValue value = new TypedValue();
|
|
||||||
getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, value, true);
|
|
||||||
selectableItemBackground = value.resourceId;
|
|
||||||
}
|
}
|
||||||
content.setBackgroundResource(selectableItemBackground);
|
val selectableItemBackground: Int = if (listener == null) 0 else getSelectableItemBackgroundResource()
|
||||||
widget.setBackgroundResource(selectableItemBackground);
|
content.setBackgroundResource(selectableItemBackground)
|
||||||
|
widget.setBackgroundResource(selectableItemBackground)
|
||||||
|
|
||||||
onStateChanged(holder, isChecked());
|
onStateChanged(holder, isChecked)
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onStateChanged(PreferenceViewHolder holder, boolean state) {
|
private fun onStateChanged(holder: PreferenceViewHolder, state: Boolean) {
|
||||||
View content = holder.findViewById(R.id.content);
|
val content = holder.findViewById(R.id.content)
|
||||||
View divider = holder.findViewById(R.id.divider);
|
val divider = holder.findViewById(R.id.divider)
|
||||||
View widget = holder.findViewById(android.R.id.widget_frame);
|
val widget = holder.findViewById(android.R.id.widget_frame)
|
||||||
View parent = holder.itemView;
|
val parent = holder.itemView
|
||||||
|
|
||||||
boolean hasDetails = state && listener != null;
|
val hasDetails = state && listener != null
|
||||||
|
|
||||||
divider.setVisibility(hasDetails ? View.VISIBLE : View.GONE);
|
divider.visibility = if (hasDetails) View.VISIBLE else View.GONE
|
||||||
content.setClickable(hasDetails);
|
content.isClickable = hasDetails
|
||||||
widget.setClickable(hasDetails);
|
widget.isClickable = hasDetails
|
||||||
parent.setClickable(!hasDetails);
|
parent.isClickable = !hasDetails
|
||||||
|
|
||||||
if (hasDetails) {
|
if (hasDetails) {
|
||||||
// Cancel duplicate ripple caused by pressed state of parent propagating down
|
// Cancel duplicate ripple caused by pressed state of parent propagating down
|
||||||
content.setPressed(false);
|
content.isPressed = false
|
||||||
content.getBackground().jumpToCurrentState();
|
content.background.jumpToCurrentState()
|
||||||
widget.setPressed(false);
|
widget.isPressed = false
|
||||||
widget.getBackground().jumpToCurrentState();
|
widget.background.jumpToCurrentState()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface PluginPreferenceCallback {
|
interface PluginPreferenceCallback {
|
||||||
void onStartPluginSettingsFragment(Plugin plugin);
|
fun onStartPluginSettingsFragment(plugin: Plugin?)
|
||||||
void onFinish();
|
fun onFinish()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user