package com.stardust.scriptdroid.ui.update;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.afollestad.materialdialogs.MaterialDialog;
import com.stardust.scriptdroid.BuildConfig;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.script.StorageScriptProvider;
import com.stardust.scriptdroid.tool.IntentTool;
import com.stardust.scriptdroid.tool.UpdateChecker;
import com.stardust.util.DownloadTask;
import com.stardust.util.IntentUtil;
import com.stardust.widget.CommonMarkdownView;
/**
* Created by Stardust on 2017/4/9.
*/
public class UpdateInfoDialogBuilder extends MaterialDialog.Builder {
private static final String KEY_DO_NOT_ASK_AGAIN_FOR_VERSION = "I cannot forget you...cannot help missing you...";
private View mView;
private SharedPreferences mSharedPreferences;
private UpdateChecker.UpdateInfo mUpdateInfo;
public UpdateInfoDialogBuilder(@NonNull Context context, UpdateChecker.UpdateInfo info) {
super(context);
mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
updateInfo(info);
}
public UpdateInfoDialogBuilder updateInfo(UpdateChecker.UpdateInfo info) {
mUpdateInfo = info;
mView = View.inflate(context, R.layout.dialog_update_info, null);
setReleaseNotes(mView, info);
setCurrentVersionIssues(mView, info);
setUpdateDownloadButtons(mView, info);
title(context.getString(R.string.text_new_version) + " " + info.versionName);
customView(mView, false);
return this;
}
public UpdateInfoDialogBuilder showDoNotAskAgain() {
mView.findViewById(R.id.do_not_ask_again_container).setVisibility(View.VISIBLE);
CheckBox checkBox = (CheckBox) mView.findViewById(R.id.do_not_ask_again);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mSharedPreferences.edit().putBoolean(KEY_DO_NOT_ASK_AGAIN_FOR_VERSION + mUpdateInfo.versionCode, isChecked).apply();
}
});
return this;
}
@Override
public MaterialDialog show() {
if (mSharedPreferences.getBoolean(KEY_DO_NOT_ASK_AGAIN_FOR_VERSION + mUpdateInfo.versionCode, false)) {
return null;
}
return super.show();
}
private void setCurrentVersionIssues(View view, UpdateChecker.UpdateInfo info) {
TextView issues = (TextView) view.findViewById(R.id.issues);
UpdateChecker.OldVersion currentVersion = info.getOldVersion(BuildConfig.VERSION_CODE);
if (currentVersion == null) {
issues.setVisibility(View.GONE);
} else {
issues.setText(currentVersion.issues);
}
}
private void setUpdateDownloadButtons(View view, UpdateChecker.UpdateInfo info) {
LinearLayout downloads = (LinearLayout) view.findViewById(R.id.downloads);
setDirectlyDownloadButton(downloads, info);
for (final UpdateChecker.Download download : info.downloads) {
Button button = (Button) View.inflate(getContext(), R.layout.dialog_update_info_btn, null);
button.setText(download.name);
downloads.addView(button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
IntentTool.browse(v.getContext(), download.url);
}
});
}
}
private void setDirectlyDownloadButton(LinearLayout container, final UpdateChecker.UpdateInfo info) {
if (TextUtils.isEmpty(info.downloadUrl)) {
return;
}
Button button = (Button) View.inflate(getContext(), R.layout.dialog_update_info_btn, null);
button.setText(R.string.text_directly_download);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
directlyDownload(info.downloadUrl);
}
});
container.addView(button);
}
private void directlyDownload(String downloadUrl) {
final MaterialDialog dialog = new MaterialDialog.Builder(getContext())
.title(R.string.text_downloading)
.progress(false, 100)
.show();
final String path = StorageScriptProvider.DEFAULT_DIRECTORY_PATH + "AutoJs.apk";
final DownloadTask task = new DownloadTask() {
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
dialog.setProgress(values[0]);
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
dialog.dismiss();
if (!result) {
Toast.makeText(getContext(), R.string.text_download_failed, Toast.LENGTH_SHORT).show();
} else {
IntentUtil.installApk(getContext(), path);
}
}
};
task.execute(downloadUrl, path);
}
private void setReleaseNotes(View view, UpdateChecker.UpdateInfo info) {
CommonMarkdownView markdownView = (CommonMarkdownView) view.findViewById(R.id.release_notes);
markdownView.loadMarkdown(info.releaseNotes);
}
}