mirror of
https://github.com/moonlight-stream/moonlight-android.git
synced 2025-07-20 11:33:06 +00:00
231 lines
7.2 KiB
Java
231 lines
7.2 KiB
Java
package com.limelight;
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.net.InetAddress;
|
|
import java.net.SocketException;
|
|
import java.net.UnknownHostException;
|
|
|
|
import org.xmlpull.v1.XmlPullParserException;
|
|
|
|
import com.limelight.binding.PlatformBinding;
|
|
import com.limelight.nvstream.NvConnection;
|
|
import com.limelight.nvstream.http.NvHTTP;
|
|
|
|
import android.os.Bundle;
|
|
import android.view.View;
|
|
import android.view.View.OnClickListener;
|
|
import android.widget.Button;
|
|
import android.widget.CheckBox;
|
|
import android.widget.CompoundButton;
|
|
import android.widget.CompoundButton.OnCheckedChangeListener;
|
|
import android.widget.RadioButton;
|
|
import android.widget.TextView;
|
|
import android.widget.Toast;
|
|
import android.app.Activity;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.content.SharedPreferences;
|
|
|
|
public class Connection extends Activity {
|
|
private Button statusButton, pairButton;
|
|
private TextView hostText;
|
|
private SharedPreferences prefs;
|
|
private CheckBox qualityCheckbox;
|
|
private RadioButton rbutton720p, rbutton1080p, rbutton30fps, rbutton60fps;
|
|
private RadioButton forceSoftDec, autoDec, forceHardDec;
|
|
|
|
private static final String DEFAULT_HOST = "";
|
|
public static final String HOST_KEY = "hostText";
|
|
|
|
@Override
|
|
public void onPause() {
|
|
SharedPreferences.Editor editor = prefs.edit();
|
|
|
|
editor.putString(Connection.HOST_KEY, this.hostText.getText().toString());
|
|
editor.apply();
|
|
|
|
super.onPause();
|
|
}
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
|
|
setContentView(R.layout.activity_connection);
|
|
|
|
this.statusButton = (Button) findViewById(R.id.statusButton);
|
|
this.pairButton = (Button) findViewById(R.id.pairButton);
|
|
this.hostText = (TextView) findViewById(R.id.hostTextView);
|
|
this.qualityCheckbox = (CheckBox) findViewById(R.id.imageQualityCheckbox);
|
|
this.rbutton720p = (RadioButton) findViewById(R.id.res720pSelected);
|
|
this.rbutton1080p = (RadioButton) findViewById(R.id.res1080pSelected);
|
|
this.rbutton30fps = (RadioButton) findViewById(R.id.rr30Selected);
|
|
this.rbutton60fps = (RadioButton) findViewById(R.id.rr60Selected);
|
|
this.forceSoftDec = (RadioButton) findViewById(R.id.softwareDec);
|
|
this.autoDec = (RadioButton) findViewById(R.id.autoDec);
|
|
this.forceHardDec = (RadioButton) findViewById(R.id.hardwareDec);
|
|
|
|
prefs = getSharedPreferences(Game.PREFS_FILE_NAME, Context.MODE_MULTI_PROCESS);
|
|
this.hostText.setText(prefs.getString(Connection.HOST_KEY, Connection.DEFAULT_HOST));
|
|
this.qualityCheckbox.setChecked(prefs.getBoolean(Game.QUALITY_PREF_STRING, false));
|
|
|
|
if (prefs.getInt(Game.HEIGHT_PREF_STRING, Game.DEFAULT_HEIGHT) == 720) {
|
|
rbutton720p.setChecked(true);
|
|
rbutton1080p.setChecked(false);
|
|
}
|
|
else {
|
|
rbutton1080p.setChecked(true);
|
|
rbutton720p.setChecked(false);
|
|
}
|
|
|
|
if (prefs.getInt(Game.REFRESH_RATE_PREF_STRING, Game.DEFAULT_REFRESH_RATE) == 30) {
|
|
rbutton30fps.setChecked(true);
|
|
rbutton60fps.setChecked(false);
|
|
}
|
|
else {
|
|
rbutton60fps.setChecked(true);
|
|
rbutton30fps.setChecked(false);
|
|
}
|
|
|
|
switch (prefs.getInt(Game.DECODER_PREF_STRING, Game.DEFAULT_DECODER)) {
|
|
case Game.FORCE_SOFTWARE_DECODER:
|
|
forceSoftDec.setChecked(true);
|
|
autoDec.setChecked(false);
|
|
forceHardDec.setChecked(false);
|
|
break;
|
|
case Game.AUTOSELECT_DECODER:
|
|
forceSoftDec.setChecked(false);
|
|
autoDec.setChecked(true);
|
|
forceHardDec.setChecked(false);
|
|
break;
|
|
case Game.FORCE_HARDWARE_DECODER:
|
|
forceSoftDec.setChecked(false);
|
|
autoDec.setChecked(false);
|
|
forceHardDec.setChecked(true);
|
|
break;
|
|
}
|
|
|
|
OnCheckedChangeListener occl = new OnCheckedChangeListener() {
|
|
@Override
|
|
public void onCheckedChanged(CompoundButton buttonView,
|
|
boolean isChecked) {
|
|
if (!isChecked) {
|
|
// Ignore non-checked buttons
|
|
return;
|
|
}
|
|
|
|
if (buttonView == rbutton30fps) {
|
|
prefs.edit().putInt(Game.REFRESH_RATE_PREF_STRING, 30).commit();
|
|
}
|
|
else if (buttonView == rbutton60fps) {
|
|
prefs.edit().putInt(Game.REFRESH_RATE_PREF_STRING, 60).commit();
|
|
}
|
|
else if (buttonView == rbutton720p) {
|
|
prefs.edit().putInt(Game.WIDTH_PREF_STRING, 1280).
|
|
putInt(Game.HEIGHT_PREF_STRING, 720).commit();
|
|
}
|
|
else if (buttonView == rbutton1080p) {
|
|
prefs.edit().putInt(Game.WIDTH_PREF_STRING, 1920).
|
|
putInt(Game.HEIGHT_PREF_STRING, 1080).commit();
|
|
}
|
|
else if (buttonView == forceSoftDec) {
|
|
prefs.edit().putInt(Game.DECODER_PREF_STRING, Game.FORCE_SOFTWARE_DECODER).commit();
|
|
}
|
|
else if (buttonView == forceHardDec) {
|
|
prefs.edit().putInt(Game.DECODER_PREF_STRING, Game.FORCE_HARDWARE_DECODER).commit();
|
|
}
|
|
else if (buttonView == autoDec) {
|
|
prefs.edit().putInt(Game.DECODER_PREF_STRING, Game.AUTOSELECT_DECODER).commit();
|
|
}
|
|
}
|
|
};
|
|
rbutton720p.setOnCheckedChangeListener(occl);
|
|
rbutton1080p.setOnCheckedChangeListener(occl);
|
|
rbutton30fps.setOnCheckedChangeListener(occl);
|
|
rbutton60fps.setOnCheckedChangeListener(occl);
|
|
forceSoftDec.setOnCheckedChangeListener(occl);
|
|
forceHardDec.setOnCheckedChangeListener(occl);
|
|
autoDec.setOnCheckedChangeListener(occl);
|
|
|
|
this.qualityCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
|
|
@Override
|
|
public void onCheckedChanged(CompoundButton checkbox, boolean isChecked) {
|
|
SharedPreferences.Editor editor = prefs.edit();
|
|
editor.putBoolean(Game.QUALITY_PREF_STRING, isChecked);
|
|
editor.commit();
|
|
}
|
|
});
|
|
|
|
this.statusButton.setOnClickListener(new OnClickListener() {
|
|
@Override
|
|
public void onClick(View arg0) {
|
|
Intent intent = new Intent(Connection.this, Game.class);
|
|
intent.putExtra("host", Connection.this.hostText.getText().toString());
|
|
Connection.this.startActivity(intent);
|
|
}
|
|
});
|
|
|
|
this.pairButton.setOnClickListener(new OnClickListener() {
|
|
@Override
|
|
public void onClick(View arg0) {
|
|
Toast.makeText(Connection.this, "Pairing...", Toast.LENGTH_LONG).show();
|
|
new Thread(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
String macAddress;
|
|
try {
|
|
macAddress = NvConnection.getMacAddressString();
|
|
} catch (SocketException e) {
|
|
e.printStackTrace();
|
|
return;
|
|
}
|
|
|
|
if (macAddress == null) {
|
|
System.out.println("Couldn't find a MAC address");
|
|
return;
|
|
}
|
|
|
|
NvHTTP httpConn;
|
|
String message;
|
|
try {
|
|
httpConn = new NvHTTP(InetAddress.getByName(hostText.getText().toString()),
|
|
macAddress, PlatformBinding.getDeviceName());
|
|
try {
|
|
if (httpConn.getPairState()) {
|
|
message = "Already paired";
|
|
}
|
|
else {
|
|
int session = httpConn.getSessionId();
|
|
if (session == 0) {
|
|
message = "Pairing was declined by the target";
|
|
}
|
|
else {
|
|
message = "Pairing was successful";
|
|
}
|
|
}
|
|
} catch (IOException e) {
|
|
message = e.getMessage();
|
|
} catch (XmlPullParserException e) {
|
|
message = e.getMessage();
|
|
}
|
|
} catch (UnknownHostException e1) {
|
|
message = "Failed to resolve host";
|
|
}
|
|
|
|
final String toastMessage = message;
|
|
runOnUiThread(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
Toast.makeText(Connection.this, toastMessage, Toast.LENGTH_LONG).show();
|
|
}
|
|
});
|
|
}
|
|
}).start();
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
}
|