package com.classic.car.ui.fragment; import android.Manifest; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.support.annotation.NonNull; import android.text.TextUtils; import android.view.View; import android.widget.TextView; import com.classic.android.consts.MIME; import com.classic.android.permissions.AfterPermissionGranted; import com.classic.android.permissions.EasyPermissions; import com.classic.android.utils.SDCardUtil; import com.classic.car.R; import com.classic.car.app.CarApplication; import com.classic.car.consts.Consts; import com.classic.car.db.BackupManager; import com.classic.car.db.dao.ConsumerDao; import com.classic.car.ui.activity.OpenSourceLicensesActivity; import com.classic.car.ui.base.AppBaseFragment; import com.classic.car.ui.widget.AuthorDialog; import com.classic.car.utils.IntentUtil; import com.classic.car.utils.PgyUtil; import com.classic.car.utils.RxUtil; import com.classic.car.utils.ToastUtil; import com.classic.car.utils.UriUtil; import com.jakewharton.rxbinding.view.RxView; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Locale; import java.util.concurrent.TimeUnit; import javax.inject.Inject; import butterknife.BindView; import butterknife.OnClick; import rx.Observable; import rx.functions.Action1; /** * 应用名称: CarAssistant * 包 名 称: com.classic.car.ui.fragment * * 文件描述:关于页面 * 创 建 人:续写经典 * 创建时间:16/5/29 下午2:21 */ public class AboutFragment extends AppBaseFragment { private static final int REQUEST_CODE_FEEDBACK = 1001; private static final int FILE_CHOOSER_CODE = 1002; private static final String FEEDBACK_PERMISSION = Manifest.permission.RECORD_AUDIO; @BindView(R.id.about_version) TextView mVersion; @BindView(R.id.about_update) TextView mUpdate; @Inject ConsumerDao mConsumerDao; @SuppressWarnings("SpellCheckingInspection") private final SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA); private final BackupManager mBackupManager = new BackupManager(); private AuthorDialog mAuthorDialog; public static AboutFragment newInstance() { return new AboutFragment(); } @Override public int getLayoutResId() { return R.layout.fragment_about; } @Override public void initView(View parentView, Bundle savedInstanceState) { super.initView(parentView, savedInstanceState); ((CarApplication) mActivity.getApplicationContext()).getAppComponent().inject(this); mVersion.setText(getString(R.string.about_version, getVersionName(mAppContext))); PgyUtil.setDialogStyle("#3F51B5", "#FFFFFF"); addSubscription(RxView.clicks(mUpdate) .throttleFirst(Consts.SHIELD_TIME, TimeUnit.SECONDS) .subscribe(new Action1<Void>() { @Override public void call(Void aVoid) { PgyUtil.checkUpdate(mActivity, true); } })); } @OnClick({R.id.about_feedback, R.id.about_author, R.id.about_thanks, R.id.about_share, R.id.about_backup, R.id.about_restore}) public void onClick(View view) { switch (view.getId()) { case R.id.about_feedback: checkRecordAudioPermissions(); break; case R.id.about_author: if (null == mAuthorDialog) { mAuthorDialog = new AuthorDialog(mActivity); } mAuthorDialog.show(); break; case R.id.about_share: IntentUtil.shareText(mActivity, getString(R.string.share_title), getString(R.string.share_subject), getString(R.string.share_content)); break; case R.id.about_thanks: OpenSourceLicensesActivity.start(mActivity); break; case R.id.about_backup: backup(createBackupFileName()); break; case R.id.about_restore: IntentUtil.showFileChooser(this, MIME.FILE, R.string.select_backup_file_hint, FILE_CHOOSER_CODE, R.string.not_found_file_manager_hint); break; } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if(resultCode == Activity.RESULT_OK && requestCode == FILE_CHOOSER_CODE) { String path = UriUtil.toAbsolutePath(mAppContext, data.getData()); if(!TextUtils.isEmpty(path) && path.endsWith(Consts.BACKUP_SUFFIX)) { //ToastUtil.showToast(mAppContext, "select file:"+path); restore(path); } else { ToastUtil.showToast(mAppContext, R.string.invalid_backup_file); } return; } super.onActivityResult(requestCode, resultCode, data); } private void restore(@NonNull String path) { addSubscription(Observable.just(mBackupManager.restore(mConsumerDao, path)) .compose(RxUtil.<Boolean>applySchedulers(RxUtil.IO_ON_UI_TRANSFORMER)) .subscribe(new Action1<Boolean>() { @Override public void call(Boolean result) { ToastUtil.showToast(mAppContext, result ? R.string.restore_success : R.string.restore_failure); } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { ToastUtil.showToast(mAppContext, R.string.restore_failure); } })); } private void backup(final String filePath) { addSubscription(Observable.just(mBackupManager.backup(mConsumerDao, filePath)) .compose(RxUtil.<Integer>applySchedulers(RxUtil.IO_ON_UI_TRANSFORMER)) .subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { if (integer == 0) { ToastUtil.showToast(mAppContext, R.string.backup_empty); } else { ToastUtil.showToast(mAppContext, String.format(Locale.CHINA, getString(R.string.backup_success), filePath)); } } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { ToastUtil.showToast(mAppContext, R.string.backup_success); } })); } private String createBackupFileName() { //noinspection StringBufferReplaceableByString return new StringBuilder(SDCardUtil.getFileDirPath()) .append(File.separator) .append(Consts.BACKUP_PREFIX) .append(mDateFormat.format(new Date(System.currentTimeMillis()))) .append(Consts.BACKUP_SUFFIX) .toString(); } @Override public void onPause() { super.onPause(); if (null != mAuthorDialog && mAuthorDialog.isShowing()) { mAuthorDialog.dismiss(); } } @AfterPermissionGranted(REQUEST_CODE_FEEDBACK) private void checkRecordAudioPermissions() { if (EasyPermissions.hasPermissions(mAppContext, FEEDBACK_PERMISSION)) { PgyUtil.feedback(mActivity); } else { EasyPermissions.requestPermissions(this, Consts.FEEDBACK_PERMISSIONS_DESCRIBE, REQUEST_CODE_FEEDBACK, FEEDBACK_PERMISSION); } } @Override public void onPermissionsGranted(int requestCode, List<String> perms) { super.onPermissionsGranted(requestCode, perms); if (requestCode == REQUEST_CODE_FEEDBACK) { PgyUtil.feedback(mActivity); } } @Override public void onPermissionsDenied(int requestCode, List<String> perms) { super.onPermissionsDenied(requestCode, perms); if (requestCode == REQUEST_CODE_FEEDBACK) { PgyUtil.feedback(mActivity); } } private String getVersionName(@NonNull Context context) { try { PackageManager packageManager = context.getPackageManager(); PackageInfo info = packageManager.getPackageInfo(context.getPackageName(), 0); if (null != info) { return info.versionName; } } catch (Exception e) { e.printStackTrace(); } return null; } }