// Path: app/src/main/java/com/troy/xifan/App.java
// public class App extends Application {
//     public static final String TAG = "Xifan";
//     private static App sInstance;
// 
//     private UserRes user;
// 
//     private List<Activity> mActivityList = new ArrayList<>();
// 
//     public App() {
//         sInstance = this;
//     }
// 
//     @Override
//     public void onCreate() {
//         super.onCreate();
//         registerActivityLifecycleCallbacks(mActivityLifecycleCallbacks);
//         init();
//     }
// 
//     private void init() {
//         Router.initialize(this);
// 
//         Stetho.initializeWithDefaults(this);
//         Logger.init(TAG)                 // default PRETTYLOGGER or use just init()
//                 .methodCount(1)                 // default 2
//                 .hideThreadInfo()               // default shown
//                 .logLevel(LogLevel.FULL)        // default LogLevel.FULL
//                 .methodOffset(2);            // default 0
// 
//         FIR.init(this);
//         // 初始化参数依次为 this, AppId, AppKey
//         AVOSCloud.initialize(this, Constants.AVOSCloud.APP_ID, Constants.AVOSCloud.APP_KEY);
//         AVAnalytics.enableCrashReport(this, true);
//     }
// 
//     public static App getInstance() {
//         return sInstance;
//     }
// 
//     public UserRes getUser() {
//         return user;
//     }
// 
//     public void setUser(UserRes user) {
//         this.user = user;
//     }
// 
//     private ActivityLifecycleCallbacks mActivityLifecycleCallbacks =
//             new ActivityLifecycleCallbacks() {
//                 @Override
//                 public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
//                     if (!mActivityList.contains(activity)) {
//                         mActivityList.add(activity);
//                     }
//                 }
// 
//                 @Override
//                 public void onActivityStarted(Activity activity) {
// 
//                 }
// 
//                 @Override
//                 public void onActivityResumed(Activity activity) {
// 
//                 }
// 
//                 @Override
//                 public void onActivityPaused(Activity activity) {
// 
//                 }
// 
//                 @Override
//                 public void onActivityStopped(Activity activity) {
// 
//                 }
// 
//                 @Override
//                 public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
// 
//                 }
// 
//                 @Override
//                 public void onActivityDestroyed(Activity activity) {
//                     if (mActivityList.contains(activity)) {
//                         mActivityList.remove(activity);
//                     }
//                 }
//             };
// 
//     public List<Activity> getActivityList() {
//         return mActivityList;
//     }
// 
//     public void setActivityList(List<Activity> activityList) {
//         mActivityList = activityList;
//     }
// 
//     public void cleanActivityList() {
//         for (Activity activity : mActivityList) {
//             activity.finish();
//         }
//     }
// }
// 
// Path: app/src/main/java/com/troy/xifan/activity/BrowserActivity.java
// @Route({ Constants.Router.BROWSER, Constants.Router.SCHEME + Constants.Router.BROWSER })
// public class BrowserActivity extends BaseActivity {
//     public static final String BUNDLE_URL = "url";
// 
//     @BindView(R.id.toolbar) Toolbar mToolbar;
//     @BindView(R.id.webview) WebView mWebView;
// 
//     private String mUrl;
// 
//     @Override
//     protected void onCreate(@Nullable Bundle savedInstanceState) {
//         super.onCreate(savedInstanceState);
//         setContentView(R.layout.activity_borwser);
//         ButterKnife.bind(this);
//         Bundle bundle = getIntent().getExtras();
//         if (bundle != null) {
//             mUrl = bundle.getString(BUNDLE_URL);
//         }
//         initViews();
//     }
// 
//     @Override
//     protected void initViews() {
//         setSupportActionBar(mToolbar);
//         getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// 
//         WebSettings webSettings = mWebView.getSettings();
//         webSettings.setJavaScriptEnabled(true);
// 
//         mWebView.setWebViewClient(new WebViewClient() {
//             @Override
//             public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
//                 view.loadUrl(request.getUrl().toString());
//                 return true;
//             }
//         });
//         mWebView.setWebChromeClient(new WebChromeClient() {
//             @Override
//             public void onReceivedTitle(WebView view, String title) {
//                 mToolbar.setTitle(title);
//             }
//         });
//         if (!TextUtils.isEmpty(mUrl)) {
//             mWebView.loadUrl(mUrl);
//         }
//     }
// 
//     @Override
//     public boolean onOptionsItemSelected(MenuItem item) {
//         switch (item.getItemId()) {
//             case android.R.id.home:
//                 finish();
//                 break;
//         }
//         return super.onOptionsItemSelected(item);
//     }
// 
//     @Override
//     public boolean onKeyDown(int keyCode, KeyEvent event) {
//         if (keyCode == KeyEvent.KEYCODE_BACK) {
//             if (mWebView.canGoBack()) {
//                 mWebView.goBack();
//                 return true;
//             } else {
//                 finish();
//             }
//         }
//         return super.onKeyDown(keyCode, event);
//     }
// }


