package com.marshalchen.common.demoofui.switchbuttondemo; import android.app.Activity; import android.app.IntentService; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.support.v4.content.LocalBroadcastManager; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.ProgressBar; import android.widget.TextView; import com.marshalchen.common.demoofui.R; import com.marshalchen.common.uimodule.switchbutton.SwitchButton; public class UseActivity extends Activity implements OnClickListener { private SwitchButton mListenerSb, mLongSb, mToggleSb, mCheckedSb; private ProgressBar mPb; private Button mStartBt, mToggleAniBt, mToggleNotAniBt, mCheckedAniBt, mCheckNotAniBt; private TextView mListenerFinish; private LongServiceReceiver longServiceReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.switch_button_activity_use); //getActionBar().setDisplayHomeAsUpEnabled(true); findView(); // work with listener mListenerSb.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { mListenerFinish.setVisibility(isChecked ? View.VISIBLE : View.INVISIBLE); } }); // work with stuff takes long longServiceReceiver = new LongServiceReceiver(); IntentFilter recevierFilter = new IntentFilter(); recevierFilter.addAction("LongServiceReceiver_ReturnIntent"); recevierFilter.addAction("PROGRESS_UPDATE"); LocalBroadcastManager.getInstance(this).registerReceiver(longServiceReceiver, recevierFilter); mStartBt.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent longService = new Intent(UseActivity.this, LongService.class); longServiceReceiver.onPreExecute(); UseActivity.this.startService(longService); } }); // toggle mToggleAniBt.setOnClickListener(this); mToggleNotAniBt.setOnClickListener(this); // checked mCheckedAniBt.setOnClickListener(this); mCheckNotAniBt.setOnClickListener(this); } @Override public void onDestroy() { super.onDestroy(); if (longServiceReceiver != null) LocalBroadcastManager.getInstance(this).unregisterReceiver(longServiceReceiver); } private void findView() { mListenerSb = (SwitchButton) findViewById(R.id.sb_use_listener); mLongSb = (SwitchButton) findViewById(R.id.sb_use_long); mToggleSb = (SwitchButton) findViewById(R.id.sb_use_toggle); mCheckedSb = (SwitchButton) findViewById(R.id.sb_use_checked); mPb = (ProgressBar) findViewById(R.id.pb); mPb.setProgress(0); mPb.setMax(100); mStartBt = (Button) findViewById(R.id.long_start); mToggleAniBt = (Button) findViewById(R.id.toggle_ani); mToggleNotAniBt = (Button) findViewById(R.id.toggle_not_ani); mCheckedAniBt = (Button) findViewById(R.id.checked_ani); mCheckNotAniBt = (Button) findViewById(R.id.checked_not_ani); mListenerFinish = (TextView) findViewById(R.id.listener_finish); mListenerFinish.setVisibility(mListenerSb.isChecked() ? View.VISIBLE : View.INVISIBLE); } class LongServiceReceiver extends BroadcastReceiver { public void onPreExecute() { mLongSb.setChecked(false); mStartBt.setEnabled(false); } public void onProgressUpdate(Integer... values) { if (values == null || values.length == 0) { return; } int p = values[0]; mPb.setProgress(p); } @Override public void onReceive(Context receiverContext, Intent receiverIntent) { if (receiverIntent.getAction().equals("PROGRESS_UPDATE")) { onProgressUpdate(receiverIntent.getIntExtra("progress", 0)); return; } mLongSb.slideToChecked(true); mStartBt.setEnabled(true); } } public static class LongService extends IntentService { private int progress = 0; public LongService() { super("LongService"); } public void onHandleIntent(Intent intent) { while (progress < 100) { progress++; try { Thread.sleep(20); } catch (InterruptedException e) { e.printStackTrace(); } Intent updateIntent = new Intent("PROGRESS_UPDATE"); updateIntent.putExtra("progress", progress); LocalBroadcastManager.getInstance(this).sendBroadcast(updateIntent); } Intent resultIntent = new Intent("LongServiceReceiver_ReturnIntent"); LocalBroadcastManager.getInstance(this).sendBroadcast(resultIntent); } } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); return true; } return super.onOptionsItemSelected(item); } @Override public void onClick(View v) { int id = v.getId(); switch (id) { case R.id.toggle_ani: mToggleSb.toggle(); break; case R.id.toggle_not_ani: mToggleSb.toggle(false); break; case R.id.checked_ani: mCheckedSb.slideToChecked(!mCheckedSb.isChecked()); break; case R.id.checked_not_ani: mCheckedSb.setChecked(!mCheckedSb.isChecked()); break; default: break; } } }