Skip to content

Commit

Permalink
Added import world/player button
Browse files Browse the repository at this point in the history
  • Loading branch information
jbro129 committed Dec 5, 2021
1 parent fdd03c3 commit b500d41
Show file tree
Hide file tree
Showing 4 changed files with 183 additions and 8 deletions.
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ android {
applicationId "com.and.games505.TerrariaPaid"
minSdk 21
targetSdk 30
versionCode 1
versionName "1.0"
versionCode 2
versionName "1.1"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,14 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jbro129.terrariastub">

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.TerrariaStub">
Expand Down
162 changes: 160 additions & 2 deletions app/src/main/java/com/jbro129/terrariastub/MainActivity.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,40 @@
package com.jbro129.terrariastub;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class MainActivity extends AppCompatActivity {

Expand All @@ -21,6 +45,7 @@ public class MainActivity extends AppCompatActivity {
private TextView info;
private Button wipe;
private Button recreate;
private Button importFile;

@Override
protected void onCreate(Bundle savedInstanceState) {
Expand All @@ -31,6 +56,7 @@ protected void onCreate(Bundle savedInstanceState) {
info = findViewById(R.id.info);
wipe = findViewById(R.id.wipe);
recreate = findViewById(R.id.recreate);
importFile = findViewById(R.id.importFile);

wipe.setOnClickListener(v -> {
Log.d(TAG, "Wiping environment");
Expand All @@ -41,15 +67,92 @@ protected void onCreate(Bundle savedInstanceState) {
wipe();
initEnvironment();
});
importFile.setOnClickListener(v -> {
File downloads = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" +
Environment.DIRECTORY_DOWNLOADS + "/");

Log.d(TAG, "Importing File from " + downloads.getAbsolutePath());

ScrollView scrollView = new ScrollView(MainActivity.this);
scrollView.setScrollBarSize(5);

LinearLayout files = new LinearLayout(MainActivity.this);
files.setOrientation(LinearLayout.VERTICAL);
files.setGravity(Gravity.CENTER);

scrollView.addView(files);

AlertDialog.Builder build = new AlertDialog.Builder(MainActivity.this);
final AlertDialog alert = build.create();
alert.setView(scrollView);

alert.show();

ArrayList<File> filesList = getWorldsAndPlayers(downloads.getAbsolutePath());

if (filesList.isEmpty())
{
Log.d(TAG, "No players or world found");
}

for (File file : filesList)
{
boolean world = file.getAbsolutePath().contains(".wld");

addButtonLayout(MainActivity.this, files, file, v1 -> {
File dest = (world)
?
new File(externalFilesDir.getAbsolutePath() + "/Worlds/" + file.getName())
:
new File(externalFilesDir.getAbsolutePath() + "/Players/" + file.getName());

if (copyFile(file, dest))
{
Log.d(TAG, "Imported to " + dest.getAbsolutePath());
Toast.makeText(MainActivity.this, "Imported " + file.getName(), Toast.LENGTH_SHORT).show();
}
else
{
Log.e(TAG, "Failed to import " + file.getAbsolutePath() + " to " + dest.getAbsolutePath());
Toast.makeText(MainActivity.this, "Failed... Check logs", Toast.LENGTH_SHORT).show();
}
alert.dismiss();
});
}
});

externalFilesDir = this.getExternalFilesDir(null).getParentFile();
Log.d(TAG, "external files dir: " + externalFilesDir.getAbsolutePath());

info.setText("Env Info: " + BuildConfig.APPLICATION_ID + " " + BuildConfig.VERSION_NAME + " " + BuildConfig.VERSION_CODE);

if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "read write access not granted or not requested");
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},
123);
} else {
Log.d(TAG, "read write access granted");
}

initEnvironment();
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);

if (requestCode == 123) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "storage permission granted");
} else {
Log.d(TAG, "storage permission not granted");
}
}
}

private void wipe()
{
Log.d(TAG, "Data path to wipe: " + externalFilesDir.getAbsolutePath());
Expand Down Expand Up @@ -93,8 +196,8 @@ private void initEnvironment()
files.add(configFile);
files.add(favoritesFile);
files.add(virtualControlsFile);
files.add(dummyWorldFile);
files.add(dummyPlayerFile);
// files.add(dummyWorldFile);
// files.add(dummyPlayerFile);

for (File folder : folders)
{
Expand Down Expand Up @@ -149,6 +252,61 @@ private void initEnvironment()

}

public ArrayList<File> getWorldsAndPlayers(String path)
{
ArrayList<File> list = new ArrayList<>();

File[] files = new File(path).listFiles((dir, name) -> name.contains(".wld") || name.contains(".plr"));

if (files != null && files.length != 0)
{
Collections.addAll(list, files);
}

return list;
}

@SuppressLint("NewApi")
public static void addButtonLayout(Context ctx, LinearLayout layout, File file, View.OnClickListener listener)
{
Button button = new Button(ctx);
button.setText(file.getName());
button.setTextAppearance(R.style.TextAppearance_AppCompat_Large);
button.setAllCaps(false);
button.setTextColor(Color.BLACK);
//button.setTextSize(16.0F);
button.setGravity(Gravity.CENTER_HORIZONTAL);
button.setOnClickListener(listener);

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER_VERTICAL;

params.setMargins(10,15,10,15);

button.setLayoutParams(params);

layout.addView(button);
}

public static boolean copyFile(File source, File dest) {
try (InputStream is = new FileInputStream(source); OutputStream os = new FileOutputStream(dest)) {

byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
}
catch (Exception e) {
e.printStackTrace();

return false;
}
return dest.exists();
}

public boolean createDummyFile(File path)
{
File root = path.getParentFile();
Expand Down
21 changes: 17 additions & 4 deletions app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
app:layout_constraintVertical_bias="0.044" />

<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
Expand All @@ -46,22 +47,34 @@

<Button
android:id="@+id/wipe"
style="@style/TextAppearance.AppCompat.Widget.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="15dp"
android:textAllCaps="false"
android:text="Wipe"
style="@style/TextAppearance.AppCompat.Widget.Button.Colored" />
android:textAllCaps="false" />

<Button
android:id="@+id/recreate"
style="@style/TextAppearance.AppCompat.Widget.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ReCreate"
android:textAllCaps="false"
style="@style/TextAppearance.AppCompat.Widget.Button.Colored" />
android:textAllCaps="false" />

</LinearLayout>

<Button
android:id="@+id/importFile"
style="@style/TextAppearance.AppCompat.Widget.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="28dp"
android:text="Import World/Player"
android:textAllCaps="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout" />


</androidx.constraintlayout.widget.ConstraintLayout>

0 comments on commit b500d41

Please sign in to comment.