Skip to content

Commit

Permalink
Merge pull request #32 from mgeier63/master
Browse files Browse the repository at this point in the history
more patches / features
  • Loading branch information
oversecio authored Jan 20, 2019
2 parents bd2e0c8 + c180448 commit 987a439
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 11 deletions.
24 changes: 23 additions & 1 deletion app/src/main/java/io/oversec/one/CrashHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
import android.content.Context;
import android.content.Intent;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
Expand All @@ -24,12 +26,13 @@ public void uncaughtException(Thread thread, Throwable ex) {
ex.printStackTrace();

String stackTrace = buildStackTrace(ex);
String logcat = grabLogcat();

if (!hasFlagFile(app.getApplicationContext())) {

AlarmManager am = (AlarmManager) app.getSystemService(Context.ALARM_SERVICE);

Intent intent = CrashActivity.buildIntent(app, thread.getName(), stackTrace);
Intent intent = CrashActivity.buildIntent(app, thread.getName(), stackTrace+"\nLOGCAT:\n"+logcat);
PendingIntent pi = PendingIntent.getActivity(app, 0, intent, 0);

//TODO: maybe write some counter value to disk and prevent an endless loop ??
Expand Down Expand Up @@ -86,4 +89,23 @@ private static String buildStackTrace(Throwable ex) {
ex.printStackTrace(printWriter);
return result.toString();
}

private static String grabLogcat() {
try {
Process process = Runtime.getRuntime().exec("logcat -d");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

StringBuilder log = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
log.append(line);
log.append("\n");
}

return log.toString();

} catch (IOException e) {
return null;
}
}
}
56 changes: 47 additions & 9 deletions app/src/main/java/io/oversec/one/ui/AppsFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import android.widget.CompoundButton;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.TextView;

import io.oversec.one.Core;
Expand Down Expand Up @@ -46,6 +47,8 @@ public class AppsFragment extends Fragment implements WithHelp, AppsReceiver.IAp
private PackageManager mPackageManager;
private LinearLayoutManager mLayoutManager;
private boolean mPackageChangeReceiverRegistered;
private RadioButton mRbSortChecked,mRbSortName;
private CompoundButton.OnCheckedChangeListener mRbSortCheckedChangeListener;

public void reload(int pos) {
mAdapter.notifyItemChanged(pos);
Expand All @@ -55,20 +58,42 @@ public void reload() {
//TODO: When reloading after app config activity should restore current scroll positionm or only refresh item/view for that app

mPackages = getPackages();
Collections.sort(mPackages, new Comparator<ApplicationInfo>() {

@Override
public int compare(ApplicationInfo lhs, ApplicationInfo rhs) {
String s1 = mPackageManager.getApplicationLabel(lhs).toString();
String s2 = mPackageManager.getApplicationLabel(rhs).toString();
return s1.compareTo(s2);
}
});
applySort();
mAdapter = new MyAdapter();
mListView.setAdapter(mAdapter);

}

private void applySort() {

if (mRbSortName.isChecked()) {
Collections.sort(mPackages, new ApplicationInfo.DisplayNameComparator(mPackageManager));
}
else {
Collections.sort(mPackages, new Comparator<ApplicationInfo>() {
@Override
public int compare(ApplicationInfo o1, ApplicationInfo o2) {
boolean r1 = mDb.isAppEnabled(o1.packageName);
boolean r2 = mDb.isAppEnabled(o2.packageName);
int r = Boolean.compare(r2,r1);
if (r==0) {
CharSequence s1 = mPackageManager.getApplicationLabel(o1);
if (s1 == null) {
s1 = o1.packageName;
}
CharSequence s2 = mPackageManager.getApplicationLabel(o2);
if (s2 == null) {
s2 = o2.packageName;
}
r = String.valueOf(s1).compareTo(String.valueOf(s2));
}
return r;
}
});
}

}

@Override
public void onAppChanged(Context ctx, String action, String packagename) {
reload();
Expand Down Expand Up @@ -211,6 +236,18 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
mLayoutManager = new LinearLayoutManager(getActivity());
mListView.setLayoutManager(mLayoutManager);

mRbSortCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
applySort();
mAdapter.notifyDataSetChanged();
}
};

mRbSortChecked = ((RadioButton) view.findViewById(R.id.rbChecked));
mRbSortName = ((RadioButton) view.findViewById(R.id.rbName));
mRbSortChecked.setOnCheckedChangeListener(mRbSortCheckedChangeListener);
mRbSortName.setOnCheckedChangeListener(mRbSortCheckedChangeListener);

reload();
AppsReceiver.Companion.addListener(this);
Expand Down Expand Up @@ -240,6 +277,7 @@ private void checkAll(boolean b) {
}



private List<ApplicationInfo> getPackages() {


Expand Down
33 changes: 33 additions & 0 deletions app/src/main/res/layout/fragment_main_apps.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,39 @@
gotit:help_alias="main_apps"
gotit:msg="@string/tooltip_apps_fragment" />



<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/main_tab_apps__sort"/>
<RadioGroup android:id="@+id/rgSort"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>

<RadioButton
android:id="@+id/rbName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/main_tab_apps__sortbyname"
android:checked="true"/>

<RadioButton
android:id="@+id/rbChecked"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/main_tab_apps__sortbychecked"
android:checked="false"/>
</RadioGroup>
</LinearLayout>

<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/plist"
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/raw/changelog.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
### 1.5.8
- added italian translation (thanks to @unbranched)
- fixed an issue with chinese translation
- added a sort option for apps
- fixed remaining user reports crashes

### 1.5.7
Expand Down

0 comments on commit 987a439

Please sign in to comment.