Browse Source

[Android] Add shortcut to import game data

pull/3975/merge
staphen 4 years ago committed by Anders Jenbo
parent
commit
6d0b312466
  1. 8
      android-project/app/src/main/AndroidManifest.xml
  2. 93
      android-project/app/src/main/java/org/diasurgical/devilutionx/ImportActivity.java
  3. BIN
      android-project/app/src/main/res/mipmap-hdpi/ic_launcher_import_data.png
  4. BIN
      android-project/app/src/main/res/mipmap-mdpi/ic_launcher_import_data.png
  5. BIN
      android-project/app/src/main/res/mipmap-xhdpi/ic_launcher_import_data.png
  6. BIN
      android-project/app/src/main/res/mipmap-xxhdpi/ic_launcher_import_data.png
  7. BIN
      android-project/app/src/main/res/mipmap-xxxhdpi/ic_launcher_import_data.png
  8. 1
      android-project/app/src/main/res/values/strings.xml
  9. 13
      android-project/app/src/main/res/xml/shortcuts.xml

8
android-project/app/src/main/AndroidManifest.xml

@ -79,11 +79,19 @@
<data android:mimeType="*/*" />
</intent-filter>
-->
<!-- Location where shortcuts for the app are defined -->
<meta-data
android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
</activity>
<activity android:name=".DataActivity"
android:theme="@style/Theme.MyApplication">
</activity>
<activity android:name=".ImportActivity"
android:theme="@style/Theme.MyApplication">
</activity>
</application>
</manifest>

93
android-project/app/src/main/java/org/diasurgical/devilutionx/ImportActivity.java

@ -0,0 +1,93 @@
package org.diasurgical.devilutionx;
import android.app.Activity;
import android.content.ClipData;
import android.content.ContentResolver;
import android.content.Intent;
import android.net.Uri;
import android.support.annotation.Nullable;
import android.os.Bundle;
import android.support.v4.provider.DocumentFile;
import android.util.Log;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Objects;
public class ImportActivity extends Activity {
private static final int IMPORT_REQUEST_CODE = 0xD1AB70;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
intent.setType("*/*");
startActivityForResult(intent, IMPORT_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (requestCode != IMPORT_REQUEST_CODE)
return;
if (resultCode == Activity.RESULT_OK && data != null) {
importFile(data.getData());
handleClipData(data.getClipData());
}
finish();
}
private void handleClipData(ClipData clipData) {
if (clipData == null)
return;
for (int i = 0; i < clipData.getItemCount(); i++) {
ClipData.Item item = clipData.getItemAt(i);
if (item == null)
continue;
importFile(item.getUri());
}
}
private void importFile(Uri fileUri) {
if (fileUri == null)
return;
DocumentFile file = DocumentFile.fromSingleUri(getApplicationContext(), fileUri);
String fileName = file.getName();
String externalFilesDir = getExternalFilesDir(null).getAbsolutePath();
String externalFilesPath = externalFilesDir + "/" + fileName;
try {
InputStream inputStream = null;
OutputStream outputStream = null;
try {
ContentResolver contentResolver = getContentResolver();
inputStream = contentResolver.openInputStream(fileUri);
outputStream = new FileOutputStream(externalFilesPath);
// Transfer bytes from in to out
byte[] buf = new byte[4096];
int len;
while ((len = inputStream.read(buf)) > 0) {
outputStream.write(buf, 0, len);
}
} finally {
if (inputStream != null)
inputStream.close();
if (outputStream != null)
outputStream.close();
}
} catch (IOException exception) {
Log.e("importFile", Objects.requireNonNull(exception.getMessage()));
}
}
}

BIN
android-project/app/src/main/res/mipmap-hdpi/ic_launcher_import_data.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 489 B

BIN
android-project/app/src/main/res/mipmap-mdpi/ic_launcher_import_data.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 B

BIN
android-project/app/src/main/res/mipmap-xhdpi/ic_launcher_import_data.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 523 B

BIN
android-project/app/src/main/res/mipmap-xxhdpi/ic_launcher_import_data.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 893 B

BIN
android-project/app/src/main/res/mipmap-xxxhdpi/ic_launcher_import_data.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 985 B

1
android-project/app/src/main/res/values/strings.xml

@ -11,4 +11,5 @@
<string name="missing_game_data">Game data missing</string>
<string name="download_started">Download started</string>
<string name="shareware_data">Diablo Demo Data</string>
<string name="import_short_label">Import Data</string>
</resources>

13
android-project/app/src/main/res/xml/shortcuts.xml

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<shortcut
android:shortcutId="import"
android:enabled="true"
android:icon="@mipmap/ic_launcher_import_data"
android:shortcutShortLabel="@string/import_short_label">
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="org.diasurgical.devilutionx"
android:targetClass="org.diasurgical.devilutionx.ImportActivity" />
</shortcut>
</shortcuts>
Loading…
Cancel
Save