// Path: app/src/main/java/com/example/maguoqing/androiddemo/base/BaseActivity.java
// public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener {
// 
//     protected Toolbar toolbar;
// 
//     @Override
//     protected void onCreate(Bundle savedInstanceState) {
//         super.onCreate(savedInstanceState);
// 
//         int layoutId = getActivityLayout();
//         if (layoutId != -1) {
//             setContentView(layoutId);
//         }
// 
//         readIntent();
//         if (findViewById(R.id.toolbar) != null){
//             toolbar = (Toolbar) findViewById(R.id.toolbar);
//             setSupportActionBar(toolbar);
//             getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//         }
// 
//         setControl();
//         initControls();
//         setListeners();
//     }
// 
//     @Override
//     protected void onResume() {
//         super.onResume();
//         MobclickAgent.onResume(this);
//     }
// 
//     @Override
//     protected void onPause() {
//         super.onPause();
//         MobclickAgent.onPause(this);
//     }
// 
//     @Override
//     protected void onDestroy() {
//         super.onDestroy();
//     }
// 
//     protected abstract void setListeners();
// 
//     protected abstract void readIntent();
// 
//     protected abstract void initControls();
// 
//     protected abstract int getActivityLayout();
// 
//     @Override
//     public void onClick(View v) {
// 
//     }
// 
//     @Target({ElementType.FIELD, ElementType.TYPE})
//     @Retention(RetentionPolicy.RUNTIME)
//     @Inherited
//     public @interface ViewId {
//         int value();
//     }
// 
//     private void setControl() {
//         Class clazz = this.getClass();
//         try {
//             for (Field field : clazz.getDeclaredFields()) {
//                 field.setAccessible(true);
//                 if (!View.class.isAssignableFrom(field.getType())) {
//                     continue;
//                 }
//                 ViewId viewId = field.getAnnotation(ViewId.class);
//                 if (viewId == null) {
//                     continue;
//                 }
//                 field.set(this, this.findViewById(viewId.value()));
//             }
//         } catch (IllegalAccessException e) {
//             e.printStackTrace();
//         }
//     }
// 
//     @Override
//     public boolean onOptionsItemSelected(MenuItem item) {
//         int id = item.getItemId();
//         if (id == android.R.id.home){
//             onBackPressed();
//         }
//         return super.onOptionsItemSelected(item);
//     }
// }
// 
// Path: app/src/main/java/com/example/maguoqing/androiddemo/service/MDownloadTask.java
// public class MDownloadTask extends AsyncTask<Void, Integer, Boolean> {
//     private NotificationManager notificationManager;
//     private NotificationCompat.Builder builder;
//     private Context context;
// 
//     public MDownloadTask(NotificationManager notificationManager,
//                          NotificationCompat.Builder builder, Context context) {
//         super();
//         this.notificationManager = notificationManager;
//         this.builder = builder;
//         this.context = context;
//     }
// 
//     @Override
//     protected void onPreExecute() {
//         Toast.makeText(context, "start download", Toast.LENGTH_SHORT).show();
//     }
// 
//     @Override
//     protected Boolean doInBackground(Void... voids) {
//         int i = 0;
//         while (i < 100) {
//             try {
//                 Thread.sleep(100);
//                 i++;
//                 publishProgress(i);
//             } catch (Exception e) {
//                 return false;
//             }
//         }
//         return true;
//     }
// 
//     @Override
//     protected void onProgressUpdate(Integer... values) {
//         builder.setProgress(100, values[0], false);
//         notificationManager.notify(1, builder.build());
//     }
// 
//     @Override
//     protected void onPostExecute(Boolean result) {
//         if (result) {
//             builder.setContentText("Download finish")
//                     .setProgress(0, 0, false);
//             notificationManager.notify(1, builder.build());
//             Toast.makeText(context, "download finish", Toast.LENGTH_SHORT).show();
//         } else {
//             builder.setContentText("Download failed")
//                     .setProgress(0, 0, false);
//             notificationManager.notify(1, builder.build());
//             Toast.makeText(context, "download failed", Toast.LENGTH_SHORT).show();
//         }
//     }
// }


