Adds one central import form.
This commit is contained in:
@@ -138,8 +138,7 @@ public class CollectionDetailFragment extends MCFragment {
|
|||||||
String[] options = new String[]{
|
String[] options = new String[]{
|
||||||
getString(R.string.action_add_monster),
|
getString(R.string.action_add_monster),
|
||||||
getString(R.string.action_create_monster),
|
getString(R.string.action_create_monster),
|
||||||
getString(R.string.action_import_monster_from_url),
|
getString(R.string.action_import)
|
||||||
getString(R.string.action_import_monster_from_file)
|
|
||||||
};
|
};
|
||||||
new AlertDialog.Builder(requireContext())
|
new AlertDialog.Builder(requireContext())
|
||||||
.setTitle(R.string.title_collection_actions)
|
.setTitle(R.string.title_collection_actions)
|
||||||
@@ -149,9 +148,7 @@ public class CollectionDetailFragment extends MCFragment {
|
|||||||
} else if (which == 1) {
|
} else if (which == 1) {
|
||||||
createNewMonster();
|
createNewMonster();
|
||||||
} else if (which == 2) {
|
} else if (which == 2) {
|
||||||
showImportUrlDialog();
|
showImportDialog();
|
||||||
} else if (which == 3) {
|
|
||||||
importMonsterFromFile();
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.setNegativeButton(R.string.dialog_cancel, null)
|
.setNegativeButton(R.string.dialog_cancel, null)
|
||||||
|
|||||||
@@ -151,8 +151,7 @@ public class DashboardFragment extends MCFragment {
|
|||||||
getString(R.string.action_add_single_monster),
|
getString(R.string.action_add_single_monster),
|
||||||
getString(R.string.action_add_collection_option),
|
getString(R.string.action_add_collection_option),
|
||||||
getString(R.string.action_create_monster),
|
getString(R.string.action_create_monster),
|
||||||
getString(R.string.action_import_monster_from_url),
|
getString(R.string.action_import)
|
||||||
getString(R.string.action_import_monster_from_file)
|
|
||||||
};
|
};
|
||||||
new AlertDialog.Builder(requireContext())
|
new AlertDialog.Builder(requireContext())
|
||||||
.setTitle(R.string.title_dashboard_actions)
|
.setTitle(R.string.title_dashboard_actions)
|
||||||
@@ -164,9 +163,7 @@ public class DashboardFragment extends MCFragment {
|
|||||||
} else if (which == 2) {
|
} else if (which == 2) {
|
||||||
createNewMonster();
|
createNewMonster();
|
||||||
} else if (which == 3) {
|
} else if (which == 3) {
|
||||||
showImportUrlDialog();
|
showImportDialog();
|
||||||
} else if (which == 4) {
|
|
||||||
importMonsterFromFile();
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.setNegativeButton(R.string.dialog_cancel, null)
|
.setNegativeButton(R.string.dialog_cancel, null)
|
||||||
|
|||||||
@@ -76,11 +76,8 @@ public class LibraryFragment extends MCFragment {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||||
if (item.getItemId() == R.id.menu_action_import_from_url) {
|
if (item.getItemId() == R.id.menu_action_import) {
|
||||||
showImportUrlDialog();
|
showImportDialog();
|
||||||
return true;
|
|
||||||
} else if (item.getItemId() == R.id.menu_action_import_from_file) {
|
|
||||||
importMonsterFromFile();
|
|
||||||
return true;
|
return true;
|
||||||
} else if (item.getItemId() == R.id.menu_action_export_library) {
|
} else if (item.getItemId() == R.id.menu_action_export_library) {
|
||||||
exportLibrary();
|
exportLibrary();
|
||||||
@@ -188,8 +185,7 @@ public class LibraryFragment extends MCFragment {
|
|||||||
private void showLibraryFabOptionsDialog() {
|
private void showLibraryFabOptionsDialog() {
|
||||||
String[] options = new String[]{
|
String[] options = new String[]{
|
||||||
getString(R.string.action_create_monster),
|
getString(R.string.action_create_monster),
|
||||||
getString(R.string.action_import_monster_from_url),
|
getString(R.string.action_import)
|
||||||
getString(R.string.action_import_monster_from_file)
|
|
||||||
};
|
};
|
||||||
new AlertDialog.Builder(requireContext())
|
new AlertDialog.Builder(requireContext())
|
||||||
.setTitle(R.string.title_library_actions)
|
.setTitle(R.string.title_library_actions)
|
||||||
@@ -197,9 +193,7 @@ public class LibraryFragment extends MCFragment {
|
|||||||
if (which == 0) {
|
if (which == 0) {
|
||||||
createNewMonster();
|
createNewMonster();
|
||||||
} else if (which == 1) {
|
} else if (which == 1) {
|
||||||
showImportUrlDialog();
|
showImportDialog();
|
||||||
} else if (which == 2) {
|
|
||||||
importMonsterFromFile();
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.setNegativeButton(R.string.dialog_cancel, null)
|
.setNegativeButton(R.string.dialog_cancel, null)
|
||||||
|
|||||||
@@ -114,16 +114,17 @@ public class MCFragment extends Fragment {
|
|||||||
importMonsterFromFile();
|
importMonsterFromFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showImportUrlDialog() {
|
public void showImportDialog() {
|
||||||
Context context = requireContext();
|
Context context = requireContext();
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||||
builder.setTitle(R.string.dialog_import_url_title);
|
builder.setTitle(R.string.dialog_import_title);
|
||||||
builder.setMessage(R.string.dialog_import_url_message);
|
|
||||||
|
|
||||||
final EditText input = new EditText(context);
|
View view = getLayoutInflater().inflate(R.layout.dialog_import, null);
|
||||||
input.setHint(R.string.dialog_import_url_hint);
|
builder.setView(view);
|
||||||
input.setSingleLine(true);
|
|
||||||
|
|
||||||
|
AlertDialog dialog = builder.create();
|
||||||
|
|
||||||
|
final EditText input = view.findViewById(R.id.edit_text_url);
|
||||||
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
|
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
|
||||||
if (clipboard != null && clipboard.hasPrimaryClip()) {
|
if (clipboard != null && clipboard.hasPrimaryClip()) {
|
||||||
ClipData clip = clipboard.getPrimaryClip();
|
ClipData clip = clipboard.getPrimaryClip();
|
||||||
@@ -139,20 +140,22 @@ public class MCFragment extends Fragment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
builder.setView(input);
|
view.findViewById(R.id.button_import_url).setOnClickListener(v -> {
|
||||||
|
|
||||||
builder.setPositiveButton(R.string.dialog_import, (dialog, which) -> {
|
|
||||||
String urlOrId = input.getText().toString().trim();
|
String urlOrId = input.getText().toString().trim();
|
||||||
if (!urlOrId.isEmpty()) {
|
if (!urlOrId.isEmpty()) {
|
||||||
if (getActivity() instanceof MainActivity) {
|
if (getActivity() instanceof MainActivity) {
|
||||||
((MainActivity) getActivity()).importMonsterFromInputAndNavigate(urlOrId);
|
((MainActivity) getActivity()).importMonsterFromInputAndNavigate(urlOrId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
dialog.dismiss();
|
||||||
});
|
});
|
||||||
|
|
||||||
builder.setNegativeButton(R.string.dialog_cancel, (dialog, which) -> dialog.cancel());
|
view.findViewById(R.id.button_import_file).setOnClickListener(v -> {
|
||||||
|
importMonsterFromFile();
|
||||||
|
dialog.dismiss();
|
||||||
|
});
|
||||||
|
|
||||||
builder.show();
|
dialog.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createNewMonster() {
|
public void createNewMonster() {
|
||||||
|
|||||||
43
Android/app/src/main/res/layout/dialog_import.xml
Normal file
43
Android/app/src/main/res/layout/dialog_import.xml
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:padding="24dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/dialog_import_message"
|
||||||
|
android:paddingBottom="8dp" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/edit_text_url"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:hint="@string/dialog_import_url_hint"
|
||||||
|
android:inputType="textUri"
|
||||||
|
android:importantForAutofill="no"
|
||||||
|
android:singleLine="true" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/button_import_url"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:text="@string/action_import_from_url" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:layout_marginBottom="16dp"
|
||||||
|
android:background="?android:attr/listDivider" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/button_import_file"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/action_import_monster_from_file" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
@@ -4,6 +4,6 @@
|
|||||||
<item
|
<item
|
||||||
android:id="@+id/menu_action_import_monster"
|
android:id="@+id/menu_action_import_monster"
|
||||||
android:icon="@drawable/ic_library_add_24"
|
android:icon="@drawable/ic_library_add_24"
|
||||||
android:title="@string/action_import_monster"
|
android:title="@string/action_import"
|
||||||
app:showAsAction="always" />
|
app:showAsAction="always" />
|
||||||
</menu>
|
</menu>
|
||||||
|
|||||||
@@ -3,13 +3,8 @@
|
|||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/menu_action_import_from_url"
|
android:id="@+id/menu_action_import"
|
||||||
android:title="@string/action_import_from_url"
|
android:title="@string/action_import"
|
||||||
app:showAsAction="never" />
|
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/menu_action_import_from_file"
|
|
||||||
android:title="@string/action_import_monster_from_file"
|
|
||||||
app:showAsAction="never" />
|
app:showAsAction="never" />
|
||||||
|
|
||||||
<item
|
<item
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
<string name="action_add_skill">Add Skill</string>
|
<string name="action_add_skill">Add Skill</string>
|
||||||
<string name="action_add_trait">Add Trait</string>
|
<string name="action_add_trait">Add Trait</string>
|
||||||
<string name="action_edit">Edit</string>
|
<string name="action_edit">Edit</string>
|
||||||
<string name="action_import_monster">Import File</string>
|
<string name="action_import">Import</string>
|
||||||
<string name="app_name">MonsterCards</string>
|
<string name="app_name">MonsterCards</string>
|
||||||
<string name="charisma_abbreviation">CHA</string>
|
<string name="charisma_abbreviation">CHA</string>
|
||||||
<string name="constitution_abbreviation">CON</string>
|
<string name="constitution_abbreviation">CON</string>
|
||||||
@@ -163,8 +163,8 @@
|
|||||||
<string name="snackbar_dashboard_cleared">Dashboard cleared</string>
|
<string name="snackbar_dashboard_cleared">Dashboard cleared</string>
|
||||||
<string name="no_monsters_available">No monsters available in library. Create one first!</string>
|
<string name="no_monsters_available">No monsters available in library. Create one first!</string>
|
||||||
<string name="action_import_from_url">Import URL</string>
|
<string name="action_import_from_url">Import URL</string>
|
||||||
<string name="dialog_import_url_title">Import Character</string>
|
<string name="dialog_import_title">Import</string>
|
||||||
<string name="dialog_import_url_message">Enter or paste a D&D Beyond URL, Character ID, or Open5e JSON payload:</string>
|
<string name="dialog_import_message">Enter or paste a URL, ID, or data payload:</string>
|
||||||
<string name="dialog_import_url_hint">e.g. D&D Beyond URL or Open5e JSON</string>
|
<string name="dialog_import_url_hint">e.g. D&D Beyond URL or Open5e JSON</string>
|
||||||
<string name="dialog_import">Import</string>
|
<string name="dialog_import">Import</string>
|
||||||
<string name="toast_importing_url">Importing…</string>
|
<string name="toast_importing_url">Importing…</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user