diff --git a/app/src/main/java/org/ntlab/amaryllis/client/MainActivity.java b/app/src/main/java/org/ntlab/amaryllis/client/MainActivity.java index 1437f35..cd8727d 100644 --- a/app/src/main/java/org/ntlab/amaryllis/client/MainActivity.java +++ b/app/src/main/java/org/ntlab/amaryllis/client/MainActivity.java @@ -54,7 +54,7 @@ LocationManager locationManager; private ArrayList listeners = new ArrayList<>(); private HashMap categories; - ArrayList checkedList = new ArrayList<>(); + private ArrayList checkedList = new ArrayList<>(); HashMap menuItemMap = new HashMap<>(); ImageButton playbutton; ImageButton stopbutton; @@ -244,14 +244,16 @@ getMenuInflater().inflate(R.menu.nav_drawer_menu, menu); //カテゴリーの数だけitemを定義 + int id=0; for(Category category : categories.values()){ String name = category.getName(); String cid = category.getcId(); - MenuItem newItem = menu.add(Menu.NONE, Menu.NONE, Menu.NONE, name); + MenuItem newItem = menu.add(Menu.NONE, id, Menu.NONE, name); menuItemMap.put(newItem.getItemId(),cid); newItem.setCheckable(true); newItem.setChecked(true); checkedList.add(cid); + id++; } return true; } @@ -263,9 +265,9 @@ item.setChecked(!item.isChecked()); if(item.isChecked()){ - checkedList.remove(cid); - }else{ checkedList.add(cid); + }else{ + checkedList.remove(cid); } return super.onOptionsItemSelected(item); } diff --git a/app/src/main/java/org/ntlab/amaryllis/client/fragment/MapsFragment.java b/app/src/main/java/org/ntlab/amaryllis/client/fragment/MapsFragment.java index 6e11875..1a56d15 100644 --- a/app/src/main/java/org/ntlab/amaryllis/client/fragment/MapsFragment.java +++ b/app/src/main/java/org/ntlab/amaryllis/client/fragment/MapsFragment.java @@ -2,13 +2,16 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.Fragment; +import android.Manifest; import android.app.Application; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageManager; import android.graphics.Color; import android.location.Location; import android.location.LocationListener; @@ -36,9 +39,11 @@ import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.Projection; import com.google.android.gms.maps.SupportMapFragment; +import com.google.android.gms.maps.UiSettings; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.CameraPosition; import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.gms.maps.model.VisibleRegion; @@ -48,11 +53,13 @@ import org.ntlab.amaryllis.client.MyDialogFragment; import org.ntlab.amaryllis.client.R; import org.ntlab.amaryllis.client.VoiceActivity; +import org.ntlab.amaryllis.client.entities.Category; import org.ntlab.amaryllis.client.entities.LoginJson; import org.ntlab.amaryllis.client.entities.SignUpJson; import org.ntlab.amaryllis.client.entities.Voicememo; import org.ntlab.amaryllis.client.resources.AccountsRest; import org.ntlab.amaryllis.client.resources.VoicememosRest; +import org.ntlab.amaryllis.client.voiceservice.VoiceMemo; import java.io.File; import java.io.FileInputStream; @@ -70,7 +77,7 @@ import static android.content.Context.LOCATION_SERVICE; import static android.content.Context.MODE_PRIVATE; -public class MapsFragment extends Fragment implements LocationListener,MyDialogFragment.DialogFragmentListener { +public class MapsFragment extends Fragment implements LocationListener, MyDialogFragment.DialogFragmentListener { private MediaRecorder mr; @@ -87,26 +94,69 @@ static final String filePath = Environment.getExternalStorageDirectory() + "/sample.3gp"; Button RecordButton; Button PlaybackButton; - private double latitude,longitude; -// double latitude,longitude; - private double latmax,latmin,longmax,longmin; + private double latitude, longitude; + // double latitude,longitude; + private double latmax, latmin, longmax, longmin; private byte[] byteData = new byte[4096]; //private short[] shortData = new short[2048]; private int bufSize; LocationManager locationManager; + public MarkerOptions current_marker = null; + private ArrayList category = new ArrayList<>();// onViewCreateに初期値を代入済み + private int before_category = 0; + private ArrayList done_vid = new ArrayList<>(); + private boolean flag = false; + private ArrayList mMarker = new ArrayList<>(); public MapsFragment() { } - + /* + c02 + c01 + 上記はすべてString + * */ public final Application getApplication() { throw new RuntimeException("Stub!"); } + public static int[] toRGB(String hexColorRGB) { + char[] rgb = hexColorRGB.toCharArray(); + int[] rgbInt = new int[3]; + rgbInt[0] = Character.digit(rgb[1], 16) * 16 + Character.digit(rgb[2], 16); + rgbInt[1] = Character.digit(rgb[3], 16) * 16 + Character.digit(rgb[4], 16); + rgbInt[2] = Character.digit(rgb[5], 16) * 16 + Character.digit(rgb[6], 16); + return rgbInt; + } + + public static String toHexString(int r, int g, int b) { + StringBuffer buf = new StringBuffer(); + if (r < 16) { + buf.append("0").append(Integer.toHexString(r)); + } else { + buf.append(Integer.toHexString(r)); + } + if (g < 16) { + buf.append("0").append(Integer.toHexString(g)); + } else { + buf.append(Integer.toHexString(g)); + } + if (b < 16) { + buf.append("0").append(Integer.toHexString(b)); + } else { + buf.append(Integer.toHexString(b)); + } + return buf.toString().toUpperCase(); + } + + public static String toHexString(int[] rgb) { + return toHexString(rgb[0], rgb[1], rgb[2]); + } + private GoogleMap googlemap; private Location location; - private OnMapReadyCallback callback = new OnMapReadyCallback() { + private final OnMapReadyCallback callback = new OnMapReadyCallback() { /** * Manipulates the map once available. * This callback is triggered when the map is ready to be used. @@ -118,189 +168,250 @@ */ @Override - public void onMapReady(GoogleMap googleMap){ + public void onMapReady(GoogleMap googleMap) { // amaryllis =(Amaryllis)getApplication(); // String latitude = amaryllis.getLatitude(); // String longitude = amaryllis.getLongitude(); // double latitude1 = Double.parseDouble(latitude); // double longitude1 = Double.parseDouble(longitude); MapsFragment.this.googlemap = googleMap; - + // パーミッションの記述(これがないと現在地が表示できない) + if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + // TODO: Consider calling + // ActivityCompat#requestPermissions + // here to request the missing permissions, and then overriding + // public void onRequestPermissionsResult(int requestCode, String[] permissions, + // int[] grantResults) + // to handle the case where the user grants the permission. See the documentation + // for ActivityCompat#requestPermissions for more details. + return; + } + // 現状、現在地ボタンが表示されてしまっている。UiSettings.setMyLocationButtonEnabled(false)を呼び出せばいいらしいがうまく動作しなかった + } + // TODO: パーミッションのif文にはいっていない(ビルドしたら解決する??) + googleMap.setMyLocationEnabled(true); } }; + private VoicememosRest voicememosService; + private Amaryllis amaryllis; - private VoicememosRest voicememosService; - private Amaryllis amaryllis; - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, - @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_maps, container, false); + return inflater.inflate(R.layout.fragment_maps, container, false); - } - - //ここにボタンを押した時の処理を書いていきます。 - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - ((MainActivity) getActivity()).subscribe(this); - Retrofit retrofit = new Retrofit.Builder() - .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/amaryllis/") - .addConverterFactory(JacksonConverterFactory.create()) - .build(); - voicememosService = retrofit.create(VoicememosRest.class); -// amaryllis = (Amaryllis) getActivity().getApplication(); -// file = new File(getFilesDir(),"Sample.3gp"); - mp = new MediaPlayer(); - - RecordButton = (Button)view.findViewById(R.id.button); - RecordButton.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - //Intent intent = new Intent(getActivity(), VoiceActivity.class); - //startActivity(intent); - startRecord(); - } - }); - - PlaybackButton = (Button)view.findViewById(R.id.button2); - PlaybackButton.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - startPlay(); - } - }); - - - SupportMapFragment mapFragment = - (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map); - if (mapFragment != null) { - mapFragment.getMapAsync(callback); } - //ここはonCreateにあたる + //ここにボタンを押した時の処理を書いていきます。 + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + ((MainActivity) getActivity()).subscribe(this); + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/amaryllis/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + voicememosService = retrofit.create(VoicememosRest.class); +// amaryllis = (Amaryllis) getActivity().getApplication(); +// file = new File(getFilesDir(),"Sample.3gp"); + mp = new MediaPlayer(); + + RecordButton = (Button) view.findViewById(R.id.button); + RecordButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + //Intent intent = new Intent(getActivity(), VoiceActivity.class); + //startActivity(intent); + startRecord(); + } + }); + + PlaybackButton = (Button) view.findViewById(R.id.button2); + PlaybackButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + startPlay(); + } + }); + + + SupportMapFragment mapFragment = + (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map); + if (mapFragment != null) { + mapFragment.getMapAsync(callback); + } + + //ここはonCreateにあたる // amaryllis =(Amaryllis)getApplication(); // String latitude = amaryllis.getLatitude(); // String longitude = amaryllis.getLongitude(); // latitude1 = Double.parseDouble(latitude); // longitude1 = Double.parseDouble(longitude); - } + // ここでmainActivityにあるカテゴリーのArrayListをとってきて変数categoryに代入する + } - @Override - public void onLocationChanged(Location location) { - LatLng current = new LatLng(location.getLatitude(), location.getLongitude()); - if(googlemap != null) { - if(count == 0) { - MapsFragment.this.googlemap.moveCamera(CameraUpdateFactory.newLatLngZoom(current, 120)); - count++; + @Override + public void onLocationChanged(Location location) { + category = ((MainActivity) getActivity()).getCheckedCidList(); + if(category.size() != before_category) { + for(Marker marker : mMarker) { + marker.remove(); + } + System.out.println(mMarker + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11111111111111111111111111111111111111111111111111111111111"); + done_vid = new ArrayList<>(); + mMarker = new ArrayList<>(); } - else{ - MapsFragment.this.googlemap.addMarker(new MarkerOptions().position(current).title("Marker in Sydney")); - MapsFragment.this.googlemap.moveCamera(CameraUpdateFactory.newLatLng(current)); - Projection p = googlemap.getProjection(); - VisibleRegion vr = p.getVisibleRegion(); - latmax = vr.latLngBounds.northeast.latitude; - latmin = vr.latLngBounds.southwest.latitude; - longmax = vr.latLngBounds.northeast.longitude; - longmin = vr.latLngBounds.southwest.longitude; - Call> call = voicememosService.getVoicememos(latmax, latmin, longmax, longmin); - call.enqueue(new Callback>() { - @Override - public void onResponse(Call> call, Response> response) { - List voiceJson = response.body(); - for(Voicememo v : voiceJson) { - //System.out.println(v.getCategory() + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); - LatLng voicememo = new LatLng(v.getLatitude(), v.getLongitude()); - //int color = Color.RGBToHSV();// - MapsFragment.this.googlemap.addMarker(new MarkerOptions().position(voicememo).title("Marker in Sydney").icon(BitmapDescriptorFactory.defaultMarker(30))); - } + before_category = category.size(); + LatLng current = new LatLng(location.getLatitude(), location.getLongitude()); + if (googlemap != null) { + if (count == 0) { + MapsFragment.this.googlemap.moveCamera(CameraUpdateFactory.newLatLngZoom(current, 15)); + count++; + } else { + Projection p = googlemap.getProjection(); + VisibleRegion vr = p.getVisibleRegion(); + latmax = vr.latLngBounds.northeast.latitude; + latmin = vr.latLngBounds.southwest.latitude; + longmax = vr.latLngBounds.northeast.longitude; + longmin = vr.latLngBounds.southwest.longitude; + Call> call = voicememosService.getVoicememos(latmax, latmin, longmax, longmin); + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + List voiceJson = response.body(); + for (VoiceMemo v : voiceJson) { + LatLng voicememo = new LatLng(v.getLatitude(), v.getLongitude()); + for (String vid : done_vid) { + if (v.getVid().equals(vid)) { + flag = true; + break; + } else { + flag = false; + } + } + if (flag == false || done_vid.size() == 0) { + if (v.getCategory().size() >= 2) { + for (String category : category) {// ArrayList(ハンバーガーメニューでしていされた1つ以上のカテゴリーを比較する) + for (String cid : v.getCategory()) { + if (category.equals(cid)) { + Marker m; + m = MapsFragment.this.googlemap.addMarker(new MarkerOptions().position(voicememo).title(v.getTitle()).icon(BitmapDescriptorFactory.defaultMarker(300))); + //m.remove(); + mMarker.add(m); + //mMarker.add(MapsFragment.this.googlemap.addMarker(new MarkerOptions().position(voicememo).title(v.getTitle()).icon(BitmapDescriptorFactory.defaultMarker(300)))); + done_vid.add(v.getVid()); + break; + } + } + } + } else { + for (String category : category) {// ArrayList(ハンバーガーメニューでしていされた1つ以上のカテゴリーを比較する) + for (String cid : v.getCategory()) { + Category category_info = ((MainActivity) getActivity()).getCategory(cid); + if (category.equals(cid)) { + float[] i = new float[3]; + int[] rgb = toRGB(category_info.getColor()); + Color.RGBToHSV(rgb[0], rgb[1], rgb[2], i); + //MarkerOptions marker = ; + + Marker m; + m = MapsFragment.this.googlemap.addMarker(new MarkerOptions().position(voicememo).title(v.getTitle()).icon(BitmapDescriptorFactory.defaultMarker(i[0]))); + mMarker.add(m); + //mMarker.add(MapsFragment.this.googlemap.addMarker(new MarkerOptions().position(voicememo).title(category_info.getName()).icon(BitmapDescriptorFactory.defaultMarker(i[0])))); + done_vid.add(v.getVid()); + } + } + + } + } + + } + } + } + @Override + public void onFailure(Call> call, Throwable t) { + } + }); } + } - @Override - public void onFailure(Call> call, Throwable t) { - } - }); - }} - - } - - @Override - public void onStatusChanged(String s, int i, Bundle bundle) { - - } - - @Override - public void onProviderEnabled(String s) { - - } - - @Override - public void onProviderDisabled(String s) { - - } - - - @Override - public void onDialogPositiveButtonClicked() { - - } - - @Override - public void onOkClicked(Bundle args) { - - } - - - public class FragmentTest extends Fragment implements View.OnClickListener { - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ - // 第3引数のbooleanは"container"にreturnするViewを追加するかどうか - //trueにすると最終的なlayoutに再度、同じView groupが表示されてしまうのでfalseでOKらしい - View v = inflater.inflate(R.layout.fragment_maps, container, false); - - // ボタンを取得して、ClickListenerをセット - Button btn = (Button)v.findViewById(R.id.button); - btn.setOnClickListener(this); - return v; } @Override - public void onClick(View v) { - // TODO 自動生成されたメソッド・スタブ - System.out.println("!!!"); + public void onStatusChanged(String s, int i, Bundle bundle) { + } - } + @Override + public void onProviderEnabled(String s) { - //録音開始&録音終了 - private void startRecord(){ - File wavFile = new File(filePath); - final ImageView R_Stoping = getView().findViewById(R.id.R_Stoping); - final ImageView R_Playing = getView().findViewById(R.id.R_Playing); - if(StartChange == 0) { - try { - FileInputStream in = new FileInputStream(filePath); // ファイル読み込み用 + } - TextView textView1 = (TextView)getView().findViewById(R.id.Notice); - textView1.setText("Record End!"); - mr.stop(); - mr.reset(); - mr.release(); + @Override + public void onProviderDisabled(String s) { + + } - DialogFragment dialog = new MyDialogFragment(); - dialog.setTargetFragment(MapsFragment.this, 0); // ★★★ - dialog.show(getParentFragmentManager(), "Dialog"); + @Override + public void onDialogPositiveButtonClicked() { + + } + + @Override + public void onOkClicked(Bundle args) { + + } + public class FragmentTest extends Fragment implements View.OnClickListener { + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + // 第3引数のbooleanは"container"にreturnするViewを追加するかどうか + //trueにすると最終的なlayoutに再度、同じView groupが表示されてしまうのでfalseでOKらしい + View v = inflater.inflate(R.layout.fragment_maps, container, false); + + // ボタンを取得して、ClickListenerをセット + Button btn = (Button) v.findViewById(R.id.button); + btn.setOnClickListener(this); + return v; + } + + @Override + public void onClick(View v) { + // TODO 自動生成されたメソッド・スタブ + System.out.println("!!!"); + } + + } + + //録音開始&録音終了 + private void startRecord() { + File wavFile = new File(filePath); + final ImageView R_Stoping = getView().findViewById(R.id.R_Stoping); + final ImageView R_Playing = getView().findViewById(R.id.R_Playing); + if (StartChange == 0) { + try { + FileInputStream in = new FileInputStream(filePath); // ファイル読み込み用 + + TextView textView1 = (TextView) getView().findViewById(R.id.Notice); + textView1.setText("Record End!"); + mr.stop(); + mr.reset(); + mr.release(); + DialogFragment dialog = new MyDialogFragment(); + dialog.setTargetFragment(MapsFragment.this, 0); // ★★★ + dialog.show(getParentFragmentManager(), "Dialog"); - in.read(byteData); - String data = Base64.encodeToString(byteData, 0,byteData.length, Base64.DEFAULT); + in.read(byteData); + String data = Base64.encodeToString(byteData, 0, byteData.length, Base64.DEFAULT); // Call call = voicememosService.postVoicememos(amaryllis.getUid(),amaryllis.getToken(),10,data,35,135,"untitled",""); @@ -315,151 +426,151 @@ // // } // }); - StartChange = 1; - R_Stoping.setAlpha(1.0f); - R_Playing.setAlpha(0.0f); - } catch (Exception e) { - e.printStackTrace(); - } - }else { - try { - TextView textView1 = (TextView)getView().findViewById(R.id.Notice); - textView1.setText("Record Start!"); - mr = new MediaRecorder(); - mr.setAudioSource(MediaRecorder.AudioSource.MIC); - mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); - mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); - //mr.setOutputFile(file.getAbsolutePath()); - mr.setOutputFile(filePath); + StartChange = 1; + R_Stoping.setAlpha(1.0f); + R_Playing.setAlpha(0.0f); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + try { + TextView textView1 = (TextView) getView().findViewById(R.id.Notice); + textView1.setText("Record Start!"); + mr = new MediaRecorder(); + mr.setAudioSource(MediaRecorder.AudioSource.MIC); + mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); + mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); + //mr.setOutputFile(file.getAbsolutePath()); + mr.setOutputFile(filePath); - mr.prepare(); - mr.start(); - StartChange = 0; - R_Stoping.setAlpha(0.0f); - R_Playing.setAlpha(1.0f); - } catch (Exception e) { - e.printStackTrace(); + mr.prepare(); + mr.start(); + StartChange = 0; + R_Stoping.setAlpha(0.0f); + R_Playing.setAlpha(1.0f); + } catch (Exception e) { + e.printStackTrace(); + } } } - } - //再生開始&再生中止 - //次は再生が終わった時の処理を書いていく事。 - private void startPlay(){ - final ImageView Stoping = getView().findViewById(R.id.Stoping); - final ImageView Playing = getView().findViewById(R.id.Playing); - float Tmin = 0; - float Tmax = 255; - //mp = new MediaPlayer(); - //mp = MediaPlayer.create(this,R.raw.bgm); + //再生開始&再生中止 + //次は再生が終わった時の処理を書いていく事。 + private void startPlay() { + final ImageView Stoping = getView().findViewById(R.id.Stoping); + final ImageView Playing = getView().findViewById(R.id.Playing); + float Tmin = 0; + float Tmax = 255; + //mp = new MediaPlayer(); + //mp = MediaPlayer.create(this,R.raw.bgm); - if(mp.isPlaying()){ - TextView textView1 = (TextView)getView().findViewById(R.id.Notice); - textView1.setText("Playback Stop!"); - //mp.stop();//再生を中断 - mp.pause();//途中から再生を再開したい時はこっちを使う必要があるかも - SeekChange = 0; + if (mp.isPlaying()) { + TextView textView1 = (TextView) getView().findViewById(R.id.Notice); + textView1.setText("Playback Stop!"); + //mp.stop();//再生を中断 + mp.pause();//途中から再生を再開したい時はこっちを使う必要があるかも + SeekChange = 0; - Stoping.setAlpha(1.0f);//画像が見えるようにする処理 - Playing.setAlpha(0.0f);//画像が見えないようにする処理 + Stoping.setAlpha(1.0f);//画像が見えるようにする処理 + Playing.setAlpha(0.0f);//画像が見えないようにする処理 - //try{ - //mp.prepare(); - //}catch(IllegalStateException e){ - //e.printStackTrace(); - //}catch(IOException e){ - //e.printStackTrace(); - //} - }else { - try { - //mp = new MediaPlayer(); - //mp.setDataSource(file.getAbsolutePath());//再生するファイルを持ってくる - - - //OutputStream filePath = openFileOutput("a",MODE_PRIVATE); - mp.setDataSource(filePath); - mp.prepare(); - }catch(IllegalStateException e){ - e.printStackTrace(); - - //if(StartChange == 1){ - //positionBar = findViewById(R.id.positionBar); - //positionBar.setMax(totalTime); - //positionBar.setOnSeekBarChangeListener( - //new SeekBar.OnSeekBarChangeListener(){ - //public void onProgressChanged(SeekBar seekBar,int progress,boolean fromUser){ - //if(fromUser){ - //mp.seekTo(progress); - //positionBar.setProgress(progress); + //try{ + //mp.prepare(); + //}catch(IllegalStateException e){ + //e.printStackTrace(); + //}catch(IOException e){ + //e.printStackTrace(); //} - //} - - //public void onStartTrackingTouch(SeekBar seekBar){ - - //} - - //public void onStopTrackingTouch(SeekBar seekBar){ - - //} - //} - //); - - //} - - //mp.start(); + } else { + try { + //mp = new MediaPlayer(); + //mp.setDataSource(file.getAbsolutePath());//再生するファイルを持ってくる - } catch (Exception e) { - e.printStackTrace(); + //OutputStream filePath = openFileOutput("a",MODE_PRIVATE); + mp.setDataSource(filePath); + mp.prepare(); + } catch (IllegalStateException e) { + e.printStackTrace(); + + //if(StartChange == 1){ + //positionBar = findViewById(R.id.positionBar); + //positionBar.setMax(totalTime); + //positionBar.setOnSeekBarChangeListener( + //new SeekBar.OnSeekBarChangeListener(){ + //public void onProgressChanged(SeekBar seekBar,int progress,boolean fromUser){ + //if(fromUser){ + //mp.seekTo(progress); + //positionBar.setProgress(progress); + //} + //} + + //public void onStartTrackingTouch(SeekBar seekBar){ + + //} + + //public void onStopTrackingTouch(SeekBar seekBar){ + + //} + //} + //); + + //} + + //mp.start(); + + + } catch (Exception e) { + e.printStackTrace(); + } + TextView textView1 = (TextView) getView().findViewById(R.id.Notice); + textView1.setText("Playback Start!"); + if (SeekChange == 1) { + mp.seekTo(0); + } + mp.start();//再生スタート + Playing.setAlpha(1.0f); + Stoping.setAlpha(0.0f); } - TextView textView1 = (TextView)getView().findViewById(R.id.Notice); - textView1.setText("Playback Start!"); - if(SeekChange == 1) { - mp.seekTo(0); - } - mp.start();//再生スタート - Playing.setAlpha(1.0f); - Stoping.setAlpha(0.0f); + totalTime = mp.getDuration(); + String S_totalTime = createTimeLabel(totalTime);//createTimeLabelにtotalTimeを渡す。 + TextView voiceTime = (TextView) getView().findViewById(R.id.VoiceTime); + voiceTime.setText(S_totalTime); + + // 再生した音声の終了を検知する + //implements MediaPlayer.OnCompletionListener { + mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + //Log.d("debug","end of audio"); + TextView textView1 = (TextView) getView().findViewById(R.id.Notice); + textView1.setText("Playback End!"); + Stoping.setAlpha(1.0f); + Playing.setAlpha(0.0f); + mp.stop(); + //mp.release(); + mp.reset(); + SeekChange = 1; + //audioStop(); + } + }); } - totalTime = mp.getDuration(); - String S_totalTime = createTimeLabel(totalTime);//createTimeLabelにtotalTimeを渡す。 - TextView voiceTime = (TextView)getView().findViewById(R.id.VoiceTime); - voiceTime.setText(S_totalTime); - // 再生した音声の終了を検知する - //implements MediaPlayer.OnCompletionListener { - mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { - @Override - public void onCompletion(MediaPlayer mp) { - //Log.d("debug","end of audio"); - TextView textView1 = (TextView)getView().findViewById(R.id.Notice); - textView1.setText("Playback End!"); - Stoping.setAlpha(1.0f); - Playing.setAlpha(0.0f); - mp.stop(); - //mp.release(); - mp.reset(); - SeekChange = 1; - //audioStop(); - } - }); + //totalTimeを分、秒に変換 + public String createTimeLabel(int time) { + String timeLabel = ""; + int min = time / 1000 / 60; + int sec = time / 1000 % 60; + + timeLabel = min + ":"; + if (sec < 10) timeLabel += "0"; + timeLabel += sec; + return timeLabel; + } + } - //totalTimeを分、秒に変換 - public String createTimeLabel(int time){ - String timeLabel = ""; - int min = time/1000/60; - int sec = time/1000%60; - - timeLabel = min + ":"; - if(sec < 10) timeLabel += "0"; - timeLabel += sec; - return timeLabel; - } - -} - diff --git a/app/src/main/java/org/ntlab/amaryllis/client/voiceservice/VoiceMemo.java b/app/src/main/java/org/ntlab/amaryllis/client/voiceservice/VoiceMemo.java index 115bd7f..3f17dd8 100644 --- a/app/src/main/java/org/ntlab/amaryllis/client/voiceservice/VoiceMemo.java +++ b/app/src/main/java/org/ntlab/amaryllis/client/voiceservice/VoiceMemo.java @@ -6,110 +6,164 @@ import java.util.ArrayList; import java.util.Calendar; +import java.util.Collection; import java.util.HashMap; public class VoiceMemo { + private String vid; + private String uid; + private Calendar upload; + private Integer time; + private String data; + private double latitude; + private double longitude; + private String title; + private String summary; + private Integer times; + @JsonIgnore + private ArrayList favolist; + private Integer favos; + private ArrayList categories; + private HashMap commentMap = new HashMap<>(); - private String vid; - private String uid; - private Calendar upload; - private Integer time; - private String data; - private double latitude; - private double longitude; - private String title; - private String summary; - private Integer times; - @JsonIgnore - private ArrayList favolist; - private Integer favos; - private ArrayList categories; - private HashMap commentMap = new HashMap<>(); - public VoiceMemo(String vid, String uid, Integer time, String url, double latitude, double longitude, String title, String summary) { - Calendar upload = Calendar.getInstance(); - setVid(vid); - setUid(uid); - setUpload(upload); - setTime(time); - setData(url); - setLatitude(latitude); - setLongitude(longitude); - setTitle(title); - setSummary(summary); - this.times = 0; - this.favos = 0; - } + public VoiceMemo() {} + + public VoiceMemo(String vid, String uid, Integer time, String url, double latitude, double longitude, String title, String summary, ArrayList categories) { + Calendar upload = Calendar.getInstance(); + setVid(vid); + setUid(uid); + setUpload(upload); + setTime(time); + setData(url); + setLatitude(latitude); + setLongitude(longitude); + setTitle(title); + setSummary(summary); + setCategory(categories); + this.times = 0; + this.favos = 0; + } - public String getVid() { - return vid; - } - private void setVid(String vid) { - this.vid = vid; - } - private String getUid() { - return uid; - } - private void setUid(String uid) { - this.uid = uid; - } - public Calendar getUpload() { - return upload; - } - private void setUpload(Calendar upload) { - this.upload = upload; - } - public Integer getTime() { - return time; - } - private void setTime(Integer time) { - this.time = time; - } - public String getData() { - return data; - } - private void setData(String url) { - this.data = url; - } - public double getLatitude() { - return latitude; - } - private void setLatitude(double latitude) { - this.latitude = latitude; - } - public double getLongitude() { - return longitude; - } - private void setLongitude(double longitude) { - this.longitude = longitude; - } - public String getTitle() { - return title; - } - public void setTitle(String title) { - this.title = title; - } - public String getSummary() { - return summary; - } - public void setSummary(String summary) { - this.summary = summary; - } - public Integer getTimes() { - return times; - } - public void addTimes() {//?どのタイミングで加算するか - times++; - } - public ArrayList getFavolist(){ return favolist; } - public boolean checkFavo(String uid){ - for (String a : favolist) { - if (a.equals(vid)) { - return true; - } + public String getVid() { + return vid; + } + private void setVid(String vid) { + this.vid = vid; + } + private String getUid() { + return uid; + } + private void setUid(String uid) { + this.uid = uid; + } + public Calendar getUpload() { + return upload; + } + private void setUpload(Calendar upload) { + this.upload = upload; + } + public Integer getTime() { + return time; + } + private void setTime(Integer time) { + this.time = time; + } + public String getData() { + return data; + } + private void setData(String url) { + this.data = url; + } + public double getLatitude() { + return latitude; + } + private void setLatitude(double latitude) { + this.latitude = latitude; + } + public double getLongitude() { + return longitude; + } + private void setLongitude(double longitude) { + this.longitude = longitude; + } + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getSummary() { + return summary; + } + public void setSummary(String summary) { + this.summary = summary; + } + public Integer getTimes() { + return times; + } + public void addTimes() {//?どのタイミングで加算するか + times++; + } + public ArrayList getFavolist(){ return favolist; } + public boolean checkFavo(String uid){ + for (String a : favolist) { + if (a.equals(vid)) { + return true; } - return false; } + return false; + } + public void addFavolist(String uid){ + if(checkFavo(uid)){ + return; + } + favolist.add(uid); + setFavos(); + } + public void removeFavolist(String uid) { + favolist.remove(uid); + setFavos(); + } + public Integer getFavos(){ return favos; } + private void setFavos(){ + favos = favolist.size(); + } + + public void setCategory(ArrayList categories) { + this.categories = categories; + } + + public ArrayList getCategory(){ return categories; } + public void addCategory(String categoryId){ + for (String a : categories) { + if (a.equals(categoryId)) { + return; + } + } + categories.add(categoryId); + } + public void removeCategory(String CategoryId) { + categories.remove(CategoryId); + } + public Collection getComments() { + return commentMap.values(); + } + public Comment getComment(String commentId) { + return commentMap.get(commentId); + } + // public Comment createComment(String uid, String text) { +// if (uid == null || text == null) { +// return null; +// } +// String commentId = UUID.randomUUID().toString(); +// Comment newComment = new Comment(commentId, uid, text); +// commentMap.put(commentId,newComment); +// return newComment; +// } + public void removeComment(String commentId) { + commentMap.remove(commentId); + } }