import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.TaskStackBuilder;
import android.view.View;
import android.widget.Button;
import com.example.maguoqing.androiddemo.R;
import com.example.maguoqing.androiddemo.base.BaseActivity;
import com.example.maguoqing.androiddemo.service.MDownloadTask;
                showProgressNotification();
                break;
            case R.id.btn_clear_notification:
                clearNotification();
                break;
            case R.id.btn_start_download:
                startDownload();
                break;
            default:
                break;
        }
    }

    @Override
    protected void setListeners() {
        btnSimpleNotification.setOnClickListener(this);
        btnBackNotification.setOnClickListener(this);
        btnClearNotification.setOnClickListener(this);
        btnProgressNotification.setOnClickListener(this);
        btnStartDownload.setOnClickListener(this);
    }

    @Override
    protected void readIntent() {

    }

    @Override
    protected void initControls() {
        mContext = this;
// Path: app/src/main/java/com/example/maguoqing/androiddemo/base/BaseActivity.java
// public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener {
// 
//     protected Toolbar toolbar;
// 
//     @Override
//     protected void onCreate(Bundle savedInstanceState) {
//         super.onCreate(savedInstanceState);
// 
//         int layoutId = getActivityLayout();
//         if (layoutId != -1) {
//             setContentView(layoutId);
//         }
// 
//         readIntent();
//         if (findViewById(R.id.toolbar) != null){
//             toolbar = (Toolbar) findViewById(R.id.toolbar);
//             setSupportActionBar(toolbar);
//             getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//         }
// 
//         setControl();
//         initControls();
//         setListeners();
//     }
// 
//     @Override
//     protected void onResume() {
//         super.onResume();
//         MobclickAgent.onResume(this);
//     }
// 
//     @Override
//     protected void onPause() {
//         super.onPause();
//         MobclickAgent.onPause(this);
//     }
// 
//     @Override
//     protected void onDestroy() {
//         super.onDestroy();
//     }
// 
//     protected abstract void setListeners();
// 
//     protected abstract void readIntent();
// 
//     protected abstract void initControls();
// 
//     protected abstract int getActivityLayout();
// 
//     @Override
//     public void onClick(View v) {
// 
//     }
// 
//     @Target({ElementType.FIELD, ElementType.TYPE})
//     @Retention(RetentionPolicy.RUNTIME)
//     @Inherited
//     public @interface ViewId {
//         int value();
//     }
// 
//     private void setControl() {
//         Class clazz = this.getClass();
//         try {
//             for (Field field : clazz.getDeclaredFields()) {
//                 field.setAccessible(true);
//                 if (!View.class.isAssignableFrom(field.getType())) {
//                     continue;
//                 }
//                 ViewId viewId = field.getAnnotation(ViewId.class);
//                 if (viewId == null) {
//                     continue;
//                 }
//                 field.set(this, this.findViewById(viewId.value()));
//             }
//         } catch (IllegalAccessException e) {
//             e.printStackTrace();
//         }
//     }
// 
//     @Override
//     public boolean onOptionsItemSelected(MenuItem item) {
//         int id = item.getItemId();
//         if (id == android.R.id.home){
//             onBackPressed();
//         }
//         return super.onOptionsItemSelected(item);
//     }
// }
// 
// Path: app/src/main/java/com/example/maguoqing/androiddemo/service/MDownloadTask.java
// public class MDownloadTask extends AsyncTask<Void, Integer, Boolean> {
//     private NotificationManager notificationManager;
//     private NotificationCompat.Builder builder;
//     private Context context;
// 
//     public MDownloadTask(NotificationManager notificationManager,
//                          NotificationCompat.Builder builder, Context context) {
//         super();
//         this.notificationManager = notificationManager;
//         this.builder = builder;
//         this.context = context;
//     }
// 
//     @Override
//     protected void onPreExecute() {
//         Toast.makeText(context, "start download", Toast.LENGTH_SHORT).show();
//     }
// 
//     @Override
//     protected Boolean doInBackground(Void... voids) {
//         int i = 0;
//         while (i < 100) {
//             try {
//                 Thread.sleep(100);
//                 i++;
//                 publishProgress(i);
//             } catch (Exception e) {
//                 return false;
//             }
//         }
//         return true;
//     }
// 
//     @Override
//     protected void onProgressUpdate(Integer... values) {
//         builder.setProgress(100, values[0], false);
//         notificationManager.notify(1, builder.build());
//     }
// 
//     @Override
//     protected void onPostExecute(Boolean result) {
//         if (result) {
//             builder.setContentText("Download finish")
//                     .setProgress(0, 0, false);
//             notificationManager.notify(1, builder.build());
//             Toast.makeText(context, "download finish", Toast.LENGTH_SHORT).show();
//         } else {
//             builder.setContentText("Download failed")
//                     .setProgress(0, 0, false);
//             notificationManager.notify(1, builder.build());
//             Toast.makeText(context, "download failed", Toast.LENGTH_SHORT).show();
//         }
//     }
// }


// Path: app/src/main/java/com/example/maguoqing/androiddemo/activity/NotificationActivity.java
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.TaskStackBuilder;
import android.view.View;
import android.widget.Button;
import com.example.maguoqing.androiddemo.R;
import com.example.maguoqing.androiddemo.base.BaseActivity;
import com.example.maguoqing.androiddemo.service.MDownloadTask;

                showProgressNotification();
                break;
            case R.id.btn_clear_notification:
                clearNotification();
                break;
            case R.id.btn_start_download:
                startDownload();
                break;
            default:
                break;
        }
    }

    @Override
    protected void setListeners() {
        btnSimpleNotification.setOnClickListener(this);
        btnBackNotification.setOnClickListener(this);
        btnClearNotification.setOnClickListener(this);
        btnProgressNotification.setOnClickListener(this);
        btnStartDownload.setOnClickListener(this);
    }

    @Override
    protected void readIntent() {

    }

    @Override
    protected void initControls() {
        mContext = this;
        mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);