import android.os.Bundle;
import android.text.TextPaint;
import android.text.style.ClickableSpan;
import android.text.style.URLSpan;
import android.view.View;
import com.chenenyu.router.Router;
import com.orhanobut.logger.Logger;
import com.troy.xifan.App;
import com.troy.xifan.R;
import com.troy.xifan.activity.BrowserActivity;
package com.troy.xifan.view;


/**
 * Created by chenlongfei on 2016/12/15.
 */

public class XiFanClickableSpan extends ClickableSpan {
    private URLSpan urlSpan;

    public XiFanClickableSpan(URLSpan urlSpan) {
        this.urlSpan = urlSpan;
    }

    @Override
    public void onClick(View view) {
        Logger.d("URL:" + urlSpan.getURL());
        Bundle bundle = new Bundle();
// Path: app/src/main/java/com/troy/xifan/App.java
// public class App extends Application {
//     public static final String TAG = "Xifan";
//     private static App sInstance;
// 
//     private UserRes user;
// 
//     private List<Activity> mActivityList = new ArrayList<>();
// 
//     public App() {
//         sInstance = this;
//     }
// 
//     @Override
//     public void onCreate() {
//         super.onCreate();
//         registerActivityLifecycleCallbacks(mActivityLifecycleCallbacks);
//         init();
//     }
// 
//     private void init() {
//         Router.initialize(this);
// 
//         Stetho.initializeWithDefaults(this);
//         Logger.init(TAG)                 // default PRETTYLOGGER or use just init()
//                 .methodCount(1)                 // default 2
//                 .hideThreadInfo()               // default shown
//                 .logLevel(LogLevel.FULL)        // default LogLevel.FULL
//                 .methodOffset(2);            // default 0
// 
//         FIR.init(this);
//         // 初始化参数依次为 this, AppId, AppKey
//         AVOSCloud.initialize(this, Constants.AVOSCloud.APP_ID, Constants.AVOSCloud.APP_KEY);
//         AVAnalytics.enableCrashReport(this, true);
//     }
// 
//     public static App getInstance() {
//         return sInstance;
//     }
// 
//     public UserRes getUser() {
//         return user;
//     }
// 
//     public void setUser(UserRes user) {
//         this.user = user;
//     }
// 
//     private ActivityLifecycleCallbacks mActivityLifecycleCallbacks =
//             new ActivityLifecycleCallbacks() {
//                 @Override
//                 public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
//                     if (!mActivityList.contains(activity)) {
//                         mActivityList.add(activity);
//                     }
//                 }
// 
//                 @Override
//                 public void onActivityStarted(Activity activity) {
// 
//                 }
// 
//                 @Override
//                 public void onActivityResumed(Activity activity) {
// 
//                 }
// 
//                 @Override
//                 public void onActivityPaused(Activity activity) {
// 
//                 }
// 
//                 @Override
//                 public void onActivityStopped(Activity activity) {
// 
//                 }
// 
//                 @Override
//                 public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
// 
//                 }
// 
//                 @Override
//                 public void onActivityDestroyed(Activity activity) {
//                     if (mActivityList.contains(activity)) {
//                         mActivityList.remove(activity);
//                     }
//                 }
//             };
// 
//     public List<Activity> getActivityList() {
//         return mActivityList;
//     }
// 
//     public void setActivityList(List<Activity> activityList) {
//         mActivityList = activityList;
//     }
// 
//     public void cleanActivityList() {
//         for (Activity activity : mActivityList) {
//             activity.finish();
//         }
//     }
// }
// 
// Path: app/src/main/java/com/troy/xifan/activity/BrowserActivity.java
// @Route({ Constants.Router.BROWSER, Constants.Router.SCHEME + Constants.Router.BROWSER })
// public class BrowserActivity extends BaseActivity {
//     public static final String BUNDLE_URL = "url";
// 
//     @BindView(R.id.toolbar) Toolbar mToolbar;
//     @BindView(R.id.webview) WebView mWebView;
// 
//     private String mUrl;
// 
//     @Override
//     protected void onCreate(@Nullable Bundle savedInstanceState) {
//         super.onCreate(savedInstanceState);
//         setContentView(R.layout.activity_borwser);
//         ButterKnife.bind(this);
//         Bundle bundle = getIntent().getExtras();
//         if (bundle != null) {
//             mUrl = bundle.getString(BUNDLE_URL);
//         }
//         initViews();
//     }
// 
//     @Override
//     protected void initViews() {
//         setSupportActionBar(mToolbar);
//         getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// 
//         WebSettings webSettings = mWebView.getSettings();
//         webSettings.setJavaScriptEnabled(true);
// 
//         mWebView.setWebViewClient(new WebViewClient() {
//             @Override
//             public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
//                 view.loadUrl(request.getUrl().toString());
//                 return true;
//             }
//         });
//         mWebView.setWebChromeClient(new WebChromeClient() {
//             @Override
//             public void onReceivedTitle(WebView view, String title) {
//                 mToolbar.setTitle(title);
//             }
//         });
//         if (!TextUtils.isEmpty(mUrl)) {
//             mWebView.loadUrl(mUrl);
//         }
//     }
// 
//     @Override
//     public boolean onOptionsItemSelected(MenuItem item) {
//         switch (item.getItemId()) {
//             case android.R.id.home:
//                 finish();
//                 break;
//         }
//         return super.onOptionsItemSelected(item);
//     }
// 
//     @Override
//     public boolean onKeyDown(int keyCode, KeyEvent event) {
//         if (keyCode == KeyEvent.KEYCODE_BACK) {
//             if (mWebView.canGoBack()) {
//                 mWebView.goBack();
//                 return true;
//             } else {
//                 finish();
//             }
//         }
//         return super.onKeyDown(keyCode, event);
//     }
// }


// Path: app/src/main/java/com/troy/xifan/view/XiFanClickableSpan.java
import android.os.Bundle;
import android.text.TextPaint;
import android.text.style.ClickableSpan;
import android.text.style.URLSpan;
import android.view.View;
import com.chenenyu.router.Router;
import com.orhanobut.logger.Logger;
import com.troy.xifan.App;
import com.troy.xifan.R;
import com.troy.xifan.activity.BrowserActivity;

package com.troy.xifan.view;


/**
 * Created by chenlongfei on 2016/12/15.
 */

public class XiFanClickableSpan extends ClickableSpan {
    private URLSpan urlSpan;

    public XiFanClickableSpan(URLSpan urlSpan) {
        this.urlSpan = urlSpan;
    }

    @Override
    public void onClick(View view) {
        Logger.d("URL:" + urlSpan.getURL());
        Bundle bundle = new Bundle();
        bundle.putString(BrowserActivity.BUNDLE_URL, "http://www.baidu.com");