package com.google.android.diskusage;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.DialogInterface.OnCancelListener;
import android.content.DialogInterface.OnClickListener;
import android.os.Build;
import android.view.View;
import com.google.android.diskusage.datasource.DataSource;
import com.google.android.diskusage.entity.FileSystemSuperRoot;
import com.google.android.diskusage.opengl.FileSystemViewGPU;
public class RendererManager {
private static final String HW_RENDERER = "hw_renderer";
private final DiskUsage diskusage;
private boolean hwRenderer;
private boolean rendererChanged = false;
private SharedPreferences getPrefs() {
return diskusage.getSharedPreferences("settings", Context.MODE_PRIVATE);
}
public RendererManager(DiskUsage diskusage) {
this.diskusage = diskusage;
}
public boolean hardwareRendererByDefault() {
final int sdkVersion = DataSource.get().getAndroidVersion();
return sdkVersion >= Build.VERSION_CODES.GINGERBREAD;
}
public boolean isHardwareRendererSupported() {
final int sdkVersion = DataSource.get().getAndroidVersion();
if (android.os.Build.DEVICE.equals("bravo")) {
if (sdkVersion >= Build.VERSION_CODES.ECLAIR
&& sdkVersion <= Build.VERSION_CODES.GINGERBREAD) {
return false;
}
}
return true;
}
public boolean warnAboutIncompatibility() {
final int sdkVersion = DataSource.get().getAndroidVersion();
return sdkVersion <= Build.VERSION_CODES.GINGERBREAD;
}
public void switchRenderer(final FileSystemSuperRoot root) {
diskusage.fileSystemState.killRenderThread();
if (hwRenderer) {
finishRendererSwitch(root);
return;
}
if (warnAboutIncompatibility()) {
new AlertDialog.Builder(diskusage)
.setCancelable(true)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("WARNING!")
.setMessage("Hardware renderer may CRASH your PHONE.\n\n" +
"There is a firmware bug in a number of HTC phones with Android 2.2 (Froyo).")
.setPositiveButton("Proceeed", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
finishRendererSwitch(root);
}
})
.setNegativeButton("Cancel", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
})
.setOnCancelListener(new OnCancelListener() {
public void onCancel(DialogInterface dialog) {
}
}).create().show();
return;
}
finishRendererSwitch(root);
}
public void finishRendererSwitch(FileSystemSuperRoot root) {
hwRenderer = !hwRenderer;
rendererChanged = true;
makeView(diskusage.fileSystemState, root);
}
public void makeView(
FileSystemState eventHandler, FileSystemSuperRoot root) {
View view;
if (hwRenderer) {
view = new FileSystemViewGPU(diskusage, eventHandler);
} else {
view = new FileSystemViewCPU(diskusage, eventHandler);
}
diskusage.menu.wrapAndSetContentView(view, root);
view.requestFocus();
}
public void onResume() {
if (isHardwareRendererSupported()) {
hwRenderer = getPrefs().getBoolean(HW_RENDERER,
hardwareRendererByDefault());
}
}
public void onPause() {
if (rendererChanged) {
getPrefs().edit().putBoolean(HW_RENDERER, hwRenderer).commit();
}
}
}