package anywheresoftware.b4a.cachecleaner;
import java.util.ArrayList;
import java.util.List;
import com.frozendevs.cache.cleaner.model.AppsListItem;
import com.frozendevs.cache.cleaner.model.CleanerService;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Environment;
import android.os.IBinder;
import android.os.StatFs;
import anywheresoftware.b4a.BA;
import anywheresoftware.b4a.BA.Events;
import anywheresoftware.b4a.BA.Permissions;
import anywheresoftware.b4a.BA.ShortName;
import anywheresoftware.b4a.BA.Version;
@ShortName("CacheCleaner")
@Version(1f)
@Events(values = { "OnScanStarted","onScanProgress (Current As int , Total As int)","onScanCompleted (AppsList As Object)","onCleanStarted","onCleanCompleted (CacheSize As Long)" })
@Permissions(values = {"android.permission.GET_PACKAGE_SIZE","android.permission.CLEAR_APP_CACHE"})
public class CacheCleaner implements CleanerService.OnActionListener {
CleanerService mCleanerService;
private long totalmem;
private long freemem;
private boolean isinitialized = false;
BA ba;
String event;
private ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mCleanerService = ((CleanerService.CleanerServiceBinder) service).getService();
mCleanerService.setOnActionListener(CacheCleaner.this);
isinitialized = true;
updateStorageUsage();
}
@Override
public void onServiceDisconnected(ComponentName name) {
mCleanerService.setOnActionListener(null);
mCleanerService = null;
isinitialized = false;
}
};
private ArrayList<Object> L;
public void initialize(String EventName,final BA baa){
ba = baa;
event = EventName;
BA.applicationContext.bindService(new Intent(BA.applicationContext.getApplicationContext(), CleanerService.class),
mServiceConnection, Context.BIND_AUTO_CREATE);
}
public void ScanCache(){
if (mCleanerService != null && !mCleanerService.isScanning() &&
!mCleanerService.isCleaning()) {
mCleanerService.scanCache();
}
}
public void CleanCache(){
if (mCleanerService != null && !mCleanerService.isScanning() &&
!mCleanerService.isCleaning() && mCleanerService.getCacheSize() > 0) {
mCleanerService.cleanCache();
}
}
@Override
public void onScanStarted(Context context) {
// TODO Auto-generated method stub
BA.Log("Scan Started");
ba.raiseEvent(this, event+"_onscanstarted",new Object[]{});
}
@Override
public void onScanProgressUpdated(Context context, int current, int max) {
// TODO Auto-generated method stub
ba.raiseEvent(this, event+"_onscanprogress", new Object[]{current,max});
}
@Override
public void onScanCompleted(Context context, List<AppsListItem> apps) {
// TODO Auto-generated method stub
int n;
L = new ArrayList<>();
for(n=0;n<apps.size();n++){
AppsListItem item = apps.get(n);
L.add(new Object[]{item.getApplicationName(),item.getPackageName(),item.getCacheSize(),item.getApplicationIcon()});
}
ba.raiseEvent(this, event+"_onscancompleted", new Object[]{L});
}
@Override
public void onCleanStarted(Context context) {
// TODO Auto-generated method stub
ba.raiseEvent(this, event+"_oncleanstarted", new Object[]{});
}
@Override
public void onCleanCompleted(Context context, long cacheSize) {
// TODO Auto-generated method stub
ba.raiseEvent(this, event+"_oncleancompleted", new Object[]{cacheSize});
updateStorageUsage();
}
private void updateStorageUsage() {
StatFs stat = new StatFs(Environment.getDataDirectory().getAbsolutePath());
totalmem = (long) stat.getBlockCount() * (long) stat.getBlockSize();
long medMemory = mCleanerService != null ? mCleanerService.getCacheSize() : 0;
long lowMemory = (long) stat.getAvailableBlocks() * (long) stat.getBlockSize();
freemem = totalmem - medMemory - lowMemory;
}
}