package iShamrock.Postal.activity; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.widget.DrawerLayout; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.*; import iShamrock.Postal.R; import iShamrock.Postal.activity.fore.Welcome; import iShamrock.Postal.activity.publishers.ButtonTouchAnimationListener; import iShamrock.Postal.activity.publishers.JEditor; import iShamrock.Postal.activity.publishers.PEditor; import iShamrock.Postal.commons.utils.Views; import iShamrock.Postal.database.Database; import iShamrock.Postal.entity.PostalDataItem; import iShamrock.Postal.foldablelayout.UnfoldableView; import iShamrock.Postal.foldablelayout.shading.GlanceFoldShading; import iShamrock.Postal.items.Painting; import iShamrock.Postal.items.PaintingsAdapter; import iShamrock.Postal.util.SystemUtil; import java.net.DatagramPacket; import java.net.DatagramSocket; /** * Created by lifengshuang on 2/14/15. */ public class Timeline extends Activity { private ListView mListView; private View mListTouchInterceptor; private View mDetailsLayout; private UnfoldableView mUnfoldableView; private ImageView postal_friend, postal_user_avatar, postal_add, postal_add_text, postal_add_image, postal_add_video, postal_add_audio, postal_add_web, postal_edit; private RelativeLayout postal_cover_container; private DrawerLayout drawerLayout; private PaintingsAdapter adapter; private Runnable run; private Thread refreshThread; private boolean isAddButtonsFolded = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.timeline); initThread(); initCommonComponents(); initDatabase(); initUnfoldableDetailsActivity(); initLeftDrawer(); } private void initThread() { run = new Runnable() { @Override public void run() { adapter.notifyDataSetChanged(); System.out.println("try to update view..."); } }; refreshThread = new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 5; i++) { runOnUiThread(run); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }); } private void initCommonComponents() { postal_edit = (ImageView) findViewById(R.id.postal_edit); postal_friend = (ImageView) findViewById(R.id.postal_friend); postal_user_avatar = (ImageView) findViewById(R.id.postal_user_avatar); postal_cover_container = (RelativeLayout) findViewById(R.id.postal_cover_container); postal_friend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent friendIntent = new Intent(Timeline.this, MyFriends.class); startActivity(friendIntent); } }); postal_friend.setOnTouchListener(new ButtonTouchAnimationListener(postal_friend)); postal_user_avatar.setImageBitmap(SystemUtil.toRoundCorner(BitmapFactory.decodeResource( this.getResources(), R.drawable.zhihu))); postal_add = (ImageView) findViewById(R.id.postal_add); postal_add_text = (ImageView) findViewById(R.id.postal_add_text); postal_add_image = (ImageView) findViewById(R.id.postal_add_image); postal_add_video = (ImageView) findViewById(R.id.postal_add_video); postal_add_audio = (ImageView) findViewById(R.id.postal_add_audio); postal_add_web = (ImageView) findViewById(R.id.postal_add_web); postal_add.setOnTouchListener(new ButtonTouchAnimationListener(postal_add)); postal_add_text.setOnTouchListener(new ButtonTouchAnimationListener(postal_add_text)); postal_add_image.setOnTouchListener(new ButtonTouchAnimationListener(postal_add_image)); postal_add_video.setOnTouchListener(new ButtonTouchAnimationListener(postal_add_video)); postal_add_audio.setOnTouchListener(new ButtonTouchAnimationListener(postal_add_audio)); postal_add_web.setOnTouchListener(new ButtonTouchAnimationListener(postal_add_web)); postal_add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { foldAddButtons(); } }); postal_add_text.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(Timeline.this, JEditor.class); intent.putExtra("type", PostalDataItem.TYPE_TEXT); startActivity(intent); foldAddButtons(); } }); postal_add_image.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(Timeline.this, JEditor.class); intent.putExtra("type", PostalDataItem.TYPE_IMAGE); startActivity(intent); foldAddButtons(); } }); postal_add_audio.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(Timeline.this, JEditor.class); intent.putExtra("type", PostalDataItem.TYPE_AUDIO); startActivity(intent); foldAddButtons(); } }); postal_add_video.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(Timeline.this, JEditor.class); intent.putExtra("type", PostalDataItem.TYPE_VIDEO); startActivity(intent); foldAddButtons(); } }); postal_add_web.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(Timeline.this, JEditor.class); intent.putExtra("type", PostalDataItem.TYPE_WEB); startActivity(intent); foldAddButtons(); } }); postal_edit.setOnTouchListener(new ButtonTouchAnimationListener(postal_edit)); postal_edit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { drawerLayout.openDrawer(Gravity.LEFT); } }); } private void foldAddButtons() { int isVisible = (isAddButtonsFolded) ? View.VISIBLE : View.INVISIBLE; postal_add_text.setVisibility(isVisible); postal_add_audio.setVisibility(isVisible); postal_add_image.setVisibility(isVisible); postal_add_web.setVisibility(isVisible); postal_add_video.setVisibility(isVisible); postal_add.setImageDrawable(getResources().getDrawable((isAddButtonsFolded) ? R.drawable.icon_more_red : R.drawable.icon_add_red)); isAddButtonsFolded = !isAddButtonsFolded; } private void initUnfoldableDetailsActivity() { mListView = Views.find(this, R.id.list_view_timeline); adapter = new PaintingsAdapter(this); mListView.setAdapter(adapter); refreshThread.start(); mListTouchInterceptor = Views.find(this, R.id.touch_interceptor_view); mListTouchInterceptor.setClickable(false); mDetailsLayout = Views.find(this, R.id.details_layout); mDetailsLayout.setVisibility(View.INVISIBLE); mUnfoldableView = Views.find(this, R.id.unfoldable_view); Bitmap glance = BitmapFactory.decodeResource(getResources(), R.drawable.unfold_glance); mUnfoldableView.setFoldShading(new GlanceFoldShading(this, glance)); mUnfoldableView.setOnFoldingListener(new UnfoldableView.SimpleFoldingListener() { @Override public void onUnfolding(UnfoldableView unfoldableView) { mListTouchInterceptor.setClickable(true); mDetailsLayout.setVisibility(View.VISIBLE); } @Override public void onUnfolded(UnfoldableView unfoldableView) { mListTouchInterceptor.setClickable(false); } @Override public void onFoldingBack(UnfoldableView unfoldableView) { mListTouchInterceptor.setClickable(true); } @Override public void onFoldedBack(UnfoldableView unfoldableView) { mListTouchInterceptor.setClickable(false); mDetailsLayout.setVisibility(View.INVISIBLE); } }); } @Override public void onBackPressed() { if (mUnfoldableView != null && (mUnfoldableView.isUnfolded() || mUnfoldableView.isUnfolding())) { mUnfoldableView.foldBack(); } else { super.onBackPressed(); } } public void openDetails(View coverView, Painting painting) { PostalDataItem item = painting.getItem(); LinearLayout timeline_media = Views.find(mDetailsLayout, R.id.timeline_media); // ImageView timeline_action = Views.find(mDetailsLayout, R.id.timeline_action); TextView timeline_text = Views.find(mDetailsLayout, R.id.timeline_text); TextView timeline_loc = Views.find(mDetailsLayout, R.id.timeline_loc); TextView timeline_time = Views.find(mDetailsLayout, R.id.timeline_time); timeline_loc.setText(item.location_text); timeline_text.setText(item.text); timeline_time.setText(item.time); switch (item.type) { case PostalDataItem.TYPE_AUDIO: { final ImageView audioImageview = new ImageView(this); audioImageview.setImageDrawable(getResources().getDrawable(R.drawable.voice_message)); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT); lp.gravity = Gravity.LEFT; audioImageview.setLayoutParams(lp); final MediaPlayer mMediaPlayer = MediaPlayer.create(getApplicationContext(), Uri.parse(item.uri)); audioImageview.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (mMediaPlayer.isPlaying()) { mMediaPlayer.pause(); audioImageview.setImageDrawable(getResources().getDrawable(R.drawable.voice_message)); } else { mMediaPlayer.start(); audioImageview.setImageDrawable(getResources().getDrawable(R.drawable.voice_message_playing)); } } }); audioImageview.setOnTouchListener(new ButtonTouchAnimationListener(audioImageview)); ViewGroup.LayoutParams params = timeline_media.getLayoutParams(); params.height = getWindowManager().getDefaultDisplay().getWidth() / 6; timeline_media.setLayoutParams(params); timeline_media.removeAllViews(); timeline_media.addView(audioImageview); break; } case PostalDataItem.TYPE_VIDEO: { VideoView videoView = new VideoView(this); videoView.setVideoURI(Uri.parse(item.uri)); int screenWidth = this.getWindowManager().getDefaultDisplay().getWidth(); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); lp.height = screenWidth / 16 * 9; lp.gravity = Gravity.CENTER; videoView.setLayoutParams(lp); MediaController mediaController = new MediaController(this); videoView.setMediaController(mediaController); videoView.requestFocus(); timeline_media.setBackgroundColor(0xff000000); timeline_media.removeAllViews(); timeline_media.addView(videoView); break; } case PostalDataItem.TYPE_IMAGE: { ImageView timeline_action = new ImageView(this); ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); timeline_action.setImageDrawable(getResources().getDrawable(R.drawable.default_postal_cover)); timeline_action.setAdjustViewBounds(true); timeline_action.setLayoutParams(lp); timeline_media.removeAllViews(); timeline_media.addView(timeline_action); int screenWidth = this.getWindowManager().getDefaultDisplay().getWidth(); ViewGroup.LayoutParams params = timeline_action.getLayoutParams(); params.height = screenWidth / 16 * 9; timeline_action.setLayoutParams(params); try { timeline_action.setImageBitmap(MediaStore.Images.Media.getBitmap(getContentResolver(), Uri.parse(item.uri))); } catch (Exception e) { e.printStackTrace(); } break; } case PostalDataItem.TYPE_WEB: { //todo break; } } mUnfoldableView.unfold(coverView, mDetailsLayout); /* ImageView image = Views.find(mDetailsLayout, R.id.details_image); TextView title = Views.find(mDetailsLayout, R.id.details_title); TextView description = Views.find(mDetailsLayout, R.id.details_text); try { image.setImageBitmap(MediaStore.Images.Media.getBitmap(getContentResolver(), Uri.parse(painting.getItem().uri))); } catch (IOException e) { e.printStackTrace(); } title.setText(painting.getItem().title); description.setText(painting.getItem().text + "\n");//todo: add other contents *//* if (painting.isLocal()) { image.setImageBitmap(BitmapFactory.decodeResource(getResources(), painting.getImageId())); } else { try { image.setImageBitmap(MediaStore.Images.Media.getBitmap(getContentResolver(), Uri.parse(painting.getUri()))); } catch (IOException e) { e.printStackTrace(); } } title.setText(painting.getTitle()); description.setText(painting.getContent() + "\n" + painting.getYear()); *//* mUnfoldableView.unfold(coverView, mDetailsLayout);*/ } private void initDatabase() { Database.database = openOrCreateDatabase("postal.db", Context.MODE_PRIVATE, null); Database.initDatabase(); } private void initLeftDrawer() { ListView drawerList = (ListView) findViewById(R.id.left_drawer_timeline); drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout_timeline); drawerList.setAdapter(new DrawerAdapter(getApplicationContext())); drawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { drawerItemOnClickAction(i); } }); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) { @Override public void onDrawerOpened(View drawerView) { invalidateOptionsMenu(); } @Override public void onDrawerClosed(View drawerView) { invalidateOptionsMenu(); } }; drawerLayout.setDrawerListener(toggle); } private void drawerItemOnClickAction(int i) { Intent intent = new Intent(); switch (i) { case 1: break; case 2: intent.setClass(this, MyFriends.class); startActivity(intent); break; case 3: intent.setClass(this, PEditor.class); startActivity(intent); break; case 4: intent.setClass(this, JEditor.class); intent.putExtra("type", PostalDataItem.TYPE_TEXT); startActivity(intent); break; case 5: intent.setClass(this, JEditor.class); intent.putExtra("type", PostalDataItem.TYPE_IMAGE); startActivity(intent); break; case 6: intent.setClass(this, JEditor.class); intent.putExtra("type", PostalDataItem.TYPE_VIDEO); startActivity(intent); break; case 7: intent.setClass(this, JEditor.class); intent.putExtra("type", PostalDataItem.TYPE_AUDIO); startActivity(intent); break; case 8: intent.setClass(this, JEditor.class); intent.putExtra("type", PostalDataItem.TYPE_WEB); startActivity(intent); break; case 9: new Thread("ss") { @Override public void run() { try { DatagramSocket udpSocket = new DatagramSocket(8003); byte[] data = new byte[256]; DatagramPacket udpPacket = new DatagramPacket(data, 256); while (true) { try { udpSocket.receive(udpPacket); } catch (Exception e) { System.out.println(e.toString()); } if (udpPacket.getLength() != 0) { String codeString = new String(data, 0, udpPacket.getLength()); System.out.println(codeString); PostalDataItem dataItem = new PostalDataItem(PostalDataItem.TYPE_TEXT, "", codeString, "time", "", new double[]{1.0, 1.0}, Database.me.getPhone(), Database.me.getPhone(), ""); Database.addPostal(dataItem); } } } catch (Exception e) { e.printStackTrace(); } } }.start(); break; case 10: intent.setClass(this, Welcome.class); startActivity(intent); finish(); break; } drawerLayout.closeDrawer(Gravity.LEFT); } }