diff --git a/app/build.gradle b/app/build.gradle
index c635f8b..feb7b35 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -4,7 +4,7 @@
compileSdkVersion 28
defaultConfig {
applicationId "com.example.cosmosclient"
- minSdkVersion 15
+ minSdkVersion 26
targetSdkVersion 28
versionCode 1
versionName "1.0"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f677df0..85fa6bb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -83,6 +83,12 @@
+
+
+
+
+
+
diff --git a/app/src/main/java/com/example/cosmosclient/app/Cosmos.java b/app/src/main/java/com/example/cosmosclient/app/Cosmos.java
index 986dcc5..9a9a4eb 100644
--- a/app/src/main/java/com/example/cosmosclient/app/Cosmos.java
+++ b/app/src/main/java/com/example/cosmosclient/app/Cosmos.java
@@ -1,43 +1,129 @@
package com.example.cosmosclient.app;
+import android.Manifest;
+import android.app.Activity;
import android.app.Application;
import android.content.ComponentCallbacks;
import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.Context;
import android.content.res.Configuration;
+import android.os.Build;
+import android.os.Bundle;
+import android.support.annotation.RequiresApi;
+import android.support.v4.app.ActivityCompat;
+import android.support.v4.content.ContextCompat;
import android.util.Log;
import com.example.cosmosclient.entities.Area;
import com.example.cosmosclient.entities.AreaInformation;
import com.example.cosmosclient.entities.CachePref;
import com.example.cosmosclient.entities.Group;
+import com.example.cosmosclient.services.CosmosBackgroundService;
+import com.example.cosmosclient.views.RequestPermissionsActivity;
+
import com.example.cosmosclient.entities.ObjectStorage;
import com.google.gson.Gson;
import android.content.SharedPreferences;
+import android.view.Gravity;
+import android.widget.Toast;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
public class Cosmos extends Application {
+ private String TAG = Cosmos.class.getSimpleName();
private String token=null;
private Group curGroup=null;
private HashMap groups = new HashMap<>();
private String uId=null;
private HashMap areaInfo = new HashMap<>();
private ArrayList areaInfoKey= new ArrayList<>();
- private String TAG = Cosmos.class.getSimpleName();
+ private static final int REQUEST_MULTI_PERMISSIONS = 101;
+ ArrayList reqPermissions = new ArrayList<>();
private Area theWorld = new Area();
public Cosmos() {
super();
Log.d(TAG, " Constructor");
+
+ registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
+ @Override
+ public void onActivityCreated(Activity activity, Bundle bundle) {
+ Log.d(TAG, activity + "onActivityCreated");
+ // 未許可あり
+ if (activity instanceof RequestPermissionsActivity && !reqPermissions.isEmpty()) {
+ Log.d(TAG, "isRequestPermission");
+ ((RequestPermissionsActivity)activity).setOnRequestPermissionsResultCallback(new ActivityCompat.OnRequestPermissionsResultCallback() {
+ @Override
+ public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
+ Log.d(TAG, "onRequestPermissionsResult");
+ if (requestCode == REQUEST_MULTI_PERMISSIONS) {
+ if (grantResults.length > 0) {
+ for (int i = 0; i < permissions.length; i++) {
+ if (permissions[i].equals(Manifest.permission.ACCESS_FINE_LOCATION)) { // 位置情報
+ if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
+ // 許可された
+ } else {
+ // それでも拒否された時の対応
+ toastMake("位置情報の許可がないので計測できません");
+ }
+ } else if (permissions[i].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) { // 外部ストレージ
+ if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
+ // 許可された
+ } else {
+ // それでも拒否された時の対応
+ toastMake("外部書込の許可がないので書き込みできません");
+ }
+ }
+ }
+ startBackgroundService(getApplicationContext());
+ }
+ }
+ }
+ });
+ ActivityCompat.requestPermissions(activity, (String[]) reqPermissions.toArray(new String[0]), REQUEST_MULTI_PERMISSIONS);
+ }
+ }
+
+ @Override
+ public void onActivityStarted(Activity activity) {
+ }
+
+ @Override
+ public void onActivityResumed(Activity activity) {
+ }
+
+ @Override
+ public void onActivityPaused(Activity activity) {
+ }
+
+ @Override
+ public void onActivityStopped(Activity activity) {
+ }
+
+ @Override
+ public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
+ }
+
+ @Override
+ public void onActivityDestroyed(Activity activity) {
+ }
+
+ });
}
@Override
public void onCreate() {
- Log.d(TAG, " onCreate");
+ Log.d(TAG, "onCreate");
super.onCreate();
+ // Android 6, API 23以上でペーミッションの確認
+ if (Build.VERSION.SDK_INT >= 23) {
+ checkMultiPermissions(getApplicationContext());
+ }
}
@Override
@@ -157,29 +243,8 @@
//areaInfo処理
public void setAreaInfo(int areaId, AreaInformation AreaInfo){
this.areaInfo.put(areaId,AreaInfo);
-// this.theWorld.setAreaInfo(areaInfo);
-// SharedPreferences pref = getSharedPreferences("pref",MODE_PRIVATE);
-////// SharedPreferences prefData = getSharedPreferences("pref_data", MODE_PRIVATE);
-////// SharedPreferences.Editor editor = prefData.edit();
-////// editor.putString("AreaInfo", String.valueOf(areaInfo));
-////// editor.commit();
-// Gson gson = new Gson();
-// gson.toJson(theWorld);
-// pref.edit().putString("Area",gson.toJson(theWorld)).commit();
-//// ObjectStorage.save(theWorld,CachePref.KEY_AREA_INFO);
}
public AreaInformation getAreaInfo(int areaId){
-// SharedPreferences prefData = getSharedPreferences("pref_data", MODE_PRIVATE);
-// String areaInfo = prefData.getString("AreaInfo", "");
-
-// this.theWorld = ObjectStorage.get(CachePref.KEY_AREA_INFO,Area.class);
-// this.areaInfo = this.theWorld.getAreaInfo();
-
-// SharedPreferences pref = getSharedPreferences("pref",MODE_PRIVATE);
-// Gson gson = new Gson();
-// theWorld = gson.fromJson(pref.getString("Area",""),Area.class);
-// this.areaInfo = this.theWorld.getAreaInfo();
-
return areaInfo.get(areaId);
}
@@ -201,4 +266,39 @@
}
}
+ // 位置情報許可の確認、外部ストレージのPermissionにも対応できるようにしておく
+ private void checkMultiPermissions(Context context){
+ int permissionLocation = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION); // 位置情報の Permission
+ int permissionExtStorage = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE); // 外部ストレージ書き込みの Permission
+ // 位置情報の Permission が許可されているか確認
+ if (permissionLocation == PackageManager.PERMISSION_GRANTED) {
+ // 許可済
+ startBackgroundService(context);
+ } else{
+ // 未許可
+ reqPermissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
+ }
+ }
+
+ //BackgroundServiceをスタートさせる
+ public void startBackgroundService(final Context context) {
+ final Thread thread = new Thread() {
+ @RequiresApi(api = Build.VERSION_CODES.O)
+ public void run() {
+ // サービスの起動
+ Intent intentservice = new Intent(context, CosmosBackgroundService.class);
+ context.startForegroundService(intentservice);
+ }
+ };
+ thread.start();
+ }
+
+ // トーストの生成
+ private void toastMake(String message){
+ Toast toast = Toast.makeText(this, message, Toast.LENGTH_LONG);
+ // 位置調整
+ toast.setGravity(Gravity.CENTER, 0, 200);
+ toast.show();
+ }
+
}
diff --git a/app/src/main/java/com/example/cosmosclient/entities/RequestList.java b/app/src/main/java/com/example/cosmosclient/entities/RequestList.java
index 3a5b319..8ae645b 100644
--- a/app/src/main/java/com/example/cosmosclient/entities/RequestList.java
+++ b/app/src/main/java/com/example/cosmosclient/entities/RequestList.java
@@ -32,6 +32,15 @@
return requests.get(index);
}
+ public Request getRequestById(String rId){
+ for(Request request : getRequests()){
+ if(request.getrId().equals(rId)){
+ return request;
+ }
+ }
+ return null;
+ }
+
public void clearRequest() {
requests.clear();
}
diff --git a/app/src/main/java/com/example/cosmosclient/services/CosmosBackgroundService.java b/app/src/main/java/com/example/cosmosclient/services/CosmosBackgroundService.java
index 2d59e3d..d222537 100644
--- a/app/src/main/java/com/example/cosmosclient/services/CosmosBackgroundService.java
+++ b/app/src/main/java/com/example/cosmosclient/services/CosmosBackgroundService.java
@@ -46,6 +46,7 @@
import java.util.TimeZone;
import java.util.Timer;
import java.util.TimerTask;
+import java.util.UUID;
import retrofit2.Call;
import retrofit2.Callback;
@@ -53,13 +54,15 @@
import retrofit2.Retrofit;
import retrofit2.converter.jackson.JacksonConverterFactory;
+import static android.app.Notification.EXTRA_NOTIFICATION_ID;
+
public class CosmosBackgroundService extends IntentService implements LocationListener {
private Context context;
private LocationManager locationManager;
private static final int MinTime = 1000;/*最小時間間隔*/
private static final float MinDistance = 1;/*最小距離間隔*/
- private boolean isServiceRunning = false; //サービスが起動しているかを確認
+ private static boolean isServiceRunning = false; //サービスが起動しているかを確認
private String TAG = CosmosBackgroundService.class.getSimpleName();
private List notifications =null;
private CosmosLocation LOC = new CosmosLocation();
@@ -73,6 +76,7 @@
private ArrayList Convenience = new ArrayList<>();
private ArrayList Supermarket = new ArrayList<>();
private AreaInformation areaInfo = null;
+ private NotificationManager notificationManager;
public CosmosBackgroundService() {
super("CosmosBackgroundService");
@@ -92,6 +96,10 @@
context = getApplicationContext();
// LocationManager インスタンス生成
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
+ notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
+ int importance = NotificationManager.IMPORTANCE_HIGH;
+ NotificationChannel mChannel = new NotificationChannel("cosmos", "cosmosChannel", importance);
+ notificationManager.createNotificationChannel(mChannel);
}
@Override
@@ -263,9 +271,38 @@
public void run() {
updateAreaInformation(location);
this.notifications=searchNotifications(cosmos,location);
+ sendNotifications(CosmosBackgroundService.this, notifications);
}
}).start();
+ }
+
+ private void sendNotifications(CosmosBackgroundService cosmosBackgroundService, List notifications) {
+ for (Notification notify: notifications) {
+
+ int notificationId = 1;
+ //以下はボタンについてだよ
+ Intent intent = new Intent(cosmosBackgroundService, NotificationDone.class);
+ //snoozeIntent.setAction(ACTION_NOTIFICATION_OFF);
+ intent.putExtra(EXTRA_NOTIFICATION_ID, 0);
+ //以下2行はテスト用。本来はNotificationから取ってくる。
+ intent.putExtra("gId", notify.getGroup().getgId());
+ intent.putExtra("rId", notify.getRequest().getrId());
+ int randamCode = (int)(Math.random()*100000);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(cosmosBackgroundService, randamCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+
+ android.app.Notification.Action action = new android.app.Notification.Action(R.drawable.notification_icon, "ボタンだよ", pendingIntent);
+ android.app.Notification notification = new android.app.Notification.Builder(cosmosBackgroundService)
+ .setContentTitle(notify.getRequest().getProduct())
+ .setContentText("通知ないよう")
+ .setSmallIcon(R.drawable.icon_no)
+ .setChannelId("cosmos")
+// .setGroup("")
+ .addAction(action)
+ .build();
+ notificationManager.notify(notificationId, notification);
+ }
+
}
@@ -389,7 +426,7 @@
}
}
}
- if(count == 0) {
+ if (count == 0) {
//retrofitの処理
final Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/rest/")
@@ -518,9 +555,8 @@
// }
// });
}
-
-
}
+
public List searchNotifications(Cosmos cosmos, Location location){
double NowLat =location.getLatitude();
diff --git a/app/src/main/java/com/example/cosmosclient/services/CosmosBootReceiver.java b/app/src/main/java/com/example/cosmosclient/services/CosmosBootReceiver.java
index 20ae4d2..75a5283 100644
--- a/app/src/main/java/com/example/cosmosclient/services/CosmosBootReceiver.java
+++ b/app/src/main/java/com/example/cosmosclient/services/CosmosBootReceiver.java
@@ -1,55 +1,16 @@
package com.example.cosmosclient.services;
-import android.Manifest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.os.Build;
-import android.support.annotation.RequiresApi;
-import android.support.v4.content.ContextCompat;
import android.util.Log;
public class CosmosBootReceiver extends BroadcastReceiver {
- private static final int REQUEST_MULTI_PERMISSIONS = 101;
private String TAG = CosmosBootReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive");
- // Android 6, API 23以上でペーミッションの確認
- if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction()) && Build.VERSION.SDK_INT >= 23) {
- checkMultiPermissions(context);
- } else{
- // サービスの起動
- startService(context);
- }
}
- // 位置情報許可の確認、外部ストレージのPermissionにも対応できるようにしておく
- private void checkMultiPermissions(Context context){
- // 位置情報の Permission
- int permissionLocation = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION);
-
- // 位置情報の Permission が許可されているか確認
- if (permissionLocation == PackageManager.PERMISSION_GRANTED) {
- // 許可済
- startService(context);
- } else{
- // 未許可
- }
- }
-
- //serviceをスタートさせる
- private void startService(final Context context) {
- final Thread thread = new Thread() {
- @RequiresApi(api = Build.VERSION_CODES.O)
- public void run() {
- // サービスの起動
- Intent intentservice = new Intent(context, CosmosBackgroundService.class);
- context.startForegroundService(intentservice);
- }
- };
- thread.start();
- }
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/cosmosclient/services/NotificationDone.java b/app/src/main/java/com/example/cosmosclient/services/NotificationDone.java
new file mode 100644
index 0000000..af55e7c
--- /dev/null
+++ b/app/src/main/java/com/example/cosmosclient/services/NotificationDone.java
@@ -0,0 +1,86 @@
+package com.example.cosmosclient.services;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+import com.example.cosmosclient.app.Cosmos;
+import com.example.cosmosclient.entities.AddRequestsResponse;
+import com.example.cosmosclient.entities.Group;
+import com.example.cosmosclient.entities.Request;
+import com.example.cosmosclient.resources.GroupsRest;
+
+import java.io.IOException;
+
+import retrofit2.Call;
+import retrofit2.Response;
+import retrofit2.Retrofit;
+import retrofit2.converter.jackson.JacksonConverterFactory;
+
+public class NotificationDone extends BroadcastReceiver {
+ //retrofitの処理
+ final Retrofit retrofit = new Retrofit.Builder()
+ .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/rest/")
+ // .baseUrl("http://10.0.2.2:8080/rest/")
+ .addConverterFactory(JacksonConverterFactory.create())
+ .build();
+ //interfaceから実装を取得
+ final GroupsRest requestsService = retrofit.create(GroupsRest.class);
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ Cosmos app = (Cosmos) context.getApplicationContext();
+ String gId = intent.getExtras().getString("gId");
+ Request editRequest = app.getGroup(gId).getRequestList().getRequestById(intent.getExtras().getString("rId"));
+ if(gId == null){
+ System.out.println("error");
+ return;
+ }
+ if(editRequest == null){
+ System.out.println("cannot find Request");
+ return;
+ }
+ doneRequest(gId, editRequest);
+ }
+
+ //引数で受け取ったリクエストを達成する
+ public void doneRequest(String gId, Request request){
+ //Date型のフォーマット設定
+ String deadline = null;
+ if (request.getDeadline() != null) {
+ deadline = String.format("%d-%02d-%02d %02d:%02d:%02d", request.getDeadline().getYear(), request.getDeadline().getMonth() + 1, request.getDeadline().getDate() + 1, 23, 59, 59);
+ }
+
+ final Call updateRequestCall = requestsService.updateRequest(gId, request.getrId(), request.getIssuer().getuId(), request.getProduct(), deadline, request.getLocation(), true, "token");
+ Response response;
+ try {
+ response = updateRequestCall.execute();
+ if (response.isSuccessful()) {
+ AddRequestsResponse result = response.body();
+// Toast.makeText(RequestListActivity.this, "RequestListを達成しました", Toast.LENGTH_SHORT).show();
+// requestList.removeRequests(selectedRequestList);
+// handler.post(new Runnable() {
+// @Override
+// public void run() {
+// ResetRequestListTable();
+// AddRequestListTable(requestList);
+// }
+// });
+ } else {
+ // onFailure
+ try {
+ System.out.println(response.errorBody().string());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ //onFailureでキャッチできないエラーの処理
+// Toast.makeText(RequestListActivity.this, "通信エラー", Toast.LENGTH_SHORT).show();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+// Toast.makeText(RequestListActivity.this, "RequestListの達成失敗しました", Toast.LENGTH_SHORT).show();
+
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/cosmosclient/views/RequestPermissionsActivity.java b/app/src/main/java/com/example/cosmosclient/views/RequestPermissionsActivity.java
new file mode 100644
index 0000000..20a29bd
--- /dev/null
+++ b/app/src/main/java/com/example/cosmosclient/views/RequestPermissionsActivity.java
@@ -0,0 +1,20 @@
+package com.example.cosmosclient.views;
+
+import android.support.annotation.NonNull;
+import android.support.v4.app.ActivityCompat;
+import android.support.v7.app.AppCompatActivity;
+
+public class RequestPermissionsActivity extends AppCompatActivity {
+ private ActivityCompat.OnRequestPermissionsResultCallback listener = null;
+
+ public void setOnRequestPermissionsResultCallback(ActivityCompat.OnRequestPermissionsResultCallback listener) {
+ this.listener = listener;
+ }
+
+ // 結果の受け取り
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ listener.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ }
+
+}
diff --git a/app/src/main/java/com/example/cosmosclient/views/SigninActivity.java b/app/src/main/java/com/example/cosmosclient/views/SigninActivity.java
index 495d8b8..ba12736 100644
--- a/app/src/main/java/com/example/cosmosclient/views/SigninActivity.java
+++ b/app/src/main/java/com/example/cosmosclient/views/SigninActivity.java
@@ -1,20 +1,10 @@
package com.example.cosmosclient.views;
-import android.content.Context;
-import android.Manifest;
import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.os.Build;
import android.os.Handler;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresApi;
-import android.support.v4.app.ActivityCompat;
-import android.support.v4.content.ContextCompat;
-import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
-import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
@@ -25,9 +15,6 @@
import com.example.cosmosclient.entities.AreaInformation;
import com.example.cosmosclient.entities.SigninResponse;
import com.example.cosmosclient.resources.UsersRest;
-import com.example.cosmosclient.services.CosmosBackgroundService;
-
-import java.util.ArrayList;
import retrofit2.Call;
import retrofit2.Callback;
@@ -35,29 +22,15 @@
import retrofit2.Retrofit;
import retrofit2.converter.jackson.JacksonConverterFactory;
-public class SigninActivity extends AppCompatActivity {
+public class SigninActivity extends RequestPermissionsActivity {
private boolean uIdEnable;
private boolean pwEnable;
private Button SigninButton;
- private Intent intentservice;
- private static final int REQUEST_MULTI_PERMISSIONS = 101;
- private AreaInformation area = new AreaInformation();
-
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signin);
- Context context = getApplicationContext();
-
- // Android 6, API 23以上でパーミッシンの確認
- if(Build.VERSION.SDK_INT >= 23){
- checkMultiPermissions();
- }
- else{
- startService();
- }
//各種IDを取得
SigninButton = findViewById(R.id.SigninButton);
@@ -69,15 +42,6 @@
Cosmos app = (Cosmos) getApplication();
String account = app.getuId();
String token = app.getToken();
- ArrayList key = app.AreaInfoGetKey();
-
-
-
- if(key.size() != 0){
- for(int i = 0;i call, Response response) {
if (response.isSuccessful()) {
- if(response.body() == null){
+ if (response.body() == null){
//パスワードが違う際、アプリが落ちてしまうため
Toast.makeText(SigninActivity.this,
"パスワードが違います",Toast.LENGTH_LONG).show();
- }else{
+ } else {
SigninResponse result = response.body();
//app/Cosmosに情報保存
@@ -150,8 +113,7 @@
"ログインしました", Toast.LENGTH_SHORT).show();
finish();
}
-
- }else{
+ } else {
//onFailureでキャッチできないエラーの処理
Toast.makeText(SigninActivity.this,
"通信エラー",Toast.LENGTH_SHORT).show();
@@ -165,7 +127,6 @@
Toast.makeText(SigninActivity.this,
"ユーザIDもしくはパスワードが間違っています",Toast.LENGTH_SHORT).show();
}
-
});
}
});
@@ -217,9 +178,9 @@
}
break;
case R.id.PasswordText:
- if(s.length()>0){
+ if (s.length()>0){
pwEnable=true;
- }else{
+ } else{
pwEnable=false;
}
break;
@@ -232,95 +193,5 @@
}
}
}
- // 結果の受け取り
- @Override
- public void onRequestPermissionsResult(int requestCode,
- @NonNull String[] permissions, @NonNull int[] grantResults) {
- if (requestCode == REQUEST_MULTI_PERMISSIONS) {
- if (grantResults.length > 0) {
- for (int i = 0; i < permissions.length; i++) {
- // 位置情報
- if (permissions[i].
- equals(Manifest.permission.ACCESS_FINE_LOCATION)) {
- if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
- // 許可された
-
- } else {
- // それでも拒否された時の対応
- toastMake("位置情報の許可がないので計測できません");
- }
- }
- // 外部ストレージ
- else if (permissions[i].
- equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
- if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
- // 許可された
- } else {
- // それでも拒否された時の対応
- toastMake("外部書込の許可がないので書き込みできません");
- }
- }
- }
-
- startService();
-
- }
- }
- else{
- //
- }
- }
- // 位置情報許可の確認、外部ストレージのPermissionにも対応できるようにしておく
- private void checkMultiPermissions(){
- // 位置情報の Permission
- int permissionLocation = ContextCompat.checkSelfPermission(this,
- Manifest.permission.ACCESS_FINE_LOCATION);
- // 外部ストレージ書き込みの Permission
- int permissionExtStorage = ContextCompat.checkSelfPermission(this,
- Manifest.permission.WRITE_EXTERNAL_STORAGE);
-
- ArrayList reqPermissions = new ArrayList<>();
-
- // 位置情報の Permission が許可されているか確認
- if (permissionLocation == PackageManager.PERMISSION_GRANTED) {
- // 許可済
- }
- else{
- // 未許可
- reqPermissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
- }
-
-
- // 未許可
- if (!reqPermissions.isEmpty()) {
- ActivityCompat.requestPermissions(this,
- (String[]) reqPermissions.toArray(new String[0]),
- REQUEST_MULTI_PERMISSIONS);
- // 未許可あり
- }
- else{
- // 許可済
- startService();
- }
- }
- //serviceをスタートさせる
- private void startService() {
- Thread thread = new Thread() {
- @RequiresApi(api = Build.VERSION_CODES.O)
- public void run() {
- intentservice = new Intent(SigninActivity.this, CosmosBackgroundService.class);
- startForegroundService(intentservice);
-
- }
- };
- thread.start();
- }
- // トーストの生成
- private void toastMake(String message){
- Toast toast = Toast.makeText(this, message, Toast.LENGTH_LONG);
- // 位置調整
- toast.setGravity(Gravity.CENTER, 0, 200);
- toast.show();
- }
}
diff --git a/app/src/main/java/com/example/cosmosclient/views/SignupActivity.java b/app/src/main/java/com/example/cosmosclient/views/SignupActivity.java
index bafa874..8db61a1 100644
--- a/app/src/main/java/com/example/cosmosclient/views/SignupActivity.java
+++ b/app/src/main/java/com/example/cosmosclient/views/SignupActivity.java
@@ -216,23 +216,23 @@
@Override
public void afterTextChanged(Editable s){
+ final int maxStringLength = 21;
switch(view.getId()) {
case R.id.NameText:
- if (s.length() > 0) {
+ if (0 < s.length() && s.length() < maxStringLength){
nameEnable = true;
- } else {
- nameEnable = false;
+ } else { nameEnable = false;
}
break;
case R.id.PasswordText:
- if(s.length()>0){
+ if(0 < s.length() && s.length() < maxStringLength){
pwEnable=true;
}else{
pwEnable=false;
}
break;
case R.id.ConfirmPasswordText:
- if(s.length()>0){
+ if(0 < s.length() && s.length() < maxStringLength){
cpwEnable=true;
}else{
cpwEnable=false;
diff --git a/app/src/main/res/drawable/icon_no.png b/app/src/main/res/drawable/icon_no.png
new file mode 100644
index 0000000..807f3e4
--- /dev/null
+++ b/app/src/main/res/drawable/icon_no.png
Binary files differ
diff --git a/app/src/main/res/drawable/notification_icon.png b/app/src/main/res/drawable/notification_icon.png
new file mode 100644
index 0000000..f9a5e8b
--- /dev/null
+++ b/app/src/main/res/drawable/notification_icon.png
Binary files differ
diff --git a/app/src/test/java/com/example/cosmosclient/NotificationDoneTestMain.java b/app/src/test/java/com/example/cosmosclient/NotificationDoneTestMain.java
new file mode 100644
index 0000000..79a5bbe
--- /dev/null
+++ b/app/src/test/java/com/example/cosmosclient/NotificationDoneTestMain.java
@@ -0,0 +1,28 @@
+package com.example.cosmosclient;
+
+import com.example.cosmosclient.entities.Feature;
+import com.example.cosmosclient.entities.Group;
+import com.example.cosmosclient.entities.Request;
+import com.example.cosmosclient.entities.UserJsonforRequests;
+import com.example.cosmosclient.services.Notification;
+import com.example.cosmosclient.services.NotificationDone;
+
+import java.util.Date;
+import java.util.List;
+
+public class NotificationDoneTestMain {
+ public static void main(String[] args) {
+ //以下の変数は、変更したいリクエストに合わせて変更する必要があります。
+ String rid = "a87c2716-0174-40bc-bb41-a1ce8b6009bb";
+ String rUri = "http://nitta-lab-www.is.konan-u.ac.jp/cosmos/rset/groups/909221c1-c343-405e-8b39-f0dbed60e48b/requests/a87c2716-0174-40bc-bb41-a1ce8b6009bb";
+ String product = "mimiz";
+ int location = 20501;
+ String gid = "909221c1-c343-405e-8b39-f0dbed60e48b";
+ String issuerUid = "d3c73732-1287-4fa4-bb74-c9342be81fde";
+
+ NotificationDone notificationDone = new NotificationDone();
+// Notification notification = new Notification(new Request(rid, rUri, product, new Date(), new Date(), location, "name", false), new Group(gid, "uri", "name", "uId"), null);
+ Request request = new Request(rid, rUri, product, new Date(), new Date(), location, "name", true);
+ notificationDone.doneRequest(gid, request);
+ }
+}
\ No newline at end of file