Lightning browser with I2P configuration
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

444 lines
12 KiB

/*
* Copyright 2014 A.C.R. Development
*/
package acr.browser.lightning;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.Browser;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.*;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class PrivacySettingsActivity extends ThemableSettingsActivity {
// mPreferences variables
private static final int API = android.os.Build.VERSION.SDK_INT;
private PreferenceManager mPreferences;
private CheckBox cbLocation, cbSavePasswords, cbClearCacheExit, cbClearHistoryExit,
cbClearCookiesExit, cbThirdParty;
private Context mContext;
private boolean mSystemBrowser;
private Handler messageHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.privacy_settings);
// set up ActionBar
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mPreferences = PreferenceManager.getInstance();
mSystemBrowser = mPreferences.getSystemBrowserPresent();
mContext = this;
initialize();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
finish();
return true;
}
private void initialize() {
RelativeLayout rLocation, rSavePasswords, rClearCacheExit, rClearHistoryExit, rClearCookiesExit, rClearCache, rClearHistory, rClearCookies, rThirdParty;
rLocation = (RelativeLayout) findViewById(R.id.rLocation);
rSavePasswords = (RelativeLayout) findViewById(R.id.rSavePasswords);
rClearCacheExit = (RelativeLayout) findViewById(R.id.rClearCacheExit);
rClearHistoryExit = (RelativeLayout) findViewById(R.id.rClearHistoryExit);
rClearCookiesExit = (RelativeLayout) findViewById(R.id.rClearCookiesExit);
rClearCache = (RelativeLayout) findViewById(R.id.rClearCache);
rClearHistory = (RelativeLayout) findViewById(R.id.rClearHistory);
rClearCookies = (RelativeLayout) findViewById(R.id.rClearCookies);
rThirdParty = (RelativeLayout) findViewById(R.id.rThirdParty);
cbLocation = (CheckBox) findViewById(R.id.cbLocation);
cbSavePasswords = (CheckBox) findViewById(R.id.cbSavePasswords);
cbClearCacheExit = (CheckBox) findViewById(R.id.cbClearCacheExit);
cbClearHistoryExit = (CheckBox) findViewById(R.id.cbClearHistoryExit);
cbClearCookiesExit = (CheckBox) findViewById(R.id.cbClearCookiesExit);
cbThirdParty = (CheckBox) findViewById(R.id.cbThirdParty);
cbLocation.setChecked(mPreferences.getLocationEnabled());
cbSavePasswords.setChecked(mPreferences.getSavePasswordsEnabled());
cbClearCacheExit.setChecked(mPreferences.getClearCacheExit());
cbClearHistoryExit.setChecked(mPreferences.getClearHistoryExitEnabled());
cbClearCookiesExit.setChecked(mPreferences.getClearCookiesExitEnabled());
cbThirdParty.setChecked(mPreferences.getBlockThirdPartyCookiesEnabled());
cbThirdParty.setEnabled(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP);
rLocation(rLocation);
rSavePasswords(rSavePasswords);
rClearCacheExit(rClearCacheExit);
rClearHistoryExit(rClearHistoryExit);
rClearCookiesExit(rClearCookiesExit);
rClearCache(rClearCache);
rClearHistory(rClearHistory);
rClearCookies(rClearCookies);
rThirdParty(rThirdParty);
cbLocation(cbLocation);
cbSavePasswords(cbSavePasswords);
cbClearCacheExit(cbClearCacheExit);
cbClearHistoryExit(cbClearHistoryExit);
cbClearCookiesExit(cbClearCookiesExit);
cbThirdParty(cbThirdParty);
TextView syncHistory = (TextView) findViewById(R.id.isBrowserAvailable);
RelativeLayout layoutSyncHistory = (RelativeLayout) findViewById(R.id.rBrowserHistory);
final CheckBox cbSyncHistory = (CheckBox) findViewById(R.id.cbBrowserHistory);
layoutSyncHistory.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
cbSyncHistory.setChecked(!cbSyncHistory.isChecked());
}
});
cbSyncHistory.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mPreferences.setSyncHistoryEnabled(isChecked);
}
});
if (!mSystemBrowser) {
cbSyncHistory.setChecked(false);
cbSyncHistory.setEnabled(false);
syncHistory.setText(getResources().getString(R.string.stock_browser_unavailable));
} else {
cbSyncHistory.setEnabled(true);
cbSyncHistory.setChecked(mPreferences.getSyncHistoryEnabled());
syncHistory.setText(getResources().getString(R.string.stock_browser_available));
}
messageHandler = new MessageHandler(mContext);
}
private static class MessageHandler extends Handler {
Context mHandlerContext;
public MessageHandler(Context context) {
this.mHandlerContext = context;
}
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
Utils.showToast(mHandlerContext,
mHandlerContext.getResources()
.getString(R.string.message_clear_history));
break;
case 2:
Utils.showToast(
mHandlerContext,
mHandlerContext.getResources().getString(
R.string.message_cookies_cleared));
break;
}
super.handleMessage(msg);
}
}
private void cbLocation(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mPreferences.setLocationEnabled(isChecked);
}
});
}
private void cbSavePasswords(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mPreferences.setSavePasswordsEnabled(isChecked);
}
});
}
private void cbClearCacheExit(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mPreferences.setClearCacheExit(isChecked);
}
});
}
private void cbClearHistoryExit(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mPreferences.setClearHistoryExitEnabled(isChecked);
}
});
}
private void cbThirdParty(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mPreferences.setBlockThirdPartyCookiesEnabled(isChecked);
}
});
}
private void cbClearCookiesExit(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mPreferences.setClearCookiesExitEnabled(isChecked);
}
});
}
private void rLocation(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
cbLocation.setChecked(!cbLocation.isChecked());
}
});
}
private void rSavePasswords(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
cbSavePasswords.setChecked(!cbSavePasswords.isChecked());
}
});
}
private void rClearCacheExit(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
cbClearCacheExit.setChecked(!cbClearCacheExit.isChecked());
}
});
}
private void rThirdParty(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cbThirdParty.setChecked(!cbThirdParty.isChecked());
} else {
Utils.showToast(mContext, mContext.getString(R.string.available_lollipop));
}
}
});
}
private void rClearHistoryExit(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
cbClearHistoryExit.setChecked(!cbClearHistoryExit.isChecked());
}
});
}
private void rClearCookiesExit(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
cbClearCookiesExit.setChecked(!cbClearCookiesExit.isChecked());
}
});
}
private void rClearHistory(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(PrivacySettingsActivity.this); // dialog
builder.setTitle(getResources().getString(R.string.title_clear_history));
builder.setMessage(getResources().getString(R.string.dialog_history))
.setPositiveButton(getResources().getString(R.string.action_yes),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
Thread clear = new Thread(new Runnable() {
@Override
public void run() {
clearHistory();
}
});
clear.start();
}
})
.setNegativeButton(getResources().getString(R.string.action_no),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
}
}).show();
}
});
}
private void rClearCookies(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(PrivacySettingsActivity.this); // dialog
builder.setTitle(getResources().getString(R.string.title_clear_cookies));
builder.setMessage(getResources().getString(R.string.dialog_cookies))
.setPositiveButton(getResources().getString(R.string.action_yes),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
Thread clear = new Thread(new Runnable() {
@Override
public void run() {
clearCookies();
}
});
clear.start();
}
})
.setNegativeButton(getResources().getString(R.string.action_no),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
}
}).show();
}
});
}
private void rClearCache(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
clearCache();
}
});
}
public void clearCache() {
WebView webView = new WebView(this);
webView.clearCache(true);
webView.destroy();
Utils.showToast(mContext, getResources().getString(R.string.message_cache_cleared));
}
@SuppressWarnings("deprecation")
public void clearHistory() {
deleteDatabase(HistoryDatabase.DATABASE_NAME);
WebViewDatabase m = WebViewDatabase.getInstance(this);
m.clearFormData();
m.clearHttpAuthUsernamePassword();
if (API < 18) {
m.clearUsernamePassword();
WebIconDatabase.getInstance().removeAllIcons();
}
if (mSystemBrowser) {
try {
Browser.clearHistory(getContentResolver());
} catch (Exception ignored) {
}
}
Utils.trimCache(this);
messageHandler.sendEmptyMessage(1);
}
@SuppressWarnings("deprecation")
public void clearCookies() {
// TODO Break out web storage deletion into its own option/action
// TODO clear web storage for all sites that are visited in Incognito mode
WebStorage storage = WebStorage.getInstance();
storage.deleteAllData();
CookieManager c = CookieManager.getInstance();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
c.removeAllCookies(null);
} else {
CookieSyncManager.createInstance(this);
c.removeAllCookie();
}
messageHandler.sendEmptyMessage(2);
}
}