package org.aisen.weibo.sina.ui.activity.picture; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import com.umeng.analytics.MobclickAgent; import org.aisen.android.common.context.GlobalContext; import org.aisen.android.common.utils.FileUtils; import org.aisen.android.common.utils.KeyGenerator; import org.aisen.android.common.utils.Logger; import org.aisen.android.common.utils.SystemUtils; import org.aisen.android.component.bitmaploader.BitmapLoader; import org.aisen.android.component.bitmaploader.core.ImageConfig; import org.aisen.android.component.bitmaploader.display.DefaultDisplayer; import org.aisen.android.component.bitmaploader.download.SdcardDownloader; import org.aisen.android.support.action.IAction; import org.aisen.android.support.inject.ViewInject; import org.aisen.android.ui.activity.basic.BaseActivity; import org.aisen.weibo.sina.R; import org.aisen.weibo.sina.support.permissions.SdcardPermissionAction; import org.aisen.weibo.sina.support.utils.UMengUtil; import org.aisen.weibo.sina.ui.fragment.secondgroups.WallpaperDownloadTask; import org.aisen.weibo.sina.ui.widget.WallpaperViewer; import org.aisen.weibo.sina.ui.widget.WaveView; import org.aisen.weibo.sina.ui.widget.photoview.AttacherInterface; import org.aisen.weibo.sina.ui.widget.photoview.PhotoView; import java.io.File; /** * 壁纸设置 * * Created by wangdan on 16/3/23. */ public class WallpaperSettingActivity extends BaseActivity implements WallpaperViewer.WallpaperViewerLisenter, WallpaperDownloadTask.OnProgressCallback { public static void launch(Activity from, File file, String origURL) { if (!file.exists()) return; Uri uri = Uri.fromFile(file); Intent intent = new Intent(from, WallpaperSettingActivity.class); intent.putExtra(Intent.EXTRA_STREAM, uri); intent.putExtra("origURL", origURL); from.startActivity(intent); } @ViewInject(id = R.id.layWallpaperRoot) View layWallpaperRoot; @ViewInject(id = R.id.settingView) WaveView setting; @ViewInject(id = R.id.viewer) WallpaperViewer viewer; @ViewInject(id = R.id.photoview) PhotoView photoView; @ViewInject(id = R.id.viewFinish) View viewFinish; private File thumbFile; private File origFile; private String origURL; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ui_wallpaper_setting); viewer.init(); viewer.setWallpaperViewerLisenter(this); setting.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!cancelIfRunning()) { setWallpaper(); } } }); viewFinish.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); setupPhotoView(savedInstanceState); findViewById(R.id.layNavigation).setPadding(0, 0, 0, SystemUtils.getNavigationBarHeight(this)); } private void setupPhotoView(Bundle savedInstanceState) { photoView.setOnPhotoTapListener(new AttacherInterface.OnPhotoTapListener() { @Override public void onPhotoTap(View view, float x, float y) { finish(); } }); if (getIntent().getExtras().containsKey(Intent.EXTRA_STREAM)) { thumbFile = new File(getPath((Uri) getIntent().getParcelableExtra(Intent.EXTRA_STREAM))); origURL = getIntent().getExtras().getString("origURL"); if (!TextUtils.isEmpty(origURL)) { Logger.d("Wallpaper", origURL); origFile = BitmapLoader.getInstance().getCacheFile(origURL); WallpaperDownloadTask.bindWallpaper(this, origURL, KeyGenerator.generateMD5(origURL), this); } if (getFile().exists()) { ImageConfig config = new ImageConfig(); config.setLoadfaildRes(R.drawable.bg_timeline_loading); config.setLoadingRes(R.drawable.bg_timeline_loading); config.setDownloaderClass(SdcardDownloader.class); config.setDisplayer(new DefaultDisplayer()); BitmapLoader.getInstance().display(null, getFile().getAbsolutePath(), photoView, config); return; } } finish(); } private File getFile() { if (origFile != null && origFile.exists()) { return origFile; } return thumbFile; } private String getPath(Uri uri) { if (uri.toString().startsWith("content://")) { return FileUtils.getPath(GlobalContext.getInstance(), uri); } else { return uri.toString().replace("file://", ""); } } @Override public void onWallpaperViewerScroll(float percent) { photoView.getAttacher().onMove(percent); } @Override public void onProgressUpdate(String image, long progress, long total, int flag) { boolean isSetting = (flag & 0x02) > 0; if (!TextUtils.isEmpty(image) && image.equals(origURL)) { // 下载完成 if (total > 0 && progress > 0 && total == progress) { setWaveBackground(setting, true, R.drawable.ic_set_wallpaper_normal, 0); } // 正在下载 else if (total > 0 && progress > 0) { int p = (int) (progress * 100 / total); setWaveBackground(setting, !isSetting, R.drawable.ic_set_wallpaper_normal, p); } // 等待下载 else if (total < 1 && progress < 1) { setWaveBackground(setting, !isSetting, R.drawable.ic_set_wallpaper_normal, 0); } } } private void setWaveBackground(WaveView waveView, boolean setBk, int bkRes, int progress) { if (setBk) { waveView.setBackgroundResource(bkRes); waveView.setProgress0(); } else { waveView.setBackground(null); if (progress == 0) waveView.setProgress0(); else waveView.setProgress(progress); } } @Override public void onSetWallpaper(boolean success) { setWaveBackground(setting, true, R.drawable.ic_set_wallpaper_normal, 0); if (success) { ImageConfig config = new ImageConfig(); config.setLoadfaildRes(R.drawable.bg_timeline_loading); config.setLoadingRes(R.drawable.bg_timeline_loading); config.setDownloaderClass(SdcardDownloader.class); config.setDisplayer(new DefaultDisplayer()); BitmapLoader.getInstance().display(null, origFile.getAbsolutePath(), photoView, config); } } @Override public void showMessage(String image, String text) { showMessage(text); } @Override public void onCanceled(String image) { if (!TextUtils.isEmpty(image) && image.equals(origURL)) { setInit(image); showMessage(R.string.wallpaper_download_cancel); } } @Override public void setInit(String image) { if (!TextUtils.isEmpty(image) && image.equals(origURL)) { setting.setBackgroundResource(R.drawable.ic_set_wallpaper_normal); setting.setProgress0(); } } private boolean cancelIfRunning() { if (setting.isRunning()) { WallpaperDownloadTask.cancelTask(this, origURL, KeyGenerator.generateMD5(origURL), this); return true; } return false; } private void setWallpaper() { new IAction(this, new SdcardPermissionAction(this, null)) { @Override public void doAction() { // 如果该壁纸已保存,直接弹框提示,然后再设置壁纸 // 在idol3上设置时常耗时800ms以下,在idol5手机100ms以下 final File file = WallpaperDownloadTask.getWallpaperSaveFile(origURL); if (file.exists()) { MobclickAgent.onEvent(WallpaperSettingActivity.this, "wallpaper_setting"); showMessage(R.string.txt_set_wallpaper_suc); // AsyncTask的execute()方法,默认会在队列执行 new AsyncTask<Void, Void, Boolean>() { @Override protected Boolean doInBackground(Void... params) { try { WallpaperDownloadTask.setWallpaper(WallpaperSettingActivity.this, file, null); } catch (Throwable e) { return false; } return true; } @Override protected void onPostExecute(Boolean aBoolean) { super.onPostExecute(aBoolean); if (!aBoolean) { showMessage(R.string.txt_set_wallpaper_fail); } } }.execute(); } else { if (SystemUtils.getNetworkType(WallpaperSettingActivity.this) != SystemUtils.NetWorkType.none) { WallpaperDownloadTask.settingWallpaper(WallpaperSettingActivity.this, origURL, KeyGenerator.generateMD5(origURL), WallpaperSettingActivity.this); }else { showMessage(R.string.txt_network_offline); } } } }.run(); } @Override protected int configTheme() { return R.style.AppTheme_Pics; } @Override protected void onResume() { super.onResume(); UMengUtil.onPageStart(this, "壁纸预览页"); } @Override protected void onPause() { super.onPause(); UMengUtil.onPageEnd(this, "壁纸预览页"); } }