apply plugin: 'com.android.application'
android {
- compileSdkVersion 27
- buildToolsVersion "28.0.0"
+ compileSdkVersion 31
+ //buildToolsVersion "31.0.0"
defaultConfig {
applicationId "jp.sourceforge.gokigen.memoma"
minSdkVersion 14
- targetSdkVersion 27
- versionCode 15
- versionName "1.3.0"
+ targetSdkVersion 31
+ versionCode 16
+ versionName "1.3.1"
}
buildTypes {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
}
dependencies {
api fileTree(dir: 'libs', include: ['*.jar'])
- api 'com.android.support:appcompat-v7:27.1.1'
- api 'com.android.support.constraint:constraint-layout:1.1.2'
- api 'com.android.support:preference-v14:27.1.1'
- api 'com.android.support:preference-v7:27.1.1'
+ implementation 'androidx.appcompat:appcompat:1.3.1'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
+ implementation 'androidx.preference:preference:1.1.1'
}
<application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/Theme.AppCompat">
<activity android:name=".Main"
+ android:exported="true"
android:label="@string/app_name"
android:screenOrientation="landscape">
<intent-filter>
<activity android:name=".preference.Preference" android:label="@string/preference_name">
</activity>
<activity android:name=".extension.ExtensionActivity"
+ android:exported="true"
android:label="@string/extent_name"
android:theme="@android:style/Theme.Holo.Light.DarkActionBar"
android:screenOrientation="landscape">
</intent-filter>
</activity>
<provider
- android:name="android.support.v4.content.FileProvider"
+ android:name="androidx.core.content.FileProvider"
android:authorities="jp.sourceforge.gokigen.memoma.fileprovider"
android:exported="false"
android:grantUriPermissions="true"
package jp.sourceforge.gokigen.memoma;
import android.os.Build;
-import android.support.v4.app.ActivityCompat;
-import android.support.v4.content.ContextCompat;
-import android.support.v7.app.AppCompatActivity;
import android.Manifest;
import android.app.Dialog;
import android.content.Intent;
import static android.os.Build.VERSION_CODES.KITKAT;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.app.ActivityCompat;
+import androidx.core.content.ContextCompat;
+
/**
* メイン画面の処理
*
* @author MRSa
*
*/
-public class Main extends AppCompatActivity
+public class Main extends AppCompatActivity
{
public static final String APP_IDENTIFIER = "Gokigen";
public static final String APP_BASEDIR = "/MeMoMa";
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
+ super.onActivityResult(requestCode, resultCode, data);
try
{
// 子画面からもらった情報の応答処理をイベント処理クラスに依頼する
- listener.onActivityResult(requestCode, resultCode, data);
+ listener.onActivityResult(requestCode, resultCode, data);
}
catch (Exception ex)
{
- ex.printStackTrace();
+ ex.printStackTrace();
}
}
}
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
-import android.preference.PreferenceManager;
-import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.widget.ImageButton;
import android.widget.SeekBar;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.preference.PreferenceManager;
+
import jp.sourceforge.gokigen.memoma.dialogs.ConfirmationDialog;
import jp.sourceforge.gokigen.memoma.dialogs.CreditDialog;
import jp.sourceforge.gokigen.memoma.dialogs.ItemSelectionDialog;
parent.setTitle(memomaInfo);
// アクションバーとファイル名の準備
- android.support.v7.app.ActionBar bar = parent.getSupportActionBar();
+ ActionBar bar = parent.getSupportActionBar();
if (bar != null)
{
dataInOutManager.prepare(objectHolder, bar, memomaInfo);
Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::onRestoreInstanceState() : " + savedInstanceState.toString());
}
- public boolean finishTextEditDialog(String message)
+ public void finishTextEditDialog(String message)
{
if ((message == null)||(message.length() == 0))
{
// データが入力されていなかったので、何もしない。
- return (false);
+ return;
}
try
{
e.printStackTrace();
}
- return (true);
}
- public boolean cancelTextEditDialog()
+ public void cancelTextEditDialog()
{
- return (false);
}
/**
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
-import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
*/
public class ConfirmationDialog
{
- private Context context;
+ private final Context context;
private IResultReceiver resultReceiver = null;
private String message = "";
private String title = "";
}
builder.setView(layout);
builder.setCancelable(false);
- builder.setPositiveButton(context.getString(R.string.confirmYes), new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int id)
- {
- if (resultReceiver != null)
- {
- resultReceiver.acceptConfirmation();
- }
- dialog.cancel();
- System.gc();
- }
- });
- builder.setNegativeButton(context.getString(R.string.confirmNo), new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int id)
- {
- if (resultReceiver != null)
- {
- resultReceiver.rejectConfirmation();
- }
- dialog.cancel();
- System.gc();
- }
- });
+ builder.setPositiveButton(context.getString(R.string.confirmYes), (dialog, id) -> {
+ if (resultReceiver != null)
+ {
+ resultReceiver.acceptConfirmation();
+ }
+ dialog.cancel();
+ System.gc();
+ });
+ builder.setNegativeButton(context.getString(R.string.confirmNo), (dialog, id) -> {
+ if (resultReceiver != null)
+ {
+ resultReceiver.rejectConfirmation();
+ }
+ dialog.cancel();
+ System.gc();
+ });
return (builder.create());
}
*/
public class CreditDialog
{
- private Activity context;
+ private final Activity context;
/**
* コンストラクタ
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
-import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
-import android.widget.AdapterView;
import android.widget.ListView;
import jp.sourceforge.gokigen.memoma.io.ExternalStorageFileUtility;
*/
public class FileSelectionDialog
{
- private Context context = null;
- private IResultReceiver resultReceiver = null;
- private ExternalStorageFileUtility fileUtility = null;
- private MeMoMaDataFileHolder dataFileHolder = null;
- private String title = null;
- private String fileExtension = null;
- private Dialog dialogRef = null;
+ private final Context context;
+ private final IResultReceiver resultReceiver;
+ private final MeMoMaDataFileHolder dataFileHolder;
+ private final String title;
+ private final String fileExtension;
+ private Dialog dialogRef;
/**
* コンストラクタ
- *
- * @param arg
+ *
*/
public FileSelectionDialog(Context arg, String titleMessage, ExternalStorageFileUtility utility, String extension, IResultReceiver receiver)
{
context = arg;
resultReceiver = receiver;
title = titleMessage;
- fileUtility = utility;
fileExtension = extension;
- dataFileHolder = new MeMoMaDataFileHolder(context, android.R.layout.simple_list_item_1, fileUtility, extension);
+ dataFileHolder = new MeMoMaDataFileHolder(context, android.R.layout.simple_list_item_1, utility, extension);
}
/**
* ファイル一覧データをつくる!
- *
- * @param currentFileName
- * @param extendDirectory
+ *
*/
public void prepare(String currentFileName, String extendDirectory)
{
/**
* ファイル選択ダイアログを応答する
- *
- * @return
+ *
*/
public Dialog getDialog()
{
builder.setView(layout);
// アイテムを選択したときの処理
- listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- //@Override
- public void onItemClick(AdapterView<?> parentView, View view, int position, long id)
- {
- ListView listView = (ListView) parentView;
- String fileName = (String) listView.getItemAtPosition(position);
+ listView.setOnItemClickListener((parentView, view, position, id) -> {
+ ListView listView1 = (ListView) parentView;
+ String fileName = (String) listView1.getItemAtPosition(position);
- /// リストが選択されたときの処理...データを開く
- if (resultReceiver != null)
- {
- resultReceiver.selectedFileName(fileName + fileExtension);
- }
- if (dialogRef != null)
- {
- dialogRef.dismiss();
- dialogRef = null;
- }
- System.gc();
+ /// リストが選択されたときの処理...データを開く
+ if (resultReceiver != null)
+ {
+ resultReceiver.selectedFileName(fileName + fileExtension);
+ }
+ if (dialogRef != null)
+ {
+ dialogRef.dismiss();
+ dialogRef = null;
}
+ System.gc();
});
builder.setCancelable(true);
- builder.setNegativeButton(context.getString(R.string.confirmNo), new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int id)
- {
- dialog.cancel();
- System.gc();
- }
- });
+ builder.setNegativeButton(context.getString(R.string.confirmNo), (dialog, id) -> {
+ dialog.cancel();
+ System.gc();
+ });
dialogRef = builder.create();
return (dialogRef);
}
* ファイルが選択された!
*
*/
- public abstract void selectedFileName(String fileName);
+ void selectedFileName(String fileName);
}
}
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
-import android.content.DialogInterface;
import jp.sourceforge.gokigen.memoma.R;
*/
public class ItemSelectionDialog
{
- private Context context = null;
+ private final Context context;
private ISelectionItemReceiver resultReceiver = null;
private ISelectionItemHolder dataHolder = null;
private String title = "";
/**
* 確認ダイアログを応答する
- * @return
*/
public Dialog getDialog()
{
builder.setCancelable(false);
if (dataHolder != null)
{
- if (dataHolder.isMultipleSelection() == false)
+ if (!dataHolder.isMultipleSelection())
{
- builder.setItems(dataHolder.getItems(), new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int id)
- {
- boolean ret = false;
- if (resultReceiver != null)
- {
- resultReceiver.itemSelected(id, dataHolder.getItem(id));
- }
- if (ret == true)
- {
- dialog.dismiss();
- }
- else
- {
- dialog.cancel();
- }
- System.gc();
-
- }
- });
+ builder.setItems(dataHolder.getItems(), (dialog, id) -> {
+ if (resultReceiver != null)
+ {
+ resultReceiver.itemSelected(id, dataHolder.getItem(id));
+ }
+ dialog.cancel();
+ System.gc();
+ });
}
else
{
- /** 複数選択の選択肢を準備する **/
- builder.setMultiChoiceItems(dataHolder.getItems(), dataHolder.getSelectionStatus(), new DialogInterface.OnMultiChoiceClickListener()
- {
- public void onClick(DialogInterface dialog, int which, boolean isChecked)
- {
- if (resultReceiver != null)
- {
- resultReceiver.itemSelected(which, dataHolder.getItem(which));
- }
- }
+ // 複数選択の選択肢を準備する
+ builder.setMultiChoiceItems(dataHolder.getItems(), dataHolder.getSelectionStatus(), (dialog, which, isChecked) -> {
+ if (resultReceiver != null)
+ {
+ resultReceiver.itemSelected(which, dataHolder.getItem(which));
+ }
});
- /** 複数選択時には、OKボタンを押したときに選択を確定させる。 **/
- builder.setPositiveButton(context.getString(R.string.confirmYes), new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int id)
- {
- boolean ret = false;
- if (resultReceiver != null)
- {
- resultReceiver.itemSelectedMulti(dataHolder.getItems(), dataHolder.getSelectionStatus());
- }
- if (ret == true)
- {
- dialog.dismiss();
- }
- else
- {
- dialog.cancel();
- }
- System.gc();
- }
- });
+ // 複数選択時には、OKボタンを押したときに選択を確定させる。
+ builder.setPositiveButton(context.getString(R.string.confirmYes), (dialog, id) -> {
+ if (resultReceiver != null)
+ {
+ resultReceiver.itemSelectedMulti(dataHolder.getItems(), dataHolder.getSelectionStatus());
+ }
+ dialog.cancel();
+ System.gc();
+ });
}
}
-// builder.setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems, OnMultiChoiceClickListener listener)
-/**
-**/
- builder.setNegativeButton(context.getString(R.string.confirmNo), new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int id)
- {
- boolean ret = false;
- if (resultReceiver != null)
- {
- resultReceiver.canceledSelection();
- }
- if (ret == true)
- {
- dialog.dismiss();
- }
- else
- {
- dialog.cancel();
- }
- System.gc();
- }
+ builder.setNegativeButton(context.getString(R.string.confirmNo), (dialog, id) -> {
+ if (resultReceiver != null)
+ {
+ resultReceiver.canceledSelection();
+ }
+ dialog.cancel();
+ System.gc();
});
return (builder.create());
}
public interface ISelectionItemHolder
{
- public abstract boolean isMultipleSelection();
+ boolean isMultipleSelection();
- public abstract String[] getItems();
- public abstract String getItem(int index);
+ String[] getItems();
+ String getItem(int index);
/** 複数選択時に使用する **/
- public abstract boolean[] getSelectionStatus();
- public abstract void setSelectionStatus(int index, boolean isSelected);
- };
+ boolean[] getSelectionStatus();
+ void setSelectionStatus(int index, boolean isSelected);
+ }
public interface ISelectionItemReceiver
{
- public abstract void itemSelected(int index, String itemValue);
- public abstract void itemSelectedMulti(String[] items, boolean[] status);
- public abstract void canceledSelection();
+ void itemSelected(int index, String itemValue);
+ void itemSelectedMulti(String[] items, boolean[] status);
+ void canceledSelection();
}
}
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
-import android.content.DialogInterface;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
*/
public class TextEditDialog
{
- private Context context = null;
+ private final Context context;
private ITextEditResultReceiver resultReceiver = null;
- private int icon = 0;
+ private final int icon;
private String title = null;
/**
* コンストラクタ
- * @param arg
*/
public TextEditDialog(Context arg, int titleIcon)
{
/**
* クラスの準備
- * @param receiver
- * @param initialMessage
*/
public void prepare(Dialog layout, ITextEditResultReceiver receiver, String titleMessage, String initialMessage, boolean isSingleLine)
{
/**
* テキスト編集ダイアログを応答する
- * @return
*/
public Dialog getDialog()
{
builder.setView(layout);
builder.setCancelable(false);
- builder.setPositiveButton(context.getString(R.string.confirmYes), new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int id)
- {
- boolean ret = false;
- if (resultReceiver != null)
- {
- resultReceiver.finishTextEditDialog(editComment.getText().toString());
- }
- if (ret == true)
- {
- dialog.dismiss();
- }
- else
- {
- dialog.cancel();
- }
- System.gc();
- }
- });
- builder.setNegativeButton(context.getString(R.string.confirmNo), new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int id)
- {
- boolean ret = false;
- if (resultReceiver != null)
- {
- resultReceiver.cancelTextEditDialog();
- }
- if (ret == true)
- {
- dialog.dismiss();
- }
- else
- {
- dialog.cancel();
- }
- System.gc();
- }
- });
+ builder.setPositiveButton(context.getString(R.string.confirmYes), (dialog, id) -> {
+ if (resultReceiver != null)
+ {
+ resultReceiver.finishTextEditDialog(editComment.getText().toString());
+ }
+ dialog.cancel();
+ System.gc();
+ });
+ builder.setNegativeButton(context.getString(R.string.confirmNo), (dialog, id) -> {
+ if (resultReceiver != null)
+ {
+ resultReceiver.cancelTextEditDialog();
+ }
+ dialog.cancel();
+ System.gc();
+ });
return (builder.create());
}
public interface ITextEditResultReceiver
{
- public abstract boolean finishTextEditDialog(String message);
- public abstract boolean cancelTextEditDialog();
+ void finishTextEditDialog(String message);
+ void cancelTextEditDialog();
}
}
* データの更新
*
*/
- public boolean finishTextEditDialog(String message)
+ public void finishTextEditDialog(String message)
{
if ((message == null)||(message.length() == 0))
{
// データが入力されていなかったので、何もしない。
- return (false);
+ return;
}
// 文字列を記録
// リソースIDが指定されていない場合は、タイトルを更新する
parent.setTitle(message);
}
-
- return (true);
+
}
/**
* データを更新しないとき...
*/
- public boolean cancelTextEditDialog()
+ public void cancelTextEditDialog()
{
- return (false);
}
}
import android.view.SurfaceView;
import jp.sourceforge.gokigen.memoma.Main;
-import jp.sourceforge.gokigen.memoma.drawers.ICanvasDrawer;
/**
* 描画するくらす
public boolean onTouchEvent(MotionEvent event)
{
boolean ret = false;
- if (canvasDrawer != null)
- {
- ret = canvasDrawer.onTouchEvent(event);
- if (ret)
- {
- doDraw();
- }
- }
- else
+ try
+ {
+ if (canvasDrawer != null)
+ {
+ ret = canvasDrawer.onTouchEvent(event);
+ if (ret)
+ {
+ doDraw();
+ }
+ }
+ else
+ {
+ super.performClick();
+ }
+ }
+ catch (Exception e)
{
- super.performClick();
+ e.printStackTrace();
}
return (ret);
}
}
catch (Exception ex)
{
- //
- //
- //
+ ex.printStackTrace();
}
}
public void doDraw()
{
//Log.v(Main.APP_IDENTIFIER, "GokigenSurfaceView::doDraw()");
-
SurfaceHolder drawHolder = getHolder();
try
{
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.MotionEvent;
-import android.view.GestureDetector;
+import android.view.GestureDetector;
import android.view.ScaleGestureDetector;
import android.widget.SeekBar;
import android.widget.TextView;
// 以下の値は、MeMoMaListenerで初期値を設定する
private int objectStyle = MeMoMaObjectHolder.DRAWSTYLE_RECTANGLE;
- private LineStyleHolder lineStyleHolder;
+ private final LineStyleHolder lineStyleHolder;
private float drawScale = 1.0f; // 表示の倍率
private float drawTransX = 0.0f; // 並行移動距離 (X)
private String backgroundBitmapUri = null;
private Bitmap backgroundBitmap = null;
- private MeMoMaObjectHolder objectHolder;
- private MeMoMaConnectLineHolder lineHolder;
- private IObjectSelectionReceiver selectionReceiver;
+ private final MeMoMaObjectHolder objectHolder;
+ private final MeMoMaConnectLineHolder lineHolder;
+ private final IObjectSelectionReceiver selectionReceiver;
- private GestureDetector gestureDetector;
- private ScaleGestureDetector scaleGestureDetector;
+ private final GestureDetector gestureDetector;
+ private final ScaleGestureDetector scaleGestureDetector;
- private Activity parent;
+ private final Activity parent;
/**
* コンストラクタ
static public float drawObjectDrum(Canvas canvas, RectF objectShape, Paint paint, Paint.Style paintStyle)
{
- float margin = MeMoMaCanvasDrawer.OBJECTLABEL_MARGIN * 1.0f;
+ float margin = MeMoMaCanvasDrawer.OBJECTLABEL_MARGIN;
// 円柱の描画
Path path = new Path();
path.moveTo(objectShape.left, objectShape.top);
return (MeMoMaCanvasDrawer.OBJECTLABEL_MARGIN / 2.0f);
}
- static public float drawObjectNoRegion(Canvas canvas, RectF objectShape, Paint paint)
+ static public void drawObjectNoRegion(Canvas canvas, RectF objectShape, Paint paint)
{
// 何も表示しないとわからないので、ラベルが無いときには枠を表示する
paint.setColor(Color.DKGRAY);
canvas.drawRect(objectShape, paint);
paint.setColor(Color.WHITE);
- return (0.0f);
}
static public float drawObjectLoopStart(Canvas canvas, RectF objectShape, Paint paint)
{
}
+
/**
* 矢印を描画する処理 (ツリー表示時)
*
import android.app.Dialog;
import android.content.Intent;
import android.net.Uri;
-import android.support.v4.content.FileProvider;
+import androidx.core.content.FileProvider;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListView;
import android.widget.Toast;
-import jp.sourceforge.gokigen.memoma.holders.OperationHistoryHolder;
import jp.sourceforge.gokigen.memoma.holders.PositionObject;
import jp.sourceforge.gokigen.memoma.io.ExternalStorageFileUtility;
import jp.sourceforge.gokigen.memoma.dialogs.FileSelectionDialog;
import jp.sourceforge.gokigen.memoma.Main;
-import jp.sourceforge.gokigen.memoma.holders.MeMoMaConnectLineHolder;
import jp.sourceforge.gokigen.memoma.io.MeMoMaFileExportCsvProcess;
import jp.sourceforge.gokigen.memoma.io.MeMoMaFileImportCsvProcess;
import jp.sourceforge.gokigen.memoma.io.MeMoMaFileLoadingProcess;
package jp.sourceforge.gokigen.memoma.holders;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
/**
* オブジェクト間を接続するクラス
package jp.sourceforge.gokigen.memoma.holders;
import android.graphics.RectF;
-import android.support.annotation.NonNull;
import android.util.Log;
+import androidx.annotation.NonNull;
+
public class OperationHistoryHolder implements IOperationHistoryHolder
{
private final String TAG = toString();
package jp.sourceforge.gokigen.memoma.holders;
import android.graphics.RectF;
-import android.support.annotation.NonNull;
+
+import androidx.annotation.NonNull;
public class PositionObject
{
import android.content.ContentValues;
import android.net.Uri;
import android.provider.MediaStore;
-import android.support.v7.app.ActionBar;
import android.app.Activity;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.Toast;
+import androidx.appcompat.app.ActionBar;
+
import jp.sourceforge.gokigen.memoma.drawers.GokigenSurfaceView;
import jp.sourceforge.gokigen.memoma.Main;
import jp.sourceforge.gokigen.memoma.R;
import android.content.Context;
import android.graphics.Color;
-import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
+import androidx.annotation.NonNull;
+
public class SymbolListArrayAdapter extends ArrayAdapter<SymbolListArrayItem>
{
private final LayoutInflater inflater;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.provider.MediaStore;
-import android.support.annotation.NonNull;
import android.util.Log;
+import androidx.annotation.NonNull;
+
import jp.sourceforge.gokigen.memoma.R;
/**
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
- jcenter()
google()
+ mavenCentral()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.1.3'
+ classpath 'com.android.tools.build:gradle:7.0.3'
}
}
allprojects {
repositories {
- jcenter()
- maven {
- url "https://maven.google.com"
- }
+ google()
+ mavenCentral()
}
}
--- /dev/null
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx4096m
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app"s APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Automatically convert third-party libraries to use AndroidX
+android.enableJetifier=true
+# Kotlin code style for this project: "official" or "obsolete":
+kotlin.code.style=official
\ No newline at end of file