diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 160c466..75b22a4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -17,9 +17,6 @@
android:supportsRtl="true"
android:theme="@style/Theme.Acanthus"
android:usesCleartextTraffic="true">
-
diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/MainActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/MainActivity.java
index b56eb3c..fc7e634 100644
--- a/app/src/main/java/org/ntlab/acanthus_client/views/MainActivity.java
+++ b/app/src/main/java/org/ntlab/acanthus_client/views/MainActivity.java
@@ -3,18 +3,11 @@
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.widget.Button;
import com.google.android.material.bottomnavigation.BottomNavigationView;
-import org.ntlab.acanthus_client.Acanthus;
import org.ntlab.acanthus_client.R;
import org.ntlab.acanthus_client.databinding.ActivityMainBinding;
-import org.ntlab.acanthus_client.views.main_menu_ui.mypage.MyPageFragment;
-import org.ntlab.acanthus_client.views.paint.SendScreenShotActivity;
-import org.ntlab.acanthus_client.views.userpage.UserPageActivity;
import androidx.appcompat.app.AppCompatActivity;
import androidx.navigation.NavController;
diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintActivity.java
index dfed82b..b774448 100644
--- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintActivity.java
+++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintActivity.java
@@ -9,8 +9,7 @@
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
-
-import com.google.android.material.bottomnavigation.BottomNavigationView;
+import android.widget.Toast;
import org.ntlab.acanthus_client.Acanthus;
import org.ntlab.acanthus_client.R;
@@ -22,6 +21,7 @@
private PaintCanvas paintCanvas;
private PaintToolBar paintToolBar;
+ private PaintScreenShot paintScreenShot;
private ActivityPaintBinding binding;
private PaintViewModel paintViewModel;
@@ -31,6 +31,7 @@
public void onDestroy() {
super.onDestroy();
paintViewModel.stop();
+ paintScreenShot.onDestroy();
}
//-----------------------------------------------------------------
@@ -40,11 +41,13 @@
init();
initView();
+ paintScreenShot.onCreate();
+
Button button = findViewById(R.id.button_keep);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- Intent intent = new Intent(getApplication(), SendScreenShotActivity.class);
+ Intent intent = new Intent(getApplication(), PaintScreenShot.class);
startActivity(intent);
}
});
@@ -91,6 +94,7 @@
paintCanvas = (PaintCanvas) findViewById(R.id.myCanvas);
paintCanvas.setPaintViewModel(paintViewModel);
+ paintScreenShot = new PaintScreenShot(this);
paintToolBar = new PaintToolBar(this, paintCanvas);
}
@@ -115,5 +119,10 @@
}
//------------------------------------------------------------------
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ paintScreenShot.onActivityResult(requestCode, resultCode, data);
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintScreenShot.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintScreenShot.java
new file mode 100644
index 0000000..67cd22d
--- /dev/null
+++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintScreenShot.java
@@ -0,0 +1,141 @@
+package org.ntlab.acanthus_client.views.paint;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.app.Activity;
+import android.graphics.ImageFormat;
+import android.os.Bundle;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.PixelFormat;
+import android.hardware.display.DisplayManager;
+import android.hardware.display.VirtualDisplay;
+import android.media.Image;
+import android.media.ImageReader;
+import android.media.projection.MediaProjection;
+import android.media.projection.MediaProjectionManager;
+import android.util.DisplayMetrics;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.Toast;
+
+import com.google.android.material.bottomnavigation.BottomNavigationView;
+
+import org.ntlab.acanthus_client.R;
+
+import java.nio.ByteBuffer;
+
+import static android.app.Activity.RESULT_OK;
+import static android.content.Context.MEDIA_PROJECTION_SERVICE;
+import static android.graphics.ImageFormat.JPEG;
+
+
+public class PaintScreenShot {
+
+ private AppCompatActivity appCompatActivity;
+ private MediaProjectionManager mpManager;
+ private MediaProjection mProjection;
+ private static final int REQUEST_MEDIA_PROJECTION = 1001;
+
+ private int displayWidth, displayHeight;
+ private ImageReader imageReader;
+ private VirtualDisplay virtualDisplay;
+ private int screenDensity;
+ private ImageView imageView;
+
+ public PaintScreenShot(AppCompatActivity appCompatActivity) {
+ this.appCompatActivity = appCompatActivity;
+ }
+
+ public void onCreate() {
+
+ Button button = appCompatActivity.findViewById(R.id.capture);
+ // ボタンタップでスクリーンショットを撮る
+ button.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ getScreenshot();
+ }
+ });
+
+ // 撮影したスクリーンを表示するImageView
+ imageView = appCompatActivity.findViewById(R.id.image);
+
+ // 画面の縦横サイズとdpを取得
+ DisplayMetrics displayMetrics = new DisplayMetrics();
+ appCompatActivity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
+ screenDensity = displayMetrics.densityDpi;
+ displayWidth = displayMetrics.widthPixels;
+ displayHeight = displayMetrics.heightPixels;
+
+ mpManager = (MediaProjectionManager)
+ appCompatActivity.getSystemService(MEDIA_PROJECTION_SERVICE);
+
+ // permissionを確認するintentを投げ、ユーザーの許可・不許可を受け取る
+ if(mpManager != null){
+ appCompatActivity.startActivityForResult(mpManager.createScreenCaptureIntent(),
+ REQUEST_MEDIA_PROJECTION);
+ }
+ }
+
+ // ユーザーの許可を受け取る
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+
+ if (REQUEST_MEDIA_PROJECTION == requestCode) {
+ if (resultCode != RESULT_OK) {
+ // 拒否された
+ Toast.makeText(appCompatActivity,
+ "User cancelled", Toast.LENGTH_LONG).show();
+ return;
+ }
+ // 許可された結果を受け取る
+ setUpMediaProjection(resultCode, data);
+ }
+ }
+
+ private void setUpMediaProjection(int code, Intent intent) {
+ mProjection = mpManager.getMediaProjection(code, intent);
+ setUpVirtualDisplay();
+ }
+
+ private void setUpVirtualDisplay() {
+ imageReader = ImageReader.newInstance(
+ displayWidth, displayHeight, 0x1, 2);
+
+ virtualDisplay = mProjection.createVirtualDisplay("ScreenCapture",
+ displayWidth, displayHeight, screenDensity,
+ DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
+ imageReader.getSurface(), null, null);
+ }
+
+ private void getScreenshot() {
+ // ImageReaderから画面を取り出す
+ Log.d("debug", "getScreenshot");
+
+ Image image = imageReader.acquireLatestImage();
+ Image.Plane[] planes = image.getPlanes();
+ ByteBuffer buffer = planes[0].getBuffer();
+
+ int pixelStride = planes[0].getPixelStride();
+ int rowStride = planes[0].getRowStride();
+ int rowPadding = rowStride - pixelStride * displayWidth;
+
+ // バッファからBitmapを生成
+ Bitmap bitmap = Bitmap.createBitmap(
+ displayWidth + rowPadding / pixelStride, displayHeight,
+ Bitmap.Config.ARGB_8888);
+ bitmap.copyPixelsFromBuffer(buffer);
+ image.close();
+
+ imageView.setImageBitmap(bitmap);
+ }
+
+ public void onDestroy() {
+ if (virtualDisplay != null) {
+ Log.d("debug","release VirtualDisplay");
+ virtualDisplay.release();
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/SendScreenShotActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/SendScreenShotActivity.java
deleted file mode 100644
index a98df51..0000000
--- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/SendScreenShotActivity.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package org.ntlab.acanthus_client.views.paint;
-
-import androidx.appcompat.app.AppCompatActivity;
-
-import android.app.Activity;
-import android.graphics.ImageFormat;
-import android.os.Bundle;
-import android.content.Intent;
-import android.graphics.Bitmap;
-import android.graphics.PixelFormat;
-import android.hardware.display.DisplayManager;
-import android.hardware.display.VirtualDisplay;
-import android.media.Image;
-import android.media.ImageReader;
-import android.media.projection.MediaProjection;
-import android.media.projection.MediaProjectionManager;
-import android.util.DisplayMetrics;
-import android.util.Log;
-import android.view.View;
-import android.widget.Button;
-import android.widget.ImageView;
-import android.widget.Toast;
-
-import org.ntlab.acanthus_client.R;
-
-import java.nio.ByteBuffer;
-
-import static android.graphics.ImageFormat.JPEG;
-
-
-public class SendScreenShotActivity extends Activity {
-
- private MediaProjectionManager mpManager;
- private MediaProjection mProjection;
- private static final int REQUEST_MEDIA_PROJECTION = 1001;
-
- private int displayWidth, displayHeight;
- private ImageReader imageReader;
- private VirtualDisplay virtualDisplay;
- private int screenDensity;
- private ImageView imageView;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_send_screen_shot);
-
- Button button = findViewById(R.id.capture);
- // ボタンタップでスクリーンショットを撮る
- button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- getScreenshot();
- }
- });
-
- // 撮影したスクリーンを表示するImageView
- imageView = findViewById(R.id.image);
-
- // 画面の縦横サイズとdpを取得
- DisplayMetrics displayMetrics = new DisplayMetrics();
- getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
- screenDensity = displayMetrics.densityDpi;
- displayWidth = displayMetrics.widthPixels;
- displayHeight = displayMetrics.heightPixels;
-
- mpManager = (MediaProjectionManager)
- getSystemService(MEDIA_PROJECTION_SERVICE);
-
- // permissionを確認するintentを投げ、ユーザーの許可・不許可を受け取る
- if(mpManager != null){
- startActivityForResult(mpManager.createScreenCaptureIntent(),
- REQUEST_MEDIA_PROJECTION);
- }
- }
-
- // ユーザーの許可を受け取る
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
-
- if (REQUEST_MEDIA_PROJECTION == requestCode) {
- if (resultCode != RESULT_OK) {
- // 拒否された
- Toast.makeText(this,
- "User cancelled", Toast.LENGTH_LONG).show();
- return;
- }
- // 許可された結果を受け取る
- setUpMediaProjection(resultCode, data);
- }
- }
-
- private void setUpMediaProjection(int code, Intent intent) {
- mProjection = mpManager.getMediaProjection(code, intent);
- setUpVirtualDisplay();
- }
-
- private void setUpVirtualDisplay() {
- imageReader = ImageReader.newInstance(
- displayWidth, displayHeight, 0x1, 2);
-
- virtualDisplay = mProjection.createVirtualDisplay("ScreenCapture",
- displayWidth, displayHeight, screenDensity,
- DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
- imageReader.getSurface(), null, null);
- }
-
- private void getScreenshot() {
- // ImageReaderから画面を取り出す
- Log.d("debug", "getScreenshot");
-
- Image image = imageReader.acquireLatestImage();
- Image.Plane[] planes = image.getPlanes();
- ByteBuffer buffer = planes[0].getBuffer();
-
- int pixelStride = planes[0].getPixelStride();
- int rowStride = planes[0].getRowStride();
- int rowPadding = rowStride - pixelStride * displayWidth;
-
- // バッファからBitmapを生成
- Bitmap bitmap = Bitmap.createBitmap(
- displayWidth + rowPadding / pixelStride, displayHeight,
- Bitmap.Config.ARGB_8888);
- bitmap.copyPixelsFromBuffer(buffer);
- image.close();
-
- imageView.setImageBitmap(bitmap);
- }
-
- @Override
- protected void onDestroy() {
- if (virtualDisplay != null) {
- Log.d("debug","release VirtualDisplay");
- virtualDisplay.release();
- }
- super.onDestroy();
- }
-}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_paint.xml b/app/src/main/res/layout/activity_paint.xml
index 9fb5a4c..e0165b2 100644
--- a/app/src/main/res/layout/activity_paint.xml
+++ b/app/src/main/res/layout/activity_paint.xml
@@ -103,5 +103,42 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1.0" />
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_send_screen_shot.xml b/app/src/main/res/layout/activity_send_screen_shot.xml
deleted file mode 100644
index 2d64116..0000000
--- a/app/src/main/res/layout/activity_send_screen_shot.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file