mirror of
https://github.com/badaix/snapcast.git
synced 2025-08-06 10:09:33 +02:00
Moved copying of assets to Setup class
This commit is contained in:
parent
5d27097877
commit
0453ff4169
2 changed files with 91 additions and 69 deletions
|
@ -5,7 +5,8 @@ import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.ServiceConnection;
|
import android.content.ServiceConnection;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.res.AssetManager;
|
import android.graphics.Color;
|
||||||
|
import android.graphics.drawable.ColorDrawable;
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.net.nsd.NsdManager;
|
import android.net.nsd.NsdManager;
|
||||||
|
@ -21,7 +22,6 @@ import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.CheckBox;
|
import android.widget.CheckBox;
|
||||||
import android.widget.CompoundButton;
|
import android.widget.CompoundButton;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
|
@ -29,16 +29,9 @@ import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.google.android.gms.appindexing.Action;
|
import com.google.android.gms.appindexing.Action;
|
||||||
import com.google.android.gms.appindexing.AndroidAppUri;
|
|
||||||
import com.google.android.gms.appindexing.AppIndex;
|
import com.google.android.gms.appindexing.AppIndex;
|
||||||
import com.google.android.gms.common.api.GoogleApiClient;
|
import com.google.android.gms.common.api.GoogleApiClient;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
|
|
||||||
import de.badaix.snapcast.control.ClientInfo;
|
import de.badaix.snapcast.control.ClientInfo;
|
||||||
import de.badaix.snapcast.control.RemoteControl;
|
import de.badaix.snapcast.control.RemoteControl;
|
||||||
import de.badaix.snapcast.control.ServerInfo;
|
import de.badaix.snapcast.control.ServerInfo;
|
||||||
|
@ -46,7 +39,7 @@ import de.badaix.snapcast.control.ServerInfo;
|
||||||
public class MainActivity extends AppCompatActivity implements ClientInfoItem.ClientInfoItemListener, RemoteControl.RemoteControlListener, SnapclientService.SnapclientListener {
|
public class MainActivity extends AppCompatActivity implements ClientInfoItem.ClientInfoItemListener, RemoteControl.RemoteControlListener, SnapclientService.SnapclientListener {
|
||||||
|
|
||||||
private static final String TAG = "Main";
|
private static final String TAG = "Main";
|
||||||
|
boolean bound = false;
|
||||||
private TextView tvInfo;
|
private TextView tvInfo;
|
||||||
private CheckBox cbScreenWakelock;
|
private CheckBox cbScreenWakelock;
|
||||||
private ListView lvClient;
|
private ListView lvClient;
|
||||||
|
@ -58,15 +51,15 @@ public class MainActivity extends AppCompatActivity implements ClientInfoItem.Cl
|
||||||
private RemoteControl remoteControl = null;
|
private RemoteControl remoteControl = null;
|
||||||
private ClientInfoAdapter clientInfoAdapter;
|
private ClientInfoAdapter clientInfoAdapter;
|
||||||
private SnapclientService snapclientService;
|
private SnapclientService snapclientService;
|
||||||
boolean bound = false;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ATTENTION: This was auto-generated to implement the App Indexing API.
|
* ATTENTION: This was auto-generated to implement the App Indexing API.
|
||||||
* See https://g.co/AppIndexing/AndroidStudio for more information.
|
* See https://g.co/AppIndexing/AndroidStudio for more information.
|
||||||
*/
|
*/
|
||||||
private GoogleApiClient client;
|
private GoogleApiClient client;
|
||||||
|
|
||||||
/** Defines callbacks for service binding, passed to bindService() */
|
/**
|
||||||
|
* Defines callbacks for service binding, passed to bindService()
|
||||||
|
*/
|
||||||
private ServiceConnection mConnection = new ServiceConnection() {
|
private ServiceConnection mConnection = new ServiceConnection() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -113,8 +106,9 @@ public class MainActivity extends AppCompatActivity implements ClientInfoItem.Cl
|
||||||
clientInfoAdapter = new ClientInfoAdapter(this, this);
|
clientInfoAdapter = new ClientInfoAdapter(this, this);
|
||||||
lvClient.setAdapter(clientInfoAdapter);
|
lvClient.setAdapter(clientInfoAdapter);
|
||||||
getSupportActionBar().setSubtitle("Host: no Snapserver found");
|
getSupportActionBar().setSubtitle("Host: no Snapserver found");
|
||||||
|
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#37474F")));
|
||||||
|
|
||||||
copyAssets();
|
Setup.copyAssets(this, new String[]{"snapclient"});
|
||||||
initializeDiscoveryListener();
|
initializeDiscoveryListener();
|
||||||
// ATTENTION: This was auto-generated to implement the App Indexing API.
|
// ATTENTION: This was auto-generated to implement the App Indexing API.
|
||||||
// See https://g.co/AppIndexing/AndroidStudio for more information.
|
// See https://g.co/AppIndexing/AndroidStudio for more information.
|
||||||
|
@ -172,57 +166,6 @@ public class MainActivity extends AppCompatActivity implements ClientInfoItem.Cl
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void copyAssets() {
|
|
||||||
AssetManager assetManager = getAssets();
|
|
||||||
String[] files = null;
|
|
||||||
try {
|
|
||||||
files = assetManager.list("");
|
|
||||||
} catch (IOException e) {
|
|
||||||
Log.e(TAG, "Failed to get asset file list.", e);
|
|
||||||
}
|
|
||||||
if (files != null) for (String filename : files) {
|
|
||||||
InputStream in = null;
|
|
||||||
OutputStream out = null;
|
|
||||||
try {
|
|
||||||
File outFile = new File(getFilesDir(), filename);
|
|
||||||
// if (outFile.exists() && (outFile.length() == assetManager.openFd(filename).getLength())) {
|
|
||||||
// Log.d("Main", "Exists: " + outFile.getAbsolutePath());
|
|
||||||
// continue;
|
|
||||||
// }
|
|
||||||
Log.d("Main", "Asset: " + outFile.getAbsolutePath());
|
|
||||||
in = assetManager.open(filename);
|
|
||||||
out = new FileOutputStream(outFile);
|
|
||||||
copyFile(in, out);
|
|
||||||
Runtime.getRuntime().exec("chmod 755 " + outFile.getAbsolutePath()).waitFor();
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.e(TAG, "Failed to copy asset file: " + filename, e);
|
|
||||||
} finally {
|
|
||||||
if (in != null) {
|
|
||||||
try {
|
|
||||||
in.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
// NOOP
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (out != null) {
|
|
||||||
try {
|
|
||||||
out.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
// NOOP
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void copyFile(InputStream in, OutputStream out) throws IOException {
|
|
||||||
byte[] buffer = new byte[1024];
|
|
||||||
int read;
|
|
||||||
while ((read = in.read(buffer)) != -1) {
|
|
||||||
out.write(buffer, 0, read);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateStartStopMenuItem() {
|
private void updateStartStopMenuItem() {
|
||||||
if (snapclientService.isRunning()) {
|
if (snapclientService.isRunning()) {
|
||||||
miStartStop.setIcon(android.R.drawable.ic_media_pause);
|
miStartStop.setIcon(android.R.drawable.ic_media_pause);
|
||||||
|
@ -270,7 +213,7 @@ public class MainActivity extends AppCompatActivity implements ClientInfoItem.Cl
|
||||||
MainActivity.this.runOnUiThread(new Runnable() {
|
MainActivity.this.runOnUiThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
getSupportActionBar().setSubtitle("Host: " + text);
|
getSupportActionBar().setSubtitle(text);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -289,7 +232,8 @@ public class MainActivity extends AppCompatActivity implements ClientInfoItem.Cl
|
||||||
mNsdManager.resolveService(service, new NsdManager.ResolveListener() {
|
mNsdManager.resolveService(service, new NsdManager.ResolveListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onResolveFailed(NsdServiceInfo nsdServiceInfo, int i) {
|
public void onResolveFailed(NsdServiceInfo nsdServiceInfo, int i) {
|
||||||
|
setStatus("Failed: " + i);
|
||||||
|
mNsdManager.stopServiceDiscovery(mDiscoveryListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -318,13 +262,13 @@ public class MainActivity extends AppCompatActivity implements ClientInfoItem.Cl
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStartDiscoveryFailed(String serviceType, int errorCode) {
|
public void onStartDiscoveryFailed(String serviceType, int errorCode) {
|
||||||
setStatus("Discovery failed: Error code:" + errorCode);
|
setStatus("StartDiscovery failed: " + errorCode);
|
||||||
mNsdManager.stopServiceDiscovery(this);
|
mNsdManager.stopServiceDiscovery(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStopDiscoveryFailed(String serviceType, int errorCode) {
|
public void onStopDiscoveryFailed(String serviceType, int errorCode) {
|
||||||
setStatus("Discovery failed: Error code:" + errorCode);
|
setStatus("StopDiscovery failed: " + errorCode);
|
||||||
mNsdManager.stopServiceDiscovery(this);
|
mNsdManager.stopServiceDiscovery(this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
78
android/Snapcast/src/main/java/de/badaix/snapcast/Setup.java
Normal file
78
android/Snapcast/src/main/java/de/badaix/snapcast/Setup.java
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
package de.badaix.snapcast;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.res.AssetManager;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by johannes on 16.01.16.
|
||||||
|
*/
|
||||||
|
public class Setup {
|
||||||
|
|
||||||
|
private static final String TAG = "Setup";
|
||||||
|
|
||||||
|
public static void copyAssets(Context context, String[] fileList) {
|
||||||
|
Set<String> fileSet = new HashSet<String>(Arrays.asList(fileList));
|
||||||
|
AssetManager assetManager = context.getAssets();
|
||||||
|
String[] files = null;
|
||||||
|
try {
|
||||||
|
files = assetManager.list("");
|
||||||
|
} catch (IOException e) {
|
||||||
|
Log.e(TAG, "Failed to get asset file list.", e);
|
||||||
|
}
|
||||||
|
if (files != null) for (String filename : files) {
|
||||||
|
if (!fileSet.contains(filename))
|
||||||
|
continue;
|
||||||
|
InputStream in = null;
|
||||||
|
OutputStream out = null;
|
||||||
|
try {
|
||||||
|
File outFile = new File(context.getFilesDir(), filename);
|
||||||
|
// if (outFile.exists() && (outFile.length() == assetManager.openFd(filename).getLength())) {
|
||||||
|
// Log.d("Main", "Exists: " + outFile.getAbsolutePath());
|
||||||
|
// continue;
|
||||||
|
// }
|
||||||
|
Log.d("Main", "Asset: " + outFile.getAbsolutePath());
|
||||||
|
in = assetManager.open(filename);
|
||||||
|
out = new FileOutputStream(outFile);
|
||||||
|
copyFile(in, out);
|
||||||
|
Runtime.getRuntime().exec("chmod 755 " + outFile.getAbsolutePath()).waitFor();
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.e(TAG, "Failed to copy asset file: " + filename, e);
|
||||||
|
} finally {
|
||||||
|
if (in != null) {
|
||||||
|
try {
|
||||||
|
in.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
// NOOP
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (out != null) {
|
||||||
|
try {
|
||||||
|
out.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
// NOOP
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void copyFile(InputStream in, OutputStream out) throws IOException {
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
int read;
|
||||||
|
while ((read = in.read(buffer)) != -1) {
|
||||||
|
out.write(buffer, 0, read);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue