|
|
@@ -0,0 +1,195 @@ |
|
|
package net.yanzm.profileapplication; |
|
|
|
|
|
import android.animation.Animator; |
|
|
import android.animation.AnimatorListenerAdapter; |
|
|
import android.animation.AnimatorSet; |
|
|
import android.animation.ObjectAnimator; |
|
|
import android.app.Activity; |
|
|
import android.app.FragmentManager; |
|
|
import android.content.Intent; |
|
|
import android.net.Uri; |
|
|
import android.os.Bundle; |
|
|
import android.view.MenuItem; |
|
|
import android.view.View; |
|
|
import android.widget.Button; |
|
|
import android.widget.Toast; |
|
|
|
|
|
public class MainActivity2 extends Activity implements NetworkFragment.NetworkFragmentListener { |
|
|
|
|
|
private static final int REQUEST_CODE_PICK_IMAGE = 1; |
|
|
|
|
|
private ProfileView profileView; |
|
|
private Button sendButton; |
|
|
|
|
|
private View progressView; |
|
|
private View profileContainer; |
|
|
|
|
|
private NetworkFragment networkFragment; |
|
|
|
|
|
@Override |
|
|
protected void onCreate(Bundle savedInstanceState) { |
|
|
super.onCreate(savedInstanceState); |
|
|
setContentView(R.layout.activity_main2); |
|
|
|
|
|
assert getActionBar() != null; |
|
|
getActionBar().setDisplayHomeAsUpEnabled(true); |
|
|
|
|
|
// ビューの設定 |
|
|
progressView = findViewById(R.id.progress); |
|
|
profileContainer = findViewById(R.id.profile_container); |
|
|
|
|
|
profileView = (ProfileView) findViewById(R.id.profile); |
|
|
profileView.setOnImagePickListener(new ProfileView.OnImagePickListener() { |
|
|
@Override |
|
|
public void onRequestImagePick() { |
|
|
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); |
|
|
intent.addCategory(Intent.CATEGORY_OPENABLE); |
|
|
intent.setType("image/*"); |
|
|
startActivityForResult(intent, REQUEST_CODE_PICK_IMAGE); |
|
|
} |
|
|
}); |
|
|
|
|
|
sendButton = (Button) findViewById(R.id.send_button); |
|
|
sendButton.setOnClickListener(new View.OnClickListener() { |
|
|
@Override |
|
|
public void onClick(View v) { |
|
|
// バリデーション |
|
|
if (profileView.validate()) { |
|
|
send(); |
|
|
} |
|
|
} |
|
|
}); |
|
|
|
|
|
final FragmentManager fragmentManager = getFragmentManager(); |
|
|
networkFragment = (NetworkFragment) fragmentManager.findFragmentByTag("NetworkFragment"); |
|
|
if (networkFragment == null) { |
|
|
networkFragment = new NetworkFragment(); |
|
|
networkFragment.setRetainInstance(true); |
|
|
fragmentManager.beginTransaction() |
|
|
.add(networkFragment, "NetworkFragment") |
|
|
.commit(); |
|
|
} |
|
|
|
|
|
// 画面回転対応 |
|
|
if (savedInstanceState != null) { |
|
|
switch (networkFragment.getStatus()) { |
|
|
case NetworkFragment.STATUS_LOADING: |
|
|
progressView.setVisibility(View.VISIBLE); |
|
|
profileContainer.setVisibility(View.GONE); |
|
|
break; |
|
|
case NetworkFragment.STATUS_SENDING: |
|
|
progressView.setVisibility(View.VISIBLE); |
|
|
break; |
|
|
default: |
|
|
progressView.setVisibility(View.GONE); |
|
|
} |
|
|
return; |
|
|
} |
|
|
|
|
|
// プログレスを表示 |
|
|
progressView.setVisibility(View.VISIBLE); |
|
|
// (同期)編集フォームを非表示or無効化 |
|
|
profileContainer.setVisibility(View.GONE); |
|
|
|
|
|
// 1. サーバーからプロフィールデータを取得 |
|
|
networkFragment.loadProfileData(); |
|
|
} |
|
|
|
|
|
@Override |
|
|
public void onDataLoaded(NetworkUtils.ProfileData profileData) { |
|
|
// 2. プロフィールデータを表示 |
|
|
profileView.setName(profileData.name); |
|
|
profileView.setBio(profileData.bio); |
|
|
profileView.setExperience(profileData.experience); |
|
|
profileView.setEventStatus(profileData.eventStatus); |
|
|
profileView.setFavoriteDesserts(profileData.favoriteDessert); |
|
|
|
|
|
// 編集フォームを表示or有効化 |
|
|
profileContainer.setVisibility(View.VISIBLE); |
|
|
final AnimatorSet animatorSet = new AnimatorSet(); |
|
|
animatorSet.playTogether( |
|
|
ObjectAnimator.ofFloat(profileContainer, "alpha", 0f, 1f), |
|
|
ObjectAnimator.ofFloat(progressView, "alpha", 1f, 0f) |
|
|
); |
|
|
animatorSet.addListener(new AnimatorListenerAdapter() { |
|
|
@Override |
|
|
public void onAnimationEnd(Animator animation) { |
|
|
super.onAnimationEnd(animation); |
|
|
animatorSet.removeListener(this); |
|
|
// プログレスを非表示 |
|
|
progressView.setVisibility(View.GONE); |
|
|
} |
|
|
}); |
|
|
animatorSet.start(); |
|
|
} |
|
|
|
|
|
private void send() { |
|
|
final Uri imageUri = profileView.getThumbnailImageUri(); |
|
|
final NetworkUtils.ProfileData profileData = new NetworkUtils.ProfileData(); |
|
|
profileData.name = profileView.getName(); |
|
|
profileData.bio = profileView.getBio(); |
|
|
profileData.experience = profileView.getExperience(); |
|
|
profileData.eventStatus = profileView.getEventStatus(); |
|
|
profileData.favoriteDessert = profileView.getFavoriteDesserts(); |
|
|
|
|
|
// 送信ボタン無効化 |
|
|
sendButton.setEnabled(false); |
|
|
|
|
|
// プログレスを表示 |
|
|
progressView.setVisibility(View.VISIBLE); |
|
|
progressView.animate().alpha(1f); |
|
|
|
|
|
// 5. データの更新をサーバーに送信 |
|
|
networkFragment.sendProfileData(imageUri, profileData); |
|
|
} |
|
|
|
|
|
@Override |
|
|
public void onDataSent(boolean isSuccess) { |
|
|
if (isFinishing()) { |
|
|
return; |
|
|
} |
|
|
|
|
|
if (isSuccess) { |
|
|
Toast.makeText(MainActivity2.this, "更新しました", Toast.LENGTH_SHORT).show(); |
|
|
finish(); |
|
|
|
|
|
} else { |
|
|
Toast.makeText(MainActivity2.this, "更新できませんでした", Toast.LENGTH_SHORT).show(); |
|
|
// 送信ボタン有効化 |
|
|
sendButton.setEnabled(true); |
|
|
|
|
|
final ObjectAnimator animator = ObjectAnimator.ofFloat(progressView, "alpha", 1f, 0f); |
|
|
animator.addListener(new AnimatorListenerAdapter() { |
|
|
@Override |
|
|
public void onAnimationEnd(Animator animation) { |
|
|
super.onAnimationEnd(animation); |
|
|
animator.removeListener(this); |
|
|
// プログレスを非表示 |
|
|
progressView.setVisibility(View.GONE); |
|
|
} |
|
|
}); |
|
|
animator.start(); |
|
|
} |
|
|
} |
|
|
|
|
|
@Override |
|
|
public boolean onOptionsItemSelected(MenuItem item) { |
|
|
if (item.getItemId() == android.R.id.home) { |
|
|
finish(); |
|
|
return true; |
|
|
} |
|
|
return super.onOptionsItemSelected(item); |
|
|
} |
|
|
|
|
|
@Override |
|
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) { |
|
|
if (requestCode == REQUEST_CODE_PICK_IMAGE) { |
|
|
if (resultCode != RESULT_OK) { |
|
|
return; |
|
|
} |
|
|
profileView.setThumbnailFromUri(data.getData()); |
|
|
return; |
|
|
} |
|
|
super.onActivityResult(requestCode, resultCode, data); |
|
|
} |
|
|
} |