Add addons search

This commit is contained in:
Erik Rudisch 2018-12-27 17:21:07 +01:00 committed by Synced Synapse
parent 645f22f64a
commit 2693d62702
3 changed files with 88 additions and 3 deletions

View File

@ -158,7 +158,7 @@ public class HostConnection {
private static final int DEFAULT_CONNECT_TIMEOUT = 5000; // ms
private static final int TCP_READ_TIMEOUT = 30000; // ms
public static final int TCP_READ_TIMEOUT = 30000; // ms
/**
* OkHttpClient. Make sure it is initialized, by calling {@link #getOkHttpClient()}
@ -166,6 +166,15 @@ public class HostConnection {
private OkHttpClient httpClient = null;
private static final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json; charset=utf-8");
/**
* Flag to indicate that the tcp response have to be ignored.
*/
private boolean ignoreTcpResponse = false;
public void setIgnoreTcpResponse(boolean ignoreTcpResponse) {
this.ignoreTcpResponse = ignoreTcpResponse;
}
/**
* Creates a new host connection
* @param hostInfo Host info object
@ -698,7 +707,19 @@ public class HostConnection {
});
}
private boolean shouldIgnoreTcpResponse(ObjectNode jsonResponse) {
boolean ignore = false;
if (jsonResponse.has(ApiMethod.ID_NODE) && ignoreTcpResponse) {
ignoreTcpResponse = false;
ignore = true;
}
LogUtils.LOGD(TAG, "ignore tcp response - " + ignore);
return ignore;
}
private <T> void handleTcpResponse(ObjectNode jsonResponse) {
if (shouldIgnoreTcpResponse(jsonResponse))
return;
if (!jsonResponse.has(ApiMethod.ID_NODE)) {
// It's a notification, notify observers

View File

@ -338,7 +338,6 @@ public abstract class BaseMediaActivity extends BaseActivity
@Override
public void inputOnInputRequested(String title, String type, String value) {
}
@Override

View File

@ -19,30 +19,43 @@ import android.annotation.TargetApi;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.text.TextDirectionHeuristicsCompat;
import android.text.TextUtils;
import android.view.MenuItem;
import org.xbmc.kore.R;
import org.xbmc.kore.host.HostManager;
import org.xbmc.kore.jsonrpc.HostConnection;
import org.xbmc.kore.jsonrpc.method.Input;
import org.xbmc.kore.ui.AbstractFragment;
import org.xbmc.kore.ui.BaseMediaActivity;
import org.xbmc.kore.ui.sections.remote.RemoteActivity;
import org.xbmc.kore.utils.LogUtils;
import org.xbmc.kore.utils.Utils;
import org.xbmc.kore.ui.generic.SendTextDialogFragment;
import java.util.concurrent.TimeUnit;
/**
* Controls the presentation of Addons information (list, details)
* All the information is presented by specific fragments
*/
public class AddonsActivity extends BaseMediaActivity
implements AddonListFragment.OnAddonSelectedListener {
implements AddonListFragment.OnAddonSelectedListener,
SendTextDialogFragment.SendTextDialogListener {
private static final String TAG = LogUtils.makeLogTag(AddonsActivity.class);
public static final String ADDONID = "addon_id";
public static final String ADDONTITLE = "addon_title";
private static final String DUMMY_INPUT = "kore_dummy_input";
private String selectedAddonId;
private String selectedAddonTitle;
private boolean dialogShown;
@Override
protected Fragment createFragment() {
return new AddonListContainerFragment();
@ -135,4 +148,56 @@ public class AddonsActivity extends BaseMediaActivity
updateActionBar(getActionBarTitle(), true);
}
@Override
public void inputOnInputRequested(String title, String type, String value) {
final SendTextDialogFragment dialog =
SendTextDialogFragment.newInstance(title);
dialog.show(getSupportFragmentManager(), null);
dialogShown = true;
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
TimeUnit.MILLISECONDS.sleep(HostConnection.TCP_READ_TIMEOUT - 2000);
if (dialogShown) {
dialog.dismissAllowingStateLoss();
sendTextInput(DUMMY_INPUT, true, true);
}
} catch (InterruptedException e) {
// ignore
}
}
});
t.start();
}
/**
* Callbacks from Send text dialog
*/
@Override
public void onSendTextFinished(String text, boolean done) {
dialogShown = false;
if (TextDirectionHeuristicsCompat.FIRSTSTRONG_LTR.isRtl(text, 0, text.length())) {
text = new StringBuilder(text).reverse().toString();
}
sendTextInput(text,done, false);
}
@Override
public void onSendTextCancel() {
dialogShown = false;
sendTextInput(DUMMY_INPUT, true, true);
}
private void sendTextInput(String text, boolean done, boolean isDummy) {
HostManager hostManager = HostManager.getInstance(this);
hostManager.getConnection().setIgnoreTcpResponse(isDummy);
HostConnection httpHostConnection = new HostConnection(hostManager.getHostInfo());
httpHostConnection.setProtocol(HostConnection.PROTOCOL_HTTP);
Input.SendText action = new Input.SendText(text, done);
action.execute(httpHostConnection, null, null);
}
}