[steamcmd]Update layout, refactor code, fix minor bugs

This commit is contained in:
Mittorn 2016-02-26 20:18:20 +00:00
parent 0978b30e34
commit 9a4468477d
2 changed files with 78 additions and 37 deletions

View file

@ -90,19 +90,24 @@ public class SteamActivity extends Activity {
});
LinearLayout buttons = new LinearLayout(this);
buttons.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
buttons.addView(startButton);
buttons.addView(stopButton);
launcher.addView(buttons);
scroll.addView(output);
LinearLayout progressLayout = new LinearLayout(this);
progressLayout.setOrientation(LinearLayout.VERTICAL);
progressLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
progress = new ProgressBar(this, null,
android.R.attr.progressBarStyleHorizontal);
progress.setMax(100);
progress.setVisibility(View.GONE);
progressLine = new TextView(this);
progressLine.setVisibility(View.GONE);
progressLine.setTextAppearance(this, android.R.attr.textAppearanceLarge);
launcher.addView( progressLine );
launcher.addView(progress);
progressLine.setTextAppearance(this, android.R.style.TextAppearance_Medium);
progressLayout.addView( progressLine );
progressLayout.addView(progress);
buttons.addView(progressLayout);
launcher.addView(buttons);
scroll.addView(output);
launcher.addView(scroll);
setContentView(launcher);
try
@ -158,6 +163,7 @@ public class SteamActivity extends Activity {
}
}
})
.setCancelable(false)
.show();
}
@ -184,7 +190,7 @@ public class SteamActivity extends Activity {
TextView line = new TextView(SteamActivity.this);
line.setText(str);
line.setTextAppearance(SteamActivity.this, android.R.attr.textAppearanceSmall);
line.setTextAppearance(SteamActivity.this, android.R.style.TextAppearance_Small);
line.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
progress.setVisibility(View.GONE);
progressLine.setVisibility(View.GONE);

View file

@ -21,18 +21,18 @@ enum ProcessState{ UNPACK, LAUNCH, COMMAND, WAIT, DOWNLOAD };
public class SteamService extends Service
{
final String TAG = "SteamService";
final static String TAG = "SteamService";
public static SteamService mSingleton;
Notification notification;
NotificationManager notificationManager = null;
String localPath;
String filesDir;
private Notification notification;
private NotificationManager notificationManager = null;
private String localPath;
private String filesDir;
class RestartException extends Exception {};
class CancelException extends Exception {};
static BackgroundThread mBgThread;
SharedPreferences mPref;
private SharedPreferences mPref;
public void onCreate() {
super.onCreate();
mSingleton = this;
@ -48,7 +48,7 @@ public class SteamService extends Service
Log.d(TAG, "onCreate");
}
void notificationInit()
private void notificationInit()
{
// init notification and foreground service
Intent intent = new Intent(this, SteamActivity.class);
@ -71,7 +71,7 @@ public class SteamService extends Service
// Dont create too much notification intents, it may crash system
long lastNotify = 0;
void progressUpdate( String text, int progress) {
private void progressUpdate( String text, int progress) {
if( SteamActivity.mSingleton != null )
SteamActivity.mSingleton.progressUpdate( text, progress );
if( notification == null )
@ -142,7 +142,7 @@ public class SteamService extends Service
Log.d(TAG, "onBind");
return null;
}
void printText(String text)
private void printText(String text)
{
// register notification first
if( notification == null )
@ -169,7 +169,7 @@ public class SteamService extends Service
}
// block current thread and show dialog
String promptDialog(String title, String message, boolean passwd)
private String promptDialog(String title, String message, boolean passwd)
{
Intent intent = new Intent(this, SteamActivity.class);
final PendingIntent pendingIntent = PendingIntent.getActivity(
@ -304,7 +304,7 @@ public class SteamService extends Service
}
}
void waitForActivity()
private void waitForActivity()
{
if( SteamActivity.mSingleton != null )
// Nothing to wait
@ -327,13 +327,14 @@ public class SteamService extends Service
OutputStream processInput = null;
ProcessState state;;
boolean need_reset_config = false;
boolean skipQemu = false;
String lastID;
Process process;
AtomicBoolean needDestroy = new AtomicBoolean();
private boolean need_reset_config = false;
private boolean skipQemu = false;
private String lastID;
public Process process;
public AtomicBoolean needDestroy = new AtomicBoolean();
public InputStream httpInput = null;
void downloadFile( String strurl, String path ) throws IOException, CancelException
private void downloadFile( String strurl, String path ) throws IOException, CancelException
{
URL url = new URL(strurl);
int count;
@ -347,7 +348,7 @@ public class SteamService extends Service
int lenghtOfFile = conection.getContentLength();
// download the file
InputStream input = new BufferedInputStream(url.openStream(), 8192);
httpInput = new BufferedInputStream(url.openStream(), 8192);
// Output stream
OutputStream output = new FileOutputStream(path);
@ -357,7 +358,7 @@ public class SteamService extends Service
long total = 0;
int lastprogress = 0;
while ( !needDestroy.get() && (count = input.read(data)) != -1) {
while ( !needDestroy.get() && (count = httpInput.read(data)) != -1) {
total += count;
// publishing the progress....
try
@ -376,13 +377,14 @@ public class SteamService extends Service
// closing streams
output.close();
input.close();
httpInput.close();
httpInput = null;
if(needDestroy.get())
throw new CancelException();
}
// called on every line, encef with \n
void processLine( String str ) throws RestartException,IOException
private void processLine( String str ) throws RestartException,IOException
{
// downloading game
if( str.startsWith( " Update state (") )
@ -476,7 +478,7 @@ public class SteamService extends Service
}
// called on every char in line until return true
boolean processPartial( String str ) throws CancelException, IOException
private boolean processPartial( String str ) throws CancelException, IOException
{
{
if( str.contains( "Steam>" ) )
@ -544,7 +546,7 @@ public class SteamService extends Service
}
// launch procesc and process all outout
int launchProcess( String command ) throws Exception
private int launchProcess( String command ) throws Exception
{
int result = 255;
printText("process start: " + command);
@ -603,7 +605,7 @@ public class SteamService extends Service
}
// download all files if not yet downloaded
void downloadAll() throws IOException,CancelException
private void downloadAll() throws IOException,CancelException
{
if( !skipQemu && !new File( filesDir + "/qemu.downloaded").exists() )
{
@ -643,18 +645,18 @@ public class SteamService extends Service
new File( localPath + ".downloaded").createNewFile();
}
int launchX86(String command) throws Exception
private int launchX86(String command) throws Exception
{
if( skipQemu )
return launchProcess( "sh " + localPath + "start-x86.sh " + localPath + ' ' + command );
else
return launchProcess( "sh " + localPath + "start-qemu.sh " + localPath + " "+ filesDir + "/qemu " + command );
}
void unpackAll() throws Exception
private void unpackAll() throws Exception
{
launchProcess( "chmod 777 " + filesDir + "/qemu" );
if( new File( localPath + ".unpacked").exists() )
return;
launchProcess( "chmod 777 " + filesDir + "/qemu" );
launchX86( localPath + "gzip -d steamcmd_linux.tar.gz" );
launchX86( localPath + "tar xvf steamcmd_linux.tar" );
new File( localPath + "steamcmd_linux.tar" ).delete();
@ -664,9 +666,9 @@ public class SteamService extends Service
@Override
public void run() {
super.run();
needDestroy = new AtomicBoolean(false);
needDestroy.getAndSet(false);
try {
if( skipQemu = (System.getProperty("ro.product.cpu.abi") == "x86") )
if( skipQemu = isX86() )
localPath = filesDir + '/';
state = ProcessState.UNPACK;
downloadAll();
@ -689,6 +691,7 @@ public class SteamService extends Service
// 42 is restart magick in steam
result = 42;
}
needDestroy.getAndSet(false);
}
while( result == 42 || getVerify() != null || getDownload() != null ) ;
@ -730,16 +733,48 @@ public class SteamService extends Service
mBgThread.needDestroy.getAndSet(true);
mBgThread.interrupt();
// destroy process
mBgThread.process.destroy();
if( mBgThread.process != null )
mBgThread.process.destroy();
// cancel stalled download
if( mBgThread.httpInput != null )
mBgThread.httpInput.close();
}catch( Exception e ){
e.printStackTrace();
}
}
private boolean isX86()
{
String s = System.getProperty("ro.product.cpu.abi");
if( s != null && s.contains("x86"))
return true;
s = System.getProperty("ro.product.cpu.abi2");
if( s != null && s.contains("x86"))
return true;
s = System.getProperty("ro.product.cpu.abilist");
if( s != null && s.contains("x86"))
return true;
s = System.getProperty("ro.product.cpu.abilist32");
if( s != null && s.contains("x86"))
return true;
s = System.getProperty("ro.dalvik.vm.isa.arm");
if( s != null && s.contains("x86"))
return true;
return false;
}
public void silentKillAll()
{
try
{
if( System.getProperty("ro.product.cpu.abi") == "x86" )
if( isX86() )
Runtime.getRuntime().exec( "sh " + localPath + "start-x86.sh " + localPath + ' ' +
localPath + "killall -o5s -9 ld-linux.so.2" );
else