update VPN app manager to load async, and sort selected to top
This commit is contained in:
parent
1c7eedd4e4
commit
5b9eedba1d
|
@ -79,7 +79,7 @@
|
||||||
android:name=".settings.SettingsPreferences"
|
android:name=".settings.SettingsPreferences"
|
||||||
android:label="@string/app_name" />
|
android:label="@string/app_name" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.AppManager"
|
android:name=".ui.AppManagerActivity"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:theme="@style/Theme.AppCompat" />
|
android:theme="@style/Theme.AppCompat" />
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,7 @@
|
||||||
android:name=".settings.SettingsPreferences"
|
android:name=".settings.SettingsPreferences"
|
||||||
android:label="@string/app_name" />
|
android:label="@string/app_name" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.AppManager"
|
android:name=".ui.AppManagerActivity"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:theme="@style/Theme.AppCompat" />
|
android:theme="@style/Theme.AppCompat" />
|
||||||
|
|
||||||
|
|
|
@ -12,9 +12,7 @@ import java.net.URLDecoder;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.text.NumberFormat;
|
import java.text.NumberFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Random;
|
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
|
@ -24,7 +22,7 @@ import org.torproject.android.service.TorService;
|
||||||
import org.torproject.android.service.TorServiceConstants;
|
import org.torproject.android.service.TorServiceConstants;
|
||||||
import org.torproject.android.service.util.TorServiceUtils;
|
import org.torproject.android.service.util.TorServiceUtils;
|
||||||
import org.torproject.android.settings.SettingsPreferences;
|
import org.torproject.android.settings.SettingsPreferences;
|
||||||
import org.torproject.android.ui.AppManager;
|
import org.torproject.android.ui.AppManagerActivity;
|
||||||
import org.torproject.android.ui.ImageProgressView;
|
import org.torproject.android.ui.ImageProgressView;
|
||||||
import org.torproject.android.ui.PromoAppsActivity;
|
import org.torproject.android.ui.PromoAppsActivity;
|
||||||
import org.torproject.android.ui.Rotate3dAnimation;
|
import org.torproject.android.ui.Rotate3dAnimation;
|
||||||
|
@ -617,7 +615,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
|
|
||||||
if (enable) {
|
if (enable) {
|
||||||
if (PermissionManager.isLollipopOrHigher()) //let the user choose the apps
|
if (PermissionManager.isLollipopOrHigher()) //let the user choose the apps
|
||||||
startActivityForResult(new Intent(OrbotMainActivity.this, AppManager.class), REQUEST_VPN_APPS_SELECT);
|
startActivityForResult(new Intent(OrbotMainActivity.this, AppManagerActivity.class), REQUEST_VPN_APPS_SELECT);
|
||||||
else
|
else
|
||||||
startActivity(new Intent(OrbotMainActivity.this, VPNEnableActivity.class));
|
startActivity(new Intent(OrbotMainActivity.this, VPNEnableActivity.class));
|
||||||
} else
|
} else
|
||||||
|
|
|
@ -4,21 +4,16 @@
|
||||||
package org.torproject.android.settings;
|
package org.torproject.android.settings;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.CheckBoxPreference;
|
|
||||||
import android.preference.ListPreference;
|
import android.preference.ListPreference;
|
||||||
import android.preference.Preference;
|
import android.preference.Preference;
|
||||||
import android.preference.Preference.OnPreferenceChangeListener;
|
import android.preference.Preference.OnPreferenceChangeListener;
|
||||||
import android.preference.Preference.OnPreferenceClickListener;
|
import android.preference.Preference.OnPreferenceClickListener;
|
||||||
import android.preference.PreferenceActivity;
|
import android.preference.PreferenceActivity;
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import org.torproject.android.OrbotApp;
|
import org.torproject.android.OrbotApp;
|
||||||
import org.torproject.android.R;
|
import org.torproject.android.R;
|
||||||
import org.torproject.android.ui.AppManager;
|
|
||||||
import org.torproject.android.service.util.TorServiceUtils;
|
import org.torproject.android.service.util.TorServiceUtils;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
|
@ -6,6 +6,7 @@ package org.torproject.android.ui;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
@ -15,38 +16,35 @@ import org.torproject.android.R;
|
||||||
import org.torproject.android.service.util.TorServiceUtils;
|
import org.torproject.android.service.util.TorServiceUtils;
|
||||||
import org.torproject.android.service.vpn.TorifiedApp;
|
import org.torproject.android.service.vpn.TorifiedApp;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.ProgressDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.SharedPreferences.Editor;
|
import android.content.SharedPreferences.Editor;
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.ResolveInfo;
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuInflater;
|
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.CheckBox;
|
import android.widget.CheckBox;
|
||||||
import android.widget.CompoundButton;
|
import android.widget.CompoundButton;
|
||||||
import android.widget.CompoundButton.OnCheckedChangeListener;
|
import android.widget.CompoundButton.OnCheckedChangeListener;
|
||||||
import android.widget.GridView;
|
import android.widget.GridView;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.ListAdapter;
|
import android.widget.ListAdapter;
|
||||||
import android.widget.ListView;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
public class AppManager extends AppCompatActivity implements OnCheckedChangeListener, OnClickListener, OrbotConstants {
|
public class AppManagerActivity extends AppCompatActivity implements OnCheckedChangeListener, OnClickListener, OrbotConstants {
|
||||||
|
|
||||||
private GridView listApps;
|
private GridView listApps;
|
||||||
|
private ListAdapter adapterApps;
|
||||||
private final static String TAG = "Orbot";
|
private final static String TAG = "Orbot";
|
||||||
PackageManager pMgr = null;
|
PackageManager pMgr = null;
|
||||||
|
|
||||||
|
@ -61,83 +59,43 @@ public class AppManager extends AppCompatActivity implements OnCheckedChangeList
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
class OnAutoClickListener implements Button.OnClickListener {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
private int status;
|
if (item.getItemId() == android.R.id.home)
|
||||||
public OnAutoClickListener(int status){
|
{
|
||||||
this.status = status;
|
finish();
|
||||||
}
|
return true;
|
||||||
@SuppressWarnings("unchecked")
|
}
|
||||||
public void onClick(View button){
|
|
||||||
GridView listView;
|
|
||||||
ViewGroup viewGroup;
|
|
||||||
View parentView, currentView;
|
|
||||||
ArrayAdapter<TorifiedApp> adapter;
|
|
||||||
TorifiedApp app;
|
|
||||||
CheckBox box;
|
|
||||||
float buttonId;
|
|
||||||
boolean[] isSelected;
|
|
||||||
int posI, selectedI, lvSz;
|
|
||||||
|
|
||||||
buttonId = button.getId();
|
|
||||||
listView = (GridView) findViewById(R.id.applistview);
|
|
||||||
lvSz = listView.getCount();
|
|
||||||
isSelected = new boolean[lvSz];
|
|
||||||
|
|
||||||
selectedI = -1;
|
|
||||||
|
|
||||||
if (this.status == 0){
|
|
||||||
Log.d(TAG, "Proxifying ALL");
|
|
||||||
}else if (this.status == 1){
|
|
||||||
Log.d(TAG, "Proxifying NONE");
|
|
||||||
}else {
|
|
||||||
Log.d(TAG, "Proxifying invert");
|
|
||||||
}
|
|
||||||
|
|
||||||
Context context = getApplicationContext();
|
|
||||||
SharedPreferences prefs = TorServiceUtils.getSharedPrefs(context);
|
|
||||||
ArrayList<TorifiedApp> apps = getApps(context, prefs);
|
|
||||||
parentView = (View) findViewById(R.id.applistview);
|
|
||||||
viewGroup = (ViewGroup) listView;
|
|
||||||
|
|
||||||
adapter = (ArrayAdapter<TorifiedApp>) listApps.getAdapter();
|
|
||||||
if (adapter == null){
|
|
||||||
Log.w(TAG, "List adapter is null. Getting apps.");
|
|
||||||
loadApps(prefs);
|
|
||||||
adapter = (ArrayAdapter<TorifiedApp>) listApps.getAdapter();
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0 ; i < adapter.getCount(); ++i){
|
|
||||||
app = (TorifiedApp) adapter.getItem(i);
|
|
||||||
currentView = adapter.getView(i, parentView, viewGroup);
|
|
||||||
box = (CheckBox) currentView.findViewById(R.id.itemcheck);
|
|
||||||
|
|
||||||
if (this.status == 0){
|
|
||||||
app.setTorified(true);
|
|
||||||
}else if (this.status == 1){
|
|
||||||
app.setTorified(false);
|
|
||||||
}else {
|
|
||||||
app.setTorified(!app.isTorified());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (box != null)
|
|
||||||
box.setChecked(app.isTorified());
|
|
||||||
|
|
||||||
}
|
|
||||||
saveAppSettings(context);
|
|
||||||
loadApps(prefs);
|
|
||||||
}
|
|
||||||
}**/
|
|
||||||
|
|
||||||
|
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
listApps = (GridView)findViewById(R.id.applistview);
|
listApps = (GridView) findViewById(R.id.applistview);
|
||||||
|
|
||||||
mPrefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
|
mPrefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
|
||||||
loadApps(mPrefs);
|
|
||||||
|
|
||||||
|
new AsyncTask<Void, Void, Void>() {
|
||||||
|
private ProgressDialog dialog;
|
||||||
|
|
||||||
|
protected void onPreExecute() {
|
||||||
|
// Pre Code
|
||||||
|
dialog = new ProgressDialog(AppManagerActivity.this);
|
||||||
|
dialog.show();
|
||||||
|
}
|
||||||
|
protected Void doInBackground(Void... unused) {
|
||||||
|
loadApps(mPrefs);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
protected void onPostExecute(Void unused) {
|
||||||
|
listApps.setAdapter(adapterApps);
|
||||||
|
dialog.cancel();
|
||||||
|
}
|
||||||
|
}.execute();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SharedPreferences mPrefs = null;
|
SharedPreferences mPrefs = null;
|
||||||
|
@ -147,19 +105,17 @@ public class AppManager extends AppCompatActivity implements OnCheckedChangeList
|
||||||
{
|
{
|
||||||
|
|
||||||
mApps = getApps(getApplicationContext(), prefs);
|
mApps = getApps(getApplicationContext(), prefs);
|
||||||
|
Collections.sort(mApps,new Comparator<TorifiedApp>() {
|
||||||
/*
|
|
||||||
Arrays.sort(apps, new Comparator<TorifiedApp>() {
|
|
||||||
public int compare(TorifiedApp o1, TorifiedApp o2) {
|
public int compare(TorifiedApp o1, TorifiedApp o2) {
|
||||||
if (o1.isTorified() == o2.isTorified()) return o1.getName().compareTo(o2.getName());
|
if (o1.isTorified() == o2.isTorified()) return o1.getName().compareTo(o2.getName());
|
||||||
if (o1.isTorified()) return -1;
|
if (o1.isTorified()) return -1;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
});*/
|
});
|
||||||
|
|
||||||
final LayoutInflater inflater = getLayoutInflater();
|
final LayoutInflater inflater = getLayoutInflater();
|
||||||
|
|
||||||
ListAdapter adapter = new ArrayAdapter<TorifiedApp>(this, R.layout.layout_apps_item, R.id.itemtext,mApps) {
|
adapterApps = new ArrayAdapter<TorifiedApp>(this, R.layout.layout_apps_item, R.id.itemtext,mApps) {
|
||||||
|
|
||||||
public View getView(int position, View convertView, ViewGroup parent) {
|
public View getView(int position, View convertView, ViewGroup parent) {
|
||||||
|
|
||||||
|
@ -189,7 +145,7 @@ public class AppManager extends AppCompatActivity implements OnCheckedChangeList
|
||||||
|
|
||||||
try {
|
try {
|
||||||
entry.icon.setImageDrawable(pMgr.getApplicationIcon(app.getPackageName()));
|
entry.icon.setImageDrawable(pMgr.getApplicationIcon(app.getPackageName()));
|
||||||
entry.icon.setOnClickListener(AppManager.this);
|
entry.icon.setOnClickListener(AppManagerActivity.this);
|
||||||
|
|
||||||
if (entry.box != null)
|
if (entry.box != null)
|
||||||
entry.icon.setTag(entry.box);
|
entry.icon.setTag(entry.box);
|
||||||
|
@ -202,7 +158,7 @@ public class AppManager extends AppCompatActivity implements OnCheckedChangeList
|
||||||
|
|
||||||
if (entry.text != null) {
|
if (entry.text != null) {
|
||||||
entry.text.setText(app.getName());
|
entry.text.setText(app.getName());
|
||||||
entry.text.setOnClickListener(AppManager.this);
|
entry.text.setOnClickListener(AppManagerActivity.this);
|
||||||
|
|
||||||
if (entry.box != null)
|
if (entry.box != null)
|
||||||
entry.text.setTag(entry.box);
|
entry.text.setTag(entry.box);
|
||||||
|
@ -210,7 +166,7 @@ public class AppManager extends AppCompatActivity implements OnCheckedChangeList
|
||||||
|
|
||||||
|
|
||||||
if (entry.box != null) {
|
if (entry.box != null) {
|
||||||
entry.box.setOnCheckedChangeListener(AppManager.this);
|
entry.box.setOnCheckedChangeListener(AppManagerActivity.this);
|
||||||
entry.box.setTag(app);
|
entry.box.setTag(app);
|
||||||
entry.box.setChecked(app.isTorified());
|
entry.box.setChecked(app.isTorified());
|
||||||
|
|
||||||
|
@ -220,7 +176,6 @@ public class AppManager extends AppCompatActivity implements OnCheckedChangeList
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
listApps.setAdapter(adapter);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,7 @@
|
||||||
android:name=".settings.SettingsPreferences"
|
android:name=".settings.SettingsPreferences"
|
||||||
android:label="@string/app_name" />
|
android:label="@string/app_name" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.AppManager"
|
android:name=".ui.AppManagerActivity"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:theme="@style/Theme.AppCompat" />
|
android:theme="@style/Theme.AppCompat" />
